快速构建热力分布图

百度热力图,相信大家每天都会刷上好多遍。带领大家使用Python可视化构来建自己的热力分布图。

在这里插入图片描述

一、使用爬虫获取信息数据

爬取的数据网站是:丁香园数据网(打击权健,质量保证)
地址:https://3g.dxy.cn/newh5/view/pneumonia_peopleapp

from urllib.request import urlopen
from bs4 import BeautifulSoup
#使用urlopen读取网页内容。
html = urlopen(
   "https://3g.dxy.cn/newh5/view/pneumonia_peopleapp"
).read().decode('utf-8')
#BeautifulSoup用来解析和提取HTML/XML的数据
bs= BeautifulSoup(html,"html.parser")
#bs.body

在这里插入图片描述

二、使用对信息数据做处理

str1=bs.body.text  
#根据字符串对应数据的关键字,进行数据截取
str1=str1[str1.find('window.getAreaStat = '):]    
#截取从“[{” 到 “}catch” 间的字符串
data = str1[str1.find('[{'):str1.find('}catch')]

data_list=eval(data)  #字符串转字典数组
new_dict={}   #省份现存数
for province in data_list:
    #循环遍历,将省份现存数放入new_dict字典中,处理不合格的省份名称replace
    new_dict[province['provinceName'].replace('自治区','').replace('回族','')
             .replace('维吾尔','').replace('省','').replace('市','').replace('壮族','')] \
              = province['currentConfirmedCount']
#print(new_dict)

在这里插入图片描述

三、绘制中国热力图并保存

from pyecharts.charts import Map,Geo
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import pandas as pd
import re
#将字典中的省份以列表的形式取出来
province=list(new_dict.keys())   
values=list(new_dict.values())  
list1 = [[province[i],values[i]] for i in range(len(province))] #列表生成
map_1 = Map()   
map_1.set_global_opts(
    title_opts=opts.TitleOpts(title="中国疫情状况",pos_left="left"),
    visualmap_opts=opts.VisualMapOpts(
    is_piecewise=True,  # 设置是否为分段显示
    # 自定义范围,文字,样式。
    pieces=[
    {"max":0,"label":"0人","color":"#FFFFFF"},
    {"min":1,"max":9,"label":"1-10人","color":"#FFEBCD"},
    {"min":10,"max":99,"label":"10-99人","color":"#FFA07A"},
    {"min":100,"max":499,"label":"100-499人","color":"#FF4040"},
    {"min":500,"max":999,"label":"500-999人","color":"#CD2626"},
    {"min":1000,"max":10000,"label":"1000-10000人","color":"#B22222"},
    {'min':10000,"label":">10000人","color":"#8B1A1A"}  
    ] )
)
#is_map_symbol_show设置是否显示地图上的小红点
map_1.add("中国现存热力数据", list1, maptype="china", is_map_symbol_show=False)
map_name = "中国现存热力分布图.html"
map_1.render("./" + map_name)
map_1.render_notebook()

在这里插入图片描述

四、使用谷歌浏览器自动化展示;

from selenium import webdriver
browser = webdriver.Chrome('./Chromedriver')
browser.get('file:///Users/dinglibin/AITraining/基于Python的数据分析/'+ map_name)

在这里插入图片描述

五、绘制世界热力图并展示

html = urlopen(
   "https://3g.dxy.cn/newh5/view/pneumonia_peopleapp"
).read().decode('utf-8')
#获取网站源
bs= BeautifulSoup(html,"html.parser")
# 热力数据
str1 = bs.body.text
info = re.findall(r'try(.*?)catch',str1)
# 全球热力数据
world = info[0]
world = world.replace(' { window.getListByCountryTypeService2true = ','')[:-1]
# 数据转换为 python 对象
world_list =json.loads(world) 
# 中英文转换
plt.rcParams['font.sans-serif'] = ['SimHei']
# 保存数据
data = pd.read_csv('./world_info.csv')
country = list(data['英文名'])
value = list(data['当前热力'])
pieces=[
{"max":0,"label":"0人","color":"#FFFFFF"},
{"min":1,"max":9,"label":"1-9人","color":"#FFEBCD"},
{"min":10,"max":99,"label":"10-99人","color":"#FFA07A"},
{"min":100,"max":499,"label":"100-499人","color":"#FF7F50"},
{"min":500,"max":999,"label":"500-999人","color":"#CD4F39"},
{'min':1000,"max":10000,"label":"1000-10000人","color":"#CD3333"},
{'min':10000,"label":">10000人","color":"#8B0000"}  
]
#绘制地图
map1 = Map()
map1.set_global_opts(
    title_opts=opts.TitleOpts(title="全球热力状况",pos_left="left"),
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,
        pieces = pieces
    )
)
map1.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
map1.add('全球现存热力数据',[list(z) for z in zip(country,value)],
         maptype='world',is_map_symbol_show=False,label_opts=opts.LabelOpts(is_show=False))
map1.render_notebook()
# map1_name = "全球现存热力分布图.html"
# map1.render("./" + map1_name)
# browser = webdriver.Chrome('./Chromedriver')
# browser.get('file:///Users/dinglibin/AITraining/基于Python的数据分析/'+ map1_name)

在这里插入图片描述

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值