【Datawhale AI 夏令营】电力需求预测 Task01

【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()  # 重置索引,将旧索引添加为列,并使用新的顺序索引

代码拆分debug

首先是从训练数据中取出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

  1. dataframe格式后面可接groupby(column_name),这样可以得到column_name包含多少个类别。
  2. pandas.DataFrame.reset_index 重置索引,将旧索引添加为列,并使用新的顺序索引,可以选择drop参数选择是否需要去掉旧索。
  3. 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就是给我们介绍了下数据处理方式(如何读取,处理以及保存),等待后续学习内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值