R語(yǔ)言地理可視化:中國(guó)國(guó)內(nèi)航線航班信息統(tǒng)計(jì)、繪制分布夜景圖
全文鏈接:http://tecdat.cn/?p=31693
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
最近,有一種說(shuō)法:“中國(guó)經(jīng)濟(jì)發(fā)展的命脈就是石油和航線”。因此,航線的重要性不言而喻。
近年來(lái),中國(guó)的航運(yùn)業(yè)發(fā)展迅速,不僅帶來(lái)了經(jīng)濟(jì)效益和社會(huì)效益,也帶來(lái)了就業(yè)崗位。因此,我們有必要分析航線分布狀況。
為了更好地幫助客戶進(jìn)行航運(yùn)業(yè)務(wù)、航線設(shè)計(jì)、港口定位等決策研究,我們使用基于R語(yǔ)言地理信息系統(tǒng)的中國(guó)航線分布可視化。該方法利用地理信息系統(tǒng)的空間數(shù)據(jù)庫(kù)管理功能,對(duì)中國(guó)各航線進(jìn)行統(tǒng)計(jì)和分析,并基于R語(yǔ)言統(tǒng)計(jì)分析工具,對(duì)分析結(jié)果進(jìn)行可視化處理,生成中國(guó)航線的空間分布圖。
讀取地圖繪制所需的包
以下軟件包均是繪制地圖相關(guān)的 。
library(maptools)
library(ggplot2)
library(ggmap)
library(maps)
library(rgeos)
library(shapefiles)
library(geosphere)
library(plyr)
獲取地圖數(shù)據(jù)來(lái)源
航線、機(jī)場(chǎng)坐標(biāo)
機(jī)場(chǎng):?airports.dat
航線:?routes.dat
板塊地圖、都市地圖
世界地圖:?ne_10m_admin_0_countries.shp
都市地圖:?ne_10m_urban_areas.shp

# 讀取都市地圖文件 讀取版圖地圖文件 ?urbanareasin <- readShapePoly("ne_0m_uranareas.shp") ?worldmapsin <- readShapePol("ne_1_admin_0_countries.shp") ?# 以下為格式轉(zhuǎn)化 ?worldmap <- fortifyworldapsin)
這一部分的主要工作是將shapefile文件轉(zhuǎn)化為R可以識(shí)別的格式,然后建立數(shù)據(jù)與地圖坐標(biāo)間的關(guān)聯(lián)。本文使用了航線頻數(shù)來(lái)計(jì)算地圖航線繪制的亮度。讀者根據(jù)需要可以自行關(guān)聯(lián)所需數(shù)據(jù),例如成本,平均成本,旅客人次等,以達(dá)到不同的研究目的。
# 開(kāi)始抽取機(jī)場(chǎng)數(shù)據(jù) ?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條航線無(wú)標(biāo)識(shí)
?table(lineinworld)

summary(worldline)

統(tǒng)計(jì)部分國(guó)內(nèi)站點(diǎn)的出發(fā)的航班信息
#北京出發(fā)航班 ??head(worldline[worldline$AIRPORT_FROCODE=="PEK",] )

排序
e$AIRPORT_TOCDE)[2,], ?
????? decreasing = TRUE)))

北京到達(dá)航班
head(worldline[worldine$AIRPORT_TOCODE=="PEK",] )

上海出發(fā)航班
head(worldline[worlline$AIRPORTFROM_CODE=="SHA",] )

上海到達(dá)航班
head(worldline[worldline$AIRPOT_T_CODE=="SHA",] )

香港出發(fā)航班
head(worldline[worldline$ARPORT_FRO_CODE=="SHA",] )

