写一个分析天气数据的程序,要求数据从网络上爬取,用pandas分析数据并可视化数据,包含多种统计图形
时间: 2024-02-22 11:01:16 浏览: 75
好的,以下是一个简单的 Python 程序,可以从中国天气网上爬取天气数据,并用 pandas 进行数据分析和可视化。程序主要分为以下几个步骤:
1. 安装必要的 Python 库:pandas、matplotlib、requests、beautifulsoup4。
```python
!pip install pandas matplotlib requests beautifulsoup4
```
2. 从中国天气网上爬取天气数据。
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 发送请求,获取数据
url = 'http://www.weather.com.cn/weather/101010100.shtml'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
res = requests.get(url, headers=headers)
# 解析数据
soup = BeautifulSoup(res.text, 'html.parser')
con = soup.find(id='7d')
lis = con.find_all('li')
lst = []
for li in lis:
date = li.find('h1').string
desc = li.find_all('p')
weather = desc[0].string
temp = desc[1].find('span').string
low_temp = desc[1].find('i').string
high_temp = desc[1].find('em').string
wind = desc[2].find('span').string
lst.append({'日期': date, '天气': weather, '温度': temp, '最低温度': low_temp, '最高温度': high_temp, '风力': wind})
```
3. 用 pandas 分析数据。将数据转化为 DataFrame,并根据需要进行数据清洗和处理。
```python
# 将数据转化为 DataFrame
df = pd.DataFrame(lst)
# 处理温度和风力数据
df['温度'] = df['温度'].apply(lambda x: x.replace('℃', ''))
df['最低温度'] = df['最低温度'].apply(lambda x: x.replace('℃', ''))
df['最高温度'] = df['最高温度'].apply(lambda x: x.replace('℃', ''))
df['风力'] = df['风力'].apply(lambda x: x.replace('<', '小于').replace('>', '大于'))
# 将温度和风力转化为整数类型
df['温度'] = df['温度'].astype(int)
df['最低温度'] = df['最低温度'].astype(int)
df['最高温度'] = df['最高温度'].astype(int)
```
4. 可视化数据。使用 matplotlib 绘制多种统计图形,如条形图、饼图、折线图等。
```python
import matplotlib.pyplot as plt
# 绘制条形图
df_temp = df[['最低温度', '最高温度']]
df_temp.plot(kind='bar', figsize=(12, 6), width=0.8, color=['skyblue', 'pink'])
plt.title('北京未来七天温度变化')
plt.xlabel('日期')
plt.ylabel('温度(℃)')
plt.show()
# 绘制饼图
df_weather = df.groupby('天气').size()
df_weather.plot(kind='pie', figsize=(12, 6), autopct='%1.1f%%', startangle=90)
plt.title('北京未来七天天气占比')
plt.ylabel('')
plt.show()
# 绘制折线图
df_wind = df.groupby('风力').size().sort_values(ascending=False)
df_wind.plot(kind='line', figsize=(12, 6))
plt.title('北京未来七天风力分布')
plt.xlabel('风力等级')
plt.ylabel('天数')
plt.show()
```
这个程序可以爬取中国天气网的天气数据,并用 pandas 分析和可视化数据。你可以根据需要对数据进行处理,并绘制多种统计图形。
阅读全文