標籤:

數據處理及分析-讀寫Excel

讀取Excel

需求:要求統計APP應用分享的次數統計:

1),每個人日平均分享次數

2),每周用戶的分享人數曲線

3),每周被分享人數曲線

Excel格式如下:

用戶ID:表示使用我們APP的用戶,分享人ID:表示前面一個用戶ID分享應用給其他人的ID,多個用""

基本流程:

讀取Excel數據 -> 預處理數據 -> 分析數據 -> 繪製圖表

  • 讀取Excel數據

#install.packages("openxlsx")library(openxlsx)excelPath <- "/Users/zhangchuan/Downloads/分享用戶數據.xlsx";excelData <- read.xlsx(excelPath,"工作表1")

使用openxlsx讀取Excel文件,需要先安裝,使用install.packages安裝,第一次安裝完成後,之後就可以不需要安裝了

使用read.xlsx從讀取文件,第一個參數是路徑名,第二個是Excel的sheet名,返回是一個數據框excelData

  • 預處理數據

names(excelData) <- c("time",userId,shareUserIds)excelData <- excelData[excelData$userId != "0",]excelData$time <- as.Date(excelData$time,"%Y-%m-%d")excelData$shareNumber <- nchar(excelData$shareUserIds) - nchar(gsub(",","",excelData$shareUserIds))+1excelData <- excelData[order(excelData$time,decreasing = FALSE),]

對excelData重新定義了每列的名稱,第二段去掉了userId為0的數據

使用as.Date對數據進行類型轉換為Date

最後一步是找出了每個用戶分享的數量,nchar:計算字元的長度,gsub函數是將字元串中「,」替換為空,再使用nachar計算其長度,所以兩者相減得到的是","的佔位長度,求數量則用「,」的數量+1

按照時間排序

  • 分析數據

1)求每個人日平均分享次數,即用總的分享次數/分享人數

#總分享用戶數totalUser <- nrow(excelData)print(sprintf("總分享次數:%d",totalUser))totalShareNumber <- sum(excelData$shareNumber)#平均分享次數avgShareNumber <- totalShareNumber/totalUserprint(sprintf("平均分享次數:%f",avgShareNumber))

nrow求得總行數,即分享人數,

sum函數求得總分享次數

2)求每周用戶的分享人數曲線

month <- tapply(c(1:nrow(excelData)),format(excelData$time,"%Y-%U"),length)month <- as.data.frame.table(month)names(month) <- c("time","totalUser")month$time <- as.character(month$time)month$timeNumber <- c(1:nrow(month))

首先使用tapply對數據進行分組,format(excelData$time,"%Y-%U")按照周來統計,lengh即為數據的長度,每一行代表一個數據

將分組的數據轉換為一個數據框,命名行名,列名,數據的轉換

  • 繪製圖標

plot(month$timeNumber,month$totalUser, xlab = "月份,第幾月", ylab = "分享人數", xaxt = "n", main = "APP用戶分享人數統計", col = "blue", type = "b",pch = 0)axis(1,at=month$timeNumber,labels = month$time,cex.axis=1.5)

使用plot函數繪製圖標,plot的用法:

plot(x,y,...)

axis用法:

axis(side,at=,labels=,pos=,lty=,col=,las=,tck=,...)

第1,2個參數表示橫、縱坐標的數據;xlab,ylab表示橫,縱坐標的介紹;main表示圖標的標題,col表示線段的顏色,type表示線段類型,b表示同時繪畫點和線,pch表示點使用的圖標,xaxt="n"表示自定義橫坐標刻度,不使用默認的刻度

axis函數就是定義的橫坐標

輸入結果為:


推薦閱讀:

[數據分析與可視化 8] 線性代數的價值:高效演算法
從麻辣小龍蝦到冷吃兔——辣味食物的消費升級
國內在線圖表工具,你能說出幾個?

TAG:R | 数据分析 |