import json
from pyecharts.charts import Map
from pyecharts import options as opts
# 首先打开文件获取数据
f = open("/Desktop/python/Project/数据可视化/疫情.txt", "r", encoding="UTF-8")
data = f.read()
# 字符串转化成json数据
data_json = json.loads(data)
# 对数据进行处理,疫情确诊人数,首先需要获取地区,其次获取每个地区的确诊人数。
# data = data_json['areaTree']获取字典中'areaTree'的关键值,返回的是一个长度为一的列表。
# data = data_json['areaTree'][0]获取列表中的第一个元素,返回的是一个字典。
data = data_json['areaTree'][0]
# 获取字典中的地区名称数据,返回的是一个列表,用一个空列表接收。(if name == "香港" or "澳门":这是错误的语法格式)
data = data["children"]
name_list = []
for x in data:
name = x["name"]
if name == "香港" or name == "澳门":
name = name + "特别行政区"
elif name == "新疆":
name = name + "维吾尔自治区"
elif name == "西藏" or name == "内蒙古":
name = name + "自治区"
elif name == "宁夏":
name = name + "回族自治区"
elif name == "广西":
name = name + "壮族自治区"
elif name == "北京" or name == "天津" or name == "上海" or name == "重庆":
name = name + "市"
else:
name = name + "省"
name_list.append(name)
# 获取确诊人数并储存到列表中
conf_list = []
for t in data:
conf_data = t["total"]["confirm"]
conf_list.append(conf_data)
# 准备地图对象
map = Map()
# 准备数据,将名称和确诊人数构成一个元组列表。
# 查找连个列表的长度是否相等。
print(len(name_list))
print(len(conf_list))
# 将元组添加到空列表中
data_list = []
i = 0
while i < 34:
temp = (name_list[i], conf_list[i])
data_list.append(temp)
i += 1
# 添加数据
map.add("中国疫情确诊人数图", data_list, "china")
# 设置全局变量
map.set_global_opts(
# 标题
title_opts= opts.TitleOpts(title="全国疫情确诊图"),
# 是否显示分段
visualmap_opts=opts.VisualMapOpts(
is_show=True, is_piecewise=True,
pieces =
[
{"min": 1,"max":99,"label": "1-99人", "color": "#CCFFFF"},
{"min": 100,"max":999,"label": "100-999人", "color": "#FFFF99"},
{"min": 1000,"max":4999,"label": "500-999人", "color": "#FF9966"},
{"min": 5000,"max":9999,"label": "1000-1499人", "color": "#CC3333"},
{"min": 10000,"label":"10000人以上", "color": "#990033"}
]
)
)
# 生成地图
map.render("map.html")
f.close()
效果图: