takecの気まぐれブログ

プログラミング等の話題を気まぐれに

pythonでCSVファイルのプロット

CSVファイルからグラフをプロットする際にpythonは便利である。 グラフ描画用パッケージmatplotlibと数値計算パッケージnumpyを用いる。

CSVから numpy.loadtxt で ndarray として読み込む。

numpy.loadtxt — NumPy v1.12 Manual

次のようなファイルがある場合

0,0.000000e+00,0.000000,+0.00000000,0
1,1.000000e+00,1.000000,+0.38268343,0.146447
2,2.000000e+00,4.000000,+0.70710678,0.5
3,3.000000e+00,9.000000,+0.92387953,0.853553
4,4.000000e+00,16.000000,+1.00000000,1
5,5.000000e+00,25.000000,+0.92387953,0.853553
6,6.000000e+00,36.000000,+0.70710678,0.5
7,7.000000e+00,49.000000,+0.38268343,0.146447
8,8.000000e+00,64.000000,+0.00000000,1.49976e-32
9,9.000000e+00,81.000000,-0.38268343,0.146447
10,1.000000e+01,100.000000,-0.70710678,0.5
11,1.100000e+01,121.000000,-0.92387953,0.853553
12,1.200000e+01,144.000000,-1.00000000,1
13,1.300000e+01,169.000000,-0.92387953,0.853553
14,1.400000e+01,196.000000,-0.70710678,0.5
15,1.500000e+01,225.000000,-0.38268343,0.146447
import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt("data.csv", delimiter=",", usecols=(0,3))
print(data)

plt.plot(data[:,0],data[:,1])
plt.show()

f:id:takecccc:20170222220600p:plain

ただし、次のように日本語等が含まれている場合

#latin-1で表せない文字を含む場合
0,0.000000e+00,0.000000,+0.00000000,0
1,1.000000e+00,1.000000,+0.38268343,0.146447
2,2.000000e+00,4.000000,+0.70710678,0.5
3,3.000000e+00,9.000000,+0.92387953,0.853553
4,4.000000e+00,16.000000,+1.00000000,1
5,5.000000e+00,25.000000,+0.92387953,0.853553
6,6.000000e+00,36.000000,+0.70710678,0.5
7,7.000000e+00,49.000000,+0.38268343,0.146447
8,8.000000e+00,64.000000,+0.00000000,1.49976e-32
9,9.000000e+00,81.000000,-0.38268343,0.146447
10,1.000000e+01,100.000000,-0.70710678,0.5
11,1.100000e+01,121.000000,-0.92387953,0.853553
12,1.200000e+01,144.000000,-1.00000000,1
13,1.300000e+01,169.000000,-0.92387953,0.853553
14,1.400000e+01,196.000000,-0.70710678,0.5
15,1.500000e+01,225.000000,-0.38268343,0.146447
UnicodeDecodeError: 'cp932' codec can't decode byte 0x84 in position 22: illegal multibyte sequence

といったエラーが発生する。 日本語等を無視して読み込みたい場合は

import numpy as np
import matplotlib.pyplot as plt

with open("data_jp.csv", "rb") as f:
    data = np.loadtxt(f, delimiter=",", usecols=(0,3))
print(data)

plt.plot(data[:,0],data[:,1])
plt.show()

と一度バイナリファイルとして開くと読み込める。