יחידה 9 / 11

ניתוח נתוני רכב עם Python: מקצה לקצה

רווחים:

  • יכולת ליצור זרימת עבודה ניתוחית שניתן לחזור עליה הטוענת ומנקה נתוני טלמטריה, בדיקה וייצור עם פנדות
  • יכולת להבין ולאמת את הפלט שורה אחר שורה תוך קבלת קוד, תכונות וסיוע בהדמיה מבינה מלאכותית
  • יכולת ביקורת תוצאות ניתוח עבור עקביות יחידה, דליפת נתונים ושחזור

ביחידות קודמות השתמשנו בבינה מלאכותית כמו "יועץ". ביחידה זו, אנו הולכים צעד אחד קדימה ומקים זרימת עבודה המנתחת את נתוני הרכב במו ידינו, באמצעות Python. המטרה היא לא להפוך אותך למפתח תוכנה; זה ליצור מהנדס שיוכל להבין ולאמת את הקוד הזה שורה אחר שורה תוך קבלת סיוע בקוד מ-AI. מכיוון שהקוד המיוצר על ידי AI יכול להיות פגום, בדיוק כמו הטקסט שמופק על ידי AI; עלול לבלבל נפח, דליפת נתונים, מרכז עמודה שגויה. להפעיל את הקוד מבלי להבין אותו זה כמו לפרסם דוח לא חתום.

פייתון למה? מכיוון שזהו הסטנדרט דה פקטו בניתוח נתונים: אתה יכול בקלות לעבד נתוני טלמטריה, בדיקה וייצור עם ספריות פנדה (נתונים טבלאיים), numpy (עיבוד מספרי), matplotlib (עלילה) ו-sikit-learn (למידת מכונה).

שישה שלבים לניתוח שניתן לשחזר

ניתוח מוצק תמיד עוקב אחר אותה מסגרת:

  1. טען: קרא נתונים מהקובץ.
  2. בדוק: מימד, עמודות, סוגי נתונים, ערכים חסרים.
  3. נקי: חסר/חריג, יחידה, תיקון חותמת זמן.
  4. חילוץ תכונה: גזור משתנים בעלי משמעות.
  5. ניתוח/מודל: סטטיסטיקה, הדמיה או מודל.
  6. אמת ודווח: מתן תוצאה, בדיקת נפח/דליפה, רישום.
טיפ: כשאתה מבקש מה-AI קוד, אמור "הגיב מה אתה עושה בכל שלב וכתוב את ההנחות שלך." אז אתה יכול לאמת את הקוד בזמן שאתה קורא אותו.

דוגמה שלב אחר שלב: ניתוח טלמטריה

הקוד הבא טוען רשומת CAN/טלמטריה ועושה בדיקה בסיסית. (הערה: ודא שאתה מבין את הקודים לפני הפעלתם; שמות העמודות משתנים בהתאם לנתונים שלך.)

ייבוא פנדות כ-pd# 1) טען: CSV מנוקד למחצה, עמודה ראשונה timetampdf = pd.read_csv("telemetry.csv", parse_dates=["time"])# 2) Checkprint(df.shape) # כמה שורות, כמה עמודותprint(df.dtypes) # סוג של כל עמודה (מספר) (מספר טקסט או הדפסה). מספר הערכים החסרים לכל הדפסת עמודה(df.describe()) # סטטיסטיקות סיכום: דקה, מקסימום, ממוצע

הפלט describe() הוא ההזדמנות הראשונה שלך לאמת: אם הערך המקסימלי של מהירות המנוע הוא 45,000 סל"ד (מנוע נוסעים טיפוסי ~7,000 סל"ד), יש תקלה ביחידה או בחיישן.

פקודות הפנדות הנפוצות ביותר בשלב הביקורת ומה הן עושות:

פקודה

מה עושה

מה זה מאשר?

df.shape

מספר שורות/עמודות

האם זה הגודל הצפוי?

df.dtypes

סוגי עמודות

האם עמודת המספרים הפכה לטקסט?

df.isna().sum()

חסרה ספירת ערכים

כמה מקום יש?

df.describe()

מינימום/מקסימום/ממוצע

האם זה הגיוני פיזית?

df.duplicated().sum()

שורה כפולה

האם יש רישום כפול?

# 3) ברור: סמן ערכים בלתי אפשריים מבחינה פיזית

זהירות: אין למחוק את החריג מיד; ראשית להבין מדוע זה חריג. האם זה אירוע אמיתי (חימום פתאומי) או כשל בחיישן? מחיקה עיוורת עשויה להסתיר את התקלה האמיתית.

