前言
文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:谦睿科技
Python
Python的设计哲学是“优雅、明确、简单”。它的语言方式与自然语言很接近 ,具有很好的可阅读性,当然理解起来也就不是晦涩难懂,更容易让人亲近。
Python语言(Python原意是一种“大蟒蛇”)
Python在最新的编程语言排名中第三名
目前我国也正在逐步将Python纳入教学体系,浙江省已纳入高考,7选3。山东省甚至将其作为小学六年级的信息学教材。南京市列入中考特招项。
当前全球的疫情还在持续中,我们如用python来制作疫情趋势变化图?
在遇到难题时当然要学会去GitHub找找思路,只需要在GitHub上搜索疫情数据就能看到很多大神做的疫情数据爬虫
甚至有些会项目提供数据接口(https://lab.isaaclin.cn/nCoV/),按照使用说明调用端口即可。注意请求频率哦
AkShare 是基于 Python 的开源数据接口库, 目的是实现对期货, 期权, 基金等衍生金融产品和另类数据从数据采集, 数据清洗加工, 到数据下载的工具, 满足金融数据科学家, 数据科学爱好者在数据获取方面的需求。那么这个提供金融数据的库目前也采集了网易和丁香园的疫情数据提供给大家
使用起来也很简单
import akshare as akepidemic_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 stadardTimefor 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 Fakerfrom pyecharts import options as optsfrom pyecharts.charts import Bar, Page, Pie, Timeline,Griddef 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 tltimeline_bar().render_notebook()
可以看出,国内的增长已经处于平缓状态,而国外自二月底来突然爆发,目前还处于上升期,这也是为什么现在要严防境外输入病例。再来看看国外具体的病例占比吧(微信GIF只能上传5M所以有点糊):
可以看出在最近几天韩国、日本、意大利突然爆发,这三个国家的病例数量就占到了约75%。最后再来看看全球疫情的变化趋势吧!
至此,我们就完全使用Python对疫情数据进行了一次动态可视化,最后还是要说一句,疫情仍未散去,大家要继续做好防护!小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编即可领取。