头歌 共享单车大数据项目数据分析

第一关:数据探索与可视化

import pandas as pd  
import matplotlib  
matplotlib.use('Agg')  
import matplotlib.pyplot as plt  
#********* Begin *********#  
import pandas as pd  
import matplotlib.pyplot as plt
train_df = pd.read_csv('./step1/bike_train.csv')  
train_df['hour'] = train_df.datetime.apply(lambda x:x.split()[1].split(':')[0]).astype('int')  
group_hour=train_df.groupby(train_df.hour)  
hour_mean=group_hour[['count','registered','casual']].mean()  
fig=plt.figure(figsize=(10,10))  
plt.plot(hour_mean['count'])
plt.title('average count per hour')  
plt.savefig('./step1/result/plot.png')  
#********* End *********#  

第二关:特征工程

import pandas as pd  
import numpy as np  
from datetime import datetime
def transform_data(train_df):  
    '''  
    将train_df中的datetime划分成year、month、date、weekday  
    :param train_df:从bike_train.csv中读取的DataFrame  
    :return:无  
    '''
    #********* Begin *********#  
    train_df['date'] = train_df.datetime.apply(lambda x: x.split()[0])  
    train_df['hour'] = train_df.datetime.apply(lambda x: x.split()[1].split(':')[0]).astype('int')  
    train_df['year'] = train_df.datetime.apply(lambda x: x.split()[0].split('-')[0]).astype('int')  
    train_df['month'] = train_df.datetime.apply(lambda x: x.split()[0].split('-')[1]).astype('int')  
    train_df['weekday'] = train_df.date.apply(lambda x: datetime.strptime(x, '%Y-%m-%d').isoweekday())
    return train_df  
    #********* End **********#  

第三关:租赁需求预估

#********* Begin *********#  
import pandas as pd  
import numpy as np  
from datetime import datetime  
from sklearn.linear_model import Ridge
train_df = pd.read_csv('./step3/bike_train.csv')
# 舍弃掉异常count  
train_df=train_df[np.abs(train_df['count']-train_df['count'].mean())<=3*train_df['count'].std()]
# 训练集的时间数据处理
train_df['date']=train_df.datetime.apply(lambda x:x.split()[0])  
train_df['hour']=train_df.datetime.apply(lambda x:x.split()[1].split(':')[0]).astype('int')  
train_df['year']=train_df.datetime.apply(lambda x:x.split()[0].split('-')[0]).astype('int')  
train_df['month']=train_df.datetime.apply(lambda x:x.split()[0].split('-')[1]).astype('int')  
train_df['weekday']=train_df.date.apply( lambda x : datetime.strptime(x,'%Y-%m-%d').isoweekday())
# 独热编码  
train_df_back=train_df  
dummies_month = pd.get_dummies(train_df['month'], prefix='month')  
dummies_year = pd.get_dummies(train_df['year'], prefix='year')  
dummies_season = pd.get_dummies(train_df['season'], prefix='season')  
dummies_weather = pd.get_dummies(train_df['weather'], prefix='weather')
train_df_back = pd.concat([train_df, dummies_month,dummies_year, dummies_season,dummies_weather], axis = 1)
train_label = train_df_back['count']  
train_df_back = train_df_back.drop(['datetime', 'season', 'weather', 'atemp', 'date', 'month', 'count'], axis=1)
test_df = pd.read_csv('./step3/bike_test.csv')
# 测试集的时间数据处理  
test_df['date']=test_df.datetime.apply(lambda x:x.split()[0])  
test_df['hour']=test_df.datetime.apply(lambda x:x.split()[1].split(':')[0]).astype('int')  
test_df['year']=test_df.datetime.apply(lambda x:x.split()[0].split('-')[0]).astype('int')  
test_df['month']=test_df.datetime.apply(lambda x:x.split()[0].split('-')[1]).astype('int')  
test_df['weekday']=test_df.date.apply( lambda x : datetime.strptime(x,'%Y-%m-%d').isoweekday())
# 独热编码
test_df_back=test_df  
dummies_month = pd.get_dummies(test_df['month'], prefix='month')  
dummies_year = pd.get_dummies(test_df['year'], prefix='year')  
dummies_season = pd.get_dummies(test_df['season'], prefix='season')  
dummies_weather = pd.get_dummies(test_df['weather'], prefix='weather')
test_df_back = pd.concat([test_df, dummies_month,dummies_year, dummies_season,dummies_weather], axis = 1)  
test_df_back = test_df_back.drop(['datetime', 'season', 'weather', 'atemp', 'date', 'month'], axis=1)
clf = Ridge(alpha=1.0)
# 训练  
clf.fit(train_df_back, train_label)  
# 预测  
count = clf.predict(test_df_back)
# 保存结果  
result = pd.DataFrame({'datetime':test_df['datetime'], 'count':count})  
result.to_csv('./step3/result.csv', index=False)  
#********* End *********#  
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值