हर दिन उत्पन्न होने वाले डेटा का एक बड़ा हिस्सा स्वभाव से ही स्थान-आधारित होता है। पृथ्वी अवलोकन (Earth Observation) डेटा और GPS डेटा से लेकर हर प्रकार के मानचित्रों में शामिल डेटा तक, स्थानिक डेटा –जिसे कभी-कभी भू-स्थानिक डेटा या भौगोलिक सूचना भी कहा जाता है– वह डेटा है जिसमें हर रिकॉर्ड के साथ एक विशिष्ट स्थान जुड़ा होता है।
हर स्थानिक डेटा बिंदु को एक मानचित्र पर स्थित किया जा सकता है। यह किसी निश्चित कोऑर्डिनेट रेफरेंस सिस्टम का उपयोग करके किया जाता है, जैसे भौगोलिक निर्देशांक, जो ग्लोब पर किसी स्थान को बताने के लिए हम जिन सामान्य अक्षांश-देशांतर (latitude-longitude) युग्मों का उपयोग करते हैं, उन पर आधारित होता है। यह हमें डेटा के बीच स्थानिक संबंधों को देखने की अनुमति देता है।
फिर भी, भू-स्थानिक डेटा की वास्तविक शक्ति डेटा और उनके स्थान को एक साथ जोड़ने में है, जिससे उन्नत विश्लेषण के कई अवसर खुलते हैं। तथाकथित भू-स्थानिक डेटा विज्ञान, डेटा विज्ञान की एक उप-शाखा है, जो स्थानिक एल्गोरिद्म और विश्लेषणात्मक तकनीकों, जैसे मशीन लर्निंग और डीप लर्निंग, की शक्ति का उपयोग करके भू-स्थानिक डेटा से जानकारी निकालने पर केंद्रित है। दूसरे शब्दों में, भू-स्थानिक डेटा विज्ञान हमें यह समझने में मदद करता है कि चीजें कहाँ घटित होती हैं और वे वहाँ क्यों घटित होती हैं।
भू-स्थानिक डेटा विज्ञान के लिए कई उपकरण उपलब्ध हैं। यह ट्यूटोरियल Python में भू-स्थानिक डेटा के साथ काम करने के लिए एक ओपन-सोर्स पैकेज GeoPandas पर केंद्रित होगा।
GeoPandas, pandas –जो Python में डेटा फ्रेम के साथ काम करने का मानक उपकरण है– द्वारा उपयोग किए जाने वाले डाटाटाइप्स का विस्तार करता है, ताकि ज्यामितीय प्रकारों पर स्थानिक क्रियाएं संभव हो सकें। क्योंकि GeoPandas, pandas –तथा matplotlib जैसी अन्य लोकप्रिय डेटा साइंस Python पैकेजों– पर आधारित है, इसलिए Python का उपयोग करने वाले डेटा प्रोफेशनल्स के लिए GeoPandas के सिंटैक्स में दक्ष होना बहुत आसान है।
Python GeoPandas इंस्टॉल करना
Python GeoPandas का उपयोग करने के लिए, आपको पहले इसे किसी भी अन्य Python लाइब्रेरी की तरह इंस्टॉल करना होगा।
यह ध्यान देना महत्वपूर्ण है कि GeoPandas अपनी पूर्ण स्थानिक क्षमताओं के लिए ओपन-सोर्स भू-स्थानिक लाइब्रेरियों के एक स्टैक पर निर्भर करता है, जिनमें shapely, fiona, pyproj, और rtree शामिल हैं। आपको सुनिश्चित करना होगा कि आप ये सभी निर्भरताएँ इंस्टॉल करें, अन्यथा GeoPandas अपेक्षित रूप से काम नहीं कर सकता।
जटिलताओं से बचने के लिए, GeoPandas, conda पैकेज मैनेजर का उपयोग करके लाइब्रेरी इंस्टॉल करने की सिफारिश करता है। इसका मतलब है कि आपको पहले Anaconda इंस्टॉल करना होगा। Anaconda को इंस्टॉल और उपयोग करने पर मार्गदर्शिका के लिए हमारा ट्यूटोरियल देखें।
conda का फायदा यह है कि यह सभी ऑपरेटिंग सिस्टम (Windows, Mac, Linux) के लिए GeoPandas की आवश्यक और वैकल्पिक निर्भरताओं के प्री-बिल्ट बायनरी उपलब्ध कराता है। कमांड लाइन पर GeoPandas इंस्टॉल करने के लिए:
वैकल्पिक रूप से, आप Python के स्टैंडर्ड पैकेज इंस्टॉलर pip का उपयोग करके भी Anaconda इंस्टॉल कर सकते हैं। जैसा कि पहले ही कहा गया है, आपको आवश्यक निर्भरताएँ भी इंस्टॉल करनी होंगी। यदि आप pip से परिचित नहीं हैं, तो हम दृढ़ता से सलाह देते हैं कि आप हमारा पैकेज प्रबंधन के लिए Pip Python ट्यूटोरियल पढ़ें। GeoPandas को pip से इंस्टॉल करने के लिए आपको यह निर्देश चलाना होगा:
किसी भी स्थिति में, यदि GeoPandas को इंस्टॉल करते समय आपको परेशानी होती है, तो अधिक जानकारी के लिए डॉक्यूमेंटेशन देखें।
एक बार जब आपने पैकेज इंस्टॉल कर लिया, तो आप GeoPandas का उपयोग शुरू करने के लिए तैयार हैं। बस इसे अपने Python वातावरण में इम्पोर्ट करें। ध्यान दें कि GeoPandas को gpd उपनाम से इम्पोर्ट करना बहुत आम है।
इस खंड में, हम वे सबसे बुनियादी क्रियाएँ कवर करेंगे जो आप GeoPandas के साथ कर सकते हैं। ऐसा करते हुए, हम आपको भू-स्थानिक विश्लेषण के कुछ महत्वपूर्ण अवधारणाओं से परिचित कराएँगे, जिनमें स्थानिक डेटा के प्रकार, स्थानिक डेटा फ़ॉर्मेट, और कोऑर्डिनेट रेफरेंस सिस्टम (CRS) शामिल हैं।
स्थानिक डेटा पढ़ना और लिखना
जैसे pandas को pandas डेटा फ्रेम में बदलने के लिए इनपुट डेटा की आवश्यकता होती है, वैसे ही GeoPandas इनपुट (स्थानिक) डेटा पढ़ता है और उसे तथाकथित GeoDataFrame में बदल देता है।
GeoPandas कितने प्रकार की स्थानिक फाइलें पढ़ सकता है, इस पर जाने से पहले, विभिन्न प्रकार के स्थानिक डेटा में भेद करना महत्वपूर्ण है। हम किस प्रकार के डेटा से निपट रहे हैं, यह हमें बताता है कि डेटा का विश्लेषण और फिर दृश्यांकन करने के लिए हमें किन उपकरणों का उपयोग करना चाहिए।
मूल रूप से, स्थानिक डेटा के दो मुख्य प्रकार होते हैं:
वेक्टर डेटा। यह पृथ्वी पर भौगोलिक स्थानों की विशेषताओं का वर्णन असतत ज्यामितियों का उपयोग करके करता है, अर्थात्:
बिंदु (Point)। व्यक्तिगत स्थान, जैसे कोई इमारत या कार, जिनके X और Y निर्देशांक होते हैं।
रेखा (Line)। जुड़े हुए बिंदुओं की एक श्रृंखला जो सड़कों या जलधाराओं जैसी चीजों का वर्णन करती है।
बहुभुज (Polygon)। एक बंद रेखा द्वारा निर्मित जो किसी क्षेत्र को घेरती है, जैसे किसी देश की सीमाएँ। अतिरिक्त रूप से, जब किसी एक फीचर में कई ज्यामितियाँ होती हैं, तो हम उसे मल्टीपॉलीगन (MultiPolygon) कहते हैं।
रास्टर डेटा। दुनिया को एक सतत सतह के रूप में एन्कोड करता है जिसे एक ग्रिड द्वारा प्रदर्शित किया जाता है, जैसे किसी छवि के पिक्सेल। ग्रिड के हर हिस्से में या तो कोई सतत मान (जैसे ऊँचाई का मान) हो सकता है या वर्गीकृत श्रेणी (जैसे भूमि आवरण वर्गीकरण)। क्लासिक उदाहरणों में ऊँचाई डेटा या उपग्रह छवियाँ शामिल हैं।
वेक्टर और रास्टर, दोनों प्रकार का डेटा आम तौर पर गैर-स्थानिक डेटा के साथ आता है, जिसे एट्रिब्यूट भी कहा जाता है। स्थानिक डेटा में स्थान संबंधी जानकारी के साथ किसी भी संख्या में अतिरिक्त एट्रिब्यूट हो सकते हैं। उदाहरण के लिए, किसी स्कूल के स्थान के साथ स्कूल का नाम, छात्रों की संख्या, या पता जुड़ा हो सकता है।
GeoPandas को वेक्टर डेटा के साथ काम करने के लिए डिज़ाइन किया गया है, हालाँकि यह rasterio जैसी अन्य Python पैकेजों के साथ मिलकर रास्टर डेटा को भी संभाल सकता है। स्थानिक डेटा पढ़ने के लिए, GeoPandas में geopandas.read_file() फ़ंक्शन आता है। यह शक्तिशाली फ़ंक्शन अधिकांश प्रचलित वेक्टर-आधारित स्थानिक डेटा को स्वतः पढ़ सकता है।
वेक्टर डेटा के कुछ सबसे सामान्य फ़ॉर्मेट हैं:
Shapefile। उद्योग मानक के रूप में, शेपफाइल सबसे आम वेक्टर डेटा फ़ॉर्मेट है। यह आमतौर पर एक ज़िप फाइल में उपलब्ध तीन फाइलों से मिलकर बनता है:
.shp फाइल में शेप ज्योमेट्री होती है।
.dbf फाइल में प्रत्येक ज्योमेट्री के एट्रिब्यूट होते हैं,
.shx फाइल या शेप इंडेक्स फाइल एट्रिब्यूट को शेप से जोड़ने में मदद करती है।
GeoJSON। यह 2016 में जारी किया गया एक नया भू-स्थानिक डेटा फ़ॉर्मेट है। शेपफाइल के विपरीत, GeoJSON एक एकल फाइल होता है, जिससे इसके साथ काम करना आसान हो जाता है।
निम्नलिखित उदाहरणों में, हम geopandas.read_file() फ़ंक्शन का उपयोग करके GitHub पर होस्टेड एक GeoJSON फाइल पढ़ेंगे, जिसमें बार्सिलोना शहर के विभिन्न जिलों के बारे में भू-स्थानिक डेटा है।
url ='https://raw.githubusercontent.com/jcanalesluna/bcn-geodata/master/districtes/districtes.geojson'
districts = gpd.read_file(url)
districtsसंचालित द्वारा
हम एक मिनट में इस डेटासेट पर वापस आएँगे, लेकिन पहले, आपको जानना चाहिए कि GeoDataFrame को वापस किसी फाइल में कैसे लिखा जाए। यह काफी आसान है। आपको स्थानिक डेटा वाली फाइल बनाने के लिए GeoDataFrame.to_file() का उपयोग करना है। डिफ़ॉल्ट रूप से, नए दस्तावेज़ का फ़ॉर्मेट shapefile होगा, लेकिन आप इसे “driver” पैरामीटर से बदल सकते हैं।
उदाहरण के लिए, आप जिले वाले GeoDataFrame को एक geoJSON फाइल में सहेज सकते हैं:
districts.to_file("districts.geojson", driver="GeoJSON")संचालित द्वारा
GeoDataFrames का अन्वेषण
आपने देखा होगा कि पिछले सेक्शन में GeoDataFrame पारंपरिक pandas डेटा फ्रेम जैसा दिखता है। यह समानता स्वाभाविक है, क्योंकि GeoDataFrame, pandas.DataFrame का एक सबक्लास है। इसका मतलब है कि यह pandas डेटा फ्रेम की कई विधियाँ और गुण (methods and attributes) विरासत में लेता है। GeoDataFrame में नया यह है कि यह ज्योमेट्री कॉलम (जिन्हें GeoSeries भी कहा जाता है) संग्रहीत कर सकता है और स्थानिक क्रियाएँ कर सकता है।
ज्योमेट्री कॉलम में किसी भी प्रकार का वेक्टर डेटा, जैसे बिंदु, रेखाएँ और बहुभुज, हो सकता है। आगे, यह ध्यान देने योग्य है कि यद्यपि किसी GeoDataFrame में कई GeoSeries हो सकती हैं, केवल एक कॉलम को सक्रिय ज्योमेट्री माना जाता है, अर्थात सभी स्थानिक क्रियाएँ उसी कॉलम पर आधारित होंगी।
GeoDataFrames की एक और महत्वपूर्ण विशेषता यह है कि हर GeoSeries के साथ संबंधित CRS जानकारी आती है। यह CRS जानकारी GeoPandas को बताती है कि पृथ्वी पर निर्देशांक कहाँ स्थित हैं। यह जानकारी स्थानिक विश्लेषण के लिए अहम है। उदाहरण के लिए, यदि आपको दो स्थानिक डेटासेट्स को मिलाना है, तो आपको सुनिश्चित करना होगा कि वे एक ही CRS में अभिव्यक्त हों। अन्यथा, आपको अपेक्षित परिणाम नहीं मिलेगा।
CRS की दो मुख्य श्रेणियाँ हैं:
भौगोलिक निर्देशांक। वे भूमध्य रेखा और प्रधान मध्यान्ह रेखा के सापेक्ष अक्षांश और देशांतर के डिग्री में एक वैश्विक स्थिति परिभाषित करते हैं। इस प्रणाली से हम पृथ्वी पर किसी भी स्थान को आसानी से निर्दिष्ट कर सकते हैं। इसका व्यापक उपयोग होता है, उदाहरण के लिए GPS में। सबसे लोकप्रिय CRS EPSG:4326 है, जिसे WGS84 भी कहा जाता है।
प्रोजेक्टेड निर्देशांक। हालाँकि पृथ्वी गोल है, हम आमतौर पर इसे दो-आयामी मानचित्र पर प्रदर्शित करते हैं। प्रोजेक्टेड निर्देशांक स्थानों को X और Y आयामों में व्यक्त करते हैं, जिससे हम डिग्री के बजाय मीटर जैसी लंबाई इकाई के साथ काम कर सकते हैं, जो विश्लेषण को अधिक सुविधाजनक और प्रभावी बनाता है। परंतु, तीन-आयामी पृथ्वी को दो-आयामी मानचित्र पर लाने से अनिवार्य रूप से विकृति उत्पन्न होती है। यही कारण है कि प्रोजेक्टेड निर्देशांक बनाने के अलग-अलग तरीके हैं। उदाहरण के लिए, कई देशों ने अपनी विशिष्ट भौगोलिक संरचना के लिए मानक प्रोजेक्टेड CRS अपनाया है।
CRS के बारे में जानने के लिए और भी बहुत कुछ है, पर यह इस ट्यूटोरियल के दायरे से बाहर है। अतिरिक्त जानकारी और व्यावहारिक उदाहरणों के लिए हमारा Working with Geospatial Data in Python कोर्स एक बेहतरीन संसाधन है।
GeoPandas में, CRS जानकारी crs एट्रिब्यूट में संग्रहीत होती है:
जिला GeoDataFrame भौगोलिक निर्देशांकों (EPSG: 4326) से जुड़ा है, लेकिन हम इसे प्रोजेक्टेड निर्देशांकों में बदलना चाहते हैं, ताकि हम मीटर में कुछ गणनाएँ कर सकें। आइए इसे EPSG:2062 में बदलते हैं, जो स्पेन के लिए मानक प्रोजेक्टेड CRS है। हम इसे Geopandas.to_crs() मेथड से कर सकते हैं।
districts.to_crs(epsg=2062, inplace=True)
districts.crsसंचालित द्वारा
अब जब हमने सही प्रोजेक्टेड CRS सेट कर लिया है, तो हम GeoDataFrames के एट्रिब्यूट्स का अन्वेषण करने के लिए तैयार हैं।
स्थानिक डेटासेट के एट्रिब्यूट्स का अन्वेषण
GeoPandas, shapely पैकेज से कई उपयोगी मेथड और एट्रिब्यूट्स विरासत में लेता है। हम उनमें से चार को कवर करने जा रहे हैं।
Area
area एट्रिब्यूट किसी ज्योमेट्री का क्षेत्रफल देता है। हम प्राप्त क्षेत्रफल (km2 में परिवर्तित) को एक नए कॉलम में सहेज सकते हैं:
districts['area']= districts.area /1000000
districtsसंचालित द्वारा
Centroid
centroid एट्रिब्यूट किसी ज्योमेट्री का केंद्र बिंदु देता है। हम इसे अपने डेटासेट में जोड़ सकते हैं, जिससे एक नया ज्योमेट्री कॉलम बन जाएगा।
districts['centroid']=districts.centroid
districtsसंचालित द्वारा
Boundary
boundary एट्रिब्यूट किसी बहुभुज की सीमा (बाउंड्री) देता है।
distance मेथड किसी ज्योमेट्री से किसी स्थान तक की न्यूनतम दूरी देता है। मान लीजिए कि हम प्रसिद्ध Sagrada Familia चर्च, जो Eixample जिले में स्थित है, से बार्सिलोना के हर जिले के सेंट्रॉइड तक की दूरी की गणना करना चाहते हैं, और फिर उन दूरियों (किलोमीटर में) को एक नए कॉलम में जोड़ना चाहते हैं।
सबसे पहले, हमें shapely की Point() फ़ंक्शन का उपयोग करके इच्छित निर्देशांकों के साथ एक बिंदु बनाना होगा (आप इन्हें Google Maps पर आसानी से ढूँढ सकते हैं), उसे सही CRS के साथ GeoSeries में बदलना होगा, और फिर GeoPandas.distance() मेथड का उपयोग करना होगा:
from shapely.geometry import Point
sagrada_fam = Point(2.1743680500855005,41.403656946781304)
sagrada_fam = gpd.GeoSeries(sagrada_fam, crs=4326)
sagrada_fam= sagrada_fam.to_crs(epsg=2062)
districts['sagrada_fam_dist']=[float(sagrada_fam.distance(centroid))/1000for centroid in districts.centroid]संचालित द्वारा
पिछली स्थानिक क्रियाओं के बाद प्राप्त डेटासेट्स इस प्रकार दिखते हैं:
GeoPandas के साथ प्लॉटिंग
हमने जो स्थानिक क्रियाएँ कीं, वे हमारे अध्ययन के लिए उपयोगी अंतर्दृष्टि प्रदान करती हैं। हालाँकि, अपनी ज्योमेट्रियों को स्थान में विज़ुअलाइज़ करना आपके विश्लेषण को बेहतर बनाने का एक शानदार तरीका है। सौभाग्य से, GeoPandas प्लॉट बनाना बेहद आसान है। आपको Python के matplotlib पैकेज पर बने GeoDataFrame.plot() फ़ंक्शन को कॉल करना होता है।
आइए बार्सिलोना के जिलों का एक बुनियादी विज़ुअलाइज़ेशन से शुरू करते हैं।
हम अपने GeoPandas प्लॉट को हर जिले को रंग देकर और अधिक सूचनाप्रद बना सकते हैं। legend को 'True' सेट करने से रंगों की व्याख्या में मदद के लिए एक लीजेंड बनता है।
ax= districts.plot(column=district_name', figsize=(10,6), edgecolor='black', legend=True)संचालित द्वारा
अंत में, हम अपने मानचित्र में जिलों के सेंट्रॉइड्स और Sagrada Familia जोड़ सकते हैं, साथ ही एक शीर्षक भी। इसी तरह, प्लॉट को और आकर्षक बनाने के लिए, हम contextily पैकेज का उपयोग करके वास्तविक बार्सिलोना शहर का एक टाइल मानचित्र भी जोड़ सकते हैं।
अच्छा है, है ना? सुंदर स्थानिक विज़ुअलाइज़ेशन बनाने के लिए आप और भी बहुत कुछ कर सकते हैं। हमारा Visualizing Spatial Data With Python कोर्स आपके विज़ुअलाइज़ेशन कौशल को अगले स्तर पर ले जाने के लिए एक बेहतरीन संसाधन है।
GeoPandas के साथ स्थानिक संबंध
भू-स्थानिक डेटा के प्रमुख पहलुओं में से एक यह है कि वे स्थान में एक-दूसरे से कैसे संबंधित होते हैं। GeoPandas, pandas और shapely पैकेजों की शक्ति का उपयोग करके स्थानिक डेटासेट्स के बीच हर प्रकार के स्थानिक संबंध कर सकता है। इस खंड में, हम कुछ सबसे सामान्य क्रियाओं को कवर करेंगे।
एट्रिब्यूट जॉइन्स
pandas में डेटासेट्स को संयोजित करने के दो तरीके हैं: एट्रिब्यूट जॉइन और स्पैटियल जॉइन।
एट्रिब्यूट जॉइन हमें गैर-ज्योमेट्री वेरिएबल्स के आधार पर दो GeoDataFrames को जोड़ने देते हैं, ठीक वैसे ही जैसे pandas में एक सामान्य जॉइन। वास्तव में, एट्रिब्यूट जॉइन करने का तरीका स्टैंडर्ड pandas.merge() मेथड के माध्यम से है। यदि आप pandas जॉइन्स के बारे में अधिक जानने में रुचि रखते हैं, तो हमारा pandas में DataFrames जोड़ना ट्यूटोरियल देखें।
उदाहरण के लिए, 2022 में बार्सिलोना की जनसंख्या डेटा से अपने GeoDataFrame को समृद्ध करना दिलचस्प होगा।
pop =pd.read_csv('poblacion_barna_2022.csv', usecols=['Nom_Districte','Nombre'])
pop = pd.DataFrame(pop.groupby('Nom_Districte')['Nombre'].sum()).reset_index()
pop.columns=['district_name','population_22']
districts = districts.merge(pop)
districtsvसंचालित द्वारा
स्पैटियल जॉइन्स
इसके विपरीत, स्पैटियल जॉइन दो GeoDataFrames को उनके स्थानिक संबंधों के आधार पर मर्ज करने की अनुमति देते हैं।
उदाहरण के लिए, आइए पहचानें कि बार्सिलोना में साइकिल लेन किन जिलों में स्थित हैं।
GeoPandas में, स्पैटियल जॉइन ऑपरेशन sjoin() फ़ंक्शन के रूप में उपलब्ध है। पहला आर्ग्युमेंट वह GeoDataFrame है जिसमें हम जानकारी जोड़ना चाहते हैं, और दूसरा आर्ग्युमेंट वह GeoDataFrame है जिसमें वह जानकारी है जिसे हम जोड़ना चाहते हैं। फिर, हमें जॉइन के प्रकार को निर्दिष्ट करना होता है। अंत में, “predicate” पैरामीटर GeoPandas को बताता है कि दोनों डेटासेट्स को मिलाने के लिए हम कौन-सा स्थानिक संबंध उपयोग करना चाहते हैं। सबसे सामान्य संबंधों में “intersects”, “contains” और “within” शामिल हैं।
हमारे उदाहरण में, हम “intersects” प्रेडिकेट का उपयोग करेंगे। यदि दो ज्यामितीय ऑब्जेक्ट्स की कोई भी बाउंड्री या आंतरिक बिंदु समान हो, तो वे इंटरसेक्ट करते हैं।
lanes_districts = gpd.sjoin(districts, bike_lane, how='inner', predicate='intersects')
lanes_districtsसंचालित द्वारा
ध्यान दें कि प्राप्त GeoDataFrame में bike_lane GeoDataFrame से अधिक पंक्तियाँ हैं। इसका कारण यह है कि कोई साइकिल लेन एक से अधिक जिलों में स्थित हो सकती है।
अंत में, हम अपने डेटासेट को समूहबद्ध करके जिलों के अनुसार साइकिल लेनों की संख्या प्राप्त कर सकते हैं:
lanes_districts.groupby('district_name').size()संचालित द्वारा
GeoPandas ओवरले ऑपरेशन्स
अंततः, स्थानिक ओवरले आपको दो GeoDataFrames (जिनमें पॉलीगन या मल्टीपॉलीगन ज्योमेट्रियाँ हों) की तुलना करने और स्थानिक संयोजन और विलय की गई विशेषताओं का प्रतिनिधित्व करने वाली नई ज्योमेट्रियों के साथ एक नया GeoDataFrame बनाने की अनुमति देते हैं। नीचे दी गई छवि विभिन्न संभावनाएँ दिखाती है:
मान लीजिए कि बार्सिलोना सिटी काउंसिल प्रदूषण से निपटने और सामुदायिक कल्याण को बढ़ावा देने के प्रयास में नए स्थानीय पार्क बनाना चाहती है। एक प्रारंभिक विचार यह है कि हर जिले के केंद्र से 500 मीटर के भीतर बड़े, गोल पार्क बनाए जाएँ। हम इसे हर जिले के सेंट्रॉइड के आधार पर बफ़र बनाकर सिम्युलेट कर सकते हैं।
parks = gpd.GeoDataFrame(districts.centroid.buffer(500), geometry=0)
parks.plot()संचालित द्वारा
अब, हम कुछ ओवरले ऑपरेशन्स करने के लिए तैयार हैं। उदाहरण के लिए, यदि हम केवल उन जिलों के क्षेत्रों को देखना चाहते हैं जहाँ पार्क स्थित होंगे, तो हम GeoPandas.overlay() मेथड का उपयोग कर सकते हैं:
parks_intersection = districts.overlay(parks, how='intersection')
ax = parks_intersection.plot(alpha=0.5, edgecolor='black', column='district_name')संचालित द्वारा
या, यदि हम वे जिले देखना चाहते हैं जिनमें प्रस्तावित पार्कों द्वारा घेरा गया क्षेत्र शामिल न हो, तो हम “how” पैरामीटर बदलकर कोई अन्य ओवरले ऑपरेशन कर सकते हैं।
parks_difference = districts.overlay(parks, how='difference')
ax = parks_difference.plot(alpha=0.5, edgecolor='black', column='district_name')संचालित द्वारा
निष्कर्ष
हमें उम्मीद है कि आपको यह GeoPandas ट्यूटोरियल पसंद आया होगा। स्थानिक विश्लेषण, डेटा विज्ञान के सबसे रोचक क्षेत्रों में से एक है, जो स्थान-आधारित जानकारी के साथ आपके विश्लेषण को समृद्ध करने के असीम अवसर प्रदान करता है। स्थानिक विश्लेषण के लिए कई उपकरण हैं, लेकिन यदि आप पहले से Python से परिचित हैं, तो GeoPandas शुरुआत करने के लिए एक बेहतरीन जगह है।
क्या आप अपनी भू-स्थानिक शिक्षा जारी रखना चाहते हैं? हमारे पास सब कुछ है! निम्नलिखित सामग्रियाँ देखें और एक भू-स्थानिक मास्टर बनें:
भू-स्थानिक डेटा विज्ञान, डेटा विज्ञान की एक उप-शाखा है, जो स्थानिक एल्गोरिद्म और विश्लेषणात्मक तकनीकों की शक्ति का उपयोग करके भू-स्थानिक डेटा से जानकारी निकालने पर केंद्रित है।
GeoPandas क्या है?⌄
GeoPandas एक ओपन-सोर्स प्रोजेक्ट है जो Python में भू-स्थानिक डेटा के साथ काम करना आसान बनाता है।
pandas और GeoPandas में क्या अंतर है?⌄
GeoPandas, pandas द्वारा उपयोग किए जाने वाले डाटाटाइप्स का विस्तार करता है ताकि ज्यामितीय प्रकारों पर स्थानिक क्रियाएँ संभव हों। GeoPandas, pandas DataFrames का उपयोग करके तथाकथित GeoDataFrame बनाता है।
मैं R प्रोग्रामर के रूप में स्थानिक विश्लेषण कैसे सीख सकता/सकती हूँ?⌄
Python कोर्स के अतिरिक्त, DataCamp के पास R प्रोग्रामर्स के लिए बहुत-से स्थानिक कोर्स और लर्निंग ट्रैक्स भी हैं।
हर दिन उत्पन्न होने वाले डेटा का एक बड़ा हिस्सा स्वभाव से ही स्थान-आधारित होता है। पृथ्वी अवलोकन (Earth Observation) डेटा और GPS डेटा से लेकर हर प्रकार के मानचित्रों में शामिल डेटा तक, स्थानिक डेटा –जिसे कभी-कभी भू-स्थानिक डेटा या भौगोलिक सूचना भी कहा जाता है– वह डेटा है जिसमें हर रिकॉर्ड के साथ एक विशिष्ट स्थान जुड़ा होता है।
हर स्थानिक डेटा बिंदु को एक मानचित्र पर स्थित किया जा सकता है। यह किसी निश्चित कोऑर्डिनेट रेफरेंस सिस्टम का उपयोग करके किया जाता है, जैसे भौगोलिक निर्देशांक, जो ग्लोब पर किसी स्थान को बताने के लिए हम जिन सामान्य अक्षांश-देशांतर (latitude-longitude) युग्मों का उपयोग करते हैं, उन पर आधारित होता है। यह हमें डेटा के बीच स्थानिक संबंधों को देखने की अनुमति देता है।
फिर भी, भू-स्थानिक डेटा की वास्तविक शक्ति डेटा और उनके स्थान को एक साथ जोड़ने में है, जिससे उन्नत विश्लेषण के कई अवसर खुलते हैं। तथाकथित भू-स्थानिक डेटा विज्ञान, डेटा विज्ञान की एक उप-शाखा है, जो स्थानिक एल्गोरिद्म और विश्लेषणात्मक तकनीकों, जैसे मशीन लर्निंग और डीप लर्निंग, की शक्ति का उपयोग करके भू-स्थानिक डेटा से जानकारी निकालने पर केंद्रित है। दूसरे शब्दों में, भू-स्थानिक डेटा विज्ञान हमें यह समझने में मदद करता है कि चीजें कहाँ घटित होती हैं और वे वहाँ क्यों घटित होती हैं।
भू-स्थानिक डेटा विज्ञान के लिए कई उपकरण उपलब्ध हैं। यह ट्यूटोरियल Python में भू-स्थानिक डेटा के साथ काम करने के लिए एक ओपन-सोर्स पैकेज GeoPandas पर केंद्रित होगा।
GeoPandas, pandas –जो Python में डेटा फ्रेम के साथ काम करने का मानक उपकरण है– द्वारा उपयोग किए जाने वाले डाटाटाइप्स का विस्तार करता है, ताकि ज्यामितीय प्रकारों पर स्थानिक क्रियाएं संभव हो सकें। क्योंकि GeoPandas, pandas –तथा matplotlib जैसी अन्य लोकप्रिय डेटा साइंस Python पैकेजों– पर आधारित है, इसलिए Python का उपयोग करने वाले डेटा प्रोफेशनल्स के लिए GeoPandas के सिंटैक्स में दक्ष होना बहुत आसान है।
Python GeoPandas इंस्टॉल करना
Python GeoPandas का उपयोग करने के लिए, आपको पहले इसे किसी भी अन्य Python लाइब्रेरी की तरह इंस्टॉल करना होगा।
यह ध्यान देना महत्वपूर्ण है कि GeoPandas अपनी पूर्ण स्थानिक क्षमताओं के लिए ओपन-सोर्स भू-स्थानिक लाइब्रेरियों के एक स्टैक पर निर्भर करता है, जिनमें shapely, fiona, pyproj, और rtree शामिल हैं। आपको सुनिश्चित करना होगा कि आप ये सभी निर्भरताएँ इंस्टॉल करें, अन्यथा GeoPandas अपेक्षित रूप से काम नहीं कर सकता।
जटिलताओं से बचने के लिए, GeoPandas, conda पैकेज मैनेजर का उपयोग करके लाइब्रेरी इंस्टॉल करने की सिफारिश करता है। इसका मतलब है कि आपको पहले Anaconda इंस्टॉल करना होगा। Anaconda को इंस्टॉल और उपयोग करने पर मार्गदर्शिका के लिए हमारा ट्यूटोरियल देखें।
conda का फायदा यह है कि यह सभी ऑपरेटिंग सिस्टम (Windows, Mac, Linux) के लिए GeoPandas की आवश्यक और वैकल्पिक निर्भरताओं के प्री-बिल्ट बायनरी उपलब्ध कराता है। कमांड लाइन पर GeoPandas इंस्टॉल करने के लिए:
वैकल्पिक रूप से, आप Python के स्टैंडर्ड पैकेज इंस्टॉलर pip का उपयोग करके भी Anaconda इंस्टॉल कर सकते हैं। जैसा कि पहले ही कहा गया है, आपको आवश्यक निर्भरताएँ भी इंस्टॉल करनी होंगी। यदि आप pip से परिचित नहीं हैं, तो हम दृढ़ता से सलाह देते हैं कि आप हमारा पैकेज प्रबंधन के लिए Pip Python ट्यूटोरियल पढ़ें। GeoPandas को pip से इंस्टॉल करने के लिए आपको यह निर्देश चलाना होगा:
किसी भी स्थिति में, यदि GeoPandas को इंस्टॉल करते समय आपको परेशानी होती है, तो अधिक जानकारी के लिए डॉक्यूमेंटेशन देखें।
एक बार जब आपने पैकेज इंस्टॉल कर लिया, तो आप GeoPandas का उपयोग शुरू करने के लिए तैयार हैं। बस इसे अपने Python वातावरण में इम्पोर्ट करें। ध्यान दें कि GeoPandas को gpd उपनाम से इम्पोर्ट करना बहुत आम है।
GeoPandas के साथ बुनियादी क्रियाएँ
इस खंड में, हम वे सबसे बुनियादी क्रियाएँ कवर करेंगे जो आप GeoPandas के साथ कर सकते हैं। ऐसा करते हुए, हम आपको भू-स्थानिक विश्लेषण के कुछ महत्वपूर्ण अवधारणाओं से परिचित कराएँगे, जिनमें स्थानिक डेटा के प्रकार, स्थानिक डेटा फ़ॉर्मेट, और कोऑर्डिनेट रेफरेंस सिस्टम (CRS) शामिल हैं।
स्थानिक डेटा पढ़ना और लिखना
जैसे pandas को pandas डेटा फ्रेम में बदलने के लिए इनपुट डेटा की आवश्यकता होती है, वैसे ही GeoPandas इनपुट (स्थानिक) डेटा पढ़ता है और उसे तथाकथित GeoDataFrame में बदल देता है।
GeoPandas कितने प्रकार की स्थानिक फाइलें पढ़ सकता है, इस पर जाने से पहले, विभिन्न प्रकार के स्थानिक डेटा में भेद करना महत्वपूर्ण है। हम किस प्रकार के डेटा से निपट रहे हैं, यह हमें बताता है कि डेटा का विश्लेषण और फिर दृश्यांकन करने के लिए हमें किन उपकरणों का उपयोग करना चाहिए।
मूल रूप से, स्थानिक डेटा के दो मुख्य प्रकार होते हैं:
स्रोत: Humboldt State University
वेक्टर और रास्टर, दोनों प्रकार का डेटा आम तौर पर गैर-स्थानिक डेटा के साथ आता है, जिसे एट्रिब्यूट भी कहा जाता है। स्थानिक डेटा में स्थान संबंधी जानकारी के साथ किसी भी संख्या में अतिरिक्त एट्रिब्यूट हो सकते हैं। उदाहरण के लिए, किसी स्कूल के स्थान के साथ स्कूल का नाम, छात्रों की संख्या, या पता जुड़ा हो सकता है।
GeoPandas को वेक्टर डेटा के साथ काम करने के लिए डिज़ाइन किया गया है, हालाँकि यह rasterio जैसी अन्य Python पैकेजों के साथ मिलकर रास्टर डेटा को भी संभाल सकता है। स्थानिक डेटा पढ़ने के लिए, GeoPandas में geopandas.read_file() फ़ंक्शन आता है। यह शक्तिशाली फ़ंक्शन अधिकांश प्रचलित वेक्टर-आधारित स्थानिक डेटा को स्वतः पढ़ सकता है।
वेक्टर डेटा के कुछ सबसे सामान्य फ़ॉर्मेट हैं:
निम्नलिखित उदाहरणों में, हम geopandas.read_file() फ़ंक्शन का उपयोग करके GitHub पर होस्टेड एक GeoJSON फाइल पढ़ेंगे, जिसमें बार्सिलोना शहर के विभिन्न जिलों के बारे में भू-स्थानिक डेटा है।
हम एक मिनट में इस डेटासेट पर वापस आएँगे, लेकिन पहले, आपको जानना चाहिए कि GeoDataFrame को वापस किसी फाइल में कैसे लिखा जाए। यह काफी आसान है। आपको स्थानिक डेटा वाली फाइल बनाने के लिए GeoDataFrame.to_file() का उपयोग करना है। डिफ़ॉल्ट रूप से, नए दस्तावेज़ का फ़ॉर्मेट shapefile होगा, लेकिन आप इसे “driver” पैरामीटर से बदल सकते हैं।
उदाहरण के लिए, आप जिले वाले GeoDataFrame को एक geoJSON फाइल में सहेज सकते हैं:
GeoDataFrames का अन्वेषण
आपने देखा होगा कि पिछले सेक्शन में GeoDataFrame पारंपरिक pandas डेटा फ्रेम जैसा दिखता है। यह समानता स्वाभाविक है, क्योंकि GeoDataFrame, pandas.DataFrame का एक सबक्लास है। इसका मतलब है कि यह pandas डेटा फ्रेम की कई विधियाँ और गुण (methods and attributes) विरासत में लेता है। GeoDataFrame में नया यह है कि यह ज्योमेट्री कॉलम (जिन्हें GeoSeries भी कहा जाता है) संग्रहीत कर सकता है और स्थानिक क्रियाएँ कर सकता है।
ज्योमेट्री कॉलम में किसी भी प्रकार का वेक्टर डेटा, जैसे बिंदु, रेखाएँ और बहुभुज, हो सकता है। आगे, यह ध्यान देने योग्य है कि यद्यपि किसी GeoDataFrame में कई GeoSeries हो सकती हैं, केवल एक कॉलम को सक्रिय ज्योमेट्री माना जाता है, अर्थात सभी स्थानिक क्रियाएँ उसी कॉलम पर आधारित होंगी।
स्रोत: GeoPandas
GeoDataFrames की एक और महत्वपूर्ण विशेषता यह है कि हर GeoSeries के साथ संबंधित CRS जानकारी आती है। यह CRS जानकारी GeoPandas को बताती है कि पृथ्वी पर निर्देशांक कहाँ स्थित हैं। यह जानकारी स्थानिक विश्लेषण के लिए अहम है। उदाहरण के लिए, यदि आपको दो स्थानिक डेटासेट्स को मिलाना है, तो आपको सुनिश्चित करना होगा कि वे एक ही CRS में अभिव्यक्त हों। अन्यथा, आपको अपेक्षित परिणाम नहीं मिलेगा।
CRS की दो मुख्य श्रेणियाँ हैं:
CRS के बारे में जानने के लिए और भी बहुत कुछ है, पर यह इस ट्यूटोरियल के दायरे से बाहर है। अतिरिक्त जानकारी और व्यावहारिक उदाहरणों के लिए हमारा Working with Geospatial Data in Python कोर्स एक बेहतरीन संसाधन है।
GeoPandas में, CRS जानकारी crs एट्रिब्यूट में संग्रहीत होती है:
जिला GeoDataFrame भौगोलिक निर्देशांकों (EPSG: 4326) से जुड़ा है, लेकिन हम इसे प्रोजेक्टेड निर्देशांकों में बदलना चाहते हैं, ताकि हम मीटर में कुछ गणनाएँ कर सकें। आइए इसे EPSG:2062 में बदलते हैं, जो स्पेन के लिए मानक प्रोजेक्टेड CRS है। हम इसे Geopandas.to_crs() मेथड से कर सकते हैं।
अब जब हमने सही प्रोजेक्टेड CRS सेट कर लिया है, तो हम GeoDataFrames के एट्रिब्यूट्स का अन्वेषण करने के लिए तैयार हैं।
स्थानिक डेटासेट के एट्रिब्यूट्स का अन्वेषण
GeoPandas, shapely पैकेज से कई उपयोगी मेथड और एट्रिब्यूट्स विरासत में लेता है। हम उनमें से चार को कवर करने जा रहे हैं।
Area
area एट्रिब्यूट किसी ज्योमेट्री का क्षेत्रफल देता है। हम प्राप्त क्षेत्रफल (km2 में परिवर्तित) को एक नए कॉलम में सहेज सकते हैं:
Centroid
centroid एट्रिब्यूट किसी ज्योमेट्री का केंद्र बिंदु देता है। हम इसे अपने डेटासेट में जोड़ सकते हैं, जिससे एक नया ज्योमेट्री कॉलम बन जाएगा।
Boundary
boundary एट्रिब्यूट किसी बहुभुज की सीमा (बाउंड्री) देता है।
Distance
distance मेथड किसी ज्योमेट्री से किसी स्थान तक की न्यूनतम दूरी देता है। मान लीजिए कि हम प्रसिद्ध Sagrada Familia चर्च, जो Eixample जिले में स्थित है, से बार्सिलोना के हर जिले के सेंट्रॉइड तक की दूरी की गणना करना चाहते हैं, और फिर उन दूरियों (किलोमीटर में) को एक नए कॉलम में जोड़ना चाहते हैं।
Sagrada Familia। स्रोत: Wikipedia
सबसे पहले, हमें shapely की Point() फ़ंक्शन का उपयोग करके इच्छित निर्देशांकों के साथ एक बिंदु बनाना होगा (आप इन्हें Google Maps पर आसानी से ढूँढ सकते हैं), उसे सही CRS के साथ GeoSeries में बदलना होगा, और फिर GeoPandas.distance() मेथड का उपयोग करना होगा:
पिछली स्थानिक क्रियाओं के बाद प्राप्त डेटासेट्स इस प्रकार दिखते हैं:
GeoPandas के साथ प्लॉटिंग
हमने जो स्थानिक क्रियाएँ कीं, वे हमारे अध्ययन के लिए उपयोगी अंतर्दृष्टि प्रदान करती हैं। हालाँकि, अपनी ज्योमेट्रियों को स्थान में विज़ुअलाइज़ करना आपके विश्लेषण को बेहतर बनाने का एक शानदार तरीका है। सौभाग्य से, GeoPandas प्लॉट बनाना बेहद आसान है। आपको Python के matplotlib पैकेज पर बने GeoDataFrame.plot() फ़ंक्शन को कॉल करना होता है।
आइए बार्सिलोना के जिलों का एक बुनियादी विज़ुअलाइज़ेशन से शुरू करते हैं।
हम अपने GeoPandas प्लॉट को हर जिले को रंग देकर और अधिक सूचनाप्रद बना सकते हैं। legend को 'True' सेट करने से रंगों की व्याख्या में मदद के लिए एक लीजेंड बनता है।
अंत में, हम अपने मानचित्र में जिलों के सेंट्रॉइड्स और Sagrada Familia जोड़ सकते हैं, साथ ही एक शीर्षक भी। इसी तरह, प्लॉट को और आकर्षक बनाने के लिए, हम contextily पैकेज का उपयोग करके वास्तविक बार्सिलोना शहर का एक टाइल मानचित्र भी जोड़ सकते हैं।
अच्छा है, है ना? सुंदर स्थानिक विज़ुअलाइज़ेशन बनाने के लिए आप और भी बहुत कुछ कर सकते हैं। हमारा Visualizing Spatial Data With Python कोर्स आपके विज़ुअलाइज़ेशन कौशल को अगले स्तर पर ले जाने के लिए एक बेहतरीन संसाधन है।
GeoPandas के साथ स्थानिक संबंध
भू-स्थानिक डेटा के प्रमुख पहलुओं में से एक यह है कि वे स्थान में एक-दूसरे से कैसे संबंधित होते हैं। GeoPandas, pandas और shapely पैकेजों की शक्ति का उपयोग करके स्थानिक डेटासेट्स के बीच हर प्रकार के स्थानिक संबंध कर सकता है। इस खंड में, हम कुछ सबसे सामान्य क्रियाओं को कवर करेंगे।
एट्रिब्यूट जॉइन्स
pandas में डेटासेट्स को संयोजित करने के दो तरीके हैं: एट्रिब्यूट जॉइन और स्पैटियल जॉइन।
एट्रिब्यूट जॉइन हमें गैर-ज्योमेट्री वेरिएबल्स के आधार पर दो GeoDataFrames को जोड़ने देते हैं, ठीक वैसे ही जैसे pandas में एक सामान्य जॉइन। वास्तव में, एट्रिब्यूट जॉइन करने का तरीका स्टैंडर्ड pandas.merge() मेथड के माध्यम से है। यदि आप pandas जॉइन्स के बारे में अधिक जानने में रुचि रखते हैं, तो हमारा pandas में DataFrames जोड़ना ट्यूटोरियल देखें।
उदाहरण के लिए, 2022 में बार्सिलोना की जनसंख्या डेटा से अपने GeoDataFrame को समृद्ध करना दिलचस्प होगा।
स्पैटियल जॉइन्स
इसके विपरीत, स्पैटियल जॉइन दो GeoDataFrames को उनके स्थानिक संबंधों के आधार पर मर्ज करने की अनुमति देते हैं।
उदाहरण के लिए, आइए पहचानें कि बार्सिलोना में साइकिल लेन किन जिलों में स्थित हैं।
GeoPandas में, स्पैटियल जॉइन ऑपरेशन sjoin() फ़ंक्शन के रूप में उपलब्ध है। पहला आर्ग्युमेंट वह GeoDataFrame है जिसमें हम जानकारी जोड़ना चाहते हैं, और दूसरा आर्ग्युमेंट वह GeoDataFrame है जिसमें वह जानकारी है जिसे हम जोड़ना चाहते हैं। फिर, हमें जॉइन के प्रकार को निर्दिष्ट करना होता है। अंत में, “predicate” पैरामीटर GeoPandas को बताता है कि दोनों डेटासेट्स को मिलाने के लिए हम कौन-सा स्थानिक संबंध उपयोग करना चाहते हैं। सबसे सामान्य संबंधों में “intersects”, “contains” और “within” शामिल हैं।
हमारे उदाहरण में, हम “intersects” प्रेडिकेट का उपयोग करेंगे। यदि दो ज्यामितीय ऑब्जेक्ट्स की कोई भी बाउंड्री या आंतरिक बिंदु समान हो, तो वे इंटरसेक्ट करते हैं।
ध्यान दें कि प्राप्त GeoDataFrame में bike_lane GeoDataFrame से अधिक पंक्तियाँ हैं। इसका कारण यह है कि कोई साइकिल लेन एक से अधिक जिलों में स्थित हो सकती है।
अंत में, हम अपने डेटासेट को समूहबद्ध करके जिलों के अनुसार साइकिल लेनों की संख्या प्राप्त कर सकते हैं:
GeoPandas ओवरले ऑपरेशन्स
अंततः, स्थानिक ओवरले आपको दो GeoDataFrames (जिनमें पॉलीगन या मल्टीपॉलीगन ज्योमेट्रियाँ हों) की तुलना करने और स्थानिक संयोजन और विलय की गई विशेषताओं का प्रतिनिधित्व करने वाली नई ज्योमेट्रियों के साथ एक नया GeoDataFrame बनाने की अनुमति देते हैं। नीचे दी गई छवि विभिन्न संभावनाएँ दिखाती है:
स्रोत: GeoPandas
मान लीजिए कि बार्सिलोना सिटी काउंसिल प्रदूषण से निपटने और सामुदायिक कल्याण को बढ़ावा देने के प्रयास में नए स्थानीय पार्क बनाना चाहती है। एक प्रारंभिक विचार यह है कि हर जिले के केंद्र से 500 मीटर के भीतर बड़े, गोल पार्क बनाए जाएँ। हम इसे हर जिले के सेंट्रॉइड के आधार पर बफ़र बनाकर सिम्युलेट कर सकते हैं।
अब, हम कुछ ओवरले ऑपरेशन्स करने के लिए तैयार हैं। उदाहरण के लिए, यदि हम केवल उन जिलों के क्षेत्रों को देखना चाहते हैं जहाँ पार्क स्थित होंगे, तो हम GeoPandas.overlay() मेथड का उपयोग कर सकते हैं:
या, यदि हम वे जिले देखना चाहते हैं जिनमें प्रस्तावित पार्कों द्वारा घेरा गया क्षेत्र शामिल न हो, तो हम “how” पैरामीटर बदलकर कोई अन्य ओवरले ऑपरेशन कर सकते हैं।
निष्कर्ष
हमें उम्मीद है कि आपको यह GeoPandas ट्यूटोरियल पसंद आया होगा। स्थानिक विश्लेषण, डेटा विज्ञान के सबसे रोचक क्षेत्रों में से एक है, जो स्थान-आधारित जानकारी के साथ आपके विश्लेषण को समृद्ध करने के असीम अवसर प्रदान करता है। स्थानिक विश्लेषण के लिए कई उपकरण हैं, लेकिन यदि आप पहले से Python से परिचित हैं, तो GeoPandas शुरुआत करने के लिए एक बेहतरीन जगह है।
क्या आप अपनी भू-स्थानिक शिक्षा जारी रखना चाहते हैं? हमारे पास सब कुछ है! निम्नलिखित सामग्रियाँ देखें और एक भू-स्थानिक मास्टर बनें: