R语言地理可视化:中国国内航线航班信息统计、绘制分布夜景图

最近,有一种说法:“中国经济发展的命脉就是石油和航线”。因此,航线的重要性不言而喻。

近年来,中国的航运业发展迅速,不仅带来了经济效益和社会效益,也带来了就业岗位。

由Kaizong Ye,Liao Bao撰写

因此,我们有必要分析航线分布状况。

为了更好地帮助客户进行航运业务、航线设计、港口定位等决策研究,我们使用基于R语言地理信息系统的中国航线分布可视化。

该方法利用地理信息系统的空间数据库管理功能,对中国各航线进行统计和分析,并基于R语言统计分析工具,对分析结果进行可视化处理,生成中国航线的空间分布图。

读取地图绘制所需的包

以下软件包均是绘制地图相关的 。

library(maptools)
library(ggplot2)
library(ggmap)
library(maps)
library(rgeos)
library(shapefiles)
library(geosphere)
library(plyr)

获取地图数据来源

航线、机场坐标

机场: airports.dat

航线: routes.dat

板块地图都市地图

世界地图: ne_10m_admin_0_countries.shp

都市地图: ne_10m_urban_areas.shp

image.png

课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加


# 读取都市地图文件 读取版图地图文件
urbanareasin <- readShapePoly("ne_0m_uranareas.shp") worldmapsin <- readShapePol("ne_1_admin_0_countries.shp") # 以下为格式转化 worldmap <- fortifyworldapsin)

这一部分的主要工作是将shapefile文件转化为R可以识别的格式,然后建立数据与地图坐标间的关联。本文使用了航线频数来计算地图航线绘制的亮度。读者根据需要可以自行关联所需数据,例如成本,平均成本,旅客人次等,以达到不同的研究目的。

# 开始抽取机场数据  
airports <- rea.table("airorts.dat", sep = ",", header = FALSE)  
worldport <- airports[airpot$V5 != "", c("V3", "V5",  
                                         "V7", "V8", "V9")]  
names(worldprt) <- c("city", "code", "lan", "lon", "att")

有453条航线无标识

  
table(lineinworld)

image.png

summary(worldline)
image.png

图片

PYTHON链家租房数据分析:岭回归、LASSO、随机森林、XGBOOST、KERAS神经网络、KMEANS聚类、地理可视化

阅读文章


统计部分国内站点的出发的航班信息

#北京出发航班  
 head(worldline[worldline$AIRPORT_FROCODE=="PEK",] )
image.png


随时关注您喜欢的主题


排序

e$AIRPORT_TOCDE)[2,],  
      decreasing = TRUE)))
image.png

北京到达航班

head(worldline[worldine$AIRPORT_TOCODE=="PEK",] )
image.png

上海出发航班

head(worldline[worlline$AIRPORTFROM_CODE=="SHA",] )
image.png

上海到达航班

head(worldline[worldline$AIRPOT_T_CODE=="SHA",] )

image.png

香港出发航班

head(worldline[worldline$ARPORT_FRO_CODE=="SHA",] )
image.png

地图旋转

这一步是对地图进行坐标变换,设置中国为世界中心,这里做了简单的坐标加减运算。

center <- 115

# 航线坐标计算中心距离

gcircles$long.reenter <- ielse(gcicles$long < center -

由于地图是图形数据,若是简单移动,地图会被切割,绘制时会出现图形变形等错误,故需要对地图数据进行再处理。该过程分为两步:

切割图形重分组算法

处理 1 :图形切割后,切割图形重分组。

处理 2 :重分组后,非闭合图形,闭合处理。

检查组内不同经度300度以上的坐标,作为极端值,然后对数据进行平均 。然后分别对极端值分组标号为一组,将低于300的坐标作为一组。

闭合曲线

分别计算世界点图每个航线的起始点 终点,和航线的曲线数据 . 找到曲线数据中不连续的数据即为没有闭合的曲线 , 然后 , 将断点数据重新赋值 , 进行连接 , 得到闭合的航线曲线 .

g <- rep(1, length(df[, longcol]))

  if (diff(rage(df[, lngcol])) > 300) {

   
    d <- df[, longcol] > mean(range(df[, longcol]))

开始写原始算法替换函数 世界地图重分组


 

#计算世界地图的经纬度的均值

worldmp.men <- agregate(x = wrldmap[, ("long.recenter")],
                           by = list(worldmap$group), FUN = mean)
 

#计算世界地图的经纬度的最小值

 

worldma.min <- aregate( = wrldmap[, c("longrecenter")],
                          by = list(worldmap$group), FUN = min)

 

#计算世界地图的经纬度的最大值

 

woldmap.ma <- aggregate(x worldmap[, c("long.recenter")],

                          by = list(wormap$group) FUN = max)

 

worldmap.md <- cbind(worldma.mea, worldap.in[,

                                                 2], worldap.max[, 2])

#给数据的变量名命名

colnames(worldmpmd) <- c("group", mean", "min" "max")

 

worldmapt <- join(x = worldmap, y = wolmap.md, b = c("group"))
# 闭合曲线

worlmap.rg <- orldmap.rg[order(woldm$goup.regroup,

                                 worldmap.rg$order), ]

最后得到世界航线的曲线和坐标 (wrld) 以及城市航线的坐标 (urb), 并使用geom_polygon和geom_line函数进行设置 . 其颜色 粗细等。最后使用ggplot函数进行绘制。


urb <- geom_polygon(aes(long.recenter, lat, group = group.regroup),

                    size = 0.3, color = "#FDF5E6", fill = "#FDF5E6",

                    alpha = 1, data = urbanareas.cp)

# 放大系数

bigmap <- 1

geom_polygon(aes(lon,lat,grop = group), size = 0.2,

               fill = '#f9f9', colou = 'grey6, data = worldmap) +

  geom_line(aes(long.recete,lat,grup = grop.regroup, clor = freq,

                alpha = freq), sie = 0.4, dat = gcicles.rg)
image.png


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds