分享

知识要点:

lubridate包拆解时间 | POSIXlt

利用决策树分类,利用随机森林预测

利用对数进行fit,和exp函数还原

训练集来自Kaggle华盛顿自行车共享计划中的自行车租赁数据,分析共享自行车与天气、时间等关系。数据集共11个变量,10000多行数据。

https://www.kaggle.com/c/bike-sharing-demand

首先看一下官方给出的数据,一共两个表格,都是2011-2012年的数据,区别是Test文件是每个月的日期都是全的,但是没有注册用户和随意用户。而Train文件是每个月只有1-20天,但有两类用户的数量。

求解:补全Train文件里21-30号的用户数量。评价标准是预测与真实数量的比较。

1.png

首先加载文件和包

library(lubridate)

library(randomForest)

library(readr)

setwd("E:")

data<-read_csv("train.csv")

head(data)

这里我就遇到坑了,用r语言缺省的read.csv死活读不出来正确的文件格式,换成xlsx更惨,所有时间都变成43045这样的怪数字。本来之前试过as.Date可以正确转换,但这次因为有时分秒,就只能用时间戳,但结果也不行。

最后是下载了"readr"包,用read_csv语句,顺利解读。

因为test比train日期完整,但缺少用户数,所以要把train和test合并。

test$registered=0

test$casual=0

test$count=0

data<-rbind(train,test)

摘取时间:可以用时间戳,这里的时间比较简单,就是小时数,所以也可以直接截字符串。

data$hour1<-substr(data$datetime,12,13)

table(data$hour1)

统计一下每个小时的使用总数,是这样(为什么介么整齐):

6-hour1.png

接下来是运用箱线图,看一下使用者和时间,周几这些的关系。为什么用箱线图而不用hist直方图,因为箱线图有离散点表达,下面也因此运用对数求fit

从图中可以看出,在时间方面,注册用户和非注册用户的使用时间有很大不同。

5-hour-regestered.png

5-hour-casual.png

4-boxplot-day.png

接下来用相关系数cor检验用户,温度,体感温度,湿度,风速的关系。

相关系数:变量之间的线性关联度量,检验不同数据的相关程度。

取值范围[-1,1],越接近0越不相关。

从运算结果可以看出,使用人群与风速呈负相关,比温度影响还大。

cor.png

接下来就是将时间等因素用决策树分类,然后用随机森林来预测。随机森林和决策树的算法。听起来很高大上,其实现在也很常用了,所以一定要学会。

决策树模型是 一种简单易用的非参数分类器。它不需要对数据有任何的先验假设,计算速度较快,结果容易解释,而且稳健性强,不怕噪声数据和缺失数据。

决策树模型的基本计 算步骤如下:先从n个自变量中挑选一个,寻找最佳分割点,将数据划分为两组。针对分组后数据,将上述步骤重复下去,直到满足某种条件。

在决策树建模中需要解决的重要问题有三个:

如何选择自变量

如何选择分割点

确定停止划分的条件

做出注册用户和小时的决策树,

train$hour1<-as.integer(train$hour1)

d<-rpart(registered~hour1,data=train)

rpart.plot(d)

3-raprt-hour1.png

然后就是根据决策树的结果手动分类,所以还满占代码的...

train$hour1<-as.integer(train$hour1)

data$dp_reg=0

data$dp_reg[data$hour1<7.5]=1

data$dp_reg[data$hour1>=22]=2

data$dp_reg[data$hour1>=9.5 & data$hour1<18]=3

data$dp_reg[data$hour1>=7.5 & data$hour1<18]=4

data$dp_reg[data$hour1>=8.5 & data$hour1<18]=5

data$dp_reg[data$hour1>=20 & data$hour1<20]=6

data$dp_reg[data$hour1>=18 & data$hour1<20]=7

同理,做出 (小时 | 温度) X (注册 | 随意用户) 等决策树,继续手动分类....

3-raprt-temp.png

年份月份,周末假日等手动分类

data$year_part=0

data$month<-month(data$datatime)

data$year_part[data$year=='2011']=1

data$year_part[data$year=='2011' & data$month>3]=2

data$year_part[data$year=='2011' & data$month>6]=3

data$year_part[data$year=='2011' & data$month>9]=4

data$day_type=""

data$day_type[data$holiday==0 & data$workingday==0]="weekend"

data$day_type[data$holiday==1]="holiday"

data$day_type[data$holiday==0 & data$workingday==1]="working day"

data$weekend=0

data$weekend[data$day=="Sunday"|data$day=="Saturday"]=1

接下来用随机森林语句预测

在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。

随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,再在其中选取最优的特征。这样决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

ntree指定随机森林所包含的决策树数目,默认为500,通常在性能允许的情况下越大越好;

mtry指定节点中用于二叉树的变量个数,默认情况下数据集变量个数的二次方根(分类模型)或三分之一(预测模型)。一般是需要进行人为的逐次挑选,确定最佳的m值—摘自datacruiser笔记。这里我主要学习,所以虽然有10000多数据集,但也只定了500。就这500我的小电脑也跑了半天。

train<-data

set.seed(1234)

train$logreg<-log(train$registered+1)

test$logcas<-log(train$casual+1)

fit1<-randomForest(logreg~hour1+workingday+day+holiday+day_type+temp_reg+humidity+atemp+windspeed+season+weather+dp_reg+weekend+year+year_part,train,importance=TRUE,ntree=250)

pred1<-predict(fit1,train)

train$logreg<-pred1

这里不知道怎么回事,我的day和day_part加进去就报错,只有删掉这两个变量计算,还要研究修补。

然后用exp函数还原

train$registered<-exp(train$logreg)-1

train$casual<-exp(train$logcas)-1

train$count<-test$casual+train$registered

最后把20日后的日期截出来,写入新的csv文件上传。

train2<-train[as.integer(day(data$datetime))>=20,]

submit_final<-data.frame(datetime=test$datetime,count=test$count)

write.csv(submit_final,"submit_final.csv",row.names=F)

大功告成!

github代码加群

原来的示例是炼数成金网站的kaggle课程第二节,基本按照视频的思路。因为课程没有源代码,所以要自己修补运行完整。历时两三天总算把这个功课做完了。下面要修正的有:

好好理解三个知识点(lubridate包/POSIXlt,log线性,决策树和随机森林);

用WOE和IV代替cor函数分析相关关系;

用其他图形展现的手段分析

随机树变量重新测试

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群

626062078,我们一起学Python!

完成了一个“浩大完整”的数据分析,还是很有成就感的!

python数据处理实例-Python大数据处理案例相关推荐

  1. python代码实例-python程序实例

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. github.comteamssixdouluo-download.gi ...

  2. Python特训营(大数据处理)

    文章目录 数据分析过程 定位数据 获取数据 清洗数据 存储数据 加工数据 展现数据 使用数据 大数据分析特点 4v NoSQL四种 大数据处理 采集 预处理 数据清洗 遗漏数据 离群点处理 噪声的处理 ...

  3. python求数值积分_Python大数据处理-Scipy基础入门,数值积分计算

    温馨提示:阅读本文只需要1分钟,您就可以掌握Scipy进行定积分计算.二重.三重积分.多重积分的计算.继续承接上文学习Scipy科学数据处理,为我们后面Python大数据处理开发打基础.今天主要学习分 ...

  4. python简单实例-python简单案例

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 一个简单的python资讯采集案例,列表页到详情页,到数据保存,保存为txt文档, ...

  5. python开发实例-python开发案例

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. gitee.com52itstylepythonblobmasterda ...

  6. python课堂实例,Python电子教案2 1 Python程序实例解析课堂

    <Python电子教案2 1 Python程序实例解析课堂>由会员分享,可在线阅读,更多相关<Python电子教案2 1 Python程序实例解析课堂(41页珍藏版)>请在人人 ...

  7. python基础实例-Python入门基础知识实例,值得收藏!

    7月的编程语言指数榜已经发布,Python 在今年5月首次超越 Java 拿下榜首位置后,仍保持上涨趋势,正逐渐与 Java 拉开差距.(图为与去年 7 月数据对比) 上周为大家简单介绍了如何安装Py ...

  8. python教程实例-python教程实例

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 然后我们要将python原生数据类型恢复成正常的对象实例. serializer ...

  9. python基础实例-Python基础之字符串常见操作经典实例详解

    本文实例讲述了Python基础之字符串常见操作.分享给大家供大家参考,具体如下: 字符串基本操作 切片 # str[beg:end] # (下标从 0 开始)从下标为beg开始算起,切取到下标为 en ...

  10. python经典实例-python经典实例

    本书是Python经典实例解析,采用基于实例的方法编写,每个实例都会解决具体的问题和难题.主要内容有:数字.字符串和元组,语句与语法,函数定义,列表.集.字典,用户输入和输出等内置数据结构,类和对象, ...

最新文章

  1. hdu 2009 求数列的和(c语言)
  2. Java I/O不迷茫,一文为你导航!
  3. oracle存储过程多条件判断,oracle存储过程条件替空的判断(2)
  4. 【.NET Core 3.0】框架之十二 || 跨域 与 Proxy
  5. 类的序列化[Serializable]
  6. 运维常用进程查看命令
  7. 子集生成-增量构造法||位向量法
  8. Dive into Python
  9. 排错技能:任务管理器中追踪某w3wp.exe是哪个IIS站点的application pool
  10. webpack配置时:Plugin/Preset files are not allowed to export objects, only functions.
  11. 业绩梯队:让各层级领导者做出正确的业绩
  12. 微信小程序 环形进度条_微信小程序实现圆形进度条
  13. 关于小米电视不能访问电脑共享文件的解决方案之一
  14. 怎么压缩pdf文件大小并保持清晰度?
  15. 超越Framer的基础知识
  16. 什么是格局?如何提升自我格局?做到这一点就够了!
  17. 谷歌生物医学专用翻译_一个可以快速翻译浏览英文文献的工具,拿走不谢!
  18. Docker安装太慢,使用国内镜像服务快速安装
  19. 基于Python的多功能本地视频播放系统
  20. AjaxPro.NET使用,方便的在客户端直接调用服务端方法

热门文章

  1. python123数字形式转换_【Python系统学习02】数据类型与类型转换
  2. ef mysql code first_[EF]vs15+ef6+mysql code first方式
  3. go语言复数包_Go语言中包的风格指南
  4. 局部敏感哈希算法(Locality Sensitive Hashing)
  5. linux 使用split分割大文件
  6. 年末将至,值得你关注的16个Java 开源项目!
  7. WebStorm无法显示文件夹目录
  8. 37、Django实战第37天:404以及500页面配置
  9. JAVA基础——最简单的多重循环程序
  10. Java IO流面试题