English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

بيانات التصنيف في Pandas

مثال على عمليات البيانات التصنيفية في Pandas

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

يكون نوع البيانات التصنيفي مفيدًا في الحالات التالية

متغير نصي يحتوي على قيم مختلفة قليلة. تحويل هذا النوع من المتغيرات النصية إلى متغيرات تصنيفية يمكن أن يوفر بعض الذاكرة.

ترتيب الكلمات للمتغيرات المختلفة (مثل 'واحد، اثنان، ثلاثة') مختلف عن الترتيب المنطقي. من خلال تحويلها إلى فئات وتحديد الترتيب في الفئة، سيتم استخدام الترتيب المنطقي بدلاً من الترتيب اللغوي للترتيب والأصغر والأكبر.

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

إنشاء كائن

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

فئة

بإعداد dtype كـ "category" عند إنشاء كائن Pandas.

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 print(s)

النتائج التالية:

 0 a
 1 b
 2 c
 3 a
 dtype: category
 Categories (3، object): [a، b، c]

عدد العناصر المقدمة للسلسلة هي 4، ولكن الفئة هي 3. استطعنا ملاحظة نفس الشئ في مخرجات الفئة.

pd.Categorical

باستخدام بناء التصنيف القياسي في Pandas، يمكننا إنشاء كائن تصنيف.

pandas.Categorical(values، categories، ordered)

نرى مثالاً هنا-

 import pandas as pd
 cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
 print(cat)

النتائج التالية:

 [a، b، c، a، b، c]
 Categories (3، object): [a، b، c]

دعونا نرى مثالاً آخر

 import pandas as pd
 cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
 print(cat)

النتائج التالية:

 [a، b، c، a، b، c، NaN]
 فئات (3، نوعية): [c، b، a]

في هذا السياق، الثانية هي دالة على الفئة. لذلك، أي قيمة غير موجودة في الفئة سيتم اعتبارها NaN.
الآن، دعونا نرى مثالاً أدناه:

 import pandas as pd
 cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
 print(cat)

النتائج التالية:

 [a، b، c، a، b، c، NaN]
 فئات (3، نوعية): [c < b < a]

من الناحية المنطقية، هذا الترتيب يعني أن a أكبر من b وأن b أكبر من c.

وصف

استخدام الأمر .describe() لبيانات التصنيف، نحصل على مخرجات مشابهة إلى سلسلة أو مصفوفة بيانات النوعية.

 import pandas as pd
 import numpy as np
 cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})
 print(df.describe())
 print(df["cat"].describe())

النتائج التالية:

    cat s
count    3 3
unique   2 2
top      c c
freq     2 2
count     3
unique    2
top       c
freq      2
الاسم: cat, dtype: object

الحصول على خصائص الفئة

استخدام الأمر obj.cat.categories للحصول على فئات العنصر.

 import pandas as pd
 import numpy as np
 s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 print(s.categories)

النتائج التالية:

  Index([u'b', u'a', u'c'], dtype='object')

استخدام الأمر obj.ordered للحصول على ترتيب العنصر.

 import pandas as pd
 import numpy as np
 cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 print(cat.ordered)

النتائج التالية:

   False

يعود هذا الدالة إلى false لأننا لم نحدد أي ترتيب.

تغيير الفئة

تم تغيير اسم الفئة من خلال تخصيص قيمة جديدة لخصائص series.cat.categories.

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 s.cat.categories = ["Group %s" % g for g in s.cat.categories]
 print(s.cat.categories)

النتائج التالية:

Index([u'Group a', u'Group b', u'Group c'], dtype='object')

تم تحديث الفئات الاصلية [a،b،c] من خاصية s.cat.categories.

إضافة فئة جديدة

يمكن استخدام طريقة Categorical.add.categories() لإضافة فئات جديدة.

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 s = s.cat.add_categories([4])
 print(s.cat.categories)

النتائج التالية:

Index([u'a', u'b', u'c', 4], dtype='object')

إزالة الفئة

يمكن استخدام طريقة Categorical.remove_categories() لإزالة الفئات غير المرغوب فيها.

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 print(("الجسم الأصلي:"))
 print(s)
 print(("بعد الإزالة:"))
 print(s.cat.remove_categories("a"))

النتائج التالية:

 الجسم الأصلي:
 0 a
 1 b
 2 c
 3 a
 dtype: category
 Categories (3، object): [a، b، c]
 After removal:
 0 NaN
 1 b
 2 c
 3 NaN
 dtype: category
 Categories (2، object): [b، c]

مقارنة بيانات التصنيف

يمكن مقارنة بيانات التصنيف مع الأشياء الأخرى في ثلاثة حالات:

قارن المتساوي (==و!=) مع العناصر التي لها نفس طول التصنيفات مثل بيانات التصنيف (قائمة، سلسلة، مصفوفة،...)

عندما يكون الترتيب== True وأن التصنيفات متطابقة، يقارن بيانات التصنيف بجميع التصنيفات في سلسلة أخرى (==،!=،>،> =،  <و<=)。< div>    

كل مقارنة بين بيانات التصنيف والعدد

انظر إلى المثال التالي:

 import pandas as pd
 cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
 cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)
 print(cat>cat1)

النتائج التالية:

 0  False
 1  False
 2  True
 dtype: bool