Python 天气 简单 数据分析及可视化

2023-05-16

Python 天气情况数据分析及可视化

环境配置

Pycharm开发环境 
python 版本 python3.7
Anconda 集成开发环境

第三方库导入

## pip install 模块 清华大学镜像源
import requests 
from bs4 import  BeautifulSoup
import io
import sys
import pandas
from matplotlib import pyplot as plt

步骤

1.爬虫requests 获取数据
2.pandas 处理数据
3.matplotlib 绘制图形
4.其他 保存数据进入csv格式,简单处理,例如雷达图

小案例

雷达图

#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:07
#@Author : dele
#@File : demo.py
#@Software: PyCharm


# 雷达图
import pygal
# pip install pygal 安装模块

rader_chart = pygal.Radar()


rader_chart.title = '成绩分析'
rader_chart.x_labels = ["数学","英语","文综","理综","体育"]
rader_chart.add('StdudetA',[139,122,80,250,10])
rader_chart.add('StdudetB',[129,100,80,250,40])
rader_chart.add('StdudetC',[150,100,80,150,60])
rader_chart.add('StdudetD',[99,140,80,150,90])
rader_chart.render_to_file('radar_chart.svg')

效果

在这里插入图片描述

天气案例

爬取天气网站地址http://www.tianqihoubao.com/lishi/

在这里插入图片描述

然后一直选择找到你需要的数据地址

例如:如图
在这里插入图片描述

进行网页分析 F12检查网页分析源代码

Python 爬虫代码分析

Pandas matplotlib 模块

Pandas

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

基本功能
1. 数据文件读取/文本数据读取
2. 索引、选取和数据过滤
3. 算法运算和数据对齐
4. 函数的应用和映射
5. 重置索引
6. 数学统计方法

在这里插入图片描述

matplotlib

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 。
通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

Matplotlib基础知识

1.Matplotlib中的基本图表包括的元素
x轴和y轴
水平和垂直的轴线
x轴和y轴刻度
刻度标示坐标轴的分隔,包括最小刻度和最大刻度
x轴和y轴刻度标签
表示特定坐标轴的值
绘图区域
实际绘图的区域
2.hold属性
hold属性默认为True,允许在一幅图中绘制多个曲线;将hold属性修改为False,每一个plot都会覆盖前面的plot。
但是不推荐去动hold这个属性,这种做法(会有警告)。因此使用默认设置即可。
3.网格线
grid方法
使用grid方法为图添加网格线
设置grid参数(参数与plot函数相同)
.lw代表linewidth,线的粗细
.alpha表示线的明暗程度
4.axis方法
如果axis方法没有任何参数,则返回当前坐标轴的上下限
5.xlim方法和ylim方法
除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
6.legend方法

在这里插入图片描述

#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:26
#@Author : dele
#@File : weather.py
#@Software: PyCharm


import requests
from bs4 import  BeautifulSoup
import io
import sys
import pandas


sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
def get_data(weather_url):
    rseponse = requests.get(weather_url)

    html = rseponse.content.decode('gbk')
    soup = BeautifulSoup(html,'html.parser')

    tr_lsit = soup.find_all('tr')

    print(tr_lsit)
    dates,conditions,temp = [],[],[]
    for data in tr_lsit[1:]:
        sub_data = data.text.split()
        dates.append(sub_data[0])
        conditions.append(''.join(sub_data[1:3]))
        temp.append(''.join(sub_data[3:6]))

    # 数据保存
    _data = pandas.DataFrame()
    _data['日期'] = dates
    _data['天气情况'] = conditions
    _data['气温'] = temp

    return _data
    # print(_data)
    # _data.to_csv('anqing.csv',index=False,encoding='gbk')
    # 获取数据并保存csv格式,进行下面的数据分析
    
# 定义成函数形式进行封装
data_month_3 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202003.html')
data_month_4 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202004.html')
data_month_5 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202005.html')

data = pandas.concat([data_month_3,data_month_4,data_month_5]).reset_index(drop=True)
data.to_csv('anqing.csv',index=False,encoding='gbk')

数据可视化

from matplotlib import pyplot as plt

# 画图
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

datalsit = pandas.read_csv('G:/Python_Web/weather/anqing.csv',encoding='gbk')

# 数据处理
datalsit['最高气温'] = datalsit['气温'].str.split('/',expand=True)[0]
datalsit['最低气温'] = datalsit['气温'].str.split('/',expand=True)[1]

datalsit['最高气温'] = datalsit['最高气温'].map(lambda x:int(x.replace('℃','')))
datalsit['最低气温'] = datalsit['最低气温'].map(lambda x:int(x.replace('℃','')))

