2020泰迪杯数据分析技能赛B题-新冠疫情数据分析

 

任务 1 数据的基本处理

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

import numpy as np
import pandas as pdimport seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'      # 正常显示中文
plt.rcParams['axes.unicode_minus'] = Falseimport pyecharts
from pyecharts import *
from pyecharts.charts import Bar,Pie,Funnel,Scatter,Gauge,Page,WordCloud,Line
from pyecharts import options as opts# 任务1_1
data1 = pd.read_excel('附件1.xlsx',sheet_name='城市疫情')# 填充缺失的日期
date_range = pd.date_range(start=data1.日期.min(),end=data1.日期.max())
date = pd.DataFrame()
data1 = data1.set_index('日期')
for i in data1.城市.unique():a = data1[data1['城市']==i].reindex(index = date_range,)# 填充新增数据a.iloc[:,1:] = a.iloc[:,1:].fillna(0)# 填充城市数据a = a.fillna(i)a = a.reset_index()date = pd.concat((date,a))
date= date.rename(columns= {'index':'日期'})date[['累计确诊人数','累计治愈人数','累计死亡人数']] =date.groupby('城市').cumsum()
date.iloc[:,2:] = date.iloc[:,2:].astype(int)
date_ = date.loc[:,['城市','日期','累计确诊人数','累计治愈人数','累计死亡人数']].copy()
# 保存结果
date_.to_csv('task1_1.csv')

data1:

展示深圳、武汉、保定的每月10日、25日数据:

date_[date_['日期'].apply(lambda x: x.day==10 or x.day==25)].query("城市 == '深圳'")

date_[date_['日期'].apply(lambda x: x.day==10 or x.day==25)].query("城市 == '武汉'")

date_[date_['日期'].apply(lambda x: x.day==10 or x.day==25)].query("城市 == '保定'")

 

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

data1_sheng = pd.read_excel('附件1.xlsx',sheet_name='城市省份对照表')# 通过城市列进行联结
data1_2 = pd.merge(date, data1_sheng, on = '城市')
data1_2 = data1_2.reindex(columns = ['省份','日期','新增确诊','新增治愈','新增死亡','累计确诊人数','累计治愈人数','累计死亡人数'])
data1_2.columns = ['省份','日期','新增确诊人数','新增治愈人数','新增死亡人数','累计确诊人数','累计治愈人数','累计死亡人数']# 根据省份对该省份的城市数据进行汇总,得到该省份的每日新增确诊人数等。
data1_2 = data1_2.groupby(['省份','日期'],as_index =False).sum()
# 保存结果
data1_2.to_csv('task1_2.csv')

 data1_sheng:

展示广东、湖北、河北的每月15日数据:

data1_2[data1_2.日期.apply(lambda x:x.day == 15)].query("省份=='广东'")

data1_2[data1_2.日期.apply(lambda x:x.day == 15)].query("省份=='湖北'")

data1_2[data1_2.日期.apply(lambda x:x.day == 15)].query("省份=='河北'")

分析:

新增疫情数据分析:

plt.figure(figsize=(13,5))plt.subplot(131)
data1_2.groupby('日期').sum()['新增确诊人数'].plot(c = 'r')
plt.title('新增确诊')plt.subplot(132)
data1_2.groupby('日期').sum()['新增治愈人数'].plot(c = 'g')
plt.title('新增治愈')plt.subplot(133)
data1_2.groupby('日期').sum()['新增死亡人数'].plot(c = 'k')
plt.title('新增死亡')plt.show()

 

 累计疫情数据分析:

plt.figure(figsize=(13,5))plt.subplot(131)
data1_2.groupby('日期').sum()['累计确诊人数'].plot(c = 'r')
plt.title('累计确诊')plt.subplot(132)
data1_2.groupby('日期').sum()['累计治愈人数'].plot(c = 'g')
plt.title('累计治愈')plt.subplot(133)
data1_2.groupby('日期').sum()['累计死亡人数'].plot(c = 'k')
plt.title('累计死亡')plt.show()

 pyecharts绘图:

def plot_(data_name, color):d = data1_2.groupby('日期').sum()[data_name]d.index = d.index.map(lambda x:x.strftime('%Y/%m/%d'))line =Line()line.add_xaxis(xaxis_data=d.index.to_list())line.add_yaxis(series_name = f'{data_name}'[:-2],y_axis =d.to_list(),is_smooth =False,symbol_size = 10,linestyle_opts=opts.LineStyleOpts(color= color, width=4, type_="solid"),)line.set_series_opts(markpoint_opts = opts.MarkPointOpts(data = [opts.MarkPointItem(type_= ['max'], symbol_size = 70),opts.MarkPointItem(type_= ['min'])],),itemstyle_opts=opts.ItemStyleOpts(border_width=1, color=color))line.set_global_opts(title_opts=opts.TitleOpts(title = f'{data_name}随时间变化图'),xaxis_opts=opts.AxisOpts(name= '日期',type_='category', name_location='center',name_gap=25,),yaxis_opts=opts.AxisOpts(name= '人数',type_='value', name_location='end',name_gap=15,splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(opacity=1)),),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),)return line.render_notebook()plot_('新增确诊人数', 'red')
# plot_('新增治愈人数', 'blue')
# plot_('新增死亡人数', 'blake')

 

 

 

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

