一、背景
2020年1月新型冠状病毒(以下简称新冠)肺炎在极短时间内就在全球范围内大规模流行,据美国约翰斯·霍普金斯大学11月8日发布的新冠疫情最新统计数据显示,截至美国东部时间11月8日11时24分全球累计确诊人数超过5000万,死亡人数超过125万。由于新冠病毒的传播速度快、致死率较高,世界卫生组织称新冠是百年一遇的人类公敌。自新冠肺炎爆发以来,面对社会对疫情信息的迫切需求,各级政府部门通过多种渠道及时发布第一手相关数据,许多组织和个人也迅速行动,利用多种分析手段为公众提供疫情数据的解读分析,以消除公众的恐慌情绪,提高人们的自我防护意识,配合政府的防疫措施,为我国最终打赢疫情防控阻击战发挥了巨大的推动作用。
本赛题提供收集自网络并经过适当处理的有关新冠疫情的数据,仅供本次竞赛使用,并不确保数据的真实性和准确性。

二、目标
对疫情数据进行简单的统计。
设计可视化数字大屏展示新冠疫情的时空变化情况。
使用可视化工具绘制城市疫情风险图。
对国内的疫情变化情况进行分析。

三、任务

为统一分析标准,假设国内的新冠确诊病人都入院收治,被传染者有5天的潜伏期,被传染3天后具备传染性。例如:2月1日被传染,2月6日开始出现症状,并被确诊,2月4日开始具备传染性。
请根据附件1中提供的数据,自行选择分析工具完成以下任务,并撰写报告。

  • 任务1数据的基本处理:

  •  任务1.1

根据附件1“城市疫情”中的数据统计各城市自首次通报确诊病例后至6月30日的每日累计确诊人数、累计治愈人数和累计死亡人数,将结果保存为“task1_1.csv”,第一行为字段名,按城市、日期、累计确诊人数、累计治愈人数、累计死亡人数的次序分别放在A列~E列。在论文中给出实现方法的相关描述,并列表给出武汉、深圳、保定每月10、25日的统计结果。

我们发现城市疫情数据表中并不是每一天都有对应的数据,有些天数的数据是缺失的。通过观察数据表,我们判断得到结论:缺失的数据行是因为该区域当天无新增的确诊、死亡或是治愈病例。因此要对缺失数据进行补充

