मुख्य सामग्री पर जाएं
Python

डेटा वैज्ञानिकों के लिए जियोकोडिंग: उदाहरणों के साथ एक परिचय

इस ट्यूटोरियल में, आप Geopy का उपयोग करके किसी पते को अक्षांश और देशांतर में बदलने के तीन अलग-अलग तरीके सीखेंगे।
Eugenia Anello's photo
Eugenia Anello
अपडेट किया गया · 9 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

अपना निःशुल्क खाता बनाएँ

अभ्यास और ट्रैक अपनी प्रगति को।

Google के साथ जारी रखें
जारी रखने पर, आप हमारी उपयोग की शर्तें, हमारी गोपनीयता नीति को स्वीकार करते हैं और यह भी कि आपका डेटा संयुक्त राज्य अमेरिका में संग्रहीत किया जाता है।

जब आप वास्तविक दुनिया के डेटा के साथ काम करते हैं, तो आप यह मानकर नहीं चल सकते कि डेटासेट में आपके डेटा साइंस प्रोजेक्ट को हल करने के लिए आवश्यक सभी अनिवार्य जानकारी मौजूद है। ज़्यादातर समय आपके पास आंशिक जानकारी होती है और आपको डेटा को अतिरिक्त विशेषताओं के साथ समृद्ध करना होता है।

ऐसा हो सकता है कि डेटासेट में पता तो हो, लेकिन साथ ही अक्षांश और देशांतर गायब हों। ऐसे में समृद्धिकरण का पहला कदम इस निर्देशांक-युग्म को जोड़ना है। पते को अक्षांश और देशांतर में बदलने की इस प्रक्रिया को हम जियोकोडिंग कहते हैं।

जियोकोडिंग रियल एस्टेट, वित्त और लॉजिस्टिक्स जैसे कई क्षेत्रों में बहुत महत्वपूर्ण है। इस तकनीक के बिना, आप डेटा का मानचित्र पर विश्लेषण और विज़ुअलाइज़ेशन नहीं कर सकते। इस ट्यूटोरियल में, हम Python में Geopy नामक एक जीवनरक्षक लाइब्रेरी की मदद से जियोकोडिंग करेंगे। आइए शुरू करें!

जियोकोडिंग क्या है?

जियोकोडिंग एक प्रक्रिया है जिसमें पतों (जैसे "1600 Amphitheatre Parkway, Mountain View, CA") को भौगोलिक निर्देशांकों (जैसे अक्षांश 37.423021 और देशांतर -122.083739) में बदला जाता है, जिनका उपयोग आप मानचित्र पर मार्कर लगाने या मानचित्र को स्थिति देने के लिए कर सकते हैं। सरल शब्दों में, यह किसी भौतिक पते के वर्णन को पृथ्वी की सतह पर एक स्थान में बदलने की संगणकीय प्रक्रिया है।

जियोकोडिंग की प्रक्रिया में अक्सर किसी मानचित्र की भौगोलिक सीमाओं के भीतर सड़कों या पार्सलों जैसी स्थानिक अवस्थाओं का इंटरपोलेशन शामिल होता है। प्राप्त स्थान संख्यात्मक निर्देशांकों के रूप में आउटपुट होते हैं, जो स्थानिक विश्लेषण या मानचित्र विज़ुअलाइज़ेशन में उपयोग के लिए उपयुक्त होते हैं।

किसी पते को भौगोलिक स्थान में बदलने के लिए जियोकोडिंग विभिन्न डेटा स्रोतों का उपयोग करती है। प्राथमिक स्रोत एक स्ट्रीट रेफरेंस डेटाबेस होता है, जिसमें किसी विशेष काउंटी या क्षेत्र के भीतर सड़क के नाम और पते की रेंज शामिल होती हैं। अन्य स्रोतों में पोस्टल कोड डेटाबेस, नगर-नाम डेटाबेस, और महत्वपूर्ण स्थानों (जैसे पार्क या स्थलों) के डेटाबेस शामिल हैं।

