pandasでグラフを描くときのTips
pandasでDataFrameとしてデータをインポートしてから、とりあえずグラフ化して分布を確認したいことがよくあります。
そのときに個人的によく使うコードをメモ。
細かい設定とかでビジュアル整えようと思ったら、いくらでも設定あるらしいのですが、実際にpythonでどこまで労力をかけて可視化を努力するかが問題なんですよね。
個人的には、pythonでの可視化は、ちゃんとしたデータの可視化というよりは、自分で分析の方針を立てるための事前調査とかのレベルで使ってます。つまり、細かいところにはあまりこだわらず、自分でデータの傾向が読み取れればそれでよいというレベル。
他人に共有したり、レポーティングしたりする場合は、pythonでのグラフも使いますが、必要に応じてtableauなどの別ルーツを使ったりもします。
大体、SQLでアクセスしたデータをDataFrameとしてpythonで読み込み、いろいろ可視化してみる(データの分布自体の可視化)→統計モデリングか機械学習→結果をまた可視化(パラメータの分布を可視化)という感じです。
pd.DataFrame.plot()メソッド
まずは準備としてライブラリをインポートします。
※jupyter notebookで書くのを前提にしています。一応。
データは適当にDataFrameを作成。
In [1]: import matplotlib.pyplot as plt import pandas as pd import seaborn as sns sns.set_style('whitegrid') %matplotlib inline #ライブラリのインポートとか In [2]: df_sample = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) df_sample.columns = ['a','b','c'] df_sample #適当なデータフレームを作成 out [2]: a b c ーーーーー 0| 1 2 3 1| 4 5 6 2| 7 8 9
DataFrameの一番簡単な可視化は、.plotメソッド。
デフォルトでは線グラフで描画されます。
df_sample.plot()
これだけで最低限の可視化は出来ます。
棒グラフ
何も考えずに棒グラフにしたい場合。
df_sample.plot(kind='bar')
ヒストグラム
値の度数分布を可視化したい場合。
df_sample.plot(kind='hist',bins=10)
引数binsに、分布をいくつに分解したいかを入力します。
また、ヒストグラムに関しては、matplotlib.pyplotを使って下記のような書き方もよくします。データによりますが、主にいくつかの系列別に分布を可視化したい場合に使います。
多少複雑になるので、DataFrameのメソッドを使うよりも小回りが効く感じです。
In [3]: df_sample = pd.DataFrame([[1,1,1,1,1,1,2,2,2,3,3,4,5,6,7,8,9,10,11,12],[1,1,1,1,1,2,2,2,3,3,3,4,5,6,7,8,9,10,11,12]]) df_sample = df_sample.T df_sample.columns = ['a','b'] df_sample #ヒストグラム的な適当なサンプルデータ out[3]: a b ーーー 0| 1 1 1| 1 1 2| 1 1 3| 1 1 4| 1 1 5| 1 2 6| 2 2 7| 2 2 8| 2 3 9| 3 3 10| 3 3 ... In [4]: plt.hist(df_sample['a'], bins=12, alpha=0.2, histtype='stepfilled', color='r', range = (0, 12)) plt.hist(df_sample['b'], bins=12, alpha=0.2, histtype='stepfilled', color='b', range = (0, 12)) plt.xlabel('x_label') plt.ylabel('y_label') plt.title('Title') plt.legend(['a','b']) #matplotlib.pyplotで描画
plt.hitsでヒストグラムを描画して、引数として、alphaはグラフの透過度です。
plt.legend()では、系列と色の関係の説明を付けてます。