基于基站定位数据的商圈分析上机报告————————————————————————————————作者:————————————————————————————————日期:基于基站定位数据的商圈分析上机报告1数据读取及其标准化setwd("E:/数据处理")Data=read.csv("./business_circle.csv",header=T,encoding='utf-8') colnames(Data)=c("number","x1","x2","x3","x4")attach(Data)y1=(x1-min(x1))/(max(x1)-min(x1))y2=(x2-min(x2))/(max(x2)-min(x2))y3=(x3-min(x3))/(max(x3)-min(x3))y4=(x4-min(x4))/(max(x4)-min(x4))standardized=data.frame(Data[,1],y1,y2,y3,y4)write.csv(standardized,"./standardizedData.csv",row.names=TRUE)2 模型构建2.1层次聚类library(ggplot2)Data=read.csv("./standardizedData.csv",header=F)Data1=data.frame(y1,y2,y3,y4)attach(Data1)dist=dist(Data1,method='euclidean')hc1<-hclust(dist,"ward.D2")plot(hc1)plot(hc1,hang=-1)#分成三类re1<-rect.hclust(hc1,k=3, border="purple") ##对构建好的谱系聚类图进行分类,这里分三类a=re1[[2]]##列表名[[下标]]b=re1[[3]]c=re1[[1]]#商圈类别1matrix=Data1[a,] ## 137个观测值、4个变量d<-dim(matrix)##137 4y<-as.numeric(t(matrix)) # t():矩阵转置,这里转换成数字向量row<-factor(rep(1:d[1],each=d[2]))x<-rep(1:d[2],times=d[1])data<-data.frame(y=y,x=x,row=row)View(data)ggplot(data=data,aes(x=x,y=y,group=row))+geom_line()+scale_x_continuous(breaks=c(1,2,3,4), labels=c("工作日人均停留时间","凌晨人均停留时间", "周末人均停留时间","日均人流量"))+labs(title="商圈类别1",x="",y="")#商圈类别2matrix=Data1[b,]d<-dim(matrix)y<-as.numeric(t(matrix))row<-factor(rep(1:d[1],each=d[2]))x<-rep(1:d[2],times=d[1])data<-data.frame(y=y,x=x,row=row)ggplot(data=data,aes(x=x,y=y,group=row))+geom_line()+scale_x_continuous(breaks=c(1,2,3,4), labels=c("工作日人均停留时间", "凌晨人均停留时间", "周末人均停留时间","日均人流量"))+labs(title="商圈类别2",x="",y="")#商圈类别3matrix=Data1[c,]d<-dim(matrix)##148 4y<-as.numeric(t(matrix))row<-factor(rep(1:d[1],each=d[2]))x<-rep(1:d[2],times=d[1])data<-data.frame(y=y,x=x,row=row)ggplot(data=data,aes(x=x,y=y,group=row))+geom_line()+scale_x_continuous(breaks=c(1,2,3,4),labels=c("工作日人均停留时间", "凌晨人均停留时间","周末人均停留时间","日均人流量"))+labs(title="商圈类别3",x="",y="")2.2 K-means聚类setwd("E:/数据处理")Data=read.csv("./business_circle.csv",header=T,encoding='utf-8')km=kmeans(Data,center=3)print(km)#数据分组aaa=data.frame(Data,km$cluster)Data1=Data[which(aaa$km.cluster==1),]Data2=Data[which(aaa$km.cluster==2),]Data3=Data[which(aaa$km.cluster==3),]#商圈1的概率密度函数图par(mfrow=c(2,2))##公共参数列表par#设置布局plot(density(Data1[,1]),col="red",main="工作日人均停留时间")plot(density(Data1[,2]),col="red",main="凌晨人均停留时间") plot(density(Data1[,3]),col="red",main="周末人均停留时间")plot(density(Data1[,4]),col="red",main="日均人流量")#商圈2的概率密度函数图par(mfrow=c(2,2))plot(density(Data2[,1]),col="purple",main="工作日人均停留时间") plot(density(Data2[,2]),col="purple",main="凌晨人均停留时间") plot(density(Data2[,3]),col="purple",main="周末人均停留时间")plot(density(Data2[,4]),col="purple",main="日均人流量")#商圈3的概率密度函数图par(mfrow=c(2,2))plot(density(Data3[,1]),col="blue",main="工作日人均停留时间")plot(density(Data3[,2]),col="blue",main="凌晨人均停留时间") plot(density(Data3[,3]),col="blue",main="周末人均停留时间") plot(density(Data3[,4]),col="blue",main="日均人流量")3总结3.1数据标准化的方法及使用离差标准化原因1.数据标准化方法数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。
在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。
其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上,常见的数据归一化的方法有:1)min-max标准化(Min-maxnormalization)也叫离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:其中max为样本数据的最大值,min为样本数据的最小值。
这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。
2)log函数转换通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:3)atan函数转换用反正切函数也可以实现数据的归一化:使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上。
而并非所有数据标准化的结果都映射到[0,1]区间上,也有一些非归一化的方法,如下:4)z-score 标准化(zero-meannormalization)也叫标准差标准化,是SPSS中最为常用的标准化方法:经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:其中μ为所有样本数据的均值,σ为所有样本数据的标准差。
5)Decimal scaling小数定标标准化这种方法通过移动数据的小数点位置来进行标准化。
小数点移动多少位取决于属性A的取值中的最大绝对值。
将属性A的原始值x使用decimalscaling 标准化到x'的计算方法是:x'=x/(10*j)其中,j是满足条件的最小整数。
例如:假定A的值由-986到917,A的最大绝对值为986,为使用小数定标标准化,我们用1000(即,j=3)除以每个值,这样,-986被规范化为-0.986。
2.使用离差标准化原因数据标准化处理后,原始数据均可以转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析,但是离差标准化是最常用最简单的一种方式3.2构建层次聚类模型时,可以调节哪些参数,对模型有何影响1.层次聚类1)计算变量之间的距离代码为:dist.r = dist(data, method=”“)其中method包括6种方法,表示不同的距离测度:”euclidean”,“maximum”, “manhattan”,“canberra”,“binary” or “minkowski”,分别表示欧几里德距离,切比雪夫距离,绝对值距离,Lance 距离,明科夫斯基距离,定性变量距离。