數據分析學習-簡單數據處理

上圖是常用數據導入到R語言的一些方法,當然除了這些還有很多其它格式。其中導入excel文件時可以先把xlsx格式的數據另存為csv文件,然後用read.table()或是read.csv()函數進行導入。以下是csv文件的導入代碼:

file.choose()可以在執行語句時手動選擇數據所在位置,比較方便。這裡也可以替換成數據的地址。在後面的實例中會運用openxlsx()函數進行導入。

> mydata<-read.table(file.choose(),header = TRUE,sep = ",")> head(mydata) 地區 A企業 B企業 C企業1 北京 6886 7861 93532 天津 3698 4344 50503 河北 10096 11516 137104 遼寧 8009 9214 110235 上海 9154 10366 121896 江蘇 18306 21645 25741> mydata<-read.csv(file.choose(),header = TRUE,sep = ",")> head(mydata) 地區 A企業 B企業 C企業1 北京 6886 7861 93532 天津 3698 4344 50503 河北 10096 11516 137104 遼寧 8009 9214 110235 上海 9154 10366 121896 江蘇 18306 21645 25741

我之前學習編程語言的時候經常無法專註於每一個細小的知識點,總希望能有個具體的複雜 些的實例來練手,希望在發現問題解決問題的過程中學習新的知識點。這是一種很好的驅動方式,但往往找的例子要麼太簡單要麼太難,最終看著看著就煩了。下面這個題目對現在的我來說難易適中,同時又涵蓋了數據分析處理的基本流程,包括數據導入、缺失值處理、日期處理、數據類型轉換、計算指標值、可視化。

實踐題目:

根據「朝陽醫院2016年消費數據.xlsx」完成以下操作:

1、 數據導入 2、列名重命名 3、刪除缺失數據 4、處理日期 5、數據類型轉換 6、按時間進行數據排序 7、計算月均消費次數 8、計算月均消費金額 9、計算客單價 10、周消費趨勢

> library(openxlsx)> exceldata<-read.xlsx(file.choose(),"Sheet1")> names(exceldata)<-c("time","cardno","drugId",+ "drugName","saleNumber",+ "virtualmoney","actualmoney")> #列出銷售數量值為NA的行> exceldata[is.na(exceldata$saleNumber),][1] time cardno drugId drugName saleNumber virtualmoney actualmoney <0 行> (或0-長度的row.names)#刪除存在缺失值的行> na.omit(exceldata)#時間列只留日期值> library(stringr)> time1<-str_split_fixed(exceldata$time," ",n=2)> class(time1)[1] "matrix"> exceldata$time<-time1[,1]> head(exceldata) time cardno drugId drugName saleNumber virtualmoney actualmoney1 2016-01-01 001616528 236701 三九感冒靈 7 196 182.002 2016-01-02 001616528 236701 三九感冒靈 3 84 84.00> with(exceldata,class(time))[1] "character"#為了更好的分析修改部分列的數據類型> exceldata$time<-as.Date(exceldata$time,"%Y-%m-%d")> exceldata$time<-as.Date(exceldata$time,"%Y-%m-%d")> exceldata$saleNumber<-as.numeric(exceldata$saleNumber)> exceldata$virtualmoney<-as.numeric(exceldata$virtualmoney)> exceldata$actualmoney<-as.numeric(exceldata$actualmoney)#數據按時間升序排序> exceldata<-exceldata[order(exceldata$time,decreasing = FALSE),]#計算總的有效消費次數> Newdata1<-exceldata[!duplicated(data.frame(exceldata$time,exceldata$cardno)),]> Newdata1<-exceldata[!duplicated(exceldata[,c("time","cardno")]),]> consumeNumber<-nrow(Newdata1)> consumeNumber[1] 5398#計算月均消費次數> startTime<-Newdata1$time[1]> endTime<-Newdata1$time[consumeNumber]> day<-endTime-startTime> day<-as.numeric(day)> month<-day %/% 30> monthConsume<-consumeNumber/month> monthConsume[1] 899.6667#計算月均消費金額> totalmoney<-sum(exceldata$actualmoney,na.rm = TRUE)> monthMoney<-totalmoney/month> monthMoney[1] 50771.71#計算客單價> pct<-totalmoney/consumeNumber> pct[1] 56.43391#周消費趨勢> week <- tapply(exceldata$actualmoney, + format(exceldata$time, "%Y-%U"), + sum) > week <- as.data.frame.table(week)> names(week) <- c("time","actualmoney")> week$time <- as.character(week$time)> week$timeNumber <- c(1:nrow(week))> plot(week$timeNumber, week$actualmoney,+ xlab="時間(年份-第幾周)",+ ylab="消費金額", + xaxt = "n",+ main= "2016年朝陽醫院消費曲線", + col="red",+ type="b")> axis(1,at=week$timeNumber, labels=week$time, cex.axis = 1)

完成這部分的調試後感覺到自己終於可以完整的用R解決一個問題了,當然這還只是開始。。每一步的處理方法並不只一種,R語言中有很多包很多函數,現在只能慢慢的一個個的學起。在運用的過程中,單純的去記憶一個函數而不結合實際應用便很枯燥,因為不知它會用在何處,當你真正用到的時候又想不起來了。其實除了列出的這幾個操作,還有很多想執行的東西,期待後面的學習~~


推薦閱讀:

TAG:數據分析 | R編程語言 |