-
Notifications
You must be signed in to change notification settings - Fork 0
/
10-hebrew-in-R.qmd
177 lines (115 loc) · 12 KB
/
10-hebrew-in-R.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# עברית ב-R {#sec-hebrew-tips}
השילוב בין קידוד ב-R לבין השפה העברית טומן בחובו מספר אתגרים. מטרת הפרק לתת כמה טיפים שיעזרו לכם לייעל את העבודה ב-R, גם כשצריך לשלב עברית, בין אם בכותרות של גרפים, בכתיבת דוחות ומסמכים, בקידודי קבצים, בשמות משתנים, ועוד.
הפרק מתחלק לשלושה חלקים:
- שימוש ב-RStudio IDE עם עברית
- קידוד קבצים: קריאה וכתיבה של קבצים הכוללים עברית
- יישור לימין: באפליקציות shiny, מסמכי quarto/rmarkdown, ובגרפים
## שימוש ב-IDE
ה-IDE הנפוץ לשימוש ב-R הוא RStudio IDE (סביבת פיתוח - Integrated Development Environment). שילוב של עברית ב-IDE דורש קצת מיומנות והתרגלות, לדוגמה, כך נראית כתיבת שורות אלו ב-IDE:
![כתיבה בעברית ב-RStudio IDE](images/Hebrew-in-rstudio1.png)
כפי שניתן לראות, למרות שהשורות עצמן בספר מיושרות לימין (כמו שצריך בעברית), בכעת הכתיבה השורות לא מיושרות, וסדר המשפט מתהפך כאשר משלבים עברית ואנגלית. בחלק השלישי של הפרק נסביר איך "קורה הקסם" שהתוצר עצמו כן מיושר לימין. אבל הנה כמה טיפים שיעזרו לכם לשלב עברית בעבודה השוטפת עם RStudio:
1. **עבודה עם ה-Visual Editor:** בכתיבת מסמכים (מסוג RMarkdown או quarto) לעבוד עם ה-Visual editor במקום ה-Source editor (בצד שמאל למעלה בחירה ב-Visual). איכשהו, העורך הויזואלי מצליח לסדר קצת יותר טוב את העברית, ובמקרה ונדרש לערוך מסמך, מצליח לשים את הסמן במקום הנכון. בצילום המסך הבא מוצג עורך קוד המקור (באדום מסומן הכפתור שמאפשר לעבור לעורך הויזואלי). אם תנסו לשים את הסמן במקום המתאים בעורך קוד המקור תראו שהוא מציב את הסמן במקום הלא נכון.
![מעבר לעורך ויזואלי](images/Hebrew-in-rstudio2.png)
לצערנו, העורך הויזואלי זמין רק במסמכים מסוג RMarkdown ו-quarto. בכתיבת סקריפט רגיל (קובץ קוד בלבד עם סיומת .R), חייבים להשתמש בעורך קוד המקור, מה שמוביל אותנו לנקודה השניה:
2. **שימוש בשבירת שורות כשנדרש לשלב עברית בקוד:** כאשר כותבים קוד ונדרש לשלב עברית, עדיף לשבור שורה (בכתיבת קוד לרוב שבירת שורה לא משפיעה על הפונקציונליות של הקוד), ואת העברית לשים בשורה נפרדת. זה יקל על עריכת הקוד במידה וצריך. לדוגמה, הקוד הבא מכיל שבירת שורה, ולכן יקל על עריכות במידה ונדרשות:
```{r setup, warning=FALSE, message=FALSE}
library(tidyverse)
```
```{r line breaking for hebrew}
#| eval: false
my_table %>%
filter(my_var ==
"המשתנה שלי")
```
במקום הקוד:
```{r no line breaks}
#| eval: false
my_table %>%
filter(my_var == "המשתנה שלי")
```
3. **שמירת קבצים באנגלית:** תעשו לעצמכם ולאחרים טובה, ולכל הקבצים (והתיקיות) תתנו שמות באנגלית ולא בעברית.
4. **שמות משתנים באנגלית:** אם יש לכם קובץ נתונים שבו שמות המשתנים (הכותרות) הם בעברית, מומלץ להעביר את כולם לאנגלית, לעבוד באנגלית, ואם צריך להעביר לעברית בסוף (לצורך דיווח ו/או תרשימים). יש דרכים שונות להחליף שמות, לדוגמה הגדרה בתוך הפקודה שקוראת את הקובץ. הפקודה `read_csv` ו-`readxl::read_excel` תומכות שתיהן בארגומנט שנקרא `col_names` ומאפשר להגדיר שמות (אבל השימוש בארגומנט מניח שסדר העמודות עקבי וידוע מראש). הדוגמה הבאה מחליפה שמות של עמודות באמצעות הפקודה `rename`, שמגדירה שם של עמודה באופן מדויק, גם אם הסדר שלהן אינו לפי סדר ההגדרה.
```{r renaming hebrew to english example}
init_tbl <- tibble(`שם` =
c("איתן",
"נעמי",
"אביב"),
`גיל` =
c(11, 9, 5))
```
::: code-out-hebrew
```{r renaming with hebrew code}
init_tbl
```
:::
```{r}
init_tbl %>%
rename(age = `גיל`,
name = `שם`)
```
שימו לב אגב שבפלט הטקסט בעברית מופיע הפוך, אבל העתיקו את הקוד ונסו. ניתן להשתמש בפקודה `View` על מנת לראות את התוצר הסופי בצורה מסודרת (פשוט הוסיפו `%>% View()` בסוף השורה האחרונה של הקוד).
## קידוד קבצים
קבצי טקסט בפורמטים שונים (כגון txt או csv) יכולים להכיל אינדיקציה לקידוד, שמאפשרת לתוכנות שונות (ביניהן R ו-Excel) להבין איך לפתוח את הקובץ כך שניתן יהיה לקרוא אותו באופן תקין.
### קריאת קבצים
נתייחס לפקודת `read_csv` (פקודות אחרות בחבילת `readr` עובדות באופן דומה). כברירת מחדל, הפקודה תצליח לקרוא טוב קבצים ששמורים עם קידוד של UTF-8, ולרוב הקבצים זה מספיק.
במידה והקריאה אינה עובדת, ניתן להיעזר בפקודה `guess_encoding` גם היא מחבילת `readr`.
לדוגמה:
```{r reading csv example, message=FALSE}
guess_encoding("files/utf8_encoding_example_file.csv")
```
ניתן לראות שהפקודה `guess_encoding` מצליחה לזהות שהקידוד הוא UTF-8, וקריאה "רגילה" של הקובץ (בלי ארגומנטים מיוחדים) תצליח:
::: code-out-hebrew
```{r sucssesful reading, message=FALSE}
read_csv("files/utf8_encoding_example_file.csv")
```
:::
לעומת זאת, הקובץ הבא מקודד בקידוד אחר (קידוד iso8859-8), הפקודה `guess_encoding` מזהה קידוד שגוי, והשימוש בו לא יניב תוצאות רצויות:
```{r another guess encoding, message=FALSE}
guess_encoding("files/iso8859-8_encoding_example_file.csv")
read_csv("files/iso8859-8_encoding_example_file.csv",
locale = locale(encoding = "windows-1251"))
```
הקובץ הראשון מקודד ב-UTF-8 ולכן שימוש פשוט בפקודה `read_csv` קורא אותו באופן תקין. הקובץ השני שמור בפורמט ISO-8859-8 (והפקודה גם לא מצליחה "לנחש" אותו), ולכן יותר מאתגר לקרוא אותו בלי ידע מוקדם על הקידוד. הפעלת פקודת הקריאה על הקובץ השני מבלי הגדרה מתאימה של הקידוד, תציג טקסט שגוי או הודעת שגיאה של [Error: Invalid multibyte sequence]{style="color: red;"}. הטקסט בעברית בדוגמאות להלן יופיע משמאל לימין (הפוך), אבל אם תנסו להריץ אותו ב-R תראו שהנתונים נקראים באופן תקין, בפקודה הראשונה והשלישית להלן:
::: code-out-hebrew
```{r reading examples with specified encoding, message=FALSE}
read_csv("files/iso8859-8_encoding_example_file.csv",
locale = locale(encoding = "ISO-8859-8"))
```
:::
לידיעה, יש מספר פורמטים רלוונטיים לקריאת עברית, הראשונים שאני ממליץ לנסות הם UTF-8 (כלומר בלי ארגומנטים מיוחדים), אחריו Windows-1255, ואחריו ISO-8859-8, כמובן תוך שילוב הפקודה `guess_encoding` שיכולה להיות שימושית לעיתים.
### שמירת קבצים
על מנת לשמור קבצים עם קידוד, מומלץ להשתמש בפקודה `write_excel_csv` במקום הפקודה `write_csv`, במיוחד אם מתכננים לקרוא את הקובץ שנשמר באמצעות אקסל. הפקודה של `write_excel_csv` כוללת "הנחיות קידוד" כך שפתיחה באקסל תציג עברית באופן תקין (התוצר הוא עדיין קובץ טקסט). לעומת זאת, שמירה של `write_csv` עם נתונים בעברית, תציג ג'יבריש בעת פתיחת אקסל רגילה (אגב, אפשר לייבא נתונים באקסל ולהגדיר UTF-8 כקידוד, ואז ניתן לקרוא גם קבצים כאלו באופן תקין).
::: callout-note
פורמט אקסל (קובץ xlsx) הוא פורמט נוח מבחינת קידוד, משום שהוא שומר את הקידוד באופן מובנה. עם זאת, הוא פורמט פחות נוח לעבודה בהרבה מקרים. ניתן לקרוא קבצי אקסל באמצעות `readxl::read_excel` ואז לא צריך להתעסק עם קידוד. שמירה של קבצי אקסל תיעשה באמצעות אחת מהפקודות הבאות `openxlsx::write.xlsx` או `writexl::write_xlsx`.
לא נכביר במילים על הבעיות שיש עם אקסל וקבצי דאטה, אבל לא חסרות כאלו (לדוגמה, ההתייחסות של אקסל לכל דבר שרק "נראה כמו תאריך" כתאריך, הגמישות לתת למשתמשים להפוך את הקובץ ל-untidy כמו לדוגמה על ידי מיזוג תאים, או קידוד משמעויות שונות באמצעות צביעה, מה שכמובן מקשה על עבודת מדען הנתונים).
:::
## יישור לימין
תוצרים ב-R המבוססים על html, קרי, מסמכים שהם תוצר של RMarkdown, quarto, ואפליקציות shiny, יציגו עברית בכיוון הפוך (משמאל לימין), אלא אם יוגדר להם עיצוב מתאים.
עיצוב ב-html נשלט על ידי קוד CSS (Cascade Style Sheet). לדוגמה, לספר זה יש עיצוב המוגדר בקובץ style.css ובו מופיע (בין היתר) הקוד הבא:
```{css, eval=FALSE}
body {
direction: rtl;
}
```
הקוד שולט בכל התגיות שנמצאות בתוך גוף המסמך (תגיות html שמופיעות בין `<body>` לבין התגית הסוגרת `</body>`. התכונה אותה אנחנו רוצים לעדכן נקראת כיוון (direction), והוא יכול לקבל שני ערכים (כברירת מחדל שמאל לימין ltr, ובאמצעות הקוד אנחנו משנים אותו ל-rtl.
בשביל להטמיע זאת במסמך quarto או RMarkdown רק צריך להוסיף את הקוד הבא במסמך:
````{verbatim}
```{css}
body {
direction: rtl;
}
```
````
ניתן לקרוא מידע נוסף לגבי שילוב CSS במקורות הבאים:
- [לגבי שימוש ב-CSS במסמכי quarto](https://quarto.org/docs/output-formats/html-themes.html)
- quarto.org
- [שילוב CSS במסמכי RMarkdown](https://bookdown.org/yihui/rmarkdown-cookbook/html-css.html)
- [@xie2018r]
- [שילוב CSS באפליקציות Shiny](https://mastering-shiny.org/action-layout.html)
- [@wickham2021mastering]
## סיכום
בפרק זה למדנו טיפים וטריקים שיעזרו לנו בפרויקטים בהם עלינו לשלב עברית ואנגלית. בפרט:
- שימוש בסביבת הפיתוח RStudio תוך שילוב עברית.
- קידודים של קבצים בעברית (בקריאה ובכתיבה של קבצים).
- יישור לימין בתוצרי ניתוח שכוללים html, באמצעות שימוש ב-CSS.
::: end-page