>100 Views
December 17, 24
スライド概要
今回は、y軸が2つのグラフを描くことにより、2つの集計結果の違いを一目で分かるようにします。
Pythonにおけるグラフ描画のライブラリライブラリ「matplotlib」を使うのですが、設定が細かいので上級編となります。
こんな感じで高度なグラフを描けるんだと頭の片隅にでも入れておいていただければ十分です。普段の分析業務をこなすには、seabornで事足りるはずです。
今回使用するライブラリ「matplotlib」には、下記の2つの流儀があります。
1.「Pyplotインターフェース」
MATLAB (マトラボ)というデータ解析やアルゴリズム開発、モデルの作成などに使用するプログラミング言語の機能をpythonでも使えるように導入された機能。簡単にプログラムを書くことができるが、グラフ描画の自由度は小さいプログラム。
2.オブジェクト指向インターフェース
何を操作の対象にするか明示的に指定する方式。「Pyplotインターフェース」で図を作っても、いざ細かい調整をしようとすると、結局オブジェクト指向インターフェースのやり方に従うことになりますので、ここでは、こちらを使います。
※ ネット上には、matplotlibの「Pyplotインターフェース」で書かれたものと「オブジェクト指向インターフェース」で書かれたコードの二つが混在しています。コードを読む時には、気を付けましょう!
1 3rd STEP 応用編 医療 Section 10 y軸が2つのグラフを描く このSectionは、2つのy軸のグラフを描くmatplotlib上級編となります。 こんな感じで高度なグラフを描けるんだと頭の片隅にでも入れておいていただ ければ十分です。普段の分析業務をこなすには、seabornで事足りるはず です。
2 Section 10 y軸が2つのグラフを描く 1.列名「人口」をキャスト 前のSection 9では、e-Statから令和2年度(2020年) の国勢調査探し出し、都道府県別の人口をリストアップした 「pop3」を作りましたが、「pop3」の列名「人口」は文字列型 (Object)になっています。 これでは、四則演算ができませんので、整数型(int)に キャスト(変更)し、「pop4」と宣言します。
3 Section 10 y軸が2つのグラフを描く 2.使う列のみ抽出 「pop4」を使う列のみに整形したデータを「pop5」と宣言します。この時、「都道府県番号」 がちゃんと48個あることを確認しましょう(「0」は全国)。
4 Section 10 y軸が2つのグラフを描く 3.元データに人口データをマージ 「df5」と「pop5」を2つのデータに共通な列名、すなわち「都道府県番号」でマージ(結 合)し、「df6」と宣言しましょう。 Section 8の「91」を使います。
5 Section 10 y軸が2つのグラフを描く 4.10万人当たりの金額の列を追加 「df6」をコピーした「df7」に、10万人当たりの金額(薬剤費)の列「対10万人」を追加 します。
6 Section 10 y軸が2つのグラフを描く 5.10万人当たりの都道府県別薬剤費を表すグラフを作成(1) 「df7」を使って、10万人当たりの都道府県別薬剤費を表すグラフを作成します。 plt.xticks(fontsize=○○)で、x軸の目盛りラベルのフォントサイズを指定することがで きます。
7 Section 10 y軸が2つのグラフを描く 6.10万人当たりの都道府県別薬剤費を表すグラフを作成(2) Section 9で作成したグラフとは異なり、秋田県、高知県が高いグラフができました。 沖縄は極端に低いですね。
8 Section 9の「都道府県別薬剤費_R2」とこのセクションの「都道府県別薬剤 費_対10万人_R2」と比べてみたくはありませんか? y軸の単位が異なる2つのグラフのように複雑なグラフを描くには、「seaborn」で は困難です。 そこで、「matplotlib」を使います。 ただし、「matplotlib」は、細かなグラフの描き方を指示 することができますが、ややマニアックなので、 今のところ「seaborn」で十分と思う方は、 読み飛ばしてください。
9 Section 10 y軸が2つのグラフを描く プログラム解説1 グラフにする簡単なデータを用意 「matplotlib」で簡単なグラフを描いてみましょう。 まずは、グラフにするデータを用意します。 NumPyのarangeを利用して、連続した配列を作成することができます。arangeに対して は、開始値、終了値、増減量を引数として渡してあげると、その法則に則った数値を含むリ ストを自動的に作成してくれます。 numpy.arange(開始値, 終了値 , 増減量) 0から9まで1ずつ増加した整数を要素として含む配列を作成する場合、開始値に1、終了 値に10、増減量に1を指定します。開始値、増減量は省略することができます。
10 Section 10 y軸が2つのグラフを描く プログラム解説2 Pyplotインターフェース 「Pyplotインターフェース」は、MATLAB (マトラボ)というデータ解析やアルゴリズム開発、 モデルの作成などに使用するプログラミング言語の機能をpythonでも使えるように導入され た機能。簡単にプログラムを書くことができるが、グラフ描画の自由度は小さいプログラム。 基本形は、下記のとおりです。
11 Section 10 y軸が2つのグラフを描く プログラム解説3 オブジェクト指向インターフェース 「オブジェクト指向インターフェース」は、何を操作の対象にするか明示的に指定する方式。 「Pyplotインターフェース」で図を作っても、いざ細かい調整をしようとすると、結局オブジェ クト指向インターフェースのやり方に従うことになりますので、ここでは、こちらを使います。 基本形は、下記のとおりです。
12 Section 10 y軸が2つのグラフを描く 参考・補足 ネット上には、matplotlibの「Pyplotインターフェース」で書かれたものと「オブジェクト指 向インターフェース」で書かれたコードの二つが混在しています。コードを読む時には、気を付 けましょう!
13 Section 10 y軸が2つのグラフを描く 7.y軸が2つあるグラフを作成(1) まずは、グラフ全体と「df5」のプロットに関して、指定していく部分です。
14 Section 10 y軸が2つのグラフを描く 8. y軸が2つあるグラフを作成(2) グラフ全体とプロットに関して指示するために「fig,ax=plt.subplots()」を使います。グラフ全体 を管理するFigureオブジェクトを「fig」、ひとつのプロットエリアを管理するAxesオブジェクトを「ax」と 略します。また、「df5」のプロットを「ax1」と指定します。標準以外で指定可能なものは下記のとお りです。 ① fig, ax1=plt.subplots(figsize=(〇,△)) → グラフ全体ののフォントサイズを指定。 ② color = ‘b’ → ax1で描くグラフの色を指定(【参照】 54 color=‘色’ )。 ③ ax1.plot(df5[‘都道府県’], df5[‘金額’], color=color) → ax1で描くグラフのプロットと色を指定。色は、②の 色と同じにしました。 ④ ax1.tick_params(axis=‘y’, labelcolor=color) → tick_paramsで目盛りのフォーマットを細かく調整可能。 引数axisは軸を指定、引数labelcolorは軸ラベルの色を指定。
15 Section 10 y軸が2つのグラフを描く 9. y軸が2つあるグラフを作成(3) 次に、「df7」のプロットを指定していく部分です。
16 Section 10 y軸が2つのグラフを描く 10. y軸が2つあるグラフを作成(4) 「df7」のプロット「ax2」を指定していく詳細は下記のとおりです。 ① 2つの軸があるグラフを書くには、1つ目は通常通りの方法でグラフを書き2つ目の軸を追加するには、twinx() を使います。 そして、2つ目の軸のグラフは、ax2と宣言します。 ax2=ax1.twinx() こうすることで、ax2を使ってx軸が共通で異なるy軸のグラフを書くことができます。 後は、ax1と同じですね。
17 Section 10 y軸が2つのグラフを描く 11. y軸が2つあるグラフを作成(5) 下記のようなグラフが描けました!軸とプロットを同じ色にしましたので、わかりやすいですね。 対10万人あたりの薬剤費は、比較的差が少ないですね。秋田県、高知県が高いですが、沖 縄は低いことが一目でわかります。