רשמים מכנס useR!2014

photo (1)

שבוע שעבר נהניתי להשתתף בכנס useR!2014 אשר התקיים באוניברסיטת UCLA בקליפורניה, ארה"ב. הכנס הוא המפגש השנתי של אנשי קהילת ה- R מרחבי העולם, כשהשנה השתתפו בו כ-700 אנשים מהקהילה. (למי שלא מכיר, R היא שפת תוכנה, בקוד פתוח, לתכנות סטטיסטי). אם לסכם, אומר שמדובר היה בחוויה מדהימה. זו הפעם החמישית שאני משתתף בכנס הזה, ומבין כל הכנסים המקצועיים שהיו בחיי, אין ספק שכנסי ה- useR הם הכי מספקים מבחינתי (ברמה המקצועית, האינטלקטואלית, והרגשית). מעבר לתוכן העיוני, הפתיחות והחברותיות של האנשים בקהילת ה- R, היא בדיוק סוג הדברים להם אפשר לצפות במפגשים של תוכנת קוד פתוח.

אם R קרוב לליבכם, אפילו אם אתם בתחילת דרככם, אני מעודד אתכם לעשות מאמץ ולהגיע למפגש useR!2015 אשר יתקיים שנה הבאה בדנמרק (ובמקרה שתעשו כן, אנא שלחו לי מייל – tal.galili@gmail.com, אשמח לדעת שאתם מגיעים).

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

1) חבילת ה caret של מקס קון היא פשוט חובה בשביל כל מי שמתעניין בנושא של machine learning באמצעות R. מקס העביר סדנא מעניינת על החבילה שלו וכל השקופיות והקוד נמצאים כאן. מדובר בחבילה שמציעה מעטפת סטנדרטית להרבה מאד שיטות סטטיסטיות, מחבילות שונות ב-R. היא מקילה על התהליך של אימון מודלים שונים, עם פרמטרים שונים, והשוואתם. החבילה גם כוללת סט חביב של פונקציות לנירמול נתונים לקראת עבודה (הלוואי שהייתי יודע על זה לפני חודשיים).

2) חבילת ה- dplyr של האדלי וויקאם מציעה תהליך עבודה מצויין להכנת נתונים לאנליזה (פילטור של תצפיות ועמודות, מיון, אגרגציה). החבילה לא מציעה משהו שאין בפונקציות הבסיס של R, מלבד זה שהן יותר מהירות (ייתרון חשוב מאד), ומציאות ממשק דומה למניפולציה של data.frame כמו גם של אובייקטים השוכנים בדטא-בייס. למי שעובד עם הרבה מקורות נתונים, ונדרש לעשות להם הרבה "עיסוי", אני ממליץ עליהם מאד. עוד ייתרון כללי של עבודה עם חבילות מבית היוצר של האדלי הוא שמדובר במישהו שחושב המון על קלות השימוש בקוד שלו (והוא למעשה מקור השראה גדול עבורי להרבה מהדברים שאני מנסה לעשות). לבינתיים תוכלו להוריד שקופיות מהדרופ-בוקס שלו מכאן. תזדרזו לפני שהוא יסיר אותם…

3) חבילת ה magrittr. זה כנראה הגלוי הכי משמעותי שלי של R בשנה האחרונה! מדובר בחבילת R קטנטנה שמאפשרת לעשות (מה שמכונה) שירשור של פקודות (chaining). זה דומה לאופרטור המקטרת (pipe), למי שמכיר לינוקס. בשביל מי שעוסק בניתוח נתונים, ואין לי דרך לומר זאת באופן מספיק בוטה, זו חובתכם ללמוד על החבילה הזו! יש לחבילה מדריך מאד מאד קצר שמבהיר את השימוש בה. אני מעודד אתכם להפסיק את קריאת הפוסט הזה כעת, וללכת לקרוא את המדריך 🙂 חבילת ה dplyr נשענת על ה magrittr, אבל אפשר להשתמש בה ללא קשר (ואני מתכנן לעשות בה שימוש מרכזי בחבילת ה dendextend שלי)

4) ג'ון צ'יימברס (אחד מהממציאים של R), נתן הרצאה נחמדה. התמצות שלה הוא ש-R כשלעצמה לא בנויה לאתגרים המודרניים של ניתוח נתונים. אבל שלמעשה, היא מעולם לא תוכננה להתאים לאתגרים של אף דור. גם בימיה הראשונים, היו שאמרו איך ש-R זה נחמד, אבל ניתוח נתונים אמיתי צריך לעשות ב fortran. הפואנטה של ג'ון היא שיש להתייחס ל-R כאל שפת ממשק לכלים אשר ממומשים בשפות אחרות(כמו Rcpp, H2O, hadoop וכן הלאה).

5) החבילה ggplot2 בסוף דרכה. טוב, זה לא מדוייק. מדובר בחבילה מאד עשירה, ועוד הרבה אנשים משתמשים ומפתחים לה. אז שווה בהחלט להכיר אותה. א-ב-ל, ממה שהבנתי, האדלי החליט להפסיק את הפיתוח האקטיבי שלה, ולהפנות את תשומת ליבו לחבילה ggviz. מדובר ב"דור הבא" של ggplot2, אשר שואף לשלב גרפיקה אינטראקטיבית עם R באופן הרבה יותר קל מאשר בעבר. החבילה עדיין בחיתולים, אבל אני צופה לה גדולות. הנה קישור לשקפים וקוד עליה.

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

7) האנשים שמאחורי iplots (סיימון אורבנק, ושות' ממעבדות AT&T), התחילו לתת תשומת לב לגרפים אינטראקטיביים בענן, ויצרו את חבילת ה iwplots. עוד לא ברור לי לאן זה ילך. ההבדל בינם לבין האחרים, הוא שמדובר באנשים שמתמחים ביצירת גרפים של המון נתונים, אז העתיד מסקרן (השאיפה שלהם היא תרשים פיזור על מליון נקודות).

8) נתתי הרצאה על חבילת ה dendextend שלי. העליתי את המצגת לכאן, אם אתם סקרנים.

9) אגב dplyr, יש גם את חבילת ה data.table. [Abstract] [Talk][Tutorial] מדובר בחבילה עשירה לא פחות מזו של dplyr, ועם קהל מעריצים שישאר עוד הרבה זמן. אישית אני לא נמשך לחבילה כי היא מוסיפה סינטקס נוסף על פני דברים בסיסיים ב- R, כך שזה לא תכנות כיפי (וכאמור, dplyr נותן לי מענה מוצלח מבחינת מהירות). דבר אחד ששווה להכיר זה את פונקציית ה fread שבחבילה, היות והיא חסרת תחרות בנושא של קריאת קבצי csv גדולים! (והמרתם ל data.frame)

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

11) אם אתם בקטע של להריץ סקריפטים של R דרך bash (לדוגמא, דרך Rscript), חבילה חדשה בשם docopt, מאפשרת ליצור מבנה מאד מורכב של פרמטרים בהרצה של הסקריפט (קישור לאבסטרקט).

12) יש חבילה חדשה שמאפשרת בנייה של פלטים מאד מורכבים לתוך word (!). הבעיה היא שזה עובד בפרדיגמה של פונקציות שכותבות לתוך קובץ (במקום הפרדיגמה של knitr, שהיא עדיפה בעיני בהרבה). ביקשתי עזרה על זה מהמחבר, אבל אני לא יודע אם הוא יצליח לגרום לזה לקרות. קישור לחבילה.

13) במסגרת העולם של "מחקר בר שיחזור", ישנה חבילה מעניינת חדשה בשם rctrack אשר מייצרת תיעוד של הקבצים שנקראו ונכתבו במהלך הרצה של קוד. החבילה עוד לא ב- CRAN, אבל אפשר להוריד ולשחק איתה מכאן. אם אתם עובדים עם knitr ו- git זה לא רלוונטי לכם, אבל לאנשים שמסרבים לעבוד באופן כזה, החבילה יכולה לסייע קצת.

14) הנושא של שימור גירסאות של חבילות בשביל שיחזור ניתוחים סטטיסטיים בעתיד נהפך לנושא חם. שתי פתרונות שמוצאים בימים אלו מגיעים מ REvolution וגם מ- RStudio. REvolution התחילו לשמור עותק של כל החבילות שב- CRAN אחת ליום, ומאפשרות לשחזר בסביבת העבודה שלכם חבילות מכל תאריך (קישור למצגת בנושא). לעומתם, RStudio, מאפשרים ניהול של כל הגירסאות של חבילות שאתם משתמשים בהם בפרוייקט שלכם (שזה אומר חבילות שהם גם מ- CRAN, וגם מ – rforge, github וכו'), דרך חבילה בשם packrat (הנה האתר). הייתרון של packrat הוא שמדובר במערכת יותר גמישה, יותר "טובה" לטווח ארוך, ובימים אלו עובדים על שילוב נוח של המערכת עם RStudio. החיסרון העיקרי של המערכת הוא שהיא דורשת למעשה לשמור גירסאות של כל החבילות שלכם לכל אחד מהפרוייקטים בהם אתם משתמשים בהם. עבור מישהו כמוני אשר שומר פרוייקטים ב dropbox, זה קצת לא scalable. מצד שני, הם אמרו לי שבעתיד הם יעבדו על היכולת לעשות caching לחבילות שונות על פני פרוייקטים. אז כשזה יקרה, אני מקווה שזה יפתור את הבעיה. אז לכרגע זה לא כל כך יישים (עבורי, אבל עבורכם כנראה שכן). אבל זה כנראה ייפתר בשנה שנתיים הקרובות (שזה מעולה!).

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

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

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

מקווה שהיה לכם מעניין.
שלכם,
טל גלילי

בונוס לסיום – תרשים של מספר ההורדות של חבילות R שונות (שתוארו בפוסט הזה), לפי מספר ההורדות שלהם ב CRAN mirror של חברת RStudio:

packkkkkkkkkkkkk

הקוד שיצר את התרשים:

# install.packages("installr")

library(installr)

 

# The first two functions might take a good deal of time to run (depending on the date range)

RStudio_CRAN_data_folder <- download_RStudio_CRAN_data(as.Date(Sys.time())15)

my_RStudio_CRAN_data <- read_RStudio_CRAN_data(RStudio_CRAN_data_folder)

 

the_pckgs <- c("data.table","dplyr","knitr",

"ggviz","rCharts",

"Rcpp","Rcpp11","packrat",

"effects","docopt","ReporteRs",

"dendextend","installr",

"effects","magrittr")

lineplot_package_downloads(pkg_names = the_pckgs ,

dataset = my_RStudio_CRAN_data)

השאר תגובה