في هذا المقال سوف نستعرض كيفية تصوير البيانات على مستوى مناطق المملكة، وذلك من خلال بيانات السكان SA_population وكذلك من خلال البيانات الجغرافية للمناطق SA_regions. سوف نتبع الخطوات التالية:
اولاً: تحميل المكتبات المطلوبة
In:
import folium
import pandas as pd
import geopandas as gpd
ثانياً: تحميل بيانات السكان والبيانات الجغرافية للمناطق
In: SA_population = pd.read_csv('media/SA_population.csv',encoding='utf8') print(SA_population.head(2)) Out: الجنسية المحافظة المدينة المنطقة النوع السكان 0 سعودي ميسان (القان) ابوضروه مكة المكرمة أنثى 8 1 سعودي ميسان (القان) ابوضروه مكة المكرمة ذكر 9
In: SA_regions=gpd.read_file('media/SA_regions.json') SA_regions.rename(columns={"name": "المنطقة"}, inplace=True) print(SA_regions.head(2)) Out: المنطقة geometry 0 القصيم POLYGON ((41.23742 25.47977, 41.24561 25.47945... 1 الرياض POLYGON ((41.97361 23.85194, 41.97388 23.81028...
ثالثاً: تهيئة البيانات السكانية
من خلال تجميع عدد السكان على مستوى المناطق وكذلك إضافة عمود نسبة سكان كل منطقة من العدد الإجمالي
In: Regions_population=SA_population.groupby(['المنطقة'], as_index=False)['السكان'].sum() Regions_population["النسبة"] = round((Regions_population['السكان'] / Regions_population['السكان'].sum()) * 100) print(Regions_population.head(2)) Out: المنطقة السكان النسبة 0 الباحة 339174 1.0 1 الجوف 595822 2.0
رابعاً: دمج بيانات السكان والبيانات الجغرافية للمناطق لتسهيل عملية تصويرها
In: SA_regions_pop=SA_regions.merge(Regions_population,on="المنطقة") print(SA_regions_pop.head(2)) Out: المنطقة geometry النسبة السكان 0 القصيم POLYGON ((41.23742 25.47977, 41.24561 25.47945... 1336179 4.0 1 الرياض POLYGON ((41.97361 23.85194, 41.97388 23.81028... 8591748 27.0
خامساً: تصوير البيانات على الخريطة
In:
SA_map = folium.Map(location=[23,45], zoom_start=5, tiles="Stamen Watercolor")
bins = list(SA_regions_pop['النسبة'].quantile([0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]))
choropleth = folium.Choropleth(
geo_data=SA_regions_pop,
name='choropleth',
data=SA_regions_pop,
columns=['المنطقة', 'النسبة'],
key_on='feature.properties.المنطقة',
fill_color='YlGn',
fill_opacity=0.7,
line_opacity=0.3,
legend_name='التوزيع النسبي للسكان على مستوى المناطق',
bins=bins,
reset=True
).add_to(SA_map)
style_function = "font-size: 15px; font-weight: bold"
choropleth.geojson.add_child(
folium.features.GeoJsonTooltip(['المنطقة','السكان','النسبة'], style=style_function, labels=True))
SA_map
ملاحظة:
من خلال خيار (tiles) يمكن التحكم في عرض واجهة الخريطة ومميزاتتها بما يتناسب مع الأغراض المختلفة كما في الكود أدناه:
folium.TileLayer('Stamen Terrain').add_to(SA_map) folium.TileLayer('Stamen Toner').add_to(SA_map) folium.TileLayer('Stamen Water Color').add_to(SA_map) folium.TileLayer('cartodbpositron').add_to(SA_map) folium.TileLayer('cartodbdark_matter').add_to(SA_map) folium.LayerControl().add_to(SA_map) SA_map
المصادر:
بيانات السكان – الهيئة العامة للاحصاء
البيانات الجغرافية للمناطق – github.com