怎么使用Python繪制COVID-19的全球擴(kuò)散圖

這篇文章主要講解了“怎么使用Python繪制COVID-19的全球擴(kuò)散圖”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么使用Python繪制COVID-19的全球擴(kuò)散圖”吧!

創(chuàng)新互聯(lián)公司長(zhǎng)期為1000多家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為通化企業(yè)提供專(zhuān)業(yè)的成都做網(wǎng)站、網(wǎng)站制作,通化網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

對(duì)于一個(gè)全球旅行司空見(jiàn)慣的世界來(lái)說(shuō),疾病的傳播是一個(gè)真正令人擔(dān)憂的問(wèn)題。一些組織會(huì)跟蹤重大的流行?。ㄟ€有所有普遍的流行?。?,并將他們的跟蹤工作獲得的數(shù)據(jù)公開(kāi)出來(lái)。不過(guò),這些原始的數(shù)據(jù)對(duì)人來(lái)說(shuō)可能很難處理,這就是為什么數(shù)據(jù)科學(xué)如此重要的原因。比如,用  Python 和 Pandas 可視化 COVID-19 在全球范圍內(nèi)的傳播路徑可能對(duì)這些數(shù)據(jù)的分析有所幫助。

最開(kāi)始,當(dāng)面對(duì)如此大數(shù)量的原始數(shù)據(jù)時(shí)可能難以下手。但當(dāng)你開(kāi)始處理數(shù)據(jù)之后,慢慢地就會(huì)發(fā)現(xiàn)一些處理數(shù)據(jù)的方式。下面是用于處理 COVID-19 數(shù)據(jù)的一些常見(jiàn)的情況:

  1. 從 GitHub 上下載 COVID-19 的國(guó)家每日傳播數(shù)據(jù),保存為一個(gè) Pandas 中的 DataFrame 對(duì)象。這時(shí)你需要使用 Python 中的 Pandas 庫(kù)。

  2. 處理并清理下載好的數(shù)據(jù),使其滿足可視化數(shù)據(jù)的輸入格式。所下載的數(shù)據(jù)的情況很好(數(shù)據(jù)規(guī)整)。這個(gè)數(shù)據(jù)有一個(gè)問(wèn)題是它用國(guó)家的名字來(lái)標(biāo)識(shí)國(guó)家,但最好是使用三位數(shù)的 ISO 3 碼(國(guó)家代碼表)來(lái)標(biāo)識(shí)國(guó)家。為了生成 ISO 3 碼,可是使用 pycountry 這個(gè) Python 庫(kù)。生成了這些代碼之后,可以在原有的 DataFrame 上增加一列,然后用這些代碼填充進(jìn)去。

  3. 最后為了實(shí)現(xiàn)可視化,使用 Plotly 庫(kù)中的 express 模塊。這篇文章是使用名為choropleth 的地圖(可在 Plotly 庫(kù)中獲得)來(lái)可視化該疾病在全球的傳播。

第一步:Corona 數(shù)據(jù)

從下面這個(gè)網(wǎng)站上下載最新的 corona 數(shù)據(jù)(LCTT 譯注:2020-12-14 仍可訪問(wèn),有墻):

  • https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv

我們之間將這個(gè)下載好的數(shù)據(jù)載入為 Pandas 的 DataFrame。Pandas 提供了一個(gè)函數(shù), read_csv(),可以直接使用 URL 讀取數(shù)據(jù),并返回一個(gè) DataFrame 對(duì)象,具體如下所示:

import pycountryimport plotly.express as pximport pandas as pdURL_DATASET = r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'df1 = pd.read_csv(URL_DATASET)print(df1.head(3))  # Get first 3 entries in the dataframeprint(df1.tail(3))  # Get last 3 entries in the dataframe

在 Jupyter 上的輸出截圖:

怎么使用Python繪制COVID-19的全球擴(kuò)散圖

Jupyter screenshot

