经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python | 新冠肺炎疫情数据的爬取与可视化分析
来源:cnblogs  作者:02刘玉  时间:2021/6/15 9:18:31  对本文有异议

前言

这两年,新冠肺炎肆虐而来,随着确诊人数的不断上升,全世界的人都陷入了恐慌中。我们经常能在手机、电视上看到各个地区疫情的情况,但那些数据大多数都是零碎的,我们不可能去记住每个数据,但我们可以用爬虫爬取各个地区发出的新闻数据,再将这些数据进行整理分析。所以我们在疫情期间可以通过访问一个网站,就能知道各个地区的疫情情况。

数据来源

中国的新冠肺炎疫情数据
国外的新冠肺炎疫情数据

爬虫设计方案

1. 爬虫名称
新冠肺炎疫情数据的爬取与可视化分析

2. 爬取内容与数据特征分析
爬取的内容包括了全球新冠肺炎疫情数据、中国各省市新冠肺炎疫情数据和福建各市新冠肺炎疫情数据。
爬取的数据都由中文和数字组成,所有数字数据都是大于等于0,不会出现小于0的情况。

3. 方案概述
分析网站页面结构,找到爬取数据的位置,根据不同的数据制定不同的爬取方法,将爬取的数据保存成csv文件,然后再将csv文件里的数据进行可视化处理。

网站页面的结构特征分析

1. 网站页面结构分析
从下面的网站截图中可以看出,该网站的结构分为三个部分,一部分是左上的疫情总览,一部分是右边各个地区的疫情消息,还有一部分就是左下各个地区具体的疫情数据,而这部分数据就是我们要爬取的数据。

2. 网站html页面结构分析
从下面的网站html截图中可以看出,该网站由div标签进行分割内容,总共分了两大块,左边和右边,我们需要的数据在左边。

进一步分析网站的html,发现数据都在class=data-list的div标签里,在div标签里的列表标签ul,存放着中国每个省的疫情数据。

在li标签下,还有一个div,这个div里的ul列表存放的数据是每个省市的数据。

3. 标签查找方法与遍历方法
通过上面网站html页面的分析,可以画出标签树。

(1)地区名称所在标签的查找方法
各个省份的名称在class=list-pro-name的div标签里,而各省份的城市的名称在class=list-city-name的div标签里。因为这两个标签的class属性不同,所以可以用BeautifulSoup库的find()方法,利用标签属性值检索。
(2)地区疫情数据所在标签的查找方法
从上面的标签树中可以看出,省疫情数据和市疫情数据分别在不同的li标签下的div标签里,第二个li是第一个li的子标签。在这两个标签之间没有可以唯一标识的熟悉,所以要查找到这两个标签需要BeautifulSoup库的CSS选择器,通过标签的父子关系分别找到两个li标签。

爬虫程序设计

1. 数据的爬取
(1)中国新冠疫情数据的爬取

  1. # 获取中国每个省的疫情数据
  2. def getProvinceData(html):
  3. total_data=[]
  4. temporary=[]
  5. new_diagnosis_data=[]
  6. cumulative_diagnosis_data=[]
  7. cured_data=[]
  8. dead_data=[]
  9. soup = BeautifulSoup(html,'html.parser')
  10. # 找到 class=data-list 的div标签
  11. data = soup.find('div',{'class':'data-list'})
  12. ul = data.find('ul')
  13. div = ul.find_all('div',{'class':'list-pro-name'})
  14. province_name_data=[]
  15. for i in div:
  16. # 获取省的名称
  17. # 省名称在label标签里
  18. province_name = i.find('label').string
  19. province_name_data.append(province_name)
  20. # 用CSS选择器获取第一层的数据(每个省的数据)
  21. diagnosis = soup.select('div.data-list > ul > li > div.list-city-data')
  22. for i in diagnosis:
  23. temporary.append(i.string)
  24. total = [temporary[i:i+4] for i in range(0,len(temporary),4)]
  25. for i in range(len(total)):
  26. # 获取新增确诊人数
  27. new_diagnosis_data.append(total[i][0])
  28. # 获取累计确诊人数
  29. cumulative_diagnosis_data.append(total[i][1])
  30. # 获取治愈人数
  31. cured_data.append(total[i][2])
  32. # 获取死亡人数
  33. dead_data.append(total[i][3])
  34. total_data.append(province_name_data)
  35. total_data.append(new_diagnosis_data)
  36. total_data.append(cumulative_diagnosis_data)
  37. total_data.append(cured_data)
  38. total_data.append(dead_data)
  39. return total_data

(2)福建省新冠疫情数据的爬取

  1. # 获取福建省每个市的疫情数据
  2. def getCitiData(html):
  3. citi_name_data=[]
  4. new_diagnosis_data=[]
  5. cumulative_diagnosis_data=[]
  6. cured_data=[]
  7. dead_data=[]
  8. total_data=[]
  9. soup = BeautifulSoup(html,'html.parser')
  10. data = soup.find('div',{'class':'data-list'})
  11. # 找到有唯一标识的属性的input标签
  12. input1 = data.find('input',{'id':'_209'})
  13. # 找到input标签的的父标签
  14. div = input1.parent
  15. # 找到所有的li
  16. li = div.find_all('li')
  17. # 遍历li组成的列表
  18. for i in range(1,len(li)):
  19. # 获取市名称
  20. citi_name = li[i].find('div',{'class':'list-city-name'})
  21. citi_name_data.append(citi_name.string+'市')
  22. div = li[i].find_all('div',{'class':'list-city-data'})
  23. # 获取新增确诊人数
  24. new_diagnosis = div[0].string
  25. new_diagnosis_data.append(new_diagnosis)
  26. # 获取累计确诊人数
  27. cumulative_diagnosis = div[1].string
  28. cumulative_diagnosis_data.append(cumulative_diagnosis)
  29. # 获取治愈人数
  30. cured = div[2].string
  31. cured_data.append(cured)
  32. # 获取死亡人数
  33. dead = div[3].string
  34. dead_data.append(dead)
  35. total_data.append(citi_name_data)
  36. total_data.append(new_diagnosis_data)
  37. total_data.append(cumulative_diagnosis_data)
  38. total_data.append(cured_data)
  39. total_data.append(dead_data)
  40. return total_data

(3)国外新冠疫情数据的爬取

  1. # 获取全球每个国家的疫情数据
  2. def getWorldData(html):
  3. country_name_data=[]
  4. new_diagnosis_data=[]
  5. cumulative_diagnosis_data=[]
  6. cured_data=[]
  7. dead_data=[]
  8. total_data=[]
  9. soup = BeautifulSoup(html,'html.parser')
  10. data = soup.find('div',{'class':'data-list'})
  11. # 因为有两层li,我们需要的是第二层的li,所以可以通过CSS选择器来获取第二层的li
  12. data_list = data.select('ul > li > div > div > ul > li')
  13. for i in range(12,len(data_list)-1):
  14. div = data_list[i].find_all('div')
  15. # 获取国家名称
  16. country_name = div[0].string
  17. country_name_data.append(country_name)
  18. # 获取新增确诊人数
  19. new_diagnosis = div[1].string
  20. new_diagnosis_data.append(new_diagnosis)
  21. # 获取累计确诊人数
  22. cumulative_diagnosis = div[2].string
  23. cumulative_diagnosis_data.append(cumulative_diagnosis)
  24. # 获取治愈人数
  25. cured = div[3].string
  26. cured_data.append(cured)
  27. # 获取死亡人数
  28. dead = div[4].string
  29. dead_data.append(dead)
  30. total_data.append(country_name_data)
  31. total_data.append(new_diagnosis_data)
  32. total_data.append(cumulative_diagnosis_data)
  33. total_data.append(cured_data)
  34. total_data.append(dead_data)
  35. return total_data

(4)保存数据
疫情数据爬取完后,通过Pandask库的to_csv()方法,将爬取后的数据保存为csv文件。
保存后的部分数据:

2. 数据清洗与处理
(1)因为全球疫情的数据量较大,所以我们可以通过pandas库来查看数据是否有异常、缺失、重复

  1. import pandas as pd
  2. #导入数据
  3. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  4. # 查看数据的简要信息
  5. df_world.describe()

(2)通过查看数据的简要信息,数据正常,数据的最小值也不是负数

(3)通过pandas库的isnull()方法查看是否有空值

  1. # 查看是否有空值,有空值返回True,没有空值返回False
  2. df_world.isnull().value_counts()

(4)通过pandas库的duplicated()方法查看是否有重复行

  1. # 查看是否有重复行,有重复行返回True,没有重复行返回False
  2. df_world.duplicated()

(5)为了之后能更好的分析数据,需要对数据进行排序,后面再排序也可以

  1. #根据累计确诊人数对数据进行降序排序
  2. df = df_world.sort_values(by='累计确诊',ascending=False)

(6)保存处理后的数据

  1. #保存处理后的数据
  2. import pandas as pd
  3. df = df.set_index('名称')
  4. df.to_csv("各国家的新冠肺炎疫情数据.csv",encoding='utf-8')
  5. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  6. df_world.head()

3. 数据可视化分析
(1)中国新冠肺炎疫情地图

  1. # 用pyecharts库画中国新冠疫情地图
  2. from pyecharts import options as opts
  3. from pyecharts.charts import Map
  4. import pandas as pd
  5. # 自定义分段图例
  6. pieces=[
  7. {"max": 70000, "min": 3000, "label": ">3000", "color": "#B40404"},
  8. {"max": 3000, "min": 1000, "label": "1000-3000", "color": "#DF0101"},
  9. {"max": 1000, "min": 100, "label": "100-1000", "color": "#F78181"},
  10. {"max": 100, "min": 10, "label": "10-100", "color": "#F5A9A9"},
  11. {"max": 10, "min": 0, "label": "<10", "color": "#FFFFCC"},
  12. ]
  13. name = []
  14. values = []
  15. # 导入数据
  16. df = pd.DataFrame(pd.read_csv("各省的新冠肺炎疫情数据.csv"))
  17. # 处理数据,将数据处理成Map所要求的数据
  18. for i in range(df.shape[0]): # shape[0]:行数,shape[1]:列数
  19. name.append(df.at[i,'名称'])
  20. values.append(str(df.at[i,'累计确诊']))
  21. total = [[name[i],values[i]] for i in range(len(name))]
  22. # 创建地图(Map)
  23. china_map = (Map())
  24. # 设置中国地图
  25. china_map.add("确诊人数",total ,maptype="china",is_map_symbol_show=False)
  26. china_map.set_global_opts(
  27. # 设置地图标题
  28. title_opts=opts.TitleOpts(title="中国各省、直辖市、自治区、特别行政区新冠肺炎确诊人数"),
  29. # 设置自定义图例
  30. visualmap_opts=opts.VisualMapOpts(max_=70000,is_piecewise=True,pieces=pieces),
  31. legend_opts=opts.LegendOpts(is_show=False)
  32. )
  33. # 直接在notebook显示地图,默认是保存为html文件
  34. china_map.render_notebook()

(2)中国确诊人数前15地区的治愈率与死亡率的折线图

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. # 创建画布
  4. fig=plt.figure(figsize=(10,8))
  5. ax=fig.add_subplot(1,1,1)
  6. #中文字体
  7. plt.rcParams['font.family'] = ['SimHei']
  8. # 导入数据
  9. df_china = pd.read_csv("各省的新冠肺炎疫情数据.csv")
  10. df_china['治愈率'] = df_china['治愈']/df_china['累计确诊']
  11. df_china['死亡率'] = df_china['死亡']/df_china['累计确诊']
  12. plt.plot(df_china.iloc[0:16,0],df_china.iloc[0:16,5],label="治愈率")
  13. plt.plot(df_china.iloc[0:16,0],df_china.iloc[0:16,6],label="死亡率")
  14. # y轴刻度标签
  15. ax.set_yticks([0.05,0.2,0.4,0.6,0.8,1.0])
  16. ax.set_yticklabels(["5 %","20 %","40 %","60 %","80 %","100 %"],fontsize=12)
  17. # 图例
  18. plt.legend(loc='center right',fontsize=12)
  19. # 标题
  20. plt.title("中国确诊人数前15地区的治愈率与死亡率")
  21. # 网格
  22. plt.grid()
  23. plt.show()

