Pythonデータ解析

Jupyter notebook データ解析の進め方

  • 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')

 

 

 

 

 

'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を使うと、データ解析が簡単にできます。見やすいグラフに加工していくのも、豊富なモジュールのメソッドで対応できるため、非常に使いやすくなっています。

ぜひトライしてみてください。

 

スポンサーリンク

-Pythonデータ解析

Copyright© MAYRのPython活用法! , 2021 All Rights Reserved Powered by AFFINGER5.