學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

如何使用Python實(shí)時(shí)監(jiān)控疫情的發(fā)展動(dòng)向嗎?小白們快來學(xué)習(xí)吧!

來源:北大青鳥總部 2020年02月07日 08:50

摘要: 如何使用Python實(shí)時(shí)監(jiān)控疫情的發(fā)展動(dòng)向嗎?小白們快來學(xué)習(xí)吧!
2020年注定是不平凡的一年,從2019年12月開始的新型冠狀病毒肺炎疫情席卷湖北省,并且有向全國逐步蔓延的趨勢。但是經(jīng)全國之力,萬眾一心,相信在不久的將來疫情就會(huì)被有效控制,直至將疫情消滅。
最近一周每天早上起來第一件事,就是打開新聞軟件看疫情相關(guān)的新聞。了解下自己和親友所在城市的確診人數(shù),但純數(shù)字還是缺乏一個(gè)直觀的概念。那我們來做一個(gè)吧。

至于數(shù)據(jù),從各大網(wǎng)站的實(shí)時(shí)疫情頁面就可以拿到。以某網(wǎng)站為例,用requests拿到html后,發(fā)現(xiàn)并沒有數(shù)據(jù)。不要慌,那證明是個(gè)javascript渲染的頁面,即使是javascript也是需要從后臺(tái)取數(shù)據(jù)的。打開Chrome開發(fā)者工具,點(diǎn)開network,刷新頁面,點(diǎn)擊各個(gè)請求,肯定有一個(gè)是取json的。
注意這里的返回?cái)?shù)據(jù)是包含在一個(gè)js變量的,用正則處理下就好,然后用python自帶的json.loads方法就可以轉(zhuǎn)為dict了
 result = requests.get(  'https://interface.sina.cn/news/wap/fymap2020_data.d.json?1580097300739&&callback=sinajp_1580097300873005379567841634181')    json_str = re.search("\(+([^)]*)\)+", result.text).group(1)    html = f"{json_str}"    table = json.loads(f"{html}")
數(shù)據(jù)格式很簡單,省數(shù)據(jù)和下屬城市的數(shù)據(jù)
{  'city': [   {   'conNum': '4',  'cureNum': '0',  'deathNum': '0',  'name': '烏魯木齊',  'susNum': '0'},  {   'conNum': '1',  'cureNum': '0',  'deathNum': '0',  'name': '伊犁州',  'susNum': '0'}],  'cureNum': '0',  'deathNum': '0',  'name': '新疆',  'susNum': '0',  'value': '5'}
英語好的同學(xué)可以直接猜到cureNum是治愈數(shù),deathNum是死亡人數(shù)。value應(yīng)該是確診數(shù),其它字段可以根據(jù)原網(wǎng)站表格確定
最直觀的圖表當(dāng)然是地圖了。國內(nèi)大廠出的echarts自然會(huì)對國內(nèi)地圖有最好的支持。用pip安裝pyecharts, 以及兩個(gè)數(shù)據(jù)包echarts-china-provinces-pypkg
echarts-china-cities-pypkg 即可
遍歷下json數(shù)據(jù),把省名和確診數(shù)存在data數(shù)據(jù)里傳給map對象就好
 for province in table['data']['list']:        pp.pprint(province)        data.append((province['name'], province['value']))  for city in province['city']:            pp.pprint(city)map_p = Map()map_p.set_global_opts(title_opts=opts.TitleOpts(title="實(shí)時(shí)疫情圖"), visualmap_opts=opts.VisualMapOpts(max_=100))map_p.add("確診", data, maptype="china")map_p.render("ncov.html")  # 生成html文件
代碼很簡單,注意max是決定渲染顏色的。效果圖如下

達(dá)到100確診的省份一目了然。感興趣的同學(xué)還可以制作市級別或者世界地圖。
下面和大家分享如何開發(fā)一個(gè)簡易程序,實(shí)時(shí)監(jiān)控疫情狀況,并定時(shí)發(fā)送微信給自己或自己的好友。
首先我們要實(shí)現(xiàn)這么一個(gè)簡易程序,首先要將任務(wù)拆解為兩個(gè)個(gè)部分:
  1. 獲取疫情實(shí)時(shí)信息
  2. 將信息定時(shí)發(fā)送至微信好友
我們在獲取疫情實(shí)時(shí)信息的時(shí)候,采用requests庫,使用爬蟲抓取疫情實(shí)時(shí)信息的相關(guān)接口,然后將我們想要了解的信息解析出來,并生成要發(fā)送的信息。之后我們通過itchat庫實(shí)現(xiàn)微信的登錄與微信信息發(fā)送,將上一步所獲取的信息發(fā)送給好友,如果要設(shè)置為定時(shí)發(fā)送(比如每隔1小時(shí)發(fā)送一次信息),那么我們可以借助apscheduler庫實(shí)現(xiàn)定時(shí)任務(wù)調(diào)度,這樣就可以完成整個(gè)程序的開發(fā)了。廢話不多說,直接上代碼:
獲取疫情實(shí)時(shí)信息,我們通過查找資料,發(fā)現(xiàn)丁香醫(yī)生的疫情實(shí)時(shí)信息接口,接口地址為:https://service-f9fjwngp-1252021671.bj.apigw.tencentcs.com/release/pneumonia
接下來編寫獲取疫情實(shí)時(shí)信息的代碼:

在代碼中,小編做了詳細(xì)的注釋,解釋了每一行代碼的含義,大致上代碼邏輯為:通過requests庫請求疫情實(shí)時(shí)數(shù)據(jù)接口,獲取接口數(shù)據(jù)。
  • 對接口數(shù)據(jù)進(jìn)行json解析
  • 獲取更新時(shí)間并轉(zhuǎn)換時(shí)間格式
  • 獲取我們所想獲得的數(shù)據(jù)
  • 對數(shù)據(jù)進(jìn)行字符串拼接,并返回該字符串
我們只獲取了全國確診病例、疑似病例、死亡病例、治愈病例和更新時(shí)間這幾個(gè)字段,當(dāng)然接口中還有很多其他的信息同樣可以很簡便的獲取,如較昨日所增加的病例,如某個(gè)地區(qū)的詳細(xì)疫情情況等都可以很方便的獲取,在這就留給同學(xué)們?nèi)U(kuò)展自己想要關(guān)注的疫情內(nèi)容了。
編寫完疫情實(shí)時(shí)獲取的功能之后,接下來編寫微信定時(shí)發(fā)送消息,代碼如下:

在代碼中小編同樣做了很詳細(xì)的注釋,代碼中封裝了一個(gè)方法send_news(),該方法實(shí)現(xiàn)了將我們獲取的數(shù)據(jù),發(fā)送給指定的微信用戶。 最后我們通過itchat實(shí)現(xiàn)微信登陸,然后通過apscheduler實(shí)現(xiàn)任務(wù)的調(diào)度,該任務(wù)就是send_news()方法,最后只需要運(yùn)行py_wechat.py這個(gè)文件,就可以輕松的在微信中接受消息啦,比如小編想每隔一小時(shí)就給”小花”通知一次疫情的實(shí)時(shí)情況,效果:

并且這條消息會(huì)每個(gè)小時(shí)都發(fā)送一次,而且每次發(fā)送的都是最新的消息。 最后后祝愿各位同學(xué)在疫情發(fā)生時(shí)同樣學(xué)習(xí)進(jìn)步,也希望疫情早日過去,祖國必將繁榮昌盛,戰(zhàn)勝疫情。
熱門班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運(yùn)營班 爆滿開班
報(bào)名優(yōu)惠
免費(fèi)試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接