
- Jupyter notebookでデータ解析をやってみたい
- Pandasのメソッドの使い方を知りたい
- matplotlibで見やすいグラフに加工したい
この記事では、Jupiter notebookを使ってデータ解析の方法について説明します。pandasのメソッドをつかいながら、グラフを見やすく加工していきます。
今回は、神奈川県のコロナ患者数のCSVファイル(kanagawa)を使って、以下のデータ解析を行います。
- コロナ患者の男女数を居住地ごとにグラフ化する
- コロナ患者数の日毎の推移をグラフ化する
Jupyter notebookのデータ解析を学びたい方は、Udemy の以下の講座で学べます。
【世界で5万人が受講】実践 Python データサイエンス・オンライン講座
コロナ患者の男女間分布を居住地ごとにグラフ化する方法
必要なモジュールのインポート

import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
%matplotlib inline
pandasのread_csvメソッドの使い方
データ解析に使用するcsvファイルを、pandasのread_csvを用いてデータフレームに取り込もう。
kanagawa_df = pd.read_csv("kanagawa.csv")
kanagawa_dfの中身を表示させてみよう。
kanagawa_df
発表日 | 居住地 | 年代 | 性別 | |
---|---|---|---|---|
0 | 2020-01-16 | 非公開 | 30代 | 男性 |
1 | 2020-02-11 | 非公開 | 50代 | 男性 |
2 | 2020-02-13 | 非公開 | 80代 | 女性 |
3 | 2020-02-14 | 非公開 | 30代 | 男性 |
4 | 2020-02-17 | 相模原市 | 40代 | 女性 |
5 | 2020-02-18 | 横浜市 | 60代 | 男性 |
pandasのgroupbyメソッドの使い方
pandasの統合プロット使って男女の患者数の差を確認しよう。
by_gender = kanagawa_df.groupby('性別')
by_gender.size().plot(kind='bar')

by_cat_gen=kanagawa_df.groupby(['居住地','性別'])
by_cat_gen.size().plot(kind='barh')

pandasのunstackメソッドの使い方
Unstackメソッドを用いて、性別ごとに見やすいグラフにしてみよう。
by_cat_gen.size().unstack().plot(kind='barh')

データフレームへのデータの追加と並び替えのやり方
これに合計のデータを追加して、多い順に並び替えます。
cat_gen_sz=by_cat_gen.size().unstack()
cat_gen_sz['合計']=cat_gen_sz.sum(axis=1)
cat_gen_sz=cat_gen_sz.sort_values(by='合計',ascending=True)
cat_gen_sz[['女性','男性','合計']].plot(kind='barh')

※さらに詳しくデータ解析を学びたい方におすすめの講座です。
【世界で5万人が受講】実践 Python データサイエンス・オンライン講座
コロナ患者数の日毎の推移をグラフ化する
次は、コロナ患者がどのように増えていったを可視化するよ。
by_day_gender = kanagawa_df.groupby(['発表日','性別'])
day_gen_sz=by_day_gender.size().unstack()
day_gen_sz.plot(kind='bar',figsize=(16,4))


抜けている日付の箇所を追加する
まずは、発表日を型変換で文字列から日付データに変える必要があるよ。
kanagawa_df['発表日'] = pd.to_datetime(kanagawa_df['発表日'], infer_datetime_format=True)
date_rangeメソッドで、発表日のインデックスを連続日数に切り替えて、データを再構築するよ
dates=pd.date_range('2020-01-16','2020-05-15',freq='1D')
new_index=pd.Index(dates,name='発表日')
by_day_gender=kanagawa_df.groupby(['発表日','性別'])
day_gen_sz=by_day_gender.size().unstack().reindex(new_index)
男女のグラフを上下で並べる

dates=pd.date_range('2020-01-16','2020-05-15',freq='1D')
new_index=pd.Index(dates,name='発表日')
by_day_gender=kanagawa_df.groupby(['発表日','性別'])
day_gen_sz=by_day_gender.size().unstack().reindex(new_index)
fig,axes=plt.subplots(nrows=2,ncols=1,sharex=True,sharey=True,figsize=(16,4))
ax_f=axes[0]
ax_m=axes[1]
fig.suptitle('神奈川県 男女別コロナ患者数',fontsize=16)
ax_f.bar(day_gen_sz.index,day_gen_sz.女性)
ax_f.set_ylabel('女性')
ax_m.bar(day_gen_sz.index,day_gen_sz.男性)
ax_m.set_ylabel('男性')
ax_m.set_xlabel('発表日')
sxmin='2020-01-16'
sxmax='2020-05-15'
xmin = datetime.datetime.strptime(sxmin, '%Y-%m-%d')
xmax = datetime.datetime.strptime(sxmax, '%Y-%m-%d')
plt.xlim([xmin,xmax])

※さらに詳しくデータ解析を学びたい方におすすめの講座です。
【世界で5万人が受講】実践 Python データサイエンス・オンライン講座
まとめ
Jupiter notebookを使うと、データ解析が簡単にできます。見やすいグラフに加工していくのも、豊富なモジュールのメソッドで対応できるため、非常に使いやすくなっています。
ぜひトライしてみてください。