(3)中国确诊人数前15地区的新增确诊人数的折线图

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. # 创建画布
  4. fig=plt.figure(figsize=(10,8))
  5. #中文字体
  6. plt.rcParams['font.family'] = ['SimHei']
  7. #导入数据
  8. df_china = pd.read_csv("各省的新冠肺炎疫情数据.csv")
  9. plt.plot(df_china.iloc[0:15,0],df_china.iloc[0:15,1],label="新增确诊")
  10. # 图例
  11. plt.legend(fontsize=12)
  12. # 标题
  13. plt.title("中国确诊人数前15地区的新增确诊人数")
  14. # y轴标签
  15. plt.ylabel('人数')
  16. # 网格
  17. plt.grid()
  18. plt.show()

(4)福建新冠肺炎疫情地图

  1. #用pyecharts库画福建疫情分布地图
  2. import pandas as pd
  3. from pyecharts.charts import Map,Geo
  4. from pyecharts import options as opts
  5. #自定义分段图例
  6. pieces=[
  7. {"max": 100, "min": 70, "label": ">70", "color": "#B40404"},
  8. {"max": 70, "min": 40, "label": "40-79", "color": "#DF0101"},
  9. {"max": 40, "min": 20, "label": "20-40", "color": "#F78181"},
  10. {"max": 20, "min": 10, "label": "10-20", "color": "#F5A9A9"},
  11. {"max": 10, "min": 0, "label": "<10", "color": "#FFFFCC"},
  12. ]
  13. name = []
  14. values = []
  15. #导入数据
  16. df_citi = pd.read_csv("各市的新冠肺炎疫情数据.csv")
  17. # 处理数据,将数据处理成Map所要求的数据
  18. for i in range(df_citi.shape[0]): # shape[0]:行数,shape[1]:列数
  19. name.append(df_citi.at[i,'名称'])
  20. values.append(str(df_citi.at[i,'累计确诊']))
  21. total = [[name[i],values[i]] for i in range(len(name))]
  22. # 创建地图
  23. chinaciti_map = (Map())
  24. # 设置福建省地图
  25. chinaciti_map.add("确诊人数",total ,maptype="福建",is_map_symbol_show=False)
  26. chinaciti_map.set_global_opts(
  27. # 地图标题
  28. title_opts=opts.TitleOpts(title="福建各市新冠肺炎确诊人数"),
  29. # 设置自定义图例
  30. visualmap_opts=opts.VisualMapOpts(max_=100,is_piecewise=True,pieces=pieces),
  31. legend_opts=opts.LegendOpts(is_show=False)
  32. )
  33. # 直接在notebook显示地图,默认是保存为html文件
  34. chinaciti_map.render_notebook()

(5)福建新冠肺炎疫情饼图

  1. import matplotlib.pyplot as plt
  2. import pandas as pd
  3. # 创建画布
  4. plt.figure(figsize=(6,4))
  5. #中文字体
  6. plt.rcParams['font.family'] = ['SimHei']
  7. #导入数据
  8. df_citi = pd.read_csv("各市的新冠肺炎疫情数据.csv")
  9. labels = df_citi['名称'].values
  10. data = df_citi['累计确诊'].values
  11. plt.pie(data ,labels=labels, autopct='%1.1f%%')
  12. #设置显示图像为圆形
  13. plt.axis('equal')
  14. # 标题
  15. plt.title('福建省各市新冠疫情比例')
  16. plt.show()

(6)全球新冠肺炎疫情地图
因为世界地图的国家名是英文的,而爬取的数据的国家名是中文的,国家名对不上会导致数据显示不到地图上,所以要先建一个映射字典,将英文替换成中文

  1. #中文国家名映射字典
  2. nameMap = {
  3. 'Singapore Rep.':'新加坡','Dominican Rep.':'多米尼加','Palestine':'巴勒斯坦','Bahamas':'巴哈马','Timor-Leste':'东帝汶','Afghanistan':'阿富汗',
  4. 'Guinea-Bissau':'几内亚比绍',"C?te d'Ivoire":'科特迪瓦','Siachen Glacier':'锡亚琴冰川',"Br. Indian Ocean Ter.":'英属印度洋领土','Angola':'安哥拉',
  5. 'Albania':'阿尔巴尼亚','United Arab Emirates':'阿联酋','Argentina':'阿根廷','Armenia':'亚美尼亚','French Southern and Antarctic Lands':'法属南半球和南极领地',
  6. 'Australia':'澳大利亚','Austria':'奥地利','Azerbaijan':'阿塞拜疆','Burundi':'布隆迪','Belgium':'比利时','Benin':'贝宁','Burkina Faso':'布基纳法索',
  7. 'Bangladesh':'孟加拉国','Bulgaria':'保加利亚','The Bahamas':'巴哈马','Bosnia and Herz.':'波斯尼亚和黑塞哥维那','Belarus':'白俄罗斯','Belize':'伯利兹',
  8. 'Bermuda':'百慕大','Bolivia':'玻利维亚','Brazil':'巴西','Brunei':'文莱','Bhutan':'不丹','Botswana':'博茨瓦纳','Central African Rep.':'中非','Canada':'加拿大',
  9. 'Switzerland':'瑞士','Chile':'智利','China':'中国','Ivory Coast':'象牙海岸','Cameroon':'喀麦隆','Dem. Rep. Congo':'刚果(金)','Congo':'刚果(布)',
  10. 'Colombia':'哥伦比亚','Costa Rica':'哥斯达黎加', 'Cuba':'古巴','N. Cyprus':'北塞浦路斯','Cyprus':'塞浦路斯','Czech Rep.':'捷克','Germany':'德国',
  11. 'Djibouti':'吉布提','Denmark':'丹麦','Algeria':'阿尔及利亚','Ecuador':'厄瓜多尔','Egypt':'埃及','Eritrea':'厄立特里亚','Spain':'西班牙','Estonia':'爱沙尼亚',
  12. 'Ethiopia':'埃塞俄比亚','Finland':'芬兰','Fiji':'斐','Falkland Islands':'福克兰群岛','France':'法国','Gabon':'加蓬','United Kingdom':'英国','Georgia':'格鲁吉亚',
  13. 'Ghana':'加纳','Guinea':'几内亚','Gambia':'冈比亚','Guinea Bissau':'几内亚比绍','Eq. Guinea':'赤道几内亚','Greece':'希腊','Greenland':'格陵兰岛',
  14. 'Guatemala':'危地马拉','French Guiana':'法属圭亚那','Guyana':'圭亚那','Honduras':'洪都拉斯','Croatia':'克罗地亚','Haiti':'海地','Hungary':'匈牙利',
  15. 'Indonesia':'印度尼西亚','India':'印度','Ireland':'爱尔兰','Iran':'伊朗','Iraq':'伊拉克','Iceland':'冰岛','Israel':'以色列','Italy':'意大利','Jamaica':'牙买加',
  16. 'Jordan':'约旦','Japan':'日本','Kazakhstan':'哈萨克斯坦','Kenya':'肯尼亚','Kyrgyzstan':'吉尔吉斯斯坦','Cambodia':'柬埔寨','Korea':'韩国','Kosovo':'科索沃',
  17. 'Kuwait':'科威特','Lao PDR':'老挝','Lebanon':'黎巴嫩','Liberia':'利比里亚','Libya':'利比亚','Sri Lanka':'斯里兰卡','Lesotho':'莱索托','Lithuania':'立陶宛',
  18. 'Luxembourg':'卢森堡','Latvia':'拉脱维亚','Morocco':'摩洛哥','Moldova':'摩尔多瓦','Madagascar':'马达加斯加','Mexico':'墨西哥','Macedonia':'马其顿',
  19. 'Mali':'马里','Myanmar':'缅甸','Montenegro':'黑山','Mongolia':'蒙古国','Mozambique':'莫桑比克', 'Mauritania':'毛里塔尼亚','Malawi':'马拉维',
  20. 'Malaysia':'马来西亚','Namibia':'纳米比亚','New Caledonia':'新喀里多尼亚','Niger':'尼日尔','Nigeria':'尼日利亚','Nicaragua':'尼加拉瓜','Netherlands':'荷兰',
  21. 'Norway':'挪威','Nepal':'尼泊尔','New Zealand':'新西兰','Oman':'阿曼','Pakistan':'巴基斯坦','Panama':'巴拿马','Peru':'秘鲁','Philippines':'菲律宾',
  22. 'Papua New Guinea':'巴布亚新几内亚','Poland':'波兰','Puerto Rico':'波多黎各','Dem. Rep. Korea':'朝鲜','Portugal':'葡萄牙','Paraguay':'巴拉圭',
  23. 'Qatar':'卡塔尔','Romania':'罗马尼亚','Russia':'俄罗斯','Rwanda':'卢旺达','W. Sahara':'西撒哈拉','Saudi Arabia':'沙特阿拉伯','Sudan':'苏丹',
  24. 'S. Sudan':'南苏丹','Senegal':'塞内加尔','Solomon Is.':'所罗门群岛','Sierra Leone':'塞拉利昂','El Salvador':'萨尔瓦多','Somaliland':'索马里兰',
  25. 'Somalia':'索马里','Serbia':'塞尔维亚','Suriname':'苏里南','Slovakia':'斯洛伐克','Slovenia':'斯洛文尼亚','Sweden':'瑞典','Swaziland':'斯威士兰',
  26. 'Syria':'叙利亚','Chad':'乍得','Togo':'多哥','Thailand':'泰国','Tajikistan':'塔吉克斯坦','Turkmenistan':'土库曼斯坦','East Timor':'东帝汶',
  27. 'Trinidad and Tobago':'特里尼达和多巴哥','Tunisia':'突尼斯','Turkey':'土耳其','Tanzania':'坦桑尼亚','Uganda':'乌干达','Ukraine':'乌克兰',
  28. 'Uruguay':'乌拉圭','United States':'美国','Uzbekistan':'乌兹别克斯坦','Venezuela':'委内瑞拉','Vietnam':'越南','Vanuatu':'瓦努阿图','West Bank':'西岸',
  29. 'Yemen':'也门','South Africa':'南非','Zambia':'赞比亚','Zimbabwe':'津巴布韦'
  30. }

映射字典弄好后,就可以作图了

  1. #用pyecharts库画全球疫情分布地图
  2. import pandas as pd
  3. from pyecharts.charts import Map,Geo
  4. from pyecharts import options as opts
  5. #自定义分段图例
  6. pieces=[
  7. {"max": 50000000, "min": 10000000, "label": ">1000万", "color": "#8B1A1A"},
  8. {"max": 10000000, "min": 5000000, "label": "500万-1000万", "color": "#CD2626"},
  9. {"max": 5000000, "min": 1000000, "label": "100万-500万", "color": "#EE2C2C"},
  10. {"max": 1000000, "min": 100000, "label": "10万-100万", "color": "#FF3030"},
  11. {"max": 100000, "min": 10000, "label": "10000-10万", "color": "#FA8072"},
  12. {"max": 10000, "min": 1000, "label": "1000-10000", "color": "#FFF8DC"},
  13. {"max": 1000, "min": 0, "label": "<500", "color": "#FFFFF0"},
  14. ]
  15. name = []
  16. values = []
  17. # 导入数据
  18. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  19. df_china = pd.read_csv("各省的新冠肺炎疫情数据.csv")
  20. # 因为爬取的全球数据不包括中国,所以要把中国的数据加进去
  21. china_data = sum(df_china['累计确诊'])
  22. values.append(china_data)
  23. name.append('中国')
  24. # 处理数据,将数据处理成Map所要求的数据
  25. for i in range(df_world.shape[0]): # shape[0]:行数,shape[1]:列数
  26. name.append(df_world.at[i,'名称'])
  27. values.append(str(df_world.at[i,'累计确诊']))
  28. total = [[name[i],values[i]] for i in range(len(name))]
  29. world_map = (Map())
  30. #设置地图为世界地图、设置中文国家名、设置不显示国家首都红点
  31. world_map.add("确诊人数",total ,maptype="world",name_map=nameMap,is_map_symbol_show=False)
  32. #设置不显示国家名
  33. world_map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
  34. world_map.set_global_opts(
  35. # 标题
  36. title_opts=opts.TitleOpts(title="全球各个国家新冠肺炎确诊人数"),
  37. #设置自定义分段图例
  38. visualmap_opts=opts.VisualMapOpts(max_=50000000,is_piecewise=True,pieces=pieces),
  39. legend_opts=opts.LegendOpts(is_show=False)
  40. )
  41. # 直接在notebook显示地图,默认是保存为html文件
  42. world_map.render_notebook()


(7)全球新冠肺炎疫情确诊人数排名前10的国家的条形图

  1. # 全球新冠肺炎疫情确诊人数排名前10的国家
  2. import seaborn as sns
  3. import matplotlib.pyplot as plt
  4. import pandas as pd
  5. #画布大小
  6. fig=plt.figure(figsize=(10,8))
  7. ax=fig.add_subplot(1,1,1)
  8. #中文字体
  9. plt.rcParams['font.family'] = ['SimHei']
  10. #导入数据
  11. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  12. sns.barplot(x = df_world.iloc[0:11,0].values,y =df_world.iloc[0:11,2].values,palette="rocket")
  13. #y轴刻度标签
  14. ax.set_yticks([5000000,10000000,15000000,20000000,25000000,30000000,35000000])
  15. ax.set_yticklabels(["500万","1000万","1500万","2000万","2500万","3000万","3500万"],fontsize=12)
  16. #标题
  17. plt.title("全球新冠肺炎疫情确诊人数排名前10的国家",fontsize=12)
  18. #y轴标签
  19. plt.ylabel("确 诊 人 数")
  20. plt.show()


(8)全球新冠肺炎疫情确诊人数前5国家的确诊人数、治愈人数的条形图

  1. import matplotlib.pyplot as plt
  2. #画布大小
  3. fig=plt.figure(figsize=(10,8))
  4. ax=fig.add_subplot(1,1,1)
  5. #中文字体
  6. plt.rcParams['font.family'] = ['SimHei']
  7. #导入数据
  8. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  9. #国家
  10. country = df_world.iloc[0:6,0]
  11. #确诊人数
  12. diagnosis = df_world.iloc[0:6,2]
  13. #治愈人数
  14. cured = df_world.iloc[0:6,3]
  15. x = list(range(len(country)))
  16. #设置间距
  17. total_width, n = 0.5, 2
  18. width = total_width / n
  19. #柱状图1
  20. for i in range(len(x)):
  21. x[i] += width
  22. plt.bar(x, diagnosis, width=width, label='确诊人数', tick_label=country,color='#FF3030' )
  23. #柱状图2
  24. for i in range(len(x)):
  25. x[i] += width
  26. plt.bar(x, cured, width=width, label='治愈人数',color='#32CD32')
  27. #y轴刻度标签
  28. ax.set_yticks([5000000,10000000,15000000,20000000,25000000,30000000,35000000])
  29. ax.set_yticklabels(["500万","1000万","1500万","2000万","2500万","3000万","3500万"],fontsize=12)
  30. #标题
  31. plt.title("全球新冠肺炎疫情确诊人数前5国家的确诊人数、治愈人数")
  32. #y轴标签
  33. plt.ylabel("确 诊 人 数",fontsize=12)
  34. #图例
  35. plt.legend(loc='upper right',fontsize=12)
  36. plt.show()


(9)全球新冠肺炎疫情确诊人数前15国家的治愈率与死亡率的折线图

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. # 创建画布
  4. fig=plt.figure(figsize=(10,8))
  5. ax=fig.add_subplot(1,1,1)
  6. #中文字体
  7. plt.rcParams['font.family'] = ['SimHei']
  8. #导入数据
  9. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  10. df_world['治愈率'] = df_world['治愈']/df_world['累计确诊']
  11. df_world['死亡率'] = df_world['死亡']/df_world['累计确诊']
  12. plt.plot(df_world.iloc[0:16,0],df_world.iloc[0:16,5],label="治愈率")
  13. plt.plot(df_world.iloc[0:16,0],df_world.iloc[0:16,6],label="死亡率")
  14. #y轴刻度标签
  15. ax.set_yticks([0.05,0.2,0.4,0.6,0.8,1.0])
  16. ax.set_yticklabels(["5 %","20 %","40 %","60 %","80 %","100 %"],fontsize=12)
  17. plt.legend(loc='center right',fontsize=12)
  18. plt.title("全球新冠肺炎疫情确诊人数前15国家的治愈率与死亡率")
  19. plt.grid()
  20. plt.show()

完整代码

疫情数据爬取的完整代码

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import pandas as pd
  4. # 主函数
  5. def main():
  6. # 中国新冠疫情数据网址
  7. url = "https://www.haoyunbb.com/news/3/36573.html"
  8. html = getUrlData(url)
  9. total_data1 = getProvinceData(html)
  10. total_data2 = getCitiData(html)
  11. # 全球(国外)新冠疫情数据网址
  12. url = "https://www.haoyunbb.com/news/3/39230.html"
  13. html = getUrlData(url)
  14. total_data3 = getWorldData(html)
  15. saveData(total_data1,total_data2,total_data3)
  16. # 获取网页数据
  17. def getUrlData(url):
  18. try:
  19. # get请求,设置超时时间
  20. r = requests.get(url,headers=headers,timeout=30)
  21. r.raise_for_status
  22. r.encoding=r.apparent_encoding
  23. html = r.text
  24. return html
  25. except:
  26. return '发生异常'
  27. # 获取中国每个省的疫情数据
  28. def getProvinceData(html):
  29. total_data=[]
  30. temporary=[]
  31. new_diagnosis_data=[]
  32. cumulative_diagnosis_data=[]
  33. cured_data=[]
  34. dead_data=[]
  35. soup = BeautifulSoup(html,'html.parser')
  36. # 找到 class=data-list 的div标签
  37. data = soup.find('div',{'class':'data-list'})
  38. ul = data.find('ul')
  39. div = ul.find_all('div',{'class':'list-pro-name'})
  40. province_name_data=[]
  41. for i in div:
  42. # 获取省的名称
  43. # 省名称在label标签里
  44. province_name = i.find('label').string
  45. province_name_data.append(province_name)
  46. # 用CSS选择器获取第一层的数据(每个省的数据)
  47. diagnosis = soup.select('div.data-list > ul > li > div.list-city-data')
  48. for i in diagnosis:
  49. temporary.append(i.string)
  50. total = [temporary[i:i+4] for i in range(0,len(temporary),4)]
  51. for i in range(len(total)):
  52. # 获取新增确诊人数
  53. new_diagnosis_data.append(total[i][0])
  54. # 获取累计确诊人数
  55. cumulative_diagnosis_data.append(total[i][1])
  56. # 获取治愈人数
  57. cured_data.append(total[i][2])
  58. # 获取死亡人数
  59. dead_data.append(total[i][3])
  60. total_data.append(province_name_data)
  61. total_data.append(new_diagnosis_data)
  62. total_data.append(cumulative_diagnosis_data)
  63. total_data.append(cured_data)
  64. total_data.append(dead_data)
  65. return total_data
  66. # 获取福建省每个市的疫情数据
  67. def getCitiData(html):
  68. citi_name_data=[]
  69. new_diagnosis_data=[]
  70. cumulative_diagnosis_data=[]
  71. cured_data=[]
  72. dead_data=[]
  73. total_data=[]
  74. soup = BeautifulSoup(html,'html.parser')
  75. data = soup.find('div',{'class':'data-list'})
  76. # 找到有唯一标识的属性的input标签
  77. input1 = data.find('input',{'id':'_209'})
  78. # 找到input标签的的父标签
  79. div = input1.parent
  80. # 找到所有的li
  81. li = div.find_all('li')
  82. # 遍历li组成的列表
  83. for i in range(1,len(li)):
  84. # 获取市名称
  85. citi_name = li[i].find('div',{'class':'list-city-name'})
  86. citi_name_data.append(citi_name.string+'市')
  87. div = li[i].find_all('div',{'class':'list-city-data'})
  88. # 获取新增确诊人数
  89. new_diagnosis = div[0].string
  90. new_diagnosis_data.append(new_diagnosis)
  91. # 获取累计确诊人数
  92. cumulative_diagnosis = div[1].string
  93. cumulative_diagnosis_data.append(cumulative_diagnosis)
  94. # 获取治愈人数
  95. cured = div[2].string
  96. cured_data.append(cured)
  97. # 获取死亡人数
  98. dead = div[3].string
  99. dead_data.append(dead)
  100. total_data.append(citi_name_data)
  101. total_data.append(new_diagnosis_data)
  102. total_data.append(cumulative_diagnosis_data)
  103. total_data.append(cured_data)
  104. total_data.append(dead_data)
  105. return total_data
  106. # 获取全球每个国家的疫情数据
  107. def getWorldData(html):
  108. country_name_data=[]
  109. new_diagnosis_data=[]
  110. cumulative_diagnosis_data=[]
  111. cured_data=[]
  112. dead_data=[]
  113. total_data=[]
  114. soup = BeautifulSoup(html,'html.parser')
  115. data = soup.find('div',{'class':'data-list'})
  116. # 因为有两层li,我们需要的是第二层的li,所以可以通过CSS选择器来获取第二层的li
  117. data_list = data.select('ul > li > div > div > ul > li')
  118. for i in range(12,len(data_list)-1):
  119. div = data_list[i].find_all('div')
  120. # 获取国家名称
  121. country_name = div[0].string
  122. country_name_data.append(country_name)
  123. # 获取新增确诊人数
  124. new_diagnosis = div[1].string
  125. new_diagnosis_data.append(new_diagnosis)
  126. # 获取累计确诊人数
  127. cumulative_diagnosis = div[2].string
  128. cumulative_diagnosis_data.append(cumulative_diagnosis)
  129. # 获取治愈人数
  130. cured = div[3].string
  131. cured_data.append(cured)
  132. # 获取死亡人数
  133. dead = div[4].string
  134. dead_data.append(dead)
  135. total_data.append(country_name_data)
  136. total_data.append(new_diagnosis_data)
  137. total_data.append(cumulative_diagnosis_data)
  138. total_data.append(cured_data)
  139. total_data.append(dead_data)
  140. return total_data
  141. # 保存数据
  142. def saveData(total_data1,total_data2,total_data3):
  143. df1 = data(total_data1)
  144. df2 = data(total_data2)
  145. df3 = data(total_data3)
  146. # 将爬取的数据保存为csv文件
  147. df1.to_csv("各省的新冠肺炎疫情数据.csv",encoding='utf-8')
  148. df2.to_csv("各市的新冠肺炎疫情数据.csv",encoding='utf-8')
  149. df3.to_csv("各国家的新冠肺炎疫情数据.csv",encoding='utf-8')
  150. def data(total_data):
  151. df = pd.DataFrame({'名称':total_data[0],'新增确诊':total_data[1],'累计确诊':total_data[2],'治愈':total_data[3],'死亡':total_data[4]})
  152. # 将名称列设置为索引列
  153. df = df.set_index('名称')
  154. return df
  155. # 程序入口
  156. if __name__== "__main__":
  157. main()
  158. # 数据清洗与处理
  159. #因为全球疫情的数据量较大,所以我们可以通过pandas库来查看数据是否有异常、缺失、重复
  160. import pandas as pd
  161. #导入数据
  162. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  163. # 查看数据的简要信息
  164. # 通过查看数据的简要信息,数据正常,数据的最小值也不是负数
  165. df_world.describe()
  166. # 查看是否有空值,有空值返回True,没有空值返回False
  167. df_world.isnull().value_counts()
  168. # 查看是否有重复行,有重复行返回True,没有重复行返回False
  169. df_world.duplicated()
  170. #根据累计确诊人数对数据进行降序排序
  171. df = df_world.sort_values(by='累计确诊',ascending=False)
  172. #保存处理后的数据
  173. import pandas as pd
  174. df = df.set_index('名称')
  175. df.to_csv("各国家的新冠肺炎疫情数据.csv",encoding='utf-8')
  176. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  177. df_world.head()
  178. # 数据可视化
  179. # 用pyecharts库画中国新冠疫情地图
  180. from pyecharts import options as opts
  181. from pyecharts.charts import Map
  182. import pandas as pd
  183. # 自定义分段图例
  184. pieces=[
  185. {"max": 70000, "min": 3000, "label": ">3000", "color": "#B40404"},
  186. {"max": 3000, "min": 1000, "label": "1000-3000", "color": "#DF0101"},
  187. {"max": 1000, "min": 100, "label": "100-1000", "color": "#F78181"},
  188. {"max": 100, "min": 10, "label": "10-100", "color": "#F5A9A9"},
  189. {"max": 10, "min": 0, "label": "<10", "color": "#FFFFCC"},
  190. ]
  191. name = []
  192. values = []
  193. # 导入数据
  194. df = pd.DataFrame(pd.read_csv("各省的新冠肺炎疫情数据.csv"))
  195. # 处理数据,将数据处理成Map所要求的数据
  196. for i in range(df.shape[0]): # shape[0]:行数,shape[1]:列数
  197. name.append(df.at[i,'名称'])
  198. values.append(str(df.at[i,'累计确诊']))
  199. total = [[name[i],values[i]] for i in range(len(name))]
  200. # 创建地图(Map)
  201. china_map = (Map())
  202. # 设置中国地图
  203. china_map.add("确诊人数",total ,maptype="china",is_map_symbol_show=False)
  204. china_map.set_global_opts(
  205. # 设置地图标题
  206. title_opts=opts.TitleOpts(title="中国各省、直辖市、自治区、特别行政区新冠肺炎确诊人数"),
  207. # 设置自定义图例
  208. visualmap_opts=opts.VisualMapOpts(max_=70000,is_piecewise=True,pieces=pieces),
  209. legend_opts=opts.LegendOpts(is_show=False)
  210. )
  211. # 直接在notebook显示地图,默认是保存为html文件
  212. china_map.render_notebook()
  213. 中国确诊人数前15地区的治愈率与死亡率折线图
  214. import pandas as pd
  215. import matplotlib.pyplot as plt
  216. # 创建画布
  217. fig=plt.figure(figsize=(10,8))
  218. ax=fig.add_subplot(1,1,1)
  219. #中文字体
  220. plt.rcParams['font.family'] = ['SimHei']
  221. # 导入数据
  222. df_china = pd.read_csv("各省的新冠肺炎疫情数据.csv")
  223. df_china['治愈率'] = df_china['治愈']/df_china['累计确诊']
  224. df_china['死亡率'] = df_china['死亡']/df_china['累计确诊']
  225. plt.plot(df_china.iloc[0:16,0],df_china.iloc[0:16,5],label="治愈率")
  226. plt.plot(df_china.iloc[0:16,0],df_china.iloc[0:16,6],label="死亡率")
  227. # y轴刻度标签
  228. ax.set_yticks([0.05,0.2,0.4,0.6,0.8,1.0])
  229. ax.set_yticklabels(["5 %","20 %","40 %","60 %","80 %","100 %"],fontsize=12)
  230. # 图例
  231. plt.legend(loc='center right',fontsize=12)
  232. # 标题
  233. plt.title("中国确诊人数前15地区的治愈率与死亡率")
  234. # 网格
  235. plt.grid()
  236. plt.show()
  237. # 中国确诊人数前15地区的新增确诊人数折线图
  238. import pandas as pd
  239. import matplotlib.pyplot as plt
  240. # 创建画布
  241. fig=plt.figure(figsize=(10,8))
  242. #中文字体
  243. plt.rcParams['font.family'] = ['SimHei']
  244. #导入数据
  245. df_china = pd.read_csv("各省的新冠肺炎疫情数据.csv")
  246. plt.plot(df_china.iloc[0:15,0],df_china.iloc[0:15,1],label="新增确诊")
  247. # 图例
  248. plt.legend(fontsize=12)
  249. # 标题
  250. plt.title("中国确诊人数前15地区的新增确诊人数")
  251. # y轴标签
  252. plt.ylabel('人数')
  253. # 网格
  254. plt.grid()
  255. plt.show()
  256. #用pyecharts库画福建疫情分布地图
  257. import pandas as pd
  258. from pyecharts.charts import Map,Geo
  259. from pyecharts import options as opts
  260. #自定义分段图例
  261. pieces=[
  262. {"max": 100, "min": 70, "label": ">70", "color": "#B40404"},
  263. {"max": 70, "min": 40, "label": "40-79", "color": "#DF0101"},
  264. {"max": 40, "min": 20, "label": "20-40", "color": "#F78181"},
  265. {"max": 20, "min": 10, "label": "10-20", "color": "#F5A9A9"},
  266. {"max": 10, "min": 0, "label": "<10", "color": "#FFFFCC"},
  267. ]
  268. name = []
  269. values = []
  270. #导入数据
  271. df_citi = pd.read_csv("各市的新冠肺炎疫情数据.csv")
  272. # 处理数据,将数据处理成Map所要求的数据
  273. for i in range(df_citi.shape[0]): # shape[0]:行数,shape[1]:列数
  274. name.append(df_citi.at[i,'名称'])
  275. values.append(str(df_citi.at[i,'累计确诊']))
  276. total = [[name[i],values[i]] for i in range(len(name))]
  277. # 创建地图
  278. chinaciti_map = (Map())
  279. # 设置福建省地图
  280. chinaciti_map.add("确诊人数",total ,maptype="福建",is_map_symbol_show=False)
  281. chinaciti_map.set_global_opts(
  282. # 地图标题
  283. title_opts=opts.TitleOpts(title="福建各市新冠肺炎确诊人数"),
  284. # 设置自定义图例
  285. visualmap_opts=opts.VisualMapOpts(max_=100,is_piecewise=True,pieces=pieces),
  286. legend_opts=opts.LegendOpts(is_show=False)
  287. )
  288. # 直接在notebook显示地图,默认是保存为html文件
  289. chinaciti_map.render_notebook()
  290. #福建省各市新冠疫情比例饼图
  291. import matplotlib.pyplot as plt
  292. import pandas as pd
  293. # 创建画布
  294. plt.figure(figsize=(6,4))
  295. #中文字体
  296. plt.rcParams['font.family'] = ['SimHei']
  297. #导入数据
  298. df_citi = pd.read_csv("各市的新冠肺炎疫情数据.csv")
  299. labels = df_citi['名称'].values
  300. data = df_citi['累计确诊'].values
  301. plt.pie(data ,labels=labels, autopct='%1.1f%%')
  302. #设置显示图像为圆形
  303. plt.axis('equal')
  304. # 标题
  305. plt.title('福建省各市新冠疫情比例')
  306. plt.show()
  307. #用pyecharts库画全球疫情分布地图
  308. import pandas as pd
  309. from pyecharts.charts import Map,Geo
  310. from pyecharts import options as opts
  311. #自定义分段图例
  312. pieces=[
  313. {"max": 50000000, "min": 10000000, "label": ">1000万", "color": "#8B1A1A"},
  314. {"max": 10000000, "min": 5000000, "label": "500万-1000万", "color": "#CD2626"},
  315. {"max": 5000000, "min": 1000000, "label": "100万-500万", "color": "#EE2C2C"},
  316. {"max": 1000000, "min": 100000, "label": "10万-100万", "color": "#FF3030"},
  317. {"max": 100000, "min": 10000, "label": "10000-10万", "color": "#FA8072"},
  318. {"max": 10000, "min": 1000, "label": "1000-10000", "color": "#FFF8DC"},
  319. {"max": 1000, "min": 0, "label": "<500", "color": "#FFFFF0"},
  320. ]
  321. name = []
  322. values = []
  323. # 导入数据
  324. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  325. df_china = pd.read_csv("各省的新冠肺炎疫情数据.csv")
  326. # 因为爬取的全球数据不包括中国,所以要把中国的数据加进去
  327. china_data = sum(df_china['累计确诊'])
  328. values.append(china_data)
  329. name.append('中国')
  330. # 处理数据,将数据处理成Map所要求的数据
  331. for i in range(df_world.shape[0]): # shape[0]:行数,shape[1]:列数
  332. name.append(df_world.at[i,'名称'])
  333. values.append(str(df_world.at[i,'累计确诊']))
  334. total = [[name[i],values[i]] for i in range(len(name))]
  335. world_map = (Map())
  336. #设置地图为世界地图、设置中文国家名、设置不显示国家首都红点
  337. world_map.add("确诊人数",total ,maptype="world",name_map=nameMap,is_map_symbol_show=False)
  338. #设置不显示国家名
  339. world_map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
  340. world_map.set_global_opts(
  341. # 标题
  342. title_opts=opts.TitleOpts(title="全球各个国家新冠肺炎地图"),
  343. #设置自定义分段图例
  344. visualmap_opts=opts.VisualMapOpts(max_=50000000,is_piecewise=True,pieces=pieces),
  345. legend_opts=opts.LegendOpts(is_show=False)
  346. )
  347. # 直接在notebook显示地图,默认是保存为html文件
  348. world_map.render_notebook()
  349. # 全球新冠肺炎疫情确诊人数排名前10的国家
  350. import seaborn as sns
  351. import matplotlib.pyplot as plt
  352. import pandas as pd
  353. #画布大小
  354. fig=plt.figure(figsize=(10,8))
  355. ax=fig.add_subplot(1,1,1)
  356. #中文字体
  357. plt.rcParams['font.family'] = ['SimHei']
  358. #导入数据
  359. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  360. sns.barplot(x = df_world.iloc[0:11,0].values,y =df_world.iloc[0:11,2].values,palette="rocket")
  361. #y轴刻度标签
  362. ax.set_yticks([5000000,10000000,15000000,20000000,25000000,30000000,35000000])
  363. ax.set_yticklabels(["500万","1000万","1500万","2000万","2500万","3000万","3500万"],fontsize=12)
  364. #标题
  365. plt.title("全球新冠肺炎疫情确诊人数排名前10的国家",fontsize=12)
  366. #y轴标签
  367. plt.ylabel("确 诊 人 数")
  368. plt.show()
  369. import matplotlib.pyplot as plt
  370. #画布大小
  371. fig=plt.figure(figsize=(10,8))
  372. ax=fig.add_subplot(1,1,1)
  373. #中文字体
  374. plt.rcParams['font.family'] = ['SimHei']
  375. #导入数据
  376. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  377. #国家
  378. country = df_world.iloc[0:6,0]
  379. #确诊人数
  380. diagnosis = df_world.iloc[0:6,2]
  381. #治愈人数
  382. cured = df_world.iloc[0:6,3]
  383. x = list(range(len(country)))
  384. #设置间距
  385. total_width, n = 0.5, 2
  386. width = total_width / n
  387. #柱状图1
  388. for i in range(len(x)):
  389. x[i] += width
  390. plt.bar(x, diagnosis, width=width, label='确诊人数', tick_label=country,color='#FF3030' )
  391. #柱状图2
  392. for i in range(len(x)):
  393. x[i] += width
  394. plt.bar(x, cured, width=width, label='治愈人数',color='#32CD32')
  395. #y轴刻度标签
  396. ax.set_yticks([5000000,10000000,15000000,20000000,25000000,30000000,35000000])
  397. ax.set_yticklabels(["500万","1000万","1500万","2000万","2500万","3000万","3500万"],fontsize=12)
  398. #标题
  399. plt.title("全球新冠肺炎疫情确诊人数前5国家的确诊人数、治愈人数")
  400. #y轴标签
  401. plt.ylabel("确 诊 人 数",fontsize=12)
  402. #图例
  403. plt.legend(loc='upper right',fontsize=12)
  404. plt.show()
  405. import pandas as pd
  406. import matplotlib.pyplot as plt
  407. # 创建画布
  408. fig=plt.figure(figsize=(10,8))
  409. ax=fig.add_subplot(1,1,1)
  410. #中文字体
  411. plt.rcParams['font.family'] = ['SimHei']
  412. #导入数据
  413. df_world = pd.read_csv("各国家的新冠肺炎疫情数据.csv")
  414. df_world['治愈率'] = df_world['治愈']/df_world['累计确诊']
  415. df_world['死亡率'] = df_world['死亡']/df_world['累计确诊']
  416. plt.plot(df_world.iloc[0:16,0],df_world.iloc[0:16,5],label="治愈率")
  417. plt.plot(df_world.iloc[0:16,0],df_world.iloc[0:16,6],label="死亡率")
  418. #y轴刻度标签
  419. ax.set_yticks([0.05,0.2,0.4,0.6,0.8,1.0])
  420. ax.set_yticklabels(["5 %","20 %","40 %","60 %","80 %","100 %"],fontsize=12)
  421. plt.legend(loc='center right',fontsize=12)
  422. plt.title("全球新冠肺炎疫情确诊人数前15国家的治愈率与死亡率")
  423. plt.grid()
  424. plt.show()

总结

因为这次的主题爬虫爬的是最基础的网站,所以进行的还是比较顺利的。在数据的可视化上,除了用pyecharts库的Map模块将数据显示到地图上花了一些功夫,其他都还好,达到了我的预期效果。

因为现在很多网站是用JSON存储数据或者用JS动态加载数据的,所以之后会多学习这些方面的知识。

原文链接:http://www.cnblogs.com/yusama/p/14829396.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号