目次
Pythonでグラフを作成する
今回はPythonにおけるグラフ作成をご紹介します。
Pythonでは様々なグラフ作成ライブラリが存在していますが、最も利用されているmatplotlibについて説明します
ただし、このmatplotlibはかなり長いコードになってしまう欠点があります(細かく調整できるのは利点)
そこで初心者向けに今回は1行で書けるグラフ作成の方法をご紹介します
事前準備
「Pandas」というデータ解析を実施できるライブラリをインポートします
またmatplotlibのインストールも行いましょう(日本語版も合わせて)
import pandas as pd
!pip install japanize-matplotlib
import japanize_matplotlib
%matplotlib inline
※サンプルデータ:東京都の気温
# 本サイトから直接取得する
df = pd.read_html('https://smart-hint.com/tokyo-temperature/')[0].set_index('日付')
df.head()
グラフの作成方法のコツ
matplotlibのグラフを作成する前に、データの事前処理(前処理)を行うことがあります
事前処理なしの場合
まず「事前処理なし」のケースは、時系列のplot折れ線グラフやplot.histヒストグラムなどで、全てのデータを利用して可視化することが多いです
事前処理ありの場合
一方で「事前処理あり」のケースはplot.bar棒グラフやplot.pie円グラフなどで、データ全てではなく集約(平均や合計)したものを可視化することが多いです
グラフの軸をインデックスに
plotの主要なグラフはインデックスが軸になることが多いため、事前に設定しましょう
※サンプルデータでは日付をインデックスに指定しています
「事前処理あり」でpivot_tableを使う場合は、indexに指定するカラムがグラフの軸になります
【Python】Pythonピボットテーブルを完全攻略|pivot_table可視化の方法
基本的にはplotをDataFrameの変数の最後に記載することでグラフを作成していきます
またデータの種類はplotの後ろに.ピリオドに続けてグラフの種類を記述します
必要なデータを揃えるために、事前にデータを加工しています
それではさっそくグラフを作成していきましょう
グラフの可視化
おすすめ度を判定:★★★=必須|★★☆=推奨|★☆☆=任意
★★★:折れ線グラフ(plot)
データに続けてplotを付けるだけで簡単に折れ線グラフを作成することができます
基本的にはindexがx軸となります
df['平均気温'].plot()
複数項目も同様にプロットすることができます
df[['平均気温','最高気温','最低気温']].plot()
★★★:棒グラフ(plot.bar)
plot.barを使うことで棒グラフを作成することができます
「最高気温・平均気温・最低気温」の平均をmeanで抽出したものに対して、棒グラフで可視化します
df[['平均気温','最高気温','最低気温']].mean().plot.bar()
またpivot_tableを使った集計もplot.barで棒グラフにすることができます
「月」というカラムがあるので、平均気温を集計し可視化します
※df_graphの変数に集計結果を代入し、それを可視化します(変数名は何でもOK)
df_graph = df.pivot_table(index='月', values='平均気温')
df_graph.plot.bar()
こちらも同様に複数項目を可視化することもできます
df_graph = df.pivot_table(index='月', values=('最高気温','最低気温'))
df_graph.plot.bar()
複数項目を別々に可視化するのではなく、積み上げ棒グラフとしてプロットすることができます
パラメータのstackedを「True」で設定しましょう
df_graph = df.pivot_table(index='月', values=('最高気温','最低気温'))
df_graph.plot.bar(stacked=True)
★★☆:横棒グラフ(plot.barh)
plot.barhを使うことで横棒グラフを作成することができます
棒グラフのbarに、横という意味のhorizontalのhを付けたものがplot.barhです
df[['平均気温','最高気温','最低気温']].mean().plot.barh()
plot.barではなくplot.barhを使う状況は日本語が見やすいかどうかです
基本的には縦棒グラフを使い、項目が読みにくい場合は横棒グラフを使いましょう
こちらも複数項目可視化が可能です
df_graph = df.pivot_table(index='月', values=('最高気温','最低気温'))
df_graph.plot.barh()
上記同様に積み上げグラフにするには、stackedパラメータを「True」で設定しましょう
df_graph = df.pivot_table(index='月', values=('最高気温','最低気温'))
df_graph.plot.barh(stacked=True)
★☆☆:ヒストグラム(plot.hist)
plot.histを使うとヒストグラムを作成することができます
ヒストグラムはデータの個数をY軸に取るグラフで、事前処理は必要ありません
df['平均気温'].plot.hist()
ヒストグラムも複数項目をプロットすることができます
df[['最高気温','最低気温']].plot.hist()
ヒストグラムは性質上、データが重なることが多いため少し見にくくなってしまいます
そこでalphaパラメータを調整して透明度を上げましょう
「0~1」の間の数値を記載します
df[['最高気温','最低気温']].plot.hist(alpha=0.5)
ヒストグラムのデータ数(ビン)を調整するには、パラメータbinsを利用します
設定する数が多ければ多いほど、棒グラフが多くなります
df[['最高気温','最低気温']].plot.hist(alpha=0.7, bins=50)
★☆☆:面グラフ(plot.area)
plot.areaで面グラフを作成することができます
df['平均気温'].plot.area()
複数のデータを積み上げて可視化できます
※マイナスのデータがあるとエラーになるので注意してください
df[['最高気温','平均気温']].plot.area()
stackedのパラメータを「False」と設定することで、面グラフを重ねて表を作ることができます
※この場合はマイナスのデータがあっても大丈夫
df[['最高気温','最低気温']].plot.area(stacked=False)
★★☆:散布図(plot.scatter)
plot.scatterで散布図を作成することができます
他のplot系のグラフと違い、パラメータとしてx軸やy軸などを指定する必要があります
df.plot.scatter(x='最高気温', y='最低気温')
複数項目を同じ散布図にプロットすることもできます
ただし少し複雑になるので注意してください
1つ目の散布図を作り「ax」という変数に格納した後
2つ目の散布図でパラメータのaxとして指定します
ax = df.query('月==[1,2,3]').plot.scatter(x='最高気温', y='最低気温', color='blue', label='1-3月')
df.query('月==[4,5,6]').plot.scatter(x='最高気温', y='最低気温', color='red', label='4-6月', ax=ax)
色colorやラベルlabelを付けるとキレイに散布図を作成できます
※queryを使って1-3月と4-6月の気温をプロットします
プロットの大きさを指定することで、散布図をバブルプロットにすることができます
パラメータのサイズsを平均気温のデータで指定します
df.plot.scatter(x='最高気温', y='最低気温', s='平均気温')
★★☆:円グラフ(plot.pie)
plot.pieで円グラフを作成することができます
df[['最高気温','最低気温']].mean().plot.pie()
角度やデータラベルを修正します
startangleで円グラフの角度を変更します(90に設定)
autopctで項目のパーセンテージを表示(’%1.1f%%’を記載)
labelでグラフ横のラベルを変更(”空白に設定)
df[['最高気温','最低気温']].mean().plot.pie(startangle=90, autopct='%1.1f%%', label='')
★☆☆:箱ひげ図(plot.box)
普段そこまで利用頻度は高くないですが、箱ひげ図も作成することができます
plot.boxを使います(英語で箱ひげ図はbox plotと言います)
df[['最高気温','最低気温']].plot.box()
共通パラメータ
カラー(color)
colorで色を変更することができます
複数項目の場合は( )カッコでそれぞれ記載します
df.plot.hist(color=('tomato','skyblue'))
df.plot.hist(color=('darkred','navy'))
df.plot.hist(color=('darkorange','limegreen'))
df.plot.hist(color=('silver','gray'))
グラフサイズ(figsize)
figsizeでグラフのサイズを設定することができます
(横のサイズ,縦サイズ)の順で記入しましょう
df.plot.hist(figsize=(2,4)) #縦長
df.plot.hist(figsize=(4,4)) #正方形
df.plot.hist(figsize=(12,4)) #横長
グラフの種類
本記事ではplotに続けてグラフの種類(bar/hist/scatterなど)を記入する方法をご紹介してきました
一方でkindというパラメータでグラフの種類を指定することができます
2つの記述方法は、最終的にはグラフは同じになります
df['平均気温'].plot.hist()
df['平均気温'].plot(kind='hist') #上と同じ結果
まとめ
今回はmatplotlibを使ってグラフを作成する方法をご紹介してきました
非常に簡単に記述することができるので、ぜひ覚えて使ってみてください
またもう一段階キレイなグラフであるseabornを使いたい場合はこちらです
【Python】seabornで綺麗なグラフ作成を!たった1行で書けます
円グラフの”None”を表示しない方法はありますか?
コメントありがとうございます。
labelというパラメータを空白(”)に設定すると、Noneのラベルを消すことができます。
plot.pie(startangle=90,autopct='%1.1f%%', label='')