1.100000_full.json (地理位置数据集,用于绘制地理边界)
2.china_coordinates.csv (全国城市位置数据集,用于定位每个城市位置)
3.DXYArea.csv (2020-2-9全国新冠数据集)
数据集下载链接:https://download.csdn.net/download/Cristiano272/12351183
import numpy as np
import pandas as pd
import warnings
import folium
import webbrowser as wb
def df():
df = pd.read_csv("data/DXYArea.csv")
# df.info()
# print(df.head())
return df
def coord():
coord = pd.read_csv('data/china_coordinates.csv', names=['postcode', 'city', 'lon', 'lat'])
# print(coord.head())
return coord
def pc():
pc = df.groupby('provinceName').province_confirmedCount.agg('max')
# print(province_confirmedCount)
return pc
def merge(coord, pc):
coord['confirm'] = coord['city']
coord['confirm'] = coord['confirm'].map(pc.to_dict())
# print(coord.head())
return coord
def map(df_prov):
# 绘制地图:location 地图中心位置坐标(纬度lat,经度lon), zoom_start 地图放大系数
map = folium.Map(location=[39.929986, 116.395645], zoom_start=4)
# 取对数解决色彩条不均衡问题
df_prov['logconfirm'] = np.log(df_prov['confirm'])
folium.Choropleth(
name='热图', # 名称
geo_data=open('data/100000_full.json', 'r', encoding='UTF-8').read(), # 数据文件
data=df_prov.set_index(df_prov.city), # 数据集
columns=['city', 'logconfirm'], # 列名称
key_on='feature.properties.name', # 匹配geo_data 中的属性值
fill_color='Reds', # 色彩配置
# bins = [0, 100, 500, 1000, 10000, 30000] # 数据区间范围
).add_to(map)
# 将人数增加到地图上
for d in df_prov.itertuples():
folium.Marker(
location=[d.lat, d.lon],
icon=folium.Icon(color='red') if d.confirm > 1000 else (
folium.Icon(color='orange') if d.confirm > 100 else folium.Icon(color='blue')),
tooltip="{} 确诊 {} 例".format(d.city, int(d.confirm))
).add_to(map)
# 存入html文件里,并用浏览器打开
map.save('map/map.html')
wb.get("D:/Google/Chrome/Application/chrome.exe %s").open('map/map.html') # wb.get(浏览器地址)
# 导入pandas等需要的库
import numpy as np
import pandas as pd
import warnings
import folium
import webbrowser as wb
def df():
# 读取数据,查看基本情况
df = pd.read_csv("data/DXYArea.csv")
# df.info()
# print(df.head())
return df
def coord():
# 读取城市坐标数据
coord = pd.read_csv('data/china_coordinates.csv', names=['postcode', 'city', 'lon', 'lat'])
# print(coord.head())
return coord
def pc():
# 按省份统计人数
pc = df.groupby('provinceName').province_confirmedCount.agg('max')
# print(province_confirmedCount)
return pc
def merge(coord, pc):
# 合并城市坐标数据 与 省份数据
coord['confirm'] = coord['city']
coord['confirm'] = coord['confirm'].map(pc.to_dict())
# print(coord.head())
return coord
def map(df_prov):
# 绘制地图:location 地图中心位置坐标(纬度lat,经度lon), zoom_start 地图放大系数
map = folium.Map(location=[39.929986, 116.395645], zoom_start=4)
# 取对数解决色彩条不均衡问题
df_prov['logconfirm'] = np.log(df_prov['confirm'])
folium.Choropleth(
name='热图', # 名称
geo_data=open('data/100000_full.json', 'r', encoding='UTF-8').read(), # 数据文件
data=df_prov.set_index(df_prov.city), # 数据集
columns=['city', 'logconfirm'], # 列名称
key_on='feature.properties.name', # 匹配geo_data 中的属性值
fill_color='Reds', # 色彩配置
# bins = [0, 100, 500, 1000, 10000, 30000] # 数据区间范围
).add_to(map)
# 将人数增加到地图上
for d in df_prov.itertuples():
folium.Marker(
location=[d.lat, d.lon],
icon=folium.Icon(color='red') if d.confirm > 1000 else (
folium.Icon(color='orange') if d.confirm > 100 else folium.Icon(color='blue')),
tooltip="{} 确诊 {} 例".format(d.city, int(d.confirm))
).add_to(map)
# 存入html文件里,并用浏览器打开
map.save('map/map.html')
wb.get("D:/Google/Chrome/Application/chrome.exe %s").open('map/map.html') # wb.get(浏览器地址)
if __name__ == "__main__":
# 忽略警告信息
warnings.filterwarnings('ignore')
df = df()
coord = coord()
province_confirmedCount = pc()
coord = merge(coord, province_confirmedCount)
df_prov = coord.dropna()
# print(df_prov)
map(df_prov)