معالجة القيم المكررة في Pandas DataFrame

معالجة القيم المكررة في Pandas DataFrame

المُقدّمة

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

تحديد القيم المكررة

الخطوة الأولى في التعامل مع القيم المكررة هي تحديدها. يعد تحديد القيم المكررة خطوة مهمة في تنظيف البيانات. تقدم Pandas طرقًا متعددة لتحديد القيم المكررة داخل إطار البيانات. في هذا القسم ، سنناقش duplicated() وظيفة و value_counts() وظيفة لتحديد القيم المكررة.

النقيب مكرر ()

duplicated() الوظيفة هي وظيفة مكتبة Pandas التي تتحقق من وجود صفوف مكررة في DataFrame. إخراج ملف duplicated() الوظيفة عبارة عن سلسلة منطقية لها نفس طول DataFrame الإدخال ، حيث يشير كل عنصر إلى ما إذا كان الصف المقابل مكررًا أم لا.

دعنا نفكر في مثال بسيط على duplicated() وظيفة:

import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) df_duplicates = df.duplicated()
print(df_duplicates)

الإخراج:

0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool

في المثال أعلاه ، أنشأنا DataFrame يحتوي على أسماء الطلاب وإجمالي درجاتهم. احتجنا duplicated() على DataFrame ، الذي أنشأ سلسلة منطقية مع False تمثل قيمًا فريدة و True تمثل القيم المكررة.

في هذا المثال ، يعتبر التواجد الأول للقيمة فريدًا. ومع ذلك ، ماذا لو أردنا اعتبار القيمة الأخيرة فريدة ، ولا نريد اعتبار جميع الأعمدة عند تحديد القيم المكررة؟ هنا ، يمكننا تعديل duplicated() تعمل عن طريق تغيير قيم المعلمات.

المعلمات: مجموعة فرعية والاحتفاظ

duplicated() تقدم الوظيفة خيارات التخصيص من خلال معلماتها الاختيارية. لها معلمتان ، كما هو موضح أدناه:

  • subset: تتيح لنا هذه المعلمة تحديد مجموعة فرعية من الأعمدة التي يجب مراعاتها أثناء اكتشاف التكرار. تم تعيين المجموعة الفرعية على None بشكل افتراضي ، مما يعني أنه يتم أخذ كل عمود في DataFrame في الاعتبار. لتحديد أسماء الأعمدة ، يمكننا تزويد المجموعة الفرعية بقائمة بأسماء الأعمدة.

    فيما يلي مثال على استخدام معلمة المجموعة الفرعية:

    
    df_duplicates = df.duplicated(subset=['StudentName'])
    

    الإخراج:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: يسمح لنا هذا الخيار باختيار مثيل الصف المكرر الذي يجب تمييزه على أنه مكرر. القيم المحتملة للحفظ هي:

    • "first": هذه هي القيمة الافتراضية لملف keep خيار. يحدد جميع التكرارات باستثناء التكرار الأول ، مع الأخذ في الاعتبار أن القيمة الأولى فريدة.
    • "last": يعرّف هذا الخيار التواجد الأخير كقيمة فريدة. سيتم اعتبار جميع التكرارات الأخرى تكرارات.
    • False: هذا الخيار يصنف كل مثيل على أنه قيمة مكررة.

فيما يلي مثال على استخدام الامتداد keep المعلمة:


df_duplicates = df.duplicated(keep='last')
print(df_duplicates)

الإخراج:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
تصور القيم المكررة

value_counts() الوظيفة هي الطريقة الثانية لتحديد التكرارات. ال value_counts() تحسب الدالة عدد المرات التي تظهر فيها كل قيمة فريدة في عمود. من خلال تطبيق value_counts() وظيفة لعمود معين ، يمكن تصور تكرار كل قيمة.

فيما يلي مثال على استخدام الامتداد value_counts() وظيفة:

import matplotlib.pyplot as plt
import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) name_counts = df['StudentName'].value_counts()
print(name_counts)

الإخراج:

Mark 2
Ali 1
Bob 1
John 1
Johny 1
Name: StudentName, dtype: int64

دعنا الآن نتخيل القيم المكررة باستخدام رسم بياني شريطي. يمكننا تصور تكرار القيم المكررة بشكل فعال باستخدام مخطط شريطي.


name_counts.plot(kind='bar')
plt.xlabel('Student Name')
plt.ylabel('Frequency')
plt.title('Duplicate Name Frequencies')
plt.show()

قيم مكررة