जियोकोडिंग केवल किसी दिए गए पते के लिए निर्देशांक प्राप्त करने तक सीमित नहीं है। इसका उपयोग स्थानिक विश्लेषण, डेटा माइनिंग और डेटा क्लीनसिंग में भी होता है। उदाहरण के लिए, व्यवसाय जियोकोडिंग का उपयोग जनसांख्यिकीय जानकारी का विश्लेषण करने के लिए करते हैं ताकि लक्षित मार्केटिंग अभियानों को संचालित किया जा सके या डिलीवरी मार्गों का अनुकूलन किया जा सके। सार्वजनिक सुरक्षा के क्षेत्र में, जियोकोडिंग का उपयोग आपातकालीन घटनाओं के स्थानों को मैप करने के लिए किया जाता है ताकि निकटतम आपातकालीन सेवाओं को शीघ्रता से भेजा जा सके।

डेटा साइंस के संदर्भ में, जियोकोडिंग भू-स्थानिक विज़ुअलाइज़ेशन बनाने की प्रक्रिया का एक महत्वपूर्ण चरण है और इसका उपयोग रियल एस्टेट मूल्य पूर्वानुमान, डिलीवरी मार्ग अनुकूलन और आपदा प्रतिक्रिया योजना जैसी विभिन्न अनुप्रयोगों में किया जा सकता है।

Geopy क्या है?

लेखक द्वारा चित्रण

Geopy एक ओपन-सोर्स Python लाइब्रेरी है जो Google Maps, Open StreeMap और ArcGIS जैसे विशाल विविधता वाले जियोकोडिंग सेवाओं के माध्यम से डेटा में लोकेशन जोड़ने में विशेषज्ञ है।

आप सोच सकते हैं कि Python लाइब्रेरी के बजाय सीधे जियोकोड सेवा का उपयोग क्यों न करें। Geopy की खूबी यह है कि आप कुछ ही लाइनों के कोड से इन जियोकोडिंग सेवाओं का लाभ उठा सकते हैं। सच में, Geopy ने प्रत्येक सेवा के लिए एक क्लास लागू की है, और आप आसानी से एक सेवा की API से दूसरी में स्विच कर सकते हैं।

हैंड्स-ऑन जियोकोडिंग प्रोजेक्ट उदाहरण

इस लेख में, हम Kaggle के Canada Museum डेटासेट का विश्लेषण करेंगे। यह कनाडा में स्थित संग्रहालयों के बारे में जानकारी देता है। संग्रहालयों का यह संकलन, उदाहरण के लिए, टोरंटो में Airbnb आवास की कीमत का पूर्वानुमान लगाने में उपयोगी हो सकता है; आपने देखा होगा कि किसी लिस्टिंग का किराया रुचि के बिंदुओं, जैसे संग्रहालय, रेस्तरां, कैफे आदि, के जितना नज़दीक होता है, उतना बढ़ जाता है।

आइए डेटासेट पर नज़र डालते हैं:

import pandas as pd
import geopy

l_cols= ['Name','Street Address','City','State','Zipcode']
df = pd.read_csv('/kaggle/input/canada-museums/museums list CAN.csv', encoding = "ISO-8859-1",usecols=l_cols)
df = df[df.City=='Toronto']
df.head()

डेटासेट

इस अवलोकन से हम देख सकते हैं कि अलग-अलग कॉलम पता-संबंधी जानकारी देते हैं, जैसे संग्रहालय का नाम, सड़क का पता, शहर, राज्य और ज़िप कोड।

अगले चरणों के लिए, हमें एक अद्वितीय कॉलम चाहिए जो इन सभी कॉलमों की जानकारी को मर्ज कर दे। हम यह कैसे कर सकते हैं? दो से अधिक कॉलमों को जोड़ने का सबसे कुशल तरीका pandas.series.str.cat() का उपयोग करना है, जो हमें एक कॉलम और दूसरे के बीच मनचाहा सेपरेटर निर्दिष्ट करने की अनुमति देता है:

df['Country'] = 'Canada'
l_cols_concat = ['Street Address','City','State','Zipcode','Country']
df['unique_address'] = df['Name'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
df.head()

अद्वितीय पते वाला डेटासेट

हम एक स्ट्रिंग वेरिएबल ‘address1’ बना सकते हैं जिसमें पहली पंक्ति का अद्वितीय पता हो:

address1 = df['unique_address'].iloc[0]
print(address1)
# Bizune Event Gallery,452 Richmond St W,Toronto,ON,M5V 1Y1,Canada

हम अगले चरणों में इसे एकल पते पर विभिन्न जियोकोडिंग सेवाओं के साथ प्रयोग करने के लिए उपयोग करेंगे। एक बार यह स्पष्ट हो जाए कि Geopy लोकेशन कैसे निकालता है, तो इसे pandas डेटा फ्रेम के पूरे कॉलम तक बढ़ाया जा सकता है। हम निम्नलिखित प्रमुख प्रदाताओं को आज़माएंगे:

  • Google Maps
  • OpenStreetMap
  • ArcGIS

Google Maps API के साथ जियोकोडिंग

पतों को निर्देशांकों में बदलने का सबसे लोकप्रिय तरीका Google Maps API का उपयोग करना है।

हालाँकि Google Maps सशुल्क सेवाएँ प्रदान करता है, लेकिन पहली बार खाता बनाने पर यह आपको $200 के निःशुल्क क्रेडिट देता है।

सेवा तक पहुँचने के लिए, आपको Google Maps Platform पर नया खाता बनाना होगा। API कुंजी जनरेट करने में मदद करने वाला एक बढ़िया ट्यूटोरियल उपलब्ध है।

GM_API_KEY = 'your_api_key'
from geopy.geocoders import GoogleV3
geolocator = GoogleV3(api_key=GM_API_KEY)

GoogleV3 Google Maps v3 API का उपयोग करने के लिए लागू की गई क्लास है। पहले, हम एकल पते से लोकेशन निकालकर देख सकते हैं:

location = geolocator.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image5.png

इसके बाद हम इस ऑपरेशन को उस unique_address फ़ील्ड तक बढ़ाने की कोशिश कर सकते हैं जिसे हमने पहले बनाया था।

def service_geocode(g_locator, address):
    location = g_locator.geocode(address)
    if location!=None:
      return (location.latitude, location.longitude)
    else:
      return np.NaN

हम apply() का उपयोग करके इस फ़ंक्शन को unique_address की सभी पंक्तियों पर लागू कर सकते हैं:

df['LAT_LON'] = df['unique_address'].apply(lambda x:service_geocode(geolocator,x))
df[['unique_address','LAT_LON']].head()

image3.png

OpenStreetMap API के साथ जियोकोडिंग

चूँकि OpenStreetMap सबसे बड़ा और संपादन-योग्य निःशुल्क भौगोलिक डेटाबेस और प्रोजेक्ट है, इसकी API निःशुल्क है। एकल पते को जियोलोकेट करने के लिए, आपको API कुंजी के बजाय Nominatim क्लास में अपने OSM खाते का ईमेल इनपुट के रूप में देना होता है:

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="your_email")
location = geolocator.geocode(address1)
print(location)
# None

दुर्भाग्य से, OpenStreetMap API द्वारा लौटाई गई लोकेशन None है क्योंकि यह पते को पहचान नहीं पाती।

वास्तव में, इस API को डेटासेट में अधिकांश सड़क पतों को लोकेट करने में दिक्कत आती है क्योंकि सभी क्षेत्रों में इसका पता कवरेज अच्छा नहीं है।

इसी कारण, हमें कम जानकारी वाला एक और फ़ील्ड unique_address_osm बनाना होगा:

