作者 | 杨秀璋

来源 | CSDN博客专家Eastmount

责编 | 夕颜

思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。希望该系列线上远程教学对您有所帮助,也希望早点战胜病毒,武汉加油、湖北加油、全国加油。待到疫情结束樱花盛开,这座英雄的城市等你们来。

第一篇文章将分享腾讯疫情实时数据抓取,获取全国各地和贵州省各地区的实时数据,并将数据存储至本地,最后调用Maplotlib和Seaborn绘制中国各地区、贵州省各城市、新增人数的图形。希望这篇可视化分析文章对您有所帮助,也非常感谢参考文献中老师的分享,一起加油,战胜疫情!如果您有想学习的知识或建议,可以给作者留言~

代码下载地址:https://github.com/eastmountyxz/Wuhan-data-analysis

Python实时数据爬取

我们的目标网站是腾讯新闻网实时数据,其原理主要是通过Requests获取JSON请求,从而得到各省、各市的疫情数据,这里推荐三篇原理文章,也强烈推荐大家阅读许老师(天元浪子)的博客。

爬虫目标网站:

  • https://news.qq.com/zt2020/page/feiyan.htm

第一步 分析网站

通过浏览器“审查元素”查看源代码及“网络”反馈的消息,如下图所示:

对应的响应信息如下所示:

第二步 发送请求并获取Json数据

通过分析url地址、请求方法、参数及响应格式,可以获取Json数据,注意url需要增加一个时间戳。下面代码展示了获取数据的键值及34个省份。

 1# -*- coding: utf-8 -*-23#------------------------------------------------------------------------------4# 第一步:抓取数据5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/1040931976#------------------------------------------------------------------------------7import time, json, requests8# 抓取腾讯疫情实时json数据9url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)
10data = json.loads(requests.get(url=url).json()['data'])
11print(data)
12print(data.keys())
13
14# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)
15num = data['areaTree'][0]['children']
16print(len(num))
17for item in num:
18    print(item['name'],end=" ")   # 不换行
19else:
20    print("\n")                     # 换行

输出结果如下图所示,其顺序按照确诊人数排序。

第三步 获取湖北省疫情数据

接着通过 num[0][‘children’] 获取湖北省的疫情数据,代码如下:

 1# -*- coding: utf-8 -*-23#------------------------------------------------------------------------------4# 第一步:抓取数据5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/1040931976#------------------------------------------------------------------------------7import time, json, requests8# 抓取腾讯疫情实时json数据9url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)
10data = json.loads(requests.get(url=url).json()['data'])
11print(data)
12print(data.keys())
13
14# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)
15num = data['areaTree'][0]['children']
16print(len(num))
17for item in num:
18    print(item['name'],end=" ")   # 不换行
19else:
20    print("\n")                     # 换行
21
22# 显示湖北省数据
23hubei = num[0]['children']
24for data in hubei:
25    print(data)

同样的方法可以获取各省份的数据,比如 num[1][‘children’] 表示广东省疫情数据,我们设置循环就能获取所有数据。其数据包括当日数据(today)和累计数据(total),confirm表示确诊、suspect表示疑似、dead表示死亡、heal表示治愈。

我们将所抓取的数据和真实的数据进行对比,武汉截止2月13日下午4点,新增确诊人数13436、累计确诊32994,发现是完全一致的。

1{'name': '武汉',
2'today': {'confirm': 13436, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': True},
3'total': {'confirm': 32994, 'suspect': 0, 'dead': 1036, 'heal': 1915, 'showRate': False,
4          'showHeal': False, 'deadRate': 3.14, 'healRate': 5.8}}

第四步 获取各省确诊人数

注意,初始化每个省份人数为0,然后循环累加该省所有城市的确诊人数,调用 city_data[‘total’][‘confirm’] 获取各城市的确诊数据。

 1# -*- coding: utf-8 -*-23#------------------------------------------------------------------------------4# 第一步:抓取数据5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/1040931976#------------------------------------------------------------------------------7import time, json, requests8# 抓取腾讯疫情实时json数据9url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)
10data = json.loads(requests.get(url=url).json()['data'])
11print(data)
12print(data.keys())
13
14# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)
15num = data['areaTree'][0]['children']
16print(len(num))
17for item in num:
18    print(item['name'],end=" ")   # 不换行
19else:
20    print("\n")                     # 换行
21
22# 显示湖北省数据
23hubei = num[0]['children']
24for item in hubei:
25    print(item)
26else:
27    print("\n")
28
29# 解析数据(确诊 疑似 死亡 治愈)
30total_data = {}
31for item in num:
32    if item['name'] not in total_data:
33        total_data.update({item['name']:0})
34    for city_data in item['children']:
35        total_data[item['name']] +=int(city_data['total']['confirm'])
36print(total_data)
37# {'湖北': 48206, '广东': 1241, '河南': 1169, '浙江': 1145, '湖南': 968, ...,  '澳门': 10, '西藏': 1}

输出结果如下图所示:

接下来我们分享可视化画图。

Matplotlib绘制全国各地区柱状图

首先,我们调用Matplotlib绘制全国各地区的确诊人数柱状图,帮助大家回忆其基本用法。total_data为字典变量键值对,比如{‘湖北’: 48206, ‘广东’: 1241,…}

 1# -*- coding: utf-8 -*-23#------------------------------------------------------------------------------4# 第一步:抓取数据5#------------------------------------------------------------------------------6import time, json, requests7# 抓取腾讯疫情实时json数据8url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)9data = json.loads(requests.get(url=url).json()['data'])
10print(data)
11print(data.keys())
12
13# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)
14num = data['areaTree'][0]['children']
15print(len(num))
16for item in num:
17    print(item['name'],end=" ")   # 不换行
18else:
19    print("\n")                     # 换行
20
21# 显示湖北省数据
22hubei = num[0]['children']
23for item in hubei:
24    print(item)
25else:
26    print("\n")
27
28# 解析数据(确诊 疑似 死亡 治愈)
29total_data = {}
30for item in num:
31    if item['name'] not in total_data:
32        total_data.update({item['name']:0})
33    for city_data in item['children']:
34        total_data[item['name']] +=int(city_data['total']['confirm'])
35print(total_data)
36# {'湖北': 48206, '广东': 1241, '河南': 1169, '浙江': 1145, '湖南': 968, ...,  '澳门': 10, '西藏': 1}
37
38#------------------------------------------------------------------------------
39# 第二步:绘制柱状图
40#------------------------------------------------------------------------------
41import matplotlib.pyplot as plt
42import numpy as np
43
44plt.rcParams['font.sans-serif'] = ['SimHei']  #用来正常显示中文标签
45plt.rcParams['axes.unicode_minus'] = False    #用来正常显示负号
46
47#获取数据
48names = total_data.keys()
49nums = total_data.values()
50print(names)
51print(nums)
52
53# 绘图
54plt.figure(figsize=[10,6])
55plt.bar(names, nums, width=0.3, color='green')
56
57# 设置标题
58plt.xlabel("地区", fontproperties='SimHei', size=12)
59plt.ylabel("人数", fontproperties='SimHei', rotation=90, size=12)
60plt.title("全国疫情确诊数对比图", fontproperties='SimHei', size=16)
61plt.xticks(list(names), fontproperties='SimHei', rotation=-45, size=10)
62# 显示数字
63for a, b in zip(list(names), list(nums)):
64    plt.text(a, b, b, ha='center', va='bottom', size=6)
65plt.show()

输出结果如下图所示:

那么,如果我想获取累计确诊人数、新增确诊人数、死亡人数和治愈人数,并进行可视化展示,怎么办呢?只需要简单替换参数即可。

  • city_data[‘total’][‘confirm’] 确诊人数

  • city_data[‘total’][‘suspect’] 疑似人数

  • city_data[‘total’][‘dead’] 死亡人数

  • city_data[‘total’][‘heal’] 治愈人数

  • city_data[‘today’][‘confirm’] 新增确诊人数

  1# -*- coding: utf-8 -*-23#------------------------------------------------------------------------------4# 第一步:抓取数据5#------------------------------------------------------------------------------6import time, json, requests7# 抓取腾讯疫情实时json数据8url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)9data = json.loads(requests.get(url=url).json()['data'])10print(data)11print(data.keys())1213# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)14num = data['areaTree'][0]['children']15print(len(num))16for item in num:17    print(item['name'],end=" ")   # 不换行18else:19    print("\n")                     # 换行2021# 显示湖北省数据22hubei = num[0]['children']23for item in hubei:24    print(item)25else:26    print("\n")2728# 解析确诊数据29total_data = {}30for item in num:31    if item['name'] not in total_data:32        total_data.update({item['name']:0})33    for city_data in item['children']:34        total_data[item['name']] +=int(city_data['total']['confirm'])    35print(total_data)36# {'湖北': 48206, '广东': 1241, '河南': 1169, '浙江': 1145, '湖南': 968, ...,  '澳门': 10, '西藏': 1}3738# 解析疑似数据39total_suspect_data = {}40for item in num:41    if item['name'] not in total_suspect_data:42        total_suspect_data.update({item['name']:0})43    for city_data in item['children']:44        total_suspect_data[item['name']] +=int(city_data['total']['suspect'])    45print(total_suspect_data)4647# 解析死亡数据48total_dead_data = {}49for item in num:50    if item['name'] not in total_dead_data:51        total_dead_data.update({item['name']:0})52    for city_data in item['children']:53        total_dead_data[item['name']] +=int(city_data['total']['dead'])    54print(total_dead_data)5556# 解析治愈数据57total_heal_data = {}58for item in num:59    if item['name'] not in total_heal_data:60        total_heal_data.update({item['name']:0})61    for city_data in item['children']:62        total_heal_data[item['name']] +=int(city_data['total']['heal'])    63print(total_heal_data)6465# 解析新增确诊数据66total_new_data = {}67for item in num:68    if item['name'] not in total_new_data:69        total_new_data.update({item['name']:0})70    for city_data in item['children']:71        total_new_data[item['name']] +=int(city_data['today']['confirm']) # today    72print(total_new_data)7374#------------------------------------------------------------------------------75# 第二步:绘制柱状图76#------------------------------------------------------------------------------77import matplotlib.pyplot as plt 78import numpy as np7980plt.figure(figsize=[10,6])81plt.rcParams['font.sans-serif'] = ['SimHei']  #用来正常显示中文标签82plt.rcParams['axes.unicode_minus'] = False    #用来正常显示负号8384#-----------------------------1.绘制确诊数据-----------------------------------85p1 = plt.subplot(221)8687# 获取数据88names = total_data.keys()89nums = total_data.values()90print(names)91print(nums)92print(total_data)93plt.bar(names, nums, width=0.3, color='green')9495# 设置标题96plt.ylabel("确诊人数", rotation=90)97plt.xticks(list(names), rotation=-60, size=8)98# 显示数字99for a, b in zip(list(names), list(nums)):
100    plt.text(a, b, b, ha='center', va='bottom', size=6)
101plt.sca(p1)
102
103#-----------------------------2.绘制新增确诊数据-----------------------------------
104p2 = plt.subplot(222)
105names = total_new_data.keys()
106nums = total_new_data.values()
107print(names)
108print(nums)
109plt.bar(names, nums, width=0.3, color='yellow')
110plt.ylabel("新增确诊人数", rotation=90)
111plt.xticks(list(names), rotation=-60, size=8)
112# 显示数字
113for a, b in zip(list(names), list(nums)):
114    plt.text(a, b, b, ha='center', va='bottom', size=6)
115plt.sca(p2)
116
117#-----------------------------3.绘制死亡数据-----------------------------------
118p3 = plt.subplot(223)
119names = total_dead_data.keys()
120nums = total_dead_data.values()
121print(names)
122print(nums)
123plt.bar(names, nums, width=0.3, color='blue')
124plt.xlabel("地区")
125plt.ylabel("死亡人数", rotation=90)
126plt.xticks(list(names), rotation=-60, size=8)
127for a, b in zip(list(names), list(nums)):
128    plt.text(a, b, b, ha='center', va='bottom', size=6)
129plt.sca(p3)
130
131#-----------------------------4.绘制治愈数据-----------------------------------
132p4 = plt.subplot(224)
133names = total_heal_data.keys()
134nums = total_heal_data.values()
135print(names)
136print(nums)
137plt.bar(names, nums, width=0.3, color='red')
138plt.xlabel("地区")
139plt.ylabel("治愈人数", rotation=90)
140plt.xticks(list(names), rotation=-60, size=8)
141for a, b in zip(list(names), list(nums)):
142    plt.text(a, b, b, ha='center', va='bottom', size=6)
143plt.sca(p4)
144plt.show()

输出如下图所示,但是Matplotlib画图不太美观,接下来分享Seaborn可视化。

数据存储及Seaborn绘制全国各地区柱状图

Seaborn是在Matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。

  • 安装:pip install seaborn

1.文件写入

 1# -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第一步:抓取数据4#------------------------------------------------------------------------------5import time, json, requests6# 抓取腾讯疫情实时json数据7url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)8data = json.loads(requests.get(url=url).json()['data'])9print(data)
10print(data.keys())
11
12# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)
13num = data['areaTree'][0]['children']
14print(len(num))
15for item in num:
16    print(item['name'],end=" ")   # 不换行
17else:
18    print("\n")                     # 换行
19
20# 显示湖北省数据
21hubei = num[0]['children']
22for item in hubei:
23    print(item)
24else:
25    print("\n")
26
27# 解析确诊数据
28total_data = {}
29for item in num:
30    if item['name'] not in total_data:
31        total_data.update({item['name']:0})
32    for city_data in item['children']:
33        total_data[item['name']] +=int(city_data['total']['confirm'])
34print(total_data)
35# {'湖北': 48206, '广东': 1241, '河南': 1169, '浙江': 1145, '湖南': 968, ...,  '澳门': 10, '西藏': 1}
36
37# 解析疑似数据
38total_suspect_data = {}
39for item in num:
40    if item['name'] not in total_suspect_data:
41        total_suspect_data.update({item['name']:0})
42    for city_data in item['children']:
43        total_suspect_data[item['name']] +=int(city_data['total']['suspect'])
44print(total_suspect_data)
45
46# 解析死亡数据
47total_dead_data = {}
48for item in num:
49    if item['name'] not in total_dead_data:
50        total_dead_data.update({item['name']:0})
51    for city_data in item['children']:
52        total_dead_data[item['name']] +=int(city_data['total']['dead'])
53print(total_dead_data)
54
55# 解析治愈数据
56total_heal_data = {}
57for item in num:
58    if item['name'] not in total_heal_data:
59        total_heal_data.update({item['name']:0})
60    for city_data in item['children']:
61        total_heal_data[item['name']] +=int(city_data['total']['heal'])
62print(total_heal_data)
63
64# 解析新增确诊数据
65total_new_data = {}
66for item in num:
67    if item['name'] not in total_new_data:
68        total_new_data.update({item['name']:0})
69    for city_data in item['children']:
70        total_new_data[item['name']] +=int(city_data['today']['confirm']) # today
71print(total_new_data)
72
73#------------------------------------------------------------------------------
74# 第二步:存储数据至CSV文件
75#------------------------------------------------------------------------------
76names = list(total_data.keys())          # 省份名称
77num1 = list(total_data.values())         # 确诊数据
78num2 = list(total_suspect_data.values()) # 疑似数据(全为0)
79num3 = list(total_dead_data.values())    # 死亡数据
80num4 = list(total_heal_data.values())    # 治愈数据
81num5 = list(total_new_data.values())     # 新增确诊病例
82print(names)
83print(num1)
84print(num2)
85print(num3)
86print(num4)
87print(num5)
88
89# 获取当前日期命名(2020-02-13-all.csv)
90n = time.strftime("%Y-%m-%d") + "-all.csv"
91fw = open(n, 'w', encoding='utf-8')
92fw.write('province,confirm,dead,heal,new_confirm\n')
93i = 0
94while i<len(names):
95    fw.write(names[i]+','+str(num1[i])+','+str(num3[i])+','+str(num4[i])+','+str(num5[i])+'\n')
96    i = i + 1
97else:
98    print("Over write file!")
99    fw.close()

存储成功之后,如下图所示。

对应腾讯的数据,如下图所示:

2.Seaborn绘制柱状图

 1# -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第三步:调用Seaborn绘制柱状图4#------------------------------------------------------------------------------5import time6import matplotlib7import numpy as np8import seaborn as sns9import pandas as pd
10import matplotlib.pyplot as plt
11
12# 读取数据
13n = time.strftime("%Y-%m-%d") + "-all.csv"
14data = pd.read_csv(n)
15
16# 设置窗口
17fig, ax = plt.subplots(1,1)
18print(data['province'])
19
20# 设置绘图风格及字体
21sns.set_style("whitegrid",{'font.sans-serif':['simhei','Arial']})
22
23# 绘制柱状图
24g = sns.barplot(x="province", y="confirm", data=data, ax=ax,
25            palette=sns.color_palette("hls", 8))
26
27# 在柱状图上显示数字
28i = 0
29for index, b in zip(list(data['province']), list(data['confirm'])):
30    g.text(i+0.05, b+0.05, b, color="black", ha="center", va='bottom', size=6)
31    i = i + 1
32
33# 设置Axes的标题
34ax.set_title('全国疫情最新情况')
35
36# 设置坐标轴文字方向
37ax.set_xticklabels(ax.get_xticklabels(), rotation=-60)
38
39# 设置坐标轴刻度的字体大小
40ax.tick_params(axis='x',labelsize=8)
41ax.tick_params(axis='y',labelsize=8)
42
43plt.show()

显示结果如下图所示:

Seaborn绘制全国各地区对比柱状图

如果需要显示多个数据对比,则需要使用下面的代码。由于Seaborn能够进行按类别分组绘图,我们需要将抓取的数据存储为如下图所示的文件,才能将数据绘制在同一张图中。

  1# -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第一步:抓取数据4#------------------------------------------------------------------------------5import time, json, requests6# 抓取腾讯疫情实时json数据7url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)8data = json.loads(requests.get(url=url).json()['data'])9print(data)10print(data.keys())1112# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)13num = data['areaTree'][0]['children']14print(len(num))15for item in num:16    print(item['name'],end=" ")   # 不换行17else:18    print("\n")                     # 换行1920# 显示湖北省数据21hubei = num[0]['children']22for item in hubei:23    print(item)24else:25    print("\n")2627# 解析确诊数据28total_data = {}29for item in num:30    if item['name'] not in total_data:31        total_data.update({item['name']:0})32    for city_data in item['children']:33        total_data[item['name']] +=int(city_data['total']['confirm'])    34print(total_data)35# {'湖北': 48206, '广东': 1241, '河南': 1169, '浙江': 1145, '湖南': 968, ...,  '澳门': 10, '西藏': 1}3637# 解析疑似数据38total_suspect_data = {}39for item in num:40    if item['name'] not in total_suspect_data:41        total_suspect_data.update({item['name']:0})42    for city_data in item['children']:43        total_suspect_data[item['name']] +=int(city_data['total']['suspect'])    44print(total_suspect_data)4546# 解析死亡数据47total_dead_data = {}48for item in num:49    if item['name'] not in total_dead_data:50        total_dead_data.update({item['name']:0})51    for city_data in item['children']:52        total_dead_data[item['name']] +=int(city_data['total']['dead'])    53print(total_dead_data)5455# 解析治愈数据56total_heal_data = {}57for item in num:58    if item['name'] not in total_heal_data:59        total_heal_data.update({item['name']:0})60    for city_data in item['children']:61        total_heal_data[item['name']] +=int(city_data['total']['heal'])    62print(total_heal_data)6364# 解析新增确诊数据65total_new_data = {}66for item in num:67    if item['name'] not in total_new_data:68        total_new_data.update({item['name']:0})69    for city_data in item['children']:70        total_new_data[item['name']] +=int(city_data['today']['confirm']) # today    71print(total_new_data)7273#------------------------------------------------------------------------------74# 第二步:存储数据至CSV文件75#------------------------------------------------------------------------------76names = list(total_data.keys())          # 省份名称77num1 = list(total_data.values())         # 确诊数据78num2 = list(total_suspect_data.values()) # 疑似数据(全为0)79num3 = list(total_dead_data.values())    # 死亡数据80num4 = list(total_heal_data.values())    # 治愈数据81num5 = list(total_new_data.values())     # 新增确诊病例82print(names)83print(num1)84print(num2)85print(num3)86print(num4)87print(num5)8889# 获取当前日期命名(2020-02-13-all.csv)90n = time.strftime("%Y-%m-%d") + "-all-4db.csv"91fw = open(n, 'w', encoding='utf-8')92fw.write('province,tpye,data\n')93i = 094while i<len(names):95    fw.write(names[i]+',confirm,'+str(num1[i])+'\n')96    fw.write(names[i]+',dead,'+str(num3[i])+'\n')97    fw.write(names[i]+',heal,'+str(num4[i])+'\n')98    fw.write(names[i]+',new_confirm,'+str(num5[i])+'\n')99    i = i + 1
100else:
101    print("Over write file!")
102    fw.close()
103
104#------------------------------------------------------------------------------
105# 第三步:调用Seaborn绘制柱状图
106#------------------------------------------------------------------------------
107import time
108import matplotlib
109import numpy as np
110import seaborn as sns
111import pandas as pd
112import matplotlib.pyplot as plt
113
114# 读取数据
115n = time.strftime("%Y-%m-%d") + "-all-4db.csv"
116data = pd.read_csv(n)
117
118# 设置窗口
119fig, ax = plt.subplots(1,1)
120print(data['province'])
121
122# 设置绘图风格及字体
123sns.set_style("whitegrid",{'font.sans-serif':['simhei','Arial']})
124
125# 绘制柱状图
126g = sns.barplot(x="province", y="data", hue="tpye", data=data, ax=ax,
127            palette=sns.color_palette("hls", 8))
128
129# 设置Axes的标题
130ax.set_title('全国疫情最新情况')
131
132# 设置坐标轴文字方向
133ax.set_xticklabels(ax.get_xticklabels(), rotation=-60)
134
135# 设置坐标轴刻度的字体大小
136ax.tick_params(axis='x',labelsize=8)
137ax.tick_params(axis='y',labelsize=8)
138
139plt.show()

此时绘制如下图所示:

但是当数据很小时,其柱状图无法很好地显示,建议采用以下方法处理:

  • 归一化处理

  • 湖北省外和湖北省内对比

 1# -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第三步:调用Seaborn绘制柱状图4#------------------------------------------------------------------------------5import time6import matplotlib7import numpy as np8import seaborn as sns9import pandas as pd
10import matplotlib.pyplot as plt
11
12# 读取数据
13n = time.strftime("%Y-%m-%d") + "-all-4db-2no.csv"
14data = pd.read_csv(n)
15
16# 设置窗口
17fig, ax = plt.subplots(1,1)
18print(data['province'])
19
20# 设置绘图风格及字体
21sns.set_style("whitegrid",{'font.sans-serif':['simhei','Arial']})
22
23# 绘制柱状图
24g = sns.barplot(x="province", y="data", hue="tpye", data=data, ax=ax,
25            palette=sns.color_palette("hls", 8))
26
27# 设置Axes的标题
28ax.set_title('全国疫情最新情况')
29
30# 设置坐标轴文字方向
31ax.set_xticklabels(ax.get_xticklabels(), rotation=-60)
32
33# 设置坐标轴刻度的字体大小
34ax.tick_params(axis='x',labelsize=8)
35ax.tick_params(axis='y',labelsize=8)
36
37plt.show()

替换成新增确诊病例的对比图如下所示。

Seaborn绘制疫情趋势图及湖北省内外对比图

1.湖北省内外对比图

在做数据分析过程中,我们通常需要对数据进行预处理或加工,下面将数据划分为湖北省内和湖北省外,再绘制对应的对比图。

 1# -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第三步:调用Seaborn绘制柱状图4#------------------------------------------------------------------------------5import time6import matplotlib7import numpy as np8import seaborn as sns9import pandas as pd
10import matplotlib.pyplot as plt
11
12# 读取数据
13data = pd.read_csv("2020-02-13-all-4db-2no.csv")
14
15# 设置窗口
16fig, ax = plt.subplots(1,1)
17print(data['province'])
18
19# 设置绘图风格及字体
20sns.set_style("whitegrid",{'font.sans-serif':['simhei','Arial']})
21
22# 绘制柱状图
23g = sns.barplot(x="province", y="data", hue="tpye", data=data, ax=ax,
24            palette=sns.color_palette("hls", 8))
25
26# 设置Axes的标题
27ax.set_title('全国疫情最新情况')
28
29# 设置坐标轴文字方向
30ax.set_xticklabels(ax.get_xticklabels())
31
32# 设置坐标轴刻度的字体大小
33ax.tick_params(axis='x',labelsize=8)
34ax.tick_params(axis='y',labelsize=8)
35
36plt.show()

输出结果如下图所示:

2.疫情趋势图

该部分代码是在许老师的文章基础上修改。

 1# -*- coding: utf-8 -*-2# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/1040931973import time, json, requests4from datetime import datetime5import matplotlib.pyplot as plt6import matplotlib.dates as mdates78# 抓取腾讯疫情实时json数据9def catch_daily():
10    url = 'https://view.inews.qq.com/g2/getOnsInfo?name=wuwei_ww_cn_day_counts&callback=&_=%d'%int(time.time()*1000)
11    data = json.loads(requests.get(url=url).json()['data'])
12    data.sort(key=lambda x:x['date'])
13
14    date_list = list() # 日期
15    confirm_list = list() # 确诊
16    suspect_list = list() # 疑似
17    dead_list = list() # 死亡
18    heal_list = list() # 治愈
19    for item in data:
20        month, day = item['date'].split('/')
21        date_list.append(datetime.strptime('2020-%s-%s'%(month, day), '%Y-%m-%d'))
22        confirm_list.append(int(item['confirm']))
23        suspect_list.append(int(item['suspect']))
24        dead_list.append(int(item['dead']))
25        heal_list.append(int(item['heal']))
26    return date_list, confirm_list, suspect_list, dead_list, heal_list
27
28# 绘制每日确诊和死亡数据
29def plot_daily():
30
31
32    date_list, confirm_list, suspect_list, dead_list, heal_list = catch_daily() # 获取数据
33
34    plt.figure('2019-nCoV疫情统计图表', facecolor='#f4f4f4', figsize=(10, 8))
35    plt.title('2019-nCoV疫情曲线', fontsize=20)
36
37    plt.rcParams['font.sans-serif'] = ['SimHei']  #用来正常显示中文标签
38    plt.rcParams['axes.unicode_minus'] = False    #用来正常显示负号
39
40    plt.plot(date_list, confirm_list, 'r-', label='确诊')
41    plt.plot(date_list, confirm_list, 'rs')
42    plt.plot(date_list, suspect_list, 'b-',label='疑似')
43    plt.plot(date_list, suspect_list, 'b*')
44    plt.plot(date_list, dead_list, 'y-', label='死亡')
45    plt.plot(date_list, dead_list, 'y+')
46    plt.plot(date_list, heal_list, 'g-', label='治愈')
47    plt.plot(date_list, heal_list, 'gd')
48
49    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m-%d')) # 格式化时间轴标注
50    plt.gcf().autofmt_xdate() # 优化标注(自动倾斜)
51    plt.grid(linestyle=':') # 显示网格
52    plt.legend(loc='best') # 显示图例
53    plt.savefig('2019-nCoV疫情曲线.png') # 保存为文件
54    plt.show()
55
56if __name__ == '__main__':
57    plot_daily()

输出结果如下图所示,疑似人数开始下降。武汉加油,中国必胜!

Seaborn绘制其他图形及分析

作者这里仅补充绘图语法,更多分析结果(死亡数-治愈数)请读者进行。同时,读者可以增加数据量,全国所有城市的数据,可能绘制的图形更为丰满。

KDE图

 1# -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第四步:调用Seaborn绘制其他图形4#------------------------------------------------------------------------------5import time6import matplotlib7import numpy as np8import seaborn as sns9import pandas as pd
10import matplotlib.pyplot as plt
11
12# 读取数据
13data = pd.read_csv('2020-02-13-all.csv')
14
15plt.rcParams['font.sans-serif'] = ['SimHei']  #用来正常显示中文标签
16plt.rcParams['axes.unicode_minus'] = False    #用来正常显示负号
17
18# 设置窗口
19fig, ax = plt.subplots(1,1)
20print(data['province'])
21
22# 设置Axes的标题
23ax.set_title('全国疫情最新情况')
24
25# 设置坐标轴刻度的字体大小
26ax.tick_params(axis='x',labelsize=8)
27ax.tick_params(axis='y',labelsize=8)
28
29# 设置绘图风格及字体
30sns.set_style("whitegrid",{'font.sans-serif':['simhei','Arial']})
31
32# 六角形
33#sns.jointplot(x="dead", y="heal", data=data, color="b", kind='hex')
34
35# KDE 图
36sns.jointplot(x="dead", y="heal", data=data, kind="kde", space=0, color="#6AB27B")
37
38# 散点图+KDE 图
39# g = (sns.jointplot(x="dead", y="heal", data=data, color="k").plot_joint(sns.kdeplot, zorder=0, n_levels=6))
40
41plt.show()

显示如下图所示:

六角形

sns.jointplot(x=“dead”, y=“heal”, data=data, color=“b”, kind=‘hex’)

散点图

sns.jointplot(x=“dead”, y=“heal”, data=data, color=“b”, s=50, kind=‘scatter’, space = 0.1, size = 8, ratio = 5)

回归图

sns.jointplot(x=“dead”, y=“heal”, data=data, color=“b”, kind=‘reg’)

散点图+KDE 图

g = (sns.jointplot(x=“dead”, y=“heal”, data=data, color=“k”).plot_joint(sns.kdeplot, zorder=0, n_levels=6))

贵州省可视化分析

接着我们抓取某一个省的数据,比如贵州省。

 1 -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第一步:抓取数据4#------------------------------------------------------------------------------5import time, json, requests6# 抓取腾讯疫情实时json数据7url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)8data = json.loads(requests.get(url=url).json()['data'])9print(data)
10print(data.keys())
11
12# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)
13num = data['areaTree'][0]['children']
14print(len(num))
15
16# 获取贵州下标
17k = 0
18for item in num:
19    print(item['name'],end=" ")   # 不换行
20    if item['name'] in "贵州":
21        print("")
22        print(item['name'], k)
23        break
24    k = k + 1
25print("") # 换行
26
27# 显示贵州省数据
28gz = num[k]['children']
29for item in gz:
30    print(item)
31else:
32    print("\n")

输出结果如下图所示:

添加解析数据和存储文件,完整代码如下:

  1# -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第一步:抓取数据4#------------------------------------------------------------------------------5import time, json, requests6# 抓取腾讯疫情实时json数据7url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)8data = json.loads(requests.get(url=url).json()['data'])9print(data)10print(data.keys())1112# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)13num = data['areaTree'][0]['children']14print(len(num))1516# 获取贵州下标17k = 018for item in num:19    print(item['name'],end=" ")   # 不换行20    if item['name'] in "贵州":21        print("")22        print(item['name'], k)23        break24    k = k + 125print("") # 换行2627# 显示贵州省数据28gz = num[k]['children']29for item in gz:30    print(item)31else:32    print("\n")3334#------------------------------------------------------------------------------35# 第二步:解析数据36#------------------------------------------------------------------------------37# 解析确诊数据38total_data = {}39for item in gz:40    if item['name'] not in total_data:41        total_data.update({item['name']:0})42    total_data[item['name']] = item['total']['confirm']43print('确诊人数')44print(total_data)45# {'贵阳': 33, '遵义': 25, '毕节': 22, '黔南州': 17, '六盘水': 10, '铜仁': 10, '黔东南州': 10, '黔西南州': 4, '安顺': 4}4647# 解析疑似数据48total_suspect_data = {}49for item in gz:50    if item['name'] not in total_suspect_data:51        total_suspect_data.update({item['name']:0})52    total_suspect_data[item['name']] = item['total']['suspect']    53print('疑似人数')54print(total_suspect_data)5556# 解析死亡数据57total_dead_data = {}58for item in gz:59    if item['name'] not in total_dead_data:60        total_dead_data.update({item['name']:0})61    total_dead_data[item['name']] = item['total']['dead']  62print('死亡人数')63print(total_dead_data)6465# 解析治愈数据66total_heal_data = {}67for item in gz:68    if item['name'] not in total_heal_data:69        total_heal_data.update({item['name']:0})70    total_heal_data[item['name']] = item['total']['heal']71print('治愈人数')72print(total_heal_data)7374# 解析新增确诊数据75total_new_data = {}76for item in gz:77    if item['name'] not in total_new_data:78        total_new_data.update({item['name']:0})79    total_new_data[item['name']] = item['today']['confirm'] # today    80print('新增确诊人数')81print(total_new_data)8283#------------------------------------------------------------------------------84# 第三步:存储数据至CSV文件85#------------------------------------------------------------------------------86names = list(total_data.keys())          # 省份名称87num1 = list(total_data.values())         # 确诊数据88num2 = list(total_suspect_data.values()) # 疑似数据(全为0)89num3 = list(total_dead_data.values())    # 死亡数据90num4 = list(total_heal_data.values())    # 治愈数据91num5 = list(total_new_data.values())     # 新增确诊病例92print(names)93print(num1)94print(num2)95print(num3)96print(num4)97print(num5)9899# 获取当前日期命名(2020-02-13-gz.csv)
100n = time.strftime("%Y-%m-%d") + "-gz.csv"
101fw = open(n, 'w', encoding='utf-8')
102fw.write('province,confirm,dead,heal,new_confirm\n')
103i = 0
104while i<len(names):
105    fw.write(names[i]+','+str(num1[i])+','+str(num3[i])+','+str(num4[i])+','+str(num5[i])+'\n')
106    i = i + 1
107else:
108    print("Over write file!")
109    fw.close()

完整输出内容如下所示:

 1dict_keys(['lastUpdateTime', 'chinaTotal', 'chinaAdd', 'isShowAdd', 'chinaDayList', 'chinaDayAddList', 'dailyNewAddHistory', 'dailyDeadRateHistory', 'confirmAddRank', 'areaTree', 'articleList'])2343湖北 广东 河南 浙江 湖南 安徽 江西 江苏 重庆 山东 四川 黑龙江 北京 上海 福建 河北 陕西 广西 海南 云南 贵州 4贵州 2056{'name': '贵阳', 'today': {'confirm': 4, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': True}, 'total': {'confirm': 33, 'suspect': 0, 'dead': 0, 'heal': 4, 'showRate': False, 'showHeal': True, 'deadRate': 0, 'healRate': 12.12}}7{'name': '遵义', 'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': False}, 'total': {'confirm': 25, 'suspect': 0, 'dead': 0, 'heal': 1, 'showRate': False, 'showHeal': True, 'deadRate': 0, 'healRate': 4}}8{'name': '毕节', 'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': True}, 'total': {'confirm': 22, 'suspect': 0, 'dead': 0, 'heal': 4, 'showRate': False, 'showHeal': True, 'deadRate': 0, 'healRate': 18.18}}9{'name': '黔南州', 'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': True}, 'total': {'confirm': 17, 'suspect': 0, 'dead': 0, 'heal': 5, 'showRate': False, 'showHeal': True, 'deadRate': 0, 'healRate': 29.41}}
10{'name': '六盘水', 'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': True}, 'total': {'confirm': 10, 'suspect': 0, 'dead': 1, 'heal': 3, 'showRate': False, 'showHeal': True, 'deadRate': 10, 'healRate': 30}}
11{'name': '铜仁', 'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': False}, 'total': {'confirm': 10, 'suspect': 0, 'dead': 0, 'heal': 5, 'showRate': False, 'showHeal': True, 'deadRate': 0, 'healRate': 50}}
12{'name': '黔东南州', 'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': False}, 'total': {'confirm': 10, 'suspect': 0, 'dead': 0, 'heal': 2, 'showRate': False, 'showHeal': True, 'deadRate': 0, 'healRate': 20}}
13{'name': '黔西南州', 'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': True}, 'total': {'confirm': 4, 'suspect': 0, 'dead': 0, 'heal': 3, 'showRate': False, 'showHeal': True, 'deadRate': 0, 'healRate': 75}}
14{'name': '安顺', 'today': {'confirm': 0, 'suspect': 0, 'dead': 0, 'heal': 0, 'isUpdated': False}, 'total': {'confirm': 4, 'suspect': 0, 'dead': 0, 'heal': 0, 'showRate': False, 'showHeal': True, 'deadRate': 0, 'healRate': 0}}
15
16
17确诊人数
18{'贵阳': 33, '遵义': 25, '毕节': 22, '黔南州': 17, '六盘水': 10, '铜仁': 10, '黔东南州': 10, '黔西南州': 4, '安顺': 4}
19疑似人数
20{'贵阳': 0, '遵义': 0, '毕节': 0, '黔南州': 0, '六盘水': 0, '铜仁': 0, '黔东南州': 0, '黔西南州': 0, '安顺': 0}
21死亡人数
22{'贵阳': 0, '遵义': 0, '毕节': 0, '黔南州': 0, '六盘水': 1, '铜仁': 0, '黔东南州': 0, '黔西南州': 0, '安顺': 0}
23治愈人数
24{'贵阳': 4, '遵义': 1, '毕节': 4, '黔南州': 5, '六盘水': 3, '铜仁': 5, '黔东南州': 2, '黔西南州': 3, '安顺': 0}
25新增确诊人数
26{'贵阳': 4, '遵义': 0, '毕节': 0, '黔南州': 0, '六盘水': 0, '铜仁': 0, '黔东南州': 0, '黔西南州': 0, '安顺': 0}

最后采用Seaborn绘制图形如下所示:

  1# -*- coding: utf-8 -*-2#------------------------------------------------------------------------------3# 第一步:抓取数据4#------------------------------------------------------------------------------5import time, json, requests6# 抓取腾讯疫情实时json数据7url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(time.time()*1000)8data = json.loads(requests.get(url=url).json()['data'])9print(data)10print(data.keys())1112# 统计省份信息(34个省份 湖北 广东 河南 浙江 湖南 安徽....)13num = data['areaTree'][0]['children']14print(len(num))1516# 获取贵州下标17k = 018for item in num:19    print(item['name'],end=" ")   # 不换行20    if item['name'] in "贵州":21        print("")22        print(item['name'], k)23        break24    k = k + 125print("") # 换行2627# 显示贵州省数据28gz = num[k]['children']29for item in gz:30    print(item)31else:32    print("\n")3334#------------------------------------------------------------------------------35# 第二步:解析数据36#------------------------------------------------------------------------------37# 解析确诊数据38total_data = {}39for item in gz:40    if item['name'] not in total_data:41        total_data.update({item['name']:0})42    total_data[item['name']] = item['total']['confirm']43print('确诊人数')44print(total_data)45# {'贵阳': 33, '遵义': 25, '毕节': 22, '黔南州': 17, '六盘水': 10, '铜仁': 10, '黔东南州': 10, '黔西南州': 4, '安顺': 4}4647# 解析疑似数据48total_suspect_data = {}49for item in gz:50    if item['name'] not in total_suspect_data:51        total_suspect_data.update({item['name']:0})52    total_suspect_data[item['name']] = item['total']['suspect']    53print('疑似人数')54print(total_suspect_data)5556# 解析死亡数据57total_dead_data = {}58for item in gz:59    if item['name'] not in total_dead_data:60        total_dead_data.update({item['name']:0})61    total_dead_data[item['name']] = item['total']['dead']  62print('死亡人数')63print(total_dead_data)6465# 解析治愈数据66total_heal_data = {}67for item in gz:68    if item['name'] not in total_heal_data:69        total_heal_data.update({item['name']:0})70    total_heal_data[item['name']] = item['total']['heal']71print('治愈人数')72print(total_heal_data)7374# 解析新增确诊数据75total_new_data = {}76for item in gz:77    if item['name'] not in total_new_data:78        total_new_data.update({item['name']:0})79    total_new_data[item['name']] = item['today']['confirm'] # today    80print('新增确诊人数')81print(total_new_data)8283#------------------------------------------------------------------------------84# 第三步:存储数据至CSV文件85#------------------------------------------------------------------------------86names = list(total_data.keys())          # 省份名称87num1 = list(total_data.values())         # 确诊数据88num2 = list(total_suspect_data.values()) # 疑似数据(全为0)89num3 = list(total_dead_data.values())    # 死亡数据90num4 = list(total_heal_data.values())    # 治愈数据91num5 = list(total_new_data.values())     # 新增确诊病例92print(names)93print(num1)94print(num2)95print(num3)96print(num4)97print(num5)9899# 获取当前日期命名(2020-02-13-gz.csv)
100n = time.strftime("%Y-%m-%d") + "-gz-4db.csv"
101fw = open(n, 'w', encoding='utf-8')
102fw.write('province,type,data\n')
103i = 0
104while i<len(names):
105    fw.write(names[i]+',confirm,'+str(num1[i])+'\n')
106    fw.write(names[i]+',dead,'+str(num3[i])+'\n')
107    fw.write(names[i]+',heal,'+str(num4[i])+'\n')
108    fw.write(names[i]+',new_confirm,'+str(num5[i])+'\n')
109    i = i + 1
110else:
111    print("Over write file!")
112    fw.close()
113
114#------------------------------------------------------------------------------
115# 第四步:调用Seaborn绘制柱状图
116#------------------------------------------------------------------------------
117import time
118import matplotlib
119import numpy as np
120import seaborn as sns
121import pandas as pd
122import matplotlib.pyplot as plt
123
124# 读取数据
125n = time.strftime("%Y-%m-%d") + "-gz-4db.csv"
126data = pd.read_csv(n)
127
128# 设置窗口
129fig, ax = plt.subplots(1,1)
130print(data['province'])
131
132# 设置绘图风格及字体
133sns.set_style("whitegrid",{'font.sans-serif':['simhei','Arial']})
134
135# 绘制柱状图
136g = sns.barplot(x="province", y="data", hue="type", data=data, ax=ax,
137            palette=sns.color_palette("hls", 8))
138
139# 设置Axes的标题
140ax.set_title('贵州2月13日疫情最新情况')
141
142# 设置坐标轴文字方向
143ax.set_xticklabels(ax.get_xticklabels(), rotation=-60)
144
145# 设置坐标轴刻度的字体大小
146ax.tick_params(axis='x',labelsize=8)
147ax.tick_params(axis='y',labelsize=8)
148
149plt.show()

贵州省2月13日疫情显示结果如下所示:

总结

写到这里,第一篇疫情分析的文章就讲解完毕,希望对您有所帮助。主要包括两部分内容:

  • 实时数据爬取

  • 可视化分析

后续还会分享GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。如果文章对您有所帮助,将是我写作的最大动力。

同时,向钟院士致敬,向一线工作者致敬。侠之大者,为国为民。咱们中国人一生的最高追求,为天地立心,为生民立命,为往圣继绝学,为万世开太平。以一人之力系万民康乐,以一身犯险保大业安全。他们真是做到了,武汉加油,中国加油!

(By:Eastmount 2020-02-17 晚上9点夜于贵阳 http://blog.csdn.net/eastmount/)

原文链接:

https://blog.csdn.net/Eastmount/article/details/104298388

本文为CSDN博客专家文章,转载请注明出处。

【End】

技术战“疫”,贾扬清、李飞飞给程序员直播讲AI技术

2月18日、2月20日,阿里云CIO学院攻“疫”技术课程正式开启。您将获得与达摩院数据库首席科学家 、阿里巴巴集团副总裁、ACM 杰出科学家李飞飞,Caffe之父、ONNX创始人、阿里巴巴集团副总裁贾扬清,阿里巴巴集团副总裁、阿里 CIO 学院院长胡臣杰等顶级技术专家直播互动的机会。

推荐阅读 

☞iPhone 9或于4月3日发布;复制粘贴之父Larry Tesler去世;Android 11开发者预览版来了!| 极客头条

☞10 万阿里人都爱用的网红工具,语雀如何“用保护钱包的技术在保护文档安全”?

☞超赞的PyTorch资源大列表,GitHub标星9k+,中文版也上线了

☞“删库跑路”这件事情真的发生了 ,还是技术总监干的!

☞别再用那些已经淘汰的技术了!2020 年 9 大顶级 Java 框架出炉!!

☞31岁年薪50万:“复工第一天,谢谢裁掉我!” 有底气的人生无需解释!

你点的每一个在看,我认真当成了喜欢

猛戳“阅读原文”,立即加入!

Python 大数据分析疫情:如何实现实时数据爬取及 Matplotlib 可视化?相关推荐

  1. [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势

    思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图显示.情感分析.舆情分析.主题挖掘.威胁情报溯源.知识图谱.预测预警及AI和NL ...

  2. 基于python的自媒体和官媒数据爬取、对比可视化分析及云词图提取关键词

    创作不易,如果以下内容对你有帮助,别忘了点一个赞,让更多的小伙伴能看到吧~~ 1. 问题描述 为了研究自媒体和官媒的传播新闻<武汉快递小哥汪勇的先进事迹>的及时性和传播力度,对比两种传播途 ...

  3. 基于python的自媒体和官媒数据爬取、可视化分析及云词图制作

    创作不易,如果以下内容对你有帮助,别忘了点一个赞,让更多的小伙伴能看到吧~~ 1. 问题描述 为了研究自媒体和官媒的传播新闻<武汉快递小哥汪勇的先进事迹>的及时性和传播力度,对比两种传播途 ...

  4. python大作业爬虫_Python爬虫学习-爬取大规模数据(10w级)

    编译环境:python v3.5.0, mac osx 10.11.4 python爬虫基础知识: Python爬虫学习-基础爬取 了解数据库 MongoDB 数据库是储存数据的地方,可以将如下的字典 ...

  5. python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它

    不论是自然语言处理还是计算机视觉,做机器学习算法总会存在数据不足的情况,而这个时候就需要我们用爬虫获取一些额外数据.这个项目介绍了如何用 Python 登录各大网站,并用简单的爬虫获取一些有用数据,目 ...

  6. 【Python爬虫学习笔记12】Ajax数据爬取简介

    有时候在我们设计利用requests抓取网页数据的时候,会发现所获得的结果可能与浏览器显示给我们的不一样:比如说有的信息我们通过浏览器可以显示,但一旦用requests却得不到想要的结果.这种现象是因 ...

  7. Python爬虫:用BeautifulSoup进行NBA数据爬取

    爬虫主要就是要过滤掉网页中没用的信息.抓取网页中实用的信息 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解.如网页的标签,网页的语言等知识,推荐去W3School: W3s ...

  8. python爬虫基础(12:app数据爬取)

    我们之前一直都在爬取网页数据,但有些企业并没有提供web网页服务,而是提供了app服务,还有些web网页数据的各种反爬虫措施太牛逼,这时候如果从app端爬取兴许更容易得多,本篇就来介绍app数据如何爬 ...

  9. Python之Scrapy爬虫(热门网站数据爬取)

    第一关:猫眼电影排行TOP100信息爬取 代码: item.py文件 import scrapy class MaoyanItem(scrapy.Item):#********** Begin *** ...

最新文章

  1. nstimer循环引用_NSTimer定时器进阶——详细介绍,循环引用分析与解决
  2. 如何在Atomic主机上远程使用 Docker
  3. Java工程师成神之路 转
  4. python 多分类逻辑回归_机器学习实践:多分类逻辑回归(softmax回归)的sklearn实现和tensorflow实现...
  5. 使用DOM解析常用方法
  6. java图片预览上传_Java实现图片上传预览 (使用ajax提交)
  7. 光学模拟 Android,基于Android平台的光学字符识别应用的设计与实现
  8. python多进程怎么样_Python执行多进程任务的方法
  9. kafka--Struct Streaming--console案例入门
  10. python数据库操作——连接Oracle
  11. pip install numpy 安装numpy失败
  12. Excel在筛选后进行排序的函数
  13. pyTorch常用工具包
  14. 安装windows系统后或者格式化后,u盘容量变小怎么恢复
  15. matlab如何求有约束最优化最大值,6.4.2有约束最优化问题的求解-东北大学数学系.ppt...
  16. 2021年全球AFM探针收入大约230.8百万美元,预计2028年达到374.9百万美元
  17. 笔记代码(各种算法实现)
  18. 人力外派和猎头的区别是什么?哪个行业更赚钱?
  19. 运维人员必会的系统安全
  20. java枚举类型及枚举集合

热门文章

  1. Kettle计算器的使用以及字符串格式化
  2. Django中的ORM进阶操作
  3. Could not create the view An unexpected exception……的问题
  4. android中执行(定时任务)的方法及6位随机码的产生
  5. 10款新鲜出炉的 jQuery 插件
  6. 如何关闭快递收货隐私手机号 拼多多
  7. Java入门学习笔记之变量与计算
  8. bat批处理命令拨号上网
  9. android多击事件_Android中的多击事件
  10. 力扣--260只出现一次的数字I-III