تم نشر هذه المقالة كجزء من مدونة علوم البيانات
المُقدّمة
حسنًا ، هناك احتمال جيد يمكنك ذلك!
بالنسبة لعلماء البيانات الذين يستخدمون 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، "السعر")
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")
تم استخدام 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 ()
اكسسوار القط
تسمح الباندا بالوظائف المدمجة للبيثون في التواريخ والسلاسل باستخدام ملحقات مثل 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 ويتم استخدامها وفقًا لتقدير المؤلف.
مقالات ذات صلة
- "
- 100
- 7
- الكل
- تحليل
- تحليلات
- الحجج
- البند
- أفضل
- تعزيز
- بوسطن
- نساعدك في بناء
- دعوة
- الحالات
- تغيير
- سوائل التنظيف
- الكود
- عمود
- مشترك
- مجتمع
- إحصاء
- خلق
- البيانات
- تحليل البيانات
- علم البيانات
- عالم البيانات
- تمور
- فعل
- مرض
- دولار
- حافة
- Excel
- تجربة
- عادل
- الميزات
- المميزات
- مالي
- الاسم الأول
- اتباع
- شكل
- وظيفة
- العالمية
- خير
- النمو
- معالجة
- في المتناول
- هنا
- مرتفع
- كيفية
- كيفية
- HTTPS
- مؤشر
- معلومات
- IT
- القفل
- لغة
- كبير
- تعلم
- المكتبة
- قائمة
- قوائم
- تحميل
- قرض
- آلة التعلم
- تلاعب
- قناع
- الوسائط
- مزايا جديدة
- أرقام
- مزيد من الخيارات
- أخرى
- نموذج
- مجتمع
- أنبوب
- قوة
- دقة
- بريميوم
- يقدم
- السعر
- برمجة وتطوير
- بايثون
- رامات
- نطاق
- نادي القراءة
- النتائج
- علوم
- العلماء
- مسلسلات
- الاشارات
- حجم
- So
- حل
- بداية
- فروعنا
- الوقت
- نصائح
- تيشرت
- يونيكود
- us
- قيمنا
- المزيد
- من الذى
- في غضون
- أعمال
- العالم
- كاتب
- جاري الكتابة
- X