よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

【Pandas】コロナのデータファイルURLまとめ

以前に投稿した時に使ったコロナのデータファイルURLをまとめました。

  • ファイルのURL
  • ダウンロードと保存の方法
  • Pandasでのファイルの読込方法
  • 簡単なグラフ作成方法

をメモしておきます。



目次



実行環境

  • Windows10 WSL Ubuntu
  • UbuntuのAnaconda
  • Jupyter Notebook
  • Python3.8
  • 外部ライブラリ
    • requests、Pandas、Numpy、matplotlib



新型コロナのデータファイルURL


新型コロナウィルスに関するデータファイルのリストです。
出典元は、

# 新型コロナのデータファイルURLリスト(11 + 1個)
URLs = [
    "http://www.ipss.go.jp/projects/j/Choju/covid19/data/japan_deaths.xlsx", # 年代別データ(国立社会保障・人口問題研究所)
    "https://toyokeizai.net/sp/visual/tko/covid19/csv/demography.csv", # 年代別国内発生動向 (東洋経済オンライン)
    "https://www.mhlw.go.jp/content/pcr_positive_daily.csv", # 陽性者数 (厚生労働省 オープンデータ)
    "https://www.mhlw.go.jp/content/pcr_tested_daily.csv", # PCR検査実施人数 (厚生労働省 オープンデータ)
    "https://www.mhlw.go.jp/content/cases_total.csv",   # 入院治療等を要する者の数(厚生労働省 オープンデータ)
    "https://www.mhlw.go.jp/content/recovery_total.csv",  # 退院又は療養解除となった者の数(厚生労働省 オープンデータ)
    "https://www.mhlw.go.jp/content/death_total.csv",  # 死亡者数(厚生労働省 オープンデータ)
    "https://www.mhlw.go.jp/content/pcr_case_daily.csv",  # PCR検査の実施件数(厚生労働省 オープンデータ)
    "https://www.mhlw.go.jp/content/current_situation.csv",  # 発生状況(厚生労働省 オープンデータ)
    "https://www.mhlw.go.jp/content/severe_daily.csv",  # 重症者 (厚生労働省 オープンデータ)
    "https://www3.nhk.or.jp/n-data/opendata/coronavirus/nhk_news_covid19_prefectures_daily_data.csv", # 都道府県別感染者・死亡者(NHK)    
]

# (番外編)世界各国の新型コロナデータファイル
URLs2 = "https://opendata.ecdc.europa.eu/covid19/casedistribution/csv" # 世界各国別データ(ECDE オープンデータ)

この後これらのファイルをrequestsライブラリでダウンロード保存します。

※一番最後のファイルを別に分けた理由
ファイル名がcsvとなっており、requests.get()で行うとエラーが出てしまうため。

TypeError: expected str, bytes or os.PathLike object, not list

これはPandasのpd.read_csv()で読み込めました。詳しいことは不明



ライブラリのインストールとインポート


外部ライブラリの

  • pandas : ファイル読込・保存・データ操作用
  • matplotlib : グラフ作成用
  • requests : ファイルダウンロード・保存用
  • numpy : 累計データ→日ごとに換算用

を使用します。

インストールするにはターミナルから

$ pip install pandas matplotlib requests numpy

など環境に合わせて行ってください。

# ライブラリのインポート
import requests
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt



データファイルのダウンロードとローカル保存


今回は、一旦すべてをrequestsライブラリでダウウンロードしローカルに保存します。
直接ネット上のファイルをPandasのpd.read_csv()などで読み込むこともできます。



Pandasで読み込み、ダウンロードと保存を行う場合

  1. 読み込み
    • URLsの⓪番目だけがExcelファイルなのでpd.read_excel()で読み、
    • その他はCSVファイルですのでpd.read_csv()

      で読み込みます。次に保存は

  2. 保存
    • df.to_csv(保存名, index=False)
      (index=Flaseをつける理由は、0から始まる連番のインデックスが保存するとき左端列に付かないようにする為)

      で行います。

requestsでダウンロード保存する場合

今回はrequestsライブラリを使って、一旦すべてのファイルをダウンロード保存します。

# ライブラリのインポート
#import requests

# 一つずつ取得
for URL in URLs:
    # 保存名(元のファイル名)
    savename = URL.split('/')[-1]
    
    # 取得
    res = requests.get(URL)
    
    # カレントディレクトリに保存
    with open(savename, "wb") as f:
        f.write(res.content)
        
print("保存完了")



※番外編のECDEのサイトに置いてある世界各国のコロナのデータファイルについて、requestsで行うと次のようなエラーが出ました。

savename = URLs2.split('/'[-1])
res = requests.get(URLs2)
with open(savename, "wb") as f:
    f.write(res.content)
print("保存完了")
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-12-078ff5b15d97> in <module>
      1 savename = URLs2.split('/'[-1])
      2 res = requests.get(URLs2)
----> 3 with open(savename, "wb") as f:
      4     f.write(res.content)
      5 print("保存完了")


TypeError: expected str, bytes or os.PathLike object, not list

ファイル名が単に「csv」となっているからだろうと思いますが詳細は不明。
ダウンロード保存するにはPandasのpd.read_csv(URL)で読み込んだ後、df.to_csv(保存名)でローカル保存すれば行ける。

# Pandasでネットから直接読み込み
df = pd.read_csv(URLs2)
# 一応表示
df
dateRep day month year cases deaths countriesAndTerritories geoId countryterritoryCode popData2019 continentExp Cumulative_number_for_14_days_of_COVID-19_cases_per_100000
0 14/12/2020 14 12 2020 746 6 Afghanistan AF AFG 38041757.0 Asia 9.013779
1 13/12/2020 13 12 2020 298 9 Afghanistan AF AFG 38041757.0 Asia 7.052776
2 12/12/2020 12 12 2020 113 11 Afghanistan AF AFG 38041757.0 Asia 6.868768
3 11/12/2020 11 12 2020 63 10 Afghanistan AF AFG 38041757.0 Asia 7.134266
4 10/12/2020 10 12 2020 202 16 Afghanistan AF AFG 38041757.0 Asia 6.968658
... ... ... ... ... ... ... ... ... ... ... ... ...
61895 25/03/2020 25 3 2020 0 0 Zimbabwe ZW ZWE 14645473.0 Africa NaN
61896 24/03/2020 24 3 2020 0 1 Zimbabwe ZW ZWE 14645473.0 Africa NaN
61897 23/03/2020 23 3 2020 0 0 Zimbabwe ZW ZWE 14645473.0 Africa NaN
61898 22/03/2020 22 3 2020 1 0 Zimbabwe ZW ZWE 14645473.0 Africa NaN
61899 21/03/2020 21 3 2020 1 0 Zimbabwe ZW ZWE 14645473.0 Africa NaN

61900 rows × 12 columns

これを保存する。61900行もある・・・

# 保存名
savename_urls2 = 'ECDE.csv'
# Pandasで保存
df.to_csv(savename_urls2, index=False)

保存できたか確認する。

!ls |grep csv
!ls |grep xlsx
ECDE.csv
cases_total.csv
current_situation.csv
death_total.csv
demography.csv
nhk_news_covid19_prefectures_daily_data.csv
pcr_case_daily.csv
pcr_positive_daily.csv
pcr_tested_daily.csv
recovery_total.csv
severe_daily.csv
japan_deaths.xlsx

これでURLsのファイル全12個をローカルに保存できました。



ファイルをデータフレームに取り込む


12個の全ファイルをPandasのデータフレームにします。
URLsのリスト順にしておきます。

files = [URL.split('/')[-1] for URL in URLs] 
files.append('ECDE.csv') # 番外を追加
files
['japan_deaths.xlsx',
 'demography.csv',
 'pcr_positive_daily.csv',
 'pcr_tested_daily.csv',
 'cases_total.csv',
 'recovery_total.csv',
 'death_total.csv',
 'pcr_case_daily.csv',
 'current_situation.csv',
 'severe_daily.csv',
 'nhk_news_covid19_prefectures_daily_data.csv',
 'ECDE.csv']



