当前位置:首页 > 编程知识 > 正文

Python开发城市天气预报

本文将从数据获取、数据处理、数据可视化三个方面对Python开发城市天气预报进行详细阐述。

一、数据获取

天气预报需要从多个数据源获取数据,包括但不限于气象局数据,国外数据源,第三方API接口等。Python语言中常用的获取数据的库有requests、beautifulsoup4、urllib等。以获取气象局数据为例,可以通过下面的代码获取某城市未来一周的天气预报:

import requests

city = "北京"
url = "http://www.weather.com.cn/weather/" + city + ".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)
res.encoding = 'utf-8'

print(res.text)

二、数据处理

获取到数据后,需要进行数据清洗、处理、分析等工作。在Python中,数据处理涉及的库很多,其中pandas、numpy、matplotlib、seaborn等是常用的库。通过pandas可以将我们获取到的数据格式化,方便后续操作。

以获取到的一周天气预报数据为例,下面的代码演示了如何用pandas对数据进行处理:

import pandas as pd
from bs4 import BeautifulSoup

city="北京"

url = "http://www.weather.com.cn/weather/" + city + ".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)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, "html.parser")
week = soup.find(class_="week")
lis = week.find_all("li")

data = []
for li in lis:
    detail = li.find(class_="detail")
    day = detail.find(class_="day").text.strip()
    temp = detail.find(class_="temp").text.strip()
    wind = detail.find(class_="wind").text.strip()
    level = detail.find(class_="level").text.strip()
    data.append({"day": day, "temp": temp, "wind": wind, "level": level})

df = pd.DataFrame(data)
print(df)

三、数据可视化

数据的可视化是方便用户查看天气情况的重要环节。在Python中,matplotlib、seaborn等库可以完成数据可视化的任务。matplotlib是最常用的数据可视化库之一,可帮助我们创建各种类型的图形,如折线图、柱状图、散点图等等。下面的代码演示了如何将我们获取到的一周天气预报数据通过matplotlib可视化:

import matplotlib.pyplot as plt

days = df["day"].tolist()
temps = df["temp"].apply(lambda x: x.replace("℃", "")).astype(int).tolist()

plt.plot(days, temps, "o-")
plt.xlabel("日期")
plt.ylabel("气温(℃)")
plt.title(city+"未来一周气温变化")
plt.show()

以上就是Python开发城市天气预报的主要内容。你可以根据实际需求对代码进行修改和优化,使其更加适合自己的需求。