Web制作、Web開発の歩き方

初心者のためのDjango入門

■第19話:Pandasデータの可視化と実用的な使い方

(最終更新日:2023.06.24)

Djangoフレームワークのイメージ
この記事は6分で読めます!
(絵が小さい場合はスマホを横に)

「Pandasデータを可視化しよう!」

Pandasでまとめたデータを活かすには、グラフにして可視化することが不可欠である。 実際excelなどの表計算ソフトでも、作成したデータに対して様々な形でグラフ化して、分析を行う。 今回はpandasで作成したDataFrameに対して、matplotlibというPythonライブラリを用いることでグラフ化する。 データサイエンスの入門ツールとして、ぜひ学んでみてほしい。


1.データの可視化

本項では、PandasのDataFrameをグラフ化するには、MatplotlibやSeabornなどのライブラリを使用する方法が挙げられる。 今回はMatplotlibを用いて、グラフ化する方法について説明する。 まずは、Pandasで年齢、職業、収入に関するとデータフレームを作成する。 以下のとおり、データフレームが作成できた。

データフレームの作成

データフレームの作成

これに対して、グラフ化を行う。まずは、各職業の平均収入を棒グラフにしてみた。 平均に関してはpandasで先に計算する。職業別に収入の項目を平均化するには以下の4行目にあるように書く。 そして、平均化したデータを、matplotで棒グラフにする。棒グラフの作り方はkind=barを選択する。 plt.show()を実行すれば、下記のように作成したグラフが生成される。

これだけ見ると、サイエンティストの年収が高いように思える。

職業別年収の棒グラフ

職業別年収の棒グラフ(平均)

次に年齢別に散布図を作成する。横軸に年齢、縦軸に年収をとり、プロットする。 散布図はkind=scatterと書く。あとはx='Age'で横軸年齢、y='Income'で縦軸年収としている。 先ほどと同様、plt.show()を実行すれば、下記のように作成したグラフが生成される。

この図を見ると、年齢と年収に強い正の相関があることが分かる。 つまり、職業よりも年齢が高いほど年収が上がるということが、このグラフから分かった。

Matplotlibの散布図

Matplotlibの散布図(年齢 vs 年収)

このように、色んなグラフを持って多面的にデータを分析できると 「年齢と年収には強い相関があるのでは?」といった仮説を検証する精度が非常に高くなる。 データサイエンスとして非常に重要なアプローチである。 しかも、Pythonであれば、プログラムを走らせるだけでデータ抽出、データ加工、グラフ化まで自動化できるので、極めて効率的である。

2.実用的なPandasの使い方

実用的なPandasの使い方には「データのクリーニング」「データ変換」「データの集約」「時間系列データの処理」「Pivotテーブルの作成」「クロス集計」 などがある。今回は「Pivotテーブルの作成」と「クロス集計」について説明する。

Pivotテーブルの作成はpivot関数を用いて行う。縦軸に「日付」、横軸に「都市」、 ピボットさせたいデータに「気温」と「湿度」があるとすると、まず下記のようにデータフレームを作成し、 pivot関数を使うことで作成することができる。このように、温度と湿度(もしくは、Los AngelsとNew York)のように、 パラメータや要素がpivotする場合には、pivotテーブルを用いることで一つのテーブルに集約して表示することができる。 (ちなみに下記の気温は℉とする)

ピボットテーブル

ピボットテーブルのコード(上)と結果(下)

クロス集計は、crosstab関数を用いて行う。 下記のようにデータフレームを作成し、crosstab関数を用いることでクロス集計を行うことができる。 下記の場合、A、B二つのデータ項目に各々morning,nightとicd, beerが格納されている。 それぞれのデータがいくつあるかを集計した結果が以下の通りとなる。 朝にiceを買う人が多く、夜にビールを買う人が多いことを示している。 この事自体は普通だが、2要素の関係性を示すことに威力を発揮する。

マーケティングの世界では有名な話だが、ビールを買う人は紙おむつも一緒に購入するという現象がある。 このような、一見何故か分からない関係性を示したのもこのような集計、分析のおかげである。 統計分析ツールとして使えるようにしておこう。

クロス集計

クロス集計のコード(上)と結果(下)

3.まとめ

今回、Pandasデータの可視化と実践的な応用例について説明した。 データの可視化に関しては、散布図にするだけで比例のような相関が見られたり、 ある値以上で、頭打ちになっているというデータの傾向を明らかにできる。 頭の中で考えた仮説を、データを持って検証できる非常に強力なツールだ。 是非、Pythonで自動化して、様々なデータを分析してみよう。きっと新たな発見があるはずだ。

一方、ピボットテーブルやクロス集計では、異なる2要素の関係性を数字で見ることができた。 ECサイトでビールと一緒に紙おむつを買う、何かのついでに何かを買う関係性があれば、適切なレコメンドができ、 売上を向上させることができるはずだ。

プログラミングの知識にとどまらず、その先の統計分析、マーケティングまで少し足を伸ばして貰えればと思う。


▼参考図書、サイト

Matplotlib入門 | Pythonを使ってデータを可視化してみよう!  AI Academy Media
pandasでstack, unstack, pivotを使ってデータを整形  note.nkmk.me