"מחר יהיה חם ומגניב ?" – ניתוח אקלים מבוסס BI ו – Big Data

8 בדצמבר 2013

אין תגובות

ערן שגיא מאת: ערן שגיא, מיקרוסופט ישראל

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

הטכנולוגיות שבהם אשתמש:

HDInsightAzure:  
http://www.youtube.com/watch?v=6ohnyOBTeYU

השירות מספק תשתית  Hadoop Cluster מבוססת Horton Works Data Platform והינו חלק משירותי ה – Azure (ענן) של מיקרוסופט. נתוני מטאורולוגיה בד"כ מכילים היקף עצום של נתונים, ומבנה הנתונים הנדרש עשוי להשתנות בצורה תכופה (הוספת / הסרת מאפיינים), בהתאם להשערת המחקר.
אחת הפלטפורמות הטבעיות לנושא הוא ה – Hadoop
.
השימוש בשירות ענן מאפשר לי לקבל בתוך מספר דקות Hadoop Cluster מתפקד, ללא המשאבים הנדרשים בהגדרת אחד בתשתית המקומית ובחיסכון זמן ניכר.

Power BI:
Power BI הוא שם המותג לכלל רכיבי ה – BI של מיקרוסופט.
מתוך מגוון הכלים והיכולות הנכללות בו אני בחרתי להתמקד הפעם ברכיבים הבאים:

Power Query– רכיב שאילתות מתקדם המאפשר לפתח בצורה ויזואלית, תהליכי טיפול במידע במהירות.
Power Pivot – מנוע ה – In-Memory המאפשר לבנות מודל נתונים במהירות ומציע ביצועים משופרים תודות להתבססות שלו על דחיסת נתונים בזיכרון המחשב.
Power View – רכיב דוחות Ad-Hoc המאפשר יכולות דיווח מתקדמות בתוך ה – Excel
.

מה אנחנו רוצים לבדוק ?

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

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

איך מתחילים ?

הערכות:

כמו תמיד בנתונים, איכות הנתונים תקבע את איכות המסקנות ומחשש לאפקט "GIGO" (Garbage In Garbage Out) , בחרתי להתבסס על מאגר מידע רשמי של השירות המטאורולוגי הישראלי: http://www.ims.gov.il/IMS/CLIMATE/Archive

מקור הנתונים יתבסס על קובץ הנתונים היומיים שכולל את טמפרטורת מקסימום ו – "משך זהירות שמש" ,עבור השנים 1970 – 2013 עבור תחנות המדידה של ת"א. (ת"א חוף, ויפו נמל).

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

עוברים לעבוד עם Big Data

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

 שלב ראשון: מקימים את ה – Hadoop Cluster

מתחברים לפורטל שירותי הענן של מיקרוסופט: www.windowsazure.com

לאחר פתיחת חשבון, נתחבר לפורטל השירותים. הקמת ה – Hadoop Cluster היא תהליך די פשוט, שמבוצע באמצעות Wizard:

1

 

נבחר ליצור Cluster חדש:

 2

ניתן לייצר cluster בגודל של 4 שרתי נתונים ועד 32 שרתים (יש 6 ליבות לכל שרת), המידע שלנו קטן ואנו נבחר באופציה הקטנה יותר (4 Nodes).

שלב שני: מעלים את נתוני מזג האוויר ל – Hadoop

התהליך די פשוט, בשלב ראשון נעביר את הקבצים ל – Storage שלנו בענן. אני נעזרתי ב – Azure Storage Explorer.

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

שירות ה- Hadoop עובד במקבצים של 64MB (ניתן להתאמה), כלומר כל קובץ עובר פיצול למקטעים בגדלים של עד 64MB וכל מקטע מוקצה לטובת יחידת עיבוד בודדת (מימוש באמצעות JVM) וכך נוצר עיבוד במקביל.

הקטנת גודל הקבצים או בהתאמה העדר איחוד שלהם לגודל בעל נפח משמעותי, יהפוך את העיבוד הראשוני לעיבוד לא יעיל, גודל הקבצים הקטן ימנע שימוש בעיבוד מקבלי רחב, והקבצים יטופלו בתצורת batch (כל job יכיל טיפול בקובץ בודד).

ישנם מספר שיטות לאיחוד נתונים לקובץ בעל נפח:
1. איחוד אירועים לכמות גדולה קודם לכתיבת ה – Stream ל –Hadoop (לדוגמה: Azure Worker Rule)

2. אפשרות אחרת היא שימוש ב – nested Json המכיל אירועים רבים.

הטיפול ב – JSON:
בגרסאות האחרונות של PIG LATIN קיים Loader מובנה המאפשר טעינה מסודרת של קבצי JSON. מאידך הרכיב הסטנדרטי איננו מתמודד עם Nested. הפתרון המקובל הוא שימוש בהרחבות, אחת הנפוצות בהם היא:  elephant-bird שפורסמה לראשונה על ידי חברת twitter עבור הקוד הפתוח.

