Pythonでグラフを描く⑨Plotlyでインタラクティブなグラフを描く②積み上げ棒グラフの作成
1. データのインポートとデータの操作
前回作成したデータセットを用いて、積み上げ棒グラフの作成に挑戦する。前回作成したデータセットは↓からダウンロードできる。
まずは必要なライブラリーのインポート。
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')#グラフの背景を白くする
%matplotlib inline
加えて、今回はplotlyのライブラリーをインポートする。ライブラリーをインポートするまえにplotlyをダウンロードしていない場合はcondaやpipの機能を使ってダウンロードしておく必要がある。
import plotly
import plotly.express as px
次はデータをインポートする。
df=pd.read_csv('sample_date_2.csv')
中身を確認しておく。
df.head()

無事にインポートされたみたいだけど、一番左端のUnnamed:0の列が邪魔なので削除する。
df=df.drop(df.columns[[0]],axis=1)
df.head()

うん。無事に削除できた。
次は積み上げ棒グラフを作成するために、データを操作する。今回は、日にちごとに年代や性別ごとで何人存在したかを示す積み上げ棒グラフにする。ここでは、日にちと年代に焦点を当てたグラフを作成する。
まずは、それぞれの日にちと年代で何人存在したかを.count()を使ってしらべる。
df2=df.groupby(["date","age2"]).count()
df2.head()

上手く人数をカウントすることができたが、列名がおかしいので修正する。カウントした人数の列名をCountとする。
columns=['Count']
df2.columns =columns
df2.head()

上手く変更できた。ただこのままグラフを作成するとエラーがでるので、一度CSVファイルとして出力する。その後出力したCSVファイルをまたインポートする。
df2.to_csv("sample_df2.csv")
再びインポートして、データセットを見てみる。インポートしたデータセットはdf_3としておく。
df3=pd.read_csv('sample_df2.csv')
df3.head()

うん。すっきりした。
2. Plotlyを用いた積み立て棒グラフ
ようやくPlotlyを使ったグラフ作成を行う。作成に必要なコードはたったの2行。
fig = px.bar(df3, x='date', y='Count',color='age2')
fig.show()
PX.bar()といコードを用いて、まず使用するデータセットの名前(df_3)を記載し、次にxには日にち、yには存在する人数、colorには年代を入れる。最後にグラフをJupyter notebook上に表示するためにfig.show()といコードを記載する。

インタラクティブな形式で保存する方法は分からないので、静止画で保存。このグラフにマウスをかざしても何も動かないが、Jupyter notebook上のグラフでは、マウスをかざすとデータが表示される。たとえば、10日の20-29のところにマウスをもっていくと、

age2=20-29、date=10、Count=21となっており、20代において10日には21人存在していたことがグラフ上の数字から確認できる。
ほかには18日の青色の部分(0-9)にマウスをもっていくと、

30人存在することが確認できる。
こんな感じでグラフから確認したい数値がマウス操作で把握することができる。これがインタラクティブである所以。
3. グラフ作成のため重要なコード
fig = px.bar(df3, x='date', y='Count',color='age2')
4. 参考にしたwebサイト
1. Bar Charts in Python
https://plotly.com/python/bar-charts/
2. Plotlyでレポート・論文に使えるグラフを描こう
https://kamino.hatenablog.com/entry/plotly_for_report
と今日はこんな感じ。