中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

python中如何使用Geopandas-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“python中如何使用Geopandas”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“python中如何使用Geopandas”這篇文章吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、松溪網(wǎng)站維護(hù)、網(wǎng)站推廣。

關(guān)鍵詞:Python Geopandas  空間數(shù)據(jù)分析

本文講述了借助Python語(yǔ)言和Geopandas工具包完成一個(gè)空間數(shù)據(jù)分析操作的過(guò)程~

作為一名程序員兼職業(yè)余空間數(shù)據(jù)分析師,空間數(shù)據(jù)的處理一直是一抹揮之不去的烏云。雖然GIS軟件可視化的操作界面、包羅萬(wàn)象的功能,已經(jīng)能解決日常工作中幾乎所有問(wèn)題,但對(duì)于身為程序員的我來(lái)說(shuō),一切不能用鍵盤上26個(gè)字母解決的問(wèn)題,都是不科學(xué)的~所以這些年我一直致力于思考一個(gè)問(wèn)題,如何把Arcgis的功能,用代碼的方式實(shí)現(xiàn)

我了解到,Geopandas是一個(gè)極好的工具,今天我們就以一個(gè)案例來(lái)管窺一二。

 數(shù)據(jù)準(zhǔn)備&任務(wù)明確

我有一張上海的街鎮(zhèn)地圖,一份上海的房源數(shù)據(jù)和一份上海餐廳數(shù)據(jù)。

python中如何使用Geopandas

今天,我們需要制作每一個(gè)房源的1KM緩沖區(qū),計(jì)算緩沖區(qū)內(nèi)有多少家餐廳,并且計(jì)算上海每個(gè)街鎮(zhèn)內(nèi)有多少家餐廳,然后繪制在地圖上展示

這是一個(gè)理論上簡(jiǎn)單但操作繁瑣的過(guò)程,有些同學(xué)可能已經(jīng)知道GIS的操作:

導(dǎo)入地圖數(shù)據(jù)——導(dǎo)入兩份EXCEL——并關(guān)聯(lián)經(jīng)緯度——獲得點(diǎn)數(shù)據(jù)——并保存點(diǎn)數(shù)據(jù)圖層——然后對(duì)房源點(diǎn)數(shù)據(jù)進(jìn)行緩沖區(qū)制作——保存緩沖區(qū)圖層——分別使用空間關(guān)聯(lián)把餐廳數(shù)據(jù)關(guān)聯(lián)到上海街鎮(zhèn)和房源緩沖區(qū)圖層中——并分別保存圖層……

好了好了,我已經(jīng)說(shuō)不下去了,我們來(lái)看看代碼怎么解決吧~

 導(dǎo)入數(shù)據(jù)

先導(dǎo)入各種包

import pandas as pd
import geopandas as gpd
from shapely import geos
from shapely.geometry import Point
import fiona
import matplotlib.pyplot as plt
from fiona.crs import from_epsg,from_string

我們來(lái)觀察下python中用到的地理處理工具包的名字:Geopandas. 顧名思義,這個(gè)包可以讓我們像使用pandas一樣處理地理數(shù)據(jù),大家可以想象一下這過(guò)程,一定如絲般順滑!

Geopandas其實(shí)是各種地理數(shù)據(jù)分析包的集大成者,包括shapely,Fiona等,當(dāng)然還有數(shù)據(jù)分析相關(guān)的包numpy,pandas,所以,在這些提及的包中的功能,都可以混合使用,切換不留痕跡。這里就一并導(dǎo)入了。

導(dǎo)入地圖shp

shanghai_map = gpd.GeoDataFrame.from_file('./上海街鎮(zhèn)/上海街鎮(zhèn).shp') #讀取shapfile數(shù)據(jù)為geodataframe格式

Geopandas提供了一種數(shù)據(jù)格式叫GeoDataFrame,用直白的話概括就是DataFrame加了一列數(shù)據(jù),表達(dá)地理信息。導(dǎo)入功能Geopandas底層調(diào)用的是Fiona包,所以,一些基本參數(shù)和可以導(dǎo)入的數(shù)據(jù)格式,可以參考Fiona的說(shuō)明文檔。

python中如何使用Geopandas

 查看導(dǎo)入后的數(shù)據(jù)

python中如何使用Geopandas

和DataFrame如出一轍,但多了一列Geometry來(lái)存放地理信息,繪圖看一下

python中如何使用Geopandas

嗯!是長(zhǎng)這樣!

接下來(lái),導(dǎo)入房源和餐廳數(shù)據(jù)

python中如何使用Geopandas

 *這兩份數(shù)據(jù)是CSV格式,導(dǎo)入成DataFrame,我們發(fā)現(xiàn)數(shù)據(jù)中含有經(jīng)緯度字段,我們可以根據(jù)這兩個(gè)字段,也把數(shù)據(jù)轉(zhuǎn)換成GeoDataFrame格式

通過(guò)經(jīng)緯度轉(zhuǎn)換點(diǎn)數(shù)據(jù):

def point_to_geo(df,lon,lat):
    df['geometry'] = gpd.GeoSeries(list(zip(df[lon],df[lat]))).apply(Point) #識(shí)別經(jīng)緯度,轉(zhuǎn)換點(diǎn)數(shù)據(jù)
    df = gpd.GeoDataFrame(df) #轉(zhuǎn)換Geodataframe格式
    df.crs = {'init':'epsg:4326'} #定義坐標(biāo)系WGS84
    del df[lon]
    del df[lat]
    return df


house_data = point_to_geo(house_data,'lon_WGS','lat_WGS') #轉(zhuǎn)換Geodataframe格式
restaurant_data = point_to_geo(restaurant_data,'lon_WGS','lat_WGS') #轉(zhuǎn)換Geodataframe格式

*官方文檔請(qǐng)看這里:

python中如何使用Geopandas

繪圖,看看成功與否——以上海街鎮(zhèn)為底圖,兩份點(diǎn)數(shù)據(jù)疊加在底圖上

base = shanghai_map.plot(color='lightyellow',edgecolor='black',figsize=(15, 15)) #畫底圖
restaurant_data.plot(ax=base,marker='o', color='green', markersize=5) #在底圖上疊加餐廳點(diǎn)數(shù)據(jù)
house_data.plot(ax=base,marker='o', color='red', markersize=5) #在底圖上疊加房源點(diǎn)數(shù)據(jù)
plt.gca().xaxis.set_major_locator(plt.NullLocator())#去掉x軸刻度
plt.gca().yaxis.set_major_locator(plt.NullLocator())#去掉y軸刻度
plt.savefig('./map.png',dpi=400) #保存圖片

*這里設(shè)置下圖形的基本參數(shù),畫圖功能是基于matplotlib,所以它的一些寫法和功能是通用的。

python中如何使用Geopandas

 顯示OK,那么就進(jìn)入核心環(huán)節(jié)~

 分析過(guò)程

在制作緩沖區(qū)和空間關(guān)聯(lián)之前,先需要對(duì)圖形進(jìn)行投影變換,這里仍然寫一個(gè)函數(shù):

def wgs84_to_CGCS2000(df,code):
    result = df.to_crs(from_epsg(code))
    return result

shanghai_map_pcs = wgs84_to_CGCS2000(shanghai_map,4549)
house_data_pcs = wgs84_to_CGCS2000(house_data,4549)
restaurant_data_pcs = wgs84_to_CGCS2000(restaurant_data,4549)

*只要知道投影坐標(biāo)系的ESPG代碼,就可以任意轉(zhuǎn)換,我們使用GSC2000坐標(biāo)系。

接著,構(gòu)建緩沖區(qū)圖層,使用buffer()方法,參數(shù)為緩沖區(qū)的半徑

house_data_buffer = house_data_pcs.buffer(1000) #建立一公里緩沖區(qū)

base = shanghai_map_pcs.plot(color='lightyellow',edgecolor='black',figsize=(15, 15))
house_data_buffer.plot(ax=base,color='gray', markersize=5,alpha=0.5)
plt.gca().xaxis.set_major_locator(plt.NullLocator()) #去掉x軸刻度
plt.gca().yaxis.set_major_locator(plt.NullLocator()) #去年y軸刻度
plt.savefig('./map2.png',dpi=400) #保存圖片

構(gòu)建完成,同樣輸出成地圖查看效果

python中如何使用Geopandas

增加了透明度,我們可以看到市中心的房源密度較高。生成的數(shù)據(jù)為GeoSeries,數(shù)據(jù)為緩沖區(qū)的地理信息。這里需要使用任意方法把地理信息和其他字段匹配在一起。

buffer_temp = house_data_pcs[['name','geometry']]
buffer_temp['geometry'] = house_data_buffer
house_data_buffer = buffer_temp

下面,我們使用空間關(guān)聯(lián),連接餐廳點(diǎn)數(shù)據(jù),并獲取餐廳的個(gè)數(shù)。

spacial_join_restaurant = gpd.sjoin(house_data_buffer,restaurant_data_pcs,how='left',op='contains') #空間連接
spacial_join_restaurant = spacial_join_restaurant.groupby(['name']).count()['title'].to_frame().reset_index() #聚合計(jì)算個(gè)數(shù)
spacial_join_restaurant.columns = ['name','restaurant_count'] #更改列名,方便操作
buffer_result = pd.merge(house_data_pcs,spacial_join_restaurant,left_on='name',right_on='name',how='left') #字段匹配

 *方法是sjoin(),功能和GIS相同,分相交,包含和被包含三種。我們使用包含進(jìn)行連接,并使用pandas的groupby()方法分組計(jì)數(shù)。

python中如何使用Geopandas

這樣我們就完成了空間關(guān)聯(lián)和計(jì)算,我們可以使用地圖顯示,并添加圖例:

base = shanghai_result.plot(column='restaurant_count', cmap='Oranges',scheme = 'fisher_jenks'
                             ,legend=True,edgecolor='black',figsize=(15, 15)) #按個(gè)數(shù)多少疊加底色
plt.gca().xaxis.set_major_locator(plt.NullLocator()) #去掉x軸刻度
plt.gca().yaxis.set_major_locator(plt.NullLocator()) #去年y軸刻度
plt.savefig('./map3.png',dpi=400) #保存圖片

這樣就可以繪制出以街鎮(zhèn)為單位的點(diǎn)密度圖:

python中如何使用Geopandas

最后,我們需要把數(shù)據(jù)導(dǎo)出保存。我們可以保存為shapfile格式,這里推薦大家直接保存為csv格式,方便分享。也可以根據(jù)需要,轉(zhuǎn)成任意格式。

shanghai_result = wgs84_to_CGCS2000(shanghai_result,4326) #轉(zhuǎn)換成地理坐標(biāo)系
shanghai_result.columns = ['town','region','geometry','restaurant_count'] #更改列名為英文,因?yàn)閿?shù)據(jù)保存對(duì)中文支持不佳
buffer_result = wgs84_to_CGCS2000(buffer_result,4326) #轉(zhuǎn)換成地理坐標(biāo)系

shanghai_result.to_csv('./result/shanghai_result.csv') #保存成csv
shanghai_result.to_file('./result/shanghai_result.shp') #保存成shapfile
buffer_result.to_csv('./result/buffer_result.csv') #保存成csv
buffer_result.to_file('./result/buffer_result.shp') #保存成shapfile

 結(jié)果檢查

我們把保存的數(shù)據(jù)導(dǎo)入Arcgis,可以正常使用~太棒了!

python中如何使用Geopandas

以上是“python中如何使用Geopandas”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

新聞名稱:python中如何使用Geopandas-創(chuàng)新互聯(lián)
路徑分享:http://www.2m8n56k.cn/article15/csiodi.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)網(wǎng)頁(yè)設(shè)計(jì)公司全網(wǎng)營(yíng)銷推廣外貿(mào)網(wǎng)站建設(shè)網(wǎng)站收錄營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
主站蜘蛛池模板: 久久精品国内偷自一区 | 欧美精品人爱a欧美精品 | 欧美日a | 俄罗斯极品美女毛片免费播放 | 中国国产一国产一级毛片视频 | 久久久久欧美精品 | 国产精品一级毛片不收费 | 亚洲国产欧美国产综合一区 | 久9这里精品免费视频 | 亚洲a级片在线观看 | 最新版天堂资源中文官网 | 日韩欧美亚洲天堂 | 台湾香港澳门三级在线 | 亚洲一区 中文字幕 久久 | mm在线视频免费看 | 国产区91| 午夜久久网 | 国产a网站 | 综合欧美视频一区二区三区 | 中文字幕在线观看网址 | 亚洲精品成人一区二区www | 一区二区三区不卡在线观看 | 新版天堂资源中文8在线 | a级毛片免费高清视频 | 久久精品国产99久久 | 黄影院 | 国产成人综合久久亚洲精品 | 色久网 | 国产片网址 | 国产自在自线午夜精品视频 | 久久99国产乱子伦精品免费 | 国产成人精品高清不卡在线 | 99久久99久久精品免费看子 | 亚洲精品高清在线 | 国产精品视频视频久久 | 99九九国产精品免费视频 | 亚洲国产精品综合欧美 | 亚洲欧美在线看 | 亚洲成人一区二区 | 久久99亚洲精品久久久久 | 日本一视频一区视频二区 |