從這個(gè)輸出可以看到這個(gè) DataFrame(df1)包括以下幾列數(shù)據(jù):

  1. Date

  2. Country

  3. Confirmed

  4. Recovered

  5. Dead

之后還可以看到 Date 這一列包含了從 1 月 22 日到 3 月 31 日的條目信息。這個(gè)數(shù)據(jù)是每天更新的,所以你會(huì)得到你當(dāng)天的值。

第二步:清理和修改 DataFrame

我們要往這個(gè) DataFrame 中增加一列數(shù)據(jù),就是那個(gè)包含了 ISO 3 編碼。可以通過(guò)以下三步完成這個(gè)任務(wù):

  1. 創(chuàng)建一個(gè)包含所有國(guó)家的列表。因?yàn)樵?nbsp;df1 的 Country 列中,國(guó)家都是每個(gè)日期就重復(fù)一次。所以實(shí)際上 Country 列中對(duì)每個(gè)國(guó)家就會(huì)有多個(gè)條目。我使用 unique().tolist() 函數(shù)完成這個(gè)任務(wù)。

  2. 我使用 d_country_code 字典對(duì)象(初始為空),然后將其鍵設(shè)置為國(guó)家的名稱(chēng),然后它的值設(shè)置為其對(duì)應(yīng)的 ISO 3 編碼。

  3. 我使用 pycountry.countries.search_fuzzy(country) 為每個(gè)國(guó)家生成 ISO 3 編碼。你需要明白的是這個(gè)函數(shù)的返回值是一個(gè) Country 對(duì)象的列表。我將這個(gè)函數(shù)的返回值賦給 country_data 對(duì)象。以這個(gè)對(duì)象的第一個(gè)元素(序號(hào) 0)為例。這個(gè) \ 對(duì)象有一個(gè) alpha_3 屬性。所以我使用 country_data[0].alpha_3 就能“獲得”第一個(gè)元素的 ISO 3 編碼。然而,在這個(gè) DataFrame 中有些國(guó)家的名稱(chēng)可能沒(méi)有對(duì)應(yīng)的 ISO 3 編碼(比如有爭(zhēng)議的領(lǐng)土)。那么對(duì)這些“國(guó)家/地區(qū)”,我就用一個(gè)空白字符串來(lái)替代 ISO 3 編碼。你也可以用一個(gè) try-except 代碼來(lái)替換這部分。except 中的語(yǔ)句可以寫(xiě):print(‘could not add ISO 3 code for ->', country)。這樣就能在找不到這些“國(guó)家/地區(qū)”對(duì)應(yīng)的 ISO 3 編碼時(shí)給出一個(gè)輸出提示。實(shí)際上,你會(huì)發(fā)現(xiàn)這些“國(guó)家/地區(qū)”會(huì)在最后的輸出中用白色來(lái)表示。

  4. 在獲得了每個(gè)國(guó)家的 ISO 3 編碼(有些是空白字符串)之后,我把這些國(guó)家的名稱(chēng)(作為鍵)還有國(guó)家對(duì)應(yīng)的 ISO 3 編碼(作為值)添加到之前的字典 d_country_code 中。可以使用 Python 中字典對(duì)象的 update() 方法來(lái)完成這個(gè)任務(wù)。

  5. 在創(chuàng)建好了一個(gè)包含國(guó)家名稱(chēng)和對(duì)應(yīng) ISO 3 編碼的字典之后,我使用一個(gè)簡(jiǎn)單的循環(huán)將他們加入到 DataFrame 中。

第三步:使用 Plotly 可視化傳播路徑

choropleth 地圖是一個(gè)由彩色多邊形組成的地圖。它常常用來(lái)表示一個(gè)變量在空間中的變化。我們使用 Plotly 中的 px 模塊來(lái)創(chuàng)建 choropleth 圖,具體函數(shù)為:px.choropleth。

這個(gè)函數(shù)的所包含的參數(shù)如下:

plotly.express.choropleth(data_frame=None, lat=None, lon=None, locations=None, locationmode=None, geojson=None, featureidkey=None, color=None, hover_name=None, hover_data=None, custom_data=None, animation_frame=None, animation_group=None, category_orders={}, labels={}, color_discrete_sequence=None, color_discrete_map={}, color_continuous_scale=None, range_color=None, color_continuous_midpoint=None, projection=None, scope=None, center=None, title=None, template=None, width=None, height=None)

choropleth() 這個(gè)函數(shù)還有幾點(diǎn)需要注意:

  1. geojson 是一個(gè) geometry 對(duì)象(上面函數(shù)第六個(gè)參數(shù))。這個(gè)對(duì)象有點(diǎn)讓人困擾,因?yàn)樵诤瘮?shù)文檔中沒(méi)有明確地提到這個(gè)對(duì)象。你可以提供,也可以不提供 geojson 對(duì)象。如果你提供了 geojson 對(duì)象,那么這個(gè)對(duì)象就會(huì)被用來(lái)繪制地球特征,如果不提供 geojson 對(duì)象,那這個(gè)函數(shù)默認(rèn)就會(huì)使用一個(gè)內(nèi)建的 geometry 對(duì)象。(在我們的實(shí)驗(yàn)中,我們使用內(nèi)建的 geometry 對(duì)象,因此我們不會(huì)為 geojson 參數(shù)提供值)

  2. DataFrame 對(duì)象有一個(gè) data_frame 屬性,在這里我們先前就提供了一個(gè)我們創(chuàng)建好的df1。

  3. 我們用 Confirmed(確診數(shù))來(lái)決定每個(gè)國(guó)家多邊形的顏色。

  4. 最后,我們 Date 列創(chuàng)建一個(gè) animation_frame。這樣我們就能通過(guò)日期來(lái)劃分?jǐn)?shù)據(jù),國(guó)家的顏色會(huì)隨著 Confirmed 的變化而變化。

最后完整的代碼如下:

import pycountryimport plotly.express as pximport pandas as pd# ----------- Step 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) # Uncomment to see what the dataframe is like# ----------- Step 2 ------------list_countries = df1['Country'].unique().tolist()# print(list_countries) # Uncomment to see list of countriesd_country_code = {}  # To hold the country names and their ISOfor country in list_countries:    try:        country_data = pycountry.countries.search_fuzzy(country)        # country_data is a list of objects of class pycountry.db.Country        # The first item  ie at index 0 of list is best fit        # object of class Country have an alpha_3 attribute        country_code = country_data[0].alpha_3        d_country_code.update({country: country_code})    except:        print('could not add ISO 3 code for ->', country)        # If could not find country, make ISO code ' '        d_country_code.update({country: ' '}) # print(d_country_code) # Uncomment to check dictionary   # create a new column iso_alpha in the df# and fill it with appropriate iso 3 codefor k, v in d_country_code.items():    df1.loc[(df1.Country == k), 'iso_alpha'] = v # print(df1.head)  # Uncomment to confirm that ISO codes added# ----------- Step 3 ------------fig = px.choropleth(data_frame = df1,                    locations= "iso_alpha",                    color= "Confirmed",  # value in column 'Confirmed' determines color                    hover_name= "Country",                    color_continuous_scale= 'RdYlGn',  #  color scale red, yellow green                    animation_frame= "Date") fig.show()

這段代碼的輸出就是下面這個(gè)圖的內(nèi)容:

怎么使用Python繪制COVID-19的全球擴(kuò)散圖

感謝各位的閱讀,以上就是“怎么使用Python繪制COVID-19的全球擴(kuò)散圖”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么使用Python繪制COVID-19的全球擴(kuò)散圖這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

新聞標(biāo)題:怎么使用Python繪制COVID-19的全球擴(kuò)散圖
本文URL:http://bm7419.com/article20/pdhpjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、ChatGPT外貿(mào)建站網(wǎng)站改版、網(wǎng)站營(yíng)銷(xiāo)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化