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')

效果

d4158f08908c16b1f671421bafae26b9.png

天气案例

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

136689ffaa16b84cfb746723fa87f2ce.png

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

例如:如图0fe57820e24df38bf8046b32c7658bc5.png

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

Python 爬虫代码分析

Pandas matplotlib 模块

Pandas

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

1. 数据文件读取/文本数据读取

2. 索引、选取和数据过滤

3. 算法运算和数据对齐

4. 函数的应用和映射

5. 重置索引

6. 数学统计方法

5fa9c9ada36a829f421f9632009c0e2b.png

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方法

95de9e423c2f86f4b6c255a38f627129.png

#-*- 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()

效果

a4bc044200cc9a752c349c01181b04e5.png

完整代码

#-*- 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()

博客地址https://www.delehub.top/

知乎https://www.zhihu.com/people/bi-shi-san-2-81

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