<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 Python 可視化神器 Plotly 動(dòng)態(tài)演示全球疫情變化趨勢(shì)

          共 3880字,需瀏覽 8分鐘

           ·

          2020-03-12 23:21


          閱讀本文大概需要 9 分鐘。


          大家好,今天轉(zhuǎn)載的這一篇是借助 Plotly 工具來(lái)演示全球疫情變化趨勢(shì),同時(shí)該技能在日常的報(bào)表制作中也十分實(shí)用?。近期對(duì)疫情數(shù)據(jù)進(jìn)行可視化的內(nèi)容比較多,今天我來(lái)用 Python 可視化申請(qǐng) Plotly 對(duì)國(guó)外的疫情發(fā)展情況進(jìn)行可視化,以項(xiàng)目實(shí)戰(zhàn)的形式,在分析和了解國(guó)外疫情變化趨勢(shì)的同時(shí),加深大家對(duì) Plotly 的學(xué)習(xí)應(yīng)用。在開(kāi)始之前,我們先來(lái)看看最終制作的部分效果圖,如果你覺(jué)得有興趣,不妨繼續(xù)往下看。

          2af40e3c4a720593fa51bff6a6ece956.webp


          數(shù)據(jù)來(lái)源

          國(guó)內(nèi)的疫情,目前已逐步受到控制,各項(xiàng)指標(biāo)已開(kāi)始明顯好轉(zhuǎn),但國(guó)外的情況,看起來(lái)不是太樂(lè)觀,已有的作業(yè)也沒(méi)有抄好,所以,本次我們主要來(lái)可視化分析國(guó)外疫情的發(fā)展情況。疫情的數(shù)據(jù)來(lái)源于開(kāi)源項(xiàng)目 Akshare,由于使用該項(xiàng)目獲取數(shù)據(jù)時(shí),有時(shí)不太穩(wěn)定,可能會(huì)遇到連接失敗的情況。

          準(zhǔn)備工作

          照例,還是先介紹下我運(yùn)行的環(huán)境
          • Mac 系統(tǒng)

          • Anaconda(Python 3.7)

          • Jupyter Notebook

          本次使用到的 Python 庫(kù)包括 akshare, pandas, plotly 等,導(dǎo)入如下:
          1. import akshare as ak

          2. import pandas as pd

          3. import plotly

          4. from plotly.offline import iplot, init_notebook_mode

          5. import plotly.express as px

          6. from datetime import datetime


          7. init_notebook_mode()

          接著,我們讀取已獲得的數(shù)據(jù),已保存的數(shù)據(jù)是截至3月7日的。
          1. # 從 akshare 獲取數(shù)據(jù)

          2. # df_all_history = ak.epidemic_history()


          3. # 從csv文件獲取數(shù)據(jù)

          4. df_all_history = pd.read_csv('epidemic_all_20200307.csv',index_col=0)


          5. df_all_history

          從上面獲取的數(shù)據(jù),有些數(shù)據(jù)格式需要加以調(diào)整,對(duì)于日期,我們這里會(huì)組織兩列數(shù)據(jù),一列是時(shí)間格式的日期(?['date']),一列是字符串格式的日期 (?['dates'])。這樣設(shè)置的原因,是因?yàn)槲覀兒罄m(xù)分別需要用到這兩種格式的日期。
          1. df_all = df_all_history


          2. # 將字符串格式的日期 另保存為一列

          3. df_all['dates'] = df_all_history['date']


          4. # 將字符串格式的日期轉(zhuǎn)換為 日期格式

          5. df_all['date'] = pd.to_datetime(df_all['date'])

          獲取國(guó)外的疫情數(shù)據(jù)

          上面的數(shù)據(jù),是全球的數(shù)據(jù),我們可以把其中屬于中國(guó)的剔除,就可以得到國(guó)外的數(shù)據(jù)了。
          1. # 國(guó)外,按國(guó)家統(tǒng)計(jì)

          2. df_oversea = df_all.query("country!='中國(guó)'")

          3. df_oversea.fillna(value="", inplace=True)


          4. df_oversea

          先來(lái)用 plotly express 看下國(guó)外疫情分國(guó)家的整體走勢(shì)。
          1. fig_oversea = px.line(df_oversea, x='dates', y='confirmed',

          2. line_group='country',

          3. color='country',

          4. color_discrete_sequence=px.colors.qualitative.D3,

          5. hover_name='country',

          6. )


          7. fig_oversea.show()

          24f2db30a59199e98113790ad585c796.webp

          從上圖可以看出,國(guó)外的疫情發(fā)展情況,大部分國(guó)家從2月10日期,發(fā)展趨勢(shì)較為明顯,因此,后面我們重點(diǎn)分析這段時(shí)間之后的情況。
          1. # 現(xiàn)有數(shù)據(jù)演示從 2020年2月10日開(kāi)始

          2. df_oversea_recent = df_oversea.set_index('date')

          3. df_oversea_recent = df_oversea_recent['2020-02-10':]

          4. df_oversea_recent

          由于部分國(guó)家的數(shù)據(jù)不是從 2020 年 2 月 10 日開(kāi)始記錄的,所以要補(bǔ)充數(shù)據(jù)。我們可以手動(dòng)新建一個(gè) excel 數(shù)據(jù)表,將補(bǔ)充日期的數(shù)值填充為 0 。我這里主要補(bǔ)充的是伊朗的數(shù)據(jù),因?yàn)橐晾蕦?shí)在是發(fā)展太快了,必須納入分析的范圍內(nèi)。其他國(guó)家,如果有需要補(bǔ)充的,后續(xù)可以繼續(xù)完善。
          1. # 由于部分國(guó)家,數(shù)據(jù)不是從2020年2月10日開(kāi)始的,所以要補(bǔ)充數(shù)據(jù),數(shù)值為 0

          2. # 數(shù)據(jù)在 excel 表格中進(jìn)行補(bǔ)充,這里進(jìn)行讀取


          3. df_oversea_buchong = pd.read_excel('epidemic_buchong.xlsx')

          4. df_oversea_buchong['dates'] = df_oversea_buchong['date'].apply(lambda x:x.strftime('%Y-%m-%d'))

          5. df_oversea_buchong.set_index('date', inplace=True)

          6. df_oversea_buchong.fillna(value="", inplace=True)

          7. print(df_oversea_buchong.info())

          8. df_oversea_buchong

          將需要補(bǔ)充的數(shù)據(jù)弄好后,我們可以合并上面這兩部分?jǐn)?shù)據(jù),一起進(jìn)行分析。
          1. # 合并補(bǔ)充數(shù)據(jù)


          2. df_oversea_recent_new = df_oversea_recent.append(df_oversea_buchong)


          3. df_oversea_recent_new.sort_index(inplace=True)


          4. df_oversea_recent_new

          得到合并的數(shù)據(jù)后,首先,我們用氣泡圖來(lái)對(duì)變化情況進(jìn)行可視化,這里用的是 plotly express 的散點(diǎn)圖。plotly express 現(xiàn)在已經(jīng)合并到 plotly 中,個(gè)人覺(jué)得跟 plotly 原生內(nèi)容的協(xié)同性相對(duì) cufflinks 要好用點(diǎn)。
          1. # -*- coding: utf-8 -*-

          2. """

          3. @Author: Lemonbit

          4. @出品:Python數(shù)據(jù)之道

          5. @Homepage: liyangbit.com

          6. """


          7. fig_oversea_recent = px.scatter(df_oversea_recent_new, x='dead', y='confirmed',

          8. size='confirmed', text='country', color='country',

          9. color_discrete_sequence=px.colors.qualitative.Light24,

          10. animation_frame='dates',animation_group='country',

          11. hover_name='country',

          12. range_x=[-10,260],

          13. range_y=[0,8000],

          14. size_max=50,

          15. template='plotly_white',

          16. )


          17. fig_oversea_recent.show()

          2af40e3c4a720593fa51bff6a6ece956.webp

          從上面這個(gè)動(dòng)態(tài)圖可以清晰的看出,當(dāng)前,在海外的國(guó)家中,韓國(guó)、伊朗、意大利三個(gè)國(guó)家最為嚴(yán)重。這三個(gè)國(guó)家中,就增長(zhǎng)趨勢(shì)而言,伊朗和意大利又比韓國(guó)要更明顯,目前韓國(guó)的增長(zhǎng)有所放緩,而伊朗和意大利還處于快速增長(zhǎng)的過(guò)程中,后續(xù)情況不容樂(lè)觀。此外,在這個(gè)圖中,另外還有幾個(gè)國(guó)家值得關(guān)注,日本,除去鉆石號(hào)之外,從數(shù)據(jù)來(lái)看,本土的增長(zhǎng)目前還算是在稍微較好的范圍內(nèi)。反倒是,德國(guó)、法國(guó)、西班牙,個(gè)人覺(jué)得已成逐步壯大之勢(shì),不得不防。而且,由于整個(gè)歐盟國(guó)家之間,人員是自由流通的,現(xiàn)在看來(lái),整個(gè)歐盟很可能會(huì)成為疫情的重災(zāi)區(qū),其影響巨大。上圖左下角的這些國(guó)家的走勢(shì),我們可以拉近來(lái)看,走勢(shì)如下,這樣,對(duì)于 德國(guó)、法國(guó)、西班牙就會(huì)看的更明顯了。

          9efd7b279e9233cededad60b47124591.webp


          8a34c42ac8563b4a93b4b86cd5f03436.webp


          這里,還有一個(gè)國(guó)家,就是美國(guó),雖然從數(shù)據(jù)以及增長(zhǎng)情況來(lái)看,好像美國(guó)還好,但恐怕實(shí)際情況,要糟糕很多。上面是以氣泡圖的方式來(lái)演示變化過(guò)程,我們也可以以柱狀圖的形式來(lái)演示,效果如下:

          2af16b3c30d3d825c64792e447a3f2a2.webp

          關(guān)于上面的效果圖,各位可以自行研究下,歡迎交流。最后,關(guān)于數(shù)據(jù)的獲取,大家可以點(diǎn)擊左下角的「閱讀原文」查看官方介紹。
          需要說(shuō)明的是,本文代碼是在 Jupyter Notebook 中運(yùn)行的, 如果是在 PyCharm 等 IDE 中運(yùn)行,需要稍微修改下代碼。

          推薦閱讀

          1

          Python 中更優(yōu)雅的日志記錄方案

          2

          別再造假數(shù)據(jù)了,來(lái)試試 Faker 這個(gè)庫(kù)吧!

          3

          200 行代碼實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼

          4??

          如何用一條命令將網(wǎng)頁(yè)轉(zhuǎn)成電腦 App


          好文和朋友一起看~
          瀏覽 62
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青春草在线观看 | 樱桃香蕉视频 | 逼视频欧美| 91亚洲精品久久久久蜜桃 | 国产高潮在线 |