خطوتك الأولى في علوم البيانات. تيتانيك

مقدمة صغيرة


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

حسنًا ، هل أنت مستعد؟ يجب أن أقول على الفور أنه سيكون عليك معرفة Python 3 ، لأنني سأستخدمه هنا. كما أنصحك بالتثبيت المسبق على Jupyter Notebook أو معرفة كيفية استخدام google colab.

الخطوةالاولى


صورة

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

سنأخذ مهمتنا من هناك. يطلق عليه ذلك: "تيتانيك". الشرط هو: توقع بقاء كل فرد على قيد الحياة. بشكل عام ، فإن مهمة الشخص المشارك في DS هي جمع البيانات ومعالجتها وتدريب النموذج والتنبؤ وما إلى ذلك. في kaggle ، يُسمح لنا بتخطي مرحلة جمع البيانات - يتم تقديمها على النظام الأساسي. نحتاج إلى تنزيلها ويمكنك البدء!

يمكنك القيام بذلك على النحو التالي:

في علامة التبويب البيانات هي الملفات التي تحتوي على البيانات التي تم

صورة

صورة

تنزيلها البيانات ، أعدت دفاتر Jupyter و ...

الخطوة الثانية


كيف ننزل هذه البيانات الآن؟

أولاً ، نقوم باستيراد المكتبات اللازمة:

import pandas as pd
import numpy as np

سيسمح لنا Pandas بتنزيل ملفات csv. لمزيد من المعالجة.

Numpy مطلوب لتقديم جدول بياناتنا كمصفوفة بأرقام.
استمر. خذ ملف train.csv وقم بتحميله لنا:

dataset = pd.read_csv('train.csv')

سنشير إلى نموذج بيانات train.csv من خلال متغير مجموعة البيانات. دعونا نلقي نظرة على ما هو موجود هناك:

dataset.head()

صورة

تتيح لنا وظيفة head () عرض الأسطر القليلة الأولى من إطار البيانات.

الأعمدة التي نجت هي مجرد نتائجنا ، والمعروفة في إطار البيانات هذا. فيما يتعلق بمسألة المشكلة ، نحتاج إلى التنبؤ بعمود Survived لبيانات test.csv. تخزن هذه البيانات معلومات حول الركاب الآخرين في Titanic ، الذين نحن ، صناع القرار ، لا ندرك النتائج.

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

على سبيل المثال ، لدينا مجموعة بيانات من هذا القبيل:

"قامت Vova بتدريس علوم الكمبيوتر - لا.
تلقت فوفا في علوم الكمبيوتر 2. "

يعتمد التقييم في علوم الكمبيوتر على إجابة السؤال: هل قامت فوفا بتدريس علوم الكمبيوتر؟ هل هذا واضح؟ الانتقال ، نحن أقرب إلى الهدف!

المتغير التقليدي للبيانات المستقلة هو X.

نقوم بما يلي:

X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]

ما هذا؟ باستخدام الدالة iloc [:، 2:] ، نقول للبايثون: أريد أن أرى في المتغير X البيانات التي تبدأ من العمود الثاني (بشكل شامل وشريطة أن يبدأ العد من الصفر). في الصف الثاني نقول إننا نريد أن نرى في بيانات العمود الأول.

[a: b، c: d] هو بناء لما نستخدمه بين قوسين. إذا لم تحدد أي متغيرات ، فسوف تظل الافتراضية. أي أنه يمكننا تحديد [:،: d] وبعد ذلك سندخل في إطار البيانات جميع الأعمدة ، باستثناء الأعمدة التي تبدأ ، بدءًا من الرقم d وما بعده. المتغيرات a و b تحدد السلاسل ، لكننا جميعًا نحتاجها ، لذلك نترك هذا الافتراضي.

دعونا نرى ما حدث:

X.head()

صورة

y.head()

صورة

من أجل تبسيط هذا الدرس الصغير ، سنقوم بإزالة الأعمدة التي تتطلب "رعاية" خاصة ، أو لا تؤثر على البقاء على الإطلاق. تحتوي على بيانات من نوع str.

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)

ممتاز! ننتقل إلى الخطوة التالية.

الخطوة الثالثة


نحتاج هنا إلى ترميز بياناتنا حتى يفهم الجهاز بشكل أفضل كيف تؤثر هذه البيانات على النتيجة. لكننا لن نقوم بترميز كل شيء ، ولكن فقط بيانات نوع str التي تركناها. عمود "الجنس". كيف نريد التشفير؟ تخيل بيانات الجنس البشري عن طريق الناقل: 10 - ذكر ، 01 - أنثى.

للبدء ، سنترجم جداولنا إلى مصفوفة NumPy:

X = np.array(X)
y = np.array(y)

والآن ننظر إلى:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X = np.array(ct.fit_transform(X))

مكتبة sklearn هي مكتبة رائعة تسمح لنا بالقيام بالعمل الكامل في Data Science. يحتوي على عدد كبير من نماذج التعلم الآلي المثيرة للاهتمام ، ويسمح لنا أيضًا بإعداد البيانات.

سيتيح لنا OneHotEncoder ترميز جنس الشخص في هذا التمثيل ، كما وصفنا. سيتم إنشاء فصلين دراسيين: ذكور وإناث. إذا كان الشخص رجلاً ، فسيتم كتابة 1 في العمود "ذكر" و 0 على التوالي.

بعد OneHotEncoder () ، يكلف [1] - وهذا يعني أننا نريد ترميز العمود رقم 1 (العد من البداية).

ممتاز. ننتقل إلى أبعد من ذلك!

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

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)

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

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])

الآن تبدو بياناتنا كما يلي:

صورة

Class. نحن بالفعل قريبون من هدفنا!

الخطوة الرابعة


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

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)

توضح دالة الملاءمة الثعبان: دع النموذج يبحث عن التبعيات بين X و y.

أقل من ثانية والنموذج جاهز.

صورة

كيفية تطبيقه؟ سنرى الآن!

الخطوة الخامسة استنتاج


نحتاج الآن إلى تحميل الجدول ببيانات الاختبار الخاصة بنا ، والتي نحتاج إلى إجراء تنبؤ لها. باستخدام هذا الجدول ، سنقوم بكل الإجراءات نفسها التي قمنا بها لـ X.

X_test = pd.read_csv('test.csv', index_col=0)

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X_test.drop(count, inplace=True, axis=1)

X_test = np.array(X_test)

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X_test = np.array(ct.fit_transform(X_test))

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X_test)
X_test = imputer.transform(X_test)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_test[:, 2:] = sc.fit_transform(X_test[:, 2:])

سنطبق نموذجنا بالفعل!

gbc_predict = gbc.predict(X_test)

الكل. قمنا بعمل تنبؤ. الآن يجب تسجيله بتنسيق csv وإرساله إلى الموقع.

np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')

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

All Articles