Python期末大作业 您所在的位置:网站首页 python爬取天气后报 Python期末大作业

Python期末大作业

2023-08-16 23:29| 来源: 网络整理| 查看: 265

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

知识点:

动态数据抓包

requests发送请求

结构化+非结构化数据解析

一、开发环境:

所使用软件工具:

python 3.8 运行代码

pycharm 2022.3.2 辅助敲代码 专业版

需安装第三方模块:

requests 发送请求 pip install requests

parsel 解析数据 pip install parsel

第三方模块安装:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在pycharm中点击Terminal(终端) 输入安装命令

如果出现爆红, 可能是因为 网络连接超时, 可切换国内镜像源,命令如下:

pip install -i https://pypi.doubanio.com/simple/ requests

python资料、源码、教程\福利皆: 点击此处跳转文末名片获取

二、获取数据

导入模块

import requests # 发送请求要用的模块 需要额外安装的 import parsel import csv f = open('天气.csv', mode='a', encoding='utf-8', newline='') csv_writer = csv.writer(f) csv_writer.writerow(['日期', '最高温度', '最低温度', '天气', '风向', '城市']) city_list = [54511, 58362, 59287, 59493] for city in city_list: city_name = '' if city == 54511: city_name = '北京' elif city == 58362: city_name = '上海' elif city == 59287: city_name = '广州' elif city == 59493: city_name = '深圳' for year in range(2013, 2023): for month in range(1, 13): 完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777” url = f'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D={city}&areaInfo%5BareaType%5D=2&date%5Byear%5D={year}&date%5Bmonth%5D={month}' 发送请求 response = requests.get(url=url) 获取数据 html_data = response.json()['data'] 解析数据 select = parsel.Selector(html_data) trs = select.css('.history-table tr') # 拿到31个tr for tr in trs[1:]: # 第一个表头不要 tds = tr.css('td::text').getall() # 针对每个tr进行提取 取出所有的td里面的内容 tds.append(city_name) # 把城市追加到列表里面 print(tds) 保存数据 csv_writer.writerow(tds) 数据可视化

导入包

import pandas as pd import datetime from pyecharts import options as opts from pyecharts.charts import * from pyecharts.commons.utils import JsCode

读入数据

data = pd.read_csv('天气.csv') data

数据预览

data.sample(5)

data.info()

分割日期/星期

data[['日期','星期']] = data['日期'].str.split(' ',expand=True,n=1) data

去除多余字符

data[['最高温度','最低温度']] = data[['最高温度','最低温度']].apply(lambda x: x.str.replace('°','').replace('', '0')) data.head()

计算下雪天气

data.loc[data['天气'].str.contains('雪'),'下雪吗']='是' data.fillna('否',inplace=True)

分割日期时间

data['日期'] = pd.to_datetime(data['日期']) data[['最高温度','最低温度']] = data[['最高温度','最低温度']].astype('int') data['年份'] = data['日期'].dt.year 完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777” data['月份'] = data['日期'].dt.month data['日'] = data['日期'].dt.day # 预览 data.sample(5)

各城市初雪的时间

s_data = data[data['下雪吗']=='是'] s_data[(s_data['月份']>=9)].groupby('年份').first().reset_index()

各城市下雪天气分布

s_data.groupby(['城市','年份'])['日期'].count().to_frame('下雪天数').reset_index()

做透视表

data_bj = data[(data['年份'] == 2021) & (data['城市'] == '北京')] data_bj = data_bj.groupby(['月份','天气'], as_index=False)['日期'].count() data_pivot = pd.pivot(data_bj, values='日期', index='月份', columns='天气') data_pivot = data_pivot.astype('float') # 按照 索引年月倒序排序 data_pivot.sort_index(ascending=False,inplace=True) data_pivot

北上广深2021年10月份天气热力图分布

import matplotlib.pyplot as plt import matplotlib.colors as mcolors import seaborn as sns #设置全局默认字体 为 雅黑 plt.rcParams['font.family'] = ['Microsoft YaHei'] # 设置全局轴标签字典大小 plt.rcParams["axes.labelsize"] = 14 # 设置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei', 'SimHei']}) # 设置画布长宽 和 dpi plt.figure(figsize=(18,8),dpi=100) # 自定义色卡 cmap = mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) # 绘制热力图 ax = sns.heatmap(data_pivot, cmap=cmap, vmax=30, annot=True, # 热力图上显示数值 linewidths=0.5, ) # 将x轴刻度放在最上面 ax.xaxis.set_ticks_position('top') plt.title('北京最近10个月天气分布',fontsize=16) #图片标题文本和字体大小 plt.show()

data_gz= data[(data['年份'] == 2021) & (data['城市'] == '广州')] data_gz = data_gz.groupby(['月份','天气'], as_index=False)['日期'].count() data_sz= data[(data['年份'] == 2021) & (data['城市'] == '深圳')] 完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777” data_sz = data_sz.groupby(['月份','天气'], as_index=False)['日期'].count() data_sh= data[(data['年份'] == 2021) & (data['城市'] == '上海')] data_sh = data_sh.groupby(['月份','天气'], as_index=False)['日期'].count()

data_pivot_gz = pd.pivot(data_gz, values='日期', index='月份', columns='天气') data_pivot_gz = data_pivot_gz.astype('float') # 按照 索引年月倒序排序 data_pivot_gz.sort_index(ascending=False,inplace=True) #设置全局默认字体 为 雅黑 plt.rcParams['font.family'] = ['Microsoft YaHei'] # 设置全局轴标签字典大小 plt.rcParams["axes.labelsize"] = 14 # 设置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei', 'SimHei']}) # 设置画布长宽 和 dpi plt.figure(figsize=(18,8),dpi=100) # 自定义色卡 cmap = mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) # 绘制热力图 ax_sz = sns.heatmap(data_pivot_gz, cmap=cmap, vmax=31, annot=True, # 热力图上显示数值 linewidths=0.5, ) # 将x轴刻度放在最上面 ax_sz.xaxis.set_ticks_position('top') plt.title('广州最近10个月天气分布',fontsize=16) #图片标题文本和字体大小 plt.show()

data_pivot_sh = pd.pivot(data_sh, values='日期', index='月份', columns='天气') data_pivot_sh = data_pivot_sh.astype('float') # 按照 索引年月倒序排序 data_pivot_sh.sort_index(ascending=False,inplace=True) #设置全局默认字体 为 雅黑 plt.rcParams['font.family'] = ['Microsoft YaHei'] # 设置全局轴标签字典大小 plt.rcParams["axes.labelsize"] = 14 # 设置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei', 'SimHei']}) # 设置画布长宽 和 dpi 完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777” plt.figure(figsize=(18,8),dpi=100) # 自定义色卡 cmap = mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) # 绘制热力图 ax_sz = sns.heatmap(data_pivot_sh, cmap=cmap, vmax=31, annot=True, # 热力图上显示数值 linewidths=0.5, ) # 将x轴刻度放在最上面 ax_sz.xaxis.set_ticks_position('top') plt.title('上海最近10个月天气分布',fontsize=16) #图片标题文本和字体大小 plt.show()

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有