مايكل ماكولاي

يجب أن تعرف وظائف Pandas في رحلة تعلم الآلة

عقدة المصدر: 1865356

تم نشر هذه المقالة كجزء من مدونة علوم البيانات

المُقدّمة

حسنًا ، هناك احتمال جيد يمكنك ذلك!

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

يحتوي على العديد من الميزات الجميلة التي تحل حالات الحافة النادرة ، والسيناريوهات المختلفة.

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

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

أنبوب

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

على سبيل المثال ، إذا كنت ترغب في تطبيق وظائف مثل drop_duplicates و encode_categoricals و remove_outliers الذي يقبل وسيطاته.

df_cleaned = (الماس. أنبوب (drop_duplicates). الأنبوب (remove_outliers، ['price'، 'carat'، 'deep']). الأنبوب (encode_categoricals، ['cut'، 'color'، 'clarity']))

حلل إلى عوامل

هذه الوظيفة هي بديل ل Sklearns Label Encoder.

# ضع في اعتبارك [0] في نهاية الماس ["cut_enc"] = pd.factorize (الماس ["قطع"]) [0] >>> الماس ["cut_enc"]. عينة (5) 52103 2 39813 0 31843 0 10675 0 6634 0 الاسم: cut_enc ، dtype: int64

تحليل النتائج إلى مجموعة من القيم: القيمة المشفرة وقائمة الفئات الفريدة.

القيم الفريدة = pd.factorize (الماس ["قص"] ، الفرز = صحيح) >>> القيم [: 10] المصفوفة ([0 ، 1 ، 3 ، 1 ، 3 ، 2 ، 2 ، 2 ، 4 ، 2] ، dtype = int64) >>> فريد ['Ideal'، 'Premium'، 'Very Good'، 'Good'، 'Fair']

تفجر

تنفجر | وظائف الباندا

تصوير إديوا فوستر on Unsplash

تنفجر هي وظيفة ذات اسم مثير للاهتمام. لنبدأ بمثال ثم شرح:

df = pd.Series ([1، 6، 7، [46، 56، 49]، 45، [15، 10، 12]]). to_frame ("dirty") >>> df
البيانات | وظائف الباندا
صورة المؤلف

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

>>> df.explode ("قذرة"، ignore_index = صحيح)
البيانات تنفجر
صورة المؤلف

تأخذ هذه الوظيفة خلية بمصفوفة من القيم وتنقسم في صفوف متعددة. للحفاظ على ترتيب الفهرس الرقمي ، استخدم ignore_index كـ True.

ما بين

بالنسبة إلى ميزات الفهرسة الرقمية المنطقية داخل نطاق ، إليك وظيفة مفيدة:

# احصل على ألماس يتراوح سعره بين 3500 و 3700 دولار ألماس ["السعر"]. بين (3500 ، 3700 ، ضمناً = "لا أحد")]. عينة (5)
بين البيانات | وظائف الباندا
صورة المؤلف

 

T

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

>>> بوسطن. وصف (). T.head (10)
تبديل موضع
صورة المؤلف

 

خيارات الباندا

يمكن للمرء استخدام الإعدادات العامة للباندا التي تساعد على تعديل وتغيير السلوكيات الافتراضية.

>>> dir (pd.options) ['compute'، 'display'، 'io'، 'mode'، 'plotting']

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

>>> dir (pd.options.display) ['chop_threshold'، 'max_columns'، 'max_colwidth'، 'max_info_columns'، 'max_info_rows'، 'max_rows'، ... 'الدقة'، 'show_dimensions'، 'unicode' ، 'العرض']

يستخدم معظم الناس max_columns والدقة

# إزالة الحد لعرض عدد الأعمدة pd.options.display.max_columns = لا شيء # أظهر فقط 5 أرقام بعد الفاصلة pd.options.display.precision = 5 # للتخلص من التدوين العلمي

تحويل أنواع

ندرك جميعًا أن الباندا لديها عادة مزعجة تتمثل في تمييز بعض الأعمدة على أنها أنواع بيانات كائن. بدلاً من تحديد أنواعها مباشرةً ، يمكنك استخدام طريقة convert dtypes ، والتي تحاول استنتاج أفضل نوع بيانات:

