استخدام البايثون في تحليل البيانات المكانية

نقوم  بهذه الدرس  بعمل مدخل للبايثون في معالجة البيانات الجغرافية  باستخدام بعض التعليمات الضرورية حيث سأقوم بعرض بعض النقاط  المهمة 

التعرف على بيئة الإدخال  بواسطة المتصفح جوبيتر
قراءة shapefile  ضمن البايثون

اظهار البيانات المخزنة  ضمن الطبقة ونمط البيانات   ورسم الطبقة

طريقة   اختيار عناصر من  الطبقة

ايجاد   تقاطع بين  طبقتين مختلفتين

تصنيف الطبقة   وفق سمة معينة

حفظ   الطبقة  علي جهاز الكمبيوتر خاصتك

تغيير نظام الإسقاط  للطبقة

رسم طبقات  مختلفة معا 

Anaconda

وهي منصة  علمية جاهزة وقابلة للتطوير تعمل لتسهيل مشاركة البيانات مع الآخرين   وتسهل ادارة البيانات واستخدام المكتبات المختلفة  وتوفر بيئة عمل متكاملة لأي مشروع برمجي وتعمل مع  جميع بيئات التشغيل
المختلفة
 حيث  سيتم استخدام المتصفح  جوبيتر وهو تطبيق مفتوح المصدر يتيح   تحرير وتشغيل الكودات البرمجية عبر متصفح الانترنت الخاص بك  ويعطيك قدرت تحكم عالية في كتابة كودك البرمجي حيث هناك سهولة في
الإدخال والتعديل  والعرض وغيرها الكثير من الميزات
تحميل انكوندا

Geopandas

 الحزمة  geopandas  هي حزمة مفتوحة المصدر  للتعامل مع البيانات الجيومكانية  وهي تعتبر توسيع للحزمة pandas

لتستطيع  التعامل مع البيانات الجغرافية   وهي تعتمد على بعض المكتبات الأخرى  مثل matplotlib , fiona

Fiona  تمكن البايثون من  قراءة بيانات نظام المعلومات الجغرافية الطبقات  وانظمة الإسقاط وتتوافق مع كل المكتبات التي يستخدمها البايثون لنظام المعلومات الجغرافية  

قم   بإضافة الحزمة  geopandas من   خلال كتابة الأمر التالي   ضمن anaconda prompt

conda install -c conda-forge geopandas 

نقوم بفتح انكوندا  فتظهر الواجهة البرمجية  كما في الصورة بالاسفل ومن  ثم نقوم بفتح جوبيتر لادخال الكود البرمجي

الكود البرمجي

نقوم   بايضافة   الحزمة Geopandas  ونكتب الامر pd.options.display.max_rows=10 لإظهار عشرة أسطر من الجدول اثناء عرض البيانات الجيومكانية على شكل جداول   

import geopandas  as gpd 
pd.options.display.max_rows=10


نقوم بتحميل طبقة  المدن الهامة في العالم وطبقة  دول العالم اضغط هنا
ونقوم بتحميل الطبقات

تحميل طبقة ضمن البايثون


#تحميل الطبقات 
Martin =gpd.read_file('C:\\Users\\marte\\Downloads\\Compressed\\ne_10m_admin_0_countries_2\\ne_10m_admin_0_countries.shp')
City=gpd.read_file('C:\\Users\\marte\\Downloads\\Compressed\\ne_10m_populated_places\\ne_10m_populated_places.shp')

رسم الطبقة

تتيح   المكتبة  geopandas استخدام   matplotlib لصنع الخرائط  والاخراج بواسطة التعليمة  Polt

#  رسم طبقة 
Martin.plot()
City.plot()

اختيار عناصر من الطبقة

نقوم   باختيار دول شمال أفريقيا  ودول الشرق الاوسط ,كذلك سوريا والمغرب  الامثلة التالية تبين الاختيار بطرق مختلفة

#   اختيار عنصر من طبقة    
arab_country=Martin[Martin['REGION_WB']=='Middle East & North Africa']

Syria=Martin[Martin['ADMIN']=='Syria']

maroco=countries[countries['NAME_NL'].str.contains('Marokko')]

maroco.plot()
arab_country.plot()

عرض بيانات الطبقة ونمط البيانات

عن طريق التعليمة head  
نحصل على جدول  يحتوي على معلومات الطبقة بالإضافة إلى عمود للعناصر الجيومترية



City.head()


نحصل علي نمط البيانات من خلال التعليمة type



North_Africa.type
arab_country.type


لاختيار عواميد محدد من الطبقة   
حيث سأقوم  بعمل طبقة تحتوي علي الاسم  والقيم الهندسية


# اختيار   عواميد محددة  من  الحدول 
countries = arab_country[['geometry', 'NAME_NL']]
countries

التقاطع بين طبقتين

نقوم  باختيار المدن العربية التي تقع بالشرق الاوسط  وشمال افريقيا باستخدام التعليمة sjoin

#   اختيار  النقاط التي تقع ضمن المضلع 

arabcity=gpd.sjoin(City,arab_country,op='within')

#cities_with_country = geopandas.sjoin(cities, countries, how="inner", op='intersects')

تصنيف الطبقة وفق لسمة معينة

نقوم    بتصنيف الطبقة   وفق ل عمود معين من الصفات  ونستطيع التحكم بالألوان المستخدمة  واضافة دليل للتصنيف وعدد التصنيفات  والتحكم بالألوان والعرض في المثال التالي سأقوم فقط  بتصنيف الدول حسب الاسم لتظهر كل دولة بلون مختلف

 
#تصنيف  الطبقة وفق  عمود  محدد
arab_country.plot(column='ADMIN', figsize=(11,11))
 

تحويل نظام الاسقاط

نقوم باظهار العناصر الجيومترية لمدينة دمشق وهي عبارة عن الاحداثيات

Damascus=arabcity[arabcity['NAME_left']=='Damascus']
Damascus.geometry
area
0.0    POINT (36.29805003041707 33.50197985420613)
Name: geometry, dtype: object

نقوم   بتحويل طبقة   المدن العربية  إلى نظام الإسقاط  ميركاتور باستخدام الامر{ ‘crs = {‘init’ :’epsg:3857


arabcity.crs = {'init' :'epsg:3857'}
arabcity.crs
 

اعادة تسمية عمود السمات ضمن الطبقة

نقوم بإعادة تسمية العمود NAME_NL’   إلى الاسم Martin

#  اعادة  تسمية احد عواميد   الطبقة 
countries2 = countries.rename(columns={'NAME_NL':'martin'})
countries2.head()

حفظ الطبقة

نقوم بحفظ طبقة  المدن العربية على  شكل ملف json ضمن ال directory   


# حفظ طبقة 
arabcity.to_file('utput.json')

نقوم    بكتابة pwd    لمعرفة مسار الحفظ

رسم الطبقات معا

نقوم برسم  طبقة المدن وطبقة الدول العربية  معا ونقوم برسم المدن باللون الاحمر والبلدان باللون الاسود والتعبئة بلا لون ونقوم بضبط الامتداد  من خلال ax.set(xlim=(-16,65),ylim=(10,45))

#رسم عدة طبقات  معا 
ax=arab_country.plot(edgecolor='k',facecolor='none',figsize=(13,13))
arabcity.plot(ax=ax,color='red')
ax.set(xlim=(-16,65),ylim=(10,45))

في دروس لاحقة سيتم تنفيذ مشاريع كاملة باستخدام البايثون

كاتب المقال Martin Ealya