<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>呼和浩特2025年每月平均气温</title>
<style>
table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
th, td {
border: 1px solid #000;
padding: 8px;
text-align: center;
}
th {
background-color: #f2f2f2;
}
</style>
</head>
<body>
<h1>呼和浩特2025年每月平均气温</h1>
<table>
<thead>
<tr>
<th>月份</th>
<th>高温 (℃)</th>
<th>低温 (℃)</th>
<th>空气</th>
<th>能见度 (km)</th>
<th>风速 (km/h)</th>
<th>总降雨 (mm)</th>
</tr>
</thead>
<tbody>
<tr>
<td>2024年08月</td>
<td>27</td>
<td>16</td>
<td>34 优</td>
<td>14.6</td>
<td>9.1</td>
<td>160.7</td>
</tr>
<tr>
<td>2024年09月</td>
<td>21</td>
<td>11</td>
<td>33 优</td>
<td>16.1</td>
<td>9.1</td>
<td>148.4</td>
</tr>
<tr>
<td>2024年10月</td>
<td>15</td>
<td>3</td>
<td>49 优</td>
<td>16.1</td>
<td>8.7</td>
<td>34.5</td>
</tr>
<tr>
<td>2024年11月</td>
<td>7</td>
<td>-3</td>
<td>62 优</td>
<td>14.6</td>
<td>7.9</td>
<td>2.2</td>
</tr>
<tr>
<td>2024年12月</td>
<td>-3</td>
<td>-14</td>
<td>60 优</td>
<td>22.5</td>
<td>6.1</td>
<td>0</td>
</tr>
<tr>
<td>2025年01月</td>
<td>-3</td>
<td>-15</td>
<td>76 优</td>
<td>20</td>
<td>6.6</td>
<td>0</td>
</tr>
<tr>
<td>2025年02月</td>
<td>-1</td>
<td>-14</td>
<td>59 优</td>
<td>25.5</td>
<td>8.4</td>
<td>0</td>
</tr>
<tr>
<td>2025年03月</td>
<td>10</td>
<td>-3</td>
<td>80 优</td>
<td>39.8</td>
<td>12.6</td>
<td>3.3</td>
</tr>
<tr>
<td>2025年04月</td>
<td>18</td>
<td>4</td>
<td>51 优</td>
<td>48.4</td>
<td>13.9</td>
<td>12.9</td>
</tr>
<tr>
<td>2025年05月</td>
<td>24</td>
<td>8</td>
<td>45 优</td>
<td>43.2</td>
<td>14</td>
<td>188</td>
</tr>
<tr>
<td>2025年06月</td>
<td>30</td>
<td>14</td>
<td>36 优</td>
<td>41.8</td>
<td>10.6</td>
<td>148</td>
</tr>
<tr>
<td>2025年07月</td>
<td>30</td>
<td>18</td>
<td>33 优</td>
<td>22.4</td>
<td>9.3</td>
<td>995.9</td>
</tr>
</tbody>
</table>
</body>
</html>
自制一个网页,可以方便爬取
获取网页url进行爬取,并把爬取到的内容保存为csv文件
因为要处理异常值,没有异常值,那就制造一点异常值
#删除包含空字段的行
import pandas as pd
df = pd.read_csv("TQ.csv")
new_df = df.dropna()
print(new_df.to_string())
#用指定内容来替换一些空字段
import pandas as pd
df = pd.read_csv("TQ.csv")
df.fillna("暂无分数信息", inplace = True)
print(df.to_string())
import pandas as pd
# 读取CSV文件
df = pd.read_csv("TQ.csv")
print("原始数据:")
print(df.to_string())
# 计算风速的均值并填充空值
mean_wind_speed = df["风速 (km/h)"].mean()
print("风速的均值为:", mean_wind_speed)
df["风速 (km/h)"].fillna(mean_wind_speed, inplace=True)
print("\n")
print("更改后数据:")
# 计算能见度的均值并填充空值
mean_visibility = df["能见度 (km)"].mean()
print("能见度的均值为:", mean_visibility)
df["能见度 (km)"].fillna(mean_visibility, inplace=True)
# 打印处理后的数据
print(df.to_string())
import pandas as pd
# 读取CSV文件
df = pd.read_csv("TQ.csv")
print("原始数据:")
print(df.to_string())
print("\n")
print("更改后数据:")
# 计算风速的中位数并填充空值
median_wind_speed = df["风速 (km/h)"].median()
print("风速的中位数为:", median_wind_speed)
df["风速 (km/h)"].fillna(median_wind_speed, inplace=True)
# 计算能见度的中位数并填充空值
median_visibility = df["能见度 (km)"].median()
print("能见度的中位数为:", median_visibility)
df["能见度 (km)"].fillna(median_visibility, inplace=True)
# 打印处理后的数据
print(df.to_string())
4种处理异常值的方法见上
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager as fm
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题
# 读取CSV文件
df = pd.read_csv("TQ.csv")
# 绘制散点图
plt.figure(figsize=(10, 6))
plt.scatter(df['月份'], df['高温 (℃)'], color='red', label='高温')
plt.scatter(df['月份'], df['低温 (℃)'], color='blue', label='低温')
plt.title('呼和浩特2024年8月到2025年8月的月平均温度图', fontproperties=font_prop)
plt.xlabel('月份', fontproperties=font_prop)
plt.ylabel('温度 (℃)', fontproperties=font_prop)
plt.legend(prop=font_prop)
plt.xticks(rotation=45, fontproperties=font_prop)
plt.tight_layout()
plt.show()
绘制散点图
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager as fm
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题
# 读取CSV文件
df = pd.read_csv("TQ.csv")
# 将月份转换为时间格式
df['月份'] = pd.to_datetime(df['月份'], format='%Y年%m月')
# 绘制折线图
plt.figure(figsize=(10, 6))
plt.plot(df['月份'], df['风速 (km/h)'].fillna(0), marker='o', color='green', label='风速')
plt.plot(df['月份'], df['能见度 (km)'].fillna(0), marker='s', color='purple', label='能见度')
# 设置图表标题和标签
plt.title('呼和浩特2024年8月到2025年8月的风速和能见度折线图', fontproperties=font_prop)
plt.xlabel('时间', fontproperties=font_prop)
plt.ylabel('值', fontproperties=font_prop)
# 设置图例
plt.legend(prop=font_prop)
# 旋转x轴的日期标签,以便它们不会重叠
plt.xticks(rotation=45)
# 优化x轴的日期显示
plt.gcf().autofmt_xdate()
# 显示图表
plt.tight_layout()
plt.show()
绘制折线图
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager as fm
# 设置中文字体,这里使用的是微软雅黑字体
font_path = 'C:\\Windows\\Fonts\\msyh.ttc' # 请根据实际情况修改字体路径
font_prop = fm.FontProperties(fname=font_path)
# 读取CSV文件
df = pd.read_csv("TQ.csv")
# 绘制核密度估计图
plt.figure(figsize=(8, 6))
sns.kdeplot(data=df['高温 (℃)'], shade=True, color='blue')
# 设置图表标题和标签
plt.title('高温的核密度估计图', fontproperties=font_prop)
plt.xlabel('温度 (℃)', fontproperties=font_prop)
plt.ylabel('密度', fontproperties=font_prop)
# 显示图表
plt.show()
绘制核密度图
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 读取CSV文件
df = pd.read_csv("TQ.csv")
# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(df.pivot("月份", "空气", "总降雨 (mm)"), annot=True, fmt=".1f", cmap="YlGnBu")
plt.title('总降雨热力图')
plt.xlabel('空气等级')
plt.ylabel('月份')
plt.show()
绘制热力图
import pandas as pd
import matplotlib.pyplot as plt
# 读取CSV文件
df = pd.read_csv("TQ.csv")
# 绘制高温的直方图
plt.figure(figsize=(10, 6))
plt.hist(df['高温 (℃)'], bins=10, color='red', alpha=0.7, label='高温 (℃)')
plt.title('高温分布直方图')
plt.xlabel('温度 (℃)')
plt.ylabel('频率')
plt.legend()
plt.grid(True)
plt.show()
# 绘制低温的直方图
plt.figure(figsize=(10, 6))
plt.hist(df['低温 (℃)'], bins=10, color='blue', alpha=0.7, label='低温 (℃)')
plt.title('低温分布直方图')
plt.xlabel('温度 (℃)')
plt.ylabel('频率')
plt.legend()
plt.grid(True)
plt.show()
# 绘制总降雨量的直方图,总降雨量为空的用0填充
df['总降雨 (mm)'].fillna(0, inplace=True)
plt.figure(figsize=(10, 6))
plt.hist(df['总降雨 (mm)'], bins=10, color='purple', alpha=0.7, label='总降雨量 (mm)')
plt.title('总降雨量分布直方图')
plt.xlabel('总降雨量 (mm)')
plt.ylabel('频率')
plt.legend()
plt.grid(True)
plt.show()