1.读取广-湛.csv文件
import pandas as pd
data = pd.read_csv('广-湛天气.csv')
data
2.去除多余字符
#去除多余字符
data[['最高温度','最低温度']] = data[['最高温度','最低温度']].apply(lambda x: x.str.replace('°','').replace('', '0'))
data.head()
3.删除2023年数据,并计算平均温度保存到广湛csv文件中
# 删除包含 target_str 的行
data = data[~data['日期'].str.contains('2023-')]
# 将最高温度和最低温度转换为数值型
data['最高温度'] = data['最高温度'].astype(float)
data['最低温度'] = data['最低温度'].astype(float)
# 计算平均温度
data['平均温度'] = (data['最高温度'] + data['最低温度']) / 2
# 保存结果
data.to_csv('广湛天气.csv', index=False)
4.读取新数据
#读取新数据
data = pd.read_csv('广湛天气.csv')
data
5.分割日期与星期
#分割日期与星期
data[['日期','星期']] = data['日期'].str.split(' ',expand=True,n=1)
data
6.判断是否下雨
#是否下雨
data.loc[data['天气'].str.contains('雨'),'下雨吗']='是'
data.fillna('否',inplace=True)
#分割日期时间
data['日期'] = pd.to_datetime(data['日期'])
data[['最高温度','最低温度']] = data[['最高温度','最低温度']].astype('int')
data['年份'] = data['日期'].dt.year
data['月份'] = data['日期'].dt.month
data['日'] = data['日期'].dt.day
# 预览
data.sample(5)
7.# 按城市和天气分组,并计算每组的天数
# 按城市和天气分组,并计算每组的天数
grouped = data.groupby(['城市', '天气']).size().reset_index(name='天数')
# 将结果按城市分为两个DataFrame
gz_weather = grouped[grouped['城市'] == '广州']
zj_weather = grouped[grouped['城市'] == '湛江']
gz_weather
8.将原有的天气类型按照关键字划分,并存进新的 DataFrame 中
# 定义一个函数,将原有的天气类型按照关键字划分
def classify_weather(weather):
if '多云' in weather:
return '多云'
elif '晴' in weather:
return '晴'
elif '阴' in weather:
return '阴'
elif '大雨' in weather:
return '雨'
elif '中雨' in weather:
return '雨'
elif '小雨' in weather:
return '雨'
elif '雷阵雨' in weather:
return '雨'
elif '雾' in weather:
return '雾'
else:
return '其他'
# 将原有的天气类型按照关键字划分,并存进新的 DataFrame 中
new_data = data[['城市', '天气']].copy()
new_data['新天气'] = new_data['天气'].apply(classify_weather)
new_data
9.#按照城市和新天气列进行分组,并计算每一种天气的天数
# 按照城市和新天气列进行分组,并计算每一种天气的天数
count_data = new_data.groupby(['城市', '新天气'])['天气'].count().reset_index()
# 根据条件筛选出符合要求的行
df1 = count_data.loc[count_data['城市'] == '广州']
df2 = count_data.loc[count_data['城市'] == '湛江']
# 将“天气”列名改为“天数”
df3 = df1.rename(columns={'天气': '天数'})
df4 = df2.rename(columns={'天气': '天数'})
# 输出结果
df3
df4
10.计算城市的每个月平均温度
# 筛选出平均温度等于最高温度和最低温度平均值的数据
data1 = data[(data['平均温度'] == (data['最高温度'] + data['最低温度']) / 2)]
# 筛选出城市为A或B的数据
data_AB = data1[(data1['城市'] == '广州') | (data1['城市'] == '湛江')]
# 将日期转换为月份并赋值给新的列
data_AB['月份'] = pd.to_datetime(data_AB['日期']).dt.month
# 按照城市和月份分组,计算每组的平均气温
grouped_AB = data_AB.groupby(['城市', '月份'])['平均温度'].mean().reset_index()
# 按照城市和月份排序
grouped_AB = grouped_AB.sort_values(['城市', '月份'])
# 打印结果
grouped_AB
11.筛选出平均气温在18-25度的数据
# 筛选出平均气温在18-25度的数据
filtered_data = data[(data['平均温度'] >= 18) & (data['平均温度'] <= 25)]
# 分别统计两个城市符合条件的天数
gz_num_days = len(filtered_data[filtered_data['城市'] == '广州'])
zj_num_days = len(filtered_data[filtered_data['城市'] == '湛江'])
# 输出结果
gz_num_days
12.解决乱码问题
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体
plt.rcParams["axes.unicode_minus"] = False # 该语句解决图像中的“-”负号的乱码问题
13.广州-湛江每日平均温度折线图
# 筛选出广州和湛江的数据
gz_data = data[data['城市'] == '广州']
zj_data = data[data['城市'] == '湛江']
# 提取日期和平均温度数据
x = gz_data['日期']
y1 = gz_data['平均温度']
y2 = zj_data['平均温度']
# 绘制折线图
plt.figure(dpi=500, figsize=(10, 5))
plt.title("广州-湛江每日平均温度折线图")
plt.plot(x, y1, color='red', label='广州')
plt.plot(x, y2, color='blue', label='湛江')
# 获取图的坐标信息
coordinates = plt.gca()
# 设置x轴每个刻度的间隔天数
xLocator = mpl.ticker.MultipleLocator(30)
coordinates.xaxis.set_major_locator(xLocator)
# 将日期旋转30°
plt.xticks(rotation=30)
plt.xticks(fontsize=8)
plt.ylabel("温度(℃)")
plt.xlabel("日期")
plt.legend()
plt.savefig("广州-湛江每日平均温度折线图.png")
plt.show()
14.广州-湛江每月气温折线图
# 筛选出广州和湛江的数据
data_GZ_ZJ = grouped_AB[(grouped_AB['城市'] == '广州') | (grouped_AB['城市'] == '湛江')]
# 绘制折线图
fig, ax = plt.subplots()
for city in ['广州', '湛江']:
ax.plot(data_GZ_ZJ[data_GZ_ZJ['城市'] == city]['月份'], data_GZ_ZJ[data_GZ_ZJ['城市'] == city]['平均温度'], label=city)
# 设置图例和标题
ax.legend()
ax.set_title('广州-湛江每月气温折线图')
# 显示图形
plt.show()
15.广州-湛江各类天气饼图
# 创建一个 1 行 2 列的子图,figsize 参数用于设置图表大小
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
# 绘制广州各类天气饼图
ax[0].pie(df3['天数'], labels=df3['新天气'], autopct='%1.1f%%', startangle=90)
ax[0].set_title('广州各类天气天数占比')
# 绘制湛江各类天气饼图
ax[1].pie(df4['天数'], labels=df4['新天气'], autopct='%1.1f%%', startangle=90)
ax[1].set_title('湛江各类天气天数占比')
# 调整子图之间的间距
plt.subplots_adjust(wspace=0.3)
# 显示图表
plt.show()
16.广州和湛江各类天气天数对比
import matplotlib.pyplot as plt
# 创建一个画布
fig, ax = plt.subplots(figsize=(10, 5))
# 绘制广州各类天气条形图
ax.bar(df3['新天气'], df3['天数'], width=0.4, label='广州')
# 绘制湛江各类天气条形图
ax.bar(df4['新天气'], df4['天数'], width=0.4, label='湛江', alpha=0.7)
# 设置图例
ax.legend()
# 设置 x 轴标签和标题
ax.set_xlabel('天气类型')
ax.set_ylabel('天数')
ax.set_title('广州和湛江各类天气天数对比')
# 显示图表
plt.show()
17.广州各类天气天数占比
import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts
# 读取csv文件并转换为列表格式
df = pd.read_csv('df3.csv')
data_list = df[['新天气', '天数']].values.tolist()
# 生成饼图
pie = Pie()
pie.add("", data_list)
pie.set_global_opts(title_opts=opts.TitleOpts(title="广州各类天气天数占比"))
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}"))
pie.render_notebook()
18.湛江各类天气天数占比
import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts
# 读取csv文件并转换为列表格式
df = pd.read_csv('df4.csv')
data_list = df[['新天气', '天数']].values.tolist()
# 生成饼图
pie = Pie()
pie.add("", data_list)
pie.set_global_opts(title_opts=opts.TitleOpts(title="湛江各类天气天数占比"))
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}"))
pie.render_notebook()
19.下面我们使用前端网页生成仪表图,这个仪表图的id是使用哈希加密来定义的,这些名称都是使用Unicode编码中的字符来写的,需要的可以研究一下
Awesome-pyecharts
博主写代码来之不易
关注博主下篇更精彩
一键三连!!!
一键三连!!!
感谢一键三连!