أساسيات تحليل ورسم البيانات – تطبيق عملي على العقار

الجمعة 03 ربيع الثاني 1444ھ الجمعة 28 أكتوبر 2022م
فيسبوك
تويتر
واتساب
تيليجرام
لينكدإن
المحتوى

مقدمة

إن البيانات اليوم تمثل ثروة نستطيع من خلالها الوصول إلى قرارات حاسمة ومهمة لنجاح المشاريع والأعمال. بل إن البعض يصف البيانات بالنفط الجديد من حيث الأهمية والثروة. ولكن مثل ما أن النفط ترتفع قيمته بعد معالجته وتصفيته، كذلك الحال في البيانات عندما يتم معالجتها وتحليلها. ونحن كعلماء أو محللي بيانات، علينا مهمة أخذ البيانات وتمثيلها بطريقة سلسة وواضحة، يستطيع من خلالها المختص وغير المختص فهم ماذا حصل وماذا تمثل هذه البيانات.

بمعنى آخر، إن من أجل صناعة القرار بناءً على البيانات، لابد من فهم البيانات بوضوح، ومجرد النظر إلى أرقام مخزنة في جداول لن يعطينا نظرة شاملة تجعلنا نفهم تمام ماذا حصل. و من أجل تبسيط البيانات وفهم معناها بطريقة شاملة، نقوم بترجمة البيانات من خلال رسمها برسوم بيانية. فرسم البيانات يعتبر إحدى الركائز في مهمة تحليل البيانات من أجل استنباط فوائد ملموسة واستنتاجات منطقية، حيث أن الرسم يسهل علينا معرفة ماذا حصل، وماهي الأنماط الي تشكلت، وهل هناك قيم متطرفة أم لا.

أهداف الدرس

ماهي البيانات المستخدمة؟

لنفترض أنك محلل بيانات في شركة استثمارات عقارية، وقد طلب منك تحليل سوق العقار السعودي في بداية عام 2022. مهمتك هي الحصول على البيانات الملائمة ووضعها في رسوم بيانية سهلة الاستيعاب كي تساعد مجلس الإدارة في أخذ القرارات الصحيحة. موقع البيانات السعودية المفتوحة يقدم بيانات عقارية مفتوحة المصدر (أي متاحة للاستخدام بشكل مجاني)، وهي تمثل الصفقات العقارية التي تمت في السعودية في عام 2022 من شهر يناير إلى منتصف شهر إبريل، وهي أيضا إطار البيانات المستخدم في هذا الدرس.

بعد الدخول على الرابط ستجد البيانات في صيغ مختلفة مثل السي اس في والإكسل. قم بتحميل صيغة السي اس في CSV.

ماذا نريد أن نفعل؟

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

الخطوة الأولى: استدعاء المكتبات اللازمة

Step One: Import Necessary Libraries
				
					import pandas as pd              # For dataframe manipulation - لإجراء التعديلات اللازمة على البيانات
import numpy as np               # For specifying ranges in plots - لتحديد المدى في الرسمات
import matplotlib.pyplot as plt  # For plotting 1 - المكتبة الأولى للرسم
import seaborn as sns            # For plotting 2 - المكتبة الثانية للرسم
				
			

الخطوة الثانية: فحص البيانات

Step Two: Inspect Data
				
					df = pd.read_csv('realestate.csv') # Read the CSV file - قم بقراءة ملف السي اس في
df.head()
				
			
رقم مرجعيالمنطقةالمدينةالحيالمخططرقم القطعةالتاريختصنيف العقارنوع العقارعدد العقاراتالسعر (ر.س)المساحةسعر المتر المربع
0
16074562
منطقة الرياض
الافلاج
حي/الخالدية
مخطط/349
قطعة 255
2/1/2022
سكني
قطعة أرض
1
70000
820.53
85.3107
1
16077290
منطقة الرياض
البجاديه
حي/11 بالدخل المحدود غرب البجادية
مخطط/أخرى
قطعة 448
2/1/2022
سكني
قطعة أرض
1
10000
625.00
16.0000
2
16077316
منطقة الرياض
الخرج
حي/60حى اليرموك مخطط 1009 الجزء الثانى
مخطط/أخرى
قطعة 1063
2/1/2022
سكني
قطعة أرض
1
100000
624.07
160.2384
3
16073025
منطقة الرياض
الخرج
حي/68 حى اليرموك مخطط 1009/ 2
مخطط/أخرى
قطعة 1222
2/1/2022
تجاري
قطعة أرض
1
110000
581.05
189.3124
4
16069867
منطقة الرياض
الخرج
حي/827 حى هجرة الصاع
مخطط/أخرى
قطعة 1071
2/1/2022
سكني
قطعة أرض
1
40000
630.00
63.4920
001234
رقم مرجعي
16074562
16077290
16077316
16073025
16069867
المنطقة
منطقة الرياض
منطقة الرياض
منطقة الرياض
منطقة الرياض
منطقة الرياض
المدينة
الافلاج
البجاديه
الخرج
الخرج
الخرج
الحي
حي/الخالدية
حي/11 بالدخل المحدود غرب البجادية
حي/60حى اليرموك مخطط 1009 الجزء الثانى
حي/68 حى اليرموك مخطط 1009/ 2
حي/827 حى هجرة الصاع
المخطط
مخطط/349
مخطط/أخرى
مخطط/أخرى
مخطط/أخرى
مخطط/أخرى
رقم القطعة
قطعة 255
قطعة 448
قطعة 1063
قطعة 1222
قطعة 1071
التاريخ
2/1/2022
2/1/2022
2/1/2022
2/1/2022
2/1/2022
تصنيف العقار
سكني
سكني
سكني
تجاري
سكني
نوع العقار
قطعة أرض
قطعة أرض
قطعة أرض
قطعة أرض
قطعة أرض
عدد العقارات
1
1
1
1
1
السعر بالريال السعودي
70000
10000
100000
110000
40000
المساحة
820.53
625.00
624.07
581.05
630.00
سعر المتر المربع
85.3107
16.0000
160.2384
189.3124
63.4920
				
					# Let us check the columns' names in the dataframe - فلنتحقق من أسماء الأعمدة في إطار البيانات المستخدم
df.columns
				
			
Index(['رقم مرجعي', 'المنطقة', 'المدينة', 'الحي', 'المخطط', 'رقم القطعة',
       'التاريخ', 'تصنيف العقار', 'نوع العقار', 'عدد العقارات',
       'السعر بالريال السعودي', 'المساحة ', 'سعر المتر المربع'],
      dtype='object')

كما هو واضح أمامنا، إن جميع أسماء المزايا (الأعمدة) المستخدمة في إطار البيانات مسمى باللغة العربية. ومن أجل سهولة تحليل ورسم البيانات، يستحسن تحويل الأسماء والبيانات من اللغة العربية إلى الإنجليزية

الخطوة الثالثة: ترجمة أسماء الأعمدة إلى اللغة الإنجليزية

Step Three: Translate Columns Names to English
				
					# Firstly, we rename columns names - أولا، سنقوم بإعادة تسمية أسماء الأعمدة
df = df.rename(columns={'رقم مرجعي':'Reference_Num','المنطقة':'State','المدينة':'City',
                         'الحي':'District','المخطط':'Area','رقم القطعة':'Land_Number',
                         'التاريخ':'Date','تصنيف العقار':'Category','نوع العقار':'Type',
                         'عدد العقارات':'Num_of_Properties','السعر بالريال السعودي':'Price_SAR',
                         'المساحة ':'Land_Area','سعر المتر المربع':'SM_Price'})

