الدرس الثالث: العمليات المتقدمة في Pandas
1. تغيير أسماء الأعمدة
قد تحتاج في بعض الأحيان إلى تغيير أسماء الأعمدة لجعلها أكثر وضوحًا أو لتتناسب مع تنسيق معين. يمكن القيام بذلك بسهولة باستخدام:
بالعربية:
import pandas as pd
# إنشاء DataFrame بسيط
data = {
'الاسم': ['أحمد', 'سارة', 'محمد', 'ليلى'],
'العمر': [23, 25, 22, 20],
'المدينة': ['القاهرة', 'الرياض', 'دبي', 'بيروت']
}
df = pd.DataFrame(data)
# تغيير أسماء الأعمدة
df = df.rename(columns={'الاسم': 'اسم الموظف', 'العمر': 'عمر الموظف'})
print(df)
بالإنجليزية:
import pandas as pd
# Creating a simple DataFrame
data = {
'Name': ['Ahmed', 'Sara', 'Mohamed', 'Layla'],
'Age': [23, 25, 22, 20],
'City': ['Cairo', 'Riyadh', 'Dubai', 'Beirut']
}
df = pd.DataFrame(data)
# Renaming columns
df = df.rename(columns={'Name': 'Employee Name', 'Age': 'Employee Age'})
print(df)
2. فرز البيانات
فرز البيانات هو أمر شائع جداً، سواء كنت ترغب في فرز البيانات تصاعديًا أو تنازليًا بناءً على عمود معين:
بالعربية:
# فرز البيانات بناءً على عمر الموظف بشكل تصاعدي
sorted_df = df.sort_values(by='عمر الموظف')
print(sorted_df)
# فرز البيانات بناءً على عمر الموظف بشكل تنازلي
sorted_df_desc = df.sort_values(by='عمر الموظف', ascending=False)
print(sorted_df_desc)
بالإنجليزية:
# Sorting data based on Employee Age in ascending order
sorted_df = df.sort_values(by='Employee Age')
print(sorted_df)
# Sorting data based on Employee Age in descending order
sorted_df_desc = df.sort_values(by='Employee Age', ascending=False)
print(sorted_df_desc)
3. استخدام الدوال المتجهة (Vectorized Functions)
العمليات المتجهة تساعدك في تطبيق دوال على الأعمدة أو DataFrame بالكامل بكفاءة:
بالعربية:
# إنشاء عمود جديد يمثل ضعف العمر
df['ضعف العمر'] = df['عمر الموظف'] * 2
print(df)
# تطبيق دالة lambda لإضافة 5 إلى عمر كل موظف
df['عمر + 5'] = df['عمر الموظف'].apply(lambda x: x + 5)
print(df)
بالإنجليزية:
# Creating a new column that represents double the age
df['Double Age'] = df['Employee Age'] * 2
print(df)
# Using lambda function to add 5 to each employee's age
df['Age + 5'] = df['Employee Age'].apply(lambda x: x + 5)
print(df)
4. التعامل مع التواريخ
التواريخ هي جزء أساسي من البيانات. Pandas توفر العديد من الأدوات للتعامل مع التواريخ:
بالعربية:
# تحويل عمود إلى نوع بيانات datetime
df['تاريخ الانضمام'] = pd.to_datetime(['2022-01-10', '2021-05-15', '2023-07-20', '2020-09-30'])
print(df)
# استخراج السنة من تاريخ الانضمام
df['سنة الانضمام'] = df['تاريخ الانضمام'].dt.year
print(df)
# حساب عدد الأيام منذ الانضمام
df['أيام منذ الانضمام'] = (pd.Timestamp('now') - df['تاريخ الانضمام']).dt.days
print(df)
بالإنجليزية:
# Converting a column to datetime data type
df['Join Date'] = pd.to_datetime(['2022-01-10', '2021-05-15', '2023-07-20', '2020-09-30'])
print(df)
# Extracting the year from the join date
df['Join Year'] = df['Join Date'].dt.year
print(df)
# Calculating the number of days since joining
df['Days Since Joining'] = (pd.Timestamp('now') - df['Join Date']).dt.days
print(df)
5. تجميع وتحليل البيانات باستخدام Pivot Table
Pivot Tables هي أداة قوية لتحليل وتلخيص البيانات:
بالعربية:
# إنشاء DataFrame جديد
data = {
'الاسم': ['أحمد', 'أحمد', 'سارة', 'سارة', 'محمد', 'محمد'],
'العام': [2022, 2023, 2022, 2023, 2022, 2023],
'المبيعات': [1500, 1600, 2000, 2100, 1300, 1400]
}
df = pd.DataFrame(data)
# إنشاء Pivot Table
pivot_table = df.pivot_table(values='المبيعات', index='الاسم', columns='العام', aggfunc='sum')
print(pivot_table)
بالإنجليزية:
# Creating a new DataFrame
data = {
'Name': ['Ahmed', 'Ahmed', 'Sara', 'Sara', 'Mohamed', 'Mohamed'],
'Year': [2022, 2023, 2022, 2023, 2022, 2023],
'Sales': [1500, 1600, 2000, 2100, 1300, 1400]
}
df = pd.DataFrame(data)
# Creating a Pivot Table
pivot_table = df.pivot_table(values='Sales', index='Name', columns='Year', aggfunc='sum')
print(pivot_table)
6. دمج البيانات المتقدمة
يمكنك دمج البيانات باستخدام concat
أو merge
لتحقيق دمج أكثر تعقيدًا:
بالعربية:
# إنشاء DataFrames إضافية
df1 = pd.DataFrame({'الاسم': ['أحمد', 'سارة'], 'العمر': [23, 25]})
df2 = pd.DataFrame({'الاسم': ['محمد', 'ليلى'], 'العمر': [22, 20]})
# دمج DataFrames باستخدام concat
merged_df = pd.concat([df1, df2], ignore_index=True)
print(merged_df)
# دمج DataFrames باستخدام merge
left = pd.DataFrame({'الاسم': ['أحمد', 'سارة'], 'القسم': ['المبيعات', 'التسويق']})
right = pd.DataFrame({'الاسم': ['أحمد', 'سارة'], 'الراتب': [5000, 6000]})
joined_df = pd.merge(left, right, on='الاسم', how='inner')
print(joined_df)
بالإنجليزية:
# Creating additional DataFrames
df1 = pd.DataFrame({'Name': ['Ahmed', 'Sara'], 'Age': [23, 25]})
df2 = pd.DataFrame({'Name': ['Mohamed', 'Layla'], 'Age': [22, 20]})
# Merging DataFrames using concat
merged_df = pd.concat([df1, df2], ignore_index=True)
print(merged_df)
# Merging DataFrames using merge
left = pd.DataFrame({'Name': ['Ahmed', 'Sara'], 'Department': ['Sales', 'Marketing']})
right = pd.DataFrame({'Name': ['Ahmed', 'Sara'], 'Salary': [5000, 6000]})
joined_df = pd.merge(left, right, on='Name', how='inner')
print(joined_df)
7. حفظ البيانات وتصديرها
بمجرد الانتهاء من تحليلك، يمكنك حفظ النتائج إلى ملف:
بالعربية:
# حفظ DataFrame إلى ملف CSV
df.to_csv('employees.csv', index=False)
# حفظ DataFrame إلى ملف Excel
df.to_excel('employees.xlsx', index=False)
بالإنجليزية:
# Saving DataFrame to a CSV file
df.to_csv('employees.csv', index=False)
# Saving DataFrame to an Excel file
df.to_excel('employees.xlsx', index=False)
التحديات العملية
التحدي 1: تحليل المبيعات
لديك ملف CSV يحتوي على بيانات مبيعات سنوية للموظفين، sales_data.csv
. قم بما يلي:
- اقرأ البيانات من الملف إلى DataFrame.
- قم بإنشاء Pivot Table تُظهر مجموع المبيعات لكل موظف لكل عام.
- احسب المتوسط السنوي للمبيعات لكل موظف.
التحدي 2: العمل مع التواريخ
لديك DataFrame يحتوي على عمود تواريخ الانضمام للموظفين. قم بما يلي:
- قم بتحويل عمود التواريخ إلى نوع بيانات
datetime
. - أضف عمودًا جديدًا يظهر الشهر الذي انضم فيه كل موظف.
- احسب عدد الأشهر التي انقضت منذ تاريخ الانضمام.
التحد
ي 3: دمج البيانات
لديك اثنين من DataFrames: الأول يحتوي على معلومات عن الموظفين (الاسم، العمر، القسم)، والثاني يحتوي على معلومات عن رواتبهم (الاسم، الراتب). قم بما يلي:
- دمج DataFrames بناءً على عمود الاسم.
- احفظ DataFrame الناتج إلى ملف
merged_data.csv
.
تهانينا على الوصول إلى هذه النقطة! استمر في ممارسة التحديات والتمارين لتصبح أكثر إلمامًا بقدرات Pandas. إذا كان لديك أي استفسار أو تحتاج إلى توضيح لأي من المواضيع، فلا تتردد في طرح سؤالك!