用python畫出全球疫情趨勢變化圖

前言

文的文字及圖片來源於網絡,僅供學習、交流使用,不具備任何商業用途,版權歸原做者全部,若有問題請及時聯繫咱們以做處理。python

做者:謙睿科技編程

PS:若有須要Python學習資料的小夥伴能夠加點擊下方連接自行獲取http://t.cn/A6Zvjdunjson

Pythonapi

Python的設計哲學是「優雅、明確、簡單」。它的語言方式與天然語言很接近 ,具備很好的可閱讀性,固然理解起來也就不是晦澀難懂,更容易讓人親近。微信

 

Python語言(Python原意是一種「大蟒蛇」)網絡

 

Python在最新的編程語言排名中第三名app

 

目前我國也正在逐步將Python歸入教學體系,浙江省已歸入高考,7選3。山東省甚至將其做爲小學六年級的信息學教材。南京市列入中考特招項。echarts

 

當前全球的疫情還在持續中,咱們如用python來製做疫情趨勢變化圖?編程語言

在遇到難題時固然要學會去GitHub找找思路,只須要在GitHub上搜索疫情數據就能看到不少大神作的疫情數據爬蟲ide

甚至有些會項目提供數據接口(https://lab.isaaclin.cn/nCoV/),按照使用說明調用端口便可。注意請求頻率哦

AkShare 是基於 Python 的開源數據接口庫, 目的是實現對期貨, 期權, 基金等衍生金融產品和另類數據從數據採集, 數據清洗加工, 到數據下載的工具, 知足金融數據科學家, 數據科學愛好者在數據獲取方面的需求。那麼這個提供金融數據的庫目前也採集了網易和丁香園的疫情數據提供給你們

使用起來也很簡單

import akshare as ak
epidemic_hist_all_df = ak.epidemic_hist_all() #獲取所有歷史數據

最近國內疫情已經有所好轉,可是國外的狀況不容樂觀,那麼怎樣用Python去製做動態圖表來看全球疫情變化趨勢呢?好比下面的國內外疫情發展趨勢:

其實用Python實現並不難,簡單來講就分爲三步:

  • 獲取數據(requests)
  • 數據清洗(pandas)
  • 數據可視化(pyecharts)

數據獲取與處理

 

疫情數據獲取並非很難,在目前互聯網上已經有許多提供數據的網站。

接下來兩行命令就能拿下全部歷史數據

data = requests.get('https://lab.isaaclin.cn/nCoV/api/area?latest=0')
data = data.json()

先來看下數據量

能夠看到一共採集到了7584條數據,因爲髒數據比較多,因此這一部分的工做量是比較大的。

首先要將全部數據從字典提取出來並對時間戳進行轉換,而後將數據保存到pandas裏

data = requests.get('https://lab.isaaclin.cn/nCoV/api/area?latest=0')
data = data.json()
res = data['results']
df = pd.DataFrame(res)
def time_c(timeNum):
    timeTemp = float(timeNum/1000)
    tupTime = time.localtime(timeTemp)
    stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime)
    return stadardTime

for i in range(len(df)):

    df.iloc[i,16] = time_c(df.iloc[i,16])

for i in range(len(df)):

    df.iloc[i,16] = df.iloc[i,16][5:10]

如今數據就成了這樣

這樣看起來就舒服多了,可是仍是不可使用,由於API天天會採集不少次數據,因此裏面有不少重複數據和異常數據,因此接下來重點處理這一部分。對於重複數據咱們只保留最新一個,對於空數據咱們選擇前一天的數據填充。

#去重部分代碼
tem = df1[df1['updateTime'] == '03-02']
tem = tem.drop_duplicates(['provinceShortName'], keep='last')
for i in date[1:41]:
    tem1 = df1[df1['updateTime'] == i]
    tem1 = tem1.drop_duplicates(['provinceName'], keep='last')
    tem = tem.append(tem1)

tem = tem.reset_index(drop=True)
tem

因爲篇幅緣由,就再也不貼出更多的代碼,咱們來看下最終處理完的數據

數據可視化

 

首先是國內外疫情趨勢

public class MyActivity extends AppCompatActivity from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Page, Pie, Timeline,Grid


def timeline_bar() -> Timeline:
    x = ['國內','國外']
    tl = Timeline()
    tl = Timeline()
    tl.add_schema(is_auto_play = True,
    play_interval = 500,
    is_loop_play = False)
    k= 0
    for i in date:
        bar = (
            Line()
            .add_xaxis(date)
            .add_yaxis("國內", hs(c1,k))
            .add_yaxis("國外", hs(c,k))
            .extend_axis(
            yaxis=opts.AxisOpts(
            )
        )
            .set_series_opts(
            areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .set_global_opts(title_opts=opts.TitleOpts("{}國內外疫情趨勢".format(i)))
        )
        tl.add(bar, "{}".format(i))
        k = k + 1
    return tl
timeline_bar().render_notebook()

能夠看出,國內的增加已經處於平緩狀態,而國外自二月底來忽然爆發,目前還處於上升期,這也是爲何如今要嚴防境外輸入病例。再來看看國外具體的病例佔比吧(微信GIF只能上傳5M因此有點糊):

能夠看出在最近幾天韓國、日本、意大利忽然爆發,這三個國家的病例數量就佔到了約75%。最後再來看看全球疫情的變化趨勢吧!

 

至此,咱們就徹底使用Python對疫情數據進行了一次動態可視化,最後仍是要說一句,疫情仍未散去,你們要繼續作好防禦!

相關文章
相關標籤/搜索