dates = datalsit['日期']
highs = datalsit['最高气温']
lows =  datalsit['最低气温']

# 画图

fig = plt.figure(dpi=128,figsize=(10,6))

plt.plot(dates,highs,c='red',alpha=0.5)
plt.plot(dates,lows,c='blue',alpha=0.5)

plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)
# 图表格式
# 设置图标的图形格式
plt.title('2020安庆市3-5月天气情况',fontsize=24)
plt.xlabel('',fontsize=6)
fig.autofmt_xdate()
plt.ylabel('气温',fontsize=12)
plt.tick_params(axis='both',which='major',labelsize=10)
# 修改刻度
plt.xticks(dates[::20])
# 显示
plt.show()

效果

在这里插入图片描述

完整代码

#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:26
#@Author : dele
#@File : weather.py
#@Software: PyCharm


import requests
from bs4 import  BeautifulSoup
import io
import sys
import pandas
from matplotlib import pyplot as plt

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
def get_data(weather_url):
    rseponse = requests.get(weather_url)

    html = rseponse.content.decode('gbk')
    soup = BeautifulSoup(html,'html.parser')

    tr_lsit = soup.find_all('tr')

    print(tr_lsit)
    dates,conditions,temp = [],[],[]
    for data in tr_lsit[1:]:
        sub_data = data.text.split()
        dates.append(sub_data[0])
        conditions.append(''.join(sub_data[1:3]))
        temp.append(''.join(sub_data[3:6]))

    # 数据保存
    _data = pandas.DataFrame()
    _data['日期'] = dates
    _data['天气情况'] = conditions
    _data['气温'] = temp

    return _data
    # print(_data)
    # _data.to_csv('anqing.csv',index=False,encoding='gbk')

# data_month_3 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202003.html')
# data_month_4 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202004.html')
# data_month_5 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202005.html')
#
# data = pandas.concat([data_month_3,data_month_4,data_month_5]).reset_index(drop=True)
# data.to_csv('anqing.csv',index=False,encoding='gbk')



plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

datalsit = pandas.read_csv('G:/Python_Web/weather/anqing.csv',encoding='gbk')

# 数据处理
datalsit['最高气温'] = datalsit['气温'].str.split('/',expand=True)[0]
datalsit['最低气温'] = datalsit['气温'].str.split('/',expand=True)[1]

datalsit['最高气温'] = datalsit['最高气温'].map(lambda x:int(x.replace('℃','')))
datalsit['最低气温'] = datalsit['最低气温'].map(lambda x:int(x.replace('℃','')))

dates = datalsit['日期']
highs = datalsit['最高气温']
lows =  datalsit['最低气温']

# 画图

fig = plt.figure(dpi=128,figsize=(10,6))

plt.plot(dates,highs,c='red',alpha=0.5)
plt.plot(dates,lows,c='blue',alpha=0.5)

plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)
# 图表格式
# 设置图标的图形格式
plt.title('2020安庆市3-5月天气情况',fontsize=24)
plt.xlabel('',fontsize=6)
fig.autofmt_xdate()
plt.ylabel('气温',fontsize=12)
plt.tick_params(axis='both',which='major',labelsize=10)
# 修改刻度
plt.xticks(dates[::20])
# 显示
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 天气 简单 数据分析及可视化 的相关文章

随机推荐

  • vscode基本插件安装与配置

    插件安装 xff1a Auto Rename Tag 重命名标签时 xff0c 自动更新结尾配对的标签 Chinese 汉化 ESLint 规范化代码 xff0c 对应的setting配置 xff08 全局所有项目都有效 xff09 xff
  • Ubuntu20.04(Noetic)版本中关于“使用rospack命令工具来查看这些一级依赖包“报错解决方法

    ROS Noetic版本中关于 使用rospack命令工具来查看这些一级依赖包 报错解决方法 问题描述 xff1a 在跟随ROS初级教程 创建ROS软件包这一步骤 xff0c 可能会遇见下面问题 xff1a smw 64 smw Lenov
  • 最详细的Ubuntu18配置px4_ros_gazebo仿真

    本教程将在Ubuntu18安装ros px4工具链 以及gazebo仿真环境 参考此教程可以在Ubuntu16的环境安装ros px4工具链 以及gazebo仿真环境 首先 xff0c 我们来看下Ubuntu各版本对应的gazebo关系 x
  • 百度获取toke

    https aip baidubce com oauth 2 0 token grant type 61 client credentials amp client id 61 官网获取的AK amp client secret 61 官网
  • 详细的EVE-NG部署方法+EVE各种镜像与模板,附带SCRT+WINSCP等工具提供(VM部署)

    自己写的一份较详细的EVE NG在虚拟机VM上部署的教程 xff0c 喜欢的可以关注一下 xff0c 谢谢 首先我在百度云附上了EVE NG社区版2 0 3 110版本的OVF文件 xff0c 此次用这个版本来演示 xff0c 并且还提供了
  • node.js环境一键部署

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • Golang Interface小结

    1 概述 1 1 简介 接口是一种规范 xff0c 描述了类的行为和功能 xff0c 而不做具体实现 C 43 43 定义接口的方式称为 侵入式 xff0c 而Go采用的是 非侵入式 xff0c 不需要显式声明 xff0c 只需要实现了接口
  • UART 简介

    1 引脚 UART 是一种异步全双工通信方式 xff0c 所以除了电源引脚之外 xff0c UART 常有引脚有 TXD xff0c RXD xff1b 除此之外还有硬件流控引脚 RTS 和 CTS TXD 是发送引脚 xff0c RXD
  • 无人机飞控三大算法:捷联式惯性导航系统、卡尔曼滤波算法、飞行控制PID算法

    无人机飞控三大算法 xff1a 捷联式惯性导航系统 卡尔曼滤波算法 飞行控制PID算法 一 捷联式惯性导航系统 说到导航 xff0c 不得不说GPS xff0c 他是接受卫星发送的信号计算出自身位置的 xff0c 但是当GPS设备上方被遮挡
  • [学习笔记-01]关于单片机的中断处理机制(一)

    单片机的中断处理机制 1 什么是中断 xff1f 1 1 为什么要使用中断 中断的特点 1 2 什么是中断源 xff1f 1 2 1中断源有哪些 2 中断机制的流程3 中断优先级3 1 多个中断同时发生3 2 中断嵌套 1 什么是中断 xf
  • 黑苹果突然某一天无法上网?可能设置了BIOS,这样可以有网了!

    如图所示 xff0c 本人是微星迫击炮B450 xff08 非MAX xff09 xff0c 进入BIOS设置网卡 xff0c 可以解决这样的没网的问题 如果各位的BIOS不是微星 xff0c 也没有关系 xff0c 可以找到类似的功能就可
  • LSTM模型、双向LSTM模型以及模型输入输出的理解

    循环神经网路 xff08 RNN xff09 在工作时一个重要的优点在于 xff0c 其能够在输入和输出序列之间的映射过程中利用上下文相关信息 然而不幸的是 xff0c 标准的循环神经网络 xff08 RNN xff09 能够存取的上下文信
  • 无人机中的PID控制代码略解

    无人机中的PID控制代码略解 PID的控制规律 xff1a 参考 xff1a Amov实验室 PX4中级课程 PID基础 频域函数 xff1a u s
  • 如何用Python在图片上绘制BoundingBox

    参考资料 xff1a https blog csdn net weixin 41735859 article details 106599903 在目标检测等CV领域的任务里 xff0c 经常会涉及到在图片上绘制BBox xff0c 也就是
  • uart

    1 关于UART的基本特性 xff1a xff08 1 xff09 异步串行通信 xff0c 可为全双工 半双工 单发送TX或单接收RX模式 xff1b xff08 2 xff09 支持5 xff5e 8位数据位的配置 xff0c 波特率几
  • STM32--数码管显示使用

    STM32 数码管显示 简介 1 硬件部分 STM32F103C8T6 最小系统板 一位共阴数码管 2 软件部分 Keil软件编程 数码管码表 硬件部分 数码管 简介 数码管 xff0c 也称作辉光管 xff0c 是一种可以显示数字和其他信
  • LXC 和 LXD 容器总结

    1 概述 1 1 LXC LXC是Linux Containers的缩写 它是一种虚拟化技术 xff0c 通过一个Linux内核在一个受控主机上虚拟地运行多个Linux系统 LXC使用内核的Cgroups功能 xff0c 来提供进程和网络空
  • Altium designer -- 基本规则设置--间距设置Clearance

    Altium designer 基本规则设置 xff08 1 xff09 间距设置Clearance 硬件设计 软件 Altium designer 10PCB设计 间距设置 规则名称1 xff1a Clearance 一般间距 最小间距
  • Python 百度智能云文字识别 实现手写文字识别

    Python 实现手写文字识别 简介 百度智能云人工智能平台文字识别接口使用下载IP摄像头应用 调用手机摄像头 xff0c 实现拍照实现文字识别 Python 百度智能云人工智能文字识别接口 实现手写文字识别 百度智能云 创建应用 创建Py
  • Python 天气 简单 数据分析及可视化

    Python 天气情况数据分析及可视化 环境配置 Pycharm开发环境 python 版本 python3 7 Anconda 集成开发环境 第三方库导入 span class token comment pip install 模块 清