diff --git a/.idea/wuhan_2019-nCoV.iml b/.idea/wuhan_2019-nCoV.iml
index cd37703..df82b1e 100644
--- a/.idea/wuhan_2019-nCoV.iml
+++ b/.idea/wuhan_2019-nCoV.iml
@@ -5,6 +5,13 @@
+
+
+
+
+
+
+
diff --git a/README.MD b/README.MD
index 6fb4a1b..1c5f854 100644
--- a/README.MD
+++ b/README.MD
@@ -4,8 +4,8 @@
- 数据获取与分析提取
- china_shapfiles
- 地图基础数据
- - nCov_map_visualization
- - 疫情数据可视化,包含全国疫情地图、世界疫情地图、主要省份疫情地、图全国疫情随时间变化图
+ - nCov_basemap_visualization
+ - 疫情数据可视化,包含全国疫情地图、世界疫情地图、主要省份疫情地图、全国疫情随时间变化图
#### 1. 数据来源
- 数据来源,腾讯新闻:https://news.qq.com/zt2020/page/feiyan.htm
@@ -22,4 +22,5 @@
- 中国截止目前累积数据、每日累积的数据(1月13日开始进行每日数据统计)
#### 4. 数据可视化
-
+- 方式1:
+- 方式2:使用 basemap + matplotlib
diff --git "a/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/001_basemap_\347\273\230\345\210\266\344\270\226\347\225\214\345\234\260\345\233\276.py" "b/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/001_basemap_\347\273\230\345\210\266\344\270\226\347\225\214\345\234\260\345\233\276.py"
new file mode 100644
index 0000000..871614c
--- /dev/null
+++ "b/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/001_basemap_\347\273\230\345\210\266\344\270\226\347\225\214\345\234\260\345\233\276.py"
@@ -0,0 +1,28 @@
+# -*- coding:utf-8 -*-
+# project_xxx\venv\Scripts python
+
+'''
+Author: Felix
+WeiXin: AXiaShuBai
+Email: xiashubai@gmail.com
+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()
\ No newline at end of file
diff --git "a/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/002_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276_GADM\345\234\260\345\233\276\346\226\207\344\273\266.py" "b/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/002_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276_GADM\345\234\260\345\233\276\346\226\207\344\273\266.py"
new file mode 100644
index 0000000..3c36c15
--- /dev/null
+++ "b/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/002_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276_GADM\345\234\260\345\233\276\346\226\207\344\273\266.py"
@@ -0,0 +1,38 @@
+# -*- coding:utf-8 -*-
+# project_xxx\venv\Scripts python
+
+'''
+Author: Felix
+WeiXin: AXiaShuBai
+Email: xiashubai@gmail.com
+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()
\ No newline at end of file
diff --git "a/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/003_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276_GitHub\344\270\212\347\232\204\344\270\255\345\233\275\345\234\260\345\233\276\346\225\260\346\215\256.py" "b/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/003_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276_GitHub\344\270\212\347\232\204\344\270\255\345\233\275\345\234\260\345\233\276\346\225\260\346\215\256.py"
new file mode 100644
index 0000000..a2bf5ac
--- /dev/null
+++ "b/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/003_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276_GitHub\344\270\212\347\232\204\344\270\255\345\233\275\345\234\260\345\233\276\346\225\260\346\215\256.py"
@@ -0,0 +1,34 @@
+# -*- coding:utf-8 -*-
+# project_xxx\venv\Scripts python
+
+'''
+Author: Felix
+WeiXin: AXiaShuBai
+Email: xiashubai@gmail.com
+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()
\ No newline at end of file
diff --git "a/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/004_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276\345\271\266\344\270\212\350\211\262.py" "b/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/004_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276\345\271\266\344\270\212\350\211\262.py"
new file mode 100644
index 0000000..3d8054a
--- /dev/null
+++ "b/basemap_matplotlib_\344\275\277\347\224\250\346\241\210\344\276\213/004_basemap_\347\273\230\345\210\266\344\270\255\345\233\275\345\234\260\345\233\276\345\271\266\344\270\212\350\211\262.py"
@@ -0,0 +1,40 @@
+# -*- coding:utf-8 -*-
+# project_xxx\venv\Scripts python
+
+'''
+Author: Felix
+WeiXin: AXiaShuBai
+Email: xiashubai@gmail.com
+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()
+
diff --git "a/nCov_basemap_visualization/2019-nCoV\347\226\253\346\203\205\345\217\230\345\214\226\346\227\266\351\227\264\345\233\276.png" "b/nCov_basemap_visualization/2019-nCoV\347\226\253\346\203\205\345\217\230\345\214\226\346\227\266\351\227\264\345\233\276.png"
new file mode 100644
index 0000000..1ca8f5d
Binary files /dev/null and "b/nCov_basemap_visualization/2019-nCoV\347\226\253\346\203\205\345\217\230\345\214\226\346\227\266\351\227\264\345\233\276.png" differ
diff --git a/nCov_basemap_visualization/nCov_basemap_matplotlib_visual.py b/nCov_basemap_visualization/nCov_basemap_matplotlib_visual.py
new file mode 100644
index 0000000..1dabf8f
--- /dev/null
+++ b/nCov_basemap_visualization/nCov_basemap_matplotlib_visual.py
@@ -0,0 +1,57 @@
+# -*- coding:utf-8 -*-
+# project_xxx\venv\Scripts python
+
+'''
+Author: Felix
+WeiXin: AXiaShuBai
+Email: xiashubai@gmail.com
+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')
diff --git a/nCov_data_analysis/china_data_analysis.py b/nCov_data_analysis/china_data_analysis.py
index 7a4c568..61071aa 100644
--- a/nCov_data_analysis/china_data_analysis.py
+++ b/nCov_data_analysis/china_data_analysis.py
@@ -12,7 +12,7 @@
import a_get_html
-class WorldData():
+class ChinaData():
def __init__(self):
self.ncovdata = a_get_html.nCovData()
@@ -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):
@@ -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()
diff --git a/nCov_data_analysis/city_data_analysis.py b/nCov_data_analysis/city_data_analysis.py
index d9e90ae..bf0087a 100644
--- a/nCov_data_analysis/city_data_analysis.py
+++ b/nCov_data_analysis/city_data_analysis.py
@@ -9,6 +9,8 @@
Date: 2020/1/30 22:11
Desc:
'''
+# 获取每个省份下各地级市详细数据,以湖北举例说明
+# 其它省份获取一样,若要全部获取,可以使用使用循环取出每一个省份,然后再取出每个省份下地级市的数据
import a_get_html
@@ -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()
@@ -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()