محلل البيانات
ما هو محلل البيانات؟
محلل البيانات (Data Analyst)
محلل البيانات هو متخصص يجمع البيانات وينظمها ويحللها لاستخراج رؤى قابلة للتنفيذ تساعد الشركات في اتخاذ قرارات مستنيرة.
تحليل البيانات
استخراج رؤى قابلة للتنفيذ
التقارير
إنشاء تقارير ولوحات تحكم
قواعد البيانات
إدارة وتحليل قواعد البيانات
البرمجة
Python و SQL للتحليل
اللغات والأدوات المستخدمة
Python
اللغة الأساسية للتعامل مع البيانات وتحليل النماذج
SQL
لإدارة قواعد البيانات واستعلامات البيانات
Excel
للتحليل البسيط والعرض المرئي للبيانات
Power BI
لإنشاء تقارير ولوحات تحكم تفاعلية
Pandas
لمعالجة وتحليل البيانات في Python
Matplotlib
لإنشاء الرسوم البيانية في Python
مهارات محلل البيانات
Python Programming
إتقان Python للتحليل والتصورات
Pandas & NumPy
معالجة وتحليل البيانات الرقمية
SQL
استعلامات قواعد البيانات والتحليل
تصور البيانات
مبادئ تصميم الرسوم البيانية والتقارير
Power BI
تحليل وتصور البيانات وإنشاء التقارير
الإحصائيات
فهم الإحصائيات ومؤشرات الأداء KPIs
خارطة التعلم خطوة بخطوة
الخطوة 1: تعلم Python
Python هي اللغة الأساسية للتعامل مع البيانات وتحليل النماذج باستخدام مكتبات مثل TensorFlow Privacy و Fairlearn
الأهمية:
الأساس لجميع عمليات تحليل البيانات والذكاء الاصطناعي
الأدوات:
Python 3.x، Jupyter Notebook، VS Code
مثال Python أساسي:
# تعريف متغيرات وتحليل بسيط
print("مرحبا، علوم البيانات")
def greet(name):
return f"مرحبا، {name}!"
print(greet("محلل البيانات"))
# أنواع البيانات الأساسية
name = "أحمد" # نص
age = 28 # عدد صحيح
salary = 5000.50 # عدد عشري
is_analyst = True # منطقي
print(f"الاسم: {name}")
print(f"العمر: {age}")
print(f"الراتب: {salary}")
print(f"محلل بيانات: {is_analyst}")
# القوائم (Lists)
departments = ["المبيعات", "التسويق", "التطوير", "المالية"]
print("الأقسام:", departments)
print("القسم الأول:", departments[0])
print("عدد الأقسام:", len(departments))
# القواميس (Dictionaries)
employee = {
"name": "سارة",
"age": 30,
"department": "المبيعات",
"salary": 5500,
"skills": ["Python", "SQL", "Excel"]
}
print("بيانات الموظف:", employee)
print("مهارات الموظف:", employee["skills"])
# الحلقات التكرارية (Loops)
sales = [15000, 22000, 18000, 30000, 25000]
total_sales = 0
print("المبيعات الشهرية:")
for i, sale in enumerate(sales, 1):
print(f"الشهر {i}: {sale:,}")
total_sales += sale
print(f"إجمالي المبيعات: {total_sales:,}")
print(f"متوسط المبيعات: {total_sales/len(sales):,.2f}")
# الدوال (Functions)
def calculate_stats(numbers):
"""تحسب الإحصاءات الأساسية للقائمة"""
total = sum(numbers)
average = total / len(numbers)
maximum = max(numbers)
minimum = min(numbers)
return {
"total": total,
"average": average,
"max": maximum,
"min": minimum
}
# مثال على استخدام الدالة
revenue = [1000, 1500, 800, 2000, 1700]
stats = calculate_stats(revenue)
print("\nإحصائيات الإيرادات:")
for key, value in stats.items():
print(f"{key}: {value:,.2f}")
# مكتبات Python الأساسية للتحليل
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
print("Pandas version:", pd.__version__)
print("NumPy version:", np.__version__)
# إنشاء بيانات تجريبية
data = {
'Employee': ['أحمد', 'سارة', 'خالد', 'نورة'],
'Department': ['المبيعات', 'التسويق', 'المبيعات', 'التطوير'],
'Salary': [5000, 4500, 5200, 6000],
'Experience': [3, 5, 2, 4]
}
df = pd.DataFrame(data)
print("\nDataFrame للبيانات:")
print(df)
# تحليل البيانات الأساسي
print("\nالإحصائيات الوصفية:")
print(df.describe())
print("\nعدد الموظفين في كل قسم:")
print(df['Department'].value_counts())
print("\nمتوسط الراتب حسب القسم:")
print(df.groupby('Department')['Salary'].mean())
# تحليل متقدم باستخدام NumPy
salaries = np.array([5000, 4500, 5200, 6000, 4800, 5500])
print("\nتحليل الرواتب باستخدام NumPy:")
print(f"متوسط الرواتب: {np.mean(salaries):.2f}")
print(f"الوسيط: {np.median(salaries):.2f}")
print(f"الانحراف المعياري: {np.std(salaries):.2f}")
print(f"الحد الأدنى: {np.min(salaries):.2f}")
print(f"الحد الأقصى: {np.max(salaries):.2f}")
# التصور البصري البسيط
months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو']
sales_data = [150, 220, 180, 300, 250]
plt.figure(figsize=(10, 5))
plt.bar(months, sales_data, color='skyblue')
plt.title('المبيعات الشهرية', fontsize=16)
plt.xlabel('الشهر', fontsize=12)
plt.ylabel('المبيعات (ألف)', fontsize=12)
plt.grid(True, alpha=0.3)
plt.show()
# معالجة الأخطاء (Error Handling)
def safe_divide(a, b):
"""تقسم عددين بأمان"""
try:
result = a / b
return result
except ZeroDivisionError:
return "خطأ: القسمة على صفر"
except TypeError:
return "خطأ: نوع البيانات غير مناسب"
print("\nمثال على معالجة الأخطاء:")
print(f"10 ÷ 2 = {safe_divide(10, 2)}")
print(f"10 ÷ 0 = {safe_divide(10, 0)}")
# العمل مع الملفات
def save_data(data, filename):
"""تحفظ البيانات في ملف نصي"""
with open(filename, 'w', encoding='utf-8') as file:
for item in data:
file.write(str(item) + '\n')
print(f"تم حفظ البيانات في {filename}")
def read_data(filename):
"""تقرأ البيانات من ملف نصي"""
try:
with open(filename, 'r', encoding='utf-8') as file:
data = [line.strip() for line in file]
return data
except FileNotFoundError:
return "الملف غير موجود"
# مثال على استخدام الوظائف مع الملفات
data_to_save = ["أحمد,5000,المبيعات", "سارة,4500,التسويق"]
save_data(data_to_save, "employees.txt")
loaded_data = read_data("employees.txt")
print("\nالبيانات المحملة:", loaded_data)
# مكتبات متقدمة للتحليل
print("\nمكتبات Python للتحليل المتقدم:")
libraries = [
"Pandas - لتحليل البيانات",
"NumPy - للحسابات العلمية",
"Matplotlib - للرسوم البيانية",
"Seaborn - للتصورات الإحصائية",
"Scikit-learn - للتعلم الآلي",
"TensorFlow - للذكاء الاصطناعي",
"Statsmodels - للنمذجة الإحصائية",
"Plotly - للتصورات التفاعلية"
]
for lib in libraries:
print(f"✓ {lib}")
الخطوة 2: تعلم Pandas
Pandas لمكتبة Python لمعالجة وتحليل البيانات
الأهمية:
ضرورية لتنظيف البيانات وتحليلها قبل إنشاء التقارير
الأدوات:
Jupyter Notebook، Google Colab
مثال Pandas شامل:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
print("مرحباً في عالم Pandas للتحليل!")
# مثال 1: إنشاء DataFrame من القواميس
data = {
'الاسم': ['أحمد', 'سارة', 'خالد', 'نورة', 'فهد'],
'العمر': [28, 32, 25, 30, 35],
'القسم': ['المبيعات', 'التسويق', 'المبيعات', 'التطوير', 'المالية'],
'الراتب': [5000, 5500, 4500, 6000, 5200],
'الخبرة': [3, 5, 2, 7, 4],
'المدينة': ['الرياض', 'جدة', 'الدمام', 'الرياض', 'جدة']
}
df = pd.DataFrame(data)
print("DataFrame الأساسي:")
print(df)
print("\nمعلومات عن البيانات:")
print(df.info())
print("\nالإحصائيات الوصفية:")
print(df.describe())
# مثال 2: قراءة البيانات من ملفات مختلفة
print("\nقراءة البيانات من مصادر مختلفة:")
# قراءة من CSV (مثال)
# df = pd.read_csv('data.csv', encoding='utf-8')
# قراءة من Excel
# df = pd.read_excel('data.xlsx')
# قراءة من SQL
# import sqlite3
# conn = sqlite3.connect('database.db')
# df = pd.read_sql_query("SELECT * FROM employees", conn)
# مثال 3: استكشاف البيانات
print("\nاستكشاف البيانات:")
print(f"عدد الصفوف والأعمدة: {df.shape}")
print(f"الأعمدة: {df.columns.tolist()}")
print(f"القيم الفريدة في القسم: {df['القسم'].unique()}")
print(f"عدد الموظفين في كل قسم:\n{df['القسم'].value_counts()}")
print(f"النسب المئوية:\n{df['القسم'].value_counts(normalize=True)}")
# مثال 4: تصفية البيانات
print("\nتصفية البيانات:")
# موظفو المبيعات فقط
sales_team = df[df['القسم'] == 'المبيعات']
print("فريق المبيعات:")
print(sales_team)
# موظفون براتب أكثر من 5000
high_salary = df[df['الراتب'] > 5000]
print("\nموظفون براتب أكثر من 5000:")
print(high_salary)
# تصفية متعددة
filtered = df[(df['الراتب'] > 5000) & (df['الخبرة'] > 3)]
print("\nموظفون براتب > 5000 وخبرة > 3 سنوات:")
print(filtered)
# مثال 5: فرز البيانات
print("\nفرز البيانات:")
sorted_by_salary = df.sort_values('الراتب', ascending=False)
print("مفروز حسب الراتب (تنازلي):")
print(sorted_by_salary)
sorted_multiple = df.sort_values(['القسم', 'الراتب'], ascending=[True, False])
print("\nمفروز حسب القسم ثم الراتب:")
print(sorted_multiple)
# مثال 6: العمليات على الأعمدة
print("\nالعمليات على الأعمدة:")
# إضافة عمود جديد
df['الراتب_الشهري'] = df['الراتب']
df['الراتب_السنوي'] = df['الراتب'] * 12
df['فئة_الراتب'] = np.where(df['الراتب'] > 5500, 'عالي',
np.where(df['الراتب'] > 4800, 'متوسط', 'منخفض'))
print("بعد إضافة الأعمدة الجديدة:")
print(df[['الاسم', 'الراتب', 'الراتب_السنوي', 'فئة_الراتب']])
# حساب العمليات
df['الراتب_مع_العلاوة'] = df['الراتب'] * 1.1 # زيادة 10%
df['نسبة_الخبرة'] = (df['الخبرة'] / df['الخبرة'].max()) * 100
# مثال 7: التجميع والتحليل
print("\nالتحليل بالمجموعات:")
# متوسط الراتب حسب القسم
dept_stats = df.groupby('القسم').agg({
'الراتب': ['mean', 'min', 'max', 'sum', 'count'],
'الخبرة': 'mean'
}).round(2)
dept_stats.columns = ['متوسط_الراتب', 'أقل_راتب', 'أعلى_راتب', 'مجموع_الرواتب', 'عدد_الموظفين', 'متوسط_الخبرة']
print("إحصائيات حسب القسم:")
print(dept_stats)
# مثال 8: البيانات المحورية (Pivot Tables)
print("\nالجدول المحوري:")
pivot_table = pd.pivot_table(df,
values='الراتب',
index='القسم',
columns='فئة_الراتب',
aggfunc=['mean', 'count'],
fill_value=0)
print("الجدول المحوري للرواتب:")
print(pivot_table)
# مثال 9: التعامل مع القيم المفقودة
print("\nالتعامل مع القيم المفقودة:")
# إنشاء بيانات مع قيم مفقودة
data_with_na = df.copy()
data_with_na.loc[2:3, 'الراتب'] = np.nan
data_with_na.loc[1, 'القسم'] = np.nan
print("البيانات مع القيم المفقودة:")
print(data_with_na.isnull().sum())
# خيارات معالجة القيم المفقودة
cleaned_data = data_with_na.copy()
# 1. حذف الصفوف مع قيم مفقودة
dropped = cleaned_data.dropna()
print(f"\nبعد حذف الصفوف المفقودة: {dropped.shape}")
# 2. تعبئة القيم المفقودة
filled_data = cleaned_data.fillna({
'الراتب': cleaned_data['الراتب'].mean(),
'القسم': 'غير محدد'
})
print("\nبعد تعبئة القيم المفقودة:")
print(filled_data)
# مثال 10: دمج البيانات (Merge/Join)
print("\nدمج البيانات:")
# إنشاء DataFrame ثان
bonus_data = pd.DataFrame({
'الاسم': ['أحمد', 'سارة', 'خالد'],
'المكافأة': [1000, 800, 1200]
})
print("بيانات المكافآت:")
print(bonus_data)
# دمج البيانات
merged_df = pd.merge(df, bonus_data, on='الاسم', how='left')
merged_df['المكافأة'] = merged_df['المكافأة'].fillna(0)
merged_df['الراتب_الإجمالي'] = merged_df['الراتب'] + merged_df['المكافأة']
print("\nبعد دمج البيانات:")
print(merged_df[['الاسم', 'الراتب', 'المكافأة', 'الراتب_الإجمالي']])
# مثال 11: التحليل الزمني (إذا كانت هناك تواريخ)
print("\nالتحليل الزمني:")
# إنشاء بيانات زمنية
dates = pd.date_range('2024-01-01', periods=100, freq='D')
sales_data = pd.DataFrame({
'التاريخ': dates,
'المبيعات': np.random.randint(1000, 5000, 100),
'المنطقة': np.random.choice(['الرياض', 'جدة', 'الدمام'], 100)
})
print("بيانات المبيعات الزمنية:")
print(sales_data.head())
# تحليل زمني
sales_data['السنة'] = sales_data['التاريخ'].dt.year
sales_data['الشهر'] = sales_data['التاريخ'].dt.month
sales_data['اليوم'] = sales_data['التاريخ'].dt.day
sales_data['اسم_الشهر'] = sales_data['التاريخ'].dt.month_name()
sales_data['يوم_الأسبوع'] = sales_data['التاريخ'].dt.day_name()
# تحليل المبيعات الشهرية
monthly_sales = sales_data.groupby(['السنة', 'الشهر', 'اسم_الشهر']).agg({
'المبيعات': ['sum', 'mean', 'count']
}).round(2)
print("\nالمبيعات الشهرية:")
print(monthly_sales)
# مثال 12: التصدير إلى ملفات
print("\nتصدير البيانات:")
# تصدير إلى CSV
df.to_csv('employees_analysis.csv', index=False, encoding='utf-8-sig')
print("تم التصدير إلى CSV")
# تصدير إلى Excel
with pd.ExcelWriter('employees_analysis.xlsx') as writer:
df.to_excel(writer, sheet_name='الموظفين', index=False)
dept_stats.to_excel(writer, sheet_name='الإحصائيات')
print("تم التصدير إلى Excel")
# مثال 13: التحليل الإحصائي المتقدم
print("\nالتحليل الإسمائي المتقدم:")
# الارتباط
correlation = df[['الراتب', 'الخبرة', 'العمر']].corr()
print("مصفوفة الارتباط:")
print(correlation)
# تحليل التوزيع
print("\nتحليل توزيع الرواتب:")
print(f"الانحراف: {df['الراتب'].skew():.2f}")
print(f"التفلطح: {df['الراتب'].kurtosis():.2f}")
# اختبار الفرضيات (مثال بسيط)
from scipy import stats
# مثال: هل متوسط رواتب المبيعات = متوسط رواتب التسويق؟
sales_salaries = df[df['القسم'] == 'المبيعات']['الراتب']
marketing_salaries = df[df['القسم'] == 'التسويق']['الراتب']
t_stat, p_value = stats.ttest_ind(sales_salaries, marketing_salaries, nan_policy='omit')
print(f"\nاختبار t: t-statistic = {t_stat:.2f}, p-value = {p_value:.3f}")
if p_value < 0.05:
print("هناك فرق ذو دلالة إحصائية بين متوسط الرواتب")
else:
print("لا يوجد فرق ذو دلالة إحصائية بين متوسط الرواتب")
# مثال 14: التصور البصري مع Pandas
print("\nالتصور البصري للبيانات:")
# مخطط الأعمدة
plt.figure(figsize=(12, 6))
# مخطط 1: متوسط الراتب حسب القسم
plt.subplot(1, 2, 1)
df.groupby('القسم')['الراتب'].mean().plot(kind='bar', color='skyblue')
plt.title('متوسط الراتب حسب القسم')
plt.xlabel('القسم')
plt.ylabel('متوسط الراتب')
plt.xticks(rotation=45)
plt.grid(True, alpha=0.3)
# مخطط 2: توزيع الرواتب
plt.subplot(1, 2, 2)
df['الراتب'].plot(kind='hist', bins=10, color='lightgreen', edgecolor='black')
plt.title('توزيع الرواتب')
plt.xlabel('الراتب')
plt.ylabel('التكرار')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# مخطط التشتت
plt.figure(figsize=(8, 6))
plt.scatter(df['الخبرة'], df['الراتب'], alpha=0.6, color='blue', s=100)
plt.title('العلاقة بين الخبرة والراتب')
plt.xlabel('سنوات الخبرة')
plt.ylabel('الراتب')
plt.grid(True, alpha=0.3)
# خط الانحدار
z = np.polyfit(df['الخبرة'], df['الراتب'], 1)
p = np.poly1d(z)
plt.plot(df['الخبرة'], p(df['الخبرة']), "r--", alpha=0.8)
plt.show()
print("\nملخص مهارات Pandas:")
skills = [
"✓ قراءة وكتابة ملفات مختلفة (CSV, Excel, JSON)",
"✓ تنظيف البيانات ومعالجة القيم المفقودة",
"✓ تصفية وفرز البيانات",
"✓ التجميع والتحليل الإحصائي",
"✓ الجداول المحورية (Pivot Tables)",
"✓ دمج البيانات من مصادر مختلفة",
"✓ التحليل الزمني",
"✓ التصدير إلى تنسيقات مختلفة",
"✓ التحليل الإحصائي المتقدم",
"✓ التصور البصري للبيانات"
]
for skill in skills:
print(skill)
الخطوة 3: تعلم Matplotlib و Seaborn
لإنشاء الرسوم البيانية وتصور البيانات
الأهمية:
ضروري لتحويل البيانات إلى رسوم بيانية يسهل فهمها
الأدوات:
Jupyter Notebook، Google Colab
مثال التصور البصري:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
# إعداد البيانات
np.random.seed(42)
months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو']
sales_2023 = [150, 180, 220, 210, 250, 280]
sales_2024 = [180, 210, 240, 230, 270, 300]
# 1. مخطط خطي بسيط
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(months, sales_2023, marker='o', linewidth=2, label='2023', color='blue')
plt.plot(months, sales_2024, marker='s', linewidth=2, label='2024', color='green')
plt.title('المبيعات الشهرية 2023 vs 2024', fontsize=14, fontweight='bold')
plt.xlabel('الشهر', fontsize=12)
plt.ylabel('المبيعات (ألف)', fontsize=12)
plt.legend()
plt.grid(True, alpha=0.3)
# 2. مخطط أعمدة
plt.subplot(1, 2, 2)
x = np.arange(len(months))
width = 0.35
plt.bar(x - width/2, sales_2023, width, label='2023', color='skyblue')
plt.bar(x + width/2, sales_2024, width, label='2024', color='lightgreen')
plt.title('مقارنة المبيعات الشهرية', fontsize=14, fontweight='bold')
plt.xlabel('الشهر', fontsize=12)
plt.ylabel('المبيعات (ألف)', fontsize=12)
plt.xticks(x, months)
plt.legend()
plt.grid(True, alpha=0.3, axis='y')
plt.tight_layout()
plt.show()
# 3. إنشاء بيانات أكثر تعقيداً للتحليل
np.random.seed(42)
n_customers = 200
customer_data = pd.DataFrame({
'العمر': np.random.randint(18, 65, n_customers),
'الدخل': np.random.normal(5000, 1500, n_customers),
'الإنفاق': np.random.normal(1500, 500, n_customers),
'المدينة': np.random.choice(['الرياض', 'جدة', 'الدمام', 'مكة'], n_customers),
'الجنس': np.random.choice(['ذكر', 'أنثى'], n_customers)
})
# تأكد من أن الدخل والإنفاق إيجابيين
customer_data['الدخل'] = customer_data['الدخل'].clip(lower=2000)
customer_data['الإنفاق'] = customer_data['الإنفاق'].clip(lower=500)
# 4. استخدام Seaborn للتصورات الإحصائية
plt.figure(figsize=(15, 10))
# مخطط التوزيع (Histogram with KDE)
plt.subplot(2, 3, 1)
sns.histplot(data=customer_data, x='الدخل', kde=True, color='blue', bins=15)
plt.title('توزيع الدخل', fontsize=12)
plt.xlabel('الدخل الشهري')
plt.ylabel('التكرار')
# مخطط الصندوق (Box Plot)
plt.subplot(2, 3, 2)
sns.boxplot(data=customer_data, x='المدينة', y='الإنفاق', palette='Set2')
plt.title('الإنفاق حسب المدينة', fontsize=12)
plt.xlabel('المدينة')
plt.ylabel('الإنفاق الشهري')
plt.xticks(rotation=45)
# مخطط الكثافة (Density Plot)
plt.subplot(2, 3, 3)
sns.kdeplot(data=customer_data, x='الدخل', hue='الجنس', fill=True, alpha=0.6)
plt.title('كثافة الدخل حسب الجنس', fontsize=12)
plt.xlabel('الدخل الشهري')
plt.ylabel('الكثافة')
# مخطط التشتت (Scatter Plot)
plt.subplot(2, 3, 4)
scatter = plt.scatter(customer_data['العمر'], customer_data['الإنفاق'],
c=customer_data['الدخل'], cmap='viridis', alpha=0.6, s=50)
plt.title('العلاقة بين العمر والإنفاق', fontsize=12)
plt.xlabel('العمر')
plt.ylabel('الإنفاق الشهري')
plt.colorbar(scatter, label='الدخل')
# مخطط الأعمدة المجمعة (Grouped Bar Chart)
plt.subplot(2, 3, 5)
avg_spending = customer_data.groupby(['المدينة', 'الجنس'])['الإنفاق'].mean().unstack()
avg_spending.plot(kind='bar', ax=plt.gca(), color=['lightblue', 'pink'])
plt.title('متوسط الإنفاق حسب المدينة والجنس', fontsize=12)
plt.xlabel('المدينة')
plt.ylabel('متوسط الإنفاق')
plt.legend(title='الجنس')
plt.xticks(rotation=45)
# مخطط الحرارة (Heatmap)
plt.subplot(2, 3, 6)
correlation = customer_data[['العمر', 'الدخل', 'الإنفاق']].corr()
sns.heatmap(correlation, annot=True, cmap='coolwarm', center=0,
square=True, linewidths=1, cbar_kws={"shrink": 0.8})
plt.title('مصفوفة الارتباط', fontsize=12)
plt.tight_layout()
plt.show()
# 5. تصورات متقدمة
fig = plt.figure(figsize=(16, 12))
# مخطط المبعثر مع أبعاد متعددة
ax1 = fig.add_subplot(2, 2, 1)
scatter = ax1.scatter(customer_data['العمر'],
customer_data['الدخل'],
s=customer_data['الإنفاق']/10, # حجم النقطة حسب الإنفاق
c=customer_data['الإنفاق'], # لون النقطة حسب الإنفاق
cmap='RdYlBu',
alpha=0.6,
edgecolors='black',
linewidth=0.5)
ax1.set_title('العلاقة بين العمر والدخل والإنفاق', fontsize=14, fontweight='bold')
ax1.set_xlabel('العمر', fontsize=12)
ax1.set_ylabel('الدخل الشهري', fontsize=12)
ax1.grid(True, alpha=0.3)
# إضافة colorbar
cbar = plt.colorbar(scatter, ax=ax1)
cbar.set_label('الإنفاق الشهري', fontsize=12)
# مخطط violin plot
ax2 = fig.add_subplot(2, 2, 2)
sns.violinplot(data=customer_data, x='المدينة', y='الدخل',
palette='muted', inner='quartile', ax=ax2)
ax2.set_title('توزيع الدخل حسب المدينة', fontsize=14, fontweight='bold')
ax2.set_xlabel('المدينة', fontsize=12)
ax2.set_ylabel('الدخل الشهري', fontsize=12)
ax2.tick_params(axis='x', rotation=45)
# مخطط pair plot (مصغر)
ax3 = fig.add_subplot(2, 2, 3)
selected_data = customer_data[['العمر', 'الدخل', 'الإنفاق']].sample(50)
pd.plotting.scatter_matrix(selected_data, alpha=0.8, ax=ax3, diagonal='hist',
grid=True, marker='o', edgecolor='black')
ax3.set_title('مخطط المبعثر المصفوفي (عينة)', fontsize=14, fontweight='bold')
# مخطط دائري مع explode
ax4 = fig.add_subplot(2, 2, 4)
city_counts = customer_data['المدينة'].value_counts()
explode = (0.1, 0, 0, 0) # فصل الرياض
wedges, texts, autotexts = ax4.pie(city_counts.values,
labels=city_counts.index,
autopct='%1.1f%%',
startangle=90,
explode=explode,
shadow=True,
colors=['#ff9999','#66b3ff','#99ff99','#ffcc99'])
# تحسين النصوص
for autotext in autotexts:
autotext.set_color('white')
autotext.set_fontweight('bold')
ax4.set_title('توزيع العملاء حسب المدينة', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()
# 6. لوحة تحكم متكاملة (Dashboard)
fig, axes = plt.subplots(3, 3, figsize=(18, 15))
fig.suptitle('لوحة تحكم تحليل العملاء', fontsize=20, fontweight='bold', y=1.02)
# 6.1 KDE Plot
sns.kdeplot(data=customer_data, x='الدخل', ax=axes[0, 0], fill=True, color='blue')
axes[0, 0].set_title('توزيع الدخل', fontsize=12)
axes[0, 0].set_xlabel('الدخل')
axes[0, 0].grid(True, alpha=0.3)
# 6.2 Box Plot للمدينة
sns.boxplot(data=customer_data, x='المدينة', y='الإنفاق', ax=axes[0, 1], palette='Set3')
axes[0, 1].set_title('الإنفاق حسب المدينة', fontsize=12)
axes[0, 1].set_xlabel('')
axes[0, 1].tick_params(axis='x', rotation=45)
# 6.3 Scatter Plot مع regression
sns.regplot(data=customer_data, x='العمر', y='الإنفاق', ax=axes[0, 2],
scatter_kws={'alpha':0.5}, line_kws={'color':'red'})
axes[0, 2].set_title('العلاقة بين العمر والإنفاق', fontsize=12)
axes[0, 2].set_xlabel('العمر')
axes[0, 2].set_ylabel('الإنفاق')
# 6.4 Bar Chart للمتوسطات
avg_by_city = customer_data.groupby('المدينة')['الدخل'].mean().sort_values()
avg_by_city.plot(kind='barh', ax=axes[1, 0], color='lightgreen')
axes[1, 0].set_title('متوسط الدخل حسب المدينة', fontsize=12)
axes[1, 0].set_xlabel('متوسط الدخل')
# 6.5 Count Plot
sns.countplot(data=customer_data, x='المدينة', ax=axes[1, 1], palette='viridis')
axes[1, 1].set_title('عدد العملاء حسب المدينة', fontsize=12)
axes[1, 1].set_xlabel('')
axes[1, 1].tick_params(axis='x', rotation=45)
# 6.6 Hexbin Plot
hb = axes[1, 2].hexbin(customer_data['العمر'], customer_data['الدخل'],
gridsize=30, cmap='YlOrRd', mincnt=1)
axes[1, 2].set_title('كثافة العمر والدخل', fontsize=12)
axes[1, 2].set_xlabel('العمر')
axes[1, 2].set_ylabel('الدخل')
plt.colorbar(hb, ax=axes[1, 2])
# 6.7 Stacked Bar Chart
cross_tab = pd.crosstab(customer_data['المدينة'], customer_data['الجنس'])
cross_tab.plot(kind='bar', stacked=True, ax=axes[2, 0], color=['lightblue', 'pink'])
axes[2, 0].set_title('توزيع الجنس حسب المدينة', fontsize=12)
axes[2, 0].set_xlabel('المدينة')
axes[2, 0].legend(title='الجنس')
axes[2, 0].tick_params(axis='x', rotation=45)
# 6.8 Area Chart (المدينة vs الإنفاق)
monthly_data = customer_data.groupby(['المدينة']).agg({
'الدخل': 'mean',
'الإنفاق': 'mean',
'العمر': 'count'
}).round(2)
monthly_data[['الدخل', 'الإنفاق']].plot(kind='area', ax=axes[2, 1], alpha=0.6)
axes[2, 1].set_title('المتوسطات حسب المدينة', fontsize=12)
axes[2, 1].set_xlabel('المدينة')
axes[2, 1].legend(['متوسط الدخل', 'متوسط الإنفاق'])
axes[2, 1].tick_params(axis='x', rotation=45)
# 6.9 Pie Chart للجنس
gender_counts = customer_data['الجنس'].value_counts()
axes[2, 2].pie(gender_counts.values, labels=gender_counts.index,
autopct='%1.1f%%', startangle=90, colors=['lightblue', 'pink'])
axes[2, 2].set_title('توزيع الجنس', fontsize=12)
plt.tight_layout()
plt.show()
# 7. إعدادات وأساليب متقدمة للتصميم
print("ميزات Matplotlib المتقدمة:")
# إنشاء نمط مخصص
plt.style.use('seaborn-v0_8-darkgrid')
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# 7.1 Subplots مع مشاركة المحاور
ax1, ax2, ax3, ax4 = axes.flatten()
# مخطط مع تسميات مخصصة
ax1.plot(months, sales_2023, 'o-', label='2023', linewidth=2, markersize=8)
ax1.plot(months, sales_2024, 's-', label='2024', linewidth=2, markersize=8)
ax1.set_title('المبيعات الشهرية', fontsize=14, fontweight='bold', pad=15)
ax1.set_xlabel('الشهر', fontsize=12, labelpad=10)
ax1.set_ylabel('المبيعات (ألف)', fontsize=12, labelpad=10)
ax1.legend(loc='upper left', fontsize=10)
ax1.grid(True, alpha=0.3, linestyle='--')
ax1.set_xticklabels(months, rotation=45, ha='right')
# إضافة خطوط أفقية ورأسية
ax1.axhline(y=250, color='red', linestyle='--', alpha=0.5, label='الهدف')
ax1.axvline(x=2, color='green', linestyle=':', alpha=0.5)
# إضافة نصوص توضيحية
ax1.text(2, 220, 'ذروة 2023', fontsize=10,
bbox=dict(boxstyle="round,pad=0.3", facecolor="yellow", alpha=0.7))
ax1.text(5, 280, 'ذروة 2024', fontsize=10,
bbox=dict(boxstyle="round,pad=0.3", facecolor="lightgreen", alpha=0.7))
# 7.2 مخطط مع Fill between
ax2.fill_between(months, sales_2023, sales_2024,
where=np.array(sales_2024) > np.array(sales_2023),
alpha=0.3, color='green', label='زيادة')
ax2.fill_between(months, sales_2023, sales_2024,
where=np.array(sales_2024) <= np.array(sales_2023),
alpha=0.3, color='red', label='انخفاض')
ax2.plot(months, sales_2023, 'o-', color='blue', label='2023')
ax2.plot(months, sales_2024, 's-', color='green', label='2024')
ax2.set_title('مقارنة المبيعات مع التعبئة', fontsize=14, fontweight='bold')
ax2.set_xlabel('الشهر', fontsize=12)
ax2.set_ylabel('المبيعات (ألف)', fontsize=12)
ax2.legend(loc='upper left')
ax2.grid(True, alpha=0.3)
# 7.3 مخطط ثنائي المحور Y
ax3.plot(months, sales_2023, 'o-', color='blue', label='المبيعات 2023')
ax3.set_xlabel('الشهر', fontsize=12)
ax3.set_ylabel('المبيعات 2023 (ألف)', color='blue', fontsize=12)
ax3.tick_params(axis='y', labelcolor='blue')
ax3.grid(True, alpha=0.3)
# محور Y ثاني
ax3_twin = ax3.twinx()
growth_rate = [(sales_2024[i] - sales_2023[i])/sales_2023[i]*100
for i in range(len(months))]
ax3_twin.plot(months, growth_rate, 's--', color='red', label='نسبة النمو %')
ax3_twin.set_ylabel('نسبة النمو %', color='red', fontsize=12)
ax3_twin.tick_params(axis='y', labelcolor='red')
ax3.set_title('المبيعات ونسبة النمو', fontsize=14, fontweight='bold')
# 7.4 مخطط مع annotate
bars = ax4.bar(months, sales_2024, color='lightgreen', edgecolor='black')
ax4.set_title('المبيعات 2024 مع التوضيح', fontsize=14, fontweight='bold')
ax4.set_xlabel('الشهر', fontsize=12)
ax4.set_ylabel('المبيعات (ألف)', fontsize=12)
ax4.grid(True, alpha=0.3, axis='y')
# إضافة النصوص على الأعمدة
for i, (bar, value) in enumerate(zip(bars, sales_2024)):
height = bar.get_height()
ax4.text(bar.get_x() + bar.get_width()/2., height + 5,
f'{value}\n({growth_rate[i]:.1f}%)',
ha='center', va='bottom', fontsize=9,
bbox=dict(boxstyle="round,pad=0.2", facecolor="white", alpha=0.7))
plt.tight_layout()
plt.show()
print("""
ملخص مهارات التصور البصري:
✓ مخططات خطية (Line Charts) للاتجاهات الزمنية
✓ مخططات أعمدة (Bar Charts) للمقارنات
✓ مخططات مبعثرة (Scatter Plots) للعلاقات
✓ مخططات صندوقية (Box Plots) للتوزيعات
✓ مخططات كثافة (KDE Plots) للكثافة
✓ مخططات حرارة (Heatmaps) للارتباط
✓ مخططات فيولين (Violin Plots) للتوزيع التفصيلي
✓ مخططات سداسية (Hexbin Plots) للكثافة
✓ مخططات مبعثرة مصفوفية (Pair Plots)
✓ مخططات محورية مزدوجة (Dual-axis Plots)
✓ إضافة نصوص وتوضيحات (Annotations)
✓ تخصيص الألوان والأنماط
✓ إنشاء لوحات تحكم (Dashboards)
""")
الخطوة 4: تعلم Excel
Excel للتحليل البسيط والعرض المرئي للبيانات
الأهمية:
أداة أساسية لتحليل البيانات اليومية وإنشاء تقارير بسيطة
الأدوات:
Microsoft Excel، Google Sheets
دليل Excel للمحلل:
/*
دليل Microsoft Excel للمحلل البيانات
1. الأساسيات:
- التنقل بين الخلايا: الأسهم، Ctrl + الأسهم للقفز
- الاختصارات الأساسية:
* Ctrl + C / V / X: نسخ / لصق / قص
* Ctrl + Z / Y: تراجع / إعادة
* Ctrl + S: حفظ
* F2: تحرير الخلية
* F4: تكرار آخر عملية أو تأمين المرجع
2. إدخال البيانات وتنظيمها:
- إدخال البيانات في جدول منظم
- استخدام التنسيق الشرطي للتلوين
- تجميد الصفوف/الأعمدة (Freeze Panes)
- تقسيم النافذة (Split)
3. الصيغ والدوال الأساسية:
*/
=SUM(A1:A10) // جمع نطاق من الخلايا
=AVERAGE(B1:B10) // متوسط القيم
=COUNT(A1:A10) // عد الأرقام
=COUNTA(A1:A10) // عد جميع القيم
=MAX(C1:C10) // القيمة العظمى
=MIN(C1:C10) // القيمة الصغرى
=IF(A1>100, "عال", "منخفض") // شرط بسيط
=VLOOKUP(A2, D:E, 2, FALSE) // بحث عمودي
=XLOOKUP(A2, D:D, E:E) // بحث متقدم (Excel 365)
=SUMIFS(C:C, A:A, ">100", B:B, "المبيعات") // جمع بشروط
/*
4. دوال النصوص:
*/
=LEFT(A1, 3) // أول 3 أحرف
=RIGHT(A1, 2) // آخر حرفين
=MID(A1, 2, 4) // من الحرف 2 لمدة 4 أحرف
=TRIM(A1) // إزالة المسافات الزائدة
=UPPER(A1) // تحويل لأحرف كبيرة
=LOWER(A1) // تحويل لأحرف صغيرة
=PROPER(A1) // أول حرف كبير والباقي صغير
=LEN(A1) // طول النص
=FIND(" ", A1) // إيجاد موضع المسافة
=SUBSTITUTE(A1, "قديم", "جديد") // استبدال نص
/*
5. دوال التاريخ والوقت:
*/
=TODAY() // تاريخ اليوم
=NOW() // التاريخ والوقت الحالي
=DATE(2024, 1, 15) // إنشاء تاريخ
=YEAR(A1) // استخراج السنة
=MONTH(A1) // استخراج الشهر
=DAY(A1) // استخراج اليوم
=EOMONTH(A1, 0) // آخر يوم في الشهر
=WORKDAY(A1, 10) // تاريخ بعد 10 أيام عمل
=DATEDIF(A1, B1, "d") // الفرق بالأيام
=WEEKDAY(A1, 2) // يوم الأسبوع (1=الإثنين)
/*
6. دوال البحث والمراجع:
*/
=INDEX(A:A, 5) // القيمة في الصف 5
=MATCH("القيمة", A:A, 0) // إيجاد موضع القيمة
=INDEX(B:B, MATCH("القيمة", A:A, 0)) // البحث المزدوج
=CHOOSE(2, "خيار1", "خيار2") // اختيار من قائمة
=INDIRECT("A" & B1) // مرجع ديناميكي
=OFFSET(A1, 2, 3) // الإزاحة من الخلية
/*
7. دوال إحصائية متقدمة:
*/
=STDEV.S(A1:A10) // الانحراف المعياري للعينة
=STDEV.P(A1:A10) // الانحراف المعياري للمجتمع
=VARIANCE.S(A1:A10) // التباين للعينة
=CORREL(A1:A10, B1:B10) // معامل الارتباط
=FORECAST(x, known_y's, known_x's) // التنبؤ الخطي
=TREND(known_y's, known_x's, new_x's) // الاتجاه
=GROWTH(known_y's, known_x's, new_x's) // النمو الأسي
=FREQUENCY(data_array, bins_array) // التوزيع التكراري
=PERCENTILE.INC(A1:A10, 0.9) // المئين 90%
=QUARTILE.INC(A1:A10, 3) // الربيع الثالث
/*
8. دوال منطقية متقدمة:
*/
=IFERROR(صيغة, "بديل") // معالجة الأخطاء
=IFS(A1>100, "عال", A1>50, "متوسط", TRUE, "منخفض")
=SWITCH(A1, 1, "منخفض", 2, "متوسط", 3, "عال")
=AND(A1>100, B1<50) // و منطقي
=OR(A1>100, B1<50) // أو منطقي
=NOT(A1>100) // نفي منطقي
=XOR(A1>100, B1<50) // أو الحصري
/*
9. الجداول المحورية (PivotTables):
الخطوات:
1. حدد نطاق البيانات
2. Insert > PivotTable
3. اسحب الحقول:
- إلى Rows: الفئات
- إلى Columns: التصنيفات
- إلى Values: القيم (جمع، متوسط، عد)
4. تخصيص:
- Value Field Settings لتغيير نوع التجميع
- Design tab للتنسيق
- Refresh عند تحديث البيانات
10. المخططات البيانية:
أنواع المخططات المناسبة:
- Column/Bar: للمقارنات
- Line: للاتجاهات الزمنية
- Pie: للنسب البسيطة
- Scatter: للعلاقات
- Combo: للمخططات المختلطة
خطوات إنشاء مخطط:
1. حدد البيانات
2. Insert > اختر نوع المخطط
3. تخصيص باستخدام Chart Tools
4. إضافة Chart Elements:
- Titles (العناوين)
- Data Labels (تسميات البيانات)
- Trendline (خط الاتجاه)
- Error Bars (أشرطة الخطأ)
11. Power Query (Get & Transform):
لتنظيف وتحويل البيانات:
1. Data > Get Data > From File/Web/Other Sources
2. Power Query Editor يفتح
3. العمليات الشائعة:
- Remove Duplicates (إزالة التكرارات)
- Change Data Type (تغيير نوع البيانات)
- Split Column (تقسيم العمود)
- Merge Columns (دمج الأعمدة)
- Pivot/Unpivot (تحويل الجدول)
4. Close & Load للحفظ
12. Power Pivot:
لنمذجة البيانات المتقدمة:
1. Enable Power Pivot من Options
2. Power Pivot > Manage
3. إنشاء Relationships بين الجداول
4. كتابة دوال DAX:
- SUMX: جمع مع تكرار
- CALCULATE: حساب مع عوامل تصفية
- RELATED: جلب بيانات من جدول مرتبط
- ALL: إزالة عوامل التصفية
13. نماذج مالية وتحليلية:
أ. تحليل الحساسية (What-If Analysis):
- Data Tables: لاختبار سيناريوهات متعددة
- Scenario Manager: لحفظ السيناريوهات
- Goal Seek: لإيجاد قيمة لتحقيق هدف
ب. Solver:
- لإيجاد الحل الأمثل مع قيود
- مثال: تخصيص الموارد لتحقيق أقصى ربح
ج. Data Analysis ToolPak:
- Regression: تحليل الانحدار
- Histogram: المدرج التكراري
- ANOVA: تحليل التباين
- Random Number Generation: توليد أرقام عشوائية
14. إعداد التقارير:
أ. لوحات التحكم (Dashboards):
- استخدام Slicers للتصفية
- Timelines للتصفية الزمنية
- Sparklines للاتجاهات المصغرة
- Conditional Formatting للتلوين
ب. Protection and Security:
- Protect Sheet/Workbook
- Allow specific users to edit ranges
- Add passwords
ج. Collaboration:
- Share workbook
- Track Changes
- Comments and Notes
- Version History (Excel 365)
15. أمثلة عملية:
مثال 1: تحليل المبيعات اليومي
*/
A1: "تحليل المبيعات الشهري"
A3: "الشهر" | B3: "المبيعات" | C3: "الهدف" | D3: "النسبة %"
A4: "يناير" | B4: 15000 | C4: 12000 | D4: =B4/C4-1
A5: "فبراير" | B5: 18000 | C5: 15000 | D5: =B5/C5-1
// تنسيق شرطي للعمود D:
=AND(D4>0.2, D4<=0.5) // لون أخضر فاتح
=D4>0.5 // لون أخضر غامق
=D4<0 // لون أحمر
// إنشاء مخطط:
- حدد A3:A8, B3:B8
- Insert > Column Chart
- إضافة Data Labels
- تغيير الألوان حسب الأداء
/*
مثال 2: تحليل العملاء
*/
// جدول العملاء
A1: "ID" | B1: "الاسم" | C1: "المدينة" | D1: "الإنفاق" | E1: "تاريخ الشراء"
// تحليل:
F1: "إجمالي العملاء" | F2: =COUNTA(A:A)-1
G1: "متوسط الإنفاق" | G2: =AVERAGE(D:D)
H1: "الإنفاق الكلي" | H2: =SUM(D:D)
I1: "أعلى إنفاق" | I2: =MAX(D:D)
// استخدام PivotTable:
- Rows: المدينة
- Values: الإنفاق (مجموع)، الإنفاق (متوسط)، ID (عد)
/*
مثال 3: تحليل المخزون
*/
// دوال مفيدة:
=IF(F2
الخطوة 5: تعلم Power BI
Power BI لإنشاء تقارير ولوحات تحكم تفاعلية
الأهمية:
ضروري لإنشاء تقارير تفاعلية يمكن مشاركتها مع الفرق الأخرى
الأدوات:
Power BI Desktop، Power BI Service
دليل Power BI شامل:
/*
Power BI Guide للمحلل البيانات
1. مقدمة:
- Power BI Desktop: تطبيق مجاني لإنشاء التقارير
- Power BI Service: خدمة سحابية للمشاركة
- Power BI Mobile: تطبيق الهاتف للعرض
2. سير العمل الأساسي:
1. استيراد البيانات
2. تحويل وتنظيف البيانات (Power Query)
3. نمذجة البيانات (إنشاء العلاقات)
4. إنشاء التصورات البصرية
5. نشر ومشاركة التقرير
3. استيراد البيانات:
مصادر البيانات المدعومة:
- ملفات: Excel, CSV, XML, JSON, PDF
- قواعد بيانات: SQL Server, MySQL, Oracle
- الخدمات السحابية: Azure, Google Analytics
- مصادر أخرى: Web, SharePoint, Salesforce
4. Power Query Editor:
العمليات الأساسية:
*/
// 1. إزالة الأعمدة غير الضرورية
// 2. تغيير أنواع البيانات
// 3. إعادة تسمية الأعمدة
// 4. إزالة التكرارات
// 5. استبدال القيم
// 6. تقسيم الأعمدة
// 7. دمج الجداول
/*
5. نمذجة البيانات:
أنواع العلاقات:
- One-to-Many (واحد إلى كثير): الأكثر شيوعاً
- Many-to-One (كثير إلى واحد)
- One-to-One (واحد إلى واحد)
- Many-to-Many (كثير إلى كثير)
نصائح النمذجة:
- استخدم Star Schema
- أنشئ Date Table منفصلة
- تجنب العلاقات الدائرية
6. دوال DAX الأساسية:
*/
// دوال التجميع:
SUM(Table[Column]) // المجموع
AVERAGE(Table[Column]) // المتوسط
COUNT(Table[Column]) // العد
COUNTROWS(Table) // عد الصفوف
DISTINCTCOUNT(Table[Column]) // العد المميز
// دوال النصوص:
CONCATENATE("الاسم: ", [Name]) // دمج النصوص
LEFT([Text], 3) // أول 3 أحرف
RIGHT([Text], 2) // آخر حرفين
TRIM([Text]) // إزالة المسافات
UPPER([Text]) // أحرف كبيرة
LOWER([Text]) // أحرف صغيرة
// دوال التاريخ:
TODAY() // تاريخ اليوم
YEAR([Date]) // السنة
MONTH([Date]) // الشهر
DAY([Date]) // اليوم
DATEDIFF([StartDate], [EndDate], DAY) // الفرق بالأيام
// دوال منطقية:
IF([Value] > 100, "عال", "منخفض") // شرط بسيط
SWITCH([Category],
1, "منخفض",
2, "متوسط",
3, "عال") // تبديل
AND([Condition1], [Condition2]) // و منطقي
OR([Condition1], [Condition2]) // أو منطقي
NOT([Condition]) // نفي منطقي
/*
7. دوال DAX المتقدمة:
*/
// دوال السياق:
CALCULATE(SUM(Sales[Amount]), // إعادة حساب
Sales[Category] = "A")
// دوال التوقيت:
TOTALYTD(SUM(Sales[Amount]), // السنة حتى التاريخ
'Date'[Date])
SAMEPERIODLASTYEAR(SUM(Sales[Amount])) // نفس الفترة السنة الماضية
// دوال النافذة الزمنية:
DATESINPERIOD('Date'[Date], // التواريخ في فترة
LASTDATE('Date'[Date]),
-30, DAY)
// دوال التصفية:
ALL(Sales) // جميع الصفوف
FILTER(Sales, Sales[Amount] > 100) // تصفية
ALLEXCEPT(Sales, Sales[Region]) // جميع ما عدا
// دوال المرتبة:
RANKX(ALL(Sales[Product]), // الترتيب
SUM(Sales[Amount]))
// دوال الإحصاء:
STDEV.S(Sales[Amount]) // الانحراف المعياري
MEDIAN(Sales[Amount]) // الوسيط
PERCENTILE.INC(Sales[Amount], 0.9) // المئين
/*
8. التصورات البصرية:
أنواع الرسوم البيانية:
أ. للمقارنات:
- Column Chart: للمقارنات البسيطة
- Bar Chart: للفئات الطويلة
- Stacked Column: للتوزيع
- Waterfall: للتغيرات المتراكمة
ب. للاتجاهات:
- Line Chart: للاتجاهات الزمنية
- Area Chart: للكميات مع الاتجاه
- Ribbon Chart: للمقارنات المتعددة
ج. للنسب:
- Pie Chart: للنسب البسيطة
- Donut Chart: بديل للـ Pie
- Treemap: للتسلسل الهرمي
- Funnel: للمراحل
د. للعلاقات:
- Scatter Chart: للعلاقة بين متغيرين
- Bubble Chart: للعلاقة مع بعد ثالث
- Map: للبيانات الجغرافية
هـ. للجداول:
- Table: للبيانات التفصيلية
- Matrix: للجداول المحورية
- Card: لعرض القيم المفردة
9. تصميم لوحات التحكم:
مبادئ التصميم:
أ. التخطيط:
- ضع المعلومات الأهم في أعلى يسار
- استخدم Grid للتنسيق
- حافظ على تباعد متسق
ب. الألوان:
- استخدم palette محدودة (5-8 ألوان)
- اختر ألواناً متباينة
- استخدم ألواناً متسقة عبر جميع الصفحات
ج. التفاعل:
- أضف Slicers للتصفية
- استخدم Cross-filtering
- أضف Drill-through للتفاصيل
- استخدم Bookmarks للعروض
10. نشر ومشاركة التقارير:
خطوات النشر:
1. سجل الدخول إلى Power BI Service
2. أنشئ Workspace
3. انشر التقرير من Desktop
4. حدد أذونات الوصول
5. حدد جدول تحديث البيانات
ميزات المشاركة:
- Share reports with colleagues
- Create apps for distribution
- Embed in websites or applications
- Schedule data refresh
- Set up alerts
11. أمثلة عملية:
مثال 1: تقرير المبيعات
*/
// البيانات:
Sales Table: Product, Date, Amount, Region
Products Table: ProductID, Category, Price
Date Table: Date, Year, Month, Quarter
// المقاييس:
Total Sales = SUM(Sales[Amount])
Sales LY = CALCULATE([Total Sales], SAMEPERIODLASTYEAR('Date'[Date]))
Sales Growth = DIVIDE([Total Sales] - [Sales LY], [Sales LY])
Average Sale = AVERAGE(Sales[Amount])
Sales Count = COUNTROWS(Sales)
// التصورات:
1. Card Visuals: Total Sales, Sales Growth, Average Sale
2. Line Chart: Monthly Sales Trend
3. Column Chart: Sales by Region
4. Pie Chart: Sales by Category
5. Matrix: Sales by Product and Month
// التفاعل:
- Slicer for Year
- Slicer for Region
- Cross-filtering between visuals
- Drill-through to Product details
/*
مثال 2: تحليل العملاء
*/
// البيانات:
Customers Table: CustomerID, Name, City, JoinDate
Orders Table: OrderID, CustomerID, Date, Amount
// المقاييس:
Customer Count = DISTINCTCOUNT(Orders[CustomerID])
Avg Order Value = DIVIDE([Total Sales], [Order Count])
Customer Lifetime Value =
CALCULATE([Total Sales],
ALL('Date'),
'Date'[Date] <= MAX('Date'[Date]))
New Customers =
CALCULATE([Customer Count],
FILTER(Customers,
Customers[JoinDate] >= MIN('Date'[Date]) &&
Customers[JoinDate] <= MAX('Date'[Date])))
// التصورات:
1. Map: Customers by City
2. Funnel: Customer Journey
3. Scatter: Order Value vs Frequency
4. Waterfall: Customer Acquisition and Churn
5. Gauge: Customer Satisfaction Score
/*
مثال 3: تحليل الموارد البشرية
*/
// البيانات:
Employees Table: EmployeeID, Name, Department, HireDate, Salary
Attendance Table: EmployeeID, Date, Status, Hours
// المقاييس:
Employee Count = COUNTROWS(Employees)
Avg Salary = AVERAGE(Employees[Salary])
Turnover Rate =
DIVIDE(
CALCULATE([Employee Count],
Employees[TerminationDate] <> BLANK()),
[Employee Count]
)
Avg Attendance =
AVERAGEX(
VALUES(Employees[EmployeeID]),
CALCULATE(AVERAGE(Attendance[Hours]))
)
// التصورات:
1. Donut Chart: Employees by Department
2. Line Chart: Employee Turnover Trend
3. Heatmap: Attendance by Day and Department
4. Bullet Chart: Salary Ranges
5. Table: Employee Performance Metrics
/*
12. أفضل الممارسات:
أ. تصميم البيانات:
- استخدم Star Schema
- أنشئ Date Table منفصلة
- قلل عدد الجداول غير الضرورية
- استخدم أسماء واضحة للأعمدة
ب. الأداء:
- استخدم DirectQuery للبيانات الكبيرة
- قلل عدد التصورات في صفحة واحدة
- استخدم Aggregations
- نظم البيانات في Power Query قبل التحميل
ج. التصميم:
- استخدم Themes متسقة
- اختر أنواع الرسوم المناسبة
- حافظ على البساطة
- اختبر على أجهزة مختلفة
د. التوثيق:
- وضح المقاييس
- أضف Descriptions للتصورات
- أنشئ Documentation Page
- احفظ Bookmarks للعروض
13. مصادر تعليمية:
- Microsoft Learn: Power BI learning paths
- Power BI Community: forums and blogs
- YouTube: Guy in a Cube, Curbal
- Books: "The Definitive Guide to DAX"
- Courses: Coursera, Udemy, LinkedIn Learning
14. شهادة Power BI:
- PL-300: Microsoft Power BI Data Analyst
- Topics: Prepare, Model, Visualize, Analyze data
- Format: Multiple choice, case studies
- Duration: 2 hours, 40-60 questions
15. نصائح احترافية:
- تعلم DAX بشكل جيد
- تمرن على مجموعات بيانات حقيقية
- تابع Power BI Community
- اشترك في تحديثات Microsoft
- أنشئ محفظة أعمال (Portfolio)
*/
هندسة تحليل البيانات
طبقة البيانات
قواعد البيانات، ملفات CSV، Excel، APIs
طبقة المعالجة
Python (Pandas, NumPy)، تنظيف البيانات، التحويل
طبقة التحليل
الإحصائيات، النمذجة، استخراج الرؤى
طبقة العرض
Power BI، Excel، التقارير، لوحات التحكم
أدوات محلل البيانات
Python
لغة البرمجة الرئيسية للتحليل والتصور
SQL
لغة البرمجة لاستعلام وإدارة قواعد البيانات
Power BI
أداة Microsoft لتحليل وتصور البيانات
المزايا والتحديات
المزايا
- طلب عالي: هناك طلب كبير على محللي البيانات، خاصة في الشركات التي تعتمد على البيانات لاتخاذ القرارات
- أدوات مجانية: معظم الأدوات المستخدمة مثل Python و Pandas و SQL مجانية ومفتوحة المصدر
- مجتمع كبير: Python و SQL لديهما مجتمعات نشطة توفر الدعم والموارد
- إبداع لا محدود: يمكنك إنشاء تقارير ولوحات تحكم تفاعلية تساعد الشركات في اتخاذ قرارات أفضل
- تأثير مباشر: يمكنك رؤية تأثير عملك مباشرة على قرارات العمل
التحديات
- منحنى التعلم الحاد: يتطلب فهماً جيداً لـ Python، SQL، وأساسيات تحليل البيانات
- جودة البيانات: قد تواجه بيانات غير نظيفة أو غير مكتملة
- تحديثات متكررة: الأدوات والتقنيات تتطور باستمرار مما يتطلب تحديث المعرفة بشكل منتظم
- الضغط الوظيفي: قد يكون هناك ضغط لتقديم نتائج وتحليلات في وقت قصير
أنواع مشاريع محلل البيانات
تحليل المبيعات
تحليل بيانات المبيعات، الربحية، وأداء المنتجات
تحليل أداء الأعمال
مراقبة KPIs، الكفاءة، والإنتاجية
تحليلات العملاء
تحليل سلوك العملاء والاحتفاظ بهم
الخلاصة
محلل البيانات أصبح دوراً حيوياً في جميع الشركات التي تعتمد على البيانات. من خلال إتقان Python، SQL، Excel، Power BI، وتقنيات تحليل البيانات، يمكنك تحويل البيانات الخام إلى رؤى قابلة للتنفيذ تساعد في اتخاذ قرارات أفضل.
نصائح للبدء:
- ابدأ بتعلم Python جيداً فهو الأساس لجميع عمليات التحليل
- تعلم SQL جيداً للتعامل مع قواعد البيانات
- تمرن على مجموعات بيانات حقيقية من Kaggle أو مواقع مفتوحة
- أنشئ محفظة أعمال (portfolio) بمشاريع حقيقية
- تابع التطورات في مجال تحليل وتصور البيانات