发布于2022年11月8日3年前 一、选题背景 选题目的和想要达到的目标:人们对疫情的关注程度却普遍下降,特别是对全世界的疫情很多人更是一无所知。所以我分析了世界上的新冠病毒状况。想要将世界上的疫情情况可视化,以简单易懂的方式展现在大家面前。并以此来提醒所有人疫情并没有结束,大家仍然要做好防范疫情传播的措施,希望大家通过我的分析了解到疫情还在持续,不要为国家拖后腿。 经济层面:分析疫情情况,对挽救经济的措施的施行提供便利。 技术层面:通过一个学期的学习将数据集变为简单易懂的图形。 数据来源方面:爱数科具有大量可分析数据,简单方便,且内容涵盖较广。 二、大数据分析设计方案 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的知识,通过本次任务提高了对代码的掌握程度,并且在完成任务的过程中提高了实践能力,也是为以后编写代码打下一点基础。本来打算做爬虫设计 ,但因为有现成的数据集,因此放弃了爬虫设计的方案,所以想在假期时尝试一下爬取小说热榜。
创建帐户或登录后发表意见