◆ 1/12 japan_deaths.xlsx

年代別累計死亡者数 国立社会保障・人口問題研究所

print("出典:",URLs[0])
df_0 = pd.read_excel(files[0], header=3)
df_0
出典: http://www.ipss.go.jp/projects/j/Choju/covid19/data/japan_deaths.xlsx
年代 \nAge 男性 Male 女性 Female 非公表 \nNot Disclosed Unnamed: 4 for pyramid
0 <10 0.0 0.000000 0.0 NaN 0.0
1 10s 0.0 0.000000 0.0 NaN 0.0
2 20s 5.0 1.000000 0.0 NaN -5.0
3 30s 14.0 5.000000 0.0 NaN -14.0
4 40s 58.0 22.000000 0.0 NaN -58.0
5 50s 192.0 41.000000 3.0 NaN -192.0
6 60s 547.0 141.000000 12.0 NaN -547.0
7 70s 1556.0 654.000000 22.0 NaN -1556.0
8 80s 2274.0 1720.000000 106.0 NaN -2274.0
9 90+ 779.0 1284.000000 11.0 NaN -779.0
10 小計 \nSubtotal 5425.0 3868.000000 154.0 NaN NaN
11 高齢者 \nOld Person 52.0 36.000000 369.0 NaN NaN
12 非公表 \nNot Disclosed 60.0 23.000000 1655.0 NaN NaN
13 合計 \nTotal 5537.0 3927.000000 2178.0 NaN NaN
14 総計 \nGrand Total 11642.0 NaN NaN NaN NaN
15 性比 \nSex ratio NaN 140.998217 NaN NaN NaN
16 性・年代非公表\nSex Age Not Disclosed NaN 2349.000000 NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN
18 出典: 国立社会保障・人口問題研究所「新型コロナウィルス感染症について」www.ipss.g... NaN NaN NaN NaN NaN
19 Source : National Institute of Population and ... NaN NaN NaN NaN NaN



◆ 2/12 demography.csv

同じく、年代別動向 東洋経済オンライン

df_1 = pd.read_csv(files[1])
df_1
year month date age_group tested_positive hospitalized serious death
0 2021 5 19 10歳未満 21655 1933 0 0
1 2021 5 19 10代 49334 4021 0 0
2 2021 5 19 20代 150642 11229 0 6
3 2021 5 19 30代 101020 7512 0 20
4 2021 5 19 40代 98371 8333 26 87
5 2021 5 19 50代 89181 7784 48 238
6 2021 5 19 60代 57428 5725 87 764
7 2021 5 19 70代 51057 5865 122 2441
8 2021 5 19 80代以上 50616 5590 78 6702
9 2021 5 19 不明 9842 972 2 76



3/12 ◆ pcr_positive_daily.csv

全国の陽性者数(日ごと) 厚生労働省

df_2 = pd.read_csv(files[2])
df_2
日付 PCR 検査陽性者数(単日)
0 2020/1/16 1
1 2020/1/17 0
2 2020/1/18 0
3 2020/1/19 0
4 2020/1/20 0
... ... ...
486 2021/5/16 5247
487 2021/5/17 3677
488 2021/5/18 5229
489 2021/5/19 5811
490 2021/5/20 5711

491 rows × 2 columns



4/12 ◆ pcr_tested_daily.csv

全国のPCR検査実施件数(日ごと) 厚生労働省

df_3 = pd.read_csv(files[3])
df_3
日付 PCR 検査実施件数(単日)
0 2020/2/5 4
1 2020/2/6 19
2 2020/2/7 9
3 2020/2/8 4
4 2020/2/9 10
... ... ...
463 2021/5/16 35948
464 2021/5/17 95425
465 2021/5/18 86352
466 2021/5/19 149234
467 2021/5/20 97287

468 rows × 2 columns



5/12 ◆ cases_total.csv

