新找到关于各省各地市的日历史数据接口,为了避免不必要的麻烦,把对方的接口地址已屏蔽,下载的历史数据也仅供学习和参考;现在的所有数据已收集完成。
接下来是关于可视化部分,可视化有几种方式,第一种是matplotlib和basemap,但basemap的包一直无法下载,第二种是geopandas,但GDAL的包一个是无法下载,一个是无法兼容,第三种是pyecharts,这个比较简单,但无法完成数据的自动化播放。
主要学习点在于一个是基于各省份信息的列表化转换,另外一个是对日期取值和循环遍历的学习。为了学习可视化的数据结构,又着手温习了一下列表转字典,基于列表排序,基于字典排序的,获取最大值获取第二大值的知识。
请大家认准国家卫健委发布的权威数据,不私自传播疫情相关信息,相信权威媒体的专业发布,不造谣不传谣不信谣!只要万众一心,灾难一定会过去的!
代码如下:
代码语言:javascript复制'''
{
'ret': 200,
'data': {
'items': [{
'id': 15780,
'country': '中国',
'area': '湖北',
'city': '武汉',
'confirm': 5142,
'suspect': 0,
'dead': 265,
'heal': 224,
'create_time': '2020-02-03'
}, {}
'''
from datetime import date,datetime,timedelta
from urllib.parse import quote
import string
# 初始化各省列表
provstr='湖北|广东|浙江|河南|湖南|安徽|江西|重庆|江苏|山东|四川|黑龙江|北京|上海|福建|陕西|广西|河北|云南|海南|山西|辽宁|天津|贵州|甘肃|吉林|内蒙古|宁夏|新疆|香港|青海|台湾|澳门|西藏'
provlist=provstr.split('|')
# 初始化开始日期和截止日期,并生成日期列表
delta =timedelta(days=1)
start_date=date(2020, 2, 1)
end_date=datetime.date(datetime.now())-delta
days=(end_date-start_date).days
datelist=[str(start_date timedelta(i)) for i in range(days 1)]
# 初始化省日历史数据
provincedatahistory=[]
# 打开相关链接,获取json数据,并加入省日历史数据列表中
for city in provlist:
for day in datelist:
url='https://api.com/?area={}&date_start={}&date_end={}'.format(city,day,day)
url = quote(url, safe=string.printable)
data=json.loads(urllib.request.urlopen(url).read())
for data in data['data']['items']:
provincedatahistory.append(data)
# provincedatahistory
# [{'id': 774, 'country': '中国', 'area': '湖北', 'city': '武汉', 'confirm': 3215, 'suspect': 0, 'dead': 192, 'heal': 106, 'create_time': '2020-02-01'},
# {'id': 775, 'country': '中国', 'area': '湖北', 'city': '黄冈', 'confirm': 726, 'suspect': 0, 'dead': 14, 'heal': 17, 'create_time': '2020-02-01'},
# {'id': 776, 'country': '中国', 'area': '湖北', 'city': '孝感', 'confirm': 628, 'suspect': 0, 'dead': 12, 'heal': 2, 'create_time': '2020-02-01'},
# {'id': 777, 'country': '中国', 'area': '湖北', 'city': '襄阳', 'confirm': 347, 'suspect': 0, 'dead': 0, 'heal': 0, 'create_time': '2020-02-01'}
关于列表转字典,基于列表排序,基于字典排序的,获取最大值获取第二大值的相关代码
代码如下:
代码语言:javascript复制import operator
# 原始数据
hn_data = [['海口市', 1320], ['三亚市', 59], ['儋州市', 79], ['琼海市', 48], ['文昌市', 108], ['定安县', 105], ['五指山市', 51],['昌江黎族自治县',12]]
# list转字典
data1=list(row[1] for row in hn_data)
# [132, 59, 79, 48, 108, 105, 51]
data2=list(row[0] for row in hn_data)
# ['海口市', '三亚市', '儋州市', '琼海市', '文昌市', '定安县', '五指山市']
dict1=dict(zip(data2,data1))
# {'海口市': 132, '三亚市': 59, '儋州市': 79, '琼海市': 48, '文昌市': 108, '定安县': 105, '五指山市': 51}
value1 = sorted(dict1.values())
#[48, 51, 59, 79, 105, 108, 132]
# 求最大值
max_data=(max((row[1] for row in hn_data)))
# 求第二大值
print(value1[-2])
#直接从获取第二列list然后排序
value1=sorted([row[1] for row in hn_data],reverse=True)
print(value1[1])
value2 = sorted(dict1.items(), key=lambda y: y[1])
# [('琼海市', 48), ('五指山市', 51), ('三亚市', 59), ('儋州市', 79), ('定安县', 105), ('文昌市', 108), ('海口市', 132)]
value3 = sorted(dict1.items(), key=operator.itemgetter(1))
# [('琼海市', 48), ('五指山市', 51), ('三亚市', 59), ('儋州市', 79), ('定安县', 105), ('文昌市', 108), ('海口市', 132)]
value4 = sorted(hn_data, key=lambda y: y[1])
# [['琼海市', 48], ['五指山市', 51], ['三亚市', 59], ['儋州市', 79], ['定安县', 105], ['文昌市', 108], ['海口市', 132]]
value5 = sorted(hn_data, key=operator.itemgetter(1))
# [['琼海市', 48], ['五指山市', 51], ['三亚市', 59], ['儋州市', 79], ['定安县', 105], ['文昌市', 108], ['海口市', 132]]