1

私はpylabで散布図をまとめようとしていますが、これまでのところ惨めに失敗しています。私はプログラマーではないので、ご容赦ください。

約 6 万行の csv ファイルに含まれる 2 列のデータで構成されるデータ セットがあります。サンプルは次のとおりです。

100000000012640,0.888888888888889
100000000105442,0.777777777777778
100000000206866,1.0
100000000304930,0.777777777777778
100000000583236,0.888888888888889
100000000683528,0.777777777777778
718435316,1.0
718494043,0.777777777777778
718602951,0.777777777777778
718660499,0.777777777777778
718766852,1.0
718795104,1.0
718862926,0.777777777777778
718927526,0.777777777777778
718952836,1.0
719102865,0.777777777777778
719156726,1.0
719213511,1.0
719425334,1.0
719452158,1.0
719493947,0.777777777777778
719566609,1.0
720090346,0.777777777777778
720127760,0.777777777777778
720143948,0.944444444444444
720221566,1.0
720256688,0.944444444444444
720349817,0.777777777777778
720380601,0.777777777777778
720446322,1.0
720524740,1.0
720560353,1.0
720594066,0.777777777777778
720673388,1.0
720716865,0.777777777777778
720730249,1.0
720774433,1.0

私の目標は、このデータの散布図を描くことです。最初の行のデータを x 軸に、2 番目の行のデータを y 軸にします。x 軸の値は降順で並べ替えられ、示されている値から始まり、999963505 で終わります。y 軸の値は常に 0 から 1 の間です。

これが私が試したことです(「ipython --pylab」を使用):

data = loadtxt('./data/OD-4322/facebookID.csv', unpack=True, dtype=('float', 'float'), delimiter=',')
scatter(data[0],data[1])

これにより、散布図に似たものが得られますが、探しているものとはまったく異なります。

http://content.screencast.com/users/FernandoGarridoVaz/folders/Jing/media/a0df81c5-2dbb-4e93-8e18-3c9db07728f5/00000793.png

(私は画像を直接投稿しますが、サイトでの私の評判ではまだ許可されていません)。

x 軸が値と同じ範囲になるようにするにはどうすればよいですか? プロットのポイントがすべて 0 と 1 に積み上げられているのはなぜですか?実際には 0 と 1 の間のあちこちに分布しています

4

1 に答える 1

1

Pylab は numpy を使用します。提供されているデータ形式はこちらで調べることができます。最初の列で非常に大きな数値を使用し、浮動小数点倍精度は必要ありませんが、高整数値は必要です。貼り付けたサンプル データを見てください。

>>> x = np.loadtxt('./temp.dat', unpack=True, dtype=('float'), delimiter=',')[0] 
>>> x
array([  1.00000000e+14,   1.00000000e+14,   1.00000000e+14,
     1.00000000e+14,   1.00000001e+14,   1.00000001e+14])
>>> x = np.loadtxt('./temp.dat', unpack=True, dtype=('uint64'), delimiter=',')[0]
>>> x
array([100000000012640, 100000000105442, 100000000206866, 100000000304930,
   100000000583236, 100000000683528], dtype=uint64)
>>> y = np.loadtxt('./temp.dat', unpack=True, dtype=('float'), delimiter=',')[1]
>>> scatter(x,y)

行で行っていることは、2 つの列のステートメントのscatter(data[0],data[1])直後に行われることに注意してください。loadtxt()最初の関数は、float として読み込んだ後のデータを表示します。「uint64」として読み込まれたデータを使用すると、散布図に役立ちます。

開始するのに適したポイント: matplotlib ギャラリー

編集してコメントに答え、入力データの読み取りをより詳細に制御します。

# create python lists to store the data
x_vals = []
y_vals = []
#open file and read in a list containing all lines as string
f = open("./temp.dat","r")
lines = f.readlines()
#Go through the lines
   #strip() takes away "\n" characters and such
   #split(",") creates a list of the string line splitted into (here: 2) substrings
for line in lines:
   x,y = line.strip().split(",")
   #append values to their lists and apply the right format
   x_vals.append(np.uint64(x))
   y_vals.append(np.float64(y))

scatter(x_vals,y_vals)
#or just plot the data as points using:
plot(x_vals,y_vals,"o")

データの最小値と最大値の範囲が非常に広いため、セットを小さい数値と大きい数値に分割すると、より良い結果が得られます

于 2013-02-26T23:38:43.333 に答える