地圖旋轉(zhuǎn)
這一步是對(duì)地圖進(jìn)行坐標(biāo)變換,設(shè)置中國(guó)為世界中心,這里做了簡(jiǎn)單的坐標(biāo)加減運(yùn)算。
center <- 115# 航線坐標(biāo)計(jì)算中心距離gcircles$long.reenter <- ielse(gcicles$long < center -
由于地圖是圖形數(shù)據(jù),若是簡(jiǎn)單移動(dòng),地圖會(huì)被切割,繪制時(shí)會(huì)出現(xiàn)圖形變形等錯(cuò)誤,故需要對(duì)地圖數(shù)據(jù)進(jìn)行再處理。該過(guò)程分為兩步:
處理 1?:圖形切割后,切割圖形重分組。
處理 2?:重分組后,非閉合圖形,閉合處理。
切割圖形重分組算法
檢查組內(nèi)不同經(jīng)度300度以上的坐標(biāo),作為極端值,然后對(duì)數(shù)據(jù)進(jìn)行平均?。然后分別對(duì)極端值分組標(biāo)號(hào)為一組,將低于300的坐標(biāo)作為一組。
?
閉合曲線
分別計(jì)算世界點(diǎn)圖每個(gè)航線的起始點(diǎn)?終點(diǎn),和航線的曲線數(shù)據(jù)?.?找到曲線數(shù)據(jù)中不連續(xù)的數(shù)據(jù)即為沒(méi)有閉合的曲線?,?然后?,?將斷點(diǎn)數(shù)據(jù)重新賦值?,?進(jìn)行連接?,?得到閉合的航線曲線?.
g <- rep(1, length(df[, longcol]))
? if (diff(rage(df[, lngcol])) > 300) {
??
??? d <- df[, longcol] > mean(range(df[, longcol]))
開(kāi)始寫原始算法替換函數(shù) 世界地圖重分組
?#計(jì)算世界地圖的經(jīng)緯度的均值worldmp.men <- agregate(x = wrldmap[, ("long.recenter")],
?????????????????????????? by = list(worldmap$group), FUN = mean)
?#計(jì)算世界地圖的經(jīng)緯度的最小值?
worldma.min <- aregate( = wrldmap[, c("longrecenter")],
????????????????????????? by = list(worldmap$group), FUN = min)
?#計(jì)算世界地圖的經(jīng)緯度的最大值?
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])#給數(shù)據(jù)的變量名命名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), ]
最后得到世界航線的曲線和坐標(biāo)?(wrld)?以及城市航線的坐標(biāo)?(urb),?并使用geom_polygon和geom_line函數(shù)進(jìn)行設(shè)置?.?其顏色?粗細(xì)等。最后使用ggplot函數(shù)進(jìn)行繪制。
urb <- geom_polygon(aes(long.recenter, lat, group = group.regroup),
??????????????????? size = 0.3, color = "#FDF5E6", fill = "#FDF5E6",
??????????????????? alpha = 1, data = urbanareas.cp)# 放大系數(shù)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)


?最受歡迎的見(jiàn)解
1.R語(yǔ)言動(dòng)態(tài)圖可視化:如何、創(chuàng)建具有精美動(dòng)畫的圖
2.R語(yǔ)言生存分析可視化分析
3.Python數(shù)據(jù)可視化-seaborn Iris鳶尾花數(shù)據(jù)
4.r語(yǔ)言對(duì)布豐投針(蒲豐投針)實(shí)驗(yàn)進(jìn)行模擬和動(dòng)態(tài)
5.R語(yǔ)言生存分析數(shù)據(jù)分析可視化案例
6.r語(yǔ)言數(shù)據(jù)可視化分析案例:探索brfss數(shù)據(jù)數(shù)據(jù)分析
7.R語(yǔ)言動(dòng)態(tài)可視化:制作歷史全球平均溫度的累積動(dòng)態(tài)折線圖動(dòng)畫gif視頻圖
8.R語(yǔ)言高維數(shù)據(jù)的主成分pca、 t-SNE算法降維與可視化分析案例報(bào)告
9.python主題LDA建模和t-SNE可視化