# 4) תכונת חילוץ: קצב עליית הטמפרטורה (נגזרת)df = df.sort_values("time")df["sic_increase_speed"] = df["motor_sic"].diff() / df["time"].diff().dt.total_seconds()# 5) Simple visualizationimport mattplot. pltplt.plot(df["זמן"], df["motor_sic"])plt.xlabel("זמן"); plt.ylabel("טמפרטורת מנוע (C)")plt.title("קורס טמפרטורת מנוע")plt.show()

מניעת דליפת נתונים בפייתון

הטעות המסוכנת ביותר בבניית מודל חיזוי היא דליפת נתונים (יחידה 5): כאשר המודל רואה מידע שלא ניתן לדעת בזמן החיזוי. כלל הזהב להימנע מכך בסדרות זמן: להתאמן עם העבר, לבדוק עם העתיד - בלי דשדוש אקראי.

מאת sklearn.model_selection import train_test_split# FALSE: פיצול אקראי של סדרת הזמן מדליף את העתיד# df[df["זמן"] > סף] # 20% אחרונים בעתיד

זהירות: train_test_split מערבב את הנתונים כברירת מחדל (shuffle=True). בסדרת הזמן, זה מבלבל בין העתיד לחינוך ומייצר ציון גבוה כוזב. אם AI עשה זאת בקוד שהוא מייצר, הקפד לתקן את זה.

עקביות היחידה: רוצח שקט

השגיאות הכי ערמומיות ברכב הן שגיאות יחידות: קמ"ש ל-m/s, Nm ל-lb-ft, bar ל-kPa, °C עד K. ניהול מילון של מהי היחידה של כל עמודה בניתוח ורישום ההמרות מציל חיים בבירור.

# תעד את היחידות במפורש = {"speed": "km/h", "motor_sic": "C", "pressure": "bar"}# המרה מפורשת במידת הצורך (km/h -> m/s)df["speed_ms"] = df["speed"] / 3.6

מיני מקרי מבחן

מקרה 1 - נתפסה שגיאה עם describe(). אנליסט מריץ את הקוד מה-AI ועורך הערכת טווח; התוצאה גבוהה באופן אבסורדי. כאשר אנו מסתכלים על הפלט describe(), אנו רואים כי קיבולת הסוללה מוזנת ב-Wh בקווים מסוימים וב-kWh באחרים (פי 1000 הפרש). כאשר מביאים את היחידה לסוג אחיד, התוצאה משתפרת. מסקנה: נתון סיכום פשוט מנע תחזית גרועה.

מקרה 2 - מלכודת בלבול. דגם שחיקת הבלמים של מתמחה היה מדויק ב-98% בסט המבחן. כאשר הקוד נבדק, ניתן לראות ש-train_test_split(shuffle=True) וסדרות הזמן מעורבבים, כלומר נקודות עתידיות דולפות לאימון. כאשר מחלקים אותו בזמן, הדיוק יורד ל-80%, אך כעת הוא ריאלי. מסקנה: רק בגלל שקוד ה-AI עבד, זה לא היה נכון; אנושי תפס את הדליפה.

מקרה 3 - הבנת החריג. ברשומת עמידות, קוד הבינה המלאכותית מוחק אוטומטית ערכי מתח חריגים. המהנדס מסתכל על הנקודות שנמחקו; אלו היו בדיוק רגעי התחלת הסדק שהבדיקה התעניינה בהם. המחיקה מוסרת וההפרות נלקחות לבדיקה נפרדת. תוצאה: תחת "ניקוי" ניתן למחוק את האות האמיתי; שאלה בכל שלב.

תבניות בקשות

תבנית 1 - קוד בקשה (עם הסבר):

תפקיד: אתה מנטור מנתח נתונים של Python. משימה: כתוב קוד הטוען ובודק CSV של טלמטריה. הקשר: עמודות: זמן, מהירות (קמ"ש), engine_sic (C), מהפכה (סל"ד). אילוץ: הערה לכל שורה; הסבר איזו בדיקה נעשתה ומדוע; הוסף בדיקת ערך בלתי אפשרי פיזית; מוחק שום דבר בשקט. פלט: קוד הערה + איזה פלט עלי להסתכל ולמה.

תבנית 2 - בדיקת דליפות:

