# Using Conda
library(reticulate)
conda_create(
envname = "my_conda_env",
packages = c("pandas"))
# (add libraries to `packages` argument as needed)
# Activate the environment
use_condaenv("my_conda_env")
10 פיית’ון מתוך R
כפי שציינתי בהקדמה לספר זה, אחד מהכלים הנפוצים ל-Data Science (ובכלל) הוא שפת פיית’ון (python). מאוד סביר שבסיטואציה כזו או אחרת תמצאו עצמכם מול בעיה שבה שילוב של פיית’ון עם R יכול להוות יתרון גדול ולחסוך זמן ומאמץ.
לדוגמה, לעיתים קרובות תמצאו ששירותים מסוימים, כגון שירותי Amazon Web Services (AWS) זמינים באופן מלא בפיית’ון (באמצעות חבילה שנקראת boto3
וזמינה בפיית’ון), אך ממומשים באופן חלקי בחבילות ב-R. בדוגמה זו, החבילה boto3
היא חבילה רשמית המתוחזקת על ידי AWS ולעומת זאת, חבילות אחרות הזמינות ישירות ב-R הן חבילות המפותחות על ידי הקהילה, ואינן נתמכות באופן “רשמי” על ידי AWS.
ישנן דוגמאות נוספות רבות, לדוגמה החבילה הרשמית של OpenAI (שנקראת openai
בפיית’ון), שמתוחזקת באופן רשמי על ידי OpenAI, ומקבילה לה ל-R הנקראת גם היא באותו השם, אך מתוחזקת על ידי הקהילה באופן לא רשמי.
הקריאה לפיית’ון מתוך R מתבצעת באמצעות חבילה הנקראת reticulate
שמכילה כלים שימושיים רבים להפעלת פיית’ון. בפרק זה נדגים כיצד:
להתקין סביבות פיית’ון באמצעות חבילת
reticulate
של R, ולקרוא לסביבה שהותקנהכיצד אובייקטים שונים עוברים (מתורגמים) מאובייקטים של R לאובייקטים של פיית’ון, ולהיפך
לשלב קוד פיית’ון בתוך סקריפט של R
10.1 התקנת סביבה
על מנת שתוכלו לקרוא לפיית’ון מתוך R, ראשית צריך להתקין סביבת פיית’ון. פעולה זו תתבצע בפעם הראשונה בלבד (אלא אם תעברו לעבוד במחשב אחר), באמצעות פקודות של חבילת reticulate
. לשם כך ישנן שתי פקודות אפשריות:
virtualenv_create
conda_create
ההבדל ביניהן הוא הכלי שבו יעשה שימוש להתקנה (Conda מול pip).
# Using virtual environment (pip)
library(reticulate)
virtualenv_create(
envname = "my_virtual_env",
packages = c("pandas"))
# (add libraries to `packages` argument as needed)
# Activate the environment
use_virtualenv("my_virtual_env")
אם ניסיתם להשתמש בפקודה conda_create
וקיבלתם הודעת שגיאה “Unable to find conda binary. Is Anaconda installed?”, נדרש קודם להתקין את miniconda על ידי שימוש בפקודה reticulate::install_miniconda
, או התקנה ישירה מהאתר הרשמי של חברת Anaconda.
שימו לב שאת פקודת ההפעלה (use_*
) יש להפעיל ראשונה, לפני שמפעילים פקודה אחרת של פיית’ון, אחרת reticulate
עשוי לבחור בסביבה אחרת זמינה, לפי לוגיקה פנימית (והיא לאו דווקא תהיה הסביבה שאתם מתכוונים, במידה והיתה סביבה אחרת מותקנת).
במידה ופקודה זו לא עבדה כנדרש, ונטענת סביבה אחרת, ניתן גם להשתמש בהגדרת משתנה סביבה (Environment Variable), על ידי שימוש בפקודה Sys.setenv(RETICULATE_PYTHON = PATH)
או על ידי הגדרה בקובץ .Renviron
בתיקיית העבודה שלכם, עם השורה המתאימה RETICULATE_PYTHON = PATH
.
כעת ניתן להריץ קוד פיית’ון ישירות:
py_run_string("
print('Hi, I\\'m python code, run directly from an R interpreter!')
")
Hi, I'm python code, run directly from an R interpreter!
10.2 תרגום בין אובייקטים
ב-R ובפיית’ון יש אובייקטים מסוגים שונים. כדי שנוכל למנף את השילוביות בין שתי השפות כדאי להבין כיצד אובייקטים מתורגמים מאחד לשני. הטבלה הבאה מציגה כיצד אובייקטים עוברים מאחד לשני:
R | python |
---|---|
וקטור עם איבר יחיד el <- 5 |
סקלר el=5 |
וקטור עם מספר איברים vec <- c(1, 2, 3) |
רשימה vec=[1, 2, 3] |
רשימה משוימת (named) עם איברים מסוגים שונים
|
אובייקט מסוג מילון
|
רשימה לא משוימת עם איברים מסוגים שונים
|
רשימה
|
ניתן להשתמש בפקודה
בכיוון הפוך (בחזרה מפייתון) היא מומרת לרשימה לא משוימת
|
tuple
|
מטריצה
|
מערך של
|
data frame או tibble | data frame של חבילת pandas |
ניתן להשתמש בפקודה r_to_py
ובפקודה py_to_r
על מנת לעבור בין אובייקטים. לדוגמה:
r_to_py(palmerpenguins::penguins)
species island bill_length_mm ... body_mass_g sex year
0 Adelie Torgersen 39.1 ... 3750 male 2007
1 Adelie Torgersen 39.5 ... 3800 female 2007
2 Adelie Torgersen 40.3 ... 3250 female 2007
3 Adelie Torgersen NaN ... -2147483648 NaN 2007
4 Adelie Torgersen 36.7 ... 3450 female 2007
.. ... ... ... ... ... ... ...
339 Chinstrap Dream 55.8 ... 4000 male 2009
340 Chinstrap Dream 43.5 ... 3400 female 2009
341 Chinstrap Dream 49.6 ... 3775 male 2009
342 Chinstrap Dream 50.8 ... 4100 male 2009
343 Chinstrap Dream 50.2 ... 3775 female 2009
[344 rows x 8 columns]
10.3 שילוב קוד פיית’ון בסקריפט
לאחר שהפעלנו את סביבת הפיית’ון הרצויה, ניתן לקרוא חבילות (במידה והותקנו במסגרת בניית הסביבה הוירטואלית), באמצעות הפקודה import
מתוך חבילת reticulate
, ואז להשתמש בפקודות שזמינות בחבילות שקראנו.
הקריאה לפקודה מתוך חבילה מסוימת תתבצע באמצעות התו $
.
נדגים זאת על ידי שימוש בפקודות מתוך pandas:
<- import("pandas")
pd <- pd$value_counts(palmerpenguins::penguins$species)
species_count species_count
Adelie Gentoo Chinstrap
152 124 68
# And another option is to use this:
<- r_to_py(palmerpenguins::penguins)
penguins_py
# Demonstrating grouping, counts, then proportions
# Group penguins by island and species
<- penguins_py$groupby(list('island', 'species'))$size()$reset_index(name='counts')
grouped
# Calculate proportions for each species on each island
'proportion'] <- grouped$groupby('island')['counts']$transform(function(x) x / x$sum())
grouped[
# Convert the Pandas DataFrame back to an R dataframe (optional)
<- py_to_r(grouped)
grouped_r
grouped_r
island species counts proportion
1 Biscoe Adelie 44 0.2619048
2 Biscoe Chinstrap 0 0.0000000
3 Biscoe Gentoo 124 0.7380952
4 Dream Adelie 56 0.4516129
5 Dream Chinstrap 68 0.5483871
6 Dream Gentoo 0 0.0000000
7 Torgersen Adelie 52 1.0000000
8 Torgersen Chinstrap 0 0.0000000
9 Torgersen Gentoo 0 0.0000000
הפקודה py_to_r
מעבירה את התוצאות חזרה לאובייקטים של R, וניתן לעבוד איתם באופן רגיל. במקרה זה האובייקט grouped_r
הוא מסוג data.frame
.
10.4 סיכום
בפרק זה עסקנו בשילוב בין שפת פיית’ון לבין R באמצעות חבילת reticulate
. שילוב זה מאפשר לנצל את היתרונות של כל אחת מהשפות. אני באופן אישי מעדיף להשתמש בעיקר ב-R, במיוחד בכל המקרים של ניתוח נתונים “קלאסי” (כל מה שמכוסה בפרקים השונים של ספר זה).
המקרים בהם יש יתרון לשימוש בפיית’ון באמצעות reticulate
הם כאשר ישנה חבילה מסוימת שהיא יותר “בשלה” או מתוחזקת היטב בפיית’ון אבל המקבילה שלה ב-R אינה קיימת, או מתוחזקת באופן חלקי/לא מספק.
ראינו כיצד מתקינים סביבת פיית’ון באמצעות פקודות של reticulate
, כיצד אובייקטים עוברים המרה משפה לשפה, וכיצד לשלב קוד פיית’ון בתוך סקריפט של R.
בפרק הבא נראה דוגמה פרקטית נוספת של שימוש בספריית openai
של פיית’ון, להפעלת מודלי LLM של חברת OpenAI.
המדריך העברי למשתמש ב-R נכתב על ידי עדי שריד בהוצאת מכון שריד