معالجة القيم المكررة

بعد تحديد القيم المكررة ، حان الوقت لمعالجتها. في هذا القسم ، سوف نستكشف استراتيجيات مختلفة لإزالة وتحديث القيم المكررة باستخدام الباندا drop_duplicates() و replace() المهام. بالإضافة إلى ذلك ، سنناقش تجميع البيانات بقيم مكررة باستخدام groupby() وظيفة.

إزالة القيم المكررة

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

بناء جملة drop_duplicates() مع القيم الافتراضية في المعلمات كما يلي:

dataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

subset و keep المعلمات لها نفس التفسير كما في duplicates(). إذا قمنا بتعيين المعلمة الثالثة inplace إلى True، سيتم تنفيذ جميع التعديلات مباشرة على DataFrame الأصلي ، مما يؤدي إلى إرجاع الطريقة None ويتم تعديل إطار البيانات الأصلي. بشكل افتراضي، inplace is False.

هنا مثال على drop_duplicates() وظيفة:


df.drop_duplicates(keep='last', inplace=True)
print(df)

الإخراج:

 StudentName Score
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling Git وفي الواقع تعلم ذلك!

في المثال أعلاه ، تم حذف الإدخال الأول لأنه مكرر.

استبدال أو تحديث القيم المكررة

الطريقة الثانية للتعامل مع التكرارات تتضمن استبدال القيمة باستخدام Pandas replace() وظيفة. ال replace() تسمح لنا الوظيفة باستبدال قيم أو أنماط محددة في DataFrame بقيم جديدة. بشكل افتراضي ، يستبدل جميع مثيلات القيمة. ومع ذلك ، باستخدام المعلمة limit ، يمكننا تقييد عدد الاستبدالات.

فيما يلي مثال على استخدام الامتداد replace() وظيفة:


df['StudentName'].replace('Mark', 'Max', limit=1, inplace=True)
print(df)

الإخراج:

 StudentName Score
0 Max 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

هنا ، تم استخدام الحد لاستبدال القيمة الأولى. ماذا لو أردنا استبدال آخر تكرار؟ في هذه الحالة ، سنجمع بين duplicated() و replace() المهام. استخدام duplicated()، سنشير إلى آخر مثيل لكل قيمة مكررة ، نحصل على رقم الصف باستخدام loc وظيفة ، ثم استبدله باستخدام ملف replace() وظيفة. إليك مثال على استخدام ملفات duplicated() و replace() تعمل معًا.


last_occurrences = df.duplicated(subset='StudentName', keep='first') last_occurrences_rows = df[last_occurrences] df.loc[last_occurrences, 'StudentName'] = df.loc[last_occurrences, 'StudentName'].replace('Mark', 'Max') print(df)

الإخراج:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Max 45

وظائف مخصصة لعمليات الاستبدال المعقدة

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

على سبيل المثال ، لنفترض أن عمود "StudentName" يحتوي على أسماء مكررة. هدفنا هو استبدال التكرارات باستخدام وظيفة مخصصة تلحق رقمًا في نهاية القيم المكررة ، مما يجعلها فريدة.


def add_number(name, counts): if name in counts: counts[name] += 1 return f'{name}_{counts[name]}' else: counts[name] = 0 return name name_counts = {} df['is_duplicate'] = df.duplicated('StudentName', keep=False)
df['StudentName'] = df.apply(lambda x: add_number(x['StudentName'], name_counts) if x['is_duplicate'] else x['StudentName'], axis=1)
df.drop('is_duplicate', axis=1, inplace=True)
print(df)

الإخراج:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark_1 45

تجميع البيانات بقيم مكررة

يمكن تجميع البيانات التي تحتوي على قيم مكررة لتلخيص البيانات واكتساب رؤى منها. الباندا groupby() تسمح لك الوظيفة بتجميع البيانات بقيم مكررة. باستخدام ملف groupby() وظيفة ، يمكنك تجميع عمود واحد أو أكثر وحساب المتوسط ​​أو المتوسط ​​أو مجموع عمود آخر لكل مجموعة.

فيما يلي مثال على استخدام الامتداد groupby() الأسلوب:


grouped = df.groupby(['StudentName']) df_aggregated = grouped.sum()
print(df_aggregated)

الإخراج:

 Score
StudentName Ali 65
Bob 76
John 44
Johny 39
Mark 90

التقنيات المتقدمة

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

التكرارات غامض

