数据爬虫(JSON格式)数据地图可视化(pyecharts)【步骤清晰,一看就懂】

news2024/12/23 8:29:58

一、前言

数据存储在网页上,需要爬取数据下来,数据存储格式是JSON,数据可视化在工作中也变得日益重要,接下来将数据爬虫与数据可视化结合起来,做个案例

注:当时数据是22年1月29日爬取数据

二、使用步骤

# 1.导入包
import pandas as pd 
import requests
import json



# 2.数据爬取
china_url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
}
response = requests.get(url=china_url,headers = headers).json()
data = json.loads(response['data'])

with open('1-29.json','w',encoding='utf-8') as f: 
    f.write(json.dumps(data))



# 3.存储到dataframe中
# 获取中国所有的数据
chinaAreaDict=data['areaTree'][0]
# 获取 所有省份的数据 
provinceList = chinaAreaDict['children']

'''
[{河南,安阳}{河南,许昌}], 为了方便存储到dataframe中
'''
china_cityList = []
# 遍历每一个省份数据
for x in range(len(provinceList)):

    # 省份的名称
    province = provinceList[x]['name']
    
    # 获取每一个省下的所有的城市
    province_list = provinceList[x]['children']
    
    # 遍历这个省份的所有城市【一个一个的拿出来】
    for y in range(len(province_list)):
        # 获取城市的名字
        city = province_list[y]['name']
        # 获取当前城市的总数据
        total = province_list[y]['total']
        # 获取当前城市的今日数据
        today = province_list[y]['today']
        # 保存成一个字典 {'province':province, 'city':city, 'total':total}
        china_dict = {'province':province, 'city':city, 'total':total, 'today':today}
        
        # 添加到列表中
        china_cityList.append(china_dict)

# 将放有每一个城市的列表构建成dataframe
chinaTotalData = pd.DataFrame(china_cityList)
chinaTotalData




# 4.将total列数据字典转化成多列
total_dataframe = pd.DataFrame()

def func(ser):
    global total_dataframe
    total_dataframe = total_dataframe.append(pd.Series(ser['total']).to_frame().T,ignore_index = True)

chinaTotalData.apply(func,axis=1)

# 修改列的名字
def rename_func(x):
    return "total_" + x   # total_nowConfirm

total_dataframe.rename(columns = rename_func, inplace = True)

chinaTotalData = pd.merge(chinaTotalData,total_dataframe,left_index=True,right_index=True,how='outer')
# 删除total列
chinaTotalData.drop(['total'],axis=1, inplace = True)
chinaTotalData






# 5.将today列数据字典转化成多列
total_dataframe = pd.DataFrame()

def func(ser):
    global total_dataframe
    total_dataframe = total_dataframe.append(pd.Series(ser['today']).to_frame().T,ignore_index = True)

chinaTotalData.apply(func,axis=1)

# 修改列的名字
def rename_func(x):
    return "today_" + x   # total_nowConfirm

total_dataframe.rename(columns = rename_func, inplace = True)

chinaTotalData = pd.merge(chinaTotalData,total_dataframe,left_index=True,right_index=True,how='outer')
# 删除total列
chinaTotalData.drop(['today'],axis=1, inplace = True)
chinaTotalData





# 6.保存到Excel
chinaTotalData.to_excel('1-29疫情数据.xlsx',sheet_name='数据',index=False)





# 7.根据数据绘制国内确诊人数总疫情图
from pyecharts.charts import Map  # 导入地图对象
import pyecharts


# 整理数据格式,满足地图的数据要求
data = chinaTotalData.groupby(by='province',as_index = False).sum()

data_list = list(zip(data['province'].values.tolist(),data['total_confirm'].values.tolist()))


# 创建地图对象
map_china = Map()


map_china.add(series_name='确诊病例数',data_pair=data_list)

