技術は使ってなんぼ

自分が得たものを誰かの役に立てたい

【データ分析】【小ネタ】pandasでグラフ軸を等分割表示したい時に便利な、pandas版tickerを作ってみた。

データ分析時におけるグラフ化あるある

データ分析をやるときって、エクセルやCSVファイルを読み込むためにpandasのDataFrame型を選択する人は多いのではないでしょうか?


そうすると、matplotlibでグラフを使って可視化しようとするとき、わざわざnumpyやlist型に置き換えると面倒ですよね。


また、大量のデータをmatplotlibでグラフ表示しようとすると、表示するまでにものすごく時間がかかる場合があります。


そういう時、pandasのplotメソッドを利用すると、一瞬で表示できます。DataFrame型はそのまま使いましょう。


なので私は基本的にデータ分析ではmatplotlibよりもpd.plotを使うことをオススメします


ただし、大量のデータゆえに、x軸がこんなことになることも。。

f:id:yonesuke0716:20200829191504p:plain
x軸のラベルが大量に重なる悲劇。。


これではX軸が全く読めませんね。。


今回はこの手の問題を解決するためにタイトルのことをやってみました。

なぜpandas版tickerを作ろうと思ったのか?

matplotlibにはtickerというメソッドがあり、数値を入れるだけで適切に等間隔に分けてくれます。


pd.plotにもあるかな?と思って調べてみましたが、私は見つけられませんでした。。
(こういうのあるよ!というご存知の方がいらっしゃいましたらコメントいただけると幸いです。)


引数にxticker、ytickerというものがあり、ここにリストを渡してあげると、その個数に応じて分けてくれます。


例えばxticker=[0, 10000, 20000, 30000]のようにすれば0, 10000, 20000, 30000でグラフを4等分にしてくれます。


しかしmatplotlibのように、数字入れるだけで適切に等分してくれる方が楽ですよね。


等分数を色々変えて試したい時に、毎回データ数からいくつになるかなんて計算するのはとても面倒です!


なので、tickerみたく、数値入れると等分できる関数を自前で作りました。

自前で作る、pandas版ticker「pd_ticker」

以下のソースコードを作ってみました。

# pandas用ticker関数
def pd_ticker(df, sep_num):
    x_separate_num = sep_num
    ticks_list = []
    add_val = int(df.shape[0] / x_separate_num)
    for i in range(x_separate_num):
        if i == 0:
            ticks_list.append(i)
        else:
            ticks_list.append(add_val*i)
    return ticks_list 
    
#使用時
x_list = pd_ticker(df, 4)
df.plot(xticks=x_list )

使い方

python知ってる人なら、見れば大体分かるかと思いますが、基本コピペでOKです。


「df」と書かれているところに、対象となるグラフ化したいDataFrame型を入れてください。


pd_tickerの2つ目の引数には等分したい数字を入れればOKです。


これを使えば先ほどのグラフもこんな感じになります。

f:id:yonesuke0716:20200829192307p:plain
自前pd_ticker!


うん、これならX軸が読める。


良かったら使ってみてください。


使った方や興味のある方はコメント等いただけると幸いです。