国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從pandas到geopandas

dunizb / 2066人閱讀

摘要:也支持直接從已有的對象生成,示例如下輸出為示例路網(wǎng)下面這個例子,首先獲取一個城市如青島的空間范圍,根據(jù)這個范圍下載的道路數(shù)據(jù)存入對象,然后繪制出來。

(歡迎轉(zhuǎn)載,需要保留文末的個人微信公眾號二維碼)

pandas簡介

Pandas是Python的一個結(jié)構(gòu)化數(shù)據(jù)分析的利器。其中,DataFrame是比較常用的處理數(shù)據(jù)的對象,類似于一個數(shù)據(jù)庫里的table或者excel中的worksheet,可以非常方便的對二維數(shù)據(jù)讀取(xls,csv,hdf等)、增刪改查、基本繪圖等。pandas應(yīng)該是用python做數(shù)據(jù)分析必不可少的工具。

看一個dataframe的實例

geopandas簡介

DataFrame相當(dāng)于GIS數(shù)據(jù)中的一張屬性表,為了將pandas的特性用到空間數(shù)據(jù),就有了geopandas。其目標(biāo)是使得在python中操作地理數(shù)據(jù)更方便。

Pandas is an open source project to make working with geospatial data in python easier. GeoPandas extends the datatypes used by?pandas?to allow spatial operations on geometric types. Geometric operations are performed by?shapely. Geopandas further depends on?fiona?for file access and?descartes?and?matplotlib?for plotting.

geopandas結(jié)合了pandas和shapely的功能,擴展了pandas在空間數(shù)據(jù)操作方面的能力,從而使得你可以輕松的用python實現(xiàn)空間數(shù)據(jù)分析。

看一個geodataframe的實例

與dataframe相對,直觀的區(qū)別是多了一個geometry的字段。

安裝
pip install geopandas
# or
conda install -c conda-forge geopandas
官網(wǎng)示例

先直接照搬一個官網(wǎng)上的例子

p1 = Polygon([(0, 0), (1, 0), (1, 1)])
p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
g = gpd.GeoSeries([p1, p2, p3])
g.plot()

可以非常方便的計算面積和緩沖區(qū)

print g.area
g.buffer(0.5).plot()

還有其他空間數(shù)據(jù)分析的功能,有興趣可以去官網(wǎng)了解下。

示例2. 構(gòu)建geodataframe對象

gepandas提供了多個讀取矢量空間數(shù)據(jù)的接口,支持包括shapefile,geojson等。也支持直接從已有的dataframe對象生成geodataframe,示例如下:

df = pd.DataFrame(np.random.randn(50, 3),columns=["X", "Y", "Z"])
geom = [shapely.geometry.Point(xy) for xy in zip(df.X, df.Y)]
gdf = geopandas.GeoDataFrame(df, geometry=geom)
print type(gdf)

輸出為

示例3. osm路網(wǎng)

下面這個例子,首先獲取一個城市(如青島)的空間范圍,根據(jù)這個范圍下載openstreetmap的道路數(shù)據(jù)存入geodataframe對象,然后繪制出來。

1. 獲取空間范圍

這里用之前提到的geocoder這個工具,網(wǎng)友也提到這些地理編碼獲取的坐標(biāo)并不準(zhǔn)確,我們暫且先不考慮精度的問題。

import geocoder
from shapely.geometry import Polygon

g = geocoder.arcgis(u"青島")
min_lat = g.bbox.get("southwest")[0]
min_lon = g.bbox.get("southwest")[1]
max_lat = g.bbox.get("northeast")[0]
max_lon = g.bbox.get("northeast")[1]

boundary = Polygon([(min_lon, min_lat),(min_lon,max_lat),(max_lon,max_lat), (max_lon, min_lat)])

這樣獲取到的青島市的空間范圍(外接矩形)為

{"northeast": [36.209606, 120.482939], "southwest": [35.987606, 120.260939]}
2. 下載osm數(shù)據(jù)

這里用到geopandas_osm這個工具,安裝命令為

pip install git+https://github.com/jwass/geopandas_osm.git

將空間范圍的polygon對象作為參數(shù)即可,可以查看一下對象類型和投影參數(shù):

import geopandas_osm.osm
df = geopandas_osm.osm.query_osm("way", boundary, recurse="down", tags="highway")

print type(df)
print df.crs

輸出為


{"init": "epsg:4326", "no_defs": True}

直接獲取到的osm數(shù)據(jù)比較亂,做進一步篩選:

way = df[df.type == "LineString"][["highway", "name", "geometry"]]
way.head()

可以計算道路的長度,這里只是示意。直接計算length并不對,應(yīng)該先投影到平面坐標(biāo)系。

df.ix[0].geometry.length

輸出為

0.0014679943869086182
3. 繪制路網(wǎng)

可以直接用plot命令,繪制出來:

way.plot(column="name",colormap=cm.coolwarm_r)

代碼下載

如果對本文中的代碼(.ipynb文件)感興趣,百度網(wǎng)盤鏈接:http://pan.baidu.com/s/1mh8FghE, 密碼請在關(guān)注個人微信公眾號stdrei后,輸入口令‘pandas2geo’自動獲取。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44327.html

相關(guān)文章

  • Python繪制數(shù)據(jù)動態(tài)圖的方法詳解

      小編寫這篇文章的一個主要目的,主要是給大家去做一個介紹,介紹的內(nèi)容是,利用Python這門語言,去繪制相關(guān)的數(shù)據(jù)動態(tài)圖表,那么,具體的繪制方法是什么呢?下面小編就給大家詳細(xì)的解答。  數(shù)據(jù)動態(tài)圖怎么做,效果圖,  多子圖聯(lián)動競賽圖  安裝  pipinstallpandas_alive   #或者   condainstallpandas_alive-cconda-forge   玩起來  支...

    89542767 評論0 收藏0
  • 用Python做地圖投影 - 多面孔的世界

    摘要:如需轉(zhuǎn)載,請在顯著位置注明個人微信公眾號為什么要做地圖投影簡而言之,地球表面是一個三維的曲面,在曲面上進行測量是非常困難的。拓展同一個世界,不同的面孔鏈接在不同投影下的這個世界。。。 (如需轉(zhuǎn)載,請在顯著位置注明個人微信公眾號stdrei) 為什么要做地圖投影 簡而言之,地球表面是一個三維的曲面,在曲面上進行測量是非常困難的。不信你拿個地球儀量一下兩點的距離或者計算個夾角試試。將三維的...

    widuu 評論0 收藏0
  • 還在抱怨pandas運行速度慢?這幾個方法會顛覆你的看法

    摘要:它還使用執(zhí)行所謂的鏈?zhǔn)剿饕@通常會導(dǎo)致意外的結(jié)果。但這種方法的最大問題是計算的時間成本。這些都是一次產(chǎn)生一行的生成器方法,類似中使用的用法。在這種情況下,所花費的時間大約是方法的一半。根據(jù)每小時所屬的應(yīng)用一組標(biāo)簽。 作者:xiaoyu 微信公眾號:Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 showImg(https://segmentfault.com/img/bVboe...

    keelii 評論0 收藏0
  • Pandas之旅(一): 讓我們把基礎(chǔ)知識一次擼完,申精干貨

    為什么你需要pandas 大家好,今天想和大家分享一下有關(guān)pandas的學(xué)習(xí)新的,我因工作需要,從去年12月開始接觸這個非常好用的包,到現(xiàn)在為止也是算是熟悉了一些,因此發(fā)現(xiàn)了它的強大之處,特意想要和朋友們分享,特別是如果你每天和excel打交道,總是需要編寫一些vba函數(shù)或者對行列進行g(shù)roupby啊,merge,join啊之類的,相信我,pandas會讓你解脫的。 好啦,閑話少說,這篇文章的基礎(chǔ)...

    tuomao 評論0 收藏0
  • 一文帶你斬殺Python之Numpy??Pandas全部操作【全網(wǎng)最詳細(xì)】???

    目錄Numpy簡介Numpy操作集合1、不同維度數(shù)據(jù)的表示1.1 一維數(shù)據(jù)的表示1.2 二維數(shù)據(jù)的表示1.3 三維數(shù)據(jù)的表示2、 為什么要使用Numpy2.1、Numpy的ndarray具有廣播功能2.2 Numpy數(shù)組的性能比Python原生數(shù)據(jù)類型高3 ndarray的屬性和基本操作3.1 ndarray的基本屬性3.2 ndarray元素類型3.3 創(chuàng)建ndarray的方式3.4 ndarr...

    asoren 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<