【データマイニング】Pythonを使って公開データを分析する【01/10】

1. 説明

        この記事では、Python を使用して Pandas ライブラリを使用して公式の COVID-19 症例データを分析する方法について説明します。実際のデータセットから洞察を収集し、一見しただけでは明らかではない情報を明らかにする方法がわかります。特に、この記事で提供されている例は、さまざまな国で病気がどのくらいの速さで蔓延しているかについての情報を入手する方法を示しています。

2. 作業環境を準備する

        続行するには、Python 環境に Pandas ライブラリをインストールする必要があります。まだお持ちでない場合は、pip コマンドを使用してインストールできます。

pip install pandas 

        次に、使用する実際のデータセットを選択する必要があります。この記事で説明する例では、国別および日付別の新型コロナウイルス感染症の確認症例総数に関する情報を含むデータセットが必要です。このようなデータセットは、新型コロナウイルス (COVID-19) 症例データ - Humanitarian Data Exchange  : time_series_covid19_confirmed_global_narrow.csvから CSV ファイルとしてダウンロードできます。 

3. データをロードして分析の準備をする

        ダウンロードした CSV ファイルを pandas データフレームに読み取る前に、不要な 2 行目を手動で削除しました。

#adm1+name,#country+name,#geo+lat,#geo+lon,#date,#affected+infected+value+num 

        次に、それをパンダのデータフレームに読み込みます。

>>> import pandas as pd
>>> df= pd.read_csv("/home/usr/dataset/time_series_covid19_confirmed_global_narrow.csv") 

ファイル構造を詳しく見てみましょう。これを行う最も簡単な方法は、データフレーム オブジェクトの head メソッドを使用することです。

>>> df.head()
 Province/State Country/Region Lat Long Date Value
0 NaN Afghanistan 33.0 65.0 2020–04–01 237
1 NaN Afghanistan 33.0 65.0 2020–03–31 174
2 NaN Afghanistan 33.0 65.0 2020–03–30 170
3 NaN Afghanistan 33.0 65.0 2020–03–29 120
4 NaN Afghanistan 33.0 65.0 2020–03–28 110 

        影響を受ける国々が地理的にどれだけ近いかを考慮した複雑な分析を実行するつもりはないため、データセットから地理的緯度と地理的経度の列を安全に削除できます。これは次のようにして実行できます。

<span style="background-color:#f2f2f2"><span style="color:#242424">>>> df.drop("Lat", axis=1, inplace=True)
>>> df.drop("Long", axis=1, inplace=True)</span></span>

        コンテンツは次のようになります。

>>> df.head()
 Province/State Country/Region Date Value
0 NaN Afghanistan 2020–04–01 237
1 NaN Afghanistan 2020–03–31 174
2 NaN Afghanistan 2020–03–30 170
3 NaN Afghanistan 2020–03–29 120
4 NaN Afghanistan 2020–03–28 110 

不要な行の削除を開始する前に、データセットに何行あるかを知ることも興味深いでしょう。

>>> df.count
…[18176 rows x 4 columns]> 

4. データセットを圧縮する

        データセット内の行を参照すると、一部の国情報が地域ごとに詳細に表示されていることに気づく場合があります (中国など)。しかし、必要なのは国全体の統合データです。この結合ステップを実行するには、次のように groupby 操作をデータセットに適用します。

>>> df = df.groupby(['Country/Region','Date']).sum().reset_index() 

この操作により、データセット内の行数が減り、州/州の列が削除されます。

>>> df.count
...[12780 rows x 3 columns] 

5. 実行分析

        初期段階でさまざまな国で病気が広がる速度を判断する必要があるとします。たとえば、ある病気の症例が少なくとも 1,500 件報告された日から 100 件に達するまでにかかる日数を知りたいとします。

        まず、影響が少なく、まだ感染者数が多数に達していない国を除外する必要があります。これは次のようにして実行できます。

>>> df = df.groupby(['Country/Region'])
>>> df = df.filter(lambda x: x['Value'].mean() > 1000) 

その後、指定した基準を満たす行のみを取得できます。

>>> df = df.loc[(df['Value'] > 100) & (df['Value'] < 1500)] 

        これらの操作を実行すると、行数が大幅に削減されるはずです。

>>> df.count
… Country/Region Date Value
685 Austria 2020–03–08 104
686 Austria 2020–03–09 131
687 Austria 2020–03–10 182
688 Austria 2020–03–11 246
689 Austria 2020–03–12 302
… … … …
12261 United Kingdom 2020–03–11 459
12262 United Kingdom 2020–03–12 459
12263 United Kingdom 2020–03–13 802
12264 United Kingdom 2020–03–14 1144
12265 United Kingdom 2020–03–15 1145[118 rows x 3 columns] 

        この時点で、データセット全体を確認することをお勧めします。これは、次のコード行で実行できます。

>>> print(df.to_string())Country/Region Date Value
685 Austria 2020–03–08 104
686 Austria 2020–03–09 131
687 Austria 2020–03–10 182
688 Austria 2020–03–11 246
689 Austria 2020–03–12 302
690 Austria 2020–03–13 504
691 Austria 2020–03–14 655
692 Austria 2020–03–15 860
693 Austria 2020–03–16 1018
694 Austria 2020–03–17 1332
1180 Belgium 2020–03–06 109
1181 Belgium 2020–03–07 169… 

        残っているのは、各国の行数を数えることだけです。

>>> df.groupby(['Country/Region']).size()
>>> print(df.to_string())Country/Region
Austria        10
Belgium        13
China          4
France         9
Germany        10
Iran           5
Italy          7
Korea, South   7
Netherlands    11
Spain          8
Switzerland    10
Turkey         4
US             9
United Kingdom 11 

        上記のリストは、ある国で少なくとも 1,500 件の感染者が報告されてから、この病気の確認感染者が約 100 人に達するまでに何日かかるかという質問に答えています。

6. 追記

        このシリーズはここから始まり、引き続きデータ分析プロセスについて詳しく説明していきます。

 ユリ・ヴァシリエフ – 中

おすすめ

転載: blog.csdn.net/gongdiwudu/article/details/132333000