您好,登錄后才能下訂單哦!
這篇文章主要介紹如何使用Pandas,GeoPandas和ArcGIS實(shí)現(xiàn)數(shù)據(jù)處理和繪圖,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
第一部分是學(xué)習(xí)使用pandas進(jìn)行數(shù)據(jù)數(shù)據(jù)。pandas中有兩大數(shù)據(jù)結(jié)構(gòu),分別是series序列和DataFrame數(shù)據(jù)框。使用pandas的實(shí)驗(yàn)對象是之前電腦本地的一些氣象數(shù)據(jù),存儲格式為.xlsx。實(shí)驗(yàn)數(shù)據(jù)僅僅是實(shí)驗(yàn)數(shù)據(jù)而已,用它來練習(xí)pandas還是不錯的,至少目前。
pandas數(shù)據(jù)分析的大概步驟也不復(fù)雜,導(dǎo)入庫—>讀取數(shù)據(jù)—>數(shù)據(jù)操作(切片,篩選,組合,排序,批處理等)—>寫出數(shù)據(jù)到csv或xlsx或txt純文本。
pandas的數(shù)據(jù)讀取很容易:
import pandas as pd
data = pd.read_excel(r'D:\inuyasha\codeX\Python\氣象數(shù)據(jù)1960-2018\1960.xlsx')
series = data['平均氣溫'] #序列,就是1,2,3這樣排列下去的
series_to_dataframe=pd.DataFrame(series) #把series數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)為數(shù)據(jù)框結(jié)構(gòu),pd兩大數(shù)據(jù)結(jié)構(gòu)
series_to_dataframe
重命名,增加索引操作:
datare = data.rename(columns={'平均氣溫':'平均溫'}) #使用rename方法重命名列的名字,字典,1是原名,2是更換后的名字datare['INDEX'] = datare.index #原基礎(chǔ)上增加索引,.index方法,名INDEXdatare['均溫'] = datare['平均溫'] #沒有替代原來的那一列,而是新增一列,一模一樣的,末尾添加datare.drop(columns='INDEX') #刪除原來列datare
刪除某一行,也可以刪除多行,index是行索引,axis指針對所有列:
df1 = datare.drop(index=0,axis=1)
據(jù)索引刪除多行,index是行索引,axis指針對所有列
df2 = datare.drop(index=[0,1,2,3],axis=1)
定位和提取數(shù)據(jù):
datare['區(qū)站號'].isin([50136]) #isin函數(shù)判斷這一列中是否存在這個數(shù),數(shù)字這不要加引號,否則就成字符串了datare[datare['區(qū)站號'].isin([50136])] #在原始數(shù)據(jù)中取出定位到的數(shù)據(jù)datare[-datare['區(qū)站號'].isin([50136])] #在原始數(shù)據(jù)中取出定位到的數(shù)據(jù),前面加一個橫線表示反選
如果想一次就提取多列呢,那就把需要的列以list形式放進(jìn)去
data_multicolu2 = datare[['區(qū)站號','緯度','經(jīng)度','年','月','日','平均溫']] #列表形式把需要的多列切片提取出來data_multicolu2
排序:
datare.sort_values(by='平均溫',ascending=False)
還有更多功能,這里就不一一寫出來了。多用幾次就熟悉了。之前想的一個問題,如何提取多個xlsx里面的某些數(shù)據(jù),這不就發(fā)揮作用了嘛哈哈。
第二部分是Geopandas讀取shp數(shù)據(jù)+繪圖展示+添加經(jīng)緯度標(biāo)識(EWSN)
腳本如下:
import geopandas as gpdimport numpy as npimport matplotlib.pyplot as pltimport cartopy.crs as ccrsfrom cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatterimport cmaps#import arcpy
gd_boundary = gpd.read_file('D:\ArcGISgeobase\guangdata\gd_boundary.shp')
gd_road = gpd.read_file('D:\ArcGISgeobase\guangdata\gd_road.shp')
#fig,ax = plt.subplots(figsize=(16,12)) #設(shè)置畫布大小
plt.figure(figsize=(16, 12))
ax = plt.subplot(projection=ccrs.PlateCarree())
#全局設(shè)置
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 16
gd_boundary.plot(ax=ax,facecolor='none',edgecolor='k',linewidth=0.99) #邊界設(shè)置
gd_road.plot(ax=ax,edgecolor='b',cmap=cmaps.posneg_2,lw=0.3,legend=False) #路網(wǎng)設(shè)置
ax.set_yticks(np.arange(20, 26, 1.0),crs=ccrs.PlateCarree())
ax.set_xticks(np.arange(109, 118, 1.0),crs=ccrs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter()) #經(jīng)緯度標(biāo)識顯示,EWSN
ax.yaxis.set_major_formatter(LatitudeFormatter())
#ax.set_axis_on() #打開矩形邊框
ax.set_title('Guangdong_Roads',fontsize=16) #設(shè)置標(biāo)題
plt.grid() #設(shè)置網(wǎng)格
展示結(jié)果如下圖,發(fā)現(xiàn)了連經(jīng)緯度標(biāo)識都沒有,雖然可以根據(jù)數(shù)據(jù)變化方向識別,不過增加上經(jīng)緯度標(biāo)識還是要好一些。然后古哥瀏覽器找了一下看看有沒有解決方法,結(jié)果沒找到,看到很多教程都沒有添加這個經(jīng)緯度標(biāo)識,于是自己動手:
自己動手添加經(jīng)緯度標(biāo)識:
plt.figure(figsize=(16, 10))
ax = plt.subplot(projection=ccrs.PlateCarree())
ax.set_yticks(np.arange(20, 26, 1.0),crs=ccrs.PlateCarree())
ax.set_xticks(np.arange(109, 118, 1.0),crs=ccrs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter()) #經(jīng)緯度標(biāo)識顯示,EWSN
ax.yaxis.set_major_formatter(LatitudeFormatter())
現(xiàn)在來看看效果吧,啊哈,這樣的話,經(jīng)緯度標(biāo)識不就來了嘛
然后我又想使用ArcPy做一下路網(wǎng)線密度分析,但是配置它太麻煩了,于是轉(zhuǎn)到ArcGIS去操作一把(雖然害怕隨時會卡退啊,特別是數(shù)據(jù)沒保存的情況下)
第三部分使用ArcGIS做一下路網(wǎng)線密度操作以及局部放大圖。局部放大圖有它自己的作用,就是假如在密集度很大的情況下,看起來是模糊一片的,那么就可能需要局部放大了,畫一個示意圖吧:
So,來到ArcGIS,加載路網(wǎng)數(shù)據(jù)和矢量邊界這兩個數(shù)據(jù)就夠了
修飾出圖,看起來勉強(qiáng),這個color好像是前幾天自己調(diào)的來著,應(yīng)該是吧,沒記錯的話。
有一些地方感覺太密集了,不好看,那么就給它局部放大一下,原理就是新建一個數(shù)據(jù)框。
以上是“如何使用Pandas,GeoPandas和ArcGIS實(shí)現(xiàn)數(shù)據(jù)處理和繪圖”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。