假设确诊后迅速住院,定义住院人数为当天累计确诊人数减去累计治愈与累计死亡人数 

data1_3= pd.DataFrame()
data1_3[['省份','日期']] = data1_2.iloc[:,:2]data1_3['住院人数'] = data1_2['累计确诊人数']-data1_2['累计治愈人数']-data1_2['累计死亡人数']
data1_3.to_csv('task1_3.csv',index=False)

展示湖北、广东、上海每月 20 日的统计结果:

data1_3[data1_3.日期.apply(lambda x:x.day == 20)].query("省份=='湖北'")

data1_3[data1_3.日期.apply(lambda x:x.day == 20)].query("省份=='广东'")

data1_3[data1_3.日期.apply(lambda x:x.day == 20)].query("省份=='上海'")

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

data3 = pd.read_excel('附件1.xlsx',sheet_name='A市涉疫场所分布')# 结合题意第6天的传播区域因为第8天时的总确诊
a1 = data3[data3['通报日期']<= 8]
# 第10天的传播区域因为第12天时的总确诊
a2 = data3[data3['通报日期']<= 12]# 常用全局参数配置封装
def global_opts(line,x_name = '',y_name = '',title = '',bottom = None,left = None,split_line = True):line.set_global_opts(title_opts=opts.TitleOpts(title = title),xaxis_opts=opts.AxisOpts(name= x_name,type_='value', name_location='end',name_gap=25,max_= 30,splitline_opts=opts.SplitLineOpts(is_show=split_line,linestyle_opts=opts.LineStyleOpts(opacity=1)),axistick_opts=opts.AxisTickOpts()),yaxis_opts=opts.AxisOpts(name= y_name,type_='value', name_location='end',name_gap=15,max_= 30,splitline_opts=opts.SplitLineOpts(is_show=split_line,linestyle_opts=opts.LineStyleOpts(opacity=1)),),legend_opts =opts.LegendOpts(type_ = 'scroll',pos_bottom=bottom, pos_left = left,orient = 'horizontal',align ='left',item_gap = 10,item_width = 25,item_height = 15,inactive_color = 'break'),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),)

 data3:

from pyecharts.charts import EffectScatterscatter =EffectScatter()
scatter.add_xaxis(a1.iloc[:,2].tolist())
scatter.add_yaxis('',a1.iloc[:,3],itemstyle_opts=opts.ItemStyleOpts(color='red'),symbol_size = 25,label_opts=opts.LabelOpts(is_show=False),)
global_opts(scatter,'横坐标',y_name = '纵坐标',title = '第6天A市疫情传播风险区域')
scatter.render_notebook()

scatter =EffectScatter()
scatter.add_xaxis(a2.iloc[:,2].tolist())
scatter.add_yaxis('',a2.iloc[:,3],symbol_size = 25,itemstyle_opts=opts.ItemStyleOpts(color='red'),label_opts=opts.LabelOpts(is_show=False))
global_opts(scatter,'横坐标',y_name = '纵坐标',title = '第10天A市疫情传播风险区域')scatter.render_notebook()

 任务 2 数字大屏设计

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

 使用任务1_2结果数据data1_2进行绘制

任务 2.2 设计数字大屏,展现并分析国际疫情态势和发展变化。在论文中 附上截图,并给出相关的分析和设计思路。

 处理前数据:

填补期间的缺失日期(分析结果可以发现其实没有,可以直接跳过)

