ما هو محلل البيانات؟

محلل البيانات (Data Analyst)

محلل البيانات هو متخصص يجمع البيانات وينظمها ويحللها لاستخراج رؤى قابلة للتنفيذ تساعد الشركات في اتخاذ قرارات مستنيرة.

تحليل البيانات

استخراج رؤى قابلة للتنفيذ

التقارير

إنشاء تقارير ولوحات تحكم

قواعد البيانات

إدارة وتحليل قواعد البيانات

البرمجة

Python و SQL للتحليل

اللغات والأدوات المستخدمة

Python

اللغة الأساسية للتعامل مع البيانات وتحليل النماذج

SQL

لإدارة قواعد البيانات واستعلامات البيانات

Excel

للتحليل البسيط والعرض المرئي للبيانات

Power BI

لإنشاء تقارير ولوحات تحكم تفاعلية

Pandas

لمعالجة وتحليل البيانات في Python

Matplotlib

لإنشاء الرسوم البيانية في Python

مهارات محلل البيانات

1

Python Programming

إتقان Python للتحليل والتصورات

2

Pandas & NumPy

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

3

SQL

استعلامات قواعد البيانات والتحليل

4

تصور البيانات

مبادئ تصميم الرسوم البيانية والتقارير

5

Power BI

تحليل وتصور البيانات وإنشاء التقارير

6

الإحصائيات

فهم الإحصائيات ومؤشرات الأداء KPIs

خارطة التعلم خطوة بخطوة

1

الخطوة 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

الخطوة 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

الخطوة 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

الخطوة 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

الخطوة 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

لغة البرمجة الرئيسية للتحليل والتصور

Pandas NumPy Matplotlib

SQL

لغة البرمجة لاستعلام وإدارة قواعد البيانات

MySQL PostgreSQL SQL Server

Power BI

أداة Microsoft لتحليل وتصور البيانات

DAX Power Query تصور

المزايا والتحديات

المزايا

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

التحديات

  • منحنى التعلم الحاد: يتطلب فهماً جيداً لـ Python، SQL، وأساسيات تحليل البيانات
  • جودة البيانات: قد تواجه بيانات غير نظيفة أو غير مكتملة
  • تحديثات متكررة: الأدوات والتقنيات تتطور باستمرار مما يتطلب تحديث المعرفة بشكل منتظم
  • الضغط الوظيفي: قد يكون هناك ضغط لتقديم نتائج وتحليلات في وقت قصير

أنواع مشاريع محلل البيانات

تحليل المبيعات

تحليل بيانات المبيعات، الربحية، وأداء المنتجات

مبيعات أرباح اتجاهات

تحليل أداء الأعمال

مراقبة KPIs، الكفاءة، والإنتاجية

KPIs كفاءة إنتاجية

تحليلات العملاء

تحليل سلوك العملاء والاحتفاظ بهم

عملاء سلوك تحليل

الخلاصة

محلل البيانات أصبح دوراً حيوياً في جميع الشركات التي تعتمد على البيانات. من خلال إتقان Python، SQL، Excel، Power BI، وتقنيات تحليل البيانات، يمكنك تحويل البيانات الخام إلى رؤى قابلة للتنفيذ تساعد في اتخاذ قرارات أفضل.

نصائح للبدء:

  • ابدأ بتعلم Python جيداً فهو الأساس لجميع عمليات التحليل
  • تعلم SQL جيداً للتعامل مع قواعد البيانات
  • تمرن على مجموعات بيانات حقيقية من Kaggle أو مواقع مفتوحة
  • أنشئ محفظة أعمال (portfolio) بمشاريع حقيقية
  • تابع التطورات في مجال تحليل وتصور البيانات