您好,登錄后才能下訂單哦!
怎么用Python可視化神器Plotly動態(tài)演示全球疫情變化趨勢,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
用 Python可視化神器 Plotly
動態(tài)演示全球疫情變化趨勢
各位同學(xué)早上好,我是 Lemonbit 。
近期對疫情數(shù)據(jù)進行可視化的內(nèi)容比較多,今天我來用 Python 可視化申請 Plotly 對國外的疫情發(fā)展情況進行可視化,以項目實戰(zhàn)的形式,在分析和了解國外疫情變化趨勢的同時,加深大家對 Plotly 的學(xué)習(xí)應(yīng)用。
在開始之前,我們先來看看最終制作的部分效果圖,如果你覺得有興趣,不妨繼續(xù)往下看。
數(shù)據(jù)來源
國內(nèi)的疫情,目前已逐步受到控制,各項指標(biāo)已開始明顯好轉(zhuǎn),但國外的情況,看起來不是太樂觀,已有的作業(yè)也沒有抄好,所以,本次我們主要來可視化分析國外疫情的發(fā)展情況。
疫情的數(shù)據(jù)來源于開源項目 Akshare,由于使用該項目獲取數(shù)據(jù)時,有時不太穩(wěn)定,可能會遇到連接失敗的情況,所以,這里我提供了保存好的數(shù)據(jù)供大家使用。
準(zhǔn)備工作
照例,還是先介紹下我運行的環(huán)境
Mac 系統(tǒng)
Anaconda(Python 3.7)
Jupyter Notebook
本次使用到的 Python 庫包括 akshare, pandas, plotly 等,導(dǎo)入如下:
import akshare as ak import pandas as pd import plotly from plotly.offline import iplot, init_notebook_mode import plotly.express as px from datetime import datetime init_notebook_mode()
接著,我們讀取已獲得的數(shù)據(jù),已保存的數(shù)據(jù)是截至3月7日的。
# 從 akshare 獲取數(shù)據(jù) # df_all_history = ak.epidemic_history() # 從csv文件獲取數(shù)據(jù) df_all_history = pd.read_csv('epidemic_all_20200307.csv',index_col=0) df_all_history
從上面獲取的數(shù)據(jù),有些數(shù)據(jù)格式需要加以調(diào)整,對于日期,我們這里會組織兩列數(shù)據(jù),一列是時間格式的日期( ['date']),一列是字符串格式的日期 ( ['dates'])。這樣設(shè)置的原因,是因為我們后續(xù)分別需要用到這兩種格式的日期。
df_all = df_all_history # 將字符串格式的日期 另保存為一列 df_all['dates'] = df_all_history['date'] # 將字符串格式的日期轉(zhuǎn)換為 日期格式 df_all['date'] = pd.to_datetime(df_all['date'])
獲取國外的疫情數(shù)據(jù)
上面的數(shù)據(jù),是全球的數(shù)據(jù),我們可以把其中屬于中國的剔除,就可以得到國外的數(shù)據(jù)了。
# 國外,按國家統(tǒng)計 df_oversea = df_all.query("country!='中國'") df_oversea.fillna(value="", inplace=True) df_oversea
先來用 plotly express 看下國外疫情分國家的整體走勢。
# 國外,按國家統(tǒng)計 df_oversea = df_all.query("country!='中國'") df_oversea.fillna(value="", inplace=True) df_oversea
從上圖可以看出,國外的疫情發(fā)展情況,大部分國家從2月10日期,發(fā)展趨勢較為明顯,因此,后面我們重點分析這段時間之后的情況。
# 現(xiàn)有數(shù)據(jù)演示從 2020年2月10日開始 df_overseadf_oversea_recent = df_oversea.set_index('date') df_oversea_recentdf_oversea_recent = df_oversea_recent['2020-02-10':] df_oversea_recent
由于部分國家的數(shù)據(jù)不是從2020年2月10日開始記錄的,所以要補充數(shù)據(jù)。我們可以手動新建一個 excel數(shù)據(jù)表,將補充日期的數(shù)值填充為 0 。
我這里主要補充的是伊朗的數(shù)據(jù),因為伊朗實在是發(fā)展太快了,必須納入分析的范圍內(nèi)。其他國家,如果有需要補充的,后續(xù)可以繼續(xù)完善。
# 由于部分國家,數(shù)據(jù)不是從2020年2月10日開始的,所以要補充數(shù)據(jù),數(shù)值為 0 # 數(shù)據(jù)在 excel 表格中進行補充,這里進行讀取 df_oversea_buchong = pd.read_excel('epidemic_buchong.xlsx') df_oversea_buchong['dates'] = df_oversea_buchong['date'].apply(lambda x:x.strftime('%Y-%m-%d')) df_oversea_buchong.set_index('date', inplace=True) df_oversea_buchong.fillna(value="", inplace=True) print(df_oversea_buchong.info()) df_oversea_buchong
將需要補充的數(shù)據(jù)弄好后,我們可以合并上面這兩部分數(shù)據(jù),一起進行分析。
# 合并補充數(shù)據(jù) df_oversea_recentdf_oversea_recent_new = df_oversea_recent.append(df_oversea_buchong) df_oversea_recent_new.sort_index(inplace=True) df_oversea_recent_new
得到合并的數(shù)據(jù)后,首先,我們用氣泡圖來對變化情況進行可視化,這里用的是 plotly express 的散點圖。
plotly express 現(xiàn)在已經(jīng)合并到 plotly 中,個人覺得跟 plotly 原生內(nèi)容的協(xié)同性相對 cufflinks 要好用點。
# 合并補充數(shù)據(jù) df_oversea_recentdf_oversea_recent_new = df_oversea_recent.append(df_oversea_buchong) df_oversea_recent_new.sort_index(inplace=True) df_oversea_recent_new
從上面這個動態(tài)圖可以清晰的看出,當(dāng)前,在海外的國家中,韓國、伊朗、意大利三個國家最為嚴重。這三個國家中,就增長趨勢而言,伊朗和意大利又比韓國要更明顯,目前韓國的增長有所放緩,而伊朗和意大利還處于快速增長的過程中,后續(xù)情況不容樂觀。
此外,在這個圖中,另外還有幾個國家值得關(guān)注,日本,除去鉆石號之外,從數(shù)據(jù)來看,本土的增長目前還算是在稍微較好的范圍內(nèi)。反倒是,德國、法國、西班牙,個人覺得已成逐步壯大之勢,不得不防。
而且,由于整個歐盟國家之間,人員是自由流通的,現(xiàn)在看來,整個歐盟很可能會成為疫情的重災(zāi)區(qū),其影響巨大。
上圖左下角的這些國家的走勢,我們可以拉近來看,走勢如下,這樣,對于 德國、法國、西班牙就會看的更明顯了。
這里,還有一個國家,就是美國,雖然從數(shù)據(jù)以及增長情況來看,好像美國還好,但恐怕實際情況,要糟糕很多。
上面是以氣泡圖的方式來演示變化過程,我們也可以以柱狀圖的形式來演示,效果如下:
關(guān)于上面的效果圖,各位可以自行研究下,歡迎交流。
需要說明的是,代碼是在 Jupyter Notebook 中運行的, 如果是在 PyCharm 等 IDE 中運行,需要稍微修改下代碼。
最后,再次感謝開源項目 Akshare 提供了數(shù)據(jù)接口。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。