【python数据分析】清洗历史天气数据+图表可视化

通过爬取历史天气页面,对数据进行清洗,再形成折线图

一、用到的库

import datetime
from lxml import etree
import requests
import pandas as pd

二、目标网站

https://lishi.tianqi.com/beijing/202312.html

三、基础用法

# period_range的用法例子----返回固定的日期
pd.period_range(start='2017-01-01', end='2018-01-01', freq='M')
PeriodIndex(['2017-01', '2017-02', '2017-03', '2017-04', '2017-05', '2017-06',
         '2017-07', '2017-08', '2017-09', '2017-10', '2017-11', '2017-12',
         '2018-01'],
        dtype='period[M]')
Python内置的strftime( )函数:实现本地时间\日期的格式化(将任意格式的日期字符串按要求进行格式化)

四、爬取网页

因为要获取多个月份的数据,所以用def()函数

def get_html(month):
    headers={
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
    }
    url=f'https://lishi.tianqi.com/beijing/{month}.html'
    res=requests.get(url,headers=headers)
    data=res.text
    # print(data)
    # xpath解析
    r_html=etree.HTML(data)
    return r_html

 五、固定日期

month_list=pd.period_range(start='2020-01',end='2023-12',freq='M').strftime('%Y%m')
print(month_list)

六、加入列名

# 列名
df=pd.DataFrame(columns=['日期','最高气温','最低气温','天气','风向'])
print(df)

七、首次获取

for month in month_list:
    # 利用获取到的日期放入url中
    r_html=get_html(month)
    # print(tree)
    lis=r_html.xpath('.//div[@class="tian_three"]/ul/li//text()')
    print(lis)
    break

效果: 

八、循环获取

lists=[]
for month in month_list:
    # 利用获取到的日期放入url中
    r_html=get_html(month)
    # print(tree)
    lis=r_html.xpath('.//div[@class="tian_three"]/ul/li')
    # print(lis)
    # break
    for i in lis:
       item={
            '日期':i.xpath('./div[@class="th200"]/text()')[0],
            '最高气温':i.xpath('./div[@class="th140"]/text()')[0],
           '最低气温':i.xpath('./div[@class="th140"]/text()')[1],
           '天气':i.xpath('./div[@class="th140"]/text()')[2],
           '风向':i.xpath('./div[@class="th140"]/text()')[3],
           }
       lists.append(item)
    print(f'{month}已采集')
df=pd.DataFrame(lists)
print(df)

九、保存数据

# 存入excel表中,命名sheet名
df.to_excel('历史天气.xlsx',sheet_name='历史天气')

十、数据清洗

# 把日期列展开为多列
# 如果不是三列,那就会报错ValueError: Columns must be same length as key

data[['具体日期','星期','必备列']]=data['日期'].str.split(' ',expand=True)
print(data)

十一、转换格式

# 把最高气温的单位去掉
# 替换replace(旧值,新值)
data['最低气温']=data['最低气温'].str.replace('℃',' ').astype('float')
print(data)
# print(data.drop('日期',axis=1))
data.to_excel('历史天气.xlsx',sheet_name='表1')

十二、形成图表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值