الرئيسية قاعدة المعرفة البرمجة والمنطق بايثون للمهندسين: من الصفر إلى تحليل البيانات
البرمجة والمنطق

بايثون للمهندسين: من الصفر إلى تحليل البيانات

لماذا Python للمهندس الصناعي؟

تخيّل أنك تعمل في مصنع فيه عشرات الحساسات — حرارة، ضغط، اهتزاز، تدفق — وكل حساس يُسجّل قراءة كل ثانية. في نهاية اليوم عندك ملايين الأرقام. كيف تحلّلها؟ كيف تكتشف أن محركاً بدأ يسخن أكثر من اللازم؟

هنا تأتي Python — اللغة الأسهل تعلماً والأكثر استخداماً في تحليل البيانات والذكاء الاصطناعي. لا تحتاج خبرة برمجية سابقة لتبدأ، وستجد مكتبات جاهزة لكل مهمة تحتاجها كمهندس.

لماذا Python تحديداً؟

الميزة التفاصيل
سهولة الكتابة الكود يُقرأ كأنه إنجليزي عادي
مكتبات هندسية NumPy, Pandas, Matplotlib, SciPy
ذكاء اصطناعي TensorFlow, scikit-learn, PyTorch
أتمتة قراءة ملفات، إرسال تقارير، التحكم بأجهزة
مجتمع ضخم لكل سؤال تجد عشرات الإجابات

المتغيرات وأنواع البيانات

المتغير في Python صندوق تحفظ فيه قيمة. لا تحتاج تحديد النوع مسبقاً — Python تفهم النوع تلقائياً:

# بيانات حساس الحرارة
temperature = 78.5          # رقم عشري (float)
machine_id = "CNC-042"      # نص (string)
is_running = True            # منطقي (boolean)
sensor_count = 12            # رقم صحيح (integer)

# قائمة قراءات حساس
readings = [78.5, 79.1, 80.3, 77.8, 81.2]

# قاموس لمعلومات آلة
machine = {
    "id": "CNC-042",
    "type": "مخرطة",
    "location": "القاعة 3",
    "max_temp": 95.0
}

أنواع البيانات الأساسية:

  • int — أرقام صحيحة: 42, -7, 1000
  • float — أرقام عشرية: 3.14, 78.5
  • str — نصوص: "مرحباً", "CNC-042"
  • bool — قيم منطقية: True أو False
  • list — قوائم مرتبة: [1, 2, 3]
  • dict — قواميس (مفتاح: قيمة): {"temp": 78.5}

الشروط: اتخاذ القرارات

تصوّر أنك تراقب حرارة محرك. إذا تجاوزت حداً معيناً، تريد إنذاراً:

temperature = 88.5
max_allowed = 85.0
critical = 95.0

if temperature > critical:
    print("تحذير حرج! أوقف المحرك فوراً!")
    # send_emergency_stop()
elif temperature > max_allowed:
    print(f"تنبيه: الحرارة {temperature}°C تجاوزت الحد المسموح")
    # send_alert_to_operator()
else:
    print("الحرارة ضمن النطاق الطبيعي")

لاحظ بساطة الكود — يُقرأ تقريباً كأنه جملة إنجليزية عادية.

الحلقات: تكرار المهام

في الصناعة، كثيراً ما تحتاج فحص مجموعة قراءات أو معالجة بيانات يوم كامل:

# حلقة for: فحص كل قراءة
readings = [78.5, 85.2, 92.1, 77.3, 88.9, 96.5]
max_allowed = 90.0

alerts = []
for i, temp in enumerate(readings):
    if temp > max_allowed:
        alerts.append(f"القراءة {i+1}: {temp}°C - تجاوز!")

print(f"عدد التجاوزات: {len(alerts)}")
for alert in alerts:
    print(f"  - {alert}")
# حلقة while: مراقبة مستمرة
import time

def read_sensor():
    """محاكاة قراءة حساس"""
    import random
    return round(random.uniform(70, 100), 1)

monitoring = True
while monitoring:
    temp = read_sensor()
    print(f"الحرارة الحالية: {temp}°C")
    if temp > 95:
        print("إنذار! إيقاف المراقبة")
        monitoring = False
    time.sleep(1)  # انتظار ثانية واحدة

الدوال: تنظيم الكود

الدالة هي كتلة كود تنفّذ مهمة محددة. بدل تكرار نفس الكود، تكتبه مرة واحدة وتستدعيه عند الحاجة:

def check_temperature(temp, machine_name, max_limit=85.0):
    """
    فحص حرارة آلة وإرجاع حالتها
    """
    if temp > max_limit * 1.1:  # أكثر من 110% من الحد
        return "critical", f"{machine_name}: حرارة حرجة ({temp}°C)"
    elif temp > max_limit:
        return "warning", f"{machine_name}: تجاوز الحد ({temp}°C)"
    else:
        return "normal", f"{machine_name}: طبيعي ({temp}°C)"


# استخدام الدالة
machines = [
    ("CNC-01", 82.3),
    ("CNC-02", 91.7),
    ("مضخة-05", 96.2),
    ("ضاغط-03", 78.1),
]

for name, temp in machines:
    status, message = check_temperature(temp, name)
    if status != "normal":
        print(f"[{status.upper()}] {message}")

NumPy: الحساب العلمي السريع

NumPy هي المكتبة الأساسية للحساب العلمي في Python. تتعامل مع المصفوفات والعمليات الرياضية بسرعة فائقة:

import numpy as np

# قراءات حساس اهتزاز لمدة ساعة (3600 قراءة)
vibration_data = np.random.normal(loc=2.5, scale=0.8, size=3600)

# إحصائيات أساسية
print(f"المتوسط:        {np.mean(vibration_data):.2f} mm/s")
print(f"الانحراف المعياري: {np.std(vibration_data):.2f} mm/s")
print(f"القيمة القصوى:   {np.max(vibration_data):.2f} mm/s")
print(f"القيمة الدنيا:   {np.min(vibration_data):.2f} mm/s")

# كشف القراءات الشاذة (أكثر من 3 انحرافات معيارية)
mean = np.mean(vibration_data)
std = np.std(vibration_data)
anomalies = vibration_data[np.abs(vibration_data - mean) > 3 * std]
print(f"عدد القراءات الشاذة: {len(anomalies)}")

مقارنة أداء NumPy مع Python العادي:

العملية Python عادي NumPy
جمع مليون عنصر ~150 مللي ثانية ~1 مللي ثانية
ضرب مصفوفات 1000x1000 دقائق أجزاء من الثانية
التعامل مع الذاكرة غير فعّال محسّن جداً

Pandas: تحليل بيانات الحساسات

Pandas هي الأداة المفضلة لقراءة وتحليل البيانات الجدولية — وهي مثالية لبيانات الحساسات المخزّنة في ملفات CSV:

import pandas as pd

# قراءة ملف CSV لبيانات الحساسات
df = pd.read_csv("sensor_log.csv")

# عرض أول 5 صفوف
print(df.head())

تخيّل أن ملف CSV يحوي أعمدة: timestamp, machine_id, temperature, vibration, pressure

# إحصائيات سريعة
print(df.describe())

# ترشيح: فقط القراءات فوق 85 درجة
high_temp = df[df["temperature"] > 85]
print(f"عدد قراءات الحرارة العالية: {len(high_temp)}")

# تجميع: متوسط الحرارة لكل آلة
avg_per_machine = df.groupby("machine_id")["temperature"].mean()
print(avg_per_machine.sort_values(ascending=False))

# إضافة عمود جديد: هل الحرارة تجاوزت الحد؟
df["temp_alert"] = df["temperature"] > 85

# حفظ النتائج
df.to_csv("analyzed_data.csv", index=False)

مثال تطبيقي: تحليل بيانات يوم عمل كامل

تصوّر أنك استلمت ملف CSV فيه بيانات 24 ساعة من حساسات مصنع:

import pandas as pd
import numpy as np

# قراءة البيانات
df = pd.read_csv("factory_24h.csv", parse_dates=["timestamp"])

# 1. ملخص عام
print("=== ملخص يوم العمل ===")
print(f"عدد القراءات: {len(df):,}")
print(f"الفترة: من {df['timestamp'].min()} إلى {df['timestamp'].max()}")
print(f"عدد الآلات: {df['machine_id'].nunique()}")

# 2. اكتشاف التجاوزات
limits = {"temperature": 85, "vibration": 5.0, "pressure": 150}

for param, limit in limits.items():
    violations = df[df[param] > limit]
    pct = len(violations) / len(df) * 100
    print(f"\n{param}: {len(violations)} تجاوز ({pct:.1f}%)")
    if len(violations) > 0:
        worst = violations.loc[violations[param].idxmax()]
        print(f"  أسوأ قراءة: {worst[param]} في {worst['timestamp']}")
        print(f"  الآلة: {worst['machine_id']}")

# 3. تحليل بالساعة: متى تكون المشاكل أكثر؟
df["hour"] = df["timestamp"].dt.hour
hourly_avg = df.groupby("hour")["temperature"].mean()
peak_hour = hourly_avg.idxmax()
print(f"\nأعلى متوسط حرارة في الساعة: {peak_hour}:00")

# 4. تقرير لكل آلة
print("\n=== تقرير الآلات ===")
for machine in df["machine_id"].unique():
    m_data = df[df["machine_id"] == machine]
    avg_t = m_data["temperature"].mean()
    max_t = m_data["temperature"].max()
    alerts = len(m_data[m_data["temperature"] > 85])
    print(f"{machine}: متوسط={avg_t:.1f}°C, أعلى={max_t:.1f}°C, إنذارات={alerts}")

الخطوات التالية

بعد إتقان هذه الأساسيات، يمكنك التوسع في:

  • Matplotlib لرسم المخططات البيانية للحساسات
  • SciPy للتحليل الإحصائي المتقدم وتحليل فورييه
  • scikit-learn للتنبؤ بالأعطال قبل حدوثها (Predictive Maintenance)
  • openpyxl لتوليد تقارير Excel تلقائياً
  • التكامل مع PLCs عبر بروتوكول pymodbus أو opcua

Python ليست بديلاً عن لغات التحكم الصناعي مثل Structured Text أو Ladder Logic — لكنها الأداة المثالية لتحليل البيانات واتخاذ القرارات الذكية في المصنع.

Python data-analysis NumPy Pandas scripting automation بايثون تحليل البيانات البرمجة النصية المكتبات العلمية الأتمتة بالبرمجة معالجة البيانات