project01-共享单车项目1

此为优达学城-神经网络学习中的预测共享单车使用情况项目。数据可以在此处get到数据

项目介绍

  • 数据集介绍

自行车共享租赁行为与环境和季节之间的关联性很大。例如,天气条件、降水情况、周几、季节、一天的时刻等都会影响到租赁行为。
核心数据集采用的是美国华盛顿特区 Capital Bikeshare 系统 2011 至 2012 年的两年间历史记录日志,该数据集可以被公开访问 (http://capitalbikeshare.com/system-data)。
我们按照 2 小时间隔和每日间隔汇总了数据,然后提取并添加了相应的天气和季节性信息。天气信息来自 http://www.freemeteo.com。

  1. hour.csv - 按照每小时汇总的共享自行车使用人数。记录数:17379 小时
  2. day.csv - 按照每天汇总的共享自行车使用人数。记录数:731 天

=======================================
数据集特征
hour.csv 和 day.csv 文件都具有以下字段,但是 day.csv 中没有 hr 字段
instant:记录索引

  • dteday:日期
  • season:季节(1:春季,2:夏季,3:秋季,4:冬季)
  • yr : 年份(0:2011 年,1:2012 年)
  • mnth:月份(1 到12 月)
  • hr : 小时(0 到 23 时)
  • holiday: 当天是否是假期
  • weekday: 星期几
  • workingday: 如果不是周末或假期则是 1 ,否则是 0。
  • weathersit :
    - 1: 晴朗、飘着几朵云、局部多云
    - 2: 薄雾加多云、薄雾加碎云、薄雾加几朵云、薄雾
    - 3: 小雪、小雨加雷暴加散云、小雨加散云
    - 4: 大雨加冰雹加雷暴加薄雾、下雪加雾
  • temp: 标准化温度(摄氏度)。标准化后的值为原数据除以41(最大值)

  • atemp: 标准化体感温度(摄氏度)。标准化后的值为原数据除以50(最大值)

  • hum: 标准化湿度。标准化后的值为原数据除以100(最大值)

  • windspeed: 标准化风速。标准化后的值为原数据除以67(最大值)

  • casual: 临时用户数

  • registered: 注册用户数

  • cnt: 租赁自行车总用户数(包括临时用户和注册用户)

  • 任务

回归:
预测基于环境和季节性信息的每时或每日自行车租赁人数。

数据处理

  • 导入库
%matplotlib inline
%config InlineBackend.figure_format = 'retina'

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
  • 加载数据
data_path = 'hour.csv'

rides = pd.read_csv(data_path)

rides.head(20)

图1

  • 展示部分数据
rides[:24*10].plot(x='dteday', y='cnt')

图2

  • 哑变量处理
    一些分类变量,例如季节、天气、月份。要在我们的模型中包含这些数据,需要用 Pandas 库中的 get_dummies()进行处理。参考get_dummies()
dummy_fields = ['season', 'weathersit', 'mnth', 'hr', 'weekday']
for each in dummy_fields:
    dummies = pd.get_dummies(rides[each], prefix=each, drop_first=False)    #实现实现one hot encode
    rides = pd.concat([rides, dummies], axis=1)  #合并

fields_to_drop = ['instant', 'dteday', 'season', 'weathersit', 
                  'weekday', 'atemp', 'mnth', 'workingday', 'hr'] 
data = rides.drop(fields_to_drop, axis=1)  #删除原来的
data.head()

图2

  • 标准化数据

为了更轻松地训练网络,我们将对每个连续变量标准化,即转换和调整变量,使它们的均值为 0,标准差为 1。

同时保存换算用的数据(scaled_features),以便当我们使用网络进行预测时可以还原数据。

quant_features = ['casual', 'registered', 'cnt', 'temp', 'hum', 'windspeed']
# Store scalings in a dictionary so we can convert back later
scaled_features = {}
for each in quant_features:
    mean, std = data[each].mean(), data[each].std()
    scaled_features[each] = [mean, std]
    data.loc[:, each] = (data[each] - mean)/std
data.head(5)
print(scaled_features)

可以看到保存的字典

{'casual': [13.803996925441968, 24.20136941572315], 'registered': [67.24096848578017, 63.98976847990054], 'cnt': [81.04496541122214, 78.0731962157199], 'temp': [0.3056187548039968, 0.12992863774138008], 'hum': [0.5864565718677934, 0.21514649890484336], 'windspeed': [0.22356963873942928, 0.1330423496119106]}
  • 数据拆分
    将数据集拆分为训练、测试和验证数据集
    将大约最后 21 天的数据保存为测试数据集,这些数据集会在训练完网络后使用。我们将使用该数据集进行预测,并与实际的骑行人数进行对比。
# Save data for approximately the last 21 days 
test_data = data[-21*24:]

# Now remove the test data from the data set 
data = data[:-21*24]

# Separate the data into features and targets
target_fields = ['cnt', 'casual', 'registered']
features, targets = data.drop(target_fields, axis=1), data[target_fields]
test_features, test_targets = test_data.drop(target_fields, axis=1), test_data[target_fields]

将数据拆分为两个数据集,一个用作训练,一个在网络训练完后用来验证网络。因为数据是有时间序列特性的,所以我们用历史数据进行训练,然后尝试预测未来数据(验证数据集)。

# Hold out the last 60 days or so of the remaining data as a validation set
train_features, train_targets = features[:-60*24], targets[:-60*24]
val_features, val_targets = features[-60*24:], targets[-60*24:]

后续第二部分见:https://blog.csdn.net/xiuxiuxiu666/article/details/104297447

=======================================
在公开场合使用该数据集必须引用以下公开声明:

[1] Fanaee-T, Hadi, and Gama, Joao, “Event labeling combining ensemble detectors and background knowledge”, Progress in Artificial Intelligence (2013): pp. 1-15, Springer Berlin Heidelberg, doi:10.1007/s13748-013-0040-3.

@article{
year={2013},
issn={2192-6352},
journal={Progress in Artificial Intelligence},
doi={10.1007/s13748-013-0040-3},
title={Event labeling combining ensemble detectors and background knowledge},
url={http://dx.doi.org/10.1007/s13748-013-0040-3},
publisher={Springer Berlin Heidelberg},
keywords={Event labeling; Event detection; Ensemble learning; Background knowledge},
author={Fanaee-T, Hadi and Gama, Joao},
pages={1-15}
}

发布了49 篇原创文章 · 获赞 0 · 访问量 726

猜你喜欢

转载自blog.csdn.net/xiuxiuxiu666/article/details/104253921