覚え書きブログ

Pythonの覚え書き(グラフのプロット編)

Pythonでグラフをプロットするには、matplotlibライブラリのpylabのplotが標準的に用いられる。

>>> import matplotlib.pylab as plt
>>> import numpy as np
>>> plt.plot(np.random.rand(100))

f:id:hirotaka_hachiya:20151229120613p:plain

csvファイルで保存されたデータをプロットするには、pandasライブラリのdataframeのplotを使うとより簡単にできる。

>>> import pandas as pd
>>> import matplotlib.pylab as plt
>>> df=pd.read_csv('target_train.csv')
>>> df
           date  01202_total  04100_total  13102_total  14382_total  \
0    2014-06-01         9478        25450        17546        25345   
1    2014-06-02         7670        13704        11262        13743   
2    2014-06-03         6490        12963        10263        11643   
3    2014-06-04         6394        13736        11140        12249   
4    2014-06-05         7532        14293        11314        14167   
5    2014-06-06         8926        21808        15045        16145   
6    2014-06-07        10505        37080        22156        24072   
7    2014-06-08         9190        27868        16799        22463   
8    2014-06-09         8942        14602        10439        15175   
9    2014-06-10         9093        12221         8385        10856 
...  
>>> df.plot(x='date',y='01202_total')
>>> plt.show()

f:id:hirotaka_hachiya:20151229123116p:plain

ちなみに、このデータは、ある都市の1年間の宿泊者数の推移であり、下記のサイトからダウンロードすることができる。
https://datasciencelab.jp/compe/13?tab=compedetail

ただし、dataframeのplotだと表示する行数を指定することなど細かい設定をすることができない。細かい設定をしてプロットしたい場合は、やはりpylabのplotを使う方が良い。例えば、0~30行の範囲を指定して、さらに、x軸の値を日付などの文字列に変更などは、以下のようにできる。

>>> import pandas as pd
>>> import matplotlib.pylab as plt
>>> df=pd.read_csv('target_train.csv')
>>> h1, =plt.plot(df['01202_total'][0:30],label='01202_total')
>>> h2, =plt.plot(df['14382_total'][0:30],label='14382_total')
>>> plt.xticks(range(30),df['date'][0:30],rotation=90,size='small')
>>> plt.legend(handles=[h1,h2])
>>> plt.show()

f:id:hirotaka_hachiya:20151229181435p:plain

これを関数化して、指定したcsvファイルの指定した列の数値列を指定した行間プロットできるようにしたpythonスクリプトが下記からダウンロードできる。

https://drive.google.com/file/d/0B3uB4w2FEJbIVXRLUl8waVdfRHc/view?usp=sharing

f:id:hirotaka_hachiya:20151230112745p:plain
f:id:hirotaka_hachiya:20151230112907p:plain