17 KiB
بناء نموذج انحدار باستخدام Scikit-learn: إعداد البيانات وتصويرها
مخطط تصوير البيانات بواسطة Dasani Madipalli
اختبار ما قبل المحاضرة
هذه الدرس متوفر بلغة R!
المقدمة
الآن بعد أن أصبحت مجهزًا بالأدوات اللازمة لبدء بناء نماذج تعلم الآلة باستخدام Scikit-learn، أصبحت جاهزًا لبدء طرح الأسئلة على بياناتك. أثناء العمل مع البيانات وتطبيق حلول تعلم الآلة، من المهم جدًا فهم كيفية طرح السؤال الصحيح لفتح إمكانيات مجموعة البيانات الخاصة بك بشكل صحيح.
في هذا الدرس، ستتعلم:
- كيفية إعداد البيانات لبناء النماذج.
- كيفية استخدام مكتبة Matplotlib لتصوير البيانات.
طرح السؤال الصحيح على بياناتك
السؤال الذي تحتاج إلى الإجابة عليه سيحدد نوع خوارزميات تعلم الآلة التي ستستخدمها. كما أن جودة الإجابة التي تحصل عليها تعتمد بشكل كبير على طبيعة بياناتك.
ألقِ نظرة على البيانات المقدمة لهذا الدرس. يمكنك فتح ملف .csv هذا في VS Code. نظرة سريعة تظهر على الفور وجود فراغات ومزيج من النصوص والبيانات الرقمية. هناك أيضًا عمود غريب يسمى "Package" حيث تكون البيانات مزيجًا بين "sacks"، "bins" وقيم أخرى. البيانات، في الواقع، تبدو فوضوية بعض الشيء.
🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول إعداد البيانات لهذا الدرس.
في الواقع، من غير الشائع أن تحصل على مجموعة بيانات جاهزة تمامًا للاستخدام لإنشاء نموذج تعلم آلي مباشرة. في هذا الدرس، ستتعلم كيفية إعداد مجموعة بيانات خام باستخدام مكتبات Python القياسية. ستتعلم أيضًا تقنيات مختلفة لتصوير البيانات.
دراسة حالة: "سوق القرع"
في هذا المجلد، ستجد ملف .csv في مجلد الجذر data
يسمى US-pumpkins.csv والذي يحتوي على 1757 سطرًا من البيانات حول سوق القرع، مرتبة في مجموعات حسب المدينة. هذه بيانات خام مستخرجة من تقارير السوق القياسية للمحاصيل الخاصة التي توزعها وزارة الزراعة الأمريكية.
إعداد البيانات
هذه البيانات متاحة في المجال العام. يمكن تنزيلها في العديد من الملفات المنفصلة، لكل مدينة، من موقع وزارة الزراعة الأمريكية. لتجنب وجود العديد من الملفات المنفصلة، قمنا بدمج جميع بيانات المدن في جدول بيانات واحد، وبالتالي قمنا بالفعل بإعداد البيانات قليلاً. الآن، دعونا نلقي نظرة أقرب على البيانات.
بيانات القرع - استنتاجات أولية
ماذا تلاحظ حول هذه البيانات؟ لقد رأيت بالفعل أن هناك مزيجًا من النصوص، الأرقام، الفراغات والقيم الغريبة التي تحتاج إلى فهمها.
ما السؤال الذي يمكنك طرحه على هذه البيانات باستخدام تقنية الانحدار؟ ماذا عن "توقع سعر القرع للبيع خلال شهر معين". بالنظر مرة أخرى إلى البيانات، هناك بعض التغييرات التي تحتاج إلى إجرائها لإنشاء هيكل البيانات اللازم لهذه المهمة.
تمرين - تحليل بيانات القرع
لنستخدم Pandas (الاسم اختصار لـ Python Data Analysis
) وهي أداة مفيدة جدًا لتشكيل البيانات، لتحليل وإعداد بيانات القرع.
أولاً، تحقق من التواريخ المفقودة
ستحتاج أولاً إلى اتخاذ خطوات للتحقق من التواريخ المفقودة:
- تحويل التواريخ إلى صيغة شهر (هذه تواريخ أمريكية، لذا الصيغة هي
MM/DD/YYYY
). - استخراج الشهر إلى عمود جديد.
افتح ملف notebook.ipynb في Visual Studio Code واستورد جدول البيانات إلى إطار بيانات جديد باستخدام Pandas.
-
استخدم وظيفة
head()
لعرض أول خمسة صفوف.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ ما الوظيفة التي ستستخدمها لعرض آخر خمسة صفوف؟
-
تحقق مما إذا كانت هناك بيانات مفقودة في إطار البيانات الحالي:
pumpkins.isnull().sum()
هناك بيانات مفقودة، ولكن ربما لن تكون مهمة للمهمة الحالية.
-
لجعل إطار البيانات الخاص بك أسهل للعمل معه، اختر فقط الأعمدة التي تحتاجها، باستخدام وظيفة
loc
التي تستخرج من إطار البيانات الأصلي مجموعة من الصفوف (الممررة كمعامل أول) والأعمدة (الممررة كمعامل ثاني). التعبير:
في الحالة أدناه يعني "جميع الصفوف".columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
ثانيًا، تحديد متوسط سعر القرع
فكر في كيفية تحديد متوسط سعر القرع في شهر معين. ما الأعمدة التي ستختارها لهذه المهمة؟ تلميح: ستحتاج إلى 3 أعمدة.
الحل: خذ متوسط أعمدة Low Price
وHigh Price
لملء عمود السعر الجديد، وحوّل عمود التاريخ ليظهر الشهر فقط. لحسن الحظ، وفقًا للتحقق أعلاه، لا توجد بيانات مفقودة للتواريخ أو الأسعار.
-
لحساب المتوسط، أضف الكود التالي:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ لا تتردد في طباعة أي بيانات ترغب في التحقق منها باستخدام
print(month)
. -
الآن، انسخ البيانات المحولة إلى إطار بيانات جديد باستخدام Pandas:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
طباعة إطار البيانات الخاص بك ستظهر لك مجموعة بيانات نظيفة ومرتبة يمكنك بناء نموذج الانحدار الجديد عليها.
لكن انتظر! هناك شيء غريب هنا
إذا نظرت إلى عمود Package
، يتم بيع القرع في تكوينات مختلفة. بعضها يُباع بمقاييس "1 1/9 bushel"، وبعضها بمقاييس "1/2 bushel"، وبعضها لكل قرع، وبعضها لكل رطل، وبعضها في صناديق كبيرة بأحجام مختلفة.
يبدو أن القرع صعب الوزن بشكل متسق
بالتعمق في البيانات الأصلية، من المثير للاهتمام أن أي شيء يحتوي على Unit of Sale
يساوي "EACH" أو "PER BIN" يحتوي أيضًا على نوع Package
لكل بوصة، لكل صندوق، أو "each". يبدو أن القرع صعب الوزن بشكل متسق، لذا دعونا نقوم بتصفيته عن طريق اختيار فقط القرع الذي يحتوي على النص "bushel" في عمود Package
.
-
أضف فلتر في أعلى الملف، تحت استيراد ملف .csv الأولي:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
إذا قمت بطباعة البيانات الآن، يمكنك رؤية أنك تحصل فقط على حوالي 415 صفًا من البيانات التي تحتوي على القرع حسب البوشل.
لكن انتظر! هناك شيء آخر يجب القيام به
هل لاحظت أن كمية البوشل تختلف حسب الصف؟ تحتاج إلى تطبيع التسعير بحيث تظهر التسعير لكل بوشل، لذا قم ببعض العمليات الحسابية لتوحيدها.
-
أضف هذه الأسطر بعد الكتلة التي تنشئ إطار بيانات new_pumpkins:
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
✅ وفقًا لـ The Spruce Eats، يعتمد وزن البوشل على نوع المنتج، حيث إنه قياس حجم. "يُفترض أن يزن بوشل الطماطم، على سبيل المثال، 56 رطلاً... الأوراق والخضروات تشغل مساحة أكبر بوزن أقل، لذا فإن بوشل السبانخ يزن فقط 20 رطلاً." الأمر معقد جدًا! دعونا لا نزعج أنفسنا بتحويل البوشل إلى رطل، وبدلاً من ذلك نحدد السعر حسب البوشل. كل هذا الدراسة للبوشل من القرع، مع ذلك، تظهر مدى أهمية فهم طبيعة بياناتك!
الآن، يمكنك تحليل التسعير لكل وحدة بناءً على قياس البوشل الخاص بها. إذا قمت بطباعة البيانات مرة أخرى، يمكنك رؤية كيف تم توحيدها.
✅ هل لاحظت أن القرع الذي يُباع بنصف بوشل غالي جدًا؟ هل يمكنك معرفة السبب؟ تلميح: القرع الصغير أغلى بكثير من الكبير، ربما لأن هناك الكثير منه لكل بوشل، بالنظر إلى المساحة غير المستخدمة التي يشغلها قرع كبير مجوف.
استراتيجيات التصوير
جزء من دور عالم البيانات هو توضيح جودة وطبيعة البيانات التي يعمل معها. للقيام بذلك، غالبًا ما يقومون بإنشاء تصورات مثيرة للاهتمام، مثل المخططات، الرسوم البيانية، والخرائط، التي تظهر جوانب مختلفة من البيانات. بهذه الطريقة، يمكنهم عرض العلاقات والفجوات بصريًا التي يصعب اكتشافها بطريقة أخرى.
🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول تصوير البيانات لهذا الدرس.
يمكن أن تساعد التصورات أيضًا في تحديد تقنية تعلم الآلة الأكثر ملاءمة للبيانات. على سبيل المثال، مخطط الانتشار الذي يبدو أنه يتبع خطًا يشير إلى أن البيانات مرشحة جيدة لتمرين الانحدار الخطي.
أحد مكتبات تصوير البيانات التي تعمل جيدًا في دفاتر Jupyter هو Matplotlib (الذي رأيته أيضًا في الدرس السابق).
احصل على المزيد من الخبرة مع تصوير البيانات في هذه الدروس.
تمرين - التجربة مع Matplotlib
حاول إنشاء بعض المخططات الأساسية لعرض إطار البيانات الجديد الذي أنشأته للتو. ماذا سيظهر مخطط خطي أساسي؟
-
استورد Matplotlib في أعلى الملف، تحت استيراد Pandas:
import matplotlib.pyplot as plt
-
أعد تشغيل الدفتر بالكامل للتحديث.
-
في أسفل الدفتر، أضف خلية لرسم البيانات كمربع:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
هل هذا مخطط مفيد؟ هل هناك شيء يفاجئك؟
إنه ليس مفيدًا بشكل خاص حيث إنه يعرض فقط بياناتك كنقاط منتشرة في شهر معين.
اجعلها مفيدة
لجعل المخططات تعرض بيانات مفيدة، عادةً ما تحتاج إلى تجميع البيانات بطريقة ما. دعونا نحاول إنشاء مخطط حيث يظهر المحور y الأشهر وتظهر البيانات توزيع البيانات.
-
أضف خلية لإنشاء مخطط شريطي مجمع:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
هذا تصوير بيانات أكثر فائدة! يبدو أنه يشير إلى أن أعلى سعر للقرع يحدث في سبتمبر وأكتوبر. هل يتوافق ذلك مع توقعاتك؟ لماذا أو لماذا لا؟
🚀تحدي
استكشف الأنواع المختلفة من التصورات التي تقدمها Matplotlib. ما الأنواع الأكثر ملاءمة لمشاكل الانحدار؟
اختبار ما بعد المحاضرة
المراجعة والدراسة الذاتية
ألقِ نظرة على الطرق العديدة لتصوير البيانات. قم بعمل قائمة بالمكتبات المختلفة المتاحة ولاحظ أيها الأفضل لأنواع معينة من المهام، على سبيل المثال التصورات ثنائية الأبعاد مقابل التصورات ثلاثية الأبعاد. ماذا تكتشف؟
الواجب
إخلاء المسؤولية:
تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية Co-op Translator. على الرغم من أننا نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.