繪製累積分佈圖-R語言

最近有一個需求,要求根據數據分佈情況,根據分佈曲線尋找切點來進行人羣特徵劃分,用數據來反應實際情況,而不是主觀劃分節點。
這次需要處理的數據量爲億級量,處理之後關鍵繪圖數據條數爲一千萬條左右,這次並沒有擬合分佈曲線,求導,找到斜率變動最大的幾個點,僅通過分佈圖,定義了幾個坡度變動明顯的幾個點。

數據格式截圖

這裏寫圖片描述

R代碼

price_data<-read.csv("E://house//estate.csv",header=F,encoding="UTF-8",quote="")#讀取數據
colnames(price_data)<-c("card","year","loc","total_price")#給列賦予名稱
pdata<-table(price_data$total_price)#按價格列統計頻次
pframe<-data.frame(as.numeric(names(pdata)),as.numeric(pdata))#將table類型數據轉化爲數據框格式
colnames(pframe)<-c("price","num")#給統計後的數據命名
rankData<-pframe[order(pframe[,1],decreasing=F),]#按價格升序排列
####計算價格頻數累積值####
mulData<-data.frame()
sum=0
for(i in 1:nrow(rankData)){
    sum=sum+rankData[i,2]
    row=cbind(rankData$price[i],sum)#拼接
    mulData=rbind(mulData,row)
}#此步耗時良久,數據量決定
colnames(mulData)<-c("price","num")
finalData<-mulData[which(mulData$price>100000),]#篩選滿足條件的數據
plot(finalData$price,finalData$num/sum,xaxt="n",yaxt="n",main="價格分佈圖",xlab="價格",ylab="累計比例")
axis(side=2,seq(from=0,to=1,by=0.1),)#設置y軸
axis(side=1,seq(from=500000,to=10000000,by=400000),)#設置x軸
grid(nx=25,ny=25)#添加方格
text(600000,0.4,"grade1",col=gray(0:10/50),cex=1)
text(900000,0.6,"grade2",col=gray(0:20/50),cex=1)
text(2000000,0.9,"grade3",col=gray(0:30/50),cex=1)
text(10000000,1,"grade4",col=gray(0:40/50),cex=1)

繪製累積分佈圖

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章