import pandas as pd
import numpy as np
from datetime import  datetime#xlrd 1.2以上的版本不能读取xlsx格式的文件,只能读取xls,设置engine='openpyxl'即可打开
data=pd.ExcelFile('D:/Python数据分析与挖掘实战/赛题B-新冠疫情数据分析/附件1.xlsx',engine='openpyxl')
#提取‘城市疫情’表
city_pan=data.parse('城市疫情')
#查看前5行数据
print(city_pan.head())out:日期  城市  新增确诊  新增治愈  新增死亡
0 2020-01-10  武汉    41     2     1
1 2020-01-11  武汉     0     4     0
2 2020-01-12  武汉     0     1     0
3 2020-01-15  武汉     0     5     1
4 2020-01-16  武汉     4     3     0#查看数据信息,及每列的数据格式print(city_pan.info())out:<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10245 entries, 0 to 10244
Data columns (total 5 columns):#   Column  Non-Null Count  Dtype
---  ------  --------------  -----         0   日期      10245 non-null  datetime64[ns]1   城市      10245 non-null  object        2   新增确诊    10245 non-null  int64         3   新增治愈    10245 non-null  int64         4   新增死亡    10245 non-null  int64
dtypes: datetime64[ns](1), int64(3), object(1)
memory usage: 400.3+ KBend_date=datetime(2020,6,30)
#根据城市分组,找到每个城市首次出现病例的开始日期
start_date=city_pan.groupby('城市')['日期'].min()
start_date=start_date.reset_index(drop=False)
print(start_date)out:城市         日期
0      七台河 2020-01-26
1       万宁 2020-01-22
2      万州区 2020-01-21
3    万盛经开区 2020-02-06
4       三亚 2020-01-22
..     ...        ...
439    黔南州 2020-01-22
440    黔江区 2020-01-27
441   黔西南州 2020-01-25
442   齐齐哈尔 2020-01-25
443     龙岩 2020-01-28city_len = start_date.shape[0]
df_inter=pd.DataFrame()lis4=[]
lis3=[]
for index,row in start_date.iterrows():#生成开始日期到6-30之间的所有日期lis1=pd.date_range(row['日期'],end_date)lis2=[row['城市']]*len(lis1)lis4.extend(lis2)lis3.extend(lis1)df_inter['日期']=lis3
df_inter['城市']=lis4
print(df_inter.head(5))out:日期   城市
0 2020-01-26  七台河
1 2020-01-27  七台河
2 2020-01-28  七台河
3 2020-01-29  七台河
4 2020-01-30  七台河#计算累计确诊人数
city_pan['累计确诊人数']=city_pan['新增确诊'].groupby(city_pan['城市']).cumsum()
city_pan['累计自愈人数']=city_pan['新增治愈'].groupby(city_pan['城市']).cumsum()
city_pan['累计死亡人数']=city_pan['新增死亡'].groupby(city_pan['城市']).cumsum()
col=['城市','日期','累计确诊人数','累计自愈人数','累计死亡人数']
task=city_pan.loc[:,col]
print(task)out:城市         日期  累计确诊人数  累计自愈人数  累计死亡人数
0  武汉 2020-01-10      41       2       1
1  武汉 2020-01-11      41       6       1
2  武汉 2020-01-12      41       7       1
3  武汉 2020-01-15      41      12       2
4  武汉 2020-01-16      45      15       2#将两张表左连接,生成全量日期的数据
task=df_inter.merge(task,on=['日期','城市'],how='left')
#缺失值填充为距离最近日期的非缺失数据
task.fillna(method='ffill',inplace=True)
print(task.info())out:<class 'pandas.core.frame.DataFrame'>
Int64Index: 68578 entries, 0 to 68577
Data columns (total 5 columns):#   Column  Non-Null Count  Dtype
---  ------  --------------  -----         0   日期      68578 non-null  datetime64[ns]1   城市      68578 non-null  object        2   累计确诊人数  68578 non-null  float64       3   累计自愈人数  68578 non-null  float64       4   累计死亡人数  68578 non-null  float64
dtypes: datetime64[ns](1), float64(3), object(1)
memory usage: 3.1+ MB#输出保存为csv格式
task.to_csv('task1_1.csv')
df=task.loc[task['城市'].isin(['武汉','深圳','保定'])]
#切片找到日期以10,25结束的日期
df['temp']=df['日期'].apply(lambda x :1 if str(x)[8:10] in ['10','25'] else 0)
df=df.loc[df['temp']==1]
df=df.reset_index(drop=True)
#删除临时列
df=df.drop('temp',axis=1)
print(df)out:日期  城市   累计确诊人数   累计自愈人数  累计死亡人数
0  2020-01-25  保定      3.0      0.0     0.0
1  2020-02-10  保定     30.0      9.0     0.0
2  2020-02-25  保定     32.0     32.0     0.0
3  2020-03-10  保定     32.0     32.0     0.0
4  2020-03-25  保定     32.0     32.0     0.0
5  2020-04-10  保定     32.0     32.0     0.0
6  2020-04-25  保定     32.0     32.0     0.0
7  2020-05-10  保定     32.0     32.0     0.0
8  2020-05-25  保定     32.0     32.0     0.0
9  2020-06-10  保定     32.0     32.0     0.0
10 2020-06-25  保定     45.0     33.0     0.0
11 2020-01-10  武汉     41.0      2.0     1.0
12 2020-01-25  武汉    618.0     40.0    45.0
13 2020-02-10  武汉  18454.0   1173.0   748.0
14 2020-02-25  武汉  47441.0  12026.0  2085.0
15 2020-03-10  武汉  49978.0  33264.0  2423.0
16 2020-03-25  武汉  50006.0  44020.0  2531.0
17 2020-04-10  武汉  50008.0  46154.0  2577.0
18 2020-04-25  武汉  50333.0  46452.0  3869.0
19 2020-05-10  武汉  50339.0  46464.0  3869.0
20 2020-05-25  武汉  50340.0  46465.0  3869.0
21 2020-06-10  武汉  50340.0  46471.0  3869.0
22 2020-06-25  武汉  50340.0  46471.0  3869.0
23 2020-01-25  深圳     27.0      2.0     0.0
24 2020-02-10  深圳    375.0     56.0     0.0
25 2020-02-25  深圳    417.0    262.0     3.0
26 2020-03-10  深圳    417.0    387.0     3.0
27 2020-03-25  深圳    417.0    414.0     3.0
28 2020-04-10  深圳    419.0    414.0     3.0
29 2020-04-25  深圳    422.0    414.0     3.0
30 2020-05-10  深圳    423.0    414.0     3.0
31 2020-05-25  深圳    423.0    414.0     3.0
32 2020-06-10  深圳    423.0    414.0     3.0
33 2020-06-25  深圳    423.0    414.0     3.0df.to_csv('武汉,深圳,保定每月10,25统计.csv')

  • 任务1.2

根据任务1.1的结果,并结合附件1“城市省份对照表”统计各省级行政单位按日新增和累计数据,将结果保存为“task1_2.csv”,第一行为字段名,按省份、日期、新增确诊人数、新增治愈人数、新增死亡人数、累计确诊人数、累计治愈人数、累计死亡人数的次序分别放在A列~H列。在论文中给出实现方法的相关描述,并列表给出湖北、广东、河北每月15日的统计结果。

import pandas as pd
import numpy as np
from datetime import datetime
#有中文,用gbk打开不会乱码
task1 = pd.read_csv('task1_1.csv', encoding='gbk')
data = pd.ExcelFile('附件1.xlsx', engine='openpyxl')
# 提取‘城市疫情’表
city_pan = data.parse('城市疫情')
province_city = data.parse('城市省份对照表')
print(task1.head())out:Unnamed: 0         日期   城市  累计确诊人数  累计自愈人数  累计死亡人数
0           0  2020/1/26  七台河       1       0       0
1           1  2020/1/27  七台河       2       0       0
2           2  2020/1/28  七台河       2       0       0
3           3  2020/1/29  七台河       2       0       0
4           4  2020/1/30  七台河       3       0       0#将task1任务表和城市省份对照表左连接
task2 = task1.merge(province_city, on='城市', how='left')
print(task2.head())out:Unnamed: 0         日期   城市  累计确诊人数  累计自愈人数  累计死亡人数   省份
0           0  2020/1/26  七台河       1       0       0  黑龙江
1           1  2020/1/27  七台河       2       0       0  黑龙江
2           2  2020/1/28  七台河       2       0       0  黑龙江
3           3  2020/1/29  七台河       2       0       0  黑龙江
4           4  2020/1/30  七台河       3       0       0  黑龙江#由于task2日期是obeject类型,city_pan中日期是datetime类型,不能连接,因此要统一成datetime类型
task2['日期'] = task2['日期'].apply(lambda x: pd.to_datetime(x))result = task2.merge(city_pan, on=['城市', '日期'], how='left')
#左连接之后,有些日期没有新增确诊,新增治愈,新增死亡,需要填充为0
result = result.fillna(value=0)
result = result.drop('Unnamed: 0', axis=1)
#根据省份分类求和
total = result.groupby(['省份', '日期']).sum()
# 将索引改变为正常的列名
total.reset_index(drop=False, inplace=True)
#输出文件
total.to_csv('task1.2.csv')part = total.loc[total['省份'].isin(['湖北', '广东', '河北'])]
#设置临时变量,找到每个月的15号
part['temp'] = part['日期'].apply(lambda x: 1 if str(x)[8:10] in ['15'] else 0)
part=part.loc[part['temp'] == 1]
#按照指定顺序输出
col_name=['省份','日期','新增确诊','新增治愈','新增死亡','累计确诊人数','累计治愈人数','累计死亡人数']
part=part.loc[:,col_name]
print(part)out:省份         日期    新增确诊   新增治愈   新增死亡  累计确诊人数  累计治愈人数  累计死亡人数
1970  广东 2020-02-15    22.0   50.0    0.0    1316     434       2
1999  广东 2020-03-15     4.0    5.0    0.0    1361    1292       8
2030  广东 2020-04-15     5.0    0.0    0.0    1571    1392       8
2060  广东 2020-05-15     0.0    0.0    0.0    1589    1392       8
2091  广东 2020-06-15     3.0    0.0    0.0    1628    1394       8
2775  河北 2020-02-15     9.0   14.0    0.0     300     100       3
2804  河北 2020-03-15     0.0    0.0    0.0     318     310       6
2835  河北 2020-04-15     1.0    1.0    0.0     328     314       6
2865  河北 2020-05-15     0.0    0.0    0.0     328     319       6
2896  河北 2020-06-15     4.0    0.0    0.0     332     320       6
3403  湖北 2020-01-15     0.0    5.0    1.0      41      12       2
3434  湖北 2020-02-15  1839.0  849.0  139.0   56197    5860    1596
3463  湖北 2020-03-15     4.0  816.0   14.0   67798   55247    3099
3494  湖北 2020-04-15     0.0   33.0    0.0   67803   63477    3222
3524  湖北 2020-05-15     0.0    0.0    0.0   68134   63616    4512
3555  湖北 2020-06-15     0.0    0.0    0.0   68135   63623    4512
  • 任务1.3