תפקיד: אתה סוקר קוד למידת מכונה. משימה: בדוק את קוד פיצול האימון/בדיקה הבא עבור דליפות נתונים. הקשר: זוהי סדרת זמן (טלמטריה של רכב). אילוץ: הזהר אם יש ערבוב אקראי; להציע ולהצדיק פיצול לפי זמן. פלט: ממצאים + קוד מתוקן + הסבר.

תבנית 3 - אימות יחידה:

תפקיד: אתה מבקר איכות נתונים. משימה: הצע בדיקות שמחפשות חוסר עקביות של יחידה ב-DataFrame. הקשר: הקיבולת עשויה להיות קילוואט-שעה בשורות מסוימות ו-Wh באחרות. פלט: בדוק את הקוד + איך למצוא את הדפוס החשוד.

תבנית 4 - הדמיה + הערה:

תפקיד: אתה מומחה להדמיית נתונים. משימה: כתוב קוד המשרטט את מהלך טמפרטורת המנוע וקצב העלייה. אילוץ: תיוג את הצירים עם היחידה; לסמן חזותית את האנומליה; אל תטען לאשמה מוחלטת בעת פירוש הגרף. פלט: קוד + מה לחפש בגרף.

הנחיה חלשה / הנחיה חזקה

הנחיה חלשה:

בנה מודל עם הנתונים האלה.

לא ברור איזו מטרה, איזה תא, איזה אימות; AI יכול להוציא קוד מקושקש, דולף, עיוור יחידה.

הנחיה עוצמתית:

תפקיד: אתה מנטור Python ML. משימה: כתוב זרימת עבודה ראשונית כדי לחזות שחיקה של רפידות הבלמים ולהדגים מלכודות אימות. הקשר: טלמטריית סדרת זמן; יעד: עובי הכרית הנותר. אילוץ: פיצול סדרות זמן לפי זמן (ללא עירוב); סמן תכונות בסיכון לדליפת נתונים; יחידות מסמכים; לפרש כל שלב; רשום אילו בדיקות נדרשות לפני שהתוצאה יוצאת לשטח. פלט: קוד הערה + רשימת אימות.

טעויות נפוצות

  • מפעיל את הקוד מבלי להבין אותו. קוד AI עשוי גם להיות פגום; קרא שורה אחר שורה.
  • ערבוב סדרות זמן. shuffle=True מדליף את העתיד ומפיק ציון מזויף.
  • מחק באופן עיוור את החריג. ניתן לנקות את האות בפועל (הופעת תקלה).
  • לא מתעד את היחידה. שגיאות כמו קמ"ש לעומת m/s, ו"ש לעומת קילו שעה גדלות בשקט.
  • דילוג על שלב describe()/check. רוב השגיאות מופיעות בסטטיסטיקות הסיכום הראשון.

לסיכום

  • Python (פנדה, numpy, matplotlib, scikit-learn) הוא הסטנדרט דה פקטו של ניתוח נתוני רכב.
  • ניתוח חוזר: לטעון, לבדוק, לנקות, להגדיר, לנתח, לאמת ולדווח.
  • הכרחי להבין ולאמת את הקוד שה-AI מייצר שורה אחר שורה; זה שזה עובד לא אומר שזה נכון.
  • לשמור על הבחנה בין עבר/עתיד בסדרות זמן; ערבוב אקראי יוצר דליפת נתונים.
  • עקביות יחידה ופרשנות חריגה הן נקודות אימות שקטות אך קריטיות.

משימת יישום

קח מערך נתונים קטן (טלמטריה אמיתית או סינתטית). (1) בעקבות המסגרת בת ששת השלבים, הפק את קוד הטעינה והבקרה באמצעות תבנית 1 ואשר שהבנת כל שורה. (2) מצא לפחות ערך חשוד אחד בפלט describe() וחקור מדוע. (3) במשימת חיזוי, תזמן את חלוקת האימון/מבחן ובדוק את הסיכון לדליפה באמצעות תבנית 2. (4) תעד את היחידה של כל עמודה שבה אתה משתמש במילון.

רשימת בדיקה

  • [ ] הקמתי את הניתוח עם מסגרת של שישה שלבים.
  • [ ] קראתי והבנתי את הקוד שמפיק AI שורה אחר שורה.
  • [ ] חיפשתי ערכים חשודים עם describe()/audit.
  • [ ] חילקתי את סדרת הזמן לפי זמן (ללא ערבוב).
  • [ ] סימנתי את התכונות שנמצאות בסיכון לדליפת נתונים.
  • [ ] תיעדתי את היחידה של כל טור וכתבתי את ההמרות במפורש.