אזהרה: האם מחירי הטיסות הולכים לעלות? פרויקט דאטה אנליסט – חלק א'

הקדמה

בפוסט הזה נתחיל קו חדש של פוסטים – העוסקים בהמחשה של מה דאטה אנליסט עושה דרך Case Studies.

אז כחלק ממגמה הולכת ומתחזקת של שיתוף נתונים, פועל מזה זמן אתר בשם data.gov.il.
באתר משותפים נתונים הקשורים למשרדי הממשלה בישראל, ורשויות נוספות הקשורות למדינה כמו הלשכה המרכזית לסטטיסטיקה וכיו"ב.

האתר הזה, כמו אתרים דומים בעולם, מהווה אוצר אדיר של נתונים שרק ממתינים לניתוח ולפיתוח יישומים.

מאחר וכאנשי דאטה אנחנו מחפשים את התובנות והדפוסים בנתונים האלה – החלטתי לתחקר קצת נתונים מסוימים.
מאחר ואחד התחומים שהכי מעניינים אותי הוא תחום התעופה – התחלתי לחפש נתונים מעניינים באתר. מהר מאוד מצאתי שם לוח טיסות יוצאות ונכנסות בנתב"ג – של רשות שדות התעופה.
https://data.gov.il/dataset/flydata

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

אז החלטתי להתחיל לתחקר קצת את הנתונים שם ולשתף את התהליך הטיפוסי שדאטה אנליסט אמור לבצע בדרך לקבלת תובנות – ולהבין מה אפשר להוציא מהנתונים.

חשוב לי להבהיר, שהמטרה של הפוסט היא להמחיש את התהליך של ההבנה מה אפשר לעשות עם נתונים.
לכן – הדגש כאן יהיה על התהליך והשלבים של הניתוח האנליטי – ופחות על הצד הטכני של הקוד (Python+SQL).

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

 

אז מה אפשר להוציא מלוח טיסות?

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

נתוני הטיסות כוללים נתונים המתעדכנים אחת ל-15 דקות, והם נגישים או באמצעות הורדת קובץ CSV או באמצעות API.
הנה לוח הטיסות – לצורך המחשה (צילום מסך):

דוגמה ללוח הטיסות בנתב"ג (מקור: data.gov.il)

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

אז מה יש לנו פה?

אז לאחר הורדת הקובץ – התחלתי לבדוק מה אפשר לנתח בו שיוכל להציף תובנות 'מעניינות'.

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

בכל נתון חדש שאתם מקבלים – נסו תמיד לחשוב מה אפשר להצליב שם – גם אם מדובר בטבלה אחת…

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

הצלבה נוספת נוגעת לטיסות 'Code Share' – כאלו המבוצעות ע"י חברה אחרת.
זיהוי החברה האמיתית המפעילה את הטיסה היא עוד תובנה מעניינת.
היא אפילו די הכרחית – אחרת אנחנו עלולים לקבל מצב, שבו החברה מפורטוגל היא החברה הזרה הכי פעילה בנתב"ג (ולא – זה לא היה השבוע של האירוויזיון…)

אגב – בשביל להגיע להיבטים כאלה חשוב מאוד להכיר קצת את עולם התוכן של הנתונים.

בלי היכרות עם עולם התוכן נוכל לנתח את הנתונים בלי להבין בכלל את המשמעות העסקית שלהם – ולקבל שטויות.

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

לרוב – תובנות פשוטות הן התחלה יפה, אבל ממידע של יום אחד (טיסות בפועל – ללא טיסות עתידיות) קשה לקבל תובנות משמעותיות.
מדוע? כי אם יש רק טיסה יומית אחת ליעד מסוים – אין אפשרות של ממש לנתח אותה בצורה עמוקה…
המסקנה – בשביל להגיע לתובנות עוצמתיות נדרש קצת יודע מידע – בדגש על היסטוריה ארוכה יותר של נתונים…

למה דאטה אנליסט צריך להכיר Python

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

השלב הראשון הוא יצירת הטבלה שבה נשמור את הנתונים אחת לקבוע זמן מסוים – נניח יום. במקרה הזה, מאחר ויש שמירה בכל רגע נתון של הטיסות ב-24 השעות האחרונות – נרצה לשמור את הנתונים לפחות פעם ביום (אפילו פעמיים ביום – בשביל שלא יהיו 'חורים').

לאחר מכן – צריך לטעון את הנתונים העדכניים לטבלה הרלוונטית.
בשביל זה הכי פשוט לגשת אחת ליום למאגר, להוריד קובץ CSV עם הטיסות ולשמור ידנית ב-DB
המשמעות היא שתהיה כפילות בטיסה מסוימת – בהתאם למועד הריצה – ולכן חשוב לזכור להוסיף עוד שדה של תאריך טעינה של הנתונים.

הדרך המתקדמת יותר היא להשתמש ב-API , וליצור סקריפט שמתממשק לנתונים, ואז שומר אותם ישירות ב-DB שלנו.
עבודה קלאסית ל-Python…

סקריפט הריצה ב-Python ללוח הטיסות (מתוך האתר data.gov.il)

ברשות שדות התעופה הגדילו לעשות, ואפילו צירפו קוד ב-Python ששולף את כלל הטיסות באמצעות ה-API.

כל מה שנותר לעשות הוא לקחת את הרשימה (פורמט json), להוציא ממנה את השדות הרלוונטיים, לשמור אותה במערך – ואז להוסיף את הנתונים לטבלה ב-SQL.
לא משהו שכמה שעות עבודה וקצת קוד לא יכולים לפתור…

כמובן שאפשר ומומלץ לתזמן את הריצה של הסקריפט – מה שיסגור את תהליך שמירת הנתונים ויהפוך אותו לאוטומטי. זה כבר קצת יותר מורכב – ולא ניגע בזה כאן…

וזהו – לאחר מספר ימים כבר יש בסיס נתונים מכובד להתחלת הניתוחים.

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

וזהו – בסיס הנתונים מוכן לניתוח!

בחלק הבא נעבור על איך מנתחים את בסיס הנתונים, כולל תהליכי העיבוד ב-SQL, ונקבל גם תשובה לשאלה המתבקשת:

האם מחירי הטיסות מישראל אכן הולכים לעלות?

נתראה בחלק הבא…

השארת תגובה