csv形式で記録されているファイルからデータを読み込む. 以下のような内容のsample_data.csvという名前を持ったファイルがあるとしよう.このの中身を読み込む. csv形式では,データとデータの間が「,」で区切られている.(ファイルは,エクセルやメモ帳を使って準備してください)
#sample data 2014/6/26
-15,170
-13,172
-12,115
-10,120
-9,81
-7,52
-6,30
-4,18
-2,6
0,0
1,1
2,6
3,15
5,24
6,40
9,78
10,105
12,143
13,170
17,250
20,380
csv形式のファイルの中身を読み込んで,二つの配列に内容をコピーするプログラムである.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import numpy as np
file_id = 'sample_data.csv'
file_path = '/Users/kentaro/work_space/python/'
#file_path = './'
rfile = file_path + file_id
data = np.loadtxt(rfile, comments='#' ,delimiter=',')
print(data.shape)
x_csv = data[:,0]
y_csv = data[:,1]
print(x_csv)
print(y_csv)
|
実行結果は以下の通り,sample_data.csv内の情報を読み込んで,印字できている.
(21, 2)
[-15. -13. -12. -10. -9. -7. -6. -4. -2. 0. 1. 2. 3. 5. 6. 9. 10. 12. 13. 17. 20.]
[ 170. 172. 115. 120. 81. 52. 30. 18. 6. 0. 1. 6. 15. 24. 40. 78. 105. 143. 170. 250. 380.]
1行目:モジュールnumpyの取り込み.npと呼ぶことにする.
3,4行目:ファイル名をfile_idという変数に,ファイルの置き場所をfile_pathという変数に書く.
7行目:rfileという変数に,置き場所とファイル名を繋げた内容を書く.
9行目:numpyのloadtxtという命令でファイルの中身を読み込む. loadtxtの最初の引数には,ファイル名をかく.ここでは7行目で用意したrfileとする. 「comments=’#’」は,先頭に「#」がついた行はコメント行とみなして無視し,読み込まない. ファイルの1行目にある「#sample data 2014/6/26」の行が無視される. 「delimiter=’,’」は,データ間が「,」で区切られていることを指示している.
10行目:配列であるdataの大きさを.shpaeで調べて,印字している.ここでは,21行2列という結果である.
12,13行目:data[:,0]は,配列dataの1列目(0番列)の要素全てという意味である. 「:」の左と右に番号を書けば,操作の対象とする要素を指定できる.例えば,「0:5」と書き換えれば0番から5番までの要素が指定される. 指定した範囲の要素(ここでは全て)を新しい配列x_csvに格納している.
15,16行目:読み込んだ配列の印字.
Note
もしも上記のプログラムを実行して,「No such file or directory: ‘./sample_data.csv’」のようなエラーが出たら, (ファイル名などを間違えていないならば)PATHが通っていない可能性がある.PATH&Pythonなどをキーワードに検索をしてみよう. 環境変数辺りをいじる必要があるかもしれない.私の環境(Mac+Canopy)でも,なぜかエラーが出たので, 上記のコードでは 4行目でファイルのおいてある場所を明示的に書いた.PATHがちゃんと通っていたら, 5行目のような書き方や,あるいは何も指定しないでもよいはず.