[[358773]] これらのオープンソース フレームワークを使用して、ウイルスの可能性のある伝染経路を示すカラー マップを作成します。
世界的な旅行が当たり前になった現代において、病気の蔓延は真に憂慮すべき問題です。一部の組織は、主要な感染症(そして現在流行しているすべての感染症)を追跡し、その追跡から得られたデータを公開しています。しかし、これらの生のデータは人間が処理するのが難しい場合があり、だからこそデータサイエンスが非常に重要です。例えば、PythonとPandasを用いてCOVID-19の世界的な蔓延を視覚化することは、このデータの分析に役立ちます。 最初は、膨大な量の生データに直面するのは気が遠くなるような作業かもしれません。しかし、データ処理を始めると、徐々に処理方法がわかってくるでしょう。以下は、COVID-19データの処理における一般的なシナリオです。 - GitHubから国別のCOVID-19感染者数データを毎日ダウンロードし、Pandas DataFrameオブジェクトとして保存します。PythonではPandasライブラリを使用する必要があります。
- ダウンロードしたデータを処理してクリーンアップし、視覚化の入力形式に適合させます。ダウンロードしたデータは良好な状態(整理された状態)です。1つの問題は、国名で国を識別していることですが、国を識別するには3桁のISO 3コード(国コード表)を使用する方が適切です。ISO 3コードを生成するには、Pythonライブラリ
pycountryを使用します。これらのコードを生成したら、既存のDataFrameに列を追加して、これらのコードを入力できます。 - 最後に、視覚化のためにPlotlyライブラリの
expressモジュールを使用しました。この記事では、コロプレスと呼ばれる地図(Plotlyライブラリで利用可能)を使用して、この病気の世界的蔓延を視覚化しています。
ステップ1:コロナデータ最新のコロナウイルスデータを以下のウェブサイトからダウンロードしてください(LCTT翻訳者注:2020年12月14日現在、まだアクセス可能ですが、グレートファイアウォールによってブロックされています)。 - https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv
ダウンロードしたデータをPandas DataFrameに読み込みます。Pandasには、URLから直接データを読み取り、DataFrameオブジェクトを返す関数read_csv()が用意されています(以下を参照)。 pycountryをインポートする
plotly.expressをpxとしてインポートする
pandasをpdとしてインポートする
URL_DATASET = r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'
df1 = pd.read_csv(URL_DATASET)
print(df1.head(3)) # データフレームの最初の3つのエントリを取得する
print(df1.tail(3)) # データフレームの最後の3つのエントリを取得する Jupyter の出力のスクリーンショット:
Jupyterのスクリーンショット この出力は、DataFrame ( df1 ) に次のデータ列が含まれていることを示しています。 -
Date -
Country -
Confirmed -
Recovered -
Dead
すると、1月22日から3月31日までのエントリを含むDate列が表示されます。このデータは毎日更新されるため、現在の日付の値が表示されます。 ステップ2: DataFrameをクリーンアップして変更するこのDataFrameにデータ列を追加する必要があります。具体的には、ISO 3エンコーディングを含む列です。これは以下の3つの手順で実行できます。 - すべての国を含むリストを作成します。df1
df1 Country列では日付ごとに国が重複するため、実際にはCountry列には国ごとに複数のエントリが含まれます。これを実現するためにunique().tolist()関数を使用しました。 -
d_country_code辞書オブジェクト (最初は空) を使用し、そのキーを国の名前に設定し、その値を対応する ISO 3 コードに設定しました。 - 各国のISO 3コードを生成するために、
pycountry.countries.search_fuzzy(country)を使用します。この関数はCountryオブジェクトのリストを返すことに注意してください。この関数の戻り値をcountry_dataオブジェクトに代入します。このオブジェクトの最初の要素(インデックス0 )を例に挙げましょう。この\はalpha_3属性があります。したがって、 country_data[0].alpha_3を使用して最初の要素のISO 3コードを「取得」できます。ただし、このDataFrame内の一部の国名には、対応するISO 3コードがない場合があります(紛争地域など)。これらの「国/地域」については、ISO 3コードを空文字列に置き換えます。この部分はtry-exceptブロックに置き換えることもできます。`except` except内の文は、 print('could not add ISO 3 code for ->', country)と記述できます。これらの「国/地域」に対応するISO 3コードが見つからない場合、出力候補が表示されます。実際、最終出力ではこれらの「国/地域」が白色で表示されます。 - 各国のISO 3コード(一部は空白文字列)を取得した後、国名(キー)とそれに対応するISO 3コード(値)を、先ほど作成した辞書
d_country_codeに追加しました。この作業は、Pythonの辞書オブジェクトのupdate()メソッドを使用して実行できます。 - 国名とそれに対応する ISO 3 コードを含む辞書を作成した後、簡単なループを使用してそれらを DataFrame に追加しました。
ステップ3: Plotlyを使用して伝播経路を視覚化するコロプレスマップは、色付きのポリゴンで構成された地図です。変数の空間的な変化を表すためによく使用されます。コロプレスマップを作成するには、Plotlyのpxモジュールを使用します。具体的な関数はpx.choroplethです。 この関数に含まれるパラメータは次のとおりです。 plotly.express.choropleth(data_frame=なし、lat=なし、lon=なし、locations=なし、locationmode=なし、geojson=なし、featureidkey=なし、color=なし、hover_name=なし、hover_data=なし、custom_data=なし、animation_frame=なし、animation_group=なし、category_orders={}、labels={}、color_discrete_sequence=なし、color_discrete_map={}、color_continuous_scale=なし、range_color=なし、color_continuous_midpoint=なし、projection=なし、scope=なし、center=なし、title=なし、template=なし、width=なし、height=なし) choropleth()関数に関して注意すべき点がいくつかあります。 -
geojsonはgeometryオブジェクトです(上記の関数の6番目のパラメータ)。このオブジェクトgeojson関数geojsonドキュメントに明示的に記載されていないため、少し分かりにくいかもしれません。`geojson` オブジェクトは指定してもしなくても構いません。`geojson` オブジェクトを指定した場合、地球の地物をプロットするのに使用されます。 geojsonしない場合は、関数はデフォルトで組み込みのgeometryオブジェクトを使用します。(今回の実験では組み込みのgeometryオブジェクトを使用しているため、 geojsonパラメータには値を指定しません。) - DataFrame オブジェクトには
data_frameプロパティがあり、先ほど作成したdf1がすでに提供されています。 - 各国のポリゴンの色は
Confirmed症例数に基づいて決定されます。 - 最後に、
Date列animation_frameを作成します。これにより、データを日付ごとに分割し、 Confirmed列の変化に応じて国の色を変えることができます。
完全なコードは次のとおりです。 pycountryをインポートする
plotly.expressをpxとしてインポートする
pandasをpdとしてインポートする
# ---------- ステップ 1 ----------
URL_DATASET = r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'
df1 = pd.read_csv(URL_DATASET)
# print(df1.head) # コメントを解除してデータフレームの内容を確認します
# ---------- ステップ 2 ----------
list_countries = df1['国'].unique().tolist()
# print(list_countries) # コメントを解除して国の一覧を表示
d_country_code = {} # 国名とISOコードを保持する
list_countries内の国について:
試す:
country_data = pycountry.countries.search_fuzzy(国)
# country_data は pycountry.db.Country クラスのオブジェクトのリストです
# リストの最初の項目、つまりインデックス0が最も適しています
# Countryクラスのオブジェクトにはalpha_3属性があります
国コード = 国データ[0].alpha_3
d_country_code.update({国: 国コード})
を除外する:
print('ISO 3コードを->に追加できませんでした', country)
# 国が見つからない場合は、ISOコード ' ' を作成します
d_country_code.update({国: ' '})
# print(d_country_code) # 辞書をチェックするためにコメントを解除する
# dfに新しい列iso_alphaを作成します
# 適切な ISO 3 コードを入力します
d_country_code.items() の k、v について:
df1.loc[(df1.Country == k), 'iso_alpha'] = v
# print(df1.head) # コメントを解除してISOコードが追加されたことを確認する
# ---------- ステップ3 ----------
fig = px.choropleth(データフレーム = df1,
場所 = "iso_alpha",
color= "確認済み"、# 列「確認済み」の値によって色が決定されます
hover_name="国",
color_continuous_scale= 'RdYlGn', # カラースケール 赤、黄、緑
animation_frame="日付")
図.show() 地図 完全なコードはここからダウンロードして実行できます。 最後に、Plotly を使用してコロプレス プロットを描くための優れたリソースをいくつか紹介します。
|