l_cols_concat = ['City','State','Country']
df['unique_address_osm'] = df['Street Address'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
address1_osm = df['unique_address_osm'].iloc[0]

इसके बाद, हम नए पते को पास करते हैं और सड़क पते से फिर से अक्षांश और देशांतर निकालने की कोशिश करते हैं:

address1_osm = df['unique_address_osm'].iloc[0]
location = geolocator.geocode(address1_osm)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image8.png

पहले की तरह, हम service_geocode() फ़ंक्शन को पूरे unique_address_osm कॉलम पर लागू करते हैं:

df['LAT_LON_osm'] = df['unique_address_osm'].apply(lambda x: service_geocode(geolocator,x))
df[['unique_address_osm','LAT_LON','LAT_LON_osm']].head()

image11.png

हालाँकि हमने संग्रहालय का नाम निर्दिष्ट नहीं किया, OpenStreetMap GoogleMapsAPI के बहुत समान निर्देशांक लौटाता है।

ArcGIS API के साथ जियोकोडिंग

ArcGIS ऐसा सॉफ़्टवेयर है जो भू-स्थानिक डेटा का विश्लेषण और विज़ुअलाइज़ेशन सक्षम करता है। यह Google Maps और OpenStreetMap की तरह लोकेशन सेवाएँ भी प्रदान करता है।

from geopy.geocoders import ArcGIS
geolocator_arcgis = ArcGIS()
location = geolocator_arcgis.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image2.png

इस बार निर्देशांक-युग्म प्राप्त करने में कोई समस्या नहीं है। हम इस ऑपरेशन को सभी पतों तक बढ़ाने की प्रक्रिया जारी रख सकते हैं:

df['LAT_LON_arcgis'] = df['unique_address'].apply(lambda x: service_geocode(geolocator_arcgis,x))
df[['unique_address','LAT_LON','LAT_LON_osm','LAT_LON_arcgis']].head()

image6.png

डेटासेट की पहली पंक्तियों पर नज़र डालते हुए, हम देख सकते हैं कि ArcGIS से प्राप्त निर्देशांक-युग्म पहले प्राप्त किए गए के समान हैं, केवल थोड़ा सा अंतर है।

दो स्थानों के बीच दूरी मापें

Geopy की एक अन्य कार्यक्षमता यह है कि यह हमें दो बिंदुओं के बीच दूरी की गणना करने देता है। यह दो युग्मों (अक्षांश, देशांतर) के बीच प्राप्त भू-देशांतर दूरी का उपयोग करके संभव है।

from geopy.distance import geodesic
point1 = df.LAT_LON_arcgis.iloc[0]
point2 = df.LAT_LON_arcgis.iloc[1]
distance = geodesic(point1, point2)
print('The distance between {} and {} is {} meters'.format(df.Name.iloc[0],df.Name.iloc[1],distance.meters))

image1.png

इन दो संग्रहालयों के बीच की दूरी लगभग 2 किलोमीटर है।

समापन विचार

बस इतना ही! आपने Geopy का उपयोग करके पते को अक्षांश और देशांतर में बदलने के तीन अलग-अलग तरीके सीख लिए हैं। यह अधिक जटिल और उन्नत भू-स्थानिक डेटा विश्लेषण के लिए एक शुरुआती बिंदु है।

यदि आप बिना कोड के भू-स्थानिक विश्लेषण शुरू करने में रुचि रखते हैं, तो सबसे अच्छा तरीका DataCamp के Working with Geospatial Data: A Guide to Analysis in Power BI ट्यूटोरियल पर नज़र डालना है।

और अधिक उन्नत विज़ुअलाइज़ेशन और कैलकुलेशन बनाने के लिए, Tableau आपके लिए एक उत्तम टूल हो सकता है। DataCamp का यह Introduction to Tableau कोर्स आपको डायनेमिक डेटा विज़ुअलाइज़ेशन बनाने और किसी भी विश्लेषणात्मक समस्या को हल करने में सक्षम करेगा।

यदि आप R भाषा के प्रशंसक हैं, तो यह शानदार कोर्स leaflet के साथ इंटरैक्टिव मानचित्र बनाने के लिए है। यदि आप Python के प्रति निष्ठावान हैं, तो Visualizing geospatial data in Python लेने पर विचार करें, जो आपको geopandas और folium का उपयोग करके बेहतरीन विज़ुअलाइज़ेशन बनाने में मदद करता है।


Eugenia Anello's photo
Author
Eugenia Anello
LinkedIn

डेटा वैज्ञानिक - CRIF

विषय
Python

इस ट्यूटोरियल में उल्लिखित विषय सीखें!

कोर्स

Python में Geospatial Data के साथ काम करना

4 घंटा
18.3K
यह पाठ्यक्रम आपको दिखाएगा कि अपने Python डेटा विज्ञान वर्कफ़्लो में स्थानिक डेटा को कैसे एकीकृत करें।
विवरण देखेंपाठ्यक्रम शुरू करें

अपना निःशुल्क खाता बनाएँ

अभ्यास और ट्रैक अपनी प्रगति को।

Google के साथ जारी रखें
जारी रखने पर, आप हमारी उपयोग की शर्तें, हमारी गोपनीयता नीति को स्वीकार करते हैं और यह भी कि आपका डेटा संयुक्त राज्य अमेरिका में संग्रहीत किया जाता है।
और देखें