【Datawhale AI 夏令营】电力需求预测 Task01
Target
给定多个房屋对应电力消耗历史N天的相关序列数据等信息,预测房屋对应电力的消耗。也就是一个时序预测问题
数据集由字段id(房屋id)、 dt(日标识)、type(房屋类型)、target(实际电力消耗)组成。
Baseline
Baseline代码十分简单,
import pandas as pd # *导入 pandas 库,用于数据处理和分析*import numpy as np *# 导入 numpy 库,用于科学计算和多维数组操作*
train = pd.read_csv('./data/data283931/train.csv')
test = pd.read_csv('./data/data283931/test.csv')
target_mean = train[train['dt']<=20].groupby(['id'])['target'].mean().reset_index()
test = test.merge(target_mean, on=['id'], how='left')# *将target_mean作为测试集结果进行合并*
test[['id','dt','target']].to_csv('submit.csv', index=None)# *保存结果文件到本地*
所有的关键基本都集中在
target_mean = train[train['dt']<=20].groupby(['id'])['target'].mean().reset_index()
我们将其拆开,进行debug
x0 = train[train['dt']<=20]
x1 = train[train['dt']<=20].groupby(['id'])# 根据类别排序,得到了5832,就说明有5832个id
x2 = train[train['dt']<=20].groupby(['id'])['target']# 每个group取出target列
x3 = train[train['dt']<=20].groupby(['id'])['target'].mean()#求均值
target_mean = train[train['dt']<=20].groupby(['id'])['target'].mean().reset_index()# 重置索引,将旧索引添加为列,并使用新的顺序索引
首先是从训练数据中取出dt小于等于20的得到x0
然后根据id进行分组得到x1,类型为DataFrameGroupBy,有5832组
再选中’target’列得到x2,类型为SeriesGroupBy,同样大小5832
对其求均值,得到x3,类型为Series,这样就得到了id和target的一个对应
此时id为行名,通过reset_index 重置索引,得到最终的target_mean
然后通过merge将两个DataFrame合并,指定根据id列进行合并,选择左合并,这样test中的行会被保留(但这样也有问题,如果有id只在test中,target_mean中没有,那么就会出现NAN值)
最终效果就是test中添加一列target,值由id到target_mean中去找,也就是test的target值是train中在dt<=20情况下,对应id的target的均值
test = test.merge(target_mean, on=['id'], how='left')
最后就是取’id’,‘dt’,'target’三列进行保存。
Tips
- dataframe格式后面可接groupby(column_name),这样可以得到column_name包含多少个类别。
- pandas.DataFrame.reset_index 重置索引,将旧索引添加为列,并使用新的顺序索引,可以选择drop参数选择是否需要去掉旧索。
- merge: 这是 pandas 中用于合并两个 DataFrame 的方法,其中on指定用作合并依据的列名,how指定合并方式。
Conclusion
我们发现test和x0中的样本个数一致,都是58320,后续goupby([‘id’])后,是5832也就说明有5832个id,去查看了下test文件中,确实是每个id依次dt从1到10,也就是每个id有10个样本,看了下训练集train中是每个id从11开始往上走,前面train[‘dt’]<=20也就是拿出训练集每个id的dt从11到20的数据,最后x0是58320也应证了训练集和测试集类别个数应该也是一致的,所以test和target_mean合并后不会出现NAN。这边属于碎碎念了,看到test和x0中的样本个数一致后产生的联想,实际好像没什么用。
这个Baseline就是给我们介绍了下数据处理方式(如何读取,处理以及保存),等待后续学习内容。
版权归原作者 第一弱鸡 所有, 如有侵权,请联系我们删除。