大数据分析统计

大数据分析统计

python 复制代码
from datetime import datetime

import pandas as pd
import matplotlib.pyplot as plt

pm25files = ['PM2.5_2021.csv', 'PM2.5_2022.csv', 'PM2.5_2023.csv']
pm10files = ['PM10_2021.csv', 'PM10_2022.csv', 'PM10_2023.csv']


def read_csv_file(files):
    # 每个文件都有表头,要注意去掉
    df = pd.read_csv(files[0])
    for file in files[1:]:
        df_temp = pd.read_csv(file)
        df = pd.concat([df, df_temp])
    # 将日期列解析为 Pandas 的日期时间对象
    df['Date'] = pd.to_datetime(df['Date'])

    monthly_avg_pm = df.groupby(df['Date'].dt.to_period('M'))['1004ABJ'].mean()

    print(monthly_avg_pm)

    # 初始化列表,用于存储年月和对应的值
    month_list = []
    pm_values_list = []
    # 迭代每个组,并将年月和对应的值添加到列表中
    for month, pm_value in monthly_avg_pm.items():
        month_list.append(str(month))
        pm_values_list.append(pm_value)

    return month_list, pm_values_list


# 读取 CSV 文件
month_list1, pm_values_list1 = read_csv_file(pm25files)
month_list2, pm_values_list2 = read_csv_file(pm10files)

# 创建拆线图
plt.figure(figsize=(10, 6))
plt.plot(month_list1, pm_values_list1, marker='o', linestyle='-', label='PM2.5')
plt.plot(month_list2, pm_values_list2, marker='o', linestyle='-', label='PM10')

# 设置图形标题和坐标轴标签
plt.title('Monthly Average PM2.5 & PM10 Trend')
plt.xlabel('Year-Month')
plt.ylabel('Average PM2.5 && PM10 Value')

# 旋转 x 轴标签,以避免重叠
plt.xticks(rotation=45)

# 显示网格线
plt.grid(True)

# 显示图形
plt.tight_layout()
plt.show()



import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 将日期时间对象转换为时间戳
timestamp_list = [datetime.fromisoformat(date_str+"-01").timestamp() for date_str in month_list1]
x_data = np.array(timestamp_list)
y_data = np.array(pm_values_list1)

# 将 x_data 转换为二维数组
x_data = x_data.reshape(-1, 1)

# 创建线性回归模型对象
model = LinearRegression()

# 拟合数据
model.fit(x_data, y_data)

# 获取拟合得到的斜率和截距
slope = model.coef_[0]
intercept = model.intercept_


timestamp_list2 = [datetime.fromisoformat(date_str+"-01").timestamp() for date_str in month_list2]
x_data2 = np.array(timestamp_list2)
y_data2 = np.array(pm_values_list2)

# 将 x_data 转换为二维数组
x_data2 = x_data.reshape(-1, 1)

# 创建线性回归模型对象
model2 = LinearRegression()

# 拟合数据
model2.fit(x_data, y_data)

# 获取拟合得到的斜率和截距
slope2 = model2.coef_[0]
intercept2 = model2.intercept_






# 计算拟合直线上的点
fit_line_y = slope * x_data + intercept
fit_line_y2 = slope2 * x_data2 + intercept2

# 绘制原始数据和拟合直线
plt.scatter(x_data, y_data, label='Original Data')
plt.plot(x_data, fit_line_y, color='red', label='Fitted Line')

plt.scatter(x_data2, y_data2, label='Original Data')
plt.plot(x_data2, fit_line_y2, color='yellow', label='Fitted Line')


plt.xlabel('X')
plt.ylabel('Y')
plt.title('Linear Trend Fit')
plt.legend()
plt.grid(True)
plt.show()
相关推荐
Percep_gan9 分钟前
解决java.security.InvalidKeyException: Illegal key size
java·开发语言
西部秋虫34 分钟前
YOLO 训练车牌定位模型 + OpenCV C++ 部署完整步骤
c++·python·yolo·车牌识别
CryptoPP1 小时前
使用 KLineChart 这个轻量级的前端图表库
服务器·开发语言·前端·windows·后端·golang
18你磊哥1 小时前
chromedriver.exe的使用和python基本处理
开发语言·python
小坏讲微服务1 小时前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发
Kiri霧1 小时前
Scala 循环控制:掌握 while 和 for 循环
大数据·开发语言·scala
闲人编程2 小时前
Python的抽象基类(ABC):定义接口契约的艺术
开发语言·python·接口·抽象类·基类·abc·codecapsule
qq_172805592 小时前
Go 语言结构型设计模式深度解析
开发语言·设计模式·golang
vx_dmxq2112 小时前
【微信小程序学习交流平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·微信小程序·小程序·idea
无垠的广袤2 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网