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

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

來(lái)源:北大青鳥(niǎo)總部 2020年02月07日 08:50

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

至于數(shù)據(jù),從各大網(wǎng)站的實(shí)時(shí)疫情頁(yè)面就可以拿到。以某網(wǎng)站為例,用requests拿到html后,發(fā)現(xiàn)并沒(méi)有數(shù)據(jù)。不要慌,那證明是個(gè)javascript渲染的頁(yè)面,即使是javascript也是需要從后臺(tái)取數(shù)據(jù)的。打開(kāi)Chrome開(kāi)發(fā)者工具,點(diǎn)開(kāi)network,刷新頁(yè)面,點(diǎn)擊各個(gè)請(qǐng)求,肯定有一個(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ù)格式很簡(jiǎn)單,省數(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'}
英語(yǔ)好的同學(xué)可以直接猜到cureNum是治愈數(shù),deathNum是死亡人數(shù)。value應(yīng)該是確診數(shù),其它字段可以根據(jù)原網(wǎng)站表格確定
最直觀的圖表當(dāng)然是地圖了。國(guó)內(nèi)大廠出的echarts自然會(huì)對(duì)國(guó)內(nèi)地圖有最好的支持。用pip安裝pyecharts, 以及兩個(gè)數(shù)據(jù)包echarts-china-provinces-pypkg
echarts-china-cities-pypkg 即可
遍歷下json數(shù)據(jù),把省名和確診數(shù)存在data數(shù)據(jù)里傳給map對(duì)象就好
 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文件
代碼很簡(jiǎn)單,注意max是決定渲染顏色的。效果圖如下

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

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

在代碼中小編同樣做了很詳細(xì)的注釋,代碼中封裝了一個(gè)方法send_news(),該方法實(shí)現(xiàn)了將我們獲取的數(shù)據(jù),發(fā)送給指定的微信用戶。 最后我們通過(guò)itchat實(shí)現(xiàn)微信登陸,然后通過(guò)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)步,也希望疫情早日過(guò)去,祖國(guó)必將繁榮昌盛,戰(zhàn)勝疫情。
熱門班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開(kāi)發(fā)全能班 爆滿開(kāi)班
網(wǎng)絡(luò)安全運(yùn)營(yíng)班 爆滿開(kāi)班
報(bào)名優(yōu)惠
免費(fèi)試聽(tīng)
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接