مقدمة ودية لتحليل البيانات في بايثون

على مر السنين ، نما استخدام Python لعلوم البيانات بشكل لا يصدق ويستمر في النمو يوميًا.

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

ما هو تحليل البيانات؟

تحليل البيانات هو تنقية وتحويل كمية كبيرة من البيانات غير المنظمة أو غير المنظمة ، بهدف توليد رؤى ومعلومات أساسية حول هذه البيانات والتي من شأنها أن تساعد في اتخاذ قرارات مستنيرة.

هناك العديد من الأدوات المستخدمة لتحليل البيانات ، Python ، Microsoft Excel ، Tableau ، SaS ، إلخ ولكن في هذه المقالة ، سنركز على كيفية إجراء تحليل البيانات في Python. وبشكل أكثر تحديدًا ، كيف يتم ذلك باستخدام مكتبة بيثون تسمى الباندا.

ما هو الباندا؟

Pandas هي مكتبة Python مفتوحة المصدر تُستخدم لمعالجة البيانات والجدل. إنه سريع وفعال للغاية ويحتوي على أدوات لتحميل أنواع عديدة من البيانات في الذاكرة. يمكن استخدامه لإعادة تشكيل أو تسمية شريحة أو فهرسة أو حتى تجميع عدة أشكال من البيانات.

هياكل البيانات في الباندا

توجد 3 هياكل بيانات في Pandas ، وهي ؛

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

السلسلة عبارة عن مصفوفة أحادية البعد

كومة من عدة سلاسل تجعل DataFrame ثنائي الأبعاد

تكدس من عدة DataFrames يجعل لوحة ثلاثية الأبعاد

هيكل البيانات الذي سنعمل معه أكثر من غيره هو إطار البيانات ثنائي الأبعاد والذي يمكن أن يكون أيضًا الوسيلة الافتراضية للتمثيل لبعض مجموعات البيانات التي قد نواجهها.

تحليل البيانات في الباندا

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

الآن ، توجه إلى https://colab.research.google.com/notebooks/intro.ipynb. يجب أن ترى أدناه.

في الجزء العلوي الأيسر من التنقل ، انقر فوق خيار الملف وانقر على خيار “دفتر ملاحظات جديد”. سترى صفحة دفتر ملاحظات Jupyter جديدة يتم تحميلها في متصفحك. أول شيء يتعين علينا القيام به هو استيراد الباندا إلى بيئة العمل لدينا. يمكننا القيام بذلك عن طريق تشغيل الكود التالي ؛

import pandas as pd

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

  6 أفضل خادم استضافة GMod للجميع

يمكننا القيام بذلك باستخدام الكود التالي في خلية جديدة ؛

df =  pd.read_csv('https://firebasestorage.googleapis.com/v0/b/ai6-portfolio-abeokuta.appspot.com/o/kc_house_data.csv?alt=media &token=6a5ab32c-3cac-42b3-b534-4dbd0e4bdbc0 ', sep=',')

يتم استخدام .read_csv عندما نريد قراءة ملف CSV وقمنا بتمرير خاصية sep لإظهار أن ملف CSV محدد بفواصل.

يجب أن نلاحظ أيضًا أن ملف CSV الذي تم تحميله يتم تخزينه في متغير df.

لا نحتاج إلى استخدام وظيفة print () في Jupyter Notebook. يمكننا ببساطة كتابة اسم متغير في خليتنا وسيقوم Jupyter Notebook بطباعته لنا.

يمكننا تجربة ذلك عن طريق كتابة df في خلية جديدة وتشغيلها ، وسوف تطبع جميع البيانات الموجودة في مجموعة البيانات الخاصة بنا كإطار بيانات لنا.

لكننا لا نريد دائمًا رؤية جميع البيانات ، في بعض الأحيان نريد فقط رؤية البيانات القليلة الأولى وأسماء الأعمدة الخاصة بها. يمكننا استخدام الدالة df.head () لطباعة الأعمدة الخمسة الأولى و df.tail () لطباعة آخر خمسة أعمدة. سيبدو ناتج أي من الاثنين على هذا النحو ؛

نود التحقق من العلاقات بين صفوف وأعمدة البيانات المتعددة هذه. وظيفة .describe () تفعل هذا بالضبط بالنسبة لنا.

يعطي تشغيل df.describe () الإخراج التالي ؛

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

يمكننا أيضًا التحقق من شكل 2D DataFrame لمعرفة عدد الصفوف والأعمدة الموجودة فيه. يمكننا القيام بذلك باستخدام df.shape الذي يقوم بإرجاع مجموعة في التنسيق (صفوف ، أعمدة).

يمكننا أيضًا التحقق من أسماء جميع الأعمدة في DataFrame باستخدام df.columns.

ماذا لو أردنا تحديد عمود واحد فقط وإرجاع جميع البيانات الموجودة فيه؟ يتم ذلك بطريقة مشابهة لتقطيع القاموس. اكتب الكود التالي في خلية جديدة وقم بتشغيله

df['price ']

يُرجع الكود أعلاه عمود السعر ، ويمكننا المضي قدمًا بحفظه في متغير جديد على هذا النحو

price = df['price']

الآن يمكننا تنفيذ كل إجراء آخر يمكن تنفيذه على DataFrame على متغير السعر لدينا نظرًا لأنه مجرد مجموعة فرعية من DataFrame الفعلي. يمكننا القيام بأشياء مثل df.head () و df.shape وما إلى ذلك ..

يمكننا أيضًا تحديد أعمدة متعددة عن طريق تمرير قائمة بأسماء الأعمدة إلى df على هذا النحو

data = df[['price ', 'bedrooms']]

يحدد ما سبق أعمدة بأسماء “السعر” و “غرف النوم” ، إذا كتبنا data.head () في خلية جديدة ، فسيكون لدينا ما يلي

  كيفية حظر رسائل البريد الإلكتروني من مرسلين محددين في Microsoft Outlook

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

df.iloc[50: , 3]

الذي يُعيد العمود الثالث من الصف 50 حتى النهاية. إنه أنيق جدًا وهو تمامًا مثل قوائم التقطيع في Python.

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

ماذا لو أردنا الحصول على جميع المنازل بنفس عدد غرف النوم وإيجاد متوسط ​​سعر كل غرفة نوم منفصلة؟ من السهل نسبيًا القيام بذلك في حيوانات الباندا ، ويمكن القيام بذلك على هذا النحو ؛

df.groupby('bedrooms ')['price '].mean()

تقوم المجموعة الأولى المذكورة أعلاه بتجميع DataFrame بواسطة مجموعات البيانات مع رقم غرفة نوم متطابق باستخدام وظيفة df.groupby () ، ثم نخبرها أن تعطينا عمود غرفة النوم فقط ونستخدم الدالة .mean () للعثور على متوسط ​​كل منزل في مجموعة البيانات .

ماذا لو أردنا تصور ما ورد أعلاه؟ نود أن نكون قادرين على التحقق من كيفية اختلاف متوسط ​​السعر لكل رقم غرفة نوم مميز؟ نحتاج فقط إلى ربط الكود السابق بوظيفة .plot () على هذا النحو ؛

df.groupby('bedrooms ')['price '].mean().plot()

سيكون لدينا ناتج يبدو على هذا النحو ؛

ما ورد أعلاه يوضح لنا بعض الاتجاهات في البيانات. على المحور الأفقي ، لدينا عدد مميز من غرف النوم (لاحظ أن أكثر من منزل يمكن أن يحتوي على عدد X من غرف النوم) ، على المحور الرأسي ، لدينا متوسط ​​الأسعار فيما يتعلق بعدد غرف النوم المقابل على المستوى الأفقي محور. يمكننا الآن أن نلاحظ على الفور أن المنازل التي تحتوي على ما بين 5 إلى 10 غرف نوم تكلف أكثر بكثير من المنازل المكونة من 3 غرف نوم. سيتضح أيضًا أن المنازل التي تحتوي على حوالي 7 أو 8 غرف نوم تكلف أكثر بكثير من تلك التي تحتوي على 15 أو 20 أو حتى 30 غرفة.

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

بيانات مفقودة

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

  كيفية تشغيل جهاز الكمبيوتر الخاص بك تلقائيًا على جدول

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

تزودنا Pandas بوظيفة للعثور على القيم المفقودة في DataFrame تسمى isnull ().

يمكن استخدام وظيفة isnull () على هذا النحو ؛

df.isnull()

يؤدي هذا إلى إرجاع DataFrame من العناصر المنطقية التي تخبرنا ما إذا كانت البيانات الموجودة أصلاً مفقودة حقًا أو مفقودة بشكل خاطئ. سيبدو الإخراج على هذا النحو ؛

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

لملء جميع القيم المفقودة في DataFrame ، نستخدم وظيفة .fillna () المستخدمة على هذا النحو ؛

df.fillna(0)

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

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

يمكن العثور على جميع الأمثلة في هذه المقالة هنا.

لمعرفة المزيد من التفاصيل ، تحقق من دورة تحليل البيانات باستخدام Python و Pandas عبر الإنترنت.