# Let us check the new columns names - فلنقم بالتحقق من الأسماء الجديدة
df.head(2)
				
			
Reference_NumStateCityDistrictAreaLand_NumberDateCategoryTypeNum_of_PropertiesPrice_SARLand_AreaSM_Price
0
16074562
منطقة الرياض
الافلاج
حي/الخالدية
مخطط/349
قطعة 255
2/1/2022
سكني
قطعة أرض
1
70000
820.53
85.3107
1
16077290
منطقة الرياض
البجاديه
حي/11 بالدخل المحدود غرب البجادية
مخطط/أخرى
قطعة 448
2/1/2022
سكني
قطعة أرض
1
10000
625.00
16.0000
01
Reference_Num
16074562
16077290
State
منطقة الرياض
منطقة الرياض
City
الافلاج
البجاديه
District
حي/الخالدية
حي/11 بالدخل المحدود غرب البجادية
Area
مخطط/349
مخطط/أخرى
Land_Number
قطعة 255
قطعة 448
Date
2/1/2022
2/1/2022
Category
سكني
سكني
Type
قطعة أرض
قطعة أرض
Num_of_Properties
1
1
Price_SAR
70000
10000
Land_Area
820.53
625.00
SM_Price
85.3107
16.0000

الخطوة الرابعة: التخلص من الأعمدة الغير مهمة

Step Four: Drop Unnecessary Columns

نحن كمحللي بيانات. نعلم أن كل عمود يمثل صفة (فيتشر - Feature) معينة في جدول البيانات. وإنه من الطبيعي أن تختلف أهمية كل عمود عن الآخر. فبحسب الهدف من تحليل البيانات، يمكننا تحديد ماهي الأعمدة التي نحتاج إليها. وإن محلل البيانات الماهر يتخلص من الأعمدة التي لا حاجة لها من أجل الحفاظ على الذاكرة وسلاسة التحليل.

				
					# We will drop 5 columns as follows - سنقوم بإزالة ٥ أعمدة كالتالي
df = df.drop(['Reference_Num','District','Area','Land_Number','Num_of_Properties'],axis = 1)
df.head()
				
			
StateCityDateCategoryTypePrice_SARLand_AreaSM_Price
0
منطقة الرياض
الافلاج
1/2/2022
سكني
قطعة أرض
70000
820.53
85.3107
1
منطقة الرياض
البجاديه
1/2/2022
سكني
قطعة أرض
10000
625.00
16.0000
2
منطقة الرياض
الخرج
1/2/2022
سكني
قطعة أرض
100000
624.07
160.2384
3
منطقة الرياض
الخرج
1/2/2022
تجاري
قطعة أرض
110000
581.05
189.3124
4
منطقة الرياض
الخرج
1/2/2022
سكني
قطعة أرض
40000
630.00
63.4920
01234
State
منطقة الرياض
منطقة الرياض
منطقة الرياض
منطقة الرياض
منطقة الرياض
City
الافلاج
البجاديه
الخرج
الخرج
الخرج
Date
1/2/2022
1/2/2022
1/2/2022
1/2/2022
1/2/2022
Category
سكني
سكني
سكني
تجاري
سكني
Type
قطعة أرض
قطعة أرض
قطعة أرض
قطعة أرض
قطعة أرض
Price_SAR
70000
10000
100000
110000
40000
Land_Area
820.53
625.00
624.07
581.05
630.00
SM_Price
85.3107
16.0000
160.2384
189.3124
63.4920

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

الخطوة الخامسة: ترجمة البيانات إلى اللغة الإنجليزية

Step Five: Translate Data to English

قمنا بالسابق بترجمة أسماء الأعمدة، والآن سوف نقوم بترجمة البيانات داخل الأعمدة. نحن نقوم بترجمة البيانات لأن مكتبتي الرسم المستخدمة في الرسم لا تدعم اللغة العربية جيدًا. ولذلك، بما أن الترجمة لا تستغرق وقت كثيرا منا في عملية معالجة البيانات. سنقوم بالترجمة من أجل سهولة استخدام مكتبتي الرسم matplotlib و seaborn

				
					# We will use 'unique' code to identify the 'unique' entities in each column
# سوف نقوم باستخدام كود 'يونيك' من إجل معرفة العناصر المميزة في كل عمود والتي تحتاج إلى ترجمة

display(df.State.unique())
print('Number of unique entities in "State" column is', len(df.State.unique()))
print('--------')

display(df.Category.unique())
print('Number of unique entities in "Category" column is', len(df.Category.unique()))
print('--------')

display(df.Type.unique())
print('Number of unique entities in "Type" column is', len(df.Type.unique()))
print('--------')

display(df.City.unique())
print('Number of unique entities in "City" column is', len(df.City.unique()))
				
			
⦿ العناصر التي تحتاج إلى ترجمة في عمود المنطقة هو ١٣ عنصر
13 entities in 'State' column
⦿ العناصر التي تحتاج إلى ترجمة في عمود تصنيف العقار هو ٤ عناصر
4 entities in 'Category' column
⦿ العناصر التي تحتاج إلى ترجمة في عمود النوع هو ١٠ عناصر
10 entities in 'Type' column
⦿ العناصر التي تحتاج إلى ترجمة في عمود المدينة هو ١٠٦ عنصر
106 entities in 'City' column

بناءً على ما وجدنا. سنقوم بترجمة ثلاث أعمدة، وهي المنطقة، تصنيف العقار، والنوع. ولن نقوم بترجمة عمود المدينة لحفظ الوقت. ولكن سنعود لاحقا إلى عمود المدينة وسنتعامل معه بطريقة أخرى.

				
					# We translate by using the following method - نقوم بالترجمة بالطريقة التالية 

## First we use .loc to locate the cells which include the state name, then we replace them with the new value
## نقوم أولا بتحديد مكان الخلايا التي تحتوي على اسم المنطقة باللغة العربية، ثم نقوم باستبدالها باسمها الإنجليزي

df.loc[df['State']=='منطقة المدينة المنورة','State'] = 'Al-Madinah'
df.loc[df['State']=='منطقة مكة المكرمة','State'] = 'Makkah'
df.loc[df['State']=='منطقة الرياض','State'] = 'Riyadh'
df.loc[df['State']=='منطقة تبوك','State'] = 'Tabuk'
df.loc[df['State']=='منطقة عسير','State'] = 'Aseer'
df.loc[df['State']=='المنطقة الشرقية','State'] = 'Estern'
df.loc[df['State']=='منطقة القصيم','State'] = 'Al-Qassim'
df.loc[df['State']=='منطقة جازان','State'] = 'Jazan'
df.loc[df['State']=='منطقة الحدود الشمالية','State'] = 'Northern Borders'
df.loc[df['State']=='منطقة حائل','State'] = 'Hail'
df.loc[df['State']=='منطقة الجوف','State'] = 'Al-Jowf'
df.loc[df['State']=='منطقة الباحة','State'] = 'Al-Bahah'
df.loc[df['State']=='منطقة نجران','State'] = 'Najran'

# Then we use .unique to check if the all entities has been translated successfully.
# سوف نقوم بالتحقق أن جميع عناصر عمود "المنطقة" (ستيت) قد تمت ترجمته بنجاح

df.State.unique()
				
			
array(['Riyadh', 'Makkah', 'Al-Madinah', 'Al-Qassim', 'Estern', 'Aseer',
       'Tabuk', 'Hail', 'Northern Borders', 'Jazan', 'Najran', 'Al-Bahah',
       'Al-Jowf'], dtype=object)
				
					# We do the same process with Category column - نقوم بنفس الخطوات مع عمود التصنيف

df.loc[df['Category']=='سكني','Category'] = 'Residential'
df.loc[df['Category']=='تجاري','Category'] = 'Commercial'
df.loc[df['Category']=='زراعي','Category'] = 'Agricultural'
df.loc[df['Category']=='صناعي','Category'] = 'Industrial'
display(df.Category.unique())

# And we do the same process with Type column - نقوم بنفس الخطوات مع عمود النوع

df.loc[df['Type'] =='مرفق','Type'] = 'annex house'
df.loc[df['Type'] =='فيلا','Type'] = 'villa'
df.loc[df['Type'] =='معرض/محل','Type'] = 'showroom/store'
df.loc[df['Type'] =='شقة','Type'] = 'apartment'
df.loc[df['Type'] =='بيت','Type'] = 'house'
df.loc[df['Type'] =='أرض زراعية','Type'] = 'agricultural land'
df.loc[df['Type'] =='قطعة أرض','Type'] = 'empty land'
df.loc[df['Type'] =='عمارة','Type'] = 'building'
df.loc[df['Type'] =='مركز تجاري','Type'] = 'shopping mall'
df.loc[df['Type'] =='إستراحة','Type'] = 'resort'

display(df.Type.unique())
				
			
				
					# Now, we pull 10 random rows to check our df - الآن نقوم بسحب عشرة أعمدة بشكل عشوائي من أجل التحقق من إطار البيانات الحالي
df.sample(10)
				
			
StateCityDateCategoryTypePrice_SARLand_AreaSM_Price
22049
Makkah
الطائف
2/24/2022
Commercial
empty land
500000
1168.53
427.8880
30733
Hail
حائل
3/6/2022
Residential
empty land
240000
400.00
600.0000
35651
Riyadh
الخرج
3/13/2022
Residential
empty land
450000
369.00
1219.5121
26971
Riyadh
الرياض
3/2/2022
Residential
empty land
1400000
500.00
2800.0000
40111
Najran
نجران
3/17/2022
Residential
empty land
20000
640.00
31.2500
43464
Riyadh
الدرعيه
3/23/2022
Agricultural
agricultural land
700000
10000.00
70.0000
20905
Makkah
جده
2/23/2022
Agricultural
apartment
990000
208.90
4739.1096
3227
Al-Qassim
بريده
2/3/2022
Residential
empty land
119048
400.00
297.6200
53602
Al-Madinah
وادي الفرع
4/5/2022
Residential
empty land
50000
939.68
53.2096
18348
Aseer
خميس مشيط
2/20/2022
Residential
empty land
850000
505.00
1683.1683

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

Step Six: EDA Analysis via Plotting

أولا: فلنقم بالتحقق من عدد المبيعات بالنسبة للمناطق في السعودية. حيث أن كل صف في إطار البيانات يمثل عملية بيع/شراء لقطعة عقار في السعودية.

				
					# We will use value_counts method to count the occurance of a state. 
# سنقوم باستخدام كود (فاليو كاونتس) من أجل عد عدد المرات التي ذكرت فيه منطقة معينة
df.State.value_counts()

				
			
Riyadh              21592
Makkah              13592
Estern               7217
Al-Qassim            6351
Al-Madinah           2586
Aseer                2202
Hail                 1778
Tabuk                 973
Al-Jowf               933
Jazan                 903
Najran                710
Northern Borders      684
Al-Bahah              325
Name: State, dtype: int64

نلاحظ التالي: تم بيع 21,592 عقار في الرياض خلال المدة الزمنية (شهر يناير إلى منتصف شهر إبريل) وهي المنطقة الأكثر مبيعا. يليها بالمرتبة الثانية منطقة مكة المكرمة بـــ 13,592 عقار وهكذا. نستطيع تمثيل العلاقة بين المناطق بالنسبة لعدد مرات بيع العقار عن طريق استخدام شريط الرسم البياني (بار شارت) كالتالي:

				
					 # First we difne a proper size for the figure - أولا نقوم بتعريف حجم مناسب للرسمة
plt.figure(figsize=(14,8))

# We add .plot(kind = 'bar') to plot the bars - نقول بتحويل البيانات إلى رسمة عن طريق الكود .بلوت
df.State.value_counts().plot(kind = 'bar', color = 'navy')

# We specify labels and ticks as follows - نقوم بحديد العنوانين للرسمة كالتالي
plt.title('Real Estate Sales per State (2022 - January to mid April)', fontsize=14) # Figure label - عنوان الرسمة
plt.xlabel('State', fontsize=14) # X-axis label - عنوان خط س
plt.ylabel('Number of Sales', fontsize=14) # Y-axis label - عنوان خط ص
plt.yticks(np.arange(0, 23000, 1000)) # Y-axis range - تحديد مدى خط ص
plt.show() # To show the plot - لإظهار الرسمة
				
			

لاحظ كيف أن تحويلنا للبيانات من مجرد أرقام إلى رسوم بيانية سهل علينا فهم ماذا حصل، حيث أن تمثيل عدد المبيعات خلال الفترة الزمنية بالنسبة للمنطقة عن طريق الأعمدة وضّح لنا ماهي المناطق الأكثر مبيعا، وماهي الأقل، وأصبح من السهل جدا المقارنة بين منطقتين في المملكة العربية السعودية.

ثانيا: سوف نقوم بعمل نفس الرسمة بالنسبة لعمودي النوع والصنف، ولكن هذه المرة سوف نجمعهم برسمة واحدة عن طريق استخدام كود (subplot)

				
					plt.figure(figsize=(16,8))# Figure size - حجم الرسمة
plt.subplot(2,2,1) # initiate box 1 - نقوم بتهيئة الصندوق الأول 
df.Category.value_counts().plot(kind = 'bar', color = 'teal') # Plot in the 1st box - نقوم بالرسم بالصندوق الأول
plt.title('Category')
plt.ylabel('Number of Sales')

plt.subplot(2,2,2) # Initiate box 2 - نقوم بتهيئة الصندوق الثاني
df.Type.value_counts().plot(kind = 'bar', color = 'indigo') # Plot in the 2nd box - نقوم بالرسم بالصندوق الثاني
plt.title('Type')
plt.ylabel('Number of Sales');
				
			

لقد قمنا بدمج رسمتين سويا في هذه الصورة. حيث أن الصورة الأولى توضح عدد المبيعات بالنسبة لتصنيف العقار(Category)، والرسمة الثانية تبين نوع العقار المباع (Type). نلاحظ من الرسمة الأولى أن صنف العقار السكني هو الأكثر مبيعا، يليه التجاري ثم الزراعي ,وأخيرا وبأعداد محدودة جدًا العقار الصناعي. ومن الناحية الأخرى، فإن نوع العقار المباع في أغلب الأحيان هو قطع أرض لم يتم البناء عليها بَعد، ثم يليها بالمرتبة الثانية نوع الشقة، وأقل نوع هو نوع الاستراحات.

ثالثا: ماهي أكثر المدن التي تمت فيها عمليات البيع؟

تذكر أننا في السابق وجدنا أنه هناك ١٠٦ مدينة تم بيع عقار فيها خلال المدة الزمنية. إن ترجمة ١٠٦ اسم مدينة يستغرق جهدا طويلا، بل إن وضعهم جميعا في رسمة واحدة قد يجعل الرسمة غير واضحة المعالم وغير مفهومة. ولذلك، نحن سوف نقوم بأخذ أعلى خمس مدن فقط وتمثيلها برسم بياني كالتالي:

				
					df.City.value_counts().head() # To find out the top 5 cities - لإيجاد أعلى خمس مدن تم بيع العقار فيها 
				
			
الرياض             13621
جده                 8255
بريده               4067
مكة المكرمة         2891
المدينة المنورة     2003
Name: City, dtype: int64
				
					# Now we create two lists, the first list encompasses cities names, the second list contains number of sales
# الآن سوف نقوم بعمل قائمتين، القائمة الآولى تحتوي على اسم المدن، والثانية تحتوي على أعداد عمليات البيع

Cities = ['Riyadh','Jeddah','Buraidah','Makkah','Medina']
Sales = [13621,8255,4067,2891,2003]

# This time, we will plot the pie plot to show the percentages of each city
# في هذه المرة، سنقوم برسم رسمة (الباي)من أجل إظهار نسبة كل مدينة من المدن
plt.figure(figsize =(12, 8))
plt.pie(Sales, labels = Cities, autopct =' %1.1f%%', startangle=90)
plt.title('Top 5 Cities 2022 - January to mid April')
plt.show()
				
			

لاحظ كيف أن الرسمة الدائرية مناسبة لمقارنة النسب بين أعلى خمس مدن في المملكة العربية السعودية.

رابعا: تحليل أسعار العقار

نلاحظ في إطار البيانات الموجود لدينا. أن هناك عمود يمثل سعر المتر المربع والمسمى بـــ SM_Price.

إن هذا العمود محط اهتمام لدينا، حيث أنه من خلاله، نستطيع معرفة طبيعة الأسعار في المناطق أو المدن كالتالي:

				
					# We will use 'describe' code to find out the measures of central tendency
# نقوم باستخدام كود 'ديسكرايب' لاكتشاف كيفية توزيع القيم في العمود
df.SM_Price.describe()
				
			
count     59846.000000
mean       1302.610391
std        2185.538330
min           0.010000
25%         207.429475
50%         646.106700
75%        1600.000000
max      139854.706400
Name: SM_Price, dtype: float64

نلاحظ من النتيجة التي ظهرت لدينا ما يلي: أنه في المملكة العربية السعودية تمت 59,846 عملية بيع للعقار خلال الفترة الزمنية، ومتوسط السعر للمتر المربع هو 1,302.61 ريالا سعودي. وقد كانت أعلى قيمة للمتر المربع بــــ 139,854 ريالا سعوديا. إن هذه القيمة الكبيرة جدًا أمر مثير للاهتمام، فلنرى في أي منطقة تمت عملية البيع هذه.

				
					df[df.SM_Price==df.SM_Price.max()]

				
			
State
City
Date
Category
Type
Price_SAR
Land_Area
SM_Price
50865
Makkah
مكة المكرمة
3/31/2022
Residential
empty land
180000000
1287.05
139854.7064

لقد وجدنا أن العقار الذي بيع بأعلى قيمة للمتر المربع في الفترة الزمنية كان في منطقة مكة المكرمة في تاريخ 31/3/2022.

وأخيرا، فلنقم برسم توزيع بياني (هيستوجرام - Histogram) من أجل رؤية كيفية توزيع قيمة المتر المربع في المملكة العربية السعودية باستخدام الكود التالي:

				
					sns.displot(df.SM_Price,bins = np.arange(0,2500,50))
plt.title('Real Estate - Square Meter Price Distribution - 2022 January to mid April');
				
			

خطوة إضافية: متوسط سعر العقار في منطقة الرياض

Bonus Step: Average SM_Price in Riyadh State

لقد وجدنا متوسط سعر المتر المربع للعقار في المملكة العربية السعودية. ولكن ماذا لو أردنا معرفة المتوسط في منطقة الرياض فقط، وللنوع التجاري دون السكني أو الزراعي أو الصناعي؟ في الحقيقة نستطيع تصفية إطار البيانات (فلترة) من أجل الحصول على القيمة المطلوبة عن طريق التالي:

				
					Riyadh_df = df[df.State=='Riyadh'] # We filter Riyadh state only - نقوم بأخذ صفوف منطقة الرياض فقط
Riyadh_Commercial = Riyadh_df[Riyadh_df.Category =='Commercial'] # Filter commercial only - نأخذ صفوف العقار التجاري فقط
display(Riyadh_Commercial.sample(3))
print('Average SM_Price for commercial estates in Riyadh state is',round(Riyadh_Commercial.SM_Price.mean(),2), 'SAR')
				
			
State
City
Date
Category
Type
Price_SAR
Land_Area
SM_Price
28283
Riyadh
الرياض
3/3/2022
Commercial
empty land
2670478
4768.71
560.0000
17462
Riyadh
الخرج
2/20/2022
Commercial
empty land
200000
660.00
303.0303
37700
Riyadh
رماح
3/15/2022
Commercial
empty land
1198654
810.00
1479.8197

ماذا تعلمنا؟

نشرة فهم البريدية
لتبقى على اطلاع دائم على كل ما هو جديد مما تقدمه منصة فهم، انضم لنشرتنا البريدية.
طالب ماجستير في علم البيانات، جامعة مالايا - كوالا لامبور ماليزيا. بكالوريوس في الهندسة الكهربائية من الجامعة الإسلامية - المدينة المنورة السعودية. باحث في مجال تطوير أنظمة الطاقة المتجددة باستخدام علم البيانات وإنترنت الأشياء.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *