「可視化」的數據分析落伍了?

2020-12-13 CSDN

作為一名程式設計師兼職業餘空間數據分析師,空間數據的處理一直是一抹揮之不去的烏雲。雖然GIS軟體可視化的操作界面、包羅萬象的功能,已經能解決日常工作中幾乎所有問題,但對於身為程式設計師的我來說,一切不能用鍵盤上26個字母解決的問題,都是不科學的~所以這些年我一直致力於思考一個問題,如何把Arcgis的功能,用代碼的方式實現

我了解到,Geopandas是一個極好的工具,今天我們就以一個案例來管窺一二。

數據準備&任務明確

我有一張上海的街鎮地圖,一份上海的房源數據和一份上海餐廳數據。

今天,我們需要製作每一個房源的1KM緩衝區,計算緩衝區內有多少家餐廳,並且計算上海每個街鎮內有多少家餐廳,然後繪製在地圖上展示

這是一個理論上簡單但操作繁瑣的過程,有些同學可能已經知道GIS的操作:

導入地圖數據——導入兩份EXCEL——並關聯經緯度——獲得點數據——並保存點數據圖層——然後對房源點數據進行緩衝區製作——保存緩衝區圖層——分別使用空間關聯把餐廳數據關聯到上海街鎮和房源緩衝區圖層中——並分別保存圖層……

好了好了,我已經說不下去了,我們來看看代碼怎麼解決吧~

導入數據

先導入各種包

import pandas as pdimport geopandas as gpdfrom shapely import geosfrom shapely.geometry import Pointimport fionaimport matplotlib.pyplot as pltfrom fiona.crs import from_epsg,from_string

我們來觀察下python中用到的地理處理工具包的名字:Geopandas. 顧名思義,這個包可以讓我們像使用pandas一樣處理地理數據,大家可以想像一下這過程,一定如絲般順滑!Geopandas其實是各種地理數據分析包的集大成者,包括shapely,Fiona等,當然還有數據分析相關的包numpy,pandas,所以,在這些提及的包中的功能,都可以混合使用,切換不留痕跡。這裡就一併導入了。

導入地圖shp

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

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

查看導入後的數據

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

嗯!是長這樣!

接下來,導入房源和餐廳數據

*這兩份數據是CSV格式,導入成DataFrame,我們發現數據中含有經緯度欄位,我們可以根據這兩個欄位,也把數據轉換成GeoDataFrame格式

通過經緯度轉換點數據:

defpoint_to_geo(df,lon,lat):df['geometry'] = gpd.GeoSeries(list(zip(df[lon],df[lat]))).apply(Point) #識別經緯度,轉換點數據 df = gpd.GeoDataFrame(df) #轉換Geodataframe格式 df.crs = {'init':'epsg:4326'} #定義坐標系WGS84del df[lon]del df[lat]return dfhouse_data = point_to_geo(house_data,'lon_WGS','lat_WGS') #轉換Geodataframe格式restaurant_data = point_to_geo(restaurant_data,'lon_WGS','lat_WGS') #轉換Geodataframe格式

*官方文檔請看這裡:

繪圖,看看成功與否——以上海街鎮為底圖,兩份點數據疊加在底圖上

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

*這裡設置下圖形的基本參數,畫圖功能是基於matplotlib,所以它的一些寫法和功能是通用的。

顯示OK,那麼就進入核心環節~

分析過程

在製作緩衝區和空間關聯之前,先需要對圖形進行投影變換,這裡仍然寫一個函數:

def wgs84_to_CGCS2000(df,code):result = df.to_crs(from_epsg(code)) return resultshanghai_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)

*只要知道投影坐標系的ESPG代碼,就可以任意轉換,我們使用GSC2000坐標系。

接著,構建緩衝區圖層,使用buffer()方法,參數為緩衝區的半徑

house_data_buffer = house_data_pcs.buffer(1000) #建立一公裡緩衝區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) #保存圖片

構建完成,同樣輸出成地圖查看效果

增加了透明度,我們可以看到市中心的房源密度較高。生成的數據為GeoSeries,數據為緩衝區的地理信息。這裡需要使用任意方法把地理信息和其他欄位匹配在一起。

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

下面,我們使用空間關聯,連接餐廳點數據,並獲取餐廳的個數。

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() #聚合計算個數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相同,分相交,包含和被包含三種。我們使用包含進行連接,並使用pandas的groupby()方法分組計數。

這樣我們就完成了空間關聯和計算,我們可以使用地圖顯示,並添加圖例:

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

這樣就可以繪製出以街鎮為單位的點密度圖:

最後,我們需要把數據導出保存。我們可以保存為shapfile格式,這裡推薦大家直接保存為csv格式,方便分享。也可以根據需要,轉成任意格式。

shanghai_result = wgs84_to_CGCS2000(shanghai_result,4326) #轉換成地理坐標系shanghai_result.columns = ['town','region','geometry','restaurant_count'] #更改列名為英文,因為數據保存對中文支持不佳buffer_result = wgs84_to_CGCS2000(buffer_result,4326) #轉換成地理坐標系shanghai_result.to_csv('./result/shanghai_result.csv') #保存成csvshanghai_result.to_file('./result/shanghai_result.shp') #保存成shapfilebuffer_result.to_csv('./result/buffer_result.csv') #保存成csvbuffer_result.to_file('./result/buffer_result.shp') #保存成shapfile

結果檢查

我們把保存的數據導入Arcgis,可以正常使用~太棒了!

是不是很實用呢?所以,對於空間數據分析中一些重複操作,工程化的作業,建議大家可以考慮用代碼實現,高效,便捷。

作者簡介:本文作者數據俠倪家禹,城市數據團特約撰稿人,數據分析師(Python)微專業學員,喜歡用數據挖掘生活中的小秘密。對數據研究有著敏銳的洞察力,善於把複雜的問題簡單化,簡單的問題流程化。希望大家通過數據感受生活的魅力。聲明:本文為作者投稿,版權歸其個人所有。

相關焦點

  • 從數據可視化到交互式數據分析
    (3)分析問題第三個用途是從數據中提取信息,用來解釋問題同時增加對一些有趣現象的理解。當然,解釋性可視化也有助於人們理解某些事物。但這裡的主要區別在於,在解釋性的可視化中,作者已經知道了可視化的內容(在執行了一些分析之後),而在分析學中,可視化的主要價值是幫助人們第一時間理解數據。人們已經使用了一百萬個名字來定義此活動。
  • Python數據分析可視化教程學習
    來源:博學谷 作者:照照隨著數據分析與數據挖掘行業的日益火爆,Python數據分析可視化教程也成為了許多人提升職業競爭力的必修課。目前人類社會正在從IT時代步入大數據時代,學習Python數據分析可視化,無疑可以走在時代技術發展的最前沿,做大數據時代的弄潮兒。另外處於對自身職業規劃的需要,我們也要掌握Python數據分析可視化的技能。現在放眼望去,無處不在的數據分析師,已經成為了許多企業的核心職業。而且該Python教程包括了主流的數據分析庫,是大家學習數據分析的絕佳選擇。
  • 運維大數據可視化分析平臺
    傳統監控系統要麼只是針對指標、日誌等單一類型數據提供分析能力,要麼只針對網絡、基礎設施、應用中間件提供監控能力。 隨著應用系統快速複雜化,政府、企業現有數據孤島式的監控系統已經嚴重阻礙了風險發現、排查定位效率。
  • 國內外主流數據可視化分析工具對比
    數據可視化分析產品主要是通過在企業各類業務系統中提取數據,並提供整合、分析、可視化及協作等功能,來幫助企業完成數據價值的發現過程。通過將原始的業務數據轉換為可理解的圖表和故事版,企業可以獲得更加直觀和快捷的業務洞察,更好地做出商務決策等等。  目前,市面上有不少數據可視化分析產品可供企業選擇,相對主流的產品包括Tableau、Qlik、Power BI以及DataHunter數據可視化分析平臺。
  • Xscope時空大數據可視化分析平臺
    承建單位:北京空擎信息技術有限公司  創新摘要  XScope是一個專注於時空大數據可視化分析決策服務平臺,該平臺以三維空間可視化交互為基礎,以時空大數據管理工具為支撐,融合了多源空間數據源、資料庫、地圖投影 、圖元表達、對象化編輯管理、空間分析等,並以3D渲染引擎作為輸出首選,除此以外,加入了交互呈現一致性的邏輯調度管理方法
  • 盤點5款數據可視化分析報表工具
    在這個信息化時代,每分每秒都產生海量數據。在海量數據中,挖掘出有用的數據,並且能以較人性化、直觀的方式展示這些數據,變得尤為重要。大家或許還在為做報表感到為難,想在眾多數據中處理,查找出有用的數據,卻遲遲在為不懂SQL語言而煩惱。為了解決大家的煩惱,本文將介紹如果5款數據可視化分析的報表工具,希望對大家有所幫助。
  • 韋編|BDP 數據可視化分析神器
    還在為數據分析發愁?想要輕鬆製作精美的數據可視圖?快來BDP個人版BDP個人版是一款免費使用、免安裝下載的數據可視化分析工具網址:https://me.bdp.cn/home.html數據導入在BDP中除了可以導入常用的Excel和SQL資料庫的數據之外,還可以導入第三方平臺的數據,如百度統計、百度搜索推廣、新浪微博超級粉絲通等等。
  • 檢察業務引入數據可視化分析 助力智慧檢務
    上海市人民檢察院第二分院啟動了檢察工作數據分析和可視化項目,以推動檢察工作智能化。項目引入可視化數據分析平臺數據分析(Data Analytics),對各種業務系統產生的海量數據進行深度挖掘,構建簡單、高效、易用的檢察大數據分析系統,進一步提高醫院的數據價值和決策效率,實現智能化檢察工作。
  • 大數據可視化分析工具常用的有哪些?
    大數據可視化分析工具常用的有哪些?企業基礎數據才能制定出正確的策略,常用的分析工具有、Tableau、ECharts、Highcharts、魔鏡、圖表秀等。在大數據時代有價值的商品則是數據,大數據技術為決策提供依據,在政府、企業、科研項目等決策中扮演著重要的角色。
  • 大數據:為什麼企業管理者需要更好的進行「數據分析可視化」?
    比如,當你在查看數據視圖時,可以立即知道哪個節點出現了異常;如果使用文字編寫數據分析而不是可視化的圖表時,則需要從頭將數據整理歸納並運用一定的計算才能得出對「異常點」的推論。這大概也就是我們會願意去利用數據可視化的主要原因,隨著大數據發展的不斷深化,數據逐步佔據市場的核心地位,每個人都在以不同的方式收集數據,並想從中獲取到更多具有價值的信息來輔助個人乃至企業的管理。
  • 大數據可視化常用分析圖表的優缺點
    可視化圖表次整理了一些平常不太使用,但在合適的場景的使用它們,往往能為你的分析報告加分不少的圖表。
  • 數據可視化,職場數據分析都需要哪些常用的圖表?
    ,便於讓讀者更高效閱讀,而不單是自己使用,通過數據可視化突出數據背後的規律,以此突出數據中的重要因素,並且,數據可視化可以將數據變得更加直觀。  使用圖表數據可視化的作用  使用圖表來展示數據主要有三個作用:  表達形象化:使用圖表可以化冗長為簡潔,化抽象為具體,化深奧為形象,使讀者或聽眾更容易理解主題和觀點。  突出重點:通過對圖表中數據的顏色和字體等信息的特別設置,可以把問題的重點有效地傳遞給讀者或聽眾。
  • 盤點55個最實用的大數據可視化分析工具
    雖然R主要用於統計分析或者開發統計相關的軟體,但也有用作矩陣計算。其分析速度可比美GNUOctave甚至商業軟體MATLAB。五、Visual.ly如果你需要製作信息圖而不僅僅是數據可視化,Visual.ly是最流行的一個選擇。六、ProcessingProcessing是數據可視化的招牌工具。你只需要編寫一些簡單的代碼,然後編譯成Java。
  • 實用的可視化數據分析工具,讓你的日常報告不再枯燥
    在工作過程中,如在日常的工作匯報中,將採集到的數據信息進行統計、分析,再將數據用圖形的方式表達。會方便我們對數據的把控,更直觀了解到數據情況。這就是今天要給大家介紹的可視化。在網上一搜,數據可視化,各種各樣的如下圖這樣的可視化圖表。
  • 22個免費的數據可視化和分析工具推薦
    【IT168 評論】本文總結推薦22個免費的數據可視化和分析工具。列表如下:  數據清理(Data cleaning)  當你分析和可視化數據前,常需要「清理」工作。比如一些輸入性列表「New York City" ,同時其他人會說"New York, NY" 。
  • 路透社文章的文本數據分析與可視化
    當我要求你解釋文本數據時,你會怎麼做?你將採取什麼步驟來構建文本可視化?本文將幫助你獲得構建可視化和解釋文本數據所需的信息。從文本數據中獲得的見解將有助於我們發現文章之間的聯繫。它將檢測趨勢和模式。對文本數據的分析將排除噪音,發現以前未知的信息。
  • 前端如何一鍵生成多維度數據可視化分析報表
    這裡筆者總結為如下3點核心知識:如何使用JavaScript實現前端導入和導出excel文件(H5編輯器實戰復盤)前端如何基於table中的數據一鍵生成多維度數據可視化分析報表如何實現會員管理系統下的權限路由和權限菜單
  • 如何選擇數據分析可視化工具?Excel,Tableau還是Power BI?
    正確分析使用數據可能會挖到寶藏。那麼,作為個人或公司,如何選擇分析和可視化數據的工具? Tableau發行於2003年,是一種交互式數據可視化軟體,被公認為增長最快的數據可視化工具,主要是因為它能夠幫助用戶查看和理解數據。它將原始數據轉換成可理解的視覺效果,從而改變人們使用數據進行問題解決和決策的方式。 Power BI於2014年發布,它是Microsoft提供的基於雲的分析和商業智能服務。
  • 設計成功有價值的數據可視化:數據可視化的成功要素
    2.定製數據可視化方案數據可視化方案是根據用戶的需求來準備的,目的就是解決用戶的某些問題,所以需要你深入了解那些海量數據反映出來的現象和內含的本質所以,一份成功的可視化方案,不僅要很好的解釋數據信息、分析結論,還能讓管理者基於可視化路徑找到問題所在並及時分析決策,以實現最終目標。
  • 如何對輿情數據進行比較分析與可視化呈現?
    在輿情研究過程中,數據能夠為我們提供客觀分析研判的支撐。輿情數據的比較分析,是最基礎的分析方法之一。通過對不同對象的輿情數據進行比較分析,可以找到輿情工作的重點、難點。輿情數據比較分析的常見維度包括傳播渠道、媒體類型、地區等。