LOVEDING

一、选题背景

选题目的和想要达到的目标:人们对疫情的关注程度却普遍下降,特别是对全世界的疫情很多人更是一无所知。所以我分析了世界上的新冠病毒状况。想要将世界上的疫情情况可视化,以简单易懂的方式展现在大家面前。并以此来提醒所有人疫情并没有结束,大家仍然要做好防范疫情传播的措施,希望大家通过我的分析了解到疫情还在持续,不要为国家拖后腿。

经济层面:分析疫情情况,对挽救经济的措施的施行提供便利。

技术层面:通过一个学期的学习将数据集变为简单易懂的图形。

数据来源方面:爱数科具有大量可分析数据,简单方便,且内容涵盖较广。

二、大数据分析设计方案

1.本数据集的数据内容与数据特征分析

本数据集是通过爱数科下载的大型COVID-19疫情数据集,该数据集包含从2/24/2020到6/29/2021的最新新冠疫情世界状态数据,非常适合探索性数据分析,有接近十万行数据可供使用,且为表格数据。

2.数据分析的课程设计方案概述

①通过爱数科下载大型COVID-19疫情数据集。#来源网址 http://idatascience.cn/dataset-detail?table_id=100017

②导入库和数据集,对COVID-19数据集数据分析及基于全球地图数据可视化,保存于电脑;为了能够更加直观地看到各国家疫情数据差异,做表查看;进行数据清洗,查看各地区疫情最严重一天。以及各种统计分析并将他们进行可视化处理

三、数据分析步骤

 1.数据源

#来源网址 http://idatascience.cn/dataset-detail?table_id=100017

2.数据清洗

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 import pandas as pd
 4 
 5 # 忽略警告信息
 6 import warnings
 7 warnings.filterwarnings(\'ignore\')
 8 
 9 # 设置中文字体 kesci 专用代码
10 plt.rcParams[\'font.sans-serif\'].insert(0, \'Microsoft YaHei\')
11 
12 df=pd.read_csv(\'C:/Users/ASUS/大型COVID-19疫情数据集.csv\')
13 df.head()

 

 

②为了能够更加直观地看到各国家疫情数据差异,做表查看。

 1 df=pd.read_csv(\'C:/Users/ASUS/大型COVID-19疫情数据集.csv\')
 2 new_df=pd.DataFrame({\'国家编号\':df[\'iso_code\'].unique(),
 3                      \'次数\':[0]*len(df[\'iso_code\'].unique())})
 4 groupy_area=df.groupby(by=\'iso_code\').count()
 5 new_df[\'次数\']=groupy_area.values
 6 # 按“数量”一列从大到小排列
 7 new_df.sort_values(by=[\'次数\'],ascending=False)
 8 #new_df
 9 # 定义函数,用来计算国家编号出现次数 
10 def all_house(arr):
11     arr=np.array(arr)
12     key=np.unique(arr)
13     result={}
14     for k in key:
15         mask=(arr==k)
16         arr_new=arr[mask]
17         v=arr_new.size
18         result[k]=v
19     return result
20 # 获取国家编号数据
21 house_array=df[\'iso_code\']
22 house_info=all_house(house_array)
23 house_info
24 # 使用字典推导式
25 house_type=dict((key,value) for key,value in house_info.items() if value>50)
26 show_houses=pd.DataFrame({\'国家编号\':[x for x in house_type.keys()],
27                          \'次数\':[x for x in house_type.values()]})
28 print(show_houses)

 

 

 ③进行数据清洗,查看各地区疫情最严重一天

1 import numpy as np
2 import pandas as pd
3 import matplotlib.pyplot as plt
4 import seaborn as sns
5 #按省份统计确诊人数
6 df=pd.read_csv(\'C:/Users/ASUS/大型COVID-19疫情数据集.csv\')
7 
8 diqu = df.groupby(by=\'location\').agg(\'max\')
9 diqu

 

 

3.大数据分析过程及采用的算法

1 import matplotlib.pyplot as plt
2 import seaborn as sns
3 # 数据准备
4 # iris = sns.load_dataset(\'iris\')
5 iris =pd.read_csv(\'C:/Users/ASUS/大型COVID-19疫情数据集.csv\')
6 # 用Seaborn画成对关系
7 sns.pairplot(iris)
8 plt.show()

 

 

 ②

 1 from pyecharts import options as opts
 2 from pyecharts.charts import Map
 3 data=pd.read_csv(\'C:/Users/ASUS/大型COVID-19疫情数据集.csv\')
 4 world_map = Map(init_opts=opts.InitOpts(width="1800px", height="700px", 
 5             bg_color="#ADD8E6", page_title="世界疫情地图",theme=\'white\'))
 6 world_map.add("确诊病例",[list(z) for z in zip(data["location"],data["total_cases"] )],
 7             is_map_symbol_show=False,maptype="world",
 8             label_opts=opts.LabelOpts(is_show=False),
 9             itemstyle_opts=opts.ItemStyleOpts(color="rgb(98,120,140)"))
10 world_map.set_global_opts(title_opts = opts.TitleOpts(title=\'全世界新冠确诊人数\'),
11             legend_opts=opts.LegendOpts(is_show=False),
12             visualmap_opts=opts.VisualMapOpts(max_=10000000, is_piecewise=True,
13                 pieces=[{"max": 10000000, "min": 1000001, "label": ">1000000", "color": "#8A0808"},
14                         {"max": 1000000, "min": 100001, "label": "1000000-100001", "color": "#B40404"},
15                         {"max": 100000, "min": 10001, "label": "100000-10001", "color": "#DF0101"},
16                         {"max": 10000, "min": 1001, "label": "10000-1001", "color": "#F78181"},
17                         {"max": 1000, "min": 100, "label": "1000-100", "color": "#F5A9A9"},
18                         {"max": 100, "min": 0, "label": "<100", "color": "#fababa"},]
19                     )  
20             )
21 #保存地图      
22 world_map.render(\'世界新冠疫情地图.html\')

 

 

4.数据可视化

①各国家疫情数据差异可视化处理查看各过疫情数据量

 1 #对上表可视化处理查看各国家疫情数据量
 2 fig,ax = plt.subplots()
 3 fig.set_size_inches(10,100)
 4 xq = df[\'iso_code\'].value_counts().sort_values()
 5 index = list(xq.index)
 6 value = list(xq.values)
 7 qx = pd.DataFrame({\'iso_code\':index,\'国家编号\':value})
 8 qx.plot.barh(x=\'iso_code\',y=\'国家编号\',ax=ax,color=\'blue\',fontsize=12)
 9 plt.legend(loc=\'right\')
10 for a,b in zip(value,np.arange(0,14,1)):
11     plt.text(a+0.5,b,a,fontsize=12)
12 plt.show()

 

 

 

 

 

 ②总病例随时间变化可视化

 1 import pandas as pd
 2 import matplotlib.pyplot as plt
 3 fig = plt.figure(figsize=(100,50))
 4 # 数据准备
 5 x = df[\'date\']
 6 y = df[\'total_cases\']
 7 # 用Matplotlib画散点图
 8 plt.xticks(rotation=270)
 9 plt.scatter(x, y,marker=\'x\')
10 plt.show()
11 plt.tight_layout()

 

 ③查看各大洲的疫情数据占比

from pylab import *
df=pd.read_csv(\'C:/Users/ASUS/大型COVID-19疫情数据集.csv\')
mpl.rcParams[\'font.sans-serif\'] = [\'SimHei\']
mpl.rcParams[\'axes.unicode_minus\'] = False
df = (df[\'continent\'].value_counts())[:16].to_frame()
plt.figure(figsize=(15,15))
plt.pie(df[\'continent\'], labels=df.index.values, autopct=\'%.1f%%\')
plt.title(\'各大洲的疫情数据占比\',fontsize=20)

from pylab import *
df=pd.read_csv(\'C:/Users/ASUS/大型COVID-19疫情数据集.csv\')
mpl.rcParams[\'font.sans-serif\'] = [\'SimHei\']
mpl.rcParams[\'axes.unicode_minus\'] = False
df = (df[\'location\'].value_counts())[:16].to_frame()
plt.figure(figsize=(15,15))
plt.pie(df[\'location\'], labels=df.index.values, autopct=\'%.1f%%\')
plt.title(\'各国家的疫情数据占比\',fontsize=20)

 

 

 

 ④各国家新增病例可视化

 1 import matplotlib.pyplot as plt
 2 import seaborn as sns
 3 # 数据准备
 4 x =diqu[\'iso_code\']
 5 y = diqu[\'new_cases\']
 6 # 用Matplotlib画条形图
 7 fig = plt.figure(figsize=(100,50))
 8 plt.xticks(rotation=270)
 9 plt.bar(x, y)
10 plt.show()
11 # 用Seaborn画条形图
12 fig = plt.figure(figsize=(100,50))
13 plt.xticks(rotation=270)
14 sns.barplot(x, y)
15 plt.show()

 

 

 

 ⑤查看总患病人和死亡和再生人数关系

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from mpl_toolkits. mplot3d import Axes3D
 4 fig = plt.figure()
 5 ax = Axes3D(fig,auto_add_to_figure=False)
 6 fig.add_axes(ax)
 7 x = gj[\'total_cases\']
 8 y = gj[\'total_deaths\']
 9 z = gj[\'reproduction_rate\']
10 ax. scatter(x, y, z)
11 ax.set_xlabel(\'总病例\')
12 ax.set_ylabel( \'总死亡\')
13 ax.set_zlabel(\'再生指数\')
14 plt.show()

 

 ⑥查看国家首都gdp和人口数和接种疫苗人数关系

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from mpl_toolkits. mplot3d import Axes3D
 4 fig = plt.figure()
 5 ax = Axes3D(fig,auto_add_to_figure=False)
 6 fig.add_axes(ax)
 7 x = gj[\'gdp_per_capita\']
 8 y = gj[\'population\']
 9 z = gj[\'people_fully_vaccinated\']
10 ax. scatter(x, y, z)
11 ax.set_xlabel(\'首都GDP\')
12 ax.set_ylabel( \'人口数\')
13 ax.set_zlabel(\'疫苗完全接种人数\')
14 plt.show()

 

 五、附完整程序源代码

  1 #通过爱数科下载大型COVID-19疫情数据集
  2 #来源网址 http://idatascience.cn/dataset-detail?table_id=100017
  3 #本数据集包含该数据集包含从2/24/2020到6/29/2021的最新新冠疫情世界状态数据。该数据集可用于分析世界上的新冠病毒状况。
  4 #----------------------------------------------------------------
  5 #导入库,导入数据集
  6 import matplotlib.pyplot as plt
  7 import numpy as np
  8 import pandas as pd
  9 df=pd.read_csv(\'C:/Users/bb/python-jupyter noteboook/大型COVID-19疫情数据集.csv\')
 10 df.head()
 11 
 12 #----------------------------------------------------------------
 13 
 14 #探索COVID-19数据集中的多个成对双变量的分布
 15 import matplotlib.pyplot as plt
 16 import seaborn as sns
 17 # 数据准备
 18 # iris = sns.load_dataset(\'iris\')
 19 iris =pd.read_csv(\'C:/Users/bb/python-jupyter noteboook/大型COVID-19疫情数据集.csv\')
 20 # 用Seaborn画成对关系
 21 sns.pairplot(iris)
 22 plt.show()
 23 
 24 #----------------------------------------------------------------
 25 
 26 #对COVID-19数据集数据分析及基于全球地图数据可视化,保存于电脑
 27 from pyecharts import options as opts
 28 from pyecharts.charts import Map
 29 data=pd.read_csv(\'C:/Users/bb/python-jupyter noteboook/大型COVID-19疫情数据集.csv\')
 30 world_map = Map(init_opts=opts.InitOpts(width="1800px", height="700px", 
 31             bg_color="#ADD8E6", page_title="世界疫情地图",theme=\'white\'))
 32 world_map.add("确诊病例",[list(z) for z in zip(data["location"],data["total_cases"] )],
 33             is_map_symbol_show=False,maptype="world",
 34             label_opts=opts.LabelOpts(is_show=False),
 35             itemstyle_opts=opts.ItemStyleOpts(color="rgb(98,120,140)"))
 36 world_map.set_global_opts(title_opts = opts.TitleOpts(title=\'全世界新冠确诊人数\'),
 37             legend_opts=opts.LegendOpts(is_show=False),
 38             visualmap_opts=opts.VisualMapOpts(max_=10000000, is_piecewise=True,
 39                 pieces=[{"max": 10000000, "min": 1000001, "label": ">1000000", "color": "#8A0808"},
 40                         {"max": 1000000, "min": 100001, "label": "1000000-100001", "color": "#B40404"},
 41                         {"max": 100000, "min": 10001, "label": "100000-10001", "color": "#DF0101"},
 42                         {"max": 10000, "min": 1001, "label": "10000-1001", "color": "#F78181"},
 43                         {"max": 1000, "min": 100, "label": "1000-100", "color": "#F5A9A9"},
 44                         {"max": 100, "min": 0, "label": "<100", "color": "#fababa"},]
 45                     )  
 46             )
 47 #保存地图      
 48 world_map.render(\'世界新冠疫情地图.html\')
 49 
 50 #----------------------------------------------------------------
 51 #
 52 #为了能够更加直观地看到各国家疫情数据差异,做表查看。
 53 df=pd.read_csv(\'C:/Users/bb/python-jupyter noteboook/大型COVID-19疫情数据集.csv\')
 54 new_df=pd.DataFrame({\'国家编号\':df[\'iso_code\'].unique(),
 55                      \'次数\':[0]*len(df[\'iso_code\'].unique())})
 56 groupy_area=df.groupby(by=\'iso_code\').count()
 57 new_df[\'次数\']=groupy_area.values
 58 # 按“数量”一列从大到小排列
 59 new_df.sort_values(by=[\'次数\'],ascending=False)
 60 #new_df
 61 # 定义函数,用来计算国家编号出现次数 
 62 def all_house(arr):
 63     arr=np.array(arr)
 64     key=np.unique(arr)
 65     result={}
 66     for k in key:
 67         mask=(arr==k)
 68         arr_new=arr[mask]
 69         v=arr_new.size
 70         result[k]=v
 71     return result
 72 # 获取国家编号数据
 73 house_array=df[\'iso_code\']
 74 house_info=all_house(house_array)
 75 house_info
 76 # 使用字典推导式
 77 house_type=dict((key,value) for key,value in house_info.items() if value>50)
 78 show_houses=pd.DataFrame({\'国家编号\':[x for x in house_type.keys()],
 79                          \'次数\':[x for x in house_type.values()]})
 80 print(show_houses)
 81 
 82 
 83 #对上表可视化处理查看各国家疫情数据量
 84 fig,ax = plt.subplots()
 85 fig.set_size_inches(10,100)
 86 xq = df[\'iso_code\'].value_counts().sort_values()
 87 index = list(xq.index)
 88 value = list(xq.values)
 89 qx = pd.DataFrame({\'iso_code\':index,\'国家编号\':value})
 90 qx.plot.barh(x=\'iso_code\',y=\'国家编号\',ax=ax,color=\'blue\',fontsize=12)
 91 plt.legend(loc=\'right\')
 92 for a,b in zip(value,np.arange(0,14,1)):
 93     plt.text(a+0.5,b,a,fontsize=12)
 94 plt.show()
 95 
 96 #----------------------------------------------------------------
 97 
 98 #总病例随时间变化可视化
 99 import pandas as pd
100 import matplotlib.pyplot as plt
101 fig = plt.figure(figsize=(100,50))
102 # 数据准备
103 x = df[\'date\']
104 y = df[\'total_cases\']
105 # 用Matplotlib画散点图
106 plt.xticks(rotation=270)
107 plt.scatter(x, y,marker=\'x\')
108 plt.show()
109 plt.tight_layout()
110 
111 #----------------------------------------------------------------
112 
113 #查看各大洲的疫情数据占比
114 from pylab import *
115 df=pd.read_csv(\'C:/Users/bb/python-jupyter noteboook/大型COVID-19疫情数据集.csv\')
116 mpl.rcParams[\'font.sans-serif\'] = [\'SimHei\']
117 mpl.rcParams[\'axes.unicode_minus\'] = False
118 df = (df[\'continent\'].value_counts())[:16].to_frame()
119 plt.figure(figsize=(15,15))
120 plt.pie(df[\'continent\'], labels=df.index.values, autopct=\'%.1f%%\')
121 plt.title(\'各大洲的疫情数据占比\',fontsize=20)
122 
123 from pylab import *
124 df=pd.read_csv(\'C:/Users/bb/python-jupyter noteboook/大型COVID-19疫情数据集.csv\')
125 mpl.rcParams[\'font.sans-serif\'] = [\'SimHei\']
126 mpl.rcParams[\'axes.unicode_minus\'] = False
127 df = (df[\'location\'].value_counts())[:16].to_frame()
128 plt.figure(figsize=(15,15))
129 plt.pie(df[\'location\'], labels=df.index.values, autopct=\'%.1f%%\')
130 plt.title(\'各国家的疫情数据占比\',fontsize=20)
131 
132 
133 #----------------------------------------------------------------
134 #进行数据清洗,查看各地区疫情最严重一天
135 import numpy as np
136 import pandas as pd
137 import matplotlib.pyplot as plt
138 import seaborn as sns
139 #按省份统计确诊人数
140 df=pd.read_csv(\'C:/Users/bb/python-jupyter noteboook/大型COVID-19疫情数据集.csv\')
141 
142 diqu = df.groupby(by=\'location\').agg(\'max\')
143 #print(diqu)
144 
145 import matplotlib.pyplot as plt
146 import seaborn as sns
147 # 数据准备
148 x =diqu[\'iso_code\']
149 y = diqu[\'new_cases\']
150 # 用Matplotlib画条形图
151 fig = plt.figure(figsize=(100,50))
152 plt.xticks(rotation=270)
153 plt.bar(x, y)
154 plt.show()
155 # 用Seaborn画条形图
156 fig = plt.figure(figsize=(100,50))
157 plt.xticks(rotation=270)
158 sns.barplot(x, y)
159 plt.show()
160 
161 #----------------------------------------------------------------
162 #进行数据清洗,查看各国家疫情数据总和
163 import numpy as np
164 import pandas as pd
165 import matplotlib.pyplot as plt
166 import seaborn as sns
167 #按国家统计确诊人数
168 df=pd.read_csv(\'C:/Users/bb/python-jupyter noteboook/大型COVID-19疫情数据集.csv\')
169 
170 gj= df.groupby(by=\'location\').agg(\'sum\')
171 #print(gj)
172 
173 #查看总患病人和死亡和再生人数关系
174 import numpy as np
175 import matplotlib.pyplot as plt
176 from mpl_toolkits. mplot3d import Axes3D
177 fig = plt.figure()
178 ax = Axes3D(fig,auto_add_to_figure=False)
179 fig.add_axes(ax)
180 x = gj[\'total_cases\']
181 y = gj[\'total_deaths\']
182 z = gj[\'reproduction_rate\']
183 ax. scatter(x, y, z)
184 ax.set_xlabel(\'总病例\')
185 ax.set_ylabel( \'总死亡\')
186 ax.set_zlabel(\'再生指数\')
187 plt.show()
188 
189 #查看国家首都gdp和人口数和接种疫苗人数关系
190 import numpy as np
191 import matplotlib.pyplot as plt
192 from mpl_toolkits. mplot3d import Axes3D
193 fig = plt.figure()
194 ax = Axes3D(fig,auto_add_to_figure=False)
195 fig.add_axes(ax)
196 x = gj[\'gdp_per_capita\']
197 y = gj[\'population\']
198 z = gj[\'people_fully_vaccinated\']
199 ax. scatter(x, y, z)
200 ax.set_xlabel(\'首都GDP\')
201 ax.set_ylabel( \'人口数\')
202 ax.set_zlabel(\'疫苗完全接种人数\')
203 plt.show()

四、总结

1.通过对数据分析和挖掘,得到哪些有益的结论?是否达到预期的目标?

首先我对这次的分析其实挺满意的,,跟自己预期的一样,虽然花费时间较长,可却很值得。再者通过对数据的分析和挖掘我发现非洲疫情占比最多,澳洲疫情占比最少。同时个国家的疫情数据占比较为平均,并且总病例仍然在随着时间的增长而继续增长。总的来说,疫情仍然是我们不可小觑的东西,它每天都在传播着,所以我们应该严加防范。

2.自己在完成此设计过程中,得到哪些收获?以及要改进的建议?

通过此次数据集分析练习,我熟练并掌握了,数据清洗,数据归纳,可视化相关操作。同时本次程序设计任务完成时间较久,也是在一步一步学习熟悉python的知识,通过本次任务提高了对代码的掌握程度,并且在完成任务的过程中提高了实践能力,也是为以后编写代码打下一点基础。本来打算做爬虫设计 ,但因为有现成的数据集,因此放弃了爬虫设计的方案,所以想在假期时尝试一下爬取小说热榜。

 

 

 

 

 

 

 

 

 

 

 

分类:

技术点:

相关文章:

  • 2021-05-17
  • 2021-10-09
  • 2021-10-28
  • 2021-06-26
  • 2021-06-14
  • 2021-06-18
  • 2021-11-11
  • 2021-10-24
猜你喜欢
  • 2021-06-20
  • 2022-01-29
  • 2021-12-02
  • 2021-10-10
  • 2021-12-31
  • 2022-01-22
相关资源
相似解决方案