91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用R語言和Python進行空間數據可視化與數據地圖

發布時間:2021-10-11 17:52:33 來源:億速云 閱讀:240 作者:柒染 欄目:大數據

本篇文章為大家展示了如何用R語言和Python進行空間數據可視化與數據地圖,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

以前我一直覺得Python的繪圖工具與R語言ggplot2比起來,不夠優雅,這也是我一直堅定的選擇使用R+ggplot2深入的學習數據可視化的原因,ggplot2在坐標系的整合與兼容性和擴展性上確實技高一籌,所以ggplot2成了可視化的巨無霸,成了可視化界的微信,不僅自身生態日趨完善,而且還有眾多的開發者為其開發輔助功能包(你可以理解為依附于微信的小程序)。

最近偶然在學習Python可視化的過程中,了解到了geopandas,確實第一眼看著很眼熟,或許你第一眼就能把它與pandas聯系起來。的確,它跟pandas有著千絲萬縷的聯系,并且繼承了pandas的諸多高頻函數。而geo是什么鬼呢?

geo是地理信息系統的簡寫,geopandas是Python中用于處理空間地理信息數據的后起之秀(為什么是后起之秀呢,因為有個叫basemap的包,據說很難用,我還沒有深入了解過呢)。

今天要講解的主角是R語言中的sf包和Python中的geopandas庫。


為什么今天把geopandas和R語言空間數據可視化寫在一起,因為他們很巧合的用到了相同的地理信息處理技術,無論是數據源的支持上、還是空間數據的結構存儲還是投影設置上都是如此。

我以前寫過大量ggplot2空間數據可視化的文章,但是那些大多是基于shp數據源,和ggplot2中的geom_ploygon或者gemo_map函數來制作的。

對,你沒看錯,真的有這種操作~

如何用R語言和Python進行空間數據可視化與數據地圖

shp數據源導入所依賴的maptools包已經快要被遺棄了,而geom_ploygon、gemo_map函數所支持的數據結構復雜難懂,無論是對于初學者還是老手們都是一種挑戰,需要做大量的數據合并、轉換、匹配,在前期的數據處理上花費的時間和代碼量已經遠遠超過了可視化的代碼量。

好在新技術總是不斷地出現,數據源上json格式的數據為我們提供了更為便捷、高效、低廉的空間數據信息,而sf包則可以使用直觀易懂的Simple Features數據結構來從新規整地圖數據源,使得過去需要分別準備地理邊界屬性信息和地理邊界經緯點信息來呈現地理空間信息數據結構。

巧合的是,python中的geopandas用了同樣的 技術來簡化空間數據可視化的復雜度,其核心理念也是通過壓縮單個地理多邊形為一個Simple Features,使得所有的地理多邊形與其屬性信息嚴格對齊,行政一個呈現友好的帶有地理信息數據的數據框。

也許以上描述過于抽象,因為涉及到到的內容比較深入,我實在是不知道該如何把這些內容將的通俗易懂,接下來會使用圖片輔助演示。

R中制作地圖傳統的方式是使用geom_ploygon+maptools+shp數據

library(ggplot2)

library(plyr)

library(maptools)

#數據導入:

china_map<-readShapePoly("D:/R/rstudy/CHN_adm/bou2_4p.shp")

Warning message:   

#已經開始提出警告了!

(替代方案,使用rgdal中的readORG函數或者sf包中的st_read函數)

use rgdal::readOGR or sf::st_read

china_map1<-fortify(china_map)

#從SP(空間數據對象)中剝離地理多邊形邊界點信息和多邊形屬性信息

x<-china_map@data      

xs<-data.frame(id=row.names(x),x)  

china_map_data <- join(china_map1, xs, type = "full") 

#導入業務數據

province_city <- read.csv("D:/R/rstudy/Province/chinaprovincecity.csv") 

mydata <- read.csv("D:/R/rstudy/Province/geshengzhibiao.csv")

china_data <- join(china_map_data, mydata, type="full")

#可視化代碼:

ggplot(china_data,aes(long,lat))+

     geom_polygon(aes(group=group),fill="white",colour="grey60")+

     geom_point(data =province_city,aes(x = jd,y = wd),colour="red")+

     coord_map("polyconic")+ 

     theme_void()

如何用R語言和Python進行空間數據可視化與數據地圖

過程何其辛苦!

為什么使用maptools+geom_ploygon技術組合這么辛苦呢,問題出在數據源上,如果你想要詳細了解maptools導入的空間信息結果以及goem_ploygon根據什么規則映射地圖信息,請看這一篇。

一篇小短文助你打開數據可視化的任督二脈!

我能告訴你的是,geom_ploygon制作地圖的時候,剝離了地理信息邊界點數據和多邊形屬性信息,所以你需要同時兼顧、處理兩個包含空間信息的數據框,如果是對不同區域進行等值線映射,你還需要對這兩個數據框進行合并操作。

而sf包則使用了新的、更為優雅簡潔的空間信息呈現技術——Simple Features

以上便是使用shp+maptools+geom_ploygon技術的核心數據結構概況,接下來我們會跟大家講解新技術組合下所支持的空間數據結構。

sf包則也是同時支持shp數據源和json數據源

library("sf")

library("ggplot2")

china_map<-st_read("D:/R/rstudy/CHN_adm/bou2_4p.shp",stringsAsFactors=FALSE,quiet=TRUE)

Encoding(china_map$NAME)<-"GBK"

china_map<-st_read("D:/R/mapdata/State/china.geojson",stringsAsFactors=FALSE,quiet=TRUE)

如何用R語言和Python進行空間數據可視化與數據地圖

如何用R語言和Python進行空間數據可視化與數據地圖

如何用R語言和Python進行空間數據可視化與數據地圖

####轉換編碼

st_crs(china_map)$epsg<-4267

st_crs(china_map)$proj4string<-"+proj=longlat +datum=NAD27 +no_defs"

china_map<-st_transform(china_map,3395)

#####合并數據

mydata<-data.frame(NAME=unique(china_map$NAME),value=runif(34,1,100))

china_map<-merge(china_map,mydata,by="NAME")

如何用R語言和Python進行空間數據可視化與數據地圖

ggplot() +

  geom_sf(data=china_map,aes(fill=value))

如何用R語言和Python進行空間數據可視化與數據地圖

所以使用sf提供的新技術,制作數據地圖通常僅需以上幾步。任務量大大縮減。

而Python的geopandas包則也提供了相同的空間數據結構處理技術。

import pandas as pd

import numpy as np

import geopandas as gp

import matplotlib.pyplot as plt

province_city = pd.read_csv("D:/R/rstudy/Province/chinaprovincecity.csv", encoding = 'gb18030') 

china_map=gp.GeoDataFrame.from_file("D:/R/rstudy/CHN_adm/bou2_4p.shp", encoding = 'gb18030')

china_map=gp.GeoDataFrame.from_file("D:/R/mapdata/State/china.geojson", encoding = 'gb18030')

如何用R語言和Python進行空間數據可視化與數據地圖

如何用R語言和Python進行空間數據可視化與數據地圖

geopandas包同時支持導入shp素材和json素材,導入之后得數據結構與R語言中得sf導入之后得結構是一致得,地理多邊形邊界點信息都被壓縮成了一個非常整齊的列表存儲,列表內每一個單獨的子項目都代表著一個多邊形。

實際上導入之后,你可以看到它的結構是一種特殊的帶有地理信息列的數據框。

geopandas.geodataframe.GeoDataFrame

這種格式數據框繼承了大多數pandas普通數據框的函數及屬性,可以直接針對其使用plot函數繪圖。

china_map.plot(figsize=(20,12))

如何用R語言和Python進行空間數據可視化與數據地圖

其內部數據結構與sf包的數據結構如出一轍。

我們可以給其指定一個數值變量,使得映射出來的地圖各區塊根據數值單獨填色。

china_map.plot(column="AREA",figsize=(20,12),cmap="Greens")

如果你想要在此圖層上添加另外一個散點圖層,則需設定兩個具有同樣投影信息的GeoDataFrame對象。

使用剛才導入的province_city數據,將其合并進china_map中去。

china_map=china_map.merge(province_city,left_on='NAME', right_on='province', how='left')

from shapely.geometry import Point

china_map["center"]=gp.GeoSeries([Point(x, y) for x, y in zip(china_map["jd"], china_map["wd"])])

如何用R語言和Python進行空間數據可視化與數據地圖

china_map_ploygon=china_map[["AREA","NAME","geometry","class"]]

china_map_ploygon=china_map_ploygon

china_map_point=china_map[["AREA","NAME","center","class"]]

china_map_point=china_map_point.set_geometry('center')

如何用R語言和Python進行空間數據可視化與數據地圖

###設置相同的投影:

china_map_ploygon.crs={'init': 'epsg:3395'}

china_map_point.crs  ={'init': 'epsg:3395'}

###地圖可視化過程:

base=china_map_ploygon.plot(column="AREA", edgecolor='black',figsize=(20,12),cmap="Greens")

china_map_point.plot(ax=base,marker='o',color='red',markersize=5)

如何用R語言和Python進行空間數據可視化與數據地圖

最后讓我們再次看一下R語言中的sf數據對象和Pyhton中的geodatafame對象的對比。

如何用R語言和Python進行空間數據可視化與數據地圖

上述內容就是如何用R語言和Python進行空間數據可視化與數據地圖,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巧家县| 英超| 楚雄市| 明溪县| 深水埗区| 卢氏县| 多伦县| 达州市| 瑞昌市| 山丹县| 沁源县| 镇远县| 时尚| 大庆市| 建平县| 旌德县| 株洲市| 贵德县| 安国市| 武山县| 昭通市| 梓潼县| 茶陵县| 镇江市| 军事| 翁源县| 康保县| 靖远县| 綦江县| 慈溪市| 墨竹工卡县| 壤塘县| 伊春市| 竹溪县| 河北区| 沅陵县| 米脂县| 台江县| 读书| 庄河市| 黑河市|