全国の入院治療等を要する者の数(日ごと) 厚生労働省

print("出典:",URLs[4])

df_4 = pd.read_csv(files[4])
df_4
出典: https://www.mhlw.go.jp/content/cases_total.csv
日付\t 入院治療を要する者
0 2020/2/4 15
1 2020/2/5 16
2 2020/2/6 12
3 2020/2/7 12
4 2020/2/8 7
... ... ...
467 2021/5/16 73235
468 2021/5/17 70565
469 2021/5/18 68228
470 2021/5/19 66835
471 2021/5/20 66721

472 rows × 2 columns



6/12 ◆ recovery_total.csv

全国の退院又は療養解除となった者の数(累計)厚生労働省

print("出典:",URLs[5])

df_5 = pd.read_csv(files[5])
df_5
出典: https://www.mhlw.go.jp/content/recovery_total.csv
日付 退院、療養解除となった者
0 2020/1/29 1
1 2020/1/30 1
2 2020/1/31 1
3 2020/2/1 1
4 2020/2/2 1
... ... ...
473 2021/5/16 592451
474 2021/5/17 599618
475 2021/5/18 606339
476 2021/5/19 612524
477 2021/5/20 618796

478 rows × 2 columns



7/12 ◆ death_total.csv

全国の死亡者数(累計)厚生労働省

print("出典:",URLs[6])

df_6 = pd.read_csv(files[6])
df_6
出典: https://www.mhlw.go.jp/content/death_total.csv
日付 死亡者数
0 2020/2/14 1
1 2020/2/15 1
2 2020/2/16 1
3 2020/2/17 1
4 2020/2/18 1
... ... ...
457 2021/5/16 11504
458 2021/5/17 11587
459 2021/5/18 11847
460 2021/5/19 11936
461 2021/5/20 12042

462 rows × 2 columns

7/12-02 ◆ death_total.csv

全国の死亡者数(累計) 厚生労働省 を日ごとに換算

# 累計死亡者数(全国)を日ごとに換算
import numpy as np

df_6_02 = pd.read_csv(files[6])
n_6_02 = np.array(df_6_02)
n_daily = np.append(1, np.diff(np.array(n_6_02[:,1])))
df_6_02["死亡者(単日)"]  = n_daily
df_6_02
日付 死亡者数 死亡者(単日)
0 2020/2/14 1 1
1 2020/2/15 1 0
2 2020/2/16 1 0
3 2020/2/17 1 0
4 2020/2/18 1 0
... ... ... ...
457 2021/5/16 11504 45
458 2021/5/17 11587 83
459 2021/5/18 11847 260
460 2021/5/19 11936 89
461 2021/5/20 12042 106

462 rows × 3 columns



8/12 ◆ pcr_case_daily.csv

PCR検査の実施件数(日ごと) 厚生労働省

print("出典:",URLs[7])

df_7 = pd.read_csv(files[7])
df_7
出典: https://www.mhlw.go.jp/content/pcr_case_daily.csv
日付 国立感染症研究所 検疫所 地方衛生研究所・保健所 民間検査会社 大学等 医療機関
0 2020/2/18 472 75 398 0 79 NaN
1 2020/2/19 15 68 609 0 0 NaN
2 2020/2/20 20 15 758 0 0 NaN
3 2020/2/21 261 188 902 132 108 NaN
4 2020/2/22 341 127 677 2 19 NaN
... ... ... ... ... ... ... ...
452 2021/5/15 0 0 7677 84049 1561 14372.0
453 2021/5/16 0 0 6843 24077 1207 8470.0
454 2021/5/17 0 0 5487 51689 5761 30932.0
455 2021/5/18 0 0 7233 46666 4471 23622.0
456 2021/5/19 0 0 7621 46674 3641 17171.0

457 rows × 7 columns



9/12 ◆ current_situation.csv

発生状況 厚生労働省

print("出典:",URLs[8])

