Python大數據處理案例

来源:http://www.cnblogs.com/jiaoyu121/archive/2017/06/25/7078355.html
-Advertisement-
Play Games

分享 知識要點:lubridate包拆解時間 | POSIXlt利用決策樹分類,利用隨機森林預測利用對數進行fit,和exp函數還原 訓練集來自Kaggle華盛頓自行車共用計劃中的自行車租賃數據,分析共用自行車與天氣、時間等關係。數據集共11個變數,10000多行數據。https://www.kag ...


分享

知識要點:
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!

完成了一個“浩大完整”的數據分析,還是很有成就感的!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近手頭上的項目終於忙得差不多了,想起好久沒有更新了的NanUI,再看著每天QQ群未讀消息閃爍的標誌,突然才發現似乎愧對了群里各位喜愛NanUI的朋友們。於是乎,就想趁這幾天有時間,好好的修複一下NanUI已知的BUG,再用有限的時間推進整個項目的進度。 在複習代碼的時候,想起了群里有朋友提出說Na ...
  • 空(None) None可以用來表示某一個變數的值缺失,類似於其他語言中的null。 像其他的空值:0,[]和空的string,布爾變數給的是False而不是True。 結果是: 當一個函數沒有返回任何值時,就會返回None: 結果是: Hi None 字典(Dictionaries) 字典是一種給 ...
  • 在上一節中講解了歸併排序的遞歸版《4.比較排序之歸併排序(遞歸)》,通常來講,遞歸版的歸併排序要更為常用,本節簡單介紹下非遞歸版的歸併排序。思路和遞歸版相同,均為先分解後合併,非遞歸的重點在於如何確定併合理的分解待排序數組。 對於遞歸我們是這麼做的: 對於非遞歸來講,切分的不向遞歸從大到小,非遞歸實 ...
  • 在編寫穩定可靠的軟體服務時經常用到輸出堆棧信息,以便用戶/開發者獲取準確的運行信息。常用在日誌輸出,錯誤報告,異常檢測。本文介紹Linux與Windows下用C++獲取堆棧信息的方法。 ...
  • JSON-lib包(最關鍵的兩個類分別是JSONObject和JSONArray)完成對json的構造和一些基本方法的使用。 二者區別: ①JSONObject構造的字元串是鍵值對形式(key:value),多個鍵值對間以英文逗號連接; ②JSONArray構造的字元串是數組形式([array1,a ...
  • 反射的基本概述 一個class文件被載入到記憶體的時候,JVM就會經行解剖,把這個class文件的所有成員全部解剖出來,然後JVM會創建一個Class對象,把這些成員信息全部都封裝起來,所謂反射就是指:我們獲取到這個Class對象,就相當於獲取到了該類的所有成員信息,我們就能操又該類的所有成員. Ja ...
  • 無意間碰到的一個大神整理的Python學習思維導圖,感覺對初學者理清學習思路大有裨益,非常感謝他的分享。 詳情見:https://woaielf.github.io/2017/06/13/python3-all/ 14 張思維導圖 基礎知識 數據類型 序列 字元串 列表 & 元組 字典 & 集合 條 ...
  • /* 工作單元 這個模式涉及到了領域模型、數據映射器和標識映射,這裡就統一進行整理和回顧了。 $venue = new \woo\domain\Venue(null,"The Green Tree"); \woo\domain\ObjectWatcher::instance()->performOp... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...