التكرارات غير الواضحة هي سجلات ليست مطابقة تمامًا ولكنها متشابهة ، وقد تحدث لأسباب مختلفة ، بما في ذلك أخطاء إدخال البيانات والأخطاء الإملائية والاختلافات في التنسيق. سوف نستخدم ملف fuzzywuzzy مكتبة Python لتحديد التكرارات باستخدام مطابقة تشابه السلسلة.

فيما يلي مثال للتعامل مع القيم غير الواضحة:

import pandas as pd
from fuzzywuzzy import fuzz def find_fuzzy_duplicates(dataframe, column, threshold): duplicates = [] for i in range(len(dataframe)): for j in range(i+1, len(dataframe)): similarity = fuzz.ratio(dataframe[column][i], dataframe[column][j]) if similarity >= threshold: duplicates.append(dataframe.iloc[[i, j]]) if duplicates: duplicates_df = pd.concat(duplicates) return duplicates_df else: return pd.DataFrame() data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) threshold = 70 fuzzy_duplicates = find_fuzzy_duplicates(df, 'StudentName', threshold)
print("Fuzzy duplicates:")
print(fuzzy_duplicates.to_string(index=False))

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

الإخراج:

Fuzzy duplicates:
StudentName Score Mark 45 Mark 45 John 44 Johny 39

في المثال أعلاه ، تم تحديد التكرارات غير الواضحة في عمود "StudentName". تقارن وظيفة "find_fuzzy_duplicates" كل زوج من السلاسل باستخدام ملف fuzzywuzzy مكتبة fuzz.ratio وظيفة ، والتي تحسب درجة التشابه بناءً على مسافة Levenshtein. لقد قمنا بتعيين الحد الأدنى على 70 ، مما يعني أن أي اسم بنسبة تطابق أكبر من 70 سيتم اعتباره قيمة غير واضحة. بعد تحديد القيم غير الواضحة ، يمكننا إدارتها باستخدام الطريقة الموضحة في القسم بعنوان "معالجة التكرارات".

معالجة تكرار بيانات السلاسل الزمنية

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

  • إسقاط التكرارات بالضبط: في هذه الطريقة ، نقوم بإزالة الصفوف المتطابقة باستخدام ملف drop_duplicates تعمل في الباندا.
  • طوابع زمنية مكررة بقيم مختلفة: إذا كان لدينا نفس الطابع الزمني ولكن بقيم مختلفة ، فيمكننا تجميع البيانات واكتساب المزيد من الإحصاءات باستخدام groupby()، أو يمكننا تحديد أحدث قيمة وإزالة القيم الأخرى باستخدام drop_duplicates() مع الالجائزة keep تم تعيين المعلمة على "آخر".

معالجة قيم الفهرس المكررة

قبل معالجة قيم الفهرس المكررة ، دعنا أولاً نحدد ما هو الفهرس في Pandas. الفهرس هو معرف فريد يتم تعيينه لكل صف من إطارات البيانات. يقوم Pandas بتعيين فهرس رقمي يبدأ من الصفر افتراضيًا. ومع ذلك ، يمكن تعيين فهرس لأي مجموعة عمود أو عمود. لتحديد التكرارات في عمود الفهرس ، يمكننا استخدام duplicated() و drop_duplicates() وظائف ، على التوالي. في هذا القسم ، سوف نستكشف كيفية التعامل مع التكرارات في عمود الفهرس باستخدام reset_index().

كما يوحي اسمها ، فإن reset_index() يتم استخدام الوظيفة في Pandas لإعادة تعيين فهرس DataFrame. عند تطبيق reset_index() وظيفة ، يتم تجاهل الفهرس الحالي تلقائيًا ، مما يعني فقدان قيم الفهرس الأولية. بتحديد drop المعلمة مثل False في ال reset_index() وظيفة ، يمكننا الاحتفاظ بقيمة المؤشر الأصلية أثناء إعادة تعيين الفهرس.

هنا مثال على استخدام reset_index():

import pandas as pd data = { 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data, index=['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark']) df.reset_index(inplace=True)
print(df)

الإخراج:

 index Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

أفضل الممارسات

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

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

  • توثيق النهج: من الضروري توثيق عملية الكشف عن القيم المكررة ومعالجتها ، مما يسمح للآخرين بفهم عملية التفكير.

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

  • احتفظ بالبيانات الأصلية: قبل إجراء أي عملية على البيانات ، قم بإنشاء نسخة احتياطية من البيانات الأصلية.

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

افكار اخيرة

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

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

اكثر من ستاكابوز