python可视化疫情事实报告(pyecharts)——可视化

目录

一、网页数据分析

2、数据的爬取

3、这里我们需要获取的数据就是山西省11市的最新报告,上代码:

二、代码实现:

1、第一步,老规矩,导入库,数据采集

2、第二步,数据的处理 

3、第三部,图表的制作

三、 成果展示

四、今日美文

         即使在劳累,也别忘记,多露出笑容。因为你是在前进,为了遇见更美更好的自己。


一、网页数据分析

1、这期我们要讲解的是用python制作疫情数据可视化类似于这样:python可视化疫情事实报告(pyecharts)——可视化_第1张图片

如何?很炫酷吧,还可以在上面点击显示数据。 不过在如此华丽的前提下我们依旧需要先获取到数据,不然哪有掉下来的馅饼呢?

2、数据的获取

这次我们需要出发的网站是这个,这里作者以山西省为例。获取数据制作可视化地图。进去之后你会发现,其实里面有很多数据都是属于隐藏的,如果用requests是很难得到的,因为是Ajax请求,属于异步加载,封装了的,就好比洋葱一样,外面还有一层壳,需要具备JS逆向才好得到(但是对比官方——全国疫情最新消息好拿多了,有兴趣的同学可以试试,虽然没有放入ajax里面,但是数据确实真实的洋葱样,作者花了一小时,最后放弃了)。教同学们一个爬虫技巧,当遇到不难爬,已经是表明了的数据时,可以用requests和urllib,但是遇到Ajax请求的封装包时,如果你技术硬,可以用JS逆向获取,但是我相信,如果技术都到那了,应该来这里也没多大意义了,是吧!当然,也不是没有办法,selenium就是最硬的道理。简单粗暴,直接模拟人工获取数据。

3、这里我们需要获取的数据就是最新报告,上代码:

二、代码实现:

1、第一步,老规矩,导入库,数据采集

# 作者:杨家乐
# 阶段:进阶练习中,请稍后.......
# 开发时间:2022/10/15 01:30
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map
from selenium.webdriver.common.by import By
from selenium import webdriver
def data_get(url):
    drive=webdriver.Chrome()
    drive.get(url)
    ls=drive.find_elements(By.CSS_SELECTOR,'.w-table-striped .w-table-tbody > tr.w-table-row')
    city=[]
    num=[]
    treatment=[]
    for i in ls:
        a=i.text.split(" ")
        city.append(a[0])
        num.append(int(a[2]))
        treatment.append(int(a[4]))
    return city,num,treatment

这里我们用人工模拟实现数据的获取,大家可以看看这个网页,会发现他的数据是嵌套的而这个的好处就是更加有利于我们数据的获取

这里作者事先在第一个函数中定义了三个列表,分别用于存储市,累计人数,治愈人数。定位得到相应数据后遍历返回到列表,最后将三个列表导出来。

2、第二步,数据的处理 

def data_set(city,num,treatment):
    data={'城市':city,
          "累计确诊":num,
          "治愈":treatment}
    df=pd.DataFrame(data=data)
    # print(df[df["治愈"]>20])打印治愈人数大于20的省份
    df.to_excel("2022年10-16山西省疫情时事报告.xlsx")#保存数据
    z1=[list(i) for i in zip(city,num)]
    del z1[2]
    return z1

获取到相对应的数据后我们将这些数据导入到excel数据表中,python可视化疫情事实报告(pyecharts)——可视化_第2张图片当然,这里你也可以不用导,作者只是习惯。每次爬虫数据都会给存储记录。因为我们要制作地图,众所周知,山西没有第12个省,而这串数据中我们得到一份境外输入的数据,再导入后我们需要将cishujv进行删除(del list_name[index])。最后,返回整理后的数据。这里作者提前将city和num打包成列表是为了方便制作图表,pyecharts制作图表的方式其实和matplotlib差不多,都是二维数组的方式。

3、第三部,图表的制作

def map_shanxi(z1):
    map=Map(init_opts=opts.InitOpts(width='500px',height='600px'))
    map.add('累计感染人数',data_pair=z1,maptype='山西',is_map_symbol_show=False)
    map.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
    map.set_global_opts(title_opts=opts.TitleOpts(title='山西省疫情最新报告',subtitle='数据来源-爬虫百度最新报告'),
                        visualmap_opts=opts.VisualMapOpts(max_=302,is_piecewise=True,range_color=['lightskyblue','orange','red']))
    map.render('山西疫情最新报告.html')

数据整理完后就到画图部分了,这里需要大家先pip install pyecharts导入相关库,具体关于pyecharts的的用法作者就不一一讲解了,因为涉及的知识也是有点多,点击这里,这位博主讲得很细,大家可以去吸收一下。最后,给大家上去全段代码

# 作者:杨家乐
# 阶段:进阶练习中,请稍后.......
# 开发时间:2022/10/15 01:30
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map
from selenium.webdriver.common.by import By
from selenium import webdriver
def data_get(url):
    drive=webdriver.Chrome()
    drive.get(url)
    ls=drive.find_elements(By.CSS_SELECTOR,'.w-table-striped .w-table-tbody > tr.w-table-row')
    city=[]
    num=[]
    treatment=[]
    for i in ls:
        a=i.text.split(" ")
        city.append(a[0])
        num.append(int(a[2]))
        treatment.append(int(a[4]))
    return city,num,treatment
def data_set(city,num,treatment):
    data={'城市':city,
          "累计确诊":num,
          "治愈":treatment}
    df=pd.DataFrame(data=data)
    # print(df[df["治愈"]>20])打印治愈人数大于20的省份
    df.to_excel("2022年10-16山西省疫情时事报告.xlsx")#保存数据
    z1=[list(i) for i in zip(city,num)]
    del z1[2]
    return z1
def map_shanxi(z1):
    map=Map(init_opts=opts.InitOpts(width='500px',height='600px'))
    map.add('累计感染人数',data_pair=z1,maptype='山西',is_map_symbol_show=False)
    map.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
    map.set_global_opts(title_opts=opts.TitleOpts(title='山西省疫情最新报告',subtitle='数据来源-爬虫百度最新报告'),
                        visualmap_opts=opts.VisualMapOpts(max_=302,is_piecewise=True,range_color=['lightskyblue','orange','red']))
    map.render('山西疫情最新报告.html')
def start():
    url='https://wx.wind.com.cn/WindSariWeb/sari/messageInfo.html?province=shanxi&lan=cn'
    city,num,treatment=data_get(url)
    z=data_set(city,num,treatment=treatment)
    map_shanxi(z1=z)
if __name__ == '__main__':
    start()

三、 成果展示

python可视化疫情事实报告(pyecharts)——可视化_第3张图片

 python可视化疫情事实报告(pyecharts)——可视化_第4张图片

四、今日美文

         即使在劳累,也别忘记,多露出笑容。因为你是在前进,为了遇见更美更好的自己。

你可能感兴趣的:(python爬虫,数据分析,数据可视化,python,爬虫,开发语言)