根据任务1.2的结果,统计各省级行政单位每天新冠病人的住院人数,将结果保存为“task1_3.csv”,第一行为字段名,按省份、日期、住院人数的次序分别放在A列~C列。在论文中给出实现方法的相关描述,并列表给出湖北、广东、上海每月20日的统计结果。

import pandas as pd
import numpy as np
from datetime import datetime
task3 = pd.read_csv('task1.2.csv',encoding='utf-8')task3['住院人数']=task3['累计确诊人数']-task3['累计治愈人数']-task3['累计死亡人数']
print(task3.head())out:Unnamed: 0  省份          日期  累计确诊人数  累计治愈人数  累计死亡人数  新增确诊  新增治愈  新增死亡  住院人数
0           0  上海  2020-01-20       1       0       0   1.0   0.0   0.0     1
1           1  上海  2020-01-21       1       0       0   0.0   0.0   0.0     1
2           2  上海  2020-01-22       1       0       0   0.0   0.0   0.0     1
3           3  上海  2020-01-23       1       0       0   0.0   0.0   0.0     1
4           4  上海  2020-01-24       1       1       0   0.0   1.0   0.0     0col=['省份','日期','住院人数']
task=task3.loc[:,col]
print(task)out:省份          日期  住院人数
0      上海  2020-01-20     1
1      上海  2020-01-21     1
2      上海  2020-01-22     1
3      上海  2020-01-23     1
4      上海  2020-01-24     0
...   ...         ...   ...
5490  黑龙江  2020-06-26     0
5491  黑龙江  2020-06-27     0
5492  黑龙江  2020-06-28     0
5493  黑龙江  2020-06-29     0
5494  黑龙江  2020-06-30     0[5495 rows x 3 columns]task['temp']=task['日期'].apply(lambda x : 1 if str(x)[8:10] in ['20'] else 0)
task=task.loc[task['temp']==1]
task=task.loc[:,col]
part=task.loc[task['省份'].isin (['湖北','广东','上海'])]
print(part)out:省份          日期   住院人数
0     上海  2020-01-20      1
31    上海  2020-02-20    135
60    上海  2020-03-20     55
91    上海  2020-04-20    115
121   上海  2020-05-20     30
152   上海  2020-06-20     38
1944  广东  2020-01-20     14
1975  广东  2020-02-20    665
2004  广东  2020-03-20     89
2035  广东  2020-04-20    182
2065  广东  2020-05-20    191
2096  广东  2020-06-20    232
3408  湖北  2020-01-20    239
3439  湖北  2020-02-20  48725
3468  湖北  2020-03-20   5602
3499  湖北  2020-04-20    102
3529  湖北  2020-05-20      7
3560  湖北  2020-06-20      0
  • 任务1.4

假设新冠病人的传播半径为1 km,根据附件1“A市涉疫场所”在平面图中分别绘制该市第6天和第10天的疫情传播风险区域,并在论文中给出分析和实现过程。

我们以第 6 天为例,讨论如何确定疫情传播风险区域。结合被传染者有 5 天潜伏期,被传染后第 4 天开始具有传染性。 A 市第 6 日的疫情传播风险区域应该是前 6 日发生疫情场所的疫情传播风险区域再加上 7日、 8 日发生疫情场所的疫情传播风险区域。这是因为 7 日确诊的患者从 5 日开始已经具有了传染性,而 8 日确诊的患者从 6 日开始已经具有了传染性。根据此,我们绘制出了 A 市第 6 日疫情传播风险区域示意图

同理可以确定 A 市第 10 日的疫情传播风险区域,并且此时的距离 1 日并不满足大于两个周期的条件,因此不需要考虑疫情传播风险区域解除。由此绘制出了 A 市第 10 日疫情传播风险区域示意图

  • 任务2数字大屏设计:

任务2.1设计数字大屏,展示国内新冠疫情汇总概要信息、时空变化情况、重点关注区域等。在论文中附上截图,并给出相关的设计思路。
任务2.2设计数字大屏,展现并分析国际疫情态势和发展变化。在论文中附上截图,并给出相关的分析和设计思路。

2020年“泰迪杯”数据分析职业技能大赛B题疫情数据分析相关推荐

  1. 记第一次Python数据分析练习——2018年“泰迪杯”数据分析职业技能大赛B题(2021/5/20)

    文章目的 本人目前是应用统计专业大二(2021/5/20)的本科生,上学期上过Python课,但说实话讲的不深,过了一个学期也基本上忘光了. 最近深刻地觉得计算机专业真是好啊,以后我也要当程序员.JP ...

  2. 2020年泰迪杯C题智慧政务中的文本数据挖掘应用--论文+全部源码分享

    5.2问题二模型的建立与求解 本题要求针对热点问题进行挖掘,主要目的是从群众留言中挖掘出热点问题.也就是给每一条留言都量化一个热度指数.并且根据热度指数进行排序,从而获取热度较高的评价问题.对于问题热 ...

  3. 【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 23页论文及实现代码

    [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 23页论文及实现代码 相关链接 (1)建模方案 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预 ...

  4. 【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一

    相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 ...

  5. 【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题二

    相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 ...

  6. 【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路+代码(持续更新)

    [第十一届泰迪杯数据挖掘挑战赛]A 题:新冠疫情防控数据的分析 思路+代码(持续更新) 问题背景 解决问题 代码下载 数据分析 Task1 Task2 Task 3 问题背景 自 2019 年底至今, ...

  7. 【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码

    [2023年第十一届泰迪杯数据挖掘挑战赛]A题:新冠疫情防控数据的分析 32页和40页论文及实现代码 相关链接 (1)建模方案 [2023年第十一届泰迪杯数据挖掘挑战赛]A题:新冠疫情防控数据的分析 ...

  8. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 31页省一等奖论文及代码

    相关链接 (1)[第十届"泰迪杯"数据挖掘挑战赛]B题:电力系统负荷预测分析 问题一Baseline方案 (2)[第十届"泰迪杯"数据挖掘挑战赛]B题:电力系统 ...

  9. 【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一

    相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职 ...

最新文章

  1. 在Ubuntu 14.04 64bit上使用JBL Charge2+无线蓝牙音箱听歌指南
  2. Android提醒:Dialog,Toast,Snackbar
  3. 我眼中的Linux设备树(四 中断)
  4. 168. Excel Sheet Column Title
  5. Kibana远程代码执行漏洞攻击方法和漏洞原理分析
  6. 移动端前端常见的触摸相关事件touch、tap、swipe等整理
  7. long类型python_Python如何管理int和long?
  8. vba动态二维数组_VBA实战技巧05: 动态调整数组以存储所需数据
  9. SAP Spartacus里的WindowRef对象
  10. pip与conda简述
  11. WPF 界面提示加载出错
  12. Hiberbate中的一对多关联查询
  13. Dapper and Repository Pattern in MVC
  14. 你做不到对企业真正有价值,下一个裁员就是你
  15. static,inline,volatile的作用
  16. 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群
  17. 尔雅 2017大学计算机基础答案,2018超星尔雅大学计算机基础答案
  18. excel怎么合并同类项数据并求和(去除重复项)
  19. CAT分布式监控系统(一):CAT功能介绍 CAT监控系统是什么、能做什么?
  20. c语言共阴极数码管数字6,共阴数码管 显示数字 C语言程序

热门文章

  1. Alpha Go及Alpha Zero的算法分析
  2. 设置flashget下载任务完成后自动调用avast!扫描文件
  3. MoCo代码分析 [自监督学习]
  4. 广电行业概览(一) 有线电视:增值运营
  5. 寻找独一无二的数 【异或】
  6. sklearn的feature_importances_含义是什么?
  7. 并行算法——双调排序
  8. POS机这些基础知识,你一定要了解!
  9. 微信第三方平台研究总结
  10. 程序员实用网站工具(瑞士军刀)