map_china.set_global_opts(title_opts=opts.TitleOpts(title="疫情地图"),
                         visualmap_opts=opts.VisualMapOpts(
                                                                          is_piecewise=True, # 是否分段
                                                                          pieces=[{"max": 9, "min": 0, "label": "0-9","color":"#FFE4E1"},
                                                                                      {"max": 99, "min": 10, "label": "10-99","color":"#FF7F50"},
                                                                                      {"max": 499, "min": 100, "label": "100-499","color":"#F08080"},
                                                                                      {"max": 999, "min": 500, "label": "500-999","color":"#CD5C5C"},
                                                                                      {"max": 9999, "min": 1000, "label": "1000-9999", "color":"#990000"},
                                                                                      {"max": 99999, "min": 10000, "label": ">=10000", "color":"#660000"}]
                         
                         )
                         )
map_china.render_notebook()

数据展示

1.原始数据(Json)与结果集(Excel)所示:
在这里插入图片描述

2.数据地图可视化所示(当时的记录):
(1)、
请添加图片描述

(2)、
请添加图片描述

(3)、
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1274384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式数据传输及存储的C语言实现

各种类型的数据传输和存储就涉及到大小端的问题,首先要简单说下芯片的大小端问题,这里主要讨论Cortex-M内核。 M内核支持大端或者小端,实际应用中大部分内核都是小端。以STM32为例,全部都是小端,而且是芯片设计之初就固…

TR转发路由器测评—云企业网实现跨地域跨VPC的网络互通测评实战【阿里云产品测评】

文章目录 一.转发路由器 Transit Router 测评1.1 准备阶段1.2 本文测评收获1.3 什么是云企业网实例、转发路由器实例和云数据传输服务 二.使用云企业网实现跨地域跨VPC的网络互通2.2 **测试连通性**2.3 网络拓扑如下: 心得:总结: 声明&#x…

Vue+SpringBoot解决session跨域问题

做了一个前后端分离,因为前后端的 session id不一致,导致前端请求时,后端的session读取不到对应的值,造成登录问题。 解决方法: SpringBoot项目: 添加一个跨域配置 代码如下: 或者controller使用CrossOrigin Conf…

解决noauth authentication required异常

今天在使用redis数据库的时候,突然给报了个这个错误,上网一查才知道是因为 Redis 服务器需要密码进行身份验证,因此,我们需要通过auth password 进行身份验证。不过我这个密码还是试了很多次才想起来的,哦好像是听网课…

WSL2 docker GUI 界面

在 WSL2 docker 中运行GUI界面。 具体流程和远程显示Ubuntu界面类似,链接, 更简单一点, 少了 ssh 的部分。 安装好wsl2 和 docker wsl2 运行GUI程序,windows 会默认弹出窗口。 可以安装 gedit 测试一下 windows 下载并运行 Xlaunch. 运行 d…

【驱动】SPI驱动分析(二)-SPI驱动框架

SPI驱动框架 SPI驱动属于总线-设备-驱动模型的,与I2C总线设备驱动模型相比,大体框架是一样,他们都是实际的总线。总体框架如下图所示: 从上到下,分为三层,用户空间,内核空间,和硬件…

微信小程序真机调试的时候出现白屏解决办法

我使用uniapp开发微信小程序开发,使用真机调试的时候,出现白屏,页面里面啥都没有,也没有报错,这就让人很纳闷了: 解决办法: 打开真机调试,下面有:切换真机调试1.0&#…

RocketMQ-RocketMQ快速实战及集群原理

一、MQ简介 ​ MQ:MessageQueue,消息队列。是在互联网中使用非常广泛的一系列服务中间件。 这个词可以分两个部分来看,一是Message:消息。消息是在不同进程之间传递的数据。这些进程可以部署在同一台机器上,也可以分布…

虚拟机系列:Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置

Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置 Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置 在更新Oracle VM Virtua…

泛型和数据结构(树)

