以下是运行的截图
1,中国疫情地图主页 (带跳转和时间轴)
2,中国3D地图(动态)
3,世界疫情地图(带时间轴)
4,世界3D地图(动态)
5,跳转到省的地图(这里随便举两个例子)
是一个flask框架构成的整体,数据来源是网易的疫情数据,之前也在服务器上部署过,总的代码量大概在一千五百行左右,不加一些辅助性的csv文件,因为是第一次写,所以也不是很了解如何上传完整结构的代码,后期等熟练了就把代码也整上,先贴一部分代码把,现在先往gitee上存。有需要代码的可以联系我。
gitee链接:这里
代码
1,爬虫部分,一次性爬取多个数据
import requests
import pandas as pd
import time
url = 'https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=331570116174'
os_url = 'https://c.m.163.com/ug/api/wuhan/app/data/oversea-total?t=165805417706'
headers = {
# 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49'
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0'
}
response = requests.get(url,headers=headers)
os_response = requests.get(url=os_url,headers=headers)
def save_data(data,name):
file_name = name+'_'+time.strftime('%Y_%m_%d',time.localtime(time.time()))+'.csv'
data.to_csv(file_name,index=None,encoding='utf_8_sig')
print(file_name+'保存成功')
def get_data(data,table_name,*args):
heads = pd.DataFrame(data)[list(args)]
today = pd.DataFrame([i['today'] for i in data])
total = pd.DataFrame([i['total'] for i in data])
today.columns = [f"today_{i}" for i in today.columns]
total.columns = [f"total_{i}" for i in total.columns]
table_name = pd.concat([heads, today, total],axis = 1)
return table_name
def history_data(name,u_name,table_name):
name_id = name[['name', 'id']].values.tolist()
urls = [f"https://c.m.163.com/ug/api/wuhan/app/data/list-by-area-code?areaCode={i[1]}&" for i in name_id]
for index, item in enumerate(urls):
response = requests.get(item, headers=headers)
data = response.json()['data']['list']
concat_data = get_data(data, 'concat_data', 'date')
concat_data.insert(1, u_name, name_id[index][0])
if index == 0:
table_name = concat_data
else:
table_name = pd.concat([table_name, concat_data], axis=0)
print(f"{name_id[index][0]}数据抓取完成,共获取到{concat_data.shape[0]}条数据")
return table_name
#中国实时数据
china_total_now =pd.DataFrame(response.json()['data']['chinaTotal'])
china_total_now['lastUpdateTime'] = response.json()['data']['lastUpdateTime']
save_data(china_total_now,'china_total_now')
#世界实时数据
world_total_now = pd.DataFrame(os_response.json()['data'])
save_data(world_total_now,'world_total_now')
#省实时数据
prov_d = response.json()['data']['areaTree'][2]['children']
china_all_provinces_data_now = get_data(prov_d,'china_all_provinces_data_now',*['id','name','lastUpdateTime'])
save_data(china_all_provinces_data_now,'china_all_provinces_data_now')
#世界数据
country_d = response.json()['data']['areaTree']
world_all_country_data_now = get_data(country_d,'world_all_country_data_now',*['id','name','lastUpdateTime'])
save_data(world_all_country_data_now,'world_all_country_data_now')
#市实时数据
for z,j in enumerate(response.json()['data']['areaTree'][2]['children']):
head = pd.DataFrame(j['children'])[['id','name','lastUpdateTime']]
head['provinces'] = response.json()['data']['areaTree'][2]['children'][z]['name']
today = pd.DataFrame([i['today'] for i in j['children']])
total = pd.DataFrame([i['total'] for i in j['children']])
today.columns = [f"today_{i}" for i in today.columns]
total.columns = [f"total_{i}" for i in total.columns]
cat_table = pd.concat([head, today, total],axis = 1)
if z == 0:
all_cities_data = cat_table
else:
all_cities_data = pd.concat([all_cities_data,cat_table],axis =0 )
save_data(all_cities_data,'all_cities_data')
#中国历史数据
china_history_data = response.json()['data']['chinaDayList']
china_history_datas = get_data(china_history_data,'china_history_datas',*['date'])
save_data(china_history_datas,'china_history_datas')
#中国各省历史数据
china_all_provinces_history_data = history_data(china_all_provinces_data_now,'province_name','china_all_provinces_history_data')
save_data(china_all_provinces_history_data,'china_all_provinces_history_data')
#世界各国历史数据
world_all_country_history_data = history_data(world_all_country_data_now,'country_name','world_all_country_history_data')
save_data(world_all_country_history_data,'world_all_country_history_data')
2,绘制中国地图(附加各种表格和时间轴)
import pandas as pd # 导入数据分析模块
import numpy as np # 导入科学计算模块
from pyecharts.charts import Bar, Map, Line, Pie, Grid, Timeline, WordCloud, Map3D, MapGlobe # 导入条形图,地图,折线图,玫瑰图 ,grid并行组图组件
from pyecharts import options as opts # 导入配置项模块
from pyecharts.globals import ThemeType # 导入主题模块
####################################################################################
data = pd.read_csv('china_all_provinces_history_data_2022_09_16.csv') # 读取数据,
data['date'] = pd.to_datetime(data['date']) # 将日期这一列数据,设置为datatime64[ns]格式
data.set_index('date',inplace=True) # 将日期设置为索引
date_list = pd.DataFrame(pd.date_range('2022-07-01','2022-09-14',freq='1D'))
date_list = date_list[0].apply(lambda x:x.strftime('%Y-%m-%d'))
data_list_total = {}
data_list_today = {}
for i in date_list:
data_list_total[i] = data.loc[i,['province_name','total_confirm']].sort_values(by='total_confirm').values.tolist()[::-1]
data_list_today[i] = data.loc[i, ['province_name', 'today_confirm']].values.tolist()[::-1]
# data_list_today['2021-07-24'].append(['青海',0])#补充数据,未爬到的数据
# data_list_today['2021-07-24'].append(['新疆',1])
# data_list_today['2021-07-24'].append(['西藏',0])
# data_list_today['2021-08-08'].append(['青海',0])
# data_list_today['2022-03-21'].append(['青海',0])
# data_list_today['2022-05-05'].append(['海南',0])
#
# data_list_total['2021-07-24'].append(['青海',18])
# data_list_total['2021-07-24'].append(['新疆',0])
# data_list_total['2021-07-24'].append(['西藏',1])
# data_list_total['2021-08-08'].append(['青海',18])
# data_list_total['2022-03-21'].append(['青海',18])
# data_list_total['2022-05-05'].append(['海南',288])
###########################################################################################
data3 = pd.read_csv('world_all_country_history_data_2022_09_16.csv')
############################################################################################
data4 = data3[data3['country_name'] == '中国']
cn_data = data4.copy()
cn_data['date'] = pd.to_datetime(cn_data['date']) # 将日期这一列数据,设置为datatime64[ns]格式
cn_data.set_index('date',inplace=True) # 将日期设置为索引
date_list = pd.DataFrame(pd.date_range('2022-07-01','2022-09-14',freq='1D'))
date_list = date_list[0].apply(lambda x:x.strftime('%Y-%m-%d'))
cn_data_list = [[date,cn_data.loc[date,'total_confirm']] for date in date_list]
cnh_data_list = [[date,cn_data.loc[date,'total_heal']] for date in date_list]
cnd_data_list = [[date,cn_data.loc[date,'total_dead']] for date in date_list]
#气泡数据准备
marker_data = []
marker_data_h = []
marker_data_d = []
for i,j in enumerate(date_list):
md_data = [0] * len(cn_data_list)
mdh_data = [0] * len(cnh_data_list)
mdd_data = [0] * len(cnd_data_list)
md_data[i] = int(dict(cn_data_list)[j])
mdh_data[i] = int(dict(cnh_data_list)[j])
mdd_data[i] = int(dict(cnd_data_list)[j])
marker_data.append(md_data)
marker_data_h.append(mdh_data)
marker_data_d.append(mdd_data)
def draw_mix(data,map_name,data_bar_today,data_bar_total,data_pie,data_map_today,data_map_total,type,line1,market1,line2,market2,line3,market3,data_word):
t1 = Timeline(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='1536px',height='700px'))
for z, date in enumerate(data):
piecesC = [
{"min": 10000, 'color': '#7f1100'},
{"min": 1000, "max": 9999, 'color': '#bd1316'},
{"min": 500, "max": 999, 'color': '#e64b45'},
{"min": 100, "max": 499, 'color': '#ff8c71'},
{"min": 1, "max": 99, 'color': '#fdd2a0'},
{"max": 1}
]
# 条形图
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis([i[0] for i in data_bar_today[date][2:]])
.add_yaxis('新增确诊', [i[1] for i in data_bar_today[date]][2:])
.add_yaxis('累计确诊', [i[1] for i in data_bar_total[date]][2:])
.set_global_opts(title_opts=opts.TitleOpts(title=map_name + '累计确诊人数条形图',
pos_left='7%', pos_top='1.5%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),
),
legend_opts=opts.LegendOpts(pos_top='4.6%', pos_left='6.5%', is_show=True,
textstyle_opts=opts.TextStyleOpts(color='white')),
datazoom_opts=opts.DataZoomOpts(is_show=True, range_start=0, range_end=20, pos_top='43%', ),
xaxis_opts=opts.AxisOpts(name='',
type_='category', # 轴的类型
name_location='center', # 坐标轴轴名称的位置
name_gap=10, # 坐标轴轴名称距离轴线的距离
axislabel_opts=opts.LabelOpts(color='white', is_show=True),
# 坐标轴标签的颜色
axistick_opts=opts.AxisTickOpts(is_show=True, # 是否显示坐标轴刻度线
is_inside=True, # 刻度线是否朝内
# 坐标轴刻度线的样式
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],
# 坐标轴的箭头的方向
# 坐标轴轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'))
),
yaxis_opts=opts.AxisOpts(name='人数', # x轴的名称
type_='value', # 轴的类型
name_location='center', # 坐标轴轴名称的位置
name_gap=10, # 坐标轴轴名称距离轴线的距离
axislabel_opts=opts.LabelOpts(color='cyan', is_show=False),
# 坐标轴标签的颜色
axistick_opts=opts.AxisTickOpts(is_show=True, # 是否显示坐标轴刻度线
is_inside=True, # 刻度线是否朝内
# 坐标轴刻度线的样式
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],
# 坐标轴的箭头的方向
# 坐标轴轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'))
),
# ----- 视觉映射配置项目
visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
is_show=False,
range_text=['Highe', 'Low'],
textstyle_opts=opts.TextStyleOpts(color='cyan'),
# 设置分段颜色
max_=100000, # 最大值
pos_right='1%',
pos_top='center',
pieces=piecesC,
),
)
)
# 玫瑰图
pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add('', data_pie[date],
radius=['40', '100'],
rosetype='area',
center=['85.8%', '71%'],
label_opts=opts.LabelOpts(formatter="{b}:{c}人"),
)
.set_global_opts(title_opts=opts.TitleOpts(title=map_name + '累计确诊玫瑰图',
pos_right='10%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),
pos_top='49%'),
legend_opts=opts.LegendOpts(is_show=False))
)
# 地图
map_ = (Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
.add('today_confirm', data_map_today[date], type,
label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
font_family='SimHei'), is_map_symbol_show=False)
.add('total_confirm', data_map_total[date], type,
label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
font_family='SimHei'), is_map_symbol_show=False)
.set_global_opts(title_opts=opts.TitleOpts(map_name + '疫情地图', pos_left='center',
title_textstyle_opts=opts.TextStyleOpts(font_size=20, ),
subtitle_textstyle_opts=opts.TextStyleOpts(font_size=18,
color='white'),
pos_top='1%'),
legend_opts=opts.LegendOpts(pos_top='7%',
textstyle_opts=opts.TextStyleOpts(color='white'),
is_show=True,selected_mode=''),
visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=piecesC, pos_left='5%',
pos_top='center',
textstyle_opts=opts.TextStyleOpts(color='white')),
)
)
#词云
couldword = (
WordCloud(init_opts=opts.InitOpts(theme=ThemeType.CHALK,))
.add('', data_pair=data_word[date], word_size_range=[20, 60],
textstyle_opts=opts.TextStyleOpts(font_family='Microsoft YaHei', font_weight='bold', ),
pos_left='70%', pos_right='1%', pos_top='1%', pos_bottom='63%', height='335px', width='500px',
shape='square')
.set_global_opts(title_opts=opts.TitleOpts(title="疫情热点",
title_textstyle_opts=opts.TextStyleOpts(font_size=15),pos_right='12%',
pos_top='2.5%'))
)
line = (Line(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
.add_xaxis([i[0] for i in line1])
.add_yaxis('总计确诊', [int(i[1]) for i in line1],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
)
.add_yaxis('总计确诊', market1[z], # 气泡系列数据,
label_opts=opts.LabelOpts(is_show=False),
symbol_size=0,
linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')])
)
.add_yaxis('累计治愈', [int(i[1]) for i in line2],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
)
.add_yaxis('累计治愈', market2[z], # 气泡系列数据,
label_opts=opts.LabelOpts(is_show=False),
symbol_size=0,
linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')])
)
.add_yaxis('累计死亡', [int(i[1]) for i in line3],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
)
.add_yaxis('累计死亡', market3[z], # 气泡系列数据,
label_opts=opts.LabelOpts(is_show=False),
symbol_size=0,
linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')])
)
.set_global_opts(
title_opts=opts.TitleOpts(title=map_name+'时序折线图',
pos_left='8%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),pos_top='49%'),
xaxis_opts=opts.AxisOpts(name='日期',
name_gap=20,
name_textstyle_opts=opts.TextStyleOpts(color='cyan',
font_size=10),
axislabel_opts=opts.LabelOpts(color='cyan'),
axisline_opts=opts.AxisLineOpts(is_show=True,
symbol=['none', 'arrow'],
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
),
yaxis_opts=opts.AxisOpts(name='人数',
min_=0,
name_location='center',
name_gap=10,
name_textstyle_opts=opts.TextStyleOpts(color='cyan',
),
axislabel_opts=opts.LabelOpts(color='cyan',is_show=False),
axisline_opts=opts.AxisLineOpts(is_show=True,
# 设置轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'),symbol=['none', 'arrow']),
),
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),
axispointer_opts=opts.AxisPointerOpts(is_show=True,
label=opts.LabelOpts(color='black',
font_size=12,
font_family='SimHei')),
legend_opts=opts.LegendOpts(is_show=True,pos_bottom='44%',pos_left='4.5%'),
)
.set_series_opts(linestyle_opts=opts.LineStyleOpts(color='pink',
width=2,
))
)
# pos_left='67%', pos_right='8%', pos_bottom='55%', pos_top='8%'
grid = (Grid(init_opts=opts.InitOpts(theme=ThemeType.CHALK, width='1536px',height='672px'))
.add(bar,
grid_opts=opts.GridOpts(pos_left='2.6%',pos_right='77.6%',pos_top='11.5%',pos_bottom='57%'),
is_control_axis_index=True,
)
.add(line,
grid_opts=opts.GridOpts(pos_left ='2.6%', pos_right = '77.6%', pos_top ='57%', pos_bottom = '10.5%'),
)
.add(pie,
grid_opts=opts.GridOpts()
)
.add(map_,
grid_opts=opts.GridOpts(is_contain_label=True))
.add(couldword,grid_opts=opts.GridOpts())
)
t1.add(grid, f'{date}')
t1.add_schema(play_interval=350,
is_loop_play=False,
orient='horizontal',
pos_left='8%',
pos_bottom='0.8%',
pos_right='10%'
)
t1.render(map_name+'.html')
############################################################################### 数据准备
################################################################################
data = date_list
map_name = '中国'
data_bar_today = data_list_today
data_bar_total = data_list_total
data_pie = data_list_total
data_map_today = data_list_today
data_map_total = data_list_total
type = 'china'
line1 = cn_data_list
market1 = marker_data
line2 = cnh_data_list
market2 = marker_data_h
line3 = cnd_data_list
market3 = marker_data_d
data_word = data_list_today
#
draw_mix(data,map_name,data_bar_today,data_bar_total,data_pie,data_map_today,data_map_total,type,line1,market1,line2,market2,line3,market3,data_word)
################################################################################################################################################
# data = date_list
# map_name = '城市'
# data_bar_today = data_list_today
# data_bar_total = data_list_total
# data_pie = data_list_total
# data_map_today = data_list_today
# data_map_total = data_list_total
# type = 'china-cities'
# line1 = cn_data_list
# market1 = marker_data
# line2 = cnh_data_list
# market2 = marker_data_h
# line3 = cnd_data_list
# market3 = marker_data_d
# data_word = data_list_today
# #
# draw_mix(data,map_name,data_bar_today,data_bar_total,data_pie,data_map_today,data_map_total,type,line1,market1,line2,market2,line3,market3,data_word)
3,处理数据,这里是为了避免出现空白区域,如果没有这一步会出现很多空白区域的。
import requests
import re
import pandas as pd
import time
def save_data(data,name):
file_name = name+'_'+time.strftime('%Y_%m_%d',time.localtime(time.time()))+'.csv'
data.to_csv(file_name,index=None,encoding='utf_8_sig')
print(file_name+'保存成功')
#地图准确数据
dt = requests.get('https://assets.pyecharts.org/assets/maps/china-cities.js')
dt.encoding = 'utf-8'
data_name = re.findall('name:"(.*?)",',dt.text)
data_id = re.findall('id:"(.*?)",',dt.text)
data = [list(i) for i in zip(data_id,data_name)]
#自己的数据
df = pd.read_csv('all_cities_data_2022_07_19.csv')
dataC = df[['id','name','today_confirm','total_confirm','provinces']].values.tolist()
#系统命名匹配
for i in range(len(dataC)):
for j in range(len(data)):
if dataC[i][0] == data[j][0]:
dataC[i][1] = data[j][1]
else:
continue
#删掉自带的州和县和区
for i in range(len(dataC)):
if (dataC[i][1][-1] =='州' or dataC[i][1][-1] =='县' or dataC[i][1][-1] == '区') and len(dataC[i][1])>2:
dataC[i][1] = dataC[i][1].strip('州')
dataC[i][1] = dataC[i][1].strip('县')
dataC[i][1] = dataC[i][1].strip('区')
print(dataC)
# 重新构建csv文件
csv_data = pd.DataFrame({'name':[dataC[i][1] for i in range(len(dataC))],'provinces':[dataC[i][4] for i in range(len(dataC))],
'today_confirm':[dataC[i][2] for i in range(len(dataC))],'total_confirm':[dataC[i][3] for i in range(len(dataC))],})
print(csv_data)
save_data(csv_data,'city-province-data')
#除了地图市的数据
4,绘制3D地图(包含世界和中国的)
import pandas as pd # 导入数据分析模块
import numpy as np # 导入科学计算模块
from pyecharts.charts import Bar, Map, Line, Pie, Grid, Timeline, WordCloud, Map3D, \
MapGlobe # 导入条形图,地图,折线图,玫瑰图 ,grid并行组图组件
from pyecharts import options as opts # 导入配置项模块
from pyecharts.globals import ThemeType # 导入主题模块
def draw_mix(data,map_name,data_bar_today,data_bar_total,data_pie,data_word,data_map_today,data_map_total,type,line1,market1,line2,market2,line3,market3,):
t1 = Timeline(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='1536px',height='672px'))
for z, date in enumerate(data):
pieces = [
{"min": 10000000},
{"min": 1000000, "max": 9999999},
{"min": 100000, "max": 999999},
{"min": 10000, "max": 99999},
{"min": 1000, "max": 9999},
{"min": 0, "max": 999},
]
# 条形图
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis([i[0] for i in data_bar_today[date][:30]])
.add_yaxis('新增确诊', [i[1] for i in data_bar_today[date]][:30])
.add_yaxis('累计确诊', [i[1] for i in data_bar_total[date]][:30])
.set_global_opts(title_opts=opts.TitleOpts(title=map_name + '累计确诊人数条形图',
pos_left='7%', pos_top='1.5%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),
),
legend_opts=opts.LegendOpts(pos_top='4.6%', pos_left='6.5%', is_show=True,
textstyle_opts=opts.TextStyleOpts(color='white')),
datazoom_opts=opts.DataZoomOpts(is_show=True, range_start=0, range_end=20, pos_top='43%', ),
xaxis_opts=opts.AxisOpts(name='',
type_='category', # 轴的类型
name_location='center', # 坐标轴轴名称的位置
name_gap=10, # 坐标轴轴名称距离轴线的距离
axislabel_opts=opts.LabelOpts(color='white', is_show=True),
# 坐标轴标签的颜色
axistick_opts=opts.AxisTickOpts(is_show=True, # 是否显示坐标轴刻度线
is_inside=True, # 刻度线是否朝内
# 坐标轴刻度线的样式
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],
# 坐标轴的箭头的方向
# 坐标轴轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'))
),
yaxis_opts=opts.AxisOpts(name='人数', # x轴的名称
type_='value', # 轴的类型
name_location='center', # 坐标轴轴名称的位置
name_gap=10, # 坐标轴轴名称距离轴线的距离
axislabel_opts=opts.LabelOpts(color='cyan', is_show=False),
# 坐标轴标签的颜色
axistick_opts=opts.AxisTickOpts(is_show=True, # 是否显示坐标轴刻度线
is_inside=True, # 刻度线是否朝内
# 坐标轴刻度线的样式
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],
# 坐标轴的箭头的方向
# 坐标轴轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'))
),
# ----- 视觉映射配置项目
visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
is_show=False,
range_text=['Highe', 'Low'],
textstyle_opts=opts.TextStyleOpts(color='cyan'),
# 设置分段颜色
max_=1000000, # 最大值
pos_right='1%',
pos_top='center',
pieces=pieces,
),
)
)
# 玫瑰图
pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add('', data_pie[date][:13],
radius=['40', '83'],
rosetype='area',
center=['19.3%', '73%'],
label_opts=opts.LabelOpts(formatter="{b}:{c}人"),
)
.set_global_opts(title_opts=opts.TitleOpts(title=map_name + '累计确诊玫瑰图',
pos_left='14.5%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),
pos_top='53%'),
legend_opts=opts.LegendOpts(is_show=False))
)
# 地图
name = pd.read_csv('translate.csv',encoding='utf-8')
name_C ={i:j for i,j in zip([a for a in name['English']],[b for b in name['chinese']])}
map_ = (Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='400px',height='400px'))
.add('today_confirm', data_map_today[date], type,
label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
font_family='SimHei'), is_map_symbol_show=False,name_map=name_C,zoom=0.73,center=[17,8])
.add('total_confirm', data_map_total[date], type,
label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
font_family='SimHei'), is_map_symbol_show=False,name_map=name_C)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(map_name + '疫情地图', pos_left='center',
title_textstyle_opts=opts.TextStyleOpts(font_size=20, ),
subtitle_textstyle_opts=opts.TextStyleOpts(font_size=16,
color='white'),
pos_top='2%'),
legend_opts=opts.LegendOpts(pos_top='7%',
textstyle_opts=opts.TextStyleOpts(color='white'),
is_show=True,selected_mode='single'),
visualmap_opts=opts.VisualMapOpts(max_=1000000,is_piecewise=True, pieces=pieces, pos_left='5%',
pos_top='center',textstyle_opts=opts.TextStyleOpts(color='white')),
)
)
#词云shape='square',
couldword = (
WordCloud(init_opts=opts.InitOpts(theme=ThemeType.CHALK,))
.add('', data_pair=data_word[date], word_size_range=[20, 45],
textstyle_opts=opts.TextStyleOpts(font_family='Microsoft YaHei', font_weight='bold', ),
pos_left='73%', pos_right='3%', pos_top='10%', pos_bottom='75%', height='240px', width='370px',)
.set_global_opts(title_opts=opts.TitleOpts(title="疫情热点",
title_textstyle_opts=opts.TextStyleOpts(font_size=15),pos_right='13%',
pos_top='4%'))
)
line = (Line(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
.add_xaxis([i[0] for i in line1])
.add_yaxis('总计确诊', [int(i[1]) for i in line1],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
)
.add_yaxis('总计确诊', market1[z], # 气泡系列数据,
label_opts=opts.LabelOpts(is_show=False),
symbol_size=0,
linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')])
)
.add_yaxis('累计治愈', [int(i[1]) for i in line2],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
)
.add_yaxis('累计治愈', market2[z], # 气泡系列数据,
label_opts=opts.LabelOpts(is_show=False),
symbol_size=0,
linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')])
)
.add_yaxis('累计死亡', [int(i[1]) for i in line3],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
)
.add_yaxis('累计死亡', market3[z], # 气泡系列数据,
label_opts=opts.LabelOpts(is_show=False),
symbol_size=0,
linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')])
)
.set_global_opts(
title_opts=opts.TitleOpts(title=map_name+'时序折线图',
pos_right='11%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),pos_top='49%'),
xaxis_opts=opts.AxisOpts(name='日期',
name_gap=20,
name_textstyle_opts=opts.TextStyleOpts(color='cyan',
font_size=10),
axislabel_opts=opts.LabelOpts(color='cyan'),
axisline_opts=opts.AxisLineOpts(is_show=True,
symbol=['none', 'arrow'],
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
),
yaxis_opts=opts.AxisOpts(name='人数',
min_=0,
name_location='center',
name_gap=10,
name_textstyle_opts=opts.TextStyleOpts(color='cyan',
),
axislabel_opts=opts.LabelOpts(color='cyan',is_show=False),
axisline_opts=opts.AxisLineOpts(is_show=True,
# 设置轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'),symbol=['none', 'arrow']),
),
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),
axispointer_opts=opts.AxisPointerOpts(is_show=True,
label=opts.LabelOpts(color='black',
font_size=12,
font_family='SimHei')),
legend_opts=opts.LegendOpts(is_show=True,pos_bottom='44%',pos_right='6%'),
)
.set_series_opts(linestyle_opts=opts.LineStyleOpts(color='pink',
width=2,
))
)
# pos_left='67%', pos_right='8%', pos_bottom='55%', pos_top='8%'
grid = (Grid(init_opts=opts.InitOpts(theme=ThemeType.CHALK, width='1536px',height='672px'))
.add(bar,
grid_opts=opts.GridOpts(pos_left='2.6%',pos_right='77.6%',pos_top='11.5%',pos_bottom='57%'),
is_control_axis_index=True,
)
.add(line,
grid_opts=opts.GridOpts(pos_left ='75.2%', pos_right = '4%', pos_top ='57%', pos_bottom = '10.5%'),
)
.add(pie,
grid_opts=opts.GridOpts()
)
.add(map_,
grid_opts=opts.GridOpts(is_contain_label=True))
.add(couldword,grid_opts=opts.GridOpts())
)
t1.add(grid, f'{date}')
t1.add_schema(play_interval=1000,
is_loop_play=False,
orient='horizontal',
pos_left='8%',
pos_bottom='0.8%',
pos_right='10%'
)
t1.render(map_name+'.html')
data = pd.read_csv('world_all_country_history_data_2022_07_19.csv')
data_m = pd.read_csv('xiugai_2022_07_27.csv')
data['date'] = pd.to_datetime(data['date'])
data_m['date'] = pd.to_datetime((data_m['date']))
data_m.set_index('date',inplace=True)
data.set_index('date',inplace=True)
#对整体时间进行处理
date_list = pd.DataFrame(pd.date_range('2021-01-1','2022-07-01',freq='7D'))
date_list = date_list[0].apply(lambda x:x.strftime('%Y-%m-%d'))
data_list_total = {}
data_list_today = {}
data_list_total_num = {}
data_list_dead_num = {}
data_list_heal_num = {}
for i in date_list:
data_list_total[i] = data_m.loc[i, ['country_name', 'total_confirm']].sort_values(by='total_confirm').values.tolist()[::-1]
data_list_today[i] = data_m.loc[i, ['country_name', 'today_confirm']].values.tolist()[::-1]
data_list_total_num[i] = data.loc[i, ['total_confirm']].sum().values.tolist()
data_list_dead_num[i] = data.loc[i, ['total_dead']].sum().values.tolist()
data_list_heal_num[i] = data.loc[i, ['total_heal']].sum().values.tolist()
#数据准备
key1 = [ i for i in data_list_heal_num.keys()]
value1 = [ i[0] for i in data_list_heal_num.values()]
data_list_heal_num_ = [[key1[i],value1[i]] for i in range(len(key1))]
key2 = [ i for i in data_list_dead_num.keys()]
value2 = [ i[0] for i in data_list_dead_num.values()]
data_list_dead_num_ = [[key2[i],value2[i]] for i in range(len(key2))]
key3 = [ i for i in data_list_heal_num.keys()]
value3 = [ i[0] for i in data_list_heal_num.values()]
data_list_total_num_ = [[key3[i],value3[i]] for i in range(len(key3))]
#气泡数据准备
marker_data = []
marker_data_h = []
marker_data_d = []
for i,j in enumerate(date_list):
md_data = [0] * len(data_list_total_num_)
mdh_data = [0] * len(data_list_heal_num_)
mdd_data = [0] * len(data_list_dead_num_)
md_data[i] = int(dict(data_list_total_num_)[j])
mdh_data[i] = int(dict(data_list_heal_num_)[j])
mdd_data[i] = int(dict(data_list_dead_num_)[j])
marker_data.append(md_data)
marker_data_h.append(mdh_data)
marker_data_d.append(mdd_data)
line1 = data_list_total_num_
market1 = marker_data
line2 = data_list_heal_num_
market2 = marker_data_h
line3 = data_list_dead_num_
market3 = marker_data_d
draw_mix(data=date_list,map_name='世界',data_bar_today=data_list_today,data_bar_total=data_list_total,data_pie=data_list_total,data_word=data_list_today,
data_map_today=data_list_today,data_map_total=data_list_total,type='world',line1=data_list_total_num_,market1=marker_data,
line2=data_list_heal_num_,market2=marker_data_h,line3=data_list_dead_num_,market3=marker_data_d)
5,绘制省份地图,全部省份
from time import strftime
from pyecharts.charts import Bar, Grid, Map, Line, Pie, MapGlobe, Timeline, WordCloud
from pyecharts.charts.composite_charts import timeline
from pyecharts.globals import ThemeType
from pyecharts import options as opts
import pandas as pd
import re
def draw_map_total(map_name,data_bar_today,data_bar_total,data_line_total,data_pie,data_map_total,data_map_today,type,data_word):
pieces = [
{"min": 10000000},
{"min": 1000000, "max": 9999999},
{"min": 100000, "max": 999999},
{"min": 10000, "max": 99999},
{"min": 1000, "max": 9999},
{"min": 0, "max": 999},
]
piecesC = [
{"min": 10000, 'color': '#7f1100'},
{"min": 1000, "max": 9999, 'color': '#bd1316'},
{"min": 500, "max": 999, 'color': '#e64b45'},
{"min": 100, "max": 499, 'color': '#ff8c71'},
{"min": 1, "max": 99, 'color': '#fdd2a0'},
{"max": 0}
]
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis([i[0] for i in data_bar_today][2:])
.add_yaxis('新增确诊',[i[1] for i in data_bar_today][2:])
.add_yaxis('累计确诊',[i[1] for i in data_bar_total][2:])
.set_global_opts(title_opts=opts.TitleOpts(title=map_name+'累计确诊人数条形图',
pos_left='6.2%',pos_top='2.2%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),
),
legend_opts=opts.LegendOpts(pos_top='5.5%', pos_left='6%', is_show=True,
textstyle_opts=opts.TextStyleOpts(color='white')),
datazoom_opts=opts.DataZoomOpts(is_show=True,range_start=0,range_end=20,pos_top='45.9%',),
xaxis_opts=opts.AxisOpts(name='',
type_='category', # 轴的类型
name_location='center', # 坐标轴轴名称的位置
name_gap=10, # 坐标轴轴名称距离轴线的距离
axislabel_opts=opts.LabelOpts(color='white',is_show=True), # 坐标轴标签的颜色
axistick_opts=opts.AxisTickOpts(is_show=True, # 是否显示坐标轴刻度线
is_inside=True, # 刻度线是否朝内
# 坐标轴刻度线的样式
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'], # 坐标轴的箭头的方向
# 坐标轴轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'))
),
yaxis_opts=opts.AxisOpts(name='人数', # x轴的名称
type_='value', # 轴的类型
name_location='center', # 坐标轴轴名称的位置
name_gap=10, # 坐标轴轴名称距离轴线的距离
axislabel_opts=opts.LabelOpts(color='cyan',is_show=False), # 坐标轴标签的颜色
axistick_opts=opts.AxisTickOpts(is_show=True, # 是否显示坐标轴刻度线
is_inside=True, # 刻度线是否朝内
# 坐标轴刻度线的样式
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'], # 坐标轴的箭头的方向
# 坐标轴轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'))
),
# ----- 视觉映射配置项目
visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
is_show=False,
range_text=['Highe', 'Low'],
textstyle_opts=opts.TextStyleOpts(color='cyan'),
# 设置分段颜色
max_=10000, # 最大值
pos_right='1%',
pos_top='center',
pieces=piecesC,
),
)
)
line = (Line(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
.add_xaxis([i[0] for i in data_line_total])
.add_yaxis('确诊累计', [i[1] for i in data_line_total],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')]))
.add_yaxis('累计治愈', [i[2] for i in data_line_total],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')]))
.add_yaxis('累计死亡', [i[3] for i in data_line_total],
symbol='circle',
symbol_size=5,
label_opts=opts.LabelOpts(is_show=False),
is_smooth=True,
markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
data=[opts.MarkLineItem(type_='max')]))
.set_global_opts(
title_opts=opts.TitleOpts(title=map_name+'新增确诊人数时序折线图',
pos_left='5%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),pos_top='51%'),
xaxis_opts=opts.AxisOpts(name='日期', # 坐标轴名称
name_gap=20, # 坐标轴名称距离坐标轴的位置
name_textstyle_opts=opts.TextStyleOpts(color='cyan', # 坐标轴名称字体颜色,
font_size=10), # 字体大小
axislabel_opts=opts.LabelOpts(color='cyan'), # 坐标轴标签的颜色
axisline_opts=opts.AxisLineOpts(is_show=True, # 坐标轴轴线配置项目.
symbol=['none', 'arrow'],
# 设置右端箭头
# 设置轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan')),
), # x轴配置项目结束
yaxis_opts=opts.AxisOpts(name='人数', # 坐标轴名称
min_=0,
name_location='center',
name_gap=10,
name_textstyle_opts=opts.TextStyleOpts(color='cyan', # 坐标轴名称字体颜色,
),
axislabel_opts=opts.LabelOpts(color='cyan',is_show=False), # 坐标轴标签的颜色
axisline_opts=opts.AxisLineOpts(is_show=True, # 坐标轴轴线配置项目.
# 设置轴线的颜色
linestyle_opts=opts.LineStyleOpts(
color='cyan'),symbol=['none', 'arrow']),
),
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),
axispointer_opts=opts.AxisPointerOpts(is_show=True,
label=opts.LabelOpts(color='black',
font_size=12,
font_family='SimHei')),
legend_opts=opts.LegendOpts(is_show=True,pos_bottom='42%',pos_left='4.2%'),
)
.set_series_opts(linestyle_opts=opts.LineStyleOpts(color='pink',
width=2,
))
)
name = pd.read_csv('translate.csv', encoding='utf-8')
name_C = {i: j for i, j in zip([a for a in name['English']], [b for b in name['chinese']])}
world_map = (
Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='1400px', height='600px'))
.add('total_confirm', data_map_total, type, is_map_symbol_show=False,
name_map=name_C)
.add('today_confirm', data_map_today, type, is_map_symbol_show=False,
name_map=name_C)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title=map_name+'疫情地图', pos_left='center',
subtitle_textstyle_opts=opts.TextStyleOpts(color='cyan',
font_family='KaiTi',
font_size=16)),
visualmap_opts=opts.VisualMapOpts(max_=1000000, is_piecewise=True, pieces=pieces),
legend_opts=opts.LegendOpts(pos_top='6%', textstyle_opts=opts.TextStyleOpts(color='black'), is_show=True,
)
)
)
pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add('',data_pie,
radius=['40','100'],
rosetype='area',
center=['85.8%','79%'],
label_opts=opts.LabelOpts(formatter="{b}:{c}人"),
)
.set_global_opts(title_opts=opts.TitleOpts(title=map_name+'累计确诊玫瑰图',
pos_right='8%',
title_textstyle_opts=opts.TextStyleOpts(font_size=14),
pos_top='57%'),
legend_opts=opts.LegendOpts(is_show=False))
)
# piecesC = [
# {"min": 1000,'color':'#7f1100'},
# {"min": 100, "max": 999,'color':'#bd1316'},
# {"min": 50, "max": 99,'color':'#e64b45'},
# {"min": 10, "max": 49,'color':'#ff8c71'},
# {"min": 1, "max": 9,'color':'#fdd2a0'},
# { "max": 0,'color':'#B0E0E6'}
# ]
#对应字典
china_map = (Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
.add('today_confirm', data_map_today, type,
label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
font_family='SimHei'), is_map_symbol_show=False)
.add('total_confirm',data_map_total,type,
label_opts=opts.LabelOpts(color='#fcfcfc',font_weight='bold',font_size=12, font_family='SimHei'),is_map_symbol_show=False)
# .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(map_name+'疫情地图',pos_left='center',title_textstyle_opts=opts.TextStyleOpts(font_size=20, ),subtitle_textstyle_opts=opts.TextStyleOpts(font_size=16,color='white' ),pos_top='2%'),
legend_opts=opts.LegendOpts(pos_top='7%', textstyle_opts=opts.TextStyleOpts(color='white'), is_show=True,),
visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=piecesC, pos_left='5%', pos_top='center',range_text=['高', '低'],textstyle_opts=opts.TextStyleOpts(color='white')),
)
)
couldword = (
WordCloud()
.add('', data_pair=data_word, word_size_range=[20, 80],textstyle_opts=opts.TextStyleOpts(font_family='Microsoft YaHei', font_weight='bold',),pos_left='75%', pos_right='4%', pos_top='10%', pos_bottom='60%', height='300px', width='335px',shape='square')
.set_global_opts(title_opts=opts.TitleOpts(title="疫情热点",
title_textstyle_opts=opts.TextStyleOpts(font_size=15),pos_right='12%',
pos_top='4%')))
grid = Grid(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='1536px',height='700px'))
grid.add(bar,opts.GridOpts(pos_left='2.6%',pos_right='77.6%',pos_top='10.5%',pos_bottom='54%'))
grid.add(line,opts.GridOpts(pos_left ='2.6%', pos_right = '77.6%', pos_top ='58%', pos_bottom = '6%'))
grid.add(pie,opts.GridOpts())
grid.add(china_map,opts.GridOpts())
grid.add(couldword,opts.GridOpts())
grid.render(map_name+'.html')
######################################################################################################################
#全国各省
#获取处理完后的省的数据
dfP = pd.read_csv('city-province-data_2022_07_20.csv')
dfC = pd.read_csv('all_cities_data_2022_07_22.csv')
dfT = pd.read_csv('china_all_provinces_history_data_2022_07_19.csv')
province_list =set([ i for i in dfP['provinces']])
add_list = ['市','土家族苗族自治州','自治区','地区','区','林区','恩施公土家族苗族自治区','州','县'
,'朝鲜族自治州','新区','盟','县','傣族景颇族自治州','傈僳族自治州','藏族自治州','白族自治州','彝族自治州','哈尼族彝族自治州','壮族苗族自治州'
,'傣族自治州','藏族羌族自治州','哈萨克自治州','蒙古自治州','柯尔克孜自治州','回族自治州','苗族自治县','黎族自治县','布依族苗族自治州','苗族侗族自治州'
,'土家族苗族自治县','苗族土家族自治县','藏族自治州','蒙古族藏族自治州','','黎族苗族自治县','土家族自治县','兵团第八师','六师']
for province in province_list:
data_pair1 = dfP[dfP['provinces']==province][['name', 'total_confirm']].values.tolist()
data_pair2 = dfP[dfP['provinces']==province][['name', 'today_confirm']].values.tolist()
data_pair3 = dfT[dfT['province_name'] == province][['date','total_confirm','total_heal','total_dead']].values.tolist()
data_pair4 = dfC[dfC['provinces'] == province][['name', 'total_confirm']].values.tolist()
data_pair5 = dfC[dfC['provinces'] == province][['name', 'today_confirm']].values.tolist()
data_pair_word = [ tuple(i) for i in data_pair4]
data_pairs1 =[[f"{i[0] + j}",i[1]] for i in data_pair1 for j in add_list]
data_pairs2 = [[f"{i[0] + j}",i[1]] for i in data_pair2 for j in add_list]
draw_map_total(province,data_pair5,data_pair4,data_pair3,data_pair4,data_pairs1,data_pairs2,province,data_pair_word)
# #中国带市的数据
#
partten = "省|特别行政区|林区|区|地区|市|蒙古自治州|哈萨克自治州|柯尔克孜自治州|\
蒙古族藏族自治州|彝族自治州|藏族自治州|藏族自治州|藏族羌族自治州|傈僳族自治州|\
朝鲜族自治州|土家族苗族自治州|苗族侗族自治州|布依族苗族自治州|哈尼族彝族自治州|\
傣族景颇族自治州|傣族自治州|黎族自治县|黎族苗族自治县|兵团第八师|自治州|州|六师"
df = pd.read_csv('all_cities_data_2022_07_19.csv')
df.loc[df[df['name'] == '琼中县']['name'].index,'name'] = '琼中'
df['name2'] = df['name'].apply(lambda x: x if len(x)<=2 else re.sub(partten,'',x))
data_pair = df[['name2','total_confirm']].values.tolist()
data_pair_ = df[['name2','today_confirm']].values.tolist()
data_pair_dict = dict(data_pair)
data_pair_dict_ = dict(data_pair_)
data_pair.extend([['双河',data_pair_dict['博尔塔拉']],
['北屯',data_pair_dict['阿勒泰']],
['铁门关',data_pair_dict['巴音郭楞']]
])
data_pair_.extend([['双河',data_pair_dict['博尔塔拉']],
['北屯',data_pair_dict['阿勒泰']],
['铁门关',data_pair_dict['巴音郭楞']]
])
df2 = pd.read_csv('china_all_provinces_data_now_2022_07_19.csv')
#准备折线图数据
data3 = pd.read_csv('world_all_country_history_data_2022_07_19.csv')
data_line_ = data3[data3['country_name'] == '中国'][['date','total_confirm','total_heal','total_dead']].values.tolist()[730:]
supply_prov = ['台湾','上海','天津','重庆','北京','澳门','香港']
supply_data = df2[df2['name'].apply(lambda x:x in supply_prov)][['name','total_confirm']].values.tolist()
supply_data_ = df2[df2['name'].apply(lambda x:x in supply_prov)][['name','today_confirm']].values.tolist()
data_pair.extend(supply_data)
data_pair_.extend(supply_data_)
data = pd.DataFrame({'城市':[data_pair[i][0] for i in range(len(data_pair))],'累计确诊':[data_pair[i][1] for i in range(len(data_pair))]})
data_pair = data[['城市','累计确诊']].sort_values(by='累计确诊',ascending=False).values.tolist()
print(data_pair)
data_word = [ tuple(i) for i in data_pair][2:]
print(data_word)
#
#
# draw_map_total(map_name='中国城市',data_bar_today=data_pair_[:30],data_bar_total=data_pair,
# data_line_total=data_line_,data_pie=data_pair[:15],data_map_total=data_pair,data_map_today=data_pair_,
# type='china-cities',data_word=data_word)
7,主体框架
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def china():
return render_template('中国.html')
@app.route('/world')
def world():
return render_template('世界.html')
@app.route('/香港.html')
def xianggang():
return render_template('香港.html')
@app.route('/黑龙江.html')
def q():
return render_template('黑龙江.html')
@app.route('/陕西.html')
def w():
return render_template('陕西.html')
@app.route('/广西.html')
def e():
return render_template('广西.html')
@app.route('/云南.html')
def r():
return render_template('云南.html')
@app.route('/北京.html')
def t():
return render_template('北京.html')
@app.route('/吉林.html')
def y():
return render_template('吉林.html')
@app.route('/河北.html')
def u():
return render_template('河北.html')
@app.route('/海南.html')
def i():
return render_template('海南.html')
@app.route('/福建.html')
def o():
return render_template('福建.html')
@app.route('/湖北.html')
def p():
return render_template('湖北.html')
@app.route('/天津.html')
def a():
return render_template('天津.html')
@app.route('/澳门.html')
def s():
return render_template('澳门.html')
@app.route('/山东.html')
def d():
return render_template('山东.html')
@app.route('/四川.html')
def f():
return render_template('四川.html')
@app.route('/重庆.html')
def g():
return render_template('重庆.html')
@app.route('/山西.html')
def h():
return render_template('山西.html')
@app.route('/广东.html')
def j():
return render_template('广东.html')
@app.route('/上海.html')
def k():
return render_template('上海.html')
@app.route('/贵州.html')
def l():
return render_template('贵州.html')
@app.route('/江苏.html')
def z():
return render_template('江苏.html')
@app.route('/新疆.html')
def x():
return render_template('新疆.html')
@app.route('/浙江.html')
def c():
return render_template('浙江.html')
@app.route('/西藏.html')
def v():
return render_template('西藏.html')
@app.route('/辽宁.html')
def b():
return render_template('辽宁.html')
@app.route('/台湾.html')
def n():
return render_template('台湾.html')
@app.route('/青海.html')
def m():
return render_template('青海.html')
@app.route('/内蒙古.html')
def qa():
return render_template('内蒙古.html')
@app.route('/河南.html')
def ws():
return render_template('河南.html')
@app.route('/甘肃.html')
def ed():
return render_template('甘肃.html')
@app.route('/安徽.html')
def rf():
return render_template('安徽.html')
@app.route('/江西.html')
def tg():
return render_template('江西.html')
@app.route('/湖南.html')
def yh():
return render_template('湖南.html')
@app.route('/宁夏.html')
def uj():
return render_template('宁夏.html')
@app.route('/world_map_GLO.html')
def zs():
return render_template('world_map_GLO.html')
@app.route('/china.html')
def zcc():
return render_template('china.html')
@app.route('/中国.html')
def zcfc():
return render_template('中国.html')
@app.route('/世界.html')
def zcyyc():
return render_template('世界.html')
@app.route('/中国城市.html')
def zcyyc23():
return render_template('中国城市.html')
if __name__ =='__main__':
app.run()
以下是文件的一个结构图
所以绘制html的文件都在templates里面,因为运行后就可以直接调用。
前面的整体大概就这样,然后想实现跳转和上面的导航是在HBuilder实现的。这里就大概给个截图
这个是关于导航部分。
关于跳转部分主要是在这里
整体大概的一个实现就是这样了。
至于打包部署到服务器上,如果有需要的话后面我再截图演示。