covid19数据挖掘与可视化实验
数据说明:
来源: https://www.kesci.com/mw/project/5e68db4acdf64e002c97b413/dataset
(ncov)
日期:从2020年1月21日开始
累计确诊:当日累计确诊
全国新增确诊:全国当日新增确诊
湖北新增确诊:湖北省当日新增确诊
累计疑似:实为当日全国现有疑似
新增疑似:当日新增疑似
现有重症:当日现有重症
新增重症:当日新增重症,若减少统计为0
累计死亡:当日累计死亡
全国新增死亡:当日全国新增死亡
湖北新增死亡:当日湖北省新增死亡
累计治愈:当日全国累计治愈
全国新增治愈:当日全国新增治愈
湖北新增治愈:当日湖北省新增治愈
当日密切接触:当日全国新增密切接触,为当日累计密接减去截止前一天累计密接人数
当日解除观察:当日全国解除观察
累计继续观察:截至当日剩余继续观察
累计入境:截至当日累计确诊入境人员,从3月1日开始统计(3月1、2、3日国家卫健委未通报入境确诊情况,数据来自其他地方,可能不准确)
新增入境:当日入境人员新增确诊,从3月1日开始统计(3月1、2、3日国家卫健委未通报入境确诊情况,数据来自其他地方,可能不准确)
(beijing_local)
数据仅包含从6月11日开始北京本地患者变化情况,不包含境外患者。
日期:从2020年6月11日至2020年7月31日
累计确诊:当日累计确诊
累计治愈:当日累计治愈
累计死亡:当日累计死亡
现有无症状:截至当日现有无症状感染者
新增确诊:当日新增确诊
新增治愈:当日新增治愈
新增死亡:当日新增死亡
新增疑似:截至当日新增疑似
新增无症状:截至当日新增无症状感染者
思路分析:
我把重心放在数据挖掘上,所以没有自己爬数据,所以使用的数据是已有的清洗过的干净的数据。数据来源于
首先是从磁盘中读取文件:,采用with open打开文件,然后使用read_csv 读取文件
代码如下:
*with open('E:/DM/data/ncov.csv')as f:*
*data = pd.read\_csv(f)*
*date_list = list(data['日期'])*
*confirm_list = list(data['累计确诊'])*
*suspect_list = list(data['累计疑似'])*
*dead_list = list(data['累计死亡'])*
*heal_list = list(data['累计治愈'])*
数据测试:
f =open('E://DM/data/ncov.csv')
df1 = pd.read\_csv(f)
测试数据是否正确可读,结果如图:
然后通过pyecharts
模块绘制折线图,绘制累计确诊、累计疑似等数据的曲线图,输出到output目录下:
结果如下:
同理,读取北京地区的数据,通过.add_xaxis 方法将北京的数据中时间加入pyecharts
的对象中,作为横坐标,然后把其他数据加入横坐标中,绘制图像后保存到bei_jing的HTML中,如下图:
然后是绘制全国数据的折线面积图:核心代码如下:
*line = (*
*Line()*
*.add\_xaxis(date_list)*
*.add_yaxis('确诊数据', confirm_list, is_smooth=True,*
*markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))*
*.add_yaxis('疑似数据', suspect_list, is_smooth=True,*
*markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),)*
*.add_yaxis('死亡数据', dead_list, is_smooth=True,*
*markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),)*
*.add_yaxis('治愈数据', heal_list, is_smooth=True,*
*markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),)*
*\# 隐藏数字 设置面积*
*.set\_series_opts(*
*areastyle_opts=opts.AreaStyleOpts(opacity=0.5),*
*label_opts=opts.LabelOpts(is_show=False))*
*\# 设置x轴标签旋转角度*
*.set\_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),*
*yaxis_opts=opts.AxisOpts(name='人数', min_=3),*
*title_opts=opts.TitleOpts(title='2019-nCoV曲线图'))*
*)*
*line.render('E:/DM/output/全国-nCoV曲线面积图2.html')*
结果如图:
最后是在第二个分析的基础上,加上最大值和最小值
更改代码:
opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max"),
opts.MarkPointItem(type_="min")]))
运行结果如下:
第二部分是基于确诊人数的预测分析。
1、首先是通过数据建立函数模型,通过 matlab的扩展绘制出来。
核心代码如下:
t = range(len(confirm)) # 构建作图的横坐标
fig = plt.figure(figsize=(10,4))
ax = fig.add_subplot(1,1,1)
ax.scatter(t,confirm,color="k",label="确诊人数") #真实数据散点图
#ax.set_xlabel("天数") #横坐标
ax.set_ylabel("确诊人数") #纵坐标
ax.set_title("确诊人数变化") #标题
ax.set_xticklabels(['', '2020/1/21', '2020/2/21', '2020/3/21',
'2020/4/21','2020/5/21','2020/6/21'], rotation=30, fontsize=10)
#自定义横坐标标签
得出的拟合函数如图所示:
拟合
查阅资料知道对于人数增长的模型,一般logistic模型进行拟合用
需要先定义出函数表达式,这里采用logistic函数,因为从散点图可以看到这些散点大致分布在“S”形曲线的前半部分上,logistic函数表达式如下
查阅资料得知:
K为环境容量,即增长到最后,f(t)能达到的极限
P0为初始容量,就是t=0时刻的数量。
r为增长速率,r越大则增长越快,越快逼近K值,r越小增长越慢,越慢逼近K值。
首先定义出logistic函数,其中K,P0,r是待求的参数,然后调用from
scipy.optimize里面的curve_fit函数进行拟合,会得到拟合参数,接着把拟合曲线也绘制出来
核心代码如下:
*def logistic(t,K,P0,r): \#定义logistic函数*
*exp_value=np.exp(r\*(t))*
*return (K\*exp_value\*41)/(K+(exp_value-1)\*41)*
*coef, pcov = curve_fit(logistic, t, confirm) \#拟合*
*print(coef) \#logistic函数参数*
*y_values = logistic(t,coef[0],coef[1],coef[2]) \#拟合y值*
*plt.plot(t,y_values,color="blue",label="拟合曲线") \#画出拟合曲线*
绘制得到如图所示的曲线:
最后一部分 是通过获得的拟合曲线,预测结果
代码如下:
*x=np.linspace(23,46,24) \#构造期货日期*
*y_predict=logistic(x,coef[0], coef[1], coef[2]) \#未来预测值*
*ax.scatter(x,y_predict, color="green",label="未来预测") \#未来预测散点*
*ax.legend() \#加标签*
*ax.plot(x,y_predict,color="blue", label="预测曲线")*
得出的结果如下:
可以看到最终的结果是跟预测分析的结果几乎一模一样
我认为这时因为数据集很大,包括了从1月21日开始一直到9月21日的全部数据,所以拟合度很高,几乎一模一样,但也说明了拟合的正确性
遇到的问题:
1)、当我尝试输入日期和确诊人数的绘图时,notebook报错
Image size of 4490273x485 pixels is too large. It must be less than 2^16 in
each direction
图片像素过大,无法输出。
最终选择导出为html文件,因为html文件的兼容性,很好的解决这个问题。
实验总结:
这次实验所有的实验过程都是基于jupyter
notebook,也是一次全新的尝试,发现notebook在做分析时效率很明显,不用去配置环境变量,基于anaconda的环境使得使用起来很方便。
实验过程中查阅的大量的资料,也是第一次真正的接触数据挖掘,作业开始之前请教一位这方面的师兄,有没有比较速成的数据挖掘入门的教程,得到这样一句话:
确实是这样。
实验中深刻的认识到,数学和计算机科学本来就是同一门学科,就想起一大佬的一句话:
“统计学做不到的人工智能也做不到“。
还要继续加油,要学的东西还有好多。
covid19数据挖掘与可视化实验的更多相关文章
- 《数据挖掘导论》实验课——实验七、数据挖掘之K-means聚类算法
实验七.数据挖掘之K-means聚类算法 一.实验目的 1. 理解K-means聚类算法的基本原理 2. 学会用python实现K-means算法 二.实验工具 1. Anaconda 2. skle ...
- 《数据挖掘导论》实验课——实验四、数据挖掘之KNN,Naive Bayes
实验四.数据挖掘之KNN,Naive Bayes 一.实验目的 1. 掌握KNN的原理 2. 掌握Naive Bayes的原理 3. 学会利用KNN与Navie Bayes解决分类问题 二.实验工具 ...
- 《数据挖掘导论》实验课——实验二、数据处理之Matplotlib
实验二.数据处理之Matplotlib 一.实验目的 1. 了解matplotlib库的基本功能 2. 掌握matplotlib库的使用方法 二.实验工具: 1. Anaconda 2. Numpy, ...
- 《数据挖掘导论》实验课——实验一、数据处理之Numpy
实验一.数据处理之Numpy 一.实验目的 1. 了解numpy库的基本功能 2. 掌握Numpy库的对数组的操作与运算 二.实验工具: 1. Anaconda 2. Numpy 三.Numpy简介 ...
- Python学习:基本概念
Python学习:基本概念 一,python的特点: 1,python应用场景多;爬虫,网站,数据挖掘,可视化演示. 2,python运行速度慢,但如果CPU够强,这差距并不明显. 3,严格的缩进式编 ...
- 【秒懂】号称最为简明实用的Django上手教程(下)
号称最为简明实用的Django上手教程(下) 作者:白宁超 2017年8月25日08:51:58 摘要:上文号称[最为简明实用的Django上手教程]介绍了django基本概念.配置和相关操作.相信通 ...
- 【原创 深度学习与TensorFlow 动手实践系列 - 2】第二课:传统神经网络
第二课 传统神经网络 <深度学习>整体结构: 线性回归 -> 神经网络 -> 卷积神经网络(CNN)-> 循环神经网络(RNN)- LSTM 目标分类(人脸识别,物品识别 ...
- 【转】JCR期刊分区及其检索方法
不少机构依据JCR期刊分区制定科研激励政策,相关科研工作者及科研管理机构密切关注JCR期刊分区及其检索方法.本文作一粗略介绍. 关于JCR(Journal Citation Reports,期刊 ...
- 5个Spark应用实例
Spark简介: Spark是UC Berkeley AMP lab开发的一个集群计算的框架,类似于Hadoop,但有很多的区别.最大的优化是让计算任务的中间结果可以存储在内存中,不需要每次都写入HD ...
随机推荐
- Hive实战—时间滑动窗口计算
关注公众号:大数据技术派,回复: 资料,领取1024G资料. 目录 时间滑动计算 外部调用实现时间循环 自关联实现滑动时间窗口 扩展基于自然周的的滚动时间窗口计算 总结 时间滑动计算 今天遇到一个需求 ...
- SQL优化一例:通过改变分组条件(减少计算次数)来提高效率
#与各人授权日期相关,所以有十万用户,就有十万次查询(相关子查询) @Run.ExecuteSql("更新各人应听正课数",@"update bi_data.study_ ...
- SpringBoot结果集包装类
1.前言 在SpringBoot项目中.看了一部分代码.发现一般的接口以JSON形式返回最佳.接口规范遵照RESTFUL风格来写.返回的结果集呢.借助包装类来包装.这样有利于前后端的交互.写出来的代码 ...
- IDEA中SpringBoot启动报错Error:(11, 39) java: 找不到符号
确保不是依赖没有导入或者编码不对问题后 如果还是不行 可以试试以下方式 解决办法 将图片框中Delegate IDE build 勾选 然后重新启动即可
- nim_duilib(14)之xml配置半透明窗体控件不透明
before starting note 截至目前,我只能用xml写一些简单的布局和设置控件属性,循序渐进吧. 正在学习nim_duilib的xml的一些属性. xml配置半透明 GTAV中就有很多控 ...
- Fast Matrix Operations(UVA)11992
UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...
- css怎么实现雪人
冬天来了,怎么能少的了雪人呢,不管是现实中还是程序员的代码中统统都的安排上,那就一次安排几个雪人兄弟,咱们先看效果图: 有喜欢的就赶紧cv拿走吧!!! 其详细代码如下: 图1 html部分: < ...
- [C++]高效C/C ++编程tips
Effective C++ 视C++ 为一个语言联邦(C.Object-Oriented C++.Template C++.STL) 宁可以编译器替换预处理器(尽量以const.enum.inline ...
- [算法笔记-题解]问题 D: 习题4-4 三个整数求最大值
问题 D: 习题4-4 三个整数求最大值 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 有3个整数a, b, c,由键盘输入,输出其中最大的数. 输入 ...
- RotateRect(旋转矩形)的倾斜旋转变换矫正
在Opencv中的图像处理中,经常要用到minAreaRect()函数求最小外接矩形,该函数的返回值就是一个RotatedRect类对象. RotatedRect类定义如下: class CV_EXP ...