PHP前端开发

Python中大数据处理详解

百变鹏仔 2个月前 (02-07) #Python
文章标签 数据处理

分享

知识要点:lubridate包拆解时间 | POSIXlt利用决策树分类,利用随机森林预测利用对数进行fit,和exp函数还原

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

首先看一下官方给出的数据,一共两个表格,都是2011-2012年的数据,区别是Test文件是每个月的日期都是全的,但是没有注册用户和随意用户。而Train文件是每个月只有1-20天,但有两类用户的数量。
求解:补全Train文件里21-30号的用户数量。评价标准是预测与真实数量的比较。


1.png

首先加载文件和包

library(lubridate)library(randomForest)library(readr)setwd("E:")data<p>这里我就遇到坑了,用r语言缺省的read.csv死活读不出来正确的文件格式,换成xlsx更惨,所有时间都变成43045这样的怪数字。本来之前试过as.Date可以正确转换,但这次因为有时分秒,就只能用时间戳,但结果也不行。<br>最后是下载了"readr"包,用read_csv语句,顺利解读。<br>因为test比train日期完整,但缺少用户数,所以要把train和test合并。</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Python免费学习笔记(深入)</a>”;</p><pre class="hljs bash">test$registered=0test$casual=0test$count=0data<p>摘取时间:可以用时间戳,这里的时间比较简单,就是小时数,所以也可以直接截字符串。</p><pre class="hljs lasso">data$hour1<p>统计一下每个小时的使用总数,是这样(为什么介么整齐):</p><div class="image-package"><img src="https://img.php.cn/upload/article/000/000/001/0bfb605381f5a9056f300732ae463142-2.png" alt=""><br><div class="image-caption">6-hour1.png</div></div><p>接下来是运用箱线图,看一下使用者和时间,周几这些的关系。为什么用箱线图而不用hist直方图,因为箱线图有离散点表达,下面也因此运用对数求fit<br>从图中可以看出,在时间方面,注册用户和非注册用户的使用时间有很大不同。</p><div class="image-package"><img src="https://img.php.cn/upload/article/000/000/001/0bfb605381f5a9056f300732ae463142-3.png" alt=""><br><div class="image-caption">5-hour-regestered.png</div></div><div class="image-package"><img src="https://img.php.cn/upload/article/000/000/001/f0cf9c8e5fec766b8c30d0ad862957c7-4.png" alt=""><br><div class="image-caption">5-hour-casual.png</div></div><div class="image-package"><img src="https://img.php.cn/upload/article/000/000/001/f0cf9c8e5fec766b8c30d0ad862957c7-5.png" alt=""><br><div class="image-caption">4-boxplot-day.png</div></div><p>接下来用相关系数cor检验用户,温度,体感温度,湿度,风速的关系。</p><blockquote><p>相关系数:变量之间的线性关联度量,检验不同数据的相关程度。<br>取值范围[-1,1],越接近0越不相关。</p></blockquote><p>从运算结果可以看出,使用人群与风速呈负相关,比温度影响还大。</p><div class="image-package"><img src="https://img.php.cn/upload/article/000/000/001/f0cf9c8e5fec766b8c30d0ad862957c7-6.png" alt=""><br><div class="image-caption">cor.png</div></div><p>接下来就是将时间等因素用决策树分类,然后用随机森林来预测。随机森林和决策树的算法。听起来很高大上,其实现在也很常用了,所以一定要学会。</p><blockquote><p>决策树模型是 一种简单易用的非参数分类器。它不需要对数据有任何的先验假设,计算速度较快,结果容易解释,而且稳健性强,不怕噪声数据和缺失数据。<br>决策树模型的基本计 算步骤如下:先从n个自变量中挑选一个,寻找最佳分割点,将数据划分为两组。针对分组后数据,将上述步骤重复下去,直到满足某种条件。<br>在决策树建模中需要解决的重要问题有三个:<br>如何选择自变量<br>如何选择分割点<br>确定停止划分的条件</p></blockquote><p>做出注册用户和小时的决策树,</p><pre class="hljs haskell">train$hour1<div class="image-package"><img src="https://img.php.cn/upload/article/000/000/001/7d0b2025c30cd62d919e09da684b1d33-7.png" alt=""><br><div class="image-caption">3-raprt-hour1.png</div></div><p><br>然后就是根据决策树的结果手动分类,所以还满占代码的...</p><pre class="hljs powershell">train$hour1=22]=2data$dp_reg[data$hour1&gt;=9.5 &amp; data$hour1=7.5 &amp; data$hour1=8.5 &amp; data$hour1=20 &amp; data$hour1=18 &amp; data$hour1<p>同理,做出 (小时 | 温度) X (注册 | 随意用户) 等决策树,继续手动分类....</p><div class="image-package"><img src="https://img.php.cn/upload/article/000/000/001/7d0b2025c30cd62d919e09da684b1d33-8.png" alt=""><br><div class="image-caption">3-raprt-temp.png</div></div><p>年份月份,周末假日等手动分类</p><pre class="hljs powershell">data$year_part=0data$month3]=2data$year_part[data$year=='2011' &amp; data$month&gt;6]=3data$year_part[data$year=='2011' &amp; data$month&gt;9]=4
data$day_type=""data$day_type[data$holiday==0 &amp; data$workingday==0]="weekend"data$day_type[data$holiday==1]="holiday"data$day_type[data$holiday==0 &amp; data$workingday==1]="working day"data$weekend=0data$weekend[data$day=="Sunday"|data$day=="Saturday"]=1

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

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

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

train<p>这里不知道怎么回事,我的day和day_part加进去就报错,只有删掉这两个变量计算,还要研究修补。<br>然后用exp函数还原</p><pre class="hljs stata">train$registered<p>最后把20日后的日期截出来,写入新的csv文件上传。</p><pre class="hljs haskell">train2=20,]submit_final<p>大功告成!<br>github代码加群</p><p>原来的示例是炼数成金网站的kaggle课程第二节,基本按照视频的思路。因为课程没有源代码,所以要自己修补运行完整。历时两三天总算把这个功课做完了。下面要修正的有:</p><blockquote><p>好好理解三个知识点(lubridate包/POSIXlt,log线性,决策树和随机森林);<br>用WOE和IV代替cor函数分析相关关系;<br>用其他图形展现的手段分析<br>随机树变量重新测试</p><p>学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群<br>626062078,我们一起学Python!</p></blockquote><p>完成了一个“浩大完整”的数据分析,还是很有成就感的!</p>