אחד היתרונות בשימוש ב – Json הוא העדר הצורך לטפל בשורת הכותרת בקבצי CSV (במידה ונכללה בהם).

 שלב שלישי: עיבוד הנתונים

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

היות והנתונים במקרה שלנו שטוחים וסכמת הנתונים פשוטה, אני אשתמש במקור נתונים מבוסס CSV.

לצורך העיבוד, בחרתי להשתמש ברכיב ה – PIG.
מדובר ברכיב שפותח על ידי חברת Yahoo, המאפשר בסקריפט פשוט להגדיר עיבוד נתונים. הרכיב מבצע אופטימיזציה של התהליך ומייצר באופן אוטומטי את תהליכי ה – Map / Reduce
הנדרשים לצורך קבלת התוצאה.
בשפה של הרכיב נקראת PIG LATIN

מצ"ב דוגמת קוד:

3.3

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

ב. סכמת הנתונים מוגדרת בטעינה (אופציונאלי)
ג. לאחר ביצוע Group ו – MAX התוצאות מאוחסנות ב – Storage     

שלב רביעי – ניתוח התוצאות

לאחר סיום שלב הטעינה והעיבוד ב – Hadoop, יש בידנו את המקורות הבאים:
1.     Blob Storage
הכולל את נתוני המקור לכל תחנה
2.     Blob Storage
הכולל את תוצאת העיבוד (ממוצע יומי לעיר)
3.     קובץ אקסל מקומי הכולל את ה – Meta Data של התחנות.

שלב א' – טעינת נתוני התחנות (Meta Data):

נתוני התחנות ישמשו לצורך בניית דוחות מבוססי GIS ושימוש ברכיב ה – Power Map, בקובץ נתוני התחנות מצוינות הקואורדינטות (צפוניות ומזרחיות) של כל תחנה ותחנה.

3

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

לאחר החלפת הערכים הלא תקינים והגדרות אופי העמודות (מספרי, טקסטואלי וכו'), ניתן לשמור את השאילתה ולצרף אותה בצורה אוטומטית למודל הנתונים ב – Power Pivot

4

שלב ב' – טעינת הנתונים

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

היות ומדובר בשירות Hadoop, הרי שלעיתים קרובות, מדובר על היקף נתונים נכבד, על אף הדחיסה הגדולה של הנתונים, נדרשת בחירה מושכלת בנוגע להיקף הנתונים הנדרש, על מנת להתמודד עם הנושא ניתן לבחור באחת ממספר גישות:
א.     שימוש ב – HIVE ODBC Provider
ולאחזר תוצאת שאילתה   המבצעת אגריגציה או חיתוך של הנתונים הנדרשים בלבד.
ב.     טעינה פרטנית של קובץ Blob מסוים (לדוגמה: Partition     אחרון ב – Hive Table
).
במקביל, אנו נבחר שלא לבצע טעינה של הנתונים לגיליון האקסל, אלא ישירות למודל ב – Power Pivot. (כלומר טעינה ודחיסת הנתונים בו זמנית ישירות למודל).

להלן צילום המסך של קובץ הנתונים המקורי לאחר טיפול ב – Power query :

 5

בגמר הטעינה של שני הקבצים, מודל הנתונים נראה כך:

שלב ג – מנתחים את הנתונים

מתפריט ה – Insert באקסל נבחר לצרף דוח Power View

 7

כעת נבנה את הדוח כאשר אנו מעוניינים בתרשים המציג את הטמפרטורה המקסימאלית הממוצעת לחודשי הקיץ (6-8) עבור תחנה אחת בת"א

8

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

  1. הטמפרטורה המקסימאלית משתנה בצורה תכופה בשנים האחרונות.
  2. מאידך התחנה הנ"ל כוללת מדידות רק משנת 2005.

לאחר שינוי התחנה לתחנת המדידה של נמל יפו מתקבלת שוב תמונה חלקית המצביעה על התחממות ניכרת, אך איננה מציגה את רצף הנתונים לאורך השנים:

 9

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

 10

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

בפוסט הבא נשלב את הטכנולוגיות האחרונות ב – Machine Learning ו – Data Mining עם נתוני אקלים מהעולם ונבחן שימוש ברכיב ה – Power Map המאפשר לנתח נתונים תוך שימוש במפת כדור הארץ תלת ממדית ואינטראקטיבית.

אתם מוזמנים כמובן להמשיך ולבחון את הנתונים ולהרחיב את המודל לאזורים אחרים בארץ (אולי באזורכם ?)

בהצלחה ותהנו,

ערן

 

ערן שגיא הוא יועץ BI בכיר בחטיבת היועצים (MCS) במיקרוסופט ישראל

 

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *