精华内容
下载资源
问答
  • 这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了... 本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分...

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。 本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。 看完此书,真正让你做到从入门到精通。

    ¥47.00定价:¥59.80(7.86折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。 本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。 看完此书,真正让你做到从入门到精通。

    ¥47.00定价:¥59.80(7.86折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥60.10定价:¥60.10

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥43.13定价:¥343.43(1.26折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥59.58定价:¥59.90(9.95折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥59.78定价:¥59.93(9.98折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥44.85定价:¥61.29(7.32折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥56.00定价:¥59.95(9.35折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥32.23定价:¥332.23(0.98折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥33.23定价:¥238.23(1.4折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥35.00定价:¥253.13(1.39折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥49.91定价:¥140.70(3.55折)

    Python网络数据爬取及分析从入门到精通(分析篇) 这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。 本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。 看完此书,真正让你做到从入门到精通。

    ¥49.80定价:¥60.06(8.3折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥43.17定价:¥59.96(7.2折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥59.58定价:¥59.90(9.95折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥50.37定价:¥59.96(8.41折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥40.00定价:¥59.95(6.68折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥32.00定价:¥232.12(1.38折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥86.89定价:¥100.32(8.67折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥55.61定价:¥59.80(9.3折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥70.10定价:¥210.77(3.33折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥38.81定价:¥238.80(1.63折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥40.56定价:¥240.56(1.69折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥37.39定价:¥237.38(1.58折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥41.66定价:¥191.65(2.18折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥59.78定价:¥59.93(9.98折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥34.41定价:¥345.51(1折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥43.48定价:¥343.78(1.27折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥51.10定价:¥60.86(8.4折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥51.10定价:¥60.86(8.4折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥38.27定价:¥59.80(6.4折)

    这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。看完此书,真正让你做到从入门到精通。

    ¥26.44定价:¥226.44(1.17折)

    Python网络数据爬取及分析从入门到精通(爬取篇) 这是一套以实例为主、使用Python语言讲解网络数据爬虫及分析的实战指南。本套书通俗易懂,涵盖了Python基础知识、数据爬取、数据分析、数据预处理、数据可视化、数据存储、算法评估等多方面知识,每一部分知识都从安装过程、导入扩展包到算法原理、基础语法,再结合实例进行详细讲解。 本套书包括两本:《Python网络数据爬取及分析从入门到精通(爬取篇)》和《Python网络数据爬取及分析从入门到精通(分析篇)》。 看完此书,真正让你做到从入门到精通。

    ¥30.50定价:¥59.80(5.11折)

    展开全文
  • (1)分析有效的url,及数据的形式 静态数据:服务器已经渲染好的内容,直接发送给浏览器,浏览器解释执行 动态数据:如果点击下一页地址栏没有发生任何变化(说明是动态数据) 说明数据是后来被渲染到HTML中的 (2)...

    url为网址,?号之后为请求参数,参数之间使用&符号进行连接

    (1)分析有效的url,及数据的形式
    静态数据:服务器已经渲染好的内容,直接发送给浏览器,浏览器解释执行

    动态数据:如果点击下一页地址栏没有发生任何变化(说明是动态数据) 说明数据是后来被渲染到HTML中的

    (2)编写Python代码,向服务器发送请求,获取数据

    需要使用到第三方模块 requests(请求),可以模拟浏览器向服务器发送请求,获取响应结果

    第三方模块(相当于后下载的美颜相机,安装才能使用),不是Python自带的,需要安装才能使用,安装方式pip install requests

    技巧:第三方模块安装的语法 pip install XXXX 使用之前需要先导入

    提供商品的编号,使用python程序向服务器发送请求,获取响应数据,根据key获取值,可以得到当前商品的最大评论页数

    一个.xlsx文件,称为一个工作簿
    一个工作簿中有三个工作表sheet1,sheet2,sheet3

    def save(lst):
        wk=openpyxl.Workbook() #创建工作簿对象
            sheet=wk.active #获取活动表
        #遍历列表,将列表中的数据添加到工作表中,列表中的一条数据,在excel中是一行
           for item in lst:
            sheet.append(item)
        wk.save(‘销售数据.xlsx’)

    技术本身没有对与错,关键看你用在什么地方

    第一个工作结束了,python爬虫

    数据分析,分析不同码数的鞋子的销量
    import    openpyxl
    #从excel中读取数据
    wk=openpyxl.load_workbook(‘销售数据.xlsx')
    sheet=wk.active  #获取活动sheet表
    #获取最大行数和最大列数
    rows=sheet.max_row        #100行
    cols=sheet.max_column    #3列
    print(rows,cols)

    数据清洗

    lst=[]  #用于存储鞋码
    for i in range(1,rows+1):
        size=sheet.cell(i, 3).value
        lst.append(size)

    for item in lst:
        print(item)

    从excel中将鞋子码数数据读取完毕,添加到列表中,以下操作,开始数据统计,统计不同码数的鞋子标售,python中有一种数据结构叫字典,使用鞋码作key,使用销售数量作value

    dic_size={}
    for item in lst:
        dic_size[item]=0

    for item in dic_size:
        print(item, dic_size[item])

    for item in lst:
        for size in dic_size:
            if item==size:
                dic_size[size]+=1
                break
    for item in dic_size:
        print(item, dic_size[item])

    lst_total=[]
    for item in dic_size:
        lst_total.append([item,dic_size[item],dic_size[item]/100*1.0])
    for item in lst_total:
        print(item)

    数据统计完毕,开始进行数据可视化

    import matplotlib.pyplot as pit
    labels=[item[0] +'码' for item in lst_total] #使用列表生成式,得到饼图的标签
    fraces=[item[2] for item in lst_total] #饼图中的数据源
    pit.rcParams['font.family']=['SimHei'] #中文乱码
    pit.pie(x=fraces,label=labels,autopct='%1.1f%%')
    pit.show()
    pit.savefig('图.jpg')

    python不是一个很好的主攻,但是是一个很好的神助攻


     

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

    c921eb30b6c6653029ac80f7cfb78b02.gif

    29c52831adfb4361baf72d0e4f101ee6.png

    作者 | 杨秀璋

    来源 | CSDN博客专家Eastmount

    责编 | 夕颜

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

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

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

    f8d911d611b4b742695942e5d4c3e12b.png

    Python实时数据爬取

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

    爬虫目标网站:

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

    第一步 分析网站

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

    da77765b670c1a1ec4a7c3e1d1ec3031.png

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

    39ba5fe43494780db7667e2caa624ae6.png

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

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

     1# -*- coding: utf-8 -*-
    2
    3#------------------------------------------------------------------------------
    4# 第一步:抓取数据
    5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/104093197
    6#------------------------------------------------------------------------------
    7import time, json, requests
    8# 抓取腾讯疫情实时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")                     # 换行

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

    27cdb0bdcc277fc6ad9bcd50299efc76.png

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

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

     1# -*- coding: utf-8 -*-
    2
    3#------------------------------------------------------------------------------
    4# 第一步:抓取数据
    5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/104093197
    6#------------------------------------------------------------------------------
    7import time, json, requests
    8# 抓取腾讯疫情实时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表示治愈。

    675ae3a2ef38411a5c5ca56e56644fd8.png

    我们将所抓取的数据和真实的数据进行对比,武汉截止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}}

    6bd2257524482f2323bfb33bd0ea60c9.png

    第四步 获取各省确诊人数

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

     1# -*- coding: utf-8 -*-
    2
    3#------------------------------------------------------------------------------
    4# 第一步:抓取数据
    5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/104093197
    6#------------------------------------------------------------------------------
    7import time, json, requests
    8# 抓取腾讯疫情实时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}

    输出结果如下图所示:

    8814d90a304f36aed51459494d5b9919.png

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

    3027851dae637d92396bfa4d1fee2306.png

    Matplotlib绘制全国各地区柱状图

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

     1# -*- coding: utf-8 -*-
    2
    3#------------------------------------------------------------------------------
    4# 第一步:抓取数据
    5#------------------------------------------------------------------------------
    6import time, json, requests
    7# 抓取腾讯疫情实时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()

    输出结果如下图所示:

    27a9c68ea83da444795f66b81cafd7f6.png

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

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

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

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

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

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

      1# -*- coding: utf-8 -*-
    2
    3#------------------------------------------------------------------------------
    4# 第一步:抓取数据
    5#------------------------------------------------------------------------------
    6import time, json, requests
    7# 抓取腾讯疫情实时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# 解析疑似数据
    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)
    46
    47# 解析死亡数据
    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)
    55
    56# 解析治愈数据
    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)
    64
    65# 解析新增确诊数据
    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)
    73
    74#------------------------------------------------------------------------------
    75# 第二步:绘制柱状图
    76#------------------------------------------------------------------------------
    77import matplotlib.pyplot as plt 
    78import numpy as np
    79
    80plt.figure(figsize=[10,6])
    81plt.rcParams['font.sans-serif'] = ['SimHei']  #用来正常显示中文标签
    82plt.rcParams['axes.unicode_minus'] = False    #用来正常显示负号
    83
    84#-----------------------------1.绘制确诊数据-----------------------------------
    85p1 = plt.subplot(221)
    86
    87# 获取数据
    88names = total_data.keys()
    89nums = total_data.values()
    90print(names)
    91print(nums)
    92print(total_data)
    93plt.bar(names, nums, width=0.3, color='green')
    94
    95# 设置标题
    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可视化。

    350c11b9e582a820c034bb7975c2f4b9.png

    2dbb1dd72937a7c6df32de23ad95a1dc.png

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

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

    • 安装:pip install seaborn

    48dff53be8267eaa6b635db67e0424a2.png

    1.文件写入

     1# -*- coding: utf-8 -*-
    2#------------------------------------------------------------------------------
    3# 第一步:抓取数据
    4#------------------------------------------------------------------------------
    5import time, json, requests
    6# 抓取腾讯疫情实时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 i95    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()

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

    104ff7edb815bfb64e95adf313fc9ddf.png

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

    a6e6d79e18d0271dbc3e12f70ea56d60.png

    2.Seaborn绘制柱状图

     1# -*- coding: utf-8 -*-
    2#------------------------------------------------------------------------------
    3# 第三步:调用Seaborn绘制柱状图
    4#------------------------------------------------------------------------------
    5import time
    6import matplotlib
    7import numpy as np
    8import seaborn as sns
    9import 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()

    显示结果如下图所示:

    e5c905d2d4584131e4ba936fa048dee8.png

    0dab67ad19f951b4e4a0fa58a64d6487.png

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

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

    36d451e46fb562a46b748865c6407952.png

      1# -*- coding: utf-8 -*-
    2#------------------------------------------------------------------------------
    3# 第一步:抓取数据
    4#------------------------------------------------------------------------------
    5import time, json, requests
    6# 抓取腾讯疫情实时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-4db.csv"
    91fw = open(n, 'w', encoding='utf-8')
    92fw.write('province,tpye,data\n')
    93i = 0
    94while i 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()

    此时绘制如下图所示:

    a4c14fb7f6d7cfa26d83a4581aeaeabc.png

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

    • 归一化处理

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

     1# -*- coding: utf-8 -*-
    2#------------------------------------------------------------------------------
    3# 第三步:调用Seaborn绘制柱状图
    4#------------------------------------------------------------------------------
    5import time
    6import matplotlib
    7import numpy as np
    8import seaborn as sns
    9import 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()

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

    928be446b832a9c285dfb94b317ba86d.png

    c39e5e48dfbe4430964c052c5a72375a.png

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

    1.湖北省内外对比图

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

    ba63077155dfcc4537bc485fbc3926a8.png

     1# -*- coding: utf-8 -*-
    2#------------------------------------------------------------------------------
    3# 第三步:调用Seaborn绘制柱状图
    4#------------------------------------------------------------------------------
    5import time
    6import matplotlib
    7import numpy as np
    8import seaborn as sns
    9import 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()

    输出结果如下图所示:

    97bbc410a7fc22ca77b55f40e40bbb37.png

    2.疫情趋势图

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

     1# -*- coding: utf-8 -*-
    2# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/104093197
    3import time, json, requests
    4from datetime import datetime
    5import matplotlib.pyplot as plt
    6import matplotlib.dates as mdates
    7
    8# 抓取腾讯疫情实时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=(108))
    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()
    输出结果如下图所示,疑似人数开始下降。武汉加油,中国必胜!

    2ab94bc709c83d70fbcda785e53275ea.png

    e89b01000ecf394625783bbe7a614747.png

    Seaborn绘制其他图形及分析

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

    KDE图

     1# -*- coding: utf-8 -*-
    2#------------------------------------------------------------------------------
    3# 第四步:调用Seaborn绘制其他图形
    4#------------------------------------------------------------------------------
    5import time
    6import matplotlib
    7import numpy as np
    8import seaborn as sns
    9import 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()

    显示如下图所示:

    2f7f9cb3dea7c7390005bbed1e67fc60.png

    六角形

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

    d5c57445401041ea0b49396ee120fc59.png

    散点图

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

    047338b9ad3b3ae7432db9c0f8f4f181.png

    回归图

    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))

    a62f4d78c3e05b81f5c15565114fc1cc.png

    be807323c6df12b64a15bc78e1697261.png

    贵州省可视化分析

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

     1 -*- coding: utf-8 -*-
    2#------------------------------------------------------------------------------
    3# 第一步:抓取数据
    4#------------------------------------------------------------------------------
    5import time, json, requests
    6# 抓取腾讯疫情实时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")

    输出结果如下图所示:

    608d8b491a809528ad389e37ea75e238.png

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

      1# -*- coding: utf-8 -*-
    2#------------------------------------------------------------------------------
    3# 第一步:抓取数据
    4#------------------------------------------------------------------------------
    5import time, json, requests
    6# 抓取腾讯疫情实时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")
    33
    34#------------------------------------------------------------------------------
    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}
    46
    47# 解析疑似数据
    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)
    55
    56# 解析死亡数据
    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)
    64
    65# 解析治愈数据
    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)
    73
    74# 解析新增确诊数据
    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)
    82
    83#------------------------------------------------------------------------------
    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)
    98
    99# 获取当前日期命名(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 + 1107else:108    print("Over write file!")109    fw.close()

    完整输出内容如下所示:

    4c7e1fe4acd2bea47ba31da6485b974a.png

     1dict_keys(['lastUpdateTime''chinaTotal''chinaAdd''isShowAdd''chinaDayList''chinaDayAddList''dailyNewAddHistory''dailyDeadRateHistory''confirmAddRank''areaTree''articleList'])
    234
    3湖北 广东 河南 浙江 湖南 安徽 江西 江苏 重庆 山东 四川 黑龙江 北京 上海 福建 河北 陕西 广西 海南 云南 贵州 
    4贵州 20
    5
    6{'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, requests
    6# 抓取腾讯疫情实时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")
    33
    34#------------------------------------------------------------------------------
    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}
    46
    47# 解析疑似数据
    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)
    55
    56# 解析死亡数据
    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)
    64
    65# 解析治愈数据
    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)
    73
    74# 解析新增确诊数据
    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)
    82
    83#------------------------------------------------------------------------------
    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)
    98
    99# 获取当前日期命名(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 i105    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日疫情显示结果如下所示:

    662783241c9388ade1e6ccc748fba9a2.png

    95476f9f7e1f8b98d177a4aa07ab8852.png

    a5952ee25685e07b93d0fe9ffa9db098.png

    总结

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

    • 实时数据爬取

    • 可视化分析

    后续还会分享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 学院院长胡臣杰等顶级技术专家直播互动的机会。

    2b2179766ab93ad3daf17421ebf6ddc1.png

    推荐阅读 iPhone 9或于4月3日发布;复制粘贴之父Larry Tesler去世;Android 11开发者预览版来了!| 极客头条10 万阿里人都爱用的网红工具,语雀如何“用保护钱包的技术在保护文档安全”?超赞的PyTorch资源大列表,GitHub标星9k+,中文版也上线了“删库跑路”这件事情真的发生了 ,还是技术总监干的!别再用那些已经淘汰的技术了!2020 年 9 大顶级 Java 框架出炉!!31岁年薪50万:“复工第一天,谢谢裁掉我!” 有底气的人生无需解释!f1ae0591caececca4346ca4f00d4f22d.png你点的每一个在看,我认真当成了喜欢猛戳“”,立即加入!
    展开全文
  • | 夕颜思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警AI和NLP应用等...

    作者 | 杨秀璋

    来源 | 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 -*-

    2

    3#------------------------------------------------------------------------------

    4# 第一步:抓取数据

    5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/104093197

    6#------------------------------------------------------------------------------

    7import time, json, requests

    8# 抓取腾讯疫情实时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 -*-

    2

    3#------------------------------------------------------------------------------

    4# 第一步:抓取数据

    5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/104093197

    6#------------------------------------------------------------------------------

    7import time, json, requests

    8# 抓取腾讯疫情实时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 -*-

    2

    3#------------------------------------------------------------------------------

    4# 第一步:抓取数据

    5# 参考文章:许老师博客 https://blog.csdn.net/xufive/article/details/104093197

    6#------------------------------------------------------------------------------

    7import time, json, requests

    8# 抓取腾讯疫情实时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 -*-

    2

    3#------------------------------------------------------------------------------

    4# 第一步:抓取数据

    5#------------------------------------------------------------------------------

    6import time, json, requests

    7# 抓取腾讯疫情实时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 -*-

    2

    3#------------------------------------------------------------------------------

    4# 第一步:抓取数据

    5#------------------------------------------------------------------------------

    6import time, json, requests

    7# 抓取腾讯疫情实时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# 解析疑似数据

    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)

    46

    47# 解析死亡数据

    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)

    55

    56# 解析治愈数据

    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)

    64

    65# 解析新增确诊数据

    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)

    73

    74#------------------------------------------------------------------------------

    75# 第二步:绘制柱状图

    76#------------------------------------------------------------------------------

    77import matplotlib.pyplot as plt

    78import numpy as np

    79

    80plt.figure(figsize=[10,6])

    81plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签

    82plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

    83

    84#-----------------------------1.绘制确诊数据-----------------------------------

    85p1 = plt.subplot(221)

    86

    87# 获取数据

    88names = total_data.keys()

    89nums = total_data.values()

    90print(names)

    91print(nums)

    92print(total_data)

    93plt.bar(names, nums, width=0.3, color='green')

    94

    95# 设置标题

    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, requests

    6# 抓取腾讯疫情实时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 i95 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 time

    6import matplotlib

    7import numpy as np

    8import seaborn as sns

    9import 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, requests

    6# 抓取腾讯疫情实时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-4db.csv"

    91fw = open(n, 'w', encoding='utf-8')

    92fw.write('province,tpye,data\n')

    93i = 0

    94while i 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 time

    6import matplotlib

    7import numpy as np

    8import seaborn as sns

    9import 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 time

    6import matplotlib

    7import numpy as np

    8import seaborn as sns

    9import 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/104093197

    3import time, json, requests

    4from datetime import datetime

    5import matplotlib.pyplot as plt

    6import matplotlib.dates as mdates

    7

    8# 抓取腾讯疫情实时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(line) # 显示网格

    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 time

    6import matplotlib

    7import numpy as np

    8import seaborn as sns

    9import 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, requests

    6# 抓取腾讯疫情实时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, requests

    6# 抓取腾讯疫情实时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")

    33

    34#------------------------------------------------------------------------------

    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}

    46

    47# 解析疑似数据

    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)

    55

    56# 解析死亡数据

    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)

    64

    65# 解析治愈数据

    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)

    73

    74# 解析新增确诊数据

    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)

    82

    83#------------------------------------------------------------------------------

    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)

    98

    99# 获取当前日期命名(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 i105 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'])

    234

    3湖北 广东 河南 浙江 湖南 安徽 江西 江苏 重庆 山东 四川 黑龙江 北京 上海 福建 河北 陕西 广西 海南 云南 贵州

    4贵州 20

    5

    6{'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, requests

    6# 抓取腾讯疫情实时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")

    33

    34#------------------------------------------------------------------------------

    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}

    46

    47# 解析疑似数据

    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)

    55

    56# 解析死亡数据

    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)

    64

    65# 解析治愈数据

    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)

    73

    74# 解析新增确诊数据

    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)

    82

    83#------------------------------------------------------------------------------

    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)

    98

    99# 获取当前日期命名(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 i105 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】

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

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

    展开全文
  • | 夕颜思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警AI和NLP应用等...
  • 思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警AI和NLP应用等。...
  • 一、主题式网络爬虫设计方案1、主题式网络爬虫名称:爬取知乎热度数据数据分析及可视化2、爬取的内容:知乎热搜的标题、排行、热度数据特征:随机、以文字和数字为主3、实现思路:首先查看所要爬取页面的源代码,...
  • 作者 | 杨秀璋来源 | CSDN博客专家Eastmount责编 | 夕颜思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、G...
  • 本文通过爬取全国各城市在售新房,进行可视化分析数据获取 通过爬取全国城市在售预售新盘,下面以获取单个城市为例,介绍爬取数据部门主要代码。 定义函数 定义好获取每个项目信息的函数。 defget_house_...
  • 起点中文网月票榜爬取及数据分析 文章目录 起点中文网月票榜爬取及数据分析1. 数据爬取1.1.1 准备1.1.2 网页分析1.1.3 层次爬取1.1.4 ...2. 数据分析及可视化 1. 数据爬取 数据爬取就是通过网络爬虫程序来获...
  • 本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于志斌的python笔记,作者志斌 Python爬虫、数据分析、网站开发等案例教程视频免费在线观看 ...
  • 这是之前做的一个小项目。这几天刚好整理了一些相关资料,顺便就...2、信息可视化,绘制户主好友间的关系网络图;3、数据挖掘,通过分析户主好友关注的公共主页,向户主推荐公共主页。项目分为三个部分,各自是人人...
  • 本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。以下文章来源于青灯编程 ,作者:清风 前言本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业...
  • 这是之前做的一个小项目。这几天刚好整理了一些相关资料,顺便就在这里做一个梳理啦~ ...2、信息可视化,绘制户主好友间的关系网络图;3、数据挖掘,通过分析户主好友关注的公共主页,向户主推荐公共主页。 ...
  • 之前和大家介绍了一些爬虫的基础知识,现在,让我们继续这一话题,今天如预期的一样,给大家介绍介绍如何爬取高德地图的POI,做一个简单的GIS空间分析,并进行可视化。关于gis制图之前很少实践过,如有不规范的地方...
  • 之前和大家介绍了一些爬虫的基础知识,现在,让我们继续这一话题,今天如预期的一样,给大家介绍介绍如何爬取高德地图的POI,做一个简单的GIS空间分析,并进行可视化。关于gis制图之前很少实践过,如有不规范的地方...
  • 我的话就出现了:所以我选的应该是箭头所指的格式的文件。②设置绘图格式和绘图风格上面的意思...首先按F12,在网络里找到列表里的postion开头的内容,然后找到请求头(其他浏览器可能是Rrequest什么的)将请求头里的...
  • 很久没写了,今天写一个关于Python爬取网络数据然后数据清洗拆分,最后通过词云图可视化的练手小项目。主要学习Python网络爬虫、解Json,存储CSV文件,再读取爬回来的CSV进行数据清洗和分词,最后用词云图可视化提供...
  • 本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 以下文章来源于csnd,作者迎风而来 转载地址 https://blog.csdn.net/fei347795790?t=1 ...
  • 本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 先简单介绍一下jieba中文分词包,jieba包主要有三种分词模式: 精确模式:默认情况下是...
  • 推荐大家购买作者新书《Python网络数据爬取及分析从入门到精通(分析篇)》,如果文章中存在错误或不足之处,还请海涵。 目录: 一.显示结果及安装 二.LDA主题挖掘 三.pyLDAvis可视化分析 四.小结
  • 本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于Will的大食堂,作者打饭大叔 前言 美国疫情越来越严峻,大选也进入了...
  • [Pyhon疫情大数据分析] 二.PyEcharts绘制全国各地区、某省各城市疫情地图及可视化分析 https://blog.csdn.net/Eastmount/article/details/104437215 [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和...
  • 本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于python数据分析之禅 ,作者小dull鸟 python数据分析之禅今天教大家如何用pyecharts制作微博...
  • 前言本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。先简单介绍一下jieba中文分词包,jieba包主要有三种分词模式:精确模式:默认情况下是...
  • 1.掌握网络爬虫及数据分析和处理方法 2.掌握python网络爬虫的各种模块 3.掌握数据可视化方法 二、实验内容 1.爬取腾讯视频电影信息 2.处理和保存爬取数据 3.利用pyecharts将数据可视化 三、实验过程 获取网页...
  • 前言 本文的文字图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有...本文基于这个问题,针对51job招聘网站,爬取了全国范围内大数据、数据分析数据挖掘、机器学习、人工智能等相关.

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

网络数据爬取及可视化分析