一&#xff1a;泛型的基本知识 泛型是用来约束操作的数据类型&#xff0c;并进行检查 基本格式&#xff1a;<数据类型> 注意&#xff1a;泛型只能支持引用数据类型&#xff0c;如果是基本数据类型&#xff0c;需要写他的包装类 先来看一下没有泛型约束的集合 我们发现此时…

【ArcGIS Pro二次开发】(78):批量合并GDB数据库

有些GDB数据库会按分幅或行政区划进行分开储存&#xff0c;尤其是一些地形测绘或国情地理数据。 如下图所示&#xff1a; 数据是完整的&#xff0c;但使用的时候要一个一个拖进地图中&#xff0c;进行分析的时候也需要将其合并后使用。 因此就做了这个合库工具。 一、要实现的…

万界星空科技仓库管理wms系统

企业在管理库存时&#xff0c;尤其是生产制造企业&#xff0c;使用传统方式比如纸笔、Excel 管理库存&#xff0c;由于工具和信息化存在局限&#xff0c;导致在管理库存时出现如下问题&#xff1a; 1、通过纸笔记录出入库申请&#xff0c;人为手动计算易出错&#xff0c;数据易…

[iOS学习笔记]浅谈RunLoop底层

RunLoop是什么&#xff1f; RunLoop是iOS开发中比较重要的知识点&#xff0c;它贯穿程序运行的整个过程。它是线程基础架构的一部分&#xff0c;是一种保障线程循环处理事件而不会退出的机制。同时也负责管理线程需要处理的事件&#xff0c;让线程有事儿时忙碌&#xff0c;没事…

键盘敲入一个字母,操作系统发生了什么?

一、设备控制器 我们的电脑设备可以接非常多的输入输出设备&#xff0c;比如鼠标键盘网卡硬盘打印机等&#xff0c;每个设备的用法和功能都不相同&#xff0c;那操作系统是如何把这些输入输出设备统一管理的呢&#xff1f; 为了屏蔽设备之间的差异&#xff0c;每个设备都有一…

rest_framework_django学习笔记一(序列化器)

rest_framework_django学习笔记一(序列化器) 一、引入Django Rest Framework 1、安装 pip install djangorestframework2、引入 INSTALLED_APPS [...rest_framework, ]3、原始RESTful接口写法 models.py from django.db import models 测试数据 仅供参考 INSERT INTO de…

我与开源的历程

我在2000年开始接触开源&#xff0c;当时在松下航空电子美国总部工作。我负责将 IFE 系统从 Win31 迁移到 Linux。作为一个完全不懂 Linux 的小白&#xff0c;我不得不找到一台笔记本电脑安装并自学 Redhat Linux 6.1。2003年回到新加坡后&#xff0c;我发现没有一个凝聚 Linux…

Java数据结构之《链式线性表的插入与删除》问题

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等偏下的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我…

Rust std fs 比 Python 慢!真的吗!?

作者&#xff1a;Xuanwo Databend Labs 成员&#xff0c;数据库研发工程师 https://github.com/xuanwo 我即将分享一个冗长的故事&#xff0c;从 OpenDAL 的 op.read()开始&#xff0c;以一个意想不到的转折结束。这个过程对我来说非常有启发性&#xff0c;我希望你也能感受到。…

记RocketMQ本地开发环境搭建始末

前言 最近工作中涉及到了RocketMQ的应用&#xff0c;为方便开发决定本地搭建一套RocketMQ的使用环境。 果然实践是个好东西... VMware虚拟环境搭建 这个网上有很多教程&#xff0c;只会比我写的详细有条理&#xff0c;这里就不在赘述了。 虚拟机搭建好之后每次重启电脑都无…

flutter开发实战-轮播Swiper更改Custom_layout样式中Widget层级

flutter开发实战-轮播Swiper更改Custom_layout样式中Widget层级 在之前的开发过程中&#xff0c;需要实现卡片轮播效果&#xff0c;但是卡片轮播需要中间大、两边小一些的效果&#xff0c;这里就使用到了Swiper。具体效果如视频所示 添加链接描述 这里需要的效果是中间大、两边…