data = pd.read_excel('附件1.xlsx',sheet_name='国际疫情'# 对国际疫情表参照任务一的方式进行日期填充
date = pd.DataFrame()
data = data.set_index('日期')
print(data)
for i in data.国家.unique():a = data[data['国家']==i]date_range = pd.date_range(start=a.index.min(),end=a.index.max())a = a.reindex(index = date_range,)print(a,a.isna().sum())a = a.fillna(method = 'ffill')a = a.fillna(method = 'bfill')print(a,a.isna().sum(),'+++++')a = a.reset_index()date = pd.concat((date,a))
date= date.rename(columns= {'index':'日期'})

处理后数据:

  获取‘新增’数据:

# 初始化
data = pd.DataFrame()
for i in date.国家.unique():_ =date[date['国家']== i].copy()_[['新增确诊','新增治愈','新增死亡']] = pd.concat((_.iloc[0:1,2:],_.iloc[:,2:].diff().iloc[1:,:]))data = pd.concat((data,_))# 保存数据用于可视化大屏绘制
data.to_excel(r'data_guoji.xlsx')

最终数据:

  大屏未做,可参考国内城市大屏

任务 3 国际疫情的发展分析

任务 3.1 根据附件 1“国际疫情”中的数据,对印度、伊朗、意大利、加 拿大、秘鲁、南非在各个时间段中所处的疫情发展阶段进行划分,并在论文中给 出划分的依据和结果。

未做

任务 3.2 根据附件 2 中的信息,分析美国、英国、俄罗斯 3 个国家推出的 疫情防控措施对本国疫情变化情况的影响。

data['日期'] = pd.to_datetime(data['日期'])
with sns.color_palette('RdYlGn'):fig, axes = plt.subplots(2, 3, figsize = (14,8))for num, country in enumerate(['美国', '英国', '俄罗斯']):d_ = data.query(f"国家 == '{country}'").set_index('日期')d_[['累计确诊', '累计治愈', '累计死亡']].plot(ax = axes[0][num])axes[0][num].set_title(country)axes[0][num].set_xlabel(None)d_[['新增确诊', '新增治愈', '新增死亡']].plot(ax = axes[1][num])axes[1][num].set_title(country)axes[1][num].set_xlabel(None)plt.subplots_adjust(0.2,0.1)

博客里三个泰迪杯分析赛完整项目资料可加微信:gjwtxp 获取(20yuan)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49143.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】提升的自动作文评分通过Prompt预测和匹配

摘要 自动作文评分的目标时自动得评估文章的质量。它是自然语言处理领域中主要的教育应用之一。近来&#xff0c;预训练的技术被用于提升下游任务的性能表现。但是&#xff0c;通过预训练的编码器获取更好的特征&#xff0c;比如说prompts&#xff0c;是很重要的但是并没有被完…

数据分析师是青春饭吗?年龄影响很大吗?

数据分析师是青春饭吗&#xff1f;企业需要经验丰富的数据分析师&#xff0c;数据分析师是不是青春饭&#xff0c;反而是越老越吃香&#xff0c;做数据分析不在于年龄&#xff0c;年龄相对你的经验和技能、适应性、还有学习能力并不重要&#xff0c;数据分析工作并不是一蹴而就…

下一个韦神?广西桂林14岁初中生保送清华丘班,明年本硕博连读!

【导读】最近&#xff0c;初三学生官子钦和高一学生周睿哲被清华丘成桐数学领军计划录取&#xff0c;网友们围观后深深震撼&#xff1a;这就是天才。 14岁天才少年又一次震撼了网友&#xff01; 近日&#xff0c;清华大学丘成桐领军人才培养计划2023年第一批次入围认定结果公…

如何通过tushare获取数据并添加进度条,写入到本地Excel文件

tushare官网地址&#xff1a;Tushare数据 欢迎大家注册体验 安装tushare库 在命令提示符或终端中输入以下命令&#xff0c;可使用pip安装tushare库&#xff1a; pip install tushare 获取API token 在使用tushare库之前&#xff0c;需要先获取API token。在tushare官网注册…

U8如何修改单位名称和账套名称

1、修改单位名称和账套名称时需要使用系统管理员账号登录&#xff0c;系统管理员账号为1 2、登录之后点击系统管理-单位信息 3、找到需要修改的单位&#xff0c;双击即可修改 4、在弹出的弹窗中修改单位名称然后点击确定即可 5、账套名称的修改需点击系统管理-单位账套 6、…

悟空crm二次开发 新增人力资源HRM招聘需求、简历管理、公文管理、回款统计、回款管理、回款计划

悟空crm二次开发 新增人力资源HRM招聘需求、简历管理、公文管理、回款统计、回款管理、回款计划 public function createTeamData($param) {if (!is_array($param[user_id])) {$param[user_id] [intval($param[user_id])];}if (!is_array($param[types_id])) {$param[types_id…

【U8+】用友U8+自动审核自动生成的其他出入库单据

【问题需求】 用友U8中&#xff0c;客户希望调拨单、组装拆卸单、盘点单审核后&#xff0c;自动审核对应的其他出入库单。 【解决方法】 针对账套库执行&#xff0c;查询语句&#xff1a; select * from AccInformation where cSysID ST and ccaption like %自动审核%查询后…

SAP_过账提示科目要求一个成本会计分配

问题点&#xff1a; 解决方案&#xff1a; 在ECC系统&#xff0c;可通过KA02-更改成本要素&#xff0c;在缺省科目分配中设置默认的成本中心或内部订单 后台-控制-成本要素会计-主数据-成本要素-创建成本要素 在S4/HANA系统中&#xff0c;由于成本要素会计功能的变更&#xf…

【分享】用友U8无需API开发连接表单系统、CRM系统、数据库等第三方应用

用友U8用户使用场景&#xff1a; 每当用友U8有存货修改时&#xff0c;需要仓库管理员查询存货档案详情&#xff0c;然后在钉钉宜搭上查询对应货品详情并进行修改&#xff0c;确保两个系统的信息统一&#xff0c;便于销售人员调整营销策略。 但整个流程耗费一定的时间&#xff0…

总账科目 前台操作关事务代码及操作要点

目录 1、维护会计科目相关代码及要点 2、公司代码中的科目参数详解 1、维护会计科目相关代码及要点 事务代码&#xff1a;FSP0 在科目表中维护科目 操作例子&#xff1a;创建1001010100 现金-人民币 及40010001实收资本. 点保存后成功展示如下图 注意&#xff0c;后台必须的…

安卓--记账软件课程设计

安卓课程设计 记账软件课程设计 目录 1 引言............................................................................................................................................................. 2 1.1 背景............................................…

用友U8二次开发之登录

首先引用U8的登录DLL&#xff1a; 然后是调用U8的登录UI&#xff1a; UFSoft.U8.Framework.Login.UI.clsLogin U_Login new UFSoft.U8.Framework.Login.UI.clsLogin();U_Login.login("DP")其中DP是门户子系统的代码&#xff0c;如果不调用U8的业务系统功能&#xff…

基于android的记账APP大作业项目

基于android的记账APP 一 项目介绍 由于日常生活中,有很多月光一族的人们&#xff0c;他们往往不知不觉&#xff0c;觉得钱用的差不多了。而且最后回想起来&#xff0c;还不知道钱用到哪些地方了。所以开发此软件的目的&#xff0c;就是为了解决这样的问题&#xff0c;从软件…

【安卓开发】简单记账app功能实现开发-期末大作业个人总结

说在前面&#xff1a; 由于这一次的大作业涉及到的代码部分过于长&#xff0c;所以博客里不放相关代码&#xff1b; 工程&apk&记账app原型&素材资源链接&#xff1a;https://download.csdn.net/download/white2333/11234105 配套文档目录预览&资源链接&…

管家婆软件创建账套提示:创建账套失败

我们在安装完管家婆软件后&#xff0c;在创建账套的时&#xff0c;可能会碰到这个错误&#xff1a;创建账套失败&#xff01;这个报错要怎么去解决呢&#xff1f; 问题原因1&#xff1a;这个提示一般是管家婆软件安装目录比较深&#xff0c;就比如A文件夹里面有个A1的文件夹&am…

【T+】将查询账套更换成可以业务操作的正式版账套

【问题描述】 在使用畅捷通T软件过程中&#xff0c; 由于某些原因&#xff0c;将已使用的账套设置成【查询版】&#xff0c;并且根据软件提示&#xff0c;设置后该账套只能查询使用&#xff0c;不可以进行业务操作。 并且【查询】账套不支持反操作。 设置成查询版后&#xff0c…

SAP中使用LSMW批量导入总账科目

遗留数据迁移平台&#xff0c;可以导入主数据&#xff1a;科目、资产主数据、物料主数据、供应商、客户主数据、成本中心、内部订单数据。。。。 FSP0 FSS0 分层导入&#xff1a;适合集团和分公司分别维护科目主数据&#xff0c;集团和公司自行维护科目主数据 FS00集中导入&a…

SAP系统 会计科目主数据详解

会计科目&#xff08;主数据&#xff09;概述&#xff1a; 每个公司代码均指定一个总帐的科目表。此科目表在配置中分配到公司代码&#xff0c;作为其运营科目表 每个总帐都是根据科目表建立的。所有总帐科目的定义均以有序形式包含在科目表内。定义主要由科目编号、科目名称…

工资管理系统(附源码,直接复制就可以跑起来)

分享一个Java Application的工资系统。 运行界面如下&#xff1a; 其他分类专栏也有一些其他的Java Web系统 点击分类专栏介绍查看 直接创建如下的5个Java类文件。 1.项目工程 2.CommonEmployee类 package study;import java.util.*;public class TestEMD {/*** len代表数组的…

如何快速为子公司创建SAP财务账套的操作步骤

相对来说在SAP上配置一家子公司比从0开始创建创建一家公司可以节省很多步骤&#xff0c;因为子公司的很多配置&#xff08;如科目表&#xff0c;科目&#xff0c;折旧表&#xff0c;折旧代码等&#xff09;可以沿用母公司的。本文就简单介绍一下创建子公司财务账套的配置步骤.只…