赛题比赛官网: 电力需求预测挑战赛
分析赛题数据,为电力预测,其中赛题数据集由字段id(房屋id)、 dt(日标识)、type(房屋类型)、target(实际电力消耗)组成。
- 每日日期进行脱敏,用1-N进行标识,即1为数据集最近一天,其中1-10为测试集数据。
- 不同房屋类型数据样本量不一定相同,导致可能出现类别不均衡的现象
首先查看数据(发现数据太多,使用Excel打开会提示,直接使用Python进行简单的数据查看、统计分析、样本分布特征分析等基础操作。(如果不会可以问大模型,一般都会给出答案)
代码如下:
# 导入基本库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 导入数据(假设数据train.csv在同一个文件夹下
data = pd.read_csv('train.csv')
# 打印前5行
print(data.head())
# 查看基本信息
print(data.info())
print(data.describe())
# 查看数据集是否存在Null值
print(data.isnull().sum()) # 本赛题数据集并没有缺失值,不需要处理
# 查看是否存在数据类不均衡的现象(本赛题主要考虑不同房屋类型下数据量大小|不同房屋id数据量大小)
data_counts_by_id = data['id'].value_counts()
"""
获取id的计数,发现id数据分布存在类别不均衡的现象,
多数id的训练数据量在450~510之间,
有少数(<50)在50以下(前天统计的,具体多少忘记了,
总数应该是5000+个id
"""
data_counts_by_id = data['type'].value_counts() # 获取type的计数
Task1 Baseline
# 计算训练数据最近11-20单位时间内对应id的目标均值
target_mean = train[train['dt']<=20].groupby(['id'])['target'].mean().reset_index()
# 将target_mean作为测试集结果进行合并
test = test.merge(target_mean, on=['id'], how='left')
Task1 Baseline解释
由于test数据集是针对各房屋(id)进行dt为1~10的预测,采用11-20单位时间内对应id的目标均值作为预测结果。
train[train['dt']<=20]
这一行代码是在原始train DataFrame中筛选出所有’dt’列的值小于等于20的行。'dt’可能代表日期或者时间戳,这里我们筛选出所有在指定时间点之前的数据。
.groupby(['id'])
在筛选后的数据上,使用groupby方法按’id’列的值进行分组。这意味着所有具有相同’id’值的行会被归为一组。
['target'].mean()
对于每一组数据,计算’target’列的平均值。'target’列通常是我们感兴趣的结果或输出变量,这里的操作是计算每个’id’相关的所有记录的’target’平均值。
.reset_index()
将groupby操作产生的索引重置为普通的列。默认情况下,groupby和聚合操作会使用’id’作为索引,但.reset_index()将这个索引转换回常规的列,这样我们就可以更方便地处理或查看结果。