手把手|共享单车数据特征工程

数据来源

Kaggle上有这样一个比赛:城市自行车共享系统使用状况。

提供的数据为2年内按小时做的自行车租赁数据,其中训练集由每个月的前19天组成,测试集由20号之后的时间组成。

本项目一此数据为例,进行简单的特征工程

数据清洗

读取数据

#先把数据读进来
import pandas as pd
data = pd.read_csv('kaggle_bike_competition_train.csv', header = 0, error_bad_lines=False)
#看一眼数据长什么样
data.head()

把datetime域切成日期和时间两部分

# 处理时间字段
temp = pd.DatetimeIndex(data['datetime'])
data['date'] = temp.date
data['time'] = temp.time
data.head()

时间那部分,好像最细的粒度是小时,所以我们干脆把小时字段拿出来作为更简洁的特征。

# 设定hour这个小时字段
data['hour'] = pd.to_datetime(data.time, format="%H:%M:%S")
data['hour'] = pd.Index(data['hour']).hour
data

仔细想想,数据只告诉我们是哪天了,按照一般逻辑,应该周末和工作日出去的人数量不同吧。我们设定一个新的字段dayofweek表示是一周中的第几天。再设定一个字段dateDays表示离第一天开始租车多久了(猜测在欧美国家,这种绿色环保的出行方式,会迅速蔓延吧)

# 我们对时间类的特征做处理,产出一个星期几的类别型变量
data['dayofweek'] = pd.DatetimeIndex(data.date).dayofweek

# 对时间类特征处理,产出一个时间长度变量
data['dateDays'] = (data.date - data.date[0]).astype('timedelta64[D]')

其实我们刚才一直都在猜测,并不知道真实的日期相关的数据分布对吧,所以我们要做一个小小的统计来看看真实的数据分布,我们统计一下一周各天的自行车租赁情况(分注册的人和没注册的人)

byday = data.groupby('dayofweek')
# 统计下没注册的用户租赁情况
byday['casual'].sum().reset_index()
# 统计下注册的用户的租赁情况
byday['registered'].sum().reset_index()

周末既然有不同,就单独拿一列出来给星期六,再单独拿一列出来给星期日

data['Saturday']=0
data.Saturday[data.dayofweek==5]=1

data['Sunday']=0
data.Sunday[data.dayofweek==6]=1

从数据中,把原始的时间字段等踢掉

dataRel = data.drop(['datetime', 'count','date','time','dayofweek'], axis=1)

特征向量化

我们这里打算用scikit-learn来建模。对于pandas的dataframe我们有方法/函数可以直接转成python中的dict。 另外,在这里我们要对离散值和连续值特征区分一下了,以便之后分开做不同的特征处理。

from sklearn.feature_extraction import DictVectorizer
# 我们把连续值的属性放入一个dict中
featureConCols = ['temp','atemp','humidity','windspeed','dateDays','hour']
dataFeatureCon = dataRel[featureConCols]
dataFeatureCon = dataFeatureCon.fillna( 'NA' ) #in case I missed any
X_dictCon = dataFeatureCon.T.to_dict().values() 

# 把离散值的属性放到另外一个dict中
featureCatCols = ['season','holiday','workingday','weather','Saturday', 'Sunday']
dataFeatureCat = dataRel[featureCatCols]
dataFeatureCat = dataFeatureCat.fillna( 'NA' ) #in case I missed any
X_dictCat = dataFeatureCat.T.to_dict().values() 

# 向量化特征
vec = DictVectorizer(sparse = False)
X_vec_cat = vec.fit_transform(X_dictCat)
X_vec_con = vec.fit_transform(X_dictCon)

标准化连续值特征

我们要对连续值属性做一些处理,最基本的当然是标准化,让连续值属性处理过后均值为0,方差为1。 这样的数据放到模型里,对模型训练的收敛和模型的准确性都有好处

from sklearn import preprocessing
# 标准化连续值数据
scaler = preprocessing.StandardScaler().fit(X_vec_con)
X_vec_con = scaler.transform(X_vec_con)

类别特征编码

最常用的当然是one-hot编码咯,比如颜色 红、蓝、黄 会被编码为[1, 0, 0],[0, 1, 0],[0, 0, 1]

from sklearn import preprocessing
# one-hot编码
enc = preprocessing.OneHotEncoder()
enc.fit(X_vec_cat)
X_vec_cat = enc.transform(X_vec_cat).toarray()

特征拼接

把离散和连续的特征都组合在一起

import numpy as np
X_vec = np.concatenate((X_vec_con,X_vec_cat), axis=1)

最后的特征,前6列是标准化过后的连续值特征,后面是编码后的离散值特征

处理y值

# 对Y向量化
Y_vec_reg = dataRel['registered'].values.astype(float)
Y_vec_cas = dataRel['casual'].values.astype(float)

喜欢本文的读者欢迎在看转发,这是对我最大的支持!感谢~

想要数据集的可在公众号回复【共享】获取。

更多推荐

实战 | Kaggle竞赛:预测二手车每年平均价值损失

实战 | Kaggle竞赛:华盛顿特区首都自行车租赁预测

实战|电子游戏销售Seaborn可视化

拼小圈的一点小思考

长按二维码
关注我们吧

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PyTorch实现MNIST数据集的手把手教程,你可以按照以下步骤进行操作: 1. 导入所需的库和模块。这包括PyTorch库和其他必要的辅助功能库。 2. 获取并预处理数据集。你可以使用MNIST数据集,该数据集包含了0到9的手写数字图像。可以使用torchvision库中的函数来下载和加载MNIST数据集。然后,你需要对图像进行预处理,例如将其转换为张量、进行归一化等。 3. 构建模型。在PyTorch中,你可以使用nn.Module类来定义模型。你可以选择使用卷积神经网络(CNN)或全连接神经网络(FNN)来构建模型。根据模型的复杂性和准确性需求进行选择。 4. 定义损失函数和优化器。根据你的问题和模型的输出类型,选择适当的损失函数,例如交叉熵损失函数。然后选择一个优化器,例如随机梯度下降(SGD)或Adam优化器。 5. 编写训练循环。在训练循环中,你需要定义训练过程中的前向传播、计算损失、反向传播和参数更新操作。同时,你还可以添加其他功能,例如计算准确率、记录训练损失等。 6. 编写测试循环。在测试循环中,你需要定义测试过程中的前向传播和计算准确率操作。 7. 定义主要函数。在主要函数中,你需要调用前面定义的函数和模型,对数据进行训练和测试,并输出结果。 请注意以上步骤只是一个大致的框架,具体的实现细节和代码可以根据你的需求和实际情况进行调整和修改。在实际操作中,你可能还需要考虑其他因素,例如数据扩充、模型调参和模型保存等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [PyTorch 手把手教你实现 MNIST 数据集](https://blog.csdn.net/weixin_46274168/article/details/118271544)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [使用自然语言TensorFlow或PyTorch构建模型处理(NLP)技术构建一个简单的情感分析模型(附详细操作步骤)....](https://download.csdn.net/download/weixin_44609920/88234133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值