library(“rJava”)
library(“xlsx”)
library(“tidyverse”)
library(“baidumap”)
library(“seg”)

    pudong <- read.xlsx(“F:/a series of documents/sunlaoshikejian/空间分析1/村居人口.xlsx”,sheetName = “pudong”,header = F,encoding = “UTF-8”,stringsAsFactors = FALSE,check.names = FALSE)
head(pudong)

##      1         2        3      4         5         6             7
## 1 序号  城市名称 城市代码   辖区  辖区代码    区名称        区代码
## 2   id cityname  citycode   area  areacode  district  districtcode
## 3 3092      上海  3.1e+11 市辖区 3.101e+11  浦东新区   3.10115e+11
## 4 3093      上海  3.1e+11 市辖区 3.101e+11  浦东新区   3.10115e+11
## 5 3094      上海  3.1e+11 市辖区 3.101e+11  浦东新区   3.10115e+11
## 6 3095      上海  3.1e+11 市辖区 3.101e+11  浦东新区   3.10115e+11
##              8            9             10             11       12
## 1     街道名称     街道代码     居委会名称     居委会代码 城乡分类
## 2      subdist  subdistcode      community  communitycode areatype
## 3 潍坊新村街道 310115004000 潍坊一村居委会   310115004001      111
## 4 潍坊新村街道 310115004000 潍坊二村居委会   310115004002      111
## 5 潍坊新村街道 310115004000 潍坊三村居委会   310115004003      111
## 6 潍坊新村街道 310115004000 潍坊四村居委会   310115004004      111
##         13   14       15           16   17
## 1 户籍人口 <NA>     六普         <NA> <NA>
## 2     户数 人数 常住人口 外来常住人口 <NA>
## 3     2492 4934     5071         1461 <NA>
## 4     2305 4360     6664         1728 <NA>
## 5     1286 3626     3433          843 <NA>
## 6     1933 4341     4748         1179 <NA>

    #转化成数据框
pudongdt <- as.data.frame(pudong)

#进行清洗,添加列名
pudong1 <- pudongdt[,c(8,9,15,16)]

names(pudong1)=c(“街道名称”,“街道代码”,“常住人口”,“外来人口”)

pudong2 <- pudong1[-c(1,2),]

#删除行缺失值
pudong2 <- pudong2[complete.cases(pudong2),]
pudong2 <- na.omit(pudong2)

pudong2\(常住人口 <- as.numeric(pudong2\)常住人口)
pudong2\(外来人口 <- as.numeric(pudong2\)外来人口)
pudong2\(街道名称 <- as.factor(pudong2\)街道名称)

pudong2\(local <- pudong2\)常住人口-pudong2$外来人口

#计算浦东各个街道本地和外地的人口数
pudong3 <- pudong2 %>%
select(街道名称,local,外来人口) %>%
group_by(街道名称) %>%
summarise(本地 = sum(local),外来 = sum(外来人口))
head(pudong3)

## # A tibble: 6 x 3
##   街道名称     本地   外来
##   <fct>       <dbl>  <dbl>
## 1 北蔡镇     141723 102111
## 2 曹路镇      68202 117588
## 3 川沙新镇   166197 142495
## 4 大团镇      60709  10453
## 5 东明路街道  98084  23365
## 6 高东镇      34978  75574

#设置百度地图全局变量 options(baidumap.key = ‘HNsw8tcCYIUegant8dDUvnDxbA4wUbta’)
#将每一个变量前面加一个“上海市浦东新区”,防止搜索到其他省同名地区
index <- paste(rep(“上海市浦东新区”,37),pudong3$街道名称,sep = “”,collapse = “,”)
#index是一个长变量,将其按逗号切割,并且解绑列表形式
index1 <- unlist(strsplit(index,“,”))
#创建一个空的数据框,然后按照index1的索引遍历,然后取每一次
#遍历结果的第一个,然后将所有的结果合并成一个数据框
mydata <- NULL
jiedao <- for(i in 1:37){
address <- getPlace(index1[i])
mydata <- rbind(mydata,address[1,])
}

#在这个数据框中我们只需要经度和纬度的变量
mydata1 <- mydata[,c(3,4)]
#按照列将前面我们计算好的pudong3数据框进行合并得到总的结果
pudong_final <- cbind(pudong3,mydata1)
#将文件写到本地
local_file <- write.csv(pudong_final,“F:/a series of
documents/sunlaoshikejian/local.csv”)
head(pudong_final)
#下一次可以采用下面的命令读入
#pudong_final <- read.csv(“F:/a series of
documents/sunlaoshikejian/local.csv”,header = T)

##     街道名称   本地   外来      lat      lon
## 1     北蔡镇 141723 102111 31.18817 121.5610
## 2     曹路镇  68202 117588 31.28449 121.6735
## 3   川沙新镇 166197 142495 31.19895 121.7024
## 4     大团镇  60709  10453 30.97194 121.7439
## 5 东明路街道  98084  23365 31.15265 121.5342
## 6     高东镇  34978  75574 31.33208 121.6300

#进行居住隔离的计算
#D指数
D <- dissim(data = pudong_final[,c(“本地”,“外来”)])$d
D

#论文中计算了上海市的居住隔离指数为0.387405
#浦东区的居住隔离指数为0.2919161

#P指数
P <- isp(x = pudong_final[,c(“lon”,“lat”)],data = pudong_final[,c(“本地”,“外来”)])
P

#论文中全上海的P指数为1.000229,此处为0.99

#H指数
H <- spseg(x = pudong_final[,c(“lon”,“lat”)],data = pudong_final[,c(“本地”,“外来”)])
H

## [1] 0.2919161
## [1] 0.997163
## 
##  Reardon and O'Sullivan's spatial segregation measures
## 
## Dissimilarity (D)     : 0.0084 
## Relative diversity (R): -8e-04 
## Information theory (H): -6e-04 
## Exposure/Isolation (P): 
##           本地      外来
## 本地 0.6046050 0.3953950
## 外来 0.6024162 0.3975838
## --
## The exposure/isolation matrix should be read horizontally.
## Read 'help(spseg)' for more details.