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()
ただし、次のように日本語等が含まれている場合
#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()
と一度バイナリファイルとして開くと読み込める。