Skip to content

Commit

Permalink
Daily Commit
Browse files Browse the repository at this point in the history
  • Loading branch information
FelixZFB committed Jan 31, 2020
1 parent be662c6 commit b3e9ece
Show file tree
Hide file tree
Showing 10 changed files with 220 additions and 11 deletions.
7 changes: 7 additions & 0 deletions .idea/wuhan_2019-nCoV.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
- 数据获取与分析提取
- china_shapfiles
- 地图基础数据
- nCov_map_visualization
- 疫情数据可视化,包含全国疫情地图、世界疫情地图、主要省份疫情地、图全国疫情随时间变化图
- nCov_basemap_visualization
- 疫情数据可视化,包含全国疫情地图、世界疫情地图、主要省份疫情地图、全国疫情随时间变化图

#### 1. 数据来源
- 数据来源,腾讯新闻:https://news.qq.com/zt2020/page/feiyan.htm
Expand All @@ -22,4 +22,5 @@
- 中国截止目前累积数据、每日累积的数据(1月13日开始进行每日数据统计)

#### 4. 数据可视化

- 方式1:
- 方式2:使用 basemap + matplotlib
28 changes: 28 additions & 0 deletions basemap_matplotlib_使用案例/001_basemap_绘制世界地图.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# -*- coding:utf-8 -*-
# project_xxx\venv\Scripts python

'''
Author: Felix
WeiXin: AXiaShuBai
Email: [email protected]
Blog: https://blog.csdn.net/u011318077
Date: 2020/1/31 14:17
Desc:
'''

# 首先导入绘图包和地图包
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# 第一步:设置图片大小及分辨率
plt.figure(figsize=(16, 8), dpi=128)

# 第二步:创建一个地图
m = Basemap()

# 第三步:绘制地图上的线条,比如海岸线,国界线
m.drawcoastlines(linewidth=1,linestyle='solid',color='black') # 绘制海岸线
m.drawcountries(linewidth=1,linestyle='solid',color='black') # 绘制国界线

# 第四步:显示图形
plt.show()
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# -*- coding:utf-8 -*-
# project_xxx\venv\Scripts python

'''
Author: Felix
WeiXin: AXiaShuBai
Email: [email protected]
Blog: https://blog.csdn.net/u011318077
Date: 2020/1/31 14:47
Desc:
'''

# 首先导入绘图包和地图包
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# 第一步:设置图片大小及分辨率
plt.figure(figsize=(16, 8), dpi=300)

# 第二步:创建一个地图,设置经度纬度范围,只显示中国区域范围,projection选择投影模式
m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
# 读取中国行政区文件,使用国即组织GADM的地图文件,网站地址https://gadm.org/country
# 大陆,台湾,港澳地区文件是分开的,都要进行读取,并且藏南地区和一些岛屿未标注出来
# 推荐使用案例003,网上已经整理好的中国地图文件
m.readshapefile('../china_shapfiles/gadm36_CHN_shp/gadm36_CHN_1', 'china', drawbounds=True)
m.readshapefile('../china_shapfiles/gadm36_HKG_shp/gadm36_HKG_1', 'hkg', drawbounds=True)
m.readshapefile('../china_shapfiles/gadm36_MAC_shp/gadm36_MAC_1', 'mac', drawbounds=True)
m.readshapefile('../china_shapfiles/gadm36_TWN_shp/gadm36_TWN_1', 'twn', drawbounds=True)

# m.readshapefile('../china_shapfiles/china-shapefiles-simple-version/china', 'china', drawbounds=True)

# 上面使用读取了本地地图文件,就不需要使用basemap绘制海岸线和国界线了,避免混乱
# 第三步:绘制地图上的线条,比如海岸线,国界线
# m.drawcoastlines(linewidth=1,linestyle='solid',color='black') # 绘制海岸线
# m.drawcountries(linewidth=1,linestyle='solid',color='black') # 绘制国界线

# 第四步:显示图形
plt.show()
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# -*- coding:utf-8 -*-
# project_xxx\venv\Scripts python

'''
Author: Felix
WeiXin: AXiaShuBai
Email: [email protected]
Blog: https://blog.csdn.net/u011318077
Date: 2020/1/31 15:31
Desc:
'''
# 首先导入绘图包和地图包
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# 第一步:设置图片大小及分辨率
plt.figure(figsize=(16, 8), dpi=300)

# 第二步:创建一个地图,设置经度纬度范围,只显示中国区域范围,projection选择投影模式,兰勃特投影
m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
# 读取中国行政区文件,使用GitHub上已经整理好的地图文件,drawbounds参数显示图形
# 藏南区域和岛屿都有明显的标注,可以对比002结果,信息更加丰富,藏南更准确
m.readshapefile('../china_shapfiles/china-shapefiles-simple-version/china', 'china', drawbounds=True)
# 九段线地图数据
m.readshapefile('../china_shapfiles/china-shapefiles-simple-version/china_nine_dotted_line', 'china', drawbounds=True)


# 上面使用读取了本地地图文件,就不需要使用basemap绘制海岸线和国界线了,避免混乱
# 第三步:绘制地图上的线条,比如海岸线,国界线
# m.drawcoastlines(linewidth=1,linestyle='solid',color='black') # 绘制海岸线
# m.drawcountries(linewidth=1,linestyle='solid',color='black') # 绘制国界线

# 第四步:显示图形
plt.show()
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# -*- coding:utf-8 -*-
# project_xxx\venv\Scripts python

'''
Author: Felix
WeiXin: AXiaShuBai
Email: [email protected]
Blog: https://blog.csdn.net/u011318077
Date: 2020/1/31 16:38
Desc:
'''
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon

# 第一步:设置图片大小及分辨率
plt.figure(figsize=(16, 8), dpi=300)

# 第二步:创建一个地图,设置经度纬度范围,只显示中国区域范围,projection选择投影模式,兰勃特投影
m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
# 读取中国行政区文件,使用GitHub上已经整理好的地图文件,drawbounds参数显示图形
# 藏南区域和岛屿都有明显的标注,可以对比002结果,信息更加丰富,藏南更准确
m.readshapefile('../china_shapfiles/china-shapefiles-simple-version/china', 'china', drawbounds=True)
# 九段线地图数据
m.readshapefile('../china_shapfiles/china-shapefiles-simple-version/china_nine_dotted_line', 'china_nine', drawbounds=True)

# 第三步:上色

ax = plt.gca()

for nshape, seg in enumerate(m.china):
poly = Polygon(seg, facecolor='red', edgecolor='black')
ax.add_patch(poly)




# 第四步:显示图形
plt.show()

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
57 changes: 57 additions & 0 deletions nCov_basemap_visualization/nCov_basemap_matplotlib_visual.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# -*- coding:utf-8 -*-
# project_xxx\venv\Scripts python

'''
Author: Felix
WeiXin: AXiaShuBai
Email: [email protected]
Blog: https://blog.csdn.net/u011318077
Date: 2020/1/31 17:18
Desc:
'''

import matplotlib.pyplot as plt
from china_data_analysis import ChinaData

# 显示中文和显示负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 绘制画布和子图对象
fig, ax1 = plt.subplots(figsize=(10, 6))

# 获取每日疫情数据,日期,确诊,疑似,死亡,治愈
date_list, everyday_confirm, everyday_suspect, everyday_dead, everyday_heal = ChinaData().china_everyday_data()

# 左Y轴绘制确诊和疑似病例曲线
ax1.plot(date_list, everyday_confirm, lw=2, ls='--', marker='o', color='red', label='确诊')
ax1.plot(date_list, everyday_suspect, lw=2, ls='--', marker='o', color='orange', label='疑似')

# 设置标题,XY轴标题,刻度
ax1.set_title("2019-nCoV疫情变化时间图", fontsize=16)
ax1.set_xlabel("2020年1月", fontsize=16)
ax1.set_xticklabels(date_list, rotation=30)
ax1.set_ylabel(r"确诊及疑似人数", fontsize=16)
ax1.set_ylim(0, 16000)
# 显示网格线和显示图例
plt.grid(which='major', axis='both', color='grey', linestyle='--', alpha=0.2)
plt.legend(loc='upper left', bbox_to_anchor=(0.3,1))


# 右Y轴绘制死亡和治愈病例曲线,共用ax1的X轴
ax2 = ax1.twinx()
ax2.plot(date_list, everyday_dead, lw=1, ls='--', marker='.', color='cyan', label='死亡')
ax2.plot(date_list, everyday_heal, lw=1, ls='--', marker='.', color='green', label='治愈')

# 设置标题刻度
ax2.set_ylabel(r"死亡及治愈人数", fontsize=16)
ax2.set_ylim(0, 400)
# 显示网格线和显示图例
plt.grid(which='major', axis='both', color='grey', linestyle='--', alpha=0.2)
plt.legend(loc='upper center')


# 展示图形
# plt.show()
# 保存图形为图片,第一个参数保存路径,第二个参数裁掉多余的空白部分
plt.savefig('2019-nCoV疫情变化时间图.png', bbox_inches='tight')
12 changes: 7 additions & 5 deletions nCov_data_analysis/china_data_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

import a_get_html

class WorldData():
class ChinaData():

def __init__(self):
self.ncovdata = a_get_html.nCovData()
Expand All @@ -21,7 +21,7 @@ def __init__(self):
def china_total_data(self):
# 累积数据汇总(实际该累积数据包含其它国家的数据),chinaTotal键对应的值就是累积数据
chinaTotal = self.all_data['chinaTotal']
print(chinaTotal)
# print(chinaTotal)
return chinaTotal

def china_everyday_data(self):
Expand All @@ -38,15 +38,17 @@ def china_everyday_data(self):
everyday_suspect.append(int(everyday['suspect']))
everyday_dead.append(int(everyday['dead']))
everyday_heal.append(int(everyday['heal']))
print(date_list)
print(everyday_confirm) # 中国累积确诊数据少于上面chinaTotal累积数据
# print(date_list)
# print(everyday_confirm) # 中国累积确诊数据少于上面chinaTotal累积数据
return date_list, everyday_confirm, everyday_suspect, everyday_dead, everyday_heal


def main(self):
self.china_total_data()
self.china_everyday_data()

if __name__ == '__main__':
world_data= WorldData()
world_data= ChinaData()
world_data.main()


8 changes: 5 additions & 3 deletions nCov_data_analysis/city_data_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
Date: 2020/1/30 22:11
Desc:
'''
# 获取每个省份下各地级市详细数据,以湖北举例说明
# 其它省份获取一样,若要全部获取,可以使用使用循环取出每一个省份,然后再取出每个省份下地级市的数据

import a_get_html

Expand All @@ -19,11 +21,11 @@ def __init__(self):
self.all_data = self.ncovdata.get_html_text()

def hubei_total_data(self):
'''获取湖北省各城市累积数据'''
'''获取湖北省各地级市累积数据'''
# areaTree对应的第一个数据就是中国,下面的children对应的就是每个省份的数据,
# 第一个省份就是湖北省,湖北省下面的children就是每个地级市的数据,也是一个列表,列表里面是字典
areaTree = self.all_data['areaTree'][0]['children'][0]['children']
print(areaTree)
# print(areaTree)
city_name = list()
city_total_confirm = list()
city_total_suspect = list()
Expand All @@ -39,7 +41,7 @@ def hubei_total_data(self):
print(city_total_confirm)

def hubei_today_data(self):
'''获取各国今日数据'''
'''获取湖北省各地级市今日数据'''
areaTree = self.all_data['areaTree'][0]['children']
city_name = list()
city_today_confirm = list()
Expand Down

0 comments on commit b3e9ece

Please sign in to comment.