sample = pd.read_csv ("data / station_day.csv"، usecols = ["StationId"، "CO"، "O3"، "AQI_Bucket"]) >>> sample.dtypes StationId object CO float64 O3 float64 AQI_Bucket نوع الكائن: كائن >>> sample.convert_dtypes (). dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: object

حدد الأنواع

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

اختر فقط أعمدة رقمية مع np.number ، على سبيل المثال:

# اختر الأعمدة الرقمية فقط Diamonds.select_dtypes (include = np.number) .head ()
حدد أنواع
صورة المؤلف

 

ماسك

تساعد هذه الوظيفة في استبدال القيم التي لا يتم فيها استيفاء الشرط المخصص.

# إنشاء عينة أعمار البيانات = pd.Series ([55 ، 52 ، 50 ، 66 ، 57 ، 59 ، 49 ، 60]). إلى الأعمار ("الأعمار")
قناع | بيانات
صورة المؤلف

بعد إجراء العملية المذكورة أعلاه.

يتم تنفيذ اخفاء
صورة المؤلف

مين وماكس

على الرغم من أن min و max معروفان جيدًا ، إلا أنهما يتمتعان ببعض الخصائص الأفضل لبعض حالات الحافة.

index = ["Diamonds"، "Titanic"، "Iris"، "Heart Disease"، "Loan Default"] مكتبات = ["XGBoost"، "CatBoost"، "LightGBM"، "Sklearn GB"] df = pd.DataFrame ({lib: np.random.uniform (90، 100، 5) من أجل lib في المكتبات} ، الفهرس = الفهرس) >>> df
الحد الأدنى والحد الأقصى
صورة المؤلف 

يُظهر إطار البيانات الخيالي أعلاه نتائج أربعة مكتبات مختلفة لتعزيز التدرج اللوني في خمس مجموعات بيانات. نحن نبحث عن الحزمة التي قدمت أفضل أداء في كل مجموعة بيانات. إليك كيفية القيام بذلك مع max بأسلوب راقٍ:

>>> df.max (axis = 1) Diamonds 99.52684 Titanic 99.63650 Iris 99.10989 Heart Disease 99.31627 قرض افتراضي 97.96728 dtype: float64

Nlargest و Nsmallest

nlargest و nsmallest مفيدان في عرض أعلى قيم N أو ~ (أعلى N) لمتغير.

diamonds.nlargest (5، "السعر")
الأكبر والأصغر
صورة المؤلف
diamonds.nsmallest (5، "السعر")
n أصغر
صورة المؤلف

 

Idxmax و Idxmin

تقوم Pandas بإرجاع أكبر / أصغر رقم عند استدعاء الحد الأقصى أو الحد الأدنى في عمود. ومع ذلك ، هناك حالات تحتاج فيها إلى موضع الحد الأدنى / الحد الأقصى ، والذي لا توفره هذه الوظائف.

بدلاً من ذلك ، يمكنك استخدام idxmax / idxmin:

>>> diamonds.price.idxmax () 27749 >>> diamonds.carat.idxmin () 14

عدد القيم

الطريقة الشائعة لإيجاد النسبة المئوية للقيم المفقودة هي الجمع بين القيم الخالية والجمع والقسمة على حجم المصفوفة.

لكن ، value_counts ذات الوسيطات ذات الصلة تفعل الشيء نفسه:

الإسكان = pd.read_csv ("train.csv") >>> السكن ["FireplaceQu"]. value_counts (dropna = False، normalize = True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 الاسم: FireplaceQu، dtype: تعويم 64

قصاصة

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

>>> الأعمار كليب (50 ، 60)
بيانات للمقطع
صورة المؤلف

 

في وقت و بين وقت

هذه الوظائف مفيدة أثناء العمل مع سلاسل زمنية عالية الدقة.

يساعد at_time في الحصول على القيم في تاريخ أو وقت محدد.

index = pd.date_range ("2021-08-01" ، النقاط = 100 ، التكرار = "H") df = pd.DataFrame ({"col": list (range (100))} ، index = index) >> > df.head ()
على سبيل المثال | وظائف الباندا
صورة المؤلف

>>> df.at_time ("15:00")

.at_time | وظائف الباندا
صورة المؤلف

تم استخدام between_time لجلب الصفوف ضمن نطاق مخصص.

من تاريخ استيراد التاريخ والوقت >>> df.between_time ("09:45"، "12:00")
بين الوقت
صورة المؤلف

 

Bdate_range

تساعد هذه الوظيفة في إنشاء فهارس السلاسل الزمنية بتردد يوم العمل. العالم المالي لديه هذا النوع من التردد. لذلك ، قد تكون هذه الوظيفة مفيدة في وقت إعادة فهرسة السلاسل الزمنية باستخدام وظيفة إعادة الفهرسة.

series = pd.bdate_range ("2021-01-01"، "2021-01-31") # فترة شهر واحد >>> len (سلسلة) 21

في و Iat

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

# [index، label] >>> diamonds.at [234، "cut"] 'Ideal' # [index، index] >>> diamonds.iat [1564، 4] 61.2 # استبدل الصف 16541 من عمود السعر >> > Diamonds.at [16541، "price"] = 10000

أرجسورت

تساعد هذه الوظيفة في استخراج الفهارس التي من شأنها فرز مجموعة من الميزات.

Tips.reset_index (inplace = True، drop = True) sort_idx = tips ["total_bill"]. argsort (kind = "mergesort") # الآن ، رتب "النصائح" بناءً على total_bill tips.iloc [sort_idx] .head ()
arg_sort
صورة المؤلف

 

اكسسوار القط

تسمح الباندا بالوظائف المدمجة للبيثون في التواريخ والسلاسل باستخدام ملحقات مثل str أو dt.

>>> diamonds.dtypes carat float64 فئة قص فئة اللون فئة الوضوح فئة العمق تعويم الجدول 64 تعويم الجدول 64 السعر int64 x float64 y float64 z float64 cut_enc int64 dtype: object

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

الماس ["new_cuts"] = الماس ["قص"]. cat.rename_categories (قائمة ("ABCDE")) >>> الماس ["new_cuts"]. cat.categories الفهرس (['A'، 'B'، ' C '،' D '،' E ']، dtype =' object ')

تحقق من هذا للحصول على قائمة المزيد من الوظائف ضمن اكسسوار القط.

ضغط

الضغط هو وظيفة تستخدم في حالات نادرة ولكنها شديدة الخطورة.

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

مجموعة فرعية = diamonds.loc [diamonds.index >> مجموعة فرعية
السعر

حتى في حالة وجود خلية واحدة فقط ، قم بإرجاع DataFrame. من غير الملائم أنه يجب عليك الآن استخدام.loc مع كل من اسم العمود والفهرس للحصول على السعر.

لست مضطرًا لذلك إذا كنت تعرف كيفية الضغط. يمكن إزالة محور من DataFrame أو سلسلة أحادية الخلية باستخدام هذه الوظيفة. ضع في اعتبارك السيناريو التالي:

>>> subset.squeeze () 326

من الممكن تحديد المحور المراد إزالته. لقد عاد فقط الآن.

>>> subset.squeeze ("أعمدة") # أو "صفوف" 0 326 الاسم: السعر ، النوع: int64

لاحظ أن هذه الوظيفة تعمل فقط مع السلسلة أو DataFrame بقيم مفردة.

Excel_writer

إنها فئة عامة لإنشاء ملفات Excel وكتابة DataFrame فيها. ضع في اعتبارك أن لدينا مجموعتي البيانات هاتين.

# قم بتحميل مجموعتين من مجموعات البيانات Diamonds = sns.load_dataset ("diamonds") tips = sns.load_dataset ("tips") # اكتب إلى ملف Excel نفسه باستخدام pd.ExcelWriter ("data / data.xlsx") ككاتب: diamonds.to_excel (الكاتب ، sheet_name = "diamonds") tips.to_excel (الكاتب ، sheet_name = "tips")

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

وفي الختام

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

تعمل مكتبات مثل Dask و datatable على استبدال Pandas تدريجياً بميزاتها الجديدة البراقة للتعامل مع مجموعات البيانات الكبيرة ، ولا تزال Pandas أداة معالجة البيانات الأكثر استخدامًا في مجتمع علوم بيانات Python. نظرًا لمدى ملاءمتها لمكدس SciPy الحالي ، تعمل المكتبة كنموذج تتبعه الحزم الأخرى وتنشئها.

أتمنى أن تكون قد وجدت هذا المنشور ثاقبًا وأشكرك على القراءة.

الوسائط الموضحة في هذه المقالة ليست مملوكة لشركة Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

المصدر: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

الطابع الزمني:

اكثر من تحليلات Vidhya