הציפורים מצייצות והאנליסטים חוגגים – ניתוח נתונים מטוויטר למדעני נתונים – חלק א


מזה כמעט עשור מאפשרות הרשתות החברתיות זיהוי של מגמות, סנטימנט ותופעות מעניינות בדעת הקהל, אשר יכולים לתמוך בקבלת החלטות ולשפר את הביצועים העסקיים.
Twitter with Laptopכולנו שמענו על טוויטר – הרשת החברתית המאפשרת לשתף את כל העולם בדעות או עדכונים בזמן אמת. היקף הציוצים היומי עבר כבר לפני זמן מה את רף 500 המיליון, ועוד היד נטויה.
בתור אנליסט נתונים, גישה פשוטה יחסית להיקף כ"כ גדול של נתונים היא אוצר של ממש לטובת יישומים רבים, שלא לדבר על העניין והאתגר המקצועי הרב בניתוח של נתונים אלה. ואכן, לטוויטר קיים API (Application Programming Interface) יעיל למדי, המאפשר גישה למאגר הציוצים, עבור מפתחי יישומים, חוקרים וכיו"ב.
אך בעוד שכלי שיווק דיגיטלי רבים כיום כוללים ממשק מובנה לרשתות החברתיות, חלק ניכר מהם מחייב תהליך הטמעה בארגון ותשלום לא מבוטל. סוגיות אלו גורמת לעיכוב באימוץ הממשק בארגון – ולתסכול מצד האנליסטים, שכן מצד אחד הם נדרשים להבין מה הערך של הנתונים על מנת להמליץ על המהלך, ומצד שני – הנתונים כלל לא נקלטו למערכות הארגון – מה שמקשה מאוד על ניתוח הנתונים.

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

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

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

אז לאחר האזהרות והאיומים, אנו בשלים לצלול לרמה הטכנית…

קיימות שתי שיטות להתממשק לציוצים – דרך חיפוש במאגר של הימים האחרונים (Search API), או ישירות לזרם הציוצים כמעט בזמן אמת (Streaming API). בעוד שממשק החיפוש מאפשר סינון טוב יותר של ציוצים רלוונטיים לעומת ממשק ה-Streaming, הוא יחסית מוגבל מבחינת קיבולת (שתי מגבלות – האחת למספר הבקשות בכל 15 דקות [180], ובנוסף מגבלה למספר הציוצים שניתן להחזיר בכל בקשה [100]).
ממשק ה-Streaming לעומתו משמש בעיקר לניתוח נתונים ותגובה (המלצה, ציוץ, החלטה וכיו"ב) בזמן אמת. המגבלה בממשק היא כ-1% מכלל הציוצים ברגע נתון, ולאור ההמשכיות של זרם הנתונים, הוא מאפשר אף צבירה שלהם לאורך זמן – ומתאים ליישומים העושים שימוש מסיבי יותר בנתונים.

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

השלב הראשון בניתוח נתוני טוויטר הוא הרשמה וקבלת 'מפתחות' ל-API באתר טוויטר. לאחר מתן מידע הנוגע ליישום אותו תרצו לממש, תקבלו 4 מפתחות כאלה:
Customer_Key, Customer_Secret, Access_Key, Access_Secret.

השלב השני הוא בניית Tracker והתממשקות לנתוני הציוצים. לאור הביקוש הרב לנתוני טוויטר, כמעט כל שפת קוד פתוח כוללת תוספים להתממשקות אליו. ב-Python קיימת תיקייה בשם Tweepy, אשר כולל את שני הממשקים – גם Streaming וגם Search.

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

<קוד Python לממשק ה-Search ושמירת הנתונים בקובץ csv>

חשוב לציין, כי בעוד שבקוד הומרו התוצאות למבנה טבלאי, ה-API של טוויטר מספק נתונים בפורמט json. פורמט זה הוא חסר סכימה, ולמעשה מציג מבנה היררכי גמיש למדי, הדומה במקצת ל-xml. הגמישות נדרשת לאור השונות הגבוהה שעשויה להיות בין הציוצים: כמות התיוגים, רשימת ה-Re-Tweets, תגובות, מאפיינים ייחודיים של המשתמש וכיו"ב.

על מנת לשמור את הנתונים באופן 'טבעי' יותר, ניתן להסתייע בכלי NoSQL מסוג Document Database. להלן דוגמה לשמירת נתוני הציוצים ב-MongoDB, הפעם עבור ממשק ה-Streaming API.

<קוד Python לממשק ה-Streaming ושמירת הנתונים ב-MongoDB>

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

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

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

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

השארת תגובה