數據處理及分析-讀寫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] 線性代數的價值:高效演算法
※從麻辣小龍蝦到冷吃兔——辣味食物的消費升級
※國內在線圖表工具,你能說出幾個?