df_8 = pd.read_csv(files[8])
df_8
出典: https://www.mhlw.go.jp/content/current_situation.csv
Unnamed: 0 PCR検査\n実施人数 ※3 陽性者数 入院治療等を要する者の数 うち重症者の数 退院又は療養解除と\nなった者の数 死亡者数 確認中 ※4
0 国内事例 ※1,※5\n(チャーター便帰国\n者を除く) 12,878,440\n(+97,287) 701,255\n(+5,711)※2 66,721\n(-114) 1,294\n(+6)※6 618,796\n(+6,272) 12,042\n(+106) 4,244\n(-273)
1 空港,海港検疫 677,707\n(+1,522)※7 2,889\n(+10) 88\n(-2) 0 2,797\n(+12) 4 0
2 チャーター便\n帰国者事例 829 15 0 0 15 0 0
3 合計 13,556,976\n(+98,809) 704,159\n(+5,721)※2 66,809\n(-116) 1,294\n(+6)※6 621,608\n(+6,284) 12,046\n(+106) 4,244\n(-273)



10/12 ◆ severe_daily.csv

重症者(日ごと) 厚生労働省

print("出典:",URLs[9])

df_9 = pd.read_csv(files[9])
df_9
出典: https://www.mhlw.go.jp/content/severe_daily.csv
日付 重症者数
0 2020/2/5 0
1 2020/2/6 0
2 2020/2/7 0
3 2020/2/8 0
4 2020/2/9 0
... ... ...
466 2021/5/16 1227
467 2021/5/17 1235
468 2021/5/18 1293
469 2021/5/19 1288
470 2021/5/20 1294

471 rows × 2 columns



11/12 ◆ nhk_news_covid19_prefectures_daily_data.csv

都道府県別 単日・累計の感染者・死亡者 NHK

print("出典:",URLs[10])

df_10 = pd.read_csv(files[10])
df_10
出典: https://www3.nhk.or.jp/n-data/opendata/coronavirus/nhk_news_covid19_prefectures_daily_data.csv
日付 都道府県コード 都道府県名 各地の感染者数_1日ごとの発表数 各地の感染者数_累計 各地の死者数_1日ごとの発表数 各地の死者数_累計
0 2020/1/16 1 北海道 0 0 0 0
1 2020/1/17 1 北海道 0 0 0 0
2 2020/1/18 1 北海道 0 0 0 0
3 2020/1/19 1 北海道 0 0 0 0
4 2020/1/20 1 北海道 0 0 0 0
... ... ... ... ... ... ... ...
23072 2021/5/16 47 沖縄県 78 13859 0 141
23073 2021/5/17 47 沖縄県 59 13918 1 142
23074 2021/5/18 47 沖縄県 168 14086 4 146
23075 2021/5/19 47 沖縄県 203 14289 0 146
23076 2021/5/20 47 沖縄県 198 14487 1 147

23077 rows × 7 columns

11/12-02 ◆ 都道府県別 感染者・死亡者数(単日・累計)グラフ

下記のコードを実行すると、全ての都道府県の日ごと感染者と死亡者のグラフが表示されます。

# 都道府県別感染者・死亡者
df = pd.read_csv(files[10], encoding='utf-8')

# 都道府県名
place_lst = df["都道府県名"].unique()

# 都道府県別感染者数(日ごと)のグラフ
for place in place_lst:
    # 1日あたりの感染者数データ
    Kansensya_daily = df[df["都道府県名"]==place].iloc[:,3]
    
    # 日数
    day = Kansensya_daily.shape[0]
    
    # グラフ作成
    print(place)
    plt.plot(range(day), Kansensya_daily)
    plt.title("positive daily")
    plt.grid()
    plt.show()
    print("-"*50)
    

# 都道府県別死亡者(日ごと)のグラフ
for place in place_lst:
    # 1日あたりの死者数データ
    Death_daily = df[df["都道府県名"]==place].iloc[:,-2]
    
    # 日数
    day = Death_daily.shape[0]
    
    # グラフ作成
    print(place)
    plt.plot(range(day), Death_daily)
    plt.title("death daily")
    plt.grid()
    plt.show()
    print("-"*50)    



12/12 ◆ ECDE.csv(リネーム済)

世界各国別データ ECDE オープンデータ (最大2020/12/14までのデータ)

print("出典:",URLs2)

df_11 = pd.read_csv('ECDE.csv')
df_11
出典: https://opendata.ecdc.europa.eu/covid19/casedistribution/csv
dateRep day month year cases deaths countriesAndTerritories geoId countryterritoryCode popData2019 continentExp Cumulative_number_for_14_days_of_COVID-19_cases_per_100000
0 14/12/2020 14 12 2020 746 6 Afghanistan AF AFG 38041757.0 Asia 9.013779
1 13/12/2020 13 12 2020 298 9 Afghanistan AF AFG 38041757.0 Asia 7.052776
2 12/12/2020 12 12 2020 113 11 Afghanistan AF AFG 38041757.0 Asia 6.868768
3 11/12/2020 11 12 2020 63 10 Afghanistan AF AFG 38041757.0 Asia 7.134266
4 10/12/2020 10 12 2020 202 16 Afghanistan AF AFG 38041757.0 Asia 6.968658
... ... ... ... ... ... ... ... ... ... ... ... ...
61895 25/03/2020 25 3 2020 0 0 Zimbabwe ZW ZWE 14645473.0 Africa NaN
61896 24/03/2020 24 3 2020 0 1 Zimbabwe ZW ZWE 14645473.0 Africa NaN
61897 23/03/2020 23 3 2020 0 0 Zimbabwe ZW ZWE 14645473.0 Africa NaN
61898 22/03/2020 22 3 2020 1 0 Zimbabwe ZW ZWE 14645473.0 Africa NaN
61899 21/03/2020 21 3 2020 1 0 Zimbabwe ZW ZWE 14645473.0 Africa NaN

61900 rows × 12 columns

# 日付の最大
pd.to_datetime(df_11['dateRep']).max()
Timestamp('2020-12-14 00:00:00')
# 国名抽出
df_11['countriesAndTerritories'].unique()
array(['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola',
       'Anguilla', 'Antigua_and_Barbuda', 'Argentina', 'Armenia', 'Aruba',
       'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain',
       'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin',
       'Bermuda', 'Bhutan', 'Bolivia',
       'Bonaire, Saint Eustatius and Saba', 'Bosnia_and_Herzegovina',
       'Botswana', 'Brazil', 'British_Virgin_Islands',
       'Brunei_Darussalam', 'Bulgaria', 'Burkina_Faso', 'Burundi',
       'Cambodia', 'Cameroon', 'Canada', 'Cape_Verde',
       'Cases_on_an_international_conveyance_Japan', 'Cayman_Islands',
       'Central_African_Republic', 'Chad', 'Chile', 'China', 'Colombia',
       'Comoros', 'Congo', 'Costa_Rica', 'Cote_dIvoire', 'Croatia',
       'Cuba', 'Curaçao', 'Cyprus', 'Czechia',
       'Democratic_Republic_of_the_Congo', 'Denmark', 'Djibouti',
       'Dominica', 'Dominican_Republic', 'Ecuador', 'Egypt',
       'El_Salvador', 'Equatorial_Guinea', 'Eritrea', 'Estonia',
       'Eswatini', 'Ethiopia', 'Falkland_Islands_(Malvinas)',
       'Faroe_Islands', 'Fiji', 'Finland', 'France', 'French_Polynesia',
       'Gabon', 'Gambia', 'Georgia', 'Germany', 'Ghana', 'Gibraltar',
       'Greece', 'Greenland', 'Grenada', 'Guam', 'Guatemala', 'Guernsey',
       'Guinea', 'Guinea_Bissau', 'Guyana', 'Haiti', 'Holy_See',
       'Honduras', 'Hungary', 'Iceland', 'India', 'Indonesia', 'Iran',
       'Iraq', 'Ireland', 'Isle_of_Man', 'Israel', 'Italy', 'Jamaica',
       'Japan', 'Jersey', 'Jordan', 'Kazakhstan', 'Kenya', 'Kosovo',
       'Kuwait', 'Kyrgyzstan', 'Laos', 'Latvia', 'Lebanon', 'Lesotho',
       'Liberia', 'Libya', 'Liechtenstein', 'Lithuania', 'Luxembourg',
       'Madagascar', 'Malawi', 'Malaysia', 'Maldives', 'Mali', 'Malta',
       'Marshall_Islands', 'Mauritania', 'Mauritius', 'Mexico', 'Moldova',
       'Monaco', 'Mongolia', 'Montenegro', 'Montserrat', 'Morocco',
       'Mozambique', 'Myanmar', 'Namibia', 'Nepal', 'Netherlands',
       'New_Caledonia', 'New_Zealand', 'Nicaragua', 'Niger', 'Nigeria',
       'North_Macedonia', 'Northern_Mariana_Islands', 'Norway', 'Oman',
       'Pakistan', 'Palestine', 'Panama', 'Papua_New_Guinea', 'Paraguay',
       'Peru', 'Philippines', 'Poland', 'Portugal', 'Puerto_Rico',
       'Qatar', 'Romania', 'Russia', 'Rwanda', 'Saint_Kitts_and_Nevis',
       'Saint_Lucia', 'Saint_Vincent_and_the_Grenadines', 'San_Marino',
       'Sao_Tome_and_Principe', 'Saudi_Arabia', 'Senegal', 'Serbia',
       'Seychelles', 'Sierra_Leone', 'Singapore', 'Sint_Maarten',
       'Slovakia', 'Slovenia', 'Solomon_Islands', 'Somalia',
       'South_Africa', 'South_Korea', 'South_Sudan', 'Spain', 'Sri_Lanka',
       'Sudan', 'Suriname', 'Sweden', 'Switzerland', 'Syria', 'Taiwan',
       'Tajikistan', 'Thailand', 'Timor_Leste', 'Togo',
       'Trinidad_and_Tobago', 'Tunisia', 'Turkey',
       'Turks_and_Caicos_islands', 'Uganda', 'Ukraine',
       'United_Arab_Emirates', 'United_Kingdom',
       'United_Republic_of_Tanzania', 'United_States_of_America',
       'United_States_Virgin_Islands', 'Uruguay', 'Uzbekistan', 'Vanuatu',
       'Venezuela', 'Vietnam', 'Wallis_and_Futuna', 'Western_Sahara',
       'Yemen', 'Zambia', 'Zimbabwe'], dtype=object)
# 国別の各種合計
df_11.groupby(df_11.columns[6]).sum()
day month year cases deaths popData2019 Cumulative_number_for_14_days_of_COVID-19_cases_per_100000
countriesAndTerritories
Afghanistan 5324 2162 686799 49273 1971 1.293420e+10 1750.302963
Albania 4409 2067 567620 48530 1003 8.043420e+08 21166.897881
Algeria 5368 2177 696899 92102 2596 1.485330e+10 2867.464408
Andorra 4342 2052 557520 7338 79 2.102485e+07 128373.393544
Angola 4214 2028 541360 16188 371 8.529180e+09 688.424011
... ... ... ... ... ... ... ...
Wallis_and_Futuna 930 648 119180 3 0 0.000000e+00 0.000000
Western_Sahara 3624 1898 470660 766 1 1.357127e+08 1827.771273
Yemen 3904 1962 502980 2083 606 7.261319e+09 99.756799
Zambia 4274 2037 547420 18274 367 4.840340e+09 1405.075428
Zimbabwe 4235 2031 543380 11246 307 3.939632e+09 1025.033469

214 rows × 7 columns

# Japanの各種合計を抽出
df_each_country = df_11.groupby(df_11.columns[6]).sum()
df_each_country.loc['Japan']
day                                                           5.407000e+03
month                                                         2.192000e+03
year                                                          7.069990e+05
cases                                                         1.796530e+05
deaths                                                        2.585000e+03
popData2019                                                   4.440110e+10
Cumulative_number_for_14_days_of_COVID-19_cases_per_100000    1.803638e+03
Name: Japan, dtype: float64
# 国別死者数累計
df_each_country = df_11.groupby(df_11.columns[6]).sum()
df_each_country['deaths']
countriesAndTerritories
Afghanistan          1971
Albania              1003
Algeria              2596
Andorra                79
Angola                371
                     ... 
Wallis_and_Futuna       0
Western_Sahara          1
Yemen                 606
Zambia                367
Zimbabwe              307
Name: deaths, Length: 214, dtype: int64
# 地域別の各種合計
df_area = df_11.groupby(df_11.columns[10]).sum()
df_area
day month year cases deaths popData2019 Cumulative_number_for_14_days_of_COVID-19_cases_per_100000
continentExp
Africa 235078 111887 30261617 2379827 56334 3.806604e+11 1.872527e+05
America 215165 100702 27758834 30887593 785420 3.344507e+11 8.783230e+05
Asia 206467 89041 26746795 16782046 290129 1.522954e+12 5.914060e+05
Europe 270727 116967 35091410 21400012 479789 2.807138e+11 2.118615e+06
Oceania 39019 18750 5049998 53440 1154 1.331826e+10 1.387105e+05
Other 975 110 129279 696 7 0.000000e+00 0.000000e+00



グラフ作成


簡単な棒グラフと折れ線グラフの作図方法だけ書いておきます。

  1. 上の世界各国のエリア別のデータde_areaで、casesを棒グラフにしたい時

  2. 横軸:index

  3. 縦軸:cases

として、plt.bar(index, cases)とすればおk。グラフの表示は省略。

# 世界エリア別cases棒グラフ
plt.bar(df_area.index, df_area['cases'])
plt.show()



1-2. 東洋経済の年代別データ ◆ 2/12 demography.csv で棒グラフを作りたい時

# demography.csvで年代別データ
df_1
year month date age_group tested_positive hospitalized serious death
0 2021 5 19 10歳未満 21655 1933 0 0
1 2021 5 19 10代 49334 4021 0 0
2 2021 5 19 20代 150642 11229 0 6
3 2021 5 19 30代 101020 7512 0 20
4 2021 5 19 40代 98371 8333 26 87
5 2021 5 19 50代 89181 7784 48 238
6 2021 5 19 60代 57428 5725 87 764
7 2021 5 19 70代 51057 5865 122 2441
8 2021 5 19 80代以上 50616 5590 78 6702
9 2021 5 19 不明 9842 972 2 76

累計死亡者数の棒グラフの場合は

  • 横軸:age_group
  • 縦軸:death

にして、plt.bar(age_group, death)とすればおk。グラフ表示省略。

# 年代別累計死亡者数グラフ
plt.bar(df_1['age_group'], df_1['death'])
plt.show()



  1. 10/12 ◆ severe_daily.csvのデータで重症者(日ごと)の折れ線グラフを描きたい時
# 10/12 ◆ severe_daily.csv のデータ
df_9
日付 重症者数
0 2020/2/5 0
1 2020/2/6 0
2 2020/2/7 0
3 2020/2/8 0
4 2020/2/9 0
... ... ...
466 2021/5/16 1227
467 2021/5/17 1235
468 2021/5/18 1293
469 2021/5/19 1288
470 2021/5/20 1294

471 rows × 2 columns

  • plt.plot(df['重症者数'])

か、または

  • plt.plot(日付, 重症者数)
    • 横軸:日付
    • 縦軸:重症者数

で折れ線グラフができる。グラフ表示省略。

# ① 横軸は連番のインデックスが使われるグラフ
plt.plot(df_9['重症者数'])
plt.show()
# ② 横軸を日付列(str型)に指定したグラフ
plt.plot(df_9['日付'], df_9['重症者数'])
plt.show()

②のグラフは横軸が日付(str型)で重なり真っ黒な表示になってしまうので別の工夫がいる。今回は触れません。



【参考リンク】



長くなりました、以上です。