[nl,he,vi] chore(i18n): sync translations

Sync translations with latest source changes.
Languages: Dutch [nl], Hebrew [he], Vietnamese [vi]
pull/798/head
localizeflow[bot] 6 days ago
parent 122b33f3ab
commit 5b27f5ba7b

@ -96,8 +96,8 @@
"language_code": "he"
},
"2-Working-With-Data/07-python/README.md": {
"original_hash": "7bfec050f4717dcc2dfd028aca9d21f3",
"translation_date": "2025-09-06T15:50:14+00:00",
"original_hash": "fb29e3e0be486fe8f15d50bdade79eb1",
"translation_date": "2026-07-17T18:49:14+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "he"
},

@ -1,60 +1,62 @@
# עבודה עם נתונים: Python וספריית Pandas
# עבודה עם נתונים: פייתון וספריית פנדס
| ![ סקיצה מאת [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| ![ רשום סקיצה על ידי [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| עבודה עם Python - _סקיצה מאת [@nitya](https://twitter.com/nitya)_ |
| עבודה עם פייתון - _רשום סקיצה על ידי [@nitya](https://twitter.com/nitya)_ |
[![סרטון מבוא](../../../../translated_images/he/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
[![וידאו מבוא](../../../../translated_images/he/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
בעוד שמאגרי נתונים מציעים דרכים יעילות מאוד לאחסן נתונים ולבצע שאילתות באמצעות שפות שאילתה, הדרך הגמישה ביותר לעיבוד נתונים היא כתיבת תוכנית משלך כדי לתפעל נתונים. במקרים רבים, ביצוע שאילתה במאגר נתונים יהיה דרך יעילה יותר. עם זאת, במקרים שבהם נדרש עיבוד נתונים מורכב יותר, לא ניתן לבצע זאת בקלות באמצעות SQL.
ניתן לתכנת עיבוד נתונים בכל שפת תכנות, אך ישנן שפות מסוימות שהן ברמה גבוהה יותר בכל הנוגע לעבודה עם נתונים. מדעני נתונים בדרך כלל מעדיפים אחת מהשפות הבאות:
בעוד שמסדי נתונים מציעים דרכים מאוד יעילות לאחסן נתונים ולבצע שאילתות באמצעות שפות שאילתא, הדרך הגמישה ביותר לעיבוד נתונים היא לכתוב תוכנית משלך למניפולציה של הנתונים. במקרים רבים, ביצוע שאילתה במסד הנתונים יהיה דרך יעילה יותר. עם זאת, במקרים מסוימים כאשר נדרש עיבוד נתונים מורכב יותר, לא ניתן לבצע זאת בקלות באמצעות SQL.
עיבוד נתונים ניתן לתכנת בכל שפת תכנות, אך יש שפות מסוימות שהן ברמה גבוהה יותר יחסית לעבודה עם נתונים. מדעני נתונים בדרך כלל מעדיפים אחת מהשפות הבאות:
* **[Python](https://www.python.org/)**, שפת תכנות כללית, שנחשבת לעיתים קרובות כאחת האפשרויות הטובות ביותר למתחילים בשל הפשטות שלה. ל-Python יש הרבה ספריות נוספות שיכולות לעזור לך לפתור בעיות מעשיות רבות, כמו חילוץ נתונים מארכיון ZIP או המרת תמונה לגווני אפור. בנוסף למדעי הנתונים, Python משמשת גם לעיתים קרובות לפיתוח אתרים.
* **[R](https://www.r-project.org/)** היא כלי מסורתי שפותח עם עיבוד נתונים סטטיסטיים בראש. היא מכילה גם מאגר גדול של ספריות (CRAN), מה שהופך אותה לבחירה טובה לעיבוד נתונים. עם זאת, R אינה שפת תכנות כללית, והיא משמשת לעיתים רחוקות מחוץ לתחום מדעי הנתונים.
* **[Julia](https://julialang.org/)** היא שפה נוספת שפותחה במיוחד עבור מדעי הנתונים. היא נועדה לספק ביצועים טובים יותר מ-Python, מה שהופך אותה לכלי מצוין לניסויים מדעיים.
* **[פייתון](https://www.python.org/)**, שפת תכנות כללית, שלרוב נחשבת לאחד מהאפשרויות הטובות למתחילים בגלל הפשטות שלה. לפייתון יש הרבה ספריות נוספות שיכולות לעזור לך לפתור בעיות מעשיות רבות, כמו חילוץ הנתונים שלך מארכיון ZIP, או המרת תמונה לגווני אפור. בנוסף למדעי הנתונים, פייתון משמשת לעיתים קרובות גם לפיתוח אתרים.
* **[R](https://www.r-project.org/)** היא ארגז כלים מסורתי שפותח עם עיבוד נתונים סטטיסטי במחשבה. היא מכילה גם מאגר גדול של ספריות (CRAN), מה שעושה אותה לבחירה טובה לעיבוד נתונים. עם זאת, R אינה שפת תכנות כללית, והשתמשה בה לעיתים נדירות מחוץ לתחום מדעי הנתונים.
* **[Julia](https://julialang.org/)** היא שפה נוספת שפותחה במיוחד עבור מדעי הנתונים. היא נועדה לספק ביצועים טובים יותר מאשר פייתון, מה שעושה אותה כלי נהדר לניסויים מדעיים.
בשיעור זה, נתמקד בשימוש ב-Python לעיבוד נתונים פשוט. נניח היכרות בסיסית עם השפה. אם ברצונך סיור מעמיק יותר ב-Python, תוכל לעיין באחד מהמשאבים הבאים:
בשיעור זה, נתמקד בשימוש בפייתון לעיבוד נתונים פשוט. נניח הכרות בסיסית עם השפה. אם ברצונך לסיור מעמיק יותר בפייתון, תוכל להפנות לאחד מהמשאבים הבאים:
* [למד Python בדרך מהנה עם גרפיקה של צב ופרקטלים](https://github.com/shwars/pycourse) - קורס מבוא מהיר ל-Python מבוסס GitHub
* [עשה את הצעדים הראשונים שלך עם Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) מסלול למידה ב-[Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [למד פייתון באופן מהנה עם גרפיקה של צב ופרקטלים](https://github.com/shwars/pycourse) - קורס מבוא מהיר מבוסס GitHub לתכנות בפייתון
* [קח את צעדי הראשונים עם פייתון](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) מסלול למידה ב-[Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
נתונים יכולים להגיע בצורות רבות. בשיעור זה, נתמקד בשלוש צורות של נתונים - **נתונים טבלאיים**, **טקסט** ו**תמונות**.
נתונים יכולים לבוא בצורות רבות. בשיעור זה, נתייחס לשלוש צורות של נתונים - **נתונים טבלאיים**, **טקסט** ו-**תמונות**.
נתמקד בכמה דוגמאות לעיבוד נתונים, במקום לתת לך סקירה מלאה של כל הספריות הקשורות. זה יאפשר לך להבין את הרעיון המרכזי של מה אפשרי, ולהשאיר אותך עם הבנה היכן למצוא פתרונות לבעיות שלך כשאתה זקוק להם.
נתמקד בכמה דוגמאות של עיבוד נתונים, במקום לספק מבט כולל על כל הספריות הקשורות. זה יאפשר לך לקבל את הרעיון המרכזי מה אפשרי, ולתת לך הבנה איפה למצוא פתרונות לבעיות שלך כשאתה צריך.
> **העצה הכי שימושית**. כשאתה צריך לבצע פעולה מסוימת על נתונים שאינך יודע כיצד לבצע, נסה לחפש אותה באינטרנט. [Stackoverflow](https://stackoverflow.com/) בדרך כלל מכיל הרבה דוגמאות קוד שימושיות ב-Python עבור משימות טיפוסיות רבות.
> **העצה הכי מועילה**. כשאתה צריך לבצע פעולה מסוימת על נתונים שאינך יודע כיצד לעשות, נסה לחפש את זה באינטרנט. בדרך כלל באתר [Stackoverflow](https://stackoverflow.com/) יש המון דוגמאות קוד שימושי בפייתון לרבים מהמשימות הטיפוסיות.
## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## נתונים טבלאיים ו-Dataframes
כבר פגשת נתונים טבלאיים כשדיברנו על מאגרי נתונים יחסיים. כשיש לך הרבה נתונים, והם נמצאים בטבלאות רבות ומקושרות, בהחלט יש היגיון להשתמש ב-SQL לעבודה איתם. עם זאת, ישנם מקרים רבים שבהם יש לנו טבלה של נתונים, ואנו צריכים לקבל **הבנה** או **תובנות** על הנתונים הללו, כמו התפלגות, קורלציה בין ערכים, וכו'. במדעי הנתונים, ישנם מקרים רבים שבהם אנו צריכים לבצע כמה טרנספורמציות של הנתונים המקוריים, ולאחר מכן ויזואליזציה. שני השלבים הללו יכולים להתבצע בקלות באמצעות Python.
## [מבחן קצר לפני ההרצאה](https://ff-quizzes.netlify.app/en/ds/quiz/12)
ישנן שתי ספריות שימושיות ביותר ב-Python שיכולות לעזור לך להתמודד עם נתונים טבלאיים:
* **[Pandas](https://pandas.pydata.org/)** מאפשרת לך לתפעל **Dataframes**, שהם אנלוגיים לטבלאות יחסיות. ניתן להגדיר עמודות עם שמות, ולבצע פעולות שונות על שורות, עמודות ו-Dataframes באופן כללי.
* **[Numpy](https://numpy.org/)** היא ספרייה לעבודה עם **tensors**, כלומר **מערכים** רב-ממדיים. מערך מכיל ערכים מסוג בסיסי זהה, והוא פשוט יותר מ-Dataframe, אך מציע יותר פעולות מתמטיות ויוצר פחות עומס.
## נתונים טבלאיים ומסגרות נתונים
ישנן גם כמה ספריות נוספות שכדאי להכיר:
* **[Matplotlib](https://matplotlib.org/)** היא ספרייה המשמשת לויזואליזציה של נתונים ושרטוט גרפים
* **[SciPy](https://www.scipy.org/)** היא ספרייה עם כמה פונקציות מדעיות נוספות. כבר נתקלנו בספרייה זו כשדיברנו על הסתברות וסטטיסטיקה
כבר הכרנו את הנתונים הטבלאיים כשדיברנו על מסדי נתונים יחסיים. כשיש לך הרבה נתונים, והם נמצאים בטבלאות מקושרות שונות, בהחלט יש הגיון להשתמש ב-SQL לעבודה איתם. עם זאת, יש מקרים רבים בהם יש לנו טבלה של נתונים, ואנחנו צריכים לקבל **הבנה** או **תובנות** על נתונים אלה, כגון התפלגות, קורלציה בין הערכים וכו'. במדעי הנתונים, יש הרבה מקרים בהם נדרש לבצע טרנספורמציות מסוימות על הנתונים המקוריים, ואחר כך להמחיש אותם. שני הצעדים האלה יכולים להיעשות בקלות באמצעות פייתון.
הנה קטע קוד שתשתמש בו בדרך כלל כדי לייבא את הספריות הללו בתחילת תוכנית Python שלך:
יש שתי ספריות הכי שימושיות בפייתון שיכולות לעזור לך לטפל בנתונים טבלאיים:
* **[Pandas](https://pandas.pydata.org/)** מאפשרת לך לתפעל את מה שנקרא **מסגרות נתונים (Dataframes)**, שהן אנלוגיות לטבלאות יחסיות. ניתן להגדיר עמודות עם שמות, ולבצע פעולות שונות על שורות, עמודות ומסגרות נתונים בכלל.
* **[Numpy](https://numpy.org/)** היא ספריה לעבודה עם **טנסורים**, כלומר **מערכים** רב-ממדיים. למערך יש ערכים מאותו סוג בסיסי, והוא פשוט יותר ממסגרת נתונים, אך מציע יותר פעולות מתמטיות ויוצר פחות עומס.
יש גם כמה ספריות נוספות שכדאי לדעת עליהן:
* **[Matplotlib](https://matplotlib.org/)** היא ספריה המשמשת להמחשת נתונים וציור גרפים
* **[SciPy](https://www.scipy.org/)** היא ספריה עם פונקציות מדעיות נוספות. כבר פגשנו את הספריה הזו כשדיברנו על הסתברות וסטטיסטיקה
הנה קטע קוד שתשתמש בדרך כלל כדי לייבא את הספריות האלה בהתחלת תוכנית הפייתון שלך:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # עליך לציין במדויק את תתי-החבילות שאתה צריך
```
Pandas מתמקדת בכמה מושגים בסיסיים.
פנדס מתמקדת בכמה מושגים בסיסיים.
### Series
### Series
**Series** היא רצף של ערכים, בדומה לרשימה או מערך numpy. ההבדל העיקרי הוא ש-Series מכילה גם **אינדקס**, וכשאנחנו מבצעים פעולות על Series (למשל, מוסיפים אותם), האינדקס נלקח בחשבון. האינדקס יכול להיות פשוט כמו מספר שורה שלם (זהו האינדקס המשמש כברירת מחדל בעת יצירת Series מרשימה או מערך), או שהוא יכול להיות בעל מבנה מורכב, כמו מרווחי תאריכים.
**סדרה (Series)** היא רצף של ערכים, דומה לרשימה או למערך מ-numpy. ההבדל העיקרי הוא שלסדרה יש גם **אינדקס**, וכאשר אנו מבצעים פעולות על סדרות (למשל, חיבור), האינדקס נלקח בחשבון. האינדקס יכול להיות פשוט כמו מספר שורה שלם (זה האינדקס שנמצא כברירת מחדל כשמייצרים סדרה מרשימה או מערך), או שהוא יכול להיות בעל מבנה מורכב, למשל טווח תאריכים.
> **הערה**: יש קוד מבוא ל-Pandas במחברת המצורפת [`notebook.ipynb`](notebook.ipynb). אנו מציינים כאן רק כמה דוגמאות, ואתם בהחלט מוזמנים לבדוק את המחברת המלאה.
> **הערה**: יש קוד פתיחה לפנדס במחברת הנלווית [`notebook.ipynb`](notebook.ipynb). כאן רק נספק כמה דוגמאות, ואתם מוזמנים לבדוק את המחברת המלאה.
לדוגמה: אנו רוצים לנתח מכירות של חנות הגלידה שלנו. בואו ניצור סדרת מספרי מכירות (מספר הפריטים שנמכרו בכל יום) עבור תקופת זמן מסוימת:
קחו דוגמה: אנו מעוניינים לנתח מכירות של דוכן הגלידה שלנו. בואו נייצר סדרת מספרי מכירות (מספר פריטים שנמכרו בכל יום) לתקופה מסוימת:
```python
start_date = "Jan 1, 2020"
@ -66,29 +68,29 @@ items_sold.plot()
```
![גרף סדרת זמן](../../../../translated_images/he/timeseries-1.80de678ab1cf727e.webp)
עכשיו נניח שבכל שבוע אנו מארגנים מסיבה לחברים, ולוקחים 10 חבילות נוספות של גלידה למסיבה. נוכל ליצור סדרה נוספת, עם אינדקס לפי שבוע, כדי להדגים זאת:
עכשיו נניח שבכל שבוע אנחנו מארגנים מסיבה לחברים, ואנחנו לוקחים 10 חבילות גלידה נוספות למסיבה. נוכל ליצור סדרה נוספת, עם אינדקס לפי שבוע, להדגים זאת:
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
כשאנו מוסיפים שתי סדרות יחד, אנו מקבלים את המספר הכולל:
כאשר אנו מחברים שתי סדרות, מקבלים מספר כולל:
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```
![גרף סדרת זמן](../../../../translated_images/he/timeseries-2.aae51d575c55181c.webp)
> **הערה** שאנו לא משתמשים בתחביר הפשוט `total_items+additional_items`. אם היינו עושים זאת, היינו מקבלים הרבה ערכי `NaN` (*Not a Number*) בסדרה המתקבלת. זאת מכיוון שיש ערכים חסרים עבור חלק מנקודות האינדקס בסדרת `additional_items`, והוספת `NaN` לכל דבר תוצאה ב-`NaN`. לכן עלינו לציין את הפרמטר `fill_value` במהלך ההוספה.
> **הערה** שאנחנו לא משתמשים בתחביר הפשוט `total_items+additional_items`. אם היינו עושים זאת, היינו מקבלים הרבה ערכי `NaN` (*לא מספר*) בסדרה התוצאה. זה נובע מכיוון שיש ערכים חסרים עבור חלק מנקודות האינדקס בסדרה `additional_items`, וחיבור `NaN` לכל דבר מוביל ל-`NaN`. לכן, יש לציין את הפרמטר `fill_value` בעת החיבור.
עם סדרות זמן, אנו יכולים גם **לדגום מחדש** את הסדרה עם מרווחי זמן שונים. לדוגמה, נניח שאנו רוצים לחשב את ממוצע נפח המכירות חודשי. נוכל להשתמש בקוד הבא:
עם סדרות זמן, ניתן גם **לדגום מחדש** את הסדרה עם מרווחי זמן שונים. לדוגמה, נניח וברצוננו לחשב ממוצע מכירות חודשי. נוכל להשתמש בקוד הבא:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![ממוצעים חודשיים של סדרת זמן](../../../../translated_images/he/timeseries-3.f3147cbc8c624881.webp)
![ממוצעים חודשיים בסדרת זמן](../../../../translated_images/he/timeseries-3.f3147cbc8c624881.webp)
### DataFrame
DataFrame הוא למעשה אוסף של סדרות עם אותו אינדקס. אנו יכולים לשלב כמה סדרות יחד ליצירת DataFrame:
מסגרת נתונים (DataFrame) היא בעצם אוסף של סדרות עם אותו אינדקס. אפשר לשלב כמה סדרות יחד למסגרת נתונים:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
@ -100,11 +102,11 @@ df = pd.DataFrame([a,b])
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | I | like | to | use | Python | and | Pandas | very | much |
אנו יכולים גם להשתמש בסדרות כעמודות, ולציין שמות עמודות באמצעות מילון:
ניתן גם להשתמש בסדרות כעמודות, ולציין שמות לעמודות באמצעות מילון:
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
זה ייתן לנו טבלה כמו זו:
זה יתן לנו טבלה כמו זו:
| | A | B |
| --- | --- | ------ |
@ -118,39 +120,39 @@ df = pd.DataFrame({ 'A' : a, 'B' : b })
| 7 | 8 | very |
| 8 | 9 | much |
**הערה** שאנו יכולים גם לקבל את פריסת הטבלה הזו על ידי טרנספוזיציה של הטבלה הקודמת, למשל על ידי כתיבה
**הערה** שאפשר גם לקבל את פריסת הטבלה הזו על ידי טרנספוזיציה של הטבלה הקודמת, לדוגמה על ידי כתיבה
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })
```
כאן `.T` מתייחס לפעולת הטרנספוזיציה של ה-DataFrame, כלומר שינוי שורות ועמודות, ופעולת `rename` מאפשרת לנו לשנות את שמות העמודות כך שיתאימו לדוגמה הקודמת.
כאן `.T` מתאר את הפעולה של הטרנספוזיציה של מסגרת הנתונים, כלומר החלפת שורות ועמודות, ופעולת `rename` מאפשרת לנו לשנות את שמות העמודות כך שיתאימו לדוגמה הקודמת.
הנה כמה מהפעולות החשובות ביותר שניתן לבצע על DataFrames:
הנה כמה מהפעולות החשובות ביותר שאפשר לבצע על מסגרות נתונים:
**בחירת עמודות**. ניתן לבחור עמודות בודדות על ידי כתיבה `df['A']` - פעולה זו מחזירה סדרה. ניתן גם לבחור תת-קבוצה של עמודות ל-DataFrame אחר על ידי כתיבה `df[['B','A']]` - פעולה זו מחזירה DataFrame נוסף.
**בחירת עמודות**. ניתן לבחור עמודה בודדת על ידי כתיבת `df['A']` - פעולה זו מחזירה סדרה. ניתן גם לבחור תת-קבוצה של עמודות למסגרת נתונים אחרת על ידי כתיבת `df[['B','A']]` - פעולה זו מחזירה מסגרת נתונים נוספת.
**סינון** שורות מסוימות לפי קריטריונים. לדוגמה, כדי להשאיר רק שורות עם עמודה `A` גדולה מ-5, ניתן לכתוב `df[df['A']>5]`.
**סינון** של שורות מסוימות לפי קריטריונים. לדוגמה, כדי להשאיר רק שורות שבהן העמודה `A` גדולה מ-5, נוכל לכתוב `df[df['A']>5]`.
> **הערה**: הדרך שבה סינון עובד היא כדלקמן. הביטוי `df['A']<5` מחזיר סדרה בוליאנית, שמציינת האם הביטוי הוא `True` או `False` עבור כל אלמנט בסדרה המקורית `df['A']`. כאשר סדרה בוליאנית משמשת כאינדקס, היא מחזירה תת-קבוצה של שורות ב-DataFrame. לכן, לא ניתן להשתמש בביטוי בוליאני שרירותי של Python, לדוגמה, כתיבה `df[df['A']>5 and df['A']<7]` תהיה שגויה. במקום זאת, יש להשתמש בפעולת `&` מיוחדת על סדרות בוליאניות, ולכתוב `df[(df['A']>5) & (df['A']<7)]` (*סוגריים חשובים כאן*).
> **הערה**: הדרך בה הסינון עובד היא כזו. הביטוי `df['A']<5` מחזיר סדרת בוליאן, שמסמנת האם הביטוי הוא `True` או `False` עבור כל איבר בסדרת המקור `df['A']`. כאשר סדרת בוליאן משמשת כאינדקס, היא מחזירה תת-קבוצה של שורות במסגרת הנתונים. לכן אי אפשר להשתמש בביטוי בוליאני ארבי בפייתון, למשל, כתיבת `df[df['A']>5 and df['A']<7]` תהיה שגויה. במקום זאת, יש להשתמש באופרציה מיוחדת `&` על סדרות בוליאניות, לכתוב `df[(df['A']>5) & (df['A']<7)]` (*הסוגריים חשובים כאן*).
**יצירת עמודות חדשות לחישוב**. ניתן ליצור בקלות עמודות חדשות לחישוב עבור ה-DataFrame שלנו באמצעות ביטוי אינטואיטיבי כמו זה:
**יצירת עמודות חדשות לחישוב**. ניתן בקלות ליצור עמודות חדשות לחישוב במסגרת הנתונים על ידי שימוש בביטוי אינטואיטיבי כזה:
```python
df['DivA'] = df['A']-df['A'].mean()
```
דוגמה זו מחשבת את הסטייה של A מערך הממוצע שלה. מה שקורה בפועל כאן הוא שאנו מחשבים סדרה, ואז מקצים את הסדרה הזו לצד השמאלי, ויוצרים עמודה נוספת. לכן, לא ניתן להשתמש בפעולות שאינן תואמות לסדרות, לדוגמה, הקוד הבא שגוי:
בדוגמה זו מחושבת סטייה של A מערכה הממוצעת שלו. מה שבפועל קורה כאן הוא שאנו מחשבים סדרה ומאוחר יותר מציבים סדרה זו בצד השמאלי, ויוצרים עמודה חדשה. לכן, לא ניתן להשתמש בפעולות שאינן תואמות לסדרות, לדוגמה, הקוד הבא שגוי:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
# קוד שגוי -> df['ADescr'] = "נמוך" אם df['A'] < 5 אחרת "גבוה"
df['LenB'] = len(df['B']) # <- תוצאה שגויה
```
הדוגמה האחרונה, למרות שהיא נכונה מבחינה תחבירית, נותנת לנו תוצאה שגויה, מכיוון שהיא מקצה את אורך הסדרה `B` לכל הערכים בעמודה, ולא את אורך האלמנטים הבודדים כפי שהתכוונו.
הדוגמה האחרונה, אף על פי שהיא תחבירית נכונה, נותנת תוצאה שגויה, כיוון שהיא מייחסת את האורך של הסדרה `B` לכל הערכים בעמודה, ולא את האורך של האיברים בודדים כפי שהתכוונו.
אם אנו צריכים לחשב ביטויים מורכבים כאלה, ניתן להשתמש בפונקציית `apply`. הדוגמה האחרונה יכולה להיכתב כך:
אם צריך לחשב ביטויים מורכבים כאלה, אפשר להשתמש בפונקציה `apply`. הדוגמה האחרונה ניתנת לכתיבה כך:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# או
df['LenB'] = df['B'].apply(len)
```
לאחר הפעולות לעיל, נקבל את ה-DataFrame הבא:
לאחר הפעולות הנ"ל, נקבל את מסגרת הנתונים הבאה:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
@ -164,16 +166,16 @@ df['LenB'] = df['B'].apply(len)
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**בחירת שורות לפי מספרים** ניתן לבצע באמצעות מבנה `iloc`. לדוגמה, כדי לבחור את 5 השורות הראשונות מה-DataFrame:
**בחירת שורות על בסיס מספרים** ניתן לבצע באמצעות המונח `iloc`. לדוגמה, כדי לבחור את חמש השורות הראשונות ממסגרת הנתונים:
```python
df.iloc[:5]
```
**קיבוץ** משמש לעיתים קרובות לקבלת תוצאה דומה ל-*טבלאות ציר* ב-Excel. נניח שאנו רוצים לחשב את ערך הממוצע של עמודה `A` עבור כל מספר נתון של `LenB`. אז נוכל לקבץ את ה-DataFrame שלנו לפי `LenB`, ולקרוא ל-`mean`:
**קיבוץ** משמש לעיתים לקבל תוצאה דומה ל-*טבלאות ציר (pivot tables)* באקסל. נניח שאנחנו רוצים לחשב את הממוצע של עמודה `A` עבור כל ערך נתון של `LenB`. אז נוכל לקבץ את מסגרת הנתונים לפי `LenB`, ולהפעיל `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
אם אנו צריכים לחשב ממוצע ומספר האלמנטים בקבוצה, אז נוכל להשתמש בפונקציית `aggregate` מורכבת יותר:
אם נרצה לחשב גם ממוצע וגם את מספר האיברים בקבוצה, נוכל להשתמש בפונקציית `aggregate` מורכבת יותר:
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
@ -190,92 +192,97 @@ df.groupby(by='LenB') \
| 6 | 2 | 6.000000 |
### קבלת נתונים
ראינו כמה קל ליצור Series ו-DataFrames מאובייקטים של Python. עם זאת, נתונים בדרך כלל מגיעים בצורה של קובץ טקסט או טבלת Excel. למרבה המזל, Pandas מציעה דרך פשוטה לטעון נתונים מהדיסק. לדוגמה, קריאת קובץ CSV היא פשוטה כמו זו:
ראינו כמה קל לבנות סדרות ו-DataFrames מאובייקטים של פייתון. עם זאת, בדרך כלל הנתונים מגיעים בצורה של קובץ טקסט או טבלת Excel. למרבה המזל, Pandas מציעה לנו דרך פשוטה לטעון נתונים מהדיסק. למשל, קריאת קובץ CSV היא פשוטה כמו זה:
```python
df = pd.read_csv('file.csv')
```
נראה דוגמאות נוספות לטעינת נתונים, כולל הבאתם מאתרים חיצוניים, בחלק "אתגר".
נראה דוגמאות נוספות לטעינת נתונים, כולל קבלת נתונים מאתרים חיצוניים, בקטע "האתגר"
### הדפסה וגרפיקה
### הדפסה וגרפים
מדען נתונים לעיתים קרובות צריך לחקור את הנתונים, ולכן חשוב להיות מסוגל להציג אותם בצורה חזותית. כאשר DataFrame גדול, פעמים רבות אנו רוצים רק לוודא שאנחנו עושים הכל נכון על ידי הדפסת השורות הראשונות. ניתן לעשות זאת על ידי קריאה ל-`df.head()`. אם אתם מריצים זאת מתוך Jupyter Notebook, זה ידפיס את ה-DataFrame בצורה טבלאית יפה.
למדען נתונים לעיתים קרובות יש צורך לחקור את הנתונים, ולכן חשוב להיות מסוגלים לויזואליזציה שלהם. כאשר ה-DataFrame גדול, פעמים רבות אנחנו רק רוצים לוודא שאנחנו עושים הכל נכון על ידי הדפסת השורות הראשונות. ניתן לעשות זאת על ידי קריאה ל-`df.head()`. אם אתם מריצים זאת ב-Jupyter Notebook, זה ידפיס את ה-DataFrame בצורה טבלאית נאה.
כמו כן, ראינו את השימוש בפונקציה `plot` כדי להציג גרפית עמודות מסוימות. בעוד ש-`plot` מאוד שימושית למשימות רבות ותומכת בסוגי גרפים שונים באמצעות הפרמטר `kind=`, תמיד ניתן להשתמש בספריית `matplotlib` הגולמית כדי ליצור גרפים מורכבים יותר. נעסוק בהדמיית נתונים בפירוט בשיעורים נפרדים בקורס.
ראינו גם שימוש בפונקציית `plot` לויזואליזציה של עמודות מסוימות. בעוד ש-`plot` שימושי מאוד למשימות רבות, ותומך בסוגים שונים של גרפים באמצעות הפרמטר `kind=`, תמיד תוכלו להשתמש בספריית `matplotlib` הגולמית כדי לשרטט משהו מורכב יותר. נסקור את ויזואליזציית הנתונים בפירוט בשיעורים נפרדים.
סקירה זו מכסה את הרעיונות החשובים ביותר של Pandas, אך הספרייה עשירה מאוד ואין גבול למה שניתן לעשות איתה! עכשיו ניישם את הידע הזה לפתרון בעיה ספציפית.
סקירה זו מכסה את המושגים החשובים ביותר של Pandas, עם זאת, הספרייה עשירה מאוד, ואין גבול למה שניתן לעשות איתה! עכשיו בואו ניישם את הידע הזה לפתרון בעיה ספציפית.
## 🚀 אתגר 1: ניתוח התפשטות COVID
## 🚀 אתגר 1: ניתוח הפצת COVID
הבעיה הראשונה שבה נתמקד היא מודלינג של התפשטות מגפת COVID-19. כדי לעשות זאת, נשתמש בנתונים על מספר הנדבקים במדינות שונות, המסופקים על ידי [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) ב-[אוניברסיטת ג'ונס הופקינס](https://jhu.edu/). מערך הנתונים זמין ב-[מאגר GitHub זה](https://github.com/CSSEGISandData/COVID-19).
הבעיה הראשונה שעליה נתמקד היא מודל הפצת מגפת COVID-19. לצורך כך, נשתמש בנתונים על מספר הנדבקים במדינות שונות, שמסופקים על ידי [המרכז למדעי מערכות והנדסה](https://systems.jhu.edu/) (CSSE) באוניברסיטת [ג'ונס הופקינס](https://jhu.edu/). מערך הנתונים זמין ב-[מאגר GitHub זה](https://github.com/CSSEGISandData/COVID-19).
מכיוון שאנחנו רוצים להדגים כיצד להתמודד עם נתונים, אנו מזמינים אתכם לפתוח את [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) ולקרוא אותו מההתחלה ועד הסוף. תוכלו גם להריץ תאים ולעשות כמה אתגרים שהשארנו לכם בסוף.
כיוון שאנו רוצים להדגים איך להתמודד עם נתונים, אנו מזמינים אתכם לפתוח את [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) ולקרוא אותו מלמעלה למטה. אתם יכולים גם להריץ את התאים ולעשות אתגרים שהשארנו לכם בסוף.
![התפשטות COVID](../../../../translated_images/he/covidspread.f3d131c4f1d260ab.webp)
![COVID Spread](../../../../translated_images/he/covidspread.f3d131c4f1d260ab.webp)
> אם אינכם יודעים כיצד להריץ קוד ב-Jupyter Notebook, עיינו ב-[מאמר זה](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> אם אינכם יודעים איך להריץ קוד ב-Jupyter Notebook, עיינו ב-[מאמר זה](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## עבודה עם נתונים לא מובנים
בעוד שנתונים לעיתים קרובות מגיעים בצורה טבלאית, במקרים מסוימים אנו צריכים להתמודד עם נתונים פחות מובנים, למשל טקסט או תמונות. במקרה כזה, כדי ליישם טכניקות עיבוד נתונים שראינו קודם, עלינו **לחלץ** נתונים מובנים. הנה כמה דוגמאות:
בעוד שלעיתים קרובות הנתונים מגיעים בצורה טבלאית, במקרים מסוימים אנחנו צריכים להתמודד עם נתונים פחות מובנים, למשל טקסט או תמונות. במקרה זה, כדי ליישם טכניקות עיבוד נתונים שלמעלה, עלינו באופן כלשהו **לחלץ** נתונים מובנים. הנה כמה דוגמאות:
* חילוץ מילות מפתח מטקסט ובדיקת תדירות הופעתן
* שימוש ברשתות נוירונים לחילוץ מידע על אובייקטים בתמונה
* קבלת מידע על רגשות של אנשים מזרם מצלמת וידאו
* חילוץ מילות מפתח מטקסט, ובדיקת כמה לעיתים מופיעות מילות המפתח האלו
* שימוש ברשתות עצביות לחילוץ מידע על עצמים בתמונה
* קבלת מידע על רגשות של אנשים בפיד של מצלמת וידאו
## 🚀 אתגר 2: ניתוח מאמרים על COVID
## 🚀 אתגר 2: ניתוח מאמרי COVID
באתגר זה, נמשיך עם נושא מגפת COVID, ונעסוק בעיבוד מאמרים מדעיים בנושא. ישנו [מערך נתונים CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) עם יותר מ-7000 (בזמן כתיבת שורות אלו) מאמרים על COVID, הזמינים עם מטא-נתונים ותקצירים (ולגבי כמחציתם גם טקסט מלא).
באתגר זה נמשיך עם נושא מגפת הקורונה, נתמקד בעיבוד מאמרים מדעיים בנושא. יש [מערך נתונים CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) עם למעלה מ-7000 (בעת הכתיבה) מאמרים על COVID, זמין עם מטא-דטה ותמלילים (ולכמחציתם גם הטקסט המלא).
דוגמה מלאה לניתוח מערך נתונים זה באמצעות [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) מתוארת [בפוסט בבלוג זה](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). נדון בגרסה פשוטה יותר של ניתוח זה.
דוגמה מלאה לניתוח מערך נתונים זה באמצעות שירות קוגניטיבי [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) מתוארת [בפוסט הבלוג הזה](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). נדון בגרסה מפושטת של ניתוח זה.
> **NOTE**: איננו מספקים עותק של מערך הנתונים כחלק ממאגר זה. ייתכן שתצטרכו להוריד תחילה את הקובץ [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) ממערך נתונים זה ב-Kaggle. ייתכן שתידרש הרשמה ל-Kaggle. תוכלו גם להוריד את מערך הנתונים ללא הרשמה [מכאן](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), אך הוא יכלול את כל הטקסטים המלאים בנוסף לקובץ המטא-נתונים.
> **הערה**: איננו מספקים עותק של מערך הנתונים כחלק מהמאגר הזה. ייתכן שתצטרכו להוריד תחילה את הקובץ [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) מ-[מערך הנתונים הזה בקגל](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). ייתכן שיידרש רישום בקגל. ניתן גם להוריד את מערך הנתונים ללא רישום [מכאן](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), אך זה יכלול את כל הטקסטים המלאים בנוסף לקובץ המטא-דטה.
פתחו את [`notebook-papers.ipynb`](notebook-papers.ipynb) וקראו אותו מההתחלה ועד הסוף. תוכלו גם להריץ תאים ולעשות כמה אתגרים שהשארנו לכם בסוף.
פתחו את [`notebook-papers.ipynb`](notebook-papers.ipynb) וקראו אותו מלמעלה למטה. אתם יכולים גם להריץ את התאים ולעשות אתגרים שהשארנו לכם בסוף.
![טיפול רפואי ב-COVID](../../../../translated_images/he/covidtreat.b2ba59f57ca45fbc.webp)
![Covid Medical Treatment](../../../../translated_images/he/covidtreat.b2ba59f57ca45fbc.webp)
## עיבוד נתוני תמונה
לאחרונה פותחו מודלים AI חזקים מאוד שמאפשרים לנו להבין תמונות. ישנם משימות רבות שניתן לפתור באמצעות רשתות נוירונים מוכנות מראש או שירותי ענן. כמה דוגמאות כוללות:
לאחרונה פותחו מודלים רבי עוצמה של בינה מלאכותית שמאפשרים לנו להבין תמונות. ישנן משימות רבות שניתן לפתור באמצעות רשתות עצביות מאומנות מראש או שירותי ענן. כמה דוגמאות כוללות:
* **סיווג תמונות**, שיכול לעזור לכם לקטלג את התמונה לאחת מהקטגוריות המוגדרות מראש. ניתן בקלות לאמן מסווגי תמונות משלכם באמצעות שירותים כמו [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **זיהוי אובייקטים** כדי לזהות אובייקטים שונים בתמונה. שירותים כמו [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) יכולים לזהות מספר אובייקטים נפוצים, וניתן לאמן מודל [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) לזהות אובייקטים ספציפיים שמעניינים אתכם.
* **מיון תמונות**, שיכול לעזור לך לסווג את התמונה לאחת הכיתות המוגדרות מראש. תוכלו בקלות לאמן מסווג תמונות משלכם באמצעות שירותים כגון [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **זיהוי עצמים** לאיתור עצמים שונים בתמונה. שירותים כגון [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) יכולים לזהות מספר עצמים נפוצים, וניתן לאמן מודל של [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) כדי לאתר עצמים ספציפיים בעלי עניין.
* **זיהוי פנים**, כולל גיל, מגדר וזיהוי רגשות. ניתן לעשות זאת באמצעות [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
כל שירותי הענן הללו יכולים להיקרא באמצעות [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), ולכן ניתן לשלבם בקלות בתהליך חקר הנתונים שלכם.
כל השירותי ענן הללו ניתנים לקריאה באמצעות [ערכות SDK של פייתון](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), ולכן ניתן לשלבם בקלות בתהליך חקר הנתונים שלכם.
הנה כמה דוגמאות לחקר נתונים ממקורות תמונה:
* בפוסט בבלוג [איך ללמוד מדעי נתונים ללא קוד](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) אנו חוקרים תמונות מאינסטגרם, בניסיון להבין מה גורם לאנשים לתת יותר לייקים לתמונה. תחילה אנו מחלצים כמה שיותר מידע מתמונות באמצעות [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), ואז משתמשים ב-[Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) כדי לבנות מודל שניתן לפרש.
* ב-[סדנת מחקרי פנים](https://github.com/CloudAdvocacy/FaceStudies) אנו משתמשים ב-[Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) כדי לחלץ רגשות של אנשים בתמונות מאירועים, בניסיון להבין מה גורם לאנשים להיות שמחים.
* בפוסט הבלוג [איך ללמוד מדעי הנתונים בלי קידוד](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) אנו חוקרים תמונות מאינסטגרם, מנסים להבין מה גורם לאנשים לתת יותר לייקים לתמונה. תחילה אנו מחלצים כמה שיותר מידע מהתמונות באמצעות [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), ואז משתמשים ב-[Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) לבניית מודל מתפרש.
* בסדנת [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) אנו משתמשים ב-[Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) לחלוץ רגשות של אנשים בתמונות מאירועים, במטרה לנסות להבין מה גורם לאנשים להיות שמחים.
## סיכום
בין אם כבר יש לכם נתונים מובנים או לא מובנים, באמצעות Python תוכלו לבצע את כל השלבים הקשורים לעיבוד והבנת נתונים. זו כנראה הדרך הגמישה ביותר לעיבוד נתונים, וזו הסיבה שרוב מדעני הנתונים משתמשים ב-Python ככלי העיקרי שלהם. ללמוד Python לעומק זו כנראה החלטה טובה אם אתם רציניים לגבי המסע שלכם במדעי הנתונים!
בין אם כבר יש לכם נתונים מובנים או לא מובנים, באמצעות פייתון אתם יכולים לבצע את כל השלבים הקשורים לעיבוד והבנת הנתונים. זו כנראה הדרך הגמישה ביותר לעיבוד נתונים, ולכן רוב מדעני הנתונים משתמשים בפייתון ככלי הראשי שלהם. ללמוד פייתון לעומק זו כנראה רעיון טוב אם אתם רציניים לגבי מסע מדעי הנתונים שלכם!
## [שאלון לאחר השיעור](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## [מבחן לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## סקירה ולימוד עצמי
## סקירה ולמידה עצמית
**ספרים**
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**משאבים מקוונים**
* מדריך רשמי [10 דקות ל-Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [תיעוד על הדמיית נתונים ב-Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
* מדריך רשמי של [10 דקות לפנדס](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [תיעוד על ויזואליזציה בפנדס](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**לימוד Python**
* [למדו Python בצורה מהנה עם גרפיקת צב ופרקטלים](https://github.com/shwars/pycourse)
* [עשו את הצעדים הראשונים שלכם עם Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) מסלול לימוד ב-[Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
**לימוד פייתון**
* [למדו פייתון בדרך מהנה עם גרפיקה של צב ופרקטלים](https://github.com/shwars/pycourse)
* [קחו את הצעדים הראשונים שלכם עם פייתון](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) מסלול לימוד ב-[Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## משימה
[בצעו מחקר נתונים מפורט יותר עבור האתגרים לעיל](assignment.md)
[בצעו מחקר נתונים מפורט יותר לאתגרים שלמעלה](assignment.md)
## קרדיטים
שיעור זה נכתב באהבה על ידי [Dmitry Soshnikov](http://soshnikov.com)
שיעור זה נכתב באהבה על ידי [דמיטרי סושניקוב](http://soshnikov.com)
---
**כתב ויתור**:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפתו המקורית נחשב למקור הסמכותי. למידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי בני אדם. איננו נושאים באחריות לכל אי-הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**כתב ויתור**:
מסמך זה תורגם באמצעות שירות תרגום אוטומטי [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -96,8 +96,8 @@
"language_code": "nl"
},
"2-Working-With-Data/07-python/README.md": {
"original_hash": "7bfec050f4717dcc2dfd028aca9d21f3",
"translation_date": "2025-09-06T15:49:22+00:00",
"original_hash": "fb29e3e0be486fe8f15d50bdade79eb1",
"translation_date": "2026-07-17T18:47:48+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "nl"
},

@ -1,60 +1,62 @@
# Werken met Data: Python en de Pandas-bibliotheek
# Werken met Gegevens: Python en de Pandas Bibliotheek
| ![ Sketchnote door [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| ![ Sketchnote van [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| Werken met Python - _Sketchnote door [@nitya](https://twitter.com/nitya)_ |
[![Intro Video](../../../../translated_images/nl/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
Hoewel databases zeer efficiënte manieren bieden om gegevens op te slaan en te raadplegen met behulp van querytalen, is de meest flexibele manier van gegevensverwerking het schrijven van je eigen programma om gegevens te manipuleren. In veel gevallen is een databasequery een effectievere aanpak. Maar in sommige gevallen, wanneer complexere gegevensverwerking nodig is, kan dit niet eenvoudig met SQL worden gedaan.
Gegevensverwerking kan worden geprogrammeerd in elke programmeertaal, maar er zijn bepaalde talen die beter geschikt zijn voor het werken met data. Datawetenschappers geven meestal de voorkeur aan een van de volgende talen:
Hoewel databases zeer efficiënte manieren bieden om data op te slaan en te bevragen met querytalen, is de meest flexibele manier van dataverwerking het schrijven van je eigen programma om data te manipuleren. In veel gevallen zou een database-query effectiever zijn. Echter, in sommige gevallen wanneer meer complexe dataverwerking nodig is, kan dit niet gemakkelijk met SQL worden gedaan.
Dataverwerking kan geprogrammeerd worden in elke programmeertaal, maar er zijn bepaalde talen die hoger niveau zijn met betrekking tot werken met data. Datascientists geven meestal de voorkeur aan een van de volgende talen:
* **[Python](https://www.python.org/)**, een algemene programmeertaal die vaak wordt beschouwd als een van de beste opties voor beginners vanwege de eenvoud. Python heeft veel extra bibliotheken die je kunnen helpen bij het oplossen van praktische problemen, zoals het extraheren van gegevens uit een ZIP-archief of het converteren van een afbeelding naar grijswaarden. Naast datawetenschap wordt Python ook vaak gebruikt voor webontwikkeling.
* **[R](https://www.r-project.org/)** is een traditionele toolbox die is ontwikkeld met statistische gegevensverwerking in gedachten. Het bevat ook een grote bibliotheekrepository (CRAN), waardoor het een goede keuze is voor gegevensverwerking. R is echter geen algemene programmeertaal en wordt zelden buiten het domein van datawetenschap gebruikt.
* **[Julia](https://julialang.org/)** is een andere taal die specifiek is ontwikkeld voor datawetenschap. Het is bedoeld om betere prestaties te leveren dan Python, waardoor het een geweldig hulpmiddel is voor wetenschappelijke experimenten.
* **[Python](https://www.python.org/)**, een algemene programmeertaal, die vaak wordt beschouwd als een van de beste opties voor beginners vanwege zijn eenvoud. Python heeft veel extra bibliotheken die je kunnen helpen bij het oplossen van veel praktische problemen, zoals het extraheren van data uit ZIP-archieven, of het converteren van een afbeelding naar grijswaarden. Naast datawetenschap wordt Python ook vaak gebruikt voor webontwikkeling.
* **[R](https://www.r-project.org/)** is een traditionele toolbox ontwikkeld met statistische dataverwerking in gedachten. Het bevat ook een grote bibliotheek (CRAN), wat het een goede keuze maakt voor dataverwerking. Echter, R is geen algemene programmeertaal en wordt zelden buiten het datawetenschapsdomein gebruikt.
* **[Julia](https://julialang.org/)** is een andere taal die specifiek voor datawetenschap is ontwikkeld. Het is bedoeld om betere prestaties te bieden dan Python, wat het een geweldig instrument maakt voor wetenschappelijke experimenten.
In deze les richten we ons op het gebruik van Python voor eenvoudige gegevensverwerking. We gaan ervan uit dat je basiskennis hebt van de taal. Als je een diepgaandere kennismaking met Python wilt, kun je een van de volgende bronnen raadplegen:
In deze les richten we ons op het gebruiken van Python voor eenvoudige dataverwerking. We gaan uit van basiskennis van de taal. Als je een diepere introductie in Python wilt, kun je een van de volgende bronnen raadplegen:
* [Leer Python op een leuke manier met Turtle Graphics en Fractals](https://github.com/shwars/pycourse) - GitHub-gebaseerde snelle introductiecursus in Python-programmering
* [Zet je eerste stappen met Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Leerpad op [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Learn Python in a Fun Way with Turtle Graphics and Fractals](https://github.com/shwars/pycourse) - GitHub-gebaseerde korte introductiecursus in Python programmeren
* [Take your First Steps with Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Leerpad op [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Gegevens kunnen in veel vormen voorkomen. In deze les behandelen we drie vormen van gegevens - **tabulaire gegevens**, **tekst** en **afbeeldingen**.
Data kan in vele vormen voorkomen. In deze les behandelen we drie vormen van data - **tabelgegevens**, **tekst** en **afbeeldingen**.
We richten ons op een paar voorbeelden van gegevensverwerking, in plaats van een volledig overzicht te geven van alle gerelateerde bibliotheken. Dit stelt je in staat om het belangrijkste idee te begrijpen van wat mogelijk is en laat je zien waar je oplossingen kunt vinden voor je problemen wanneer je ze nodig hebt.
We richten ons op een paar voorbeelden van dataverwerking, in plaats van een volledig overzicht te geven van alle gerelateerde bibliotheken. Dit stelt je in staat de hoofdlijn te begrijpen van wat mogelijk is, en geeft je inzicht in waar je oplossingen kunt vinden als je ze nodig hebt.
> **Meest nuttige advies**. Wanneer je een bepaalde bewerking op gegevens moet uitvoeren waarvan je niet weet hoe je dit moet doen, probeer er dan naar te zoeken op internet. [Stackoverflow](https://stackoverflow.com/) bevat vaak veel nuttige codevoorbeelden in Python voor veel typische taken.
> **Meest nuttige advies**. Wanneer je een bepaalde bewerking op data wilt uitvoeren die je niet weet hoe je moet doen, probeer ernaar te zoeken op internet. [Stackoverflow](https://stackoverflow.com/) bevat meestal veel nuttige Python codevoorbeelden voor veel voorkomende taken.
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## Tabulaire gegevens en Dataframes
Je hebt al kennisgemaakt met tabulaire gegevens toen we het hadden over relationele databases. Wanneer je veel gegevens hebt die in verschillende gekoppelde tabellen zijn opgeslagen, is het zeker zinvol om SQL te gebruiken om ermee te werken. Er zijn echter veel gevallen waarin we een tabel met gegevens hebben en we **inzicht** of **begrip** willen krijgen over deze gegevens, zoals de verdeling, correlatie tussen waarden, enz. In datawetenschap zijn er veel gevallen waarin we enkele transformaties van de oorspronkelijke gegevens moeten uitvoeren, gevolgd door visualisatie. Beide stappen kunnen eenvoudig worden uitgevoerd met Python.
## [Voor-lezing quiz](https://ff-quizzes.netlify.app/en/ds/quiz/12)
Er zijn twee meest bruikbare bibliotheken in Python die je kunnen helpen bij het werken met tabulaire gegevens:
* **[Pandas](https://pandas.pydata.org/)** stelt je in staat om zogenaamde **Dataframes** te manipuleren, die analoog zijn aan relationele tabellen. Je kunt benoemde kolommen hebben en verschillende bewerkingen uitvoeren op rijen, kolommen en dataframes in het algemeen.
* **[Numpy](https://numpy.org/)** is een bibliotheek voor het werken met **tensors**, oftewel multidimensionale **arrays**. Een array heeft waarden van hetzelfde onderliggende type en is eenvoudiger dan een dataframe, maar biedt meer wiskundige bewerkingen en creëert minder overhead.
## Tabelgegevens en Dataframes
Je hebt al tabelgegevens ontmoet toen we het hadden over relationele databases. Wanneer je veel data hebt, opgesplitst over verschillende gekoppelde tabellen, is het zeker zinvol SQL te gebruiken om ermee te werken. Er zijn echter veel gevallen waarin we een tabel met data hebben en we wat **inzicht** of **begrip** over deze data willen krijgen, zoals de verdeling, correlatie tussen waarden, etc. In datawetenschap zijn er veel gevallen waarin we transformaties van de originele data moeten uitvoeren, gevolgd door visualisatie. Beide stappen kunnen eenvoudig met Python worden gedaan.
Er zijn twee meest nuttige bibliotheken in Python die je kunnen helpen met tabeldata:
* **[Pandas](https://pandas.pydata.org/)** laat je zogenaamde **Dataframes** manipuleren, die analoog zijn aan relationele tabellen. Je kunt benoemde kolommen hebben en verschillende operaties uitvoeren op rijen, kolommen en Dataframes in het algemeen.
* **[Numpy](https://numpy.org/)** is een bibliotheek voor het werken met **tensors**, dat wil zeggen multi-dimensionale **arrays**. Arrays bevatten waarden van hetzelfde onderliggende type, en zijn eenvoudiger dan Dataframes, maar bieden meer wiskundige operaties en creëren minder overhead.
Er zijn ook een paar andere bibliotheken die je moet kennen:
* **[Matplotlib](https://matplotlib.org/)** is een bibliotheek die wordt gebruikt voor gegevensvisualisatie en het plotten van grafieken
* **[SciPy](https://www.scipy.org/)** is een bibliotheek met enkele aanvullende wetenschappelijke functies. We zijn deze bibliotheek al tegengekomen toen we het hadden over kansberekening en statistiek
* **[Matplotlib](https://matplotlib.org/)** is een bibliotheek die wordt gebruikt voor datavisualisatie en het plotten van grafieken
* **[SciPy](https://www.scipy.org/)** is een bibliotheek met enkele aanvullende wetenschappelijke functies. We zijn deze bibliotheek al tegengekomen bij het bespreken van waarschijnlijkheid en statistiek
Hier is een stukje code dat je meestal gebruikt om deze bibliotheken aan het begin van je Python-programma te importeren:
Hier is een stuk code dat je typisch gebruikt om deze bibliotheken te importeren aan het begin van je Python-programma:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # je moet de exacte subpakketten specificeren die je nodig hebt
```
Pandas draait om een paar basisconcepten.
Pandas is gericht op een paar basisconcepten.
### Series
**Series** is een reeks waarden, vergelijkbaar met een lijst of numpy-array. Het belangrijkste verschil is dat een series ook een **index** heeft, en wanneer we bewerkingen uitvoeren op series (bijv. optellen), wordt rekening gehouden met de index. De index kan zo eenvoudig zijn als een geheel getal (dit is de standaardindex bij het maken van een series vanuit een lijst of array), of het kan een complexe structuur hebben, zoals een datumbereik.
**Series** is een reeks waarden, vergelijkbaar met een lijst of numpy array. Het belangrijkste verschil is dat een series ook een **index** heeft, en wanneer we operaties op series uitvoeren (bijvoorbeeld optellen), wordt de index in aanmerking genomen. De index kan zo simpel zijn als een geheel getal rij-nummer (dit is de standaard index bij het maken van een series uit een lijst of array), of het kan een complexe structuur hebben, zoals een datuminterval.
> **Opmerking**: Er is wat introductiecode voor Pandas in het bijbehorende notebook [`notebook.ipynb`](notebook.ipynb). We schetsen hier slechts enkele voorbeelden, en je bent zeker welkom om het volledige notebook te bekijken.
> **Opmerking**: Er is enige introductiecode voor Pandas in het bijbehorende notebook [`notebook.ipynb`](notebook.ipynb). We behandelen hier slechts enkele voorbeelden en je bent zeker welkom om het volledige notebook te bekijken.
Laten we een voorbeeld bekijken: we willen de verkoop van onze ijssalon analyseren. Laten we een reeks verkoopcijfers genereren (aantal verkochte items per dag) voor een bepaalde periode:
Overweeg een voorbeeld: we willen de verkoop van onze ijswinkel analyseren. Laten we een series maken van verkopen (aantal verkochte items per dag) over een bepaalde periode:
```python
start_date = "Jan 1, 2020"
@ -64,43 +66,43 @@ print(f"Length of index is {len(idx)}")
items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx)
items_sold.plot()
```
![Time Series Plot](../../../../translated_images/nl/timeseries-1.80de678ab1cf727e.webp)
![Tijdseries Grafiek](../../../../translated_images/nl/timeseries-1.80de678ab1cf727e.webp)
Stel nu dat we elke week een feestje organiseren voor vrienden en we nemen 10 extra pakken ijs mee voor het feest. We kunnen een andere series maken, geïndexeerd per week, om dat te laten zien:
Stel nu dat we elke week een feestje organiseren voor vrienden, en we nemen extra 10 pakken ijs mee voor het feest. We kunnen een andere series maken, geïndexeerd op week, om dat te demonstreren:
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
Wanneer we twee series bij elkaar optellen, krijgen we het totaal:
Wanneer we twee series optellen, krijgen we het totaal aantal:
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```
![Time Series Plot](../../../../translated_images/nl/timeseries-2.aae51d575c55181c.webp)
![Tijdseries Grafiek](../../../../translated_images/nl/timeseries-2.aae51d575c55181c.webp)
> **Opmerking** dat we niet de eenvoudige syntaxis `total_items+additional_items` gebruiken. Als we dat deden, zouden we veel `NaN` (*Not a Number*) waarden krijgen in de resulterende series. Dit komt omdat er ontbrekende waarden zijn voor sommige indexpunten in de `additional_items` series, en het optellen van `NaN` met iets resulteert in `NaN`. Daarom moeten we de parameter `fill_value` specificeren tijdens het optellen.
> **Let op** dat we niet de eenvoudige syntax `total_items+additional_items` gebruiken. Als we dat deden, zouden we veel `NaN` (*Not a Number*) waarden in de resulterende series krijgen. Dit komt omdat er ontbrekende waarden zijn voor enkele indexpunten in de `additional_items` series, en het optellen van `NaN` met iets resulteert in `NaN`. Daarom moeten we tijdens de optelling de parameter `fill_value` specificeren.
Met tijdreeksen kunnen we ook **herbemonsteren** met verschillende tijdsintervallen. Stel bijvoorbeeld dat we het gemiddelde verkoopvolume maandelijks willen berekenen. We kunnen de volgende code gebruiken:
Met tijdseries kunnen we ook de series **resamplen** met verschillende tijdsintervallen. Bijvoorbeeld, stel dat we het gemiddelde maandelijkse verkoopvolume willen berekenen. We kunnen de volgende code gebruiken:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![Monthly Time Series Averages](../../../../translated_images/nl/timeseries-3.f3147cbc8c624881.webp)
![Maandelijkse Tijdseries Gemiddelden](../../../../translated_images/nl/timeseries-3.f3147cbc8c624881.webp)
### DataFrame
Een DataFrame is in wezen een verzameling series met dezelfde index. We kunnen meerdere series combineren tot een DataFrame:
Een DataFrame is in essentie een verzameling van series met dezelfde index. We kunnen verschillende series samenvoegen in een DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])
```
Dit zal een horizontale tabel creëren zoals deze:
Dit maakt een horizontale tabel zoals deze:
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| --- | --- | ---- | --- | --- | ------ | --- | ------ | ---- | ---- |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | I | like | to | use | Python | and | Pandas | very | much |
We kunnen ook series gebruiken als kolommen en kolomnamen specificeren met behulp van een dictionary:
We kunnen ook Series als kolommen gebruiken, en kolomnamen specificeren via een dictionary:
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
@ -118,39 +120,39 @@ Dit geeft ons een tabel zoals deze:
| 7 | 8 | very |
| 8 | 9 | much |
**Opmerking** dat we deze tabelindeling ook kunnen krijgen door de vorige tabel te transponeren, bijvoorbeeld door te schrijven
**Let op** dat we deze tabelindeling ook kunnen krijgen door de vorige tabel te transponeren, bijvoorbeeld door te schrijven
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })
```
Hier betekent `.T` de operatie van het transponeren van het DataFrame, d.w.z. het wisselen van rijen en kolommen, en de `rename`-operatie stelt ons in staat om kolommen te hernoemen om overeen te komen met het vorige voorbeeld.
Hier betekent `.T` de bewerking van het transponeren van de DataFrame, dat wil zeggen rijen en kolommen verwisselen, en de `rename` bewerking stelt ons in staat de kolommen opnieuw te benoemen om het vorige voorbeeld te laten kloppen.
Hier zijn een paar van de belangrijkste bewerkingen die we kunnen uitvoeren op DataFrames:
Hier zijn een paar van de belangrijkste bewerkingen die we op DataFrames kunnen uitvoeren:
**Kolomselectie**. We kunnen individuele kolommen selecteren door `df['A']` te schrijven - deze operatie retourneert een Series. We kunnen ook een subset van kolommen selecteren in een ander DataFrame door `df[['B','A']]` te schrijven - dit retourneert een ander DataFrame.
**Kolomselectie**. We kunnen individuele kolommen selecteren door te schrijven `df['A']` - deze bewerking geeft een Series terug. We kunnen ook een subset van kolommen selecteren naar een ander DataFrame door te schrijven `df[['B','A']]` - dit geeft een ander DataFrame terug.
**Filteren** van alleen bepaalde rijen op basis van criteria. Bijvoorbeeld, om alleen rijen met kolom `A` groter dan 5 te behouden, kunnen we schrijven `df[df['A']>5]`.
> **Opmerking**: De manier waarop filteren werkt is als volgt. De expressie `df['A']<5` retourneert een booleaanse series, die aangeeft of de expressie `True` of `False` is voor elk element van de oorspronkelijke series `df['A']`. Wanneer een booleaanse series wordt gebruikt als index, retourneert het een subset van rijen in het DataFrame. Het is dus niet mogelijk om willekeurige Python-booleaanse expressies te gebruiken, bijvoorbeeld door `df[df['A']>5 and df['A']<7]` te schrijven, wat fout zou zijn. In plaats daarvan moet je een speciale `&`-operatie gebruiken op booleaanse series, door `df[(df['A']>5) & (df['A']<7)]` te schrijven (*haakjes zijn hier belangrijk*).
> **Let op**: De manier waarop filteren werkt is als volgt. De expressie `df['A']<5` geeft een booleaanse series terug, die aanduidt of de expressie `True` of `False` is voor elk element van de originele series `df['A']`. Wanneer een booleaanse series wordt gebruikt als index, retourneert het een subset van de rijen in de DataFrame. Daarom is het niet mogelijk een willekeurige Python booleaanse expressie te gebruiken, bijvoorbeeld schrijven `df[df['A']>5 and df['A']<7]` zou fout zijn. In plaats daarvan moet je de speciale `&` operatie voor booleaanse series gebruiken, en schrijven `df[(df['A']>5) & (df['A']<7)]` (*haakjes zijn hier belangrijk*).
**Nieuwe berekenbare kolommen maken**. We kunnen eenvoudig nieuwe berekenbare kolommen maken voor ons DataFrame door intuïtieve expressies te gebruiken zoals deze:
**Nieuwe berekenbare kolommen maken**. We kunnen eenvoudig nieuwe berekenbare kolommen toevoegen aan onze DataFrame met een intuïtieve expressie zoals deze:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Dit voorbeeld berekent de afwijking van A ten opzichte van de gemiddelde waarde. Wat hier eigenlijk gebeurt, is dat we een series berekenen en deze vervolgens toewijzen aan de linkerzijde, waardoor een nieuwe kolom wordt gemaakt. Daarom kunnen we geen bewerkingen gebruiken die niet compatibel zijn met series, bijvoorbeeld de onderstaande code is fout:
Dit voorbeeld berekent de afwijking van A ten opzichte van zijn gemiddelde waarde. Wat er eigenlijk gebeurt is dat we een series berekenen, en deze series toewijzen aan de linkerkant, waardoor een nieuwe kolom ontstaat. Daarom kunnen we geen bewerkingen gebruiken die niet compatibel zijn met series, bijvoorbeeld de volgende code is fout:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
# Verkeerde code -> df['ADescr'] = "Low" als df['A'] < 5 anders "Hi"
df['LenB'] = len(df['B']) # <- Verkeerd resultaat
```
Het laatste voorbeeld, hoewel syntactisch correct, geeft ons een verkeerd resultaat, omdat het de lengte van series `B` toewijst aan alle waarden in de kolom, en niet de lengte van individuele elementen zoals we bedoeld hadden.
Het laatste voorbeeld, hoewel syntactisch correct, geeft een fout resultaat, omdat het de lengte van de series `B` toewijst aan alle waarden in de kolom, en niet de lengte van de individuele elementen zoals bedoeld.
Als we complexe expressies zoals deze moeten berekenen, kunnen we de functie `apply` gebruiken. Het laatste voorbeeld kan als volgt worden geschreven:
Wanneer we complexe expressies moeten berekenen zoals deze, kunnen we de `apply` functie gebruiken. Het laatste voorbeeld kan als volgt worden geschreven:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# of
df['LenB'] = df['B'].apply(len)
```
Na bovenstaande bewerkingen eindigen we met het volgende DataFrame:
Na bovenstaande bewerkingen hebben we de volgende DataFrame:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
@ -164,16 +166,16 @@ Na bovenstaande bewerkingen eindigen we met het volgende DataFrame:
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**Rijen selecteren op basis van nummers** kan worden gedaan met behulp van de `iloc`-constructie. Bijvoorbeeld, om de eerste 5 rijen van het DataFrame te selecteren:
**Rijen selecteren op basis van nummer** kan gedaan worden met de constructie `iloc`. Bijvoorbeeld, om de eerste 5 rijen van de DataFrame te selecteren:
```python
df.iloc[:5]
```
**Groeperen** wordt vaak gebruikt om een resultaat te krijgen dat lijkt op *draaitabellen* in Excel. Stel dat we de gemiddelde waarde van kolom `A` willen berekenen voor elk gegeven aantal `LenB`. Dan kunnen we ons DataFrame groeperen op `LenB` en `mean` aanroepen:
**Groepeerbewerking** wordt vaak gebruikt om een resultaat te krijgen vergelijkbaar met *draaitabellen* in Excel. Stel dat we het gemiddelde van kolom `A` willen berekenen voor elk gegeven aantal `LenB`. Dan kunnen we onze DataFrame groeperen op `LenB` en `mean` aanroepen:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Als we het gemiddelde en het aantal elementen in de groep willen berekenen, kunnen we een meer complexe `aggregate`-functie gebruiken:
Als we het gemiddelde en het aantal elementen in de groep tegelijk willen berekenen, kunnen we de meer gecompliceerde `aggregate` functie gebruiken:
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
@ -181,95 +183,98 @@ df.groupby(by='LenB') \
```
Dit geeft ons de volgende tabel:
| LenB | Count | Mean |
| ---- | ----- | -------- |
| 1 | 1 | 1.000000 |
| 2 | 1 | 3.000000 |
| 3 | 2 | 5.000000 |
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
| LenB | Aantal | Gemiddelde |
| ---- | ------ | ---------- |
| 1 | 1 | 1.000000 |
| 2 | 1 | 3.000000 |
| 3 | 2 | 5.000000 |
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### Gegevens verkrijgen
We hebben gezien hoe eenvoudig het is om Series en DataFrames te maken vanuit Python-objecten. Data komt echter meestal in de vorm van een tekstbestand of een Excel-tabel. Gelukkig biedt Pandas ons een eenvoudige manier om data van de schijf te laden. Bijvoorbeeld, het lezen van een CSV-bestand is zo simpel als dit:
We hebben gezien hoe gemakkelijk het is om Series en DataFrames te construeren van Python-objecten. Data komt echter meestal in de vorm van een tekstbestand of een Excel-tabel. Gelukkig biedt Pandas ons een eenvoudige manier om data van de schijf te laden. Bijvoorbeeld, het lezen van een CSV-bestand is zo eenvoudig als dit:
```python
df = pd.read_csv('file.csv')
```
We zullen meer voorbeelden zien van het laden van data, inclusief het ophalen van externe websites, in de sectie "Challenge".
We zullen meer voorbeelden zien van het laden van data, inclusief het ophalen ervan van externe websites, in de sectie "Uitdaging"
### Printen en Plotten
Een Data Scientist moet vaak data verkennen, dus het is belangrijk om deze te kunnen visualiseren. Wanneer een DataFrame groot is, willen we vaak alleen controleren of we alles correct doen door de eerste paar rijen af te drukken. Dit kan worden gedaan door `df.head()` aan te roepen. Als je dit uitvoert vanuit Jupyter Notebook, wordt het DataFrame weergegeven in een mooie tabelvorm.
Een Data Scientist moet vaak de data verkennen, dus het is belangrijk om deze te visualiseren. Wanneer een DataFrame groot is, willen we vaak gewoon zeker weten dat we alles correct doen door de eerste paar rijen af te drukken. Dit kan gedaan worden door `df.head()` aan te roepen. Als je het uitvoert vanuit Jupyter Notebook, zal het de DataFrame in een mooie tabelvorm afdrukken.
We hebben ook het gebruik van de `plot`-functie gezien om enkele kolommen te visualiseren. Hoewel `plot` erg nuttig is voor veel taken en verschillende grafiektypen ondersteunt via de `kind=`-parameter, kun je altijd de ruwe `matplotlib`-bibliotheek gebruiken om iets complexers te plotten. We zullen data-visualisatie uitgebreid behandelen in aparte cursuslessen.
We hebben ook het gebruik van de `plot`-functie gezien om enkele kolommen te visualiseren. Hoewel `plot` erg handig is voor veel taken en vele verschillende grafiektype ondersteunt via de `kind=` parameter, kun je altijd de ruwe `matplotlib` bibliotheek gebruiken om iets complexers te plotten. We zullen data visualisatie in detail behandelen in aparte lesonderdelen.
Dit overzicht behandelt de belangrijkste concepten van Pandas, maar de bibliotheek is zeer uitgebreid en er zijn geen grenzen aan wat je ermee kunt doen! Laten we nu deze kennis toepassen om een specifiek probleem op te lossen.
Dit overzicht behandelt de belangrijkste concepten van Pandas, maar de bibliotheek is erg rijk, en er is geen limiet aan wat je ermee kunt doen! Laten we deze kennis nu toepassen om een specifiek probleem op te lossen.
## 🚀 Challenge 1: Analyse van COVID-verspreiding
## 🚀 Uitdaging 1: Analyse van de COVID-verspreiding
Het eerste probleem waarop we ons zullen richten is het modelleren van de epidemische verspreiding van COVID-19. Om dit te doen, gebruiken we de gegevens over het aantal geïnfecteerde personen in verschillende landen, verstrekt door het [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) van [Johns Hopkins University](https://jhu.edu/). De dataset is beschikbaar in [deze GitHub-repository](https://github.com/CSSEGISandData/COVID-19).
Het eerste probleem waarop we ons richten is het modelleren van de epidemische verspreiding van COVID-19. Hiervoor gebruiken we de data over het aantal geïnfecteerde personen in verschillende landen, geleverd door het [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) van de [Johns Hopkins University](https://jhu.edu/). De dataset is beschikbaar in [deze GitHub-repository](https://github.com/CSSEGISandData/COVID-19).
Omdat we willen demonstreren hoe je met data omgaat, nodigen we je uit om [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) te openen en deze van boven naar beneden te lezen. Je kunt ook cellen uitvoeren en enkele uitdagingen aangaan die we aan het einde voor je hebben achtergelaten.
Omdat we willen aantonen hoe je met data omgaat, nodigen we je uit om [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) te openen en van boven naar beneden te lezen. Je kunt ook cellen uitvoeren en enkele uitdagingen doen die we voor je aan het eind hebben achtergelaten.
![COVID Spread](../../../../translated_images/nl/covidspread.f3d131c4f1d260ab.webp)
![COVID-verspreiding](../../../../translated_images/nl/covidspread.f3d131c4f1d260ab.webp)
> Als je niet weet hoe je code uitvoert in Jupyter Notebook, bekijk dan [dit artikel](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Als je niet weet hoe je code in Jupyter Notebook moet uitvoeren, kijk dan naar [dit artikel](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Werken met ongestructureerde data
## Werken met Ongestructureerde Data
Hoewel data vaak in tabelvorm komt, moeten we in sommige gevallen omgaan met minder gestructureerde data, zoals tekst of afbeeldingen. In dit geval, om de dataverwerkingstechnieken toe te passen die we hierboven hebben gezien, moeten we op de een of andere manier **gestructureerde** data **extraheren**. Hier zijn enkele voorbeelden:
Hoewel data vaak in tabelvorm komt, moeten we in sommige gevallen omgaan met minder gestructureerde data, bijvoorbeeld tekst of afbeeldingen. Om in dat geval de hierboven getoonde dataverwerkingstechnieken toe te passen, moeten we op de een of andere manier gestructureerde data **extraheren**. Hier zijn een paar voorbeelden:
* Het extraheren van trefwoorden uit tekst en bekijken hoe vaak die trefwoorden voorkomen
* Het gebruik van neurale netwerken om informatie over objecten op een afbeelding te extraheren
* Het verkrijgen van informatie over emoties van mensen via een videofeed van een camera
* Het extraheren van sleutelwoorden uit tekst, en zien hoe vaak die sleutelwoorden voorkomen
* Het gebruik van neurale netwerken om informatie over objecten in een afbeelding te extraheren
* Het verkrijgen van informatie over emoties van mensen op videobeelden
## 🚀 Challenge 2: Analyse van COVID-artikelen
## 🚀 Uitdaging 2: Analyse van COVID-artikelen
In deze uitdaging blijven we bij het onderwerp van de COVID-pandemie en richten we ons op het verwerken van wetenschappelijke artikelen over het onderwerp. Er is een [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) met meer dan 7000 (op het moment van schrijven) artikelen over COVID, beschikbaar met metadata en samenvattingen (en voor ongeveer de helft is ook de volledige tekst beschikbaar).
In deze uitdaging gaan we door met het onderwerp van de COVID-pandemie en richten we ons op het verwerken van wetenschappelijke artikelen over het onderwerp. Er is de [CORD-19 dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) met meer dan 7000 (op het moment van schrijven) artikelen over COVID, beschikbaar met metadata en samenvattingen (en voor ongeveer de helft daarvan is er ook volledige tekst beschikbaar).
Een volledig voorbeeld van het analyseren van deze dataset met behulp van de [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) cognitieve service wordt beschreven [in deze blogpost](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). We zullen een vereenvoudigde versie van deze analyse bespreken.
Een volledig voorbeeld van het analyseren van deze dataset met behulp van de cognitieve service [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) wordt beschreven [in deze blogpost](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). We zullen een vereenvoudigde versie van deze analyse bespreken.
> **NOTE**: We bieden geen kopie van de dataset als onderdeel van deze repository. Je moet mogelijk eerst het bestand [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) downloaden van [deze dataset op Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Registratie bij Kaggle kan vereist zijn. Je kunt de dataset ook zonder registratie downloaden [van hier](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), maar deze bevat alle volledige teksten naast het metadata-bestand.
> **OPMERKING**: We leveren geen kopie van de dataset als onderdeel van deze repository. Je moet mogelijk eerst het bestand [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) downloaden van [deze dataset op Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Een registratie bij Kaggle kan vereist zijn. Je kunt de dataset ook zonder registratie downloaden [via deze link](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), maar deze bevat dan alle volledige teksten naast het metadata-bestand.
Open [`notebook-papers.ipynb`](notebook-papers.ipynb) en lees deze van boven naar beneden. Je kunt ook cellen uitvoeren en enkele uitdagingen aangaan die we aan het einde voor je hebben achtergelaten.
Open [`notebook-papers.ipynb`](notebook-papers.ipynb) en lees het van boven naar beneden. Je kunt ook cellen uitvoeren en enkele uitdagingen doen die we voor je aan het eind hebben achtergelaten.
![Covid Medical Treatment](../../../../translated_images/nl/covidtreat.b2ba59f57ca45fbc.webp)
![COVID Medische Behandeling](../../../../translated_images/nl/covidtreat.b2ba59f57ca45fbc.webp)
## Verwerken van afbeeldingsdata
## Verwerken van Beelddata
Recent zijn zeer krachtige AI-modellen ontwikkeld die ons in staat stellen afbeeldingen te begrijpen. Er zijn veel taken die kunnen worden opgelost met behulp van vooraf getrainde neurale netwerken of clouddiensten. Enkele voorbeelden zijn:
Onlangs zijn er zeer krachtige AI-modellen ontwikkeld die ons in staat stellen afbeeldingen te begrijpen. Er zijn veel taken die kunnen worden opgelost met behulp van voorgetrainde neurale netwerken of clouddiensten. Enkele voorbeelden zijn:
* **Afbeeldingsclassificatie**, waarmee je een afbeelding kunt categoriseren in een van de vooraf gedefinieerde klassen. Je kunt eenvoudig je eigen afbeeldingsclassificators trainen met diensten zoals [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum).
* **Objectdetectie** om verschillende objecten in de afbeelding te detecteren. Diensten zoals [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) kunnen een aantal veelvoorkomende objecten detecteren, en je kunt een [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) model trainen om specifieke objecten van interesse te detecteren.
* **Gezichtsdetectie**, inclusief leeftijd-, geslacht- en emotiedetectie. Dit kan worden gedaan via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Beeldclassificatie**, waarmee je een afbeelding kunt categoriseren in een van de vooraf gedefinieerde klassen. Je kunt gemakkelijk je eigen beeldclassificatoren trainen met diensten zoals [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Objectdetectie** om verschillende objecten in een afbeelding te detecteren. Diensten zoals [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) kunnen een aantal veelvoorkomende objecten detecteren, en je kunt een [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) model trainen om specifieke objecten van interesse te detecteren.
* **Gezichtsdetectie**, inclusief detectie van Leeftijd, Geslacht en Emoties. Dit kan gedaan worden via de [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Al deze clouddiensten kunnen worden aangeroepen met [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum) en kunnen dus eenvoudig worden geïntegreerd in je data-exploratieworkflow.
Al deze clouddiensten kunnen worden aangeroepen met behulp van [Python SDK's](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), en kunnen dus gemakkelijk worden geïntegreerd in je data-verkenningsworkflow.
Hier zijn enkele voorbeelden van het verkennen van data uit afbeeldingsbronnen:
* In de blogpost [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) verkennen we Instagram-foto's, waarbij we proberen te begrijpen wat mensen ertoe brengt meer likes te geven aan een foto. We extraheren eerst zoveel mogelijk informatie uit afbeeldingen met behulp van [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) en gebruiken vervolgens [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) om een interpreteerbaar model te bouwen.
* In [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) gebruiken we [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) om emoties van mensen op foto's van evenementen te extraheren, om te proberen te begrijpen wat mensen gelukkig maakt.
Hier zijn enkele voorbeelden van het verkennen van data uit beeldbronnen:
* In de blogpost [Hoe leer je Data Science zonder te coderen](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) verkennen we Instagram-foto's en proberen we te begrijpen wat mensen ertoe brengt meer likes aan een foto te geven. We extraheren eerst zoveel mogelijk informatie uit de foto's met [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) en gebruiken daarna [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) om een interpreteerbaar model te bouwen.
* In [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) gebruiken we [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) om emoties te extraheren van mensen op foto's van evenementen, om te proberen te begrijpen wat mensen gelukkig maakt.
## Conclusie
Of je nu al gestructureerde of ongestructureerde data hebt, met Python kun je alle stappen uitvoeren die verband houden met dataverwerking en -begrip. Het is waarschijnlijk de meest flexibele manier van dataverwerking, en daarom gebruiken de meeste data scientists Python als hun primaire tool. Python diepgaand leren is waarschijnlijk een goed idee als je serieus bent over je reis in data science!
Of je nu gestructureerde of ongestructureerde data hebt, met Python kun je alle stappen uitvoeren die met dataverwerking en -begrip te maken hebben. Het is waarschijnlijk de meest flexibele manier van dataverwerking, en daarom gebruiken de meeste data scientists Python als hun primaire hulpmiddel. Het is waarschijnlijk een goed idee om Python grondig te leren als je het serieus meent met je data science-reis!
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## [Quiz na de les](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## Review & Zelfstudie
**Boeken**
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Online bronnen**
* Officiële [10 minutes to Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) tutorial
* [Documentatie over Pandas-visualisatie](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Online Bronnen**
* Officiële [10 minuten tot Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) tutorial
* [Documentatie over Pandas Visualisatie](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Python leren**
* [Leer Python op een leuke manier met Turtle Graphics en fractals](https://github.com/shwars/pycourse)
* [Zet je eerste stappen met Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) leerpad op [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
**Python Leren**
* [Leer Python op een leuke manier met Turtle Graphics en Fractals](https://github.com/shwars/pycourse)
* [Zet je eerste stappen met Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Leerpad op [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Opdracht
[Voer een meer gedetailleerde datastudie uit voor de bovenstaande uitdagingen](assignment.md)
[Voer een meer gedetailleerde data-analyse uit voor de bovenstaande uitdagingen](assignment.md)
## Credits
@ -277,5 +282,7 @@ Deze les is met ♥️ geschreven door [Dmitry Soshnikov](http://soshnikov.com)
---
**Disclaimer**:
Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Disclaimer**:
Dit document is vertaald met behulp van de AI vertaaldienst [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u er rekening mee te houden dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -96,8 +96,8 @@
"language_code": "vi"
},
"2-Working-With-Data/07-python/README.md": {
"original_hash": "7bfec050f4717dcc2dfd028aca9d21f3",
"translation_date": "2025-09-06T15:51:08+00:00",
"original_hash": "fb29e3e0be486fe8f15d50bdade79eb1",
"translation_date": "2026-07-17T18:50:29+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "vi"
},

@ -1,60 +1,62 @@
# Làm việc với Dữ liệu: Python và Thư viện Pandas
| ![ Sketchnote của [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| ![ Sketchnote bởi [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| Làm việc với Python - _Sketchnote của [@nitya](https://twitter.com/nitya)_ |
| Làm việc Với Python - _Sketchnote bởi [@nitya](https://twitter.com/nitya)_ |
[![Video Giới thiệu](../../../../translated_images/vi/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y)
Mặc dù cơ sở dữ liệu cung cấp cách lưu trữ dữ liệu và truy vấn chúng rất hiệu quả bằng ngôn ngữ truy vấn, cách linh hoạt nhất để xử lý dữ liệu là viết chương trình của riêng bạn để thao tác dữ liệu. Trong nhiều trường hợp, việc thực hiện truy vấn cơ sở dữ liệu sẽ hiệu quả hơn. Tuy nhiên, trong một số trường hợp khi cần xử lý dữ liệu phức tạp hơn, điều này không thể thực hiện dễ dàng bằng SQL.
Xử lý dữ liệu có thể được lập trình bằng bất kỳ ngôn ngữ lập trình nào, nhưng có một số ngôn ngữ ở cấp độ cao hơn khi làm việc với dữ liệu. Các nhà khoa học dữ liệu thường ưu tiên một trong các ngôn ngữ sau:
Trong khi các cơ sở dữ liệu cung cấp các cách rất hiệu quả để lưu trữ dữ liệu và truy vấn chúng bằng ngôn ngữ truy vấn, cách linh hoạt nhất để xử lý dữ liệu là viết chương trình của riêng bạn để thao tác dữ liệu. Trong nhiều trường hợp, thực hiện truy vấn cơ sở dữ liệu sẽ là cách hiệu quả hơn. Tuy nhiên trong một số trường hợp khi cần xử lý dữ liệu phức tạp hơn, điều đó không thể thực hiện dễ dàng bằng SQL.
Việc xử lý dữ liệu có thể được lập trình bằng bất kỳ ngôn ngữ lập trình nào, nhưng có những ngôn ngữ cấp cao hơn đối với làm việc với dữ liệu. Các nhà khoa học dữ liệu thường ưu tiên một trong các ngôn ngữ sau:
* **[Python](https://www.python.org/)**, một ngôn ngữ lập trình đa mục đích, thường được coi là một trong những lựa chọn tốt nhất cho người mới bắt đầu nhờ sự đơn giản của nó. Python có rất nhiều thư viện bổ sung giúp bạn giải quyết nhiều vấn đề thực tế, chẳng hạn như trích xuất dữ liệu từ tệp ZIP hoặc chuyển đổi hình ảnh sang thang độ xám. Ngoài khoa học dữ liệu, Python cũng thường được sử dụng trong phát triển web.
* **[R](https://www.r-project.org/)** là một công cụ truyền thống được phát triển với mục đích xử lý dữ liệu thống kê. Nó cũng chứa một kho thư viện lớn (CRAN), làm cho nó trở thành một lựa chọn tốt để xử lý dữ liệu. Tuy nhiên, R không phải là ngôn ngữ lập trình đa mục đích và hiếm khi được sử dụng ngoài lĩnh vực khoa học dữ liệu.
* **[Julia](https://julialang.org/)** là một ngôn ngữ khác được phát triển đặc biệt cho khoa học dữ liệu. Nó được thiết kế để cung cấp hiệu suất tốt hơn Python, làm cho nó trở thành một công cụ tuyệt vời cho các thí nghiệm khoa học.
* **[Python](https://www.python.org/)**, một ngôn ngữ lập trình đa mục đích, thường được xem là một trong những lựa chọn tốt nhất cho người mới vì tính đơn giản của nó. Python có rất nhiều thư viện bổ sung giúp bạn giải quyết nhiều vấn đề thực tế, chẳng hạn như trích xuất dữ liệu từ tập tin nén ZIP, hoặc chuyển đổi hình ảnh sang dạng thang độ xám. Ngoài khoa học dữ liệu, Python cũng thường được sử dụng trong phát triển web.
* **[R](https://www.r-project.org/)** là bộ công cụ truyền thống được phát triển với việc xử lý dữ liệu thống kê trong tâm trí. Nó cũng chứa một kho thư viện lớn (CRAN), làm cho nó trở thành lựa chọn tốt để xử lý dữ liệu. Tuy nhiên, R không phải là một ngôn ngữ lập trình đa mục đích, và hiếm khi được sử dụng ngoài lĩnh vực khoa học dữ liệu.
* **[Julia](https://julialang.org/)** là một ngôn ngữ khác được phát triển đặc biệt cho khoa học dữ liệu. Nó nhằm mang lại hiệu năng tốt hơn Python, khiến nó trở thành công cụ tuyệt vời cho các thí nghiệm khoa học.
Trong bài học này, chúng ta sẽ tập trung vào việc sử dụng Python để xử lý dữ liệu đơn giản. Chúng ta sẽ giả định rằng bạn đã quen thuộc cơ bản với ngôn ngữ này. Nếu bạn muốn tìm hiểu sâu hơn về Python, bạn có thể tham khảo một trong các tài nguyên sau:
Trong bài học này, chúng ta sẽ tập trung vào việc sử dụng Python để xử lý dữ liệu đơn giản. Chúng ta sẽ giả định bạn đã biết các kiến thức cơ bản về ngôn ngữ này. Nếu bạn muốn một chuyến khám phá sâu hơn về Python, bạn có thể tham khảo một trong các tài nguyên sau:
* [Học Python một cách thú vị với Turtle Graphics và Fractals](https://github.com/shwars/pycourse) - Khóa học giới thiệu nhanh về lập trình Python trên GitHub
* [Bắt đầu với Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Lộ trình học trên [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Học Python một cách vui nhộn với Turtle Graphics và Fractals](https://github.com/shwars/pycourse) - Khóa học nhanh nhập môn Python trên GitHub
* [Những bước đầu tiên với Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Lộ trình học trên [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Dữ liệu có thể xuất hiện dưới nhiều dạng. Trong bài học này, chúng ta sẽ xem xét ba dạng dữ liệu - **dữ liệu dạng bảng**, **văn bản****hình ảnh**.
Dữ liệu có thể có nhiều dạng khác nhau. Trong bài học này, chúng ta sẽ xem xét ba dạng dữ liệu - **dữ liệu bảng**, **văn bản****hình ảnh**.
Chúng ta sẽ tập trung vào một vài ví dụ về xử lý dữ liệu, thay vì cung cấp cho bạn cái nhìn tổng quan đầy đủ về tất cả các thư viện liên quan. Điều này sẽ giúp bạn hiểu được những gì có thể làm được và để lại cho bạn sự hiểu biết về nơi tìm giải pháp cho các vấn đề của mình khi cần.
Chúng ta sẽ tập trung vào một vài ví dụ về xử lý dữ liệu, thay vì đưa ra tổng quan đầy đủ về tất cả các thư viện liên quan. Điều này sẽ giúp bạn nắm được ý tưởng chính của những gì có thể làm được, và để bạn hiểu được nơi tìm giải pháp cho các vấn đề của mình khi cần.
> **Lời khuyên hữu ích nhất**. Khi bạn cần thực hiện một thao tác nào đó trên dữ liệu mà bạn không biết cách làm, hãy thử tìm kiếm trên internet. [Stackoverflow](https://stackoverflow.com/) thường chứa rất nhiều mẫu mã hữu ích bằng Python cho nhiều tác vụ điển hình.
> **Lời khuyên hữu ích nhất**. Khi bạn cần thực hiện một thao tác nào đó với dữ liệu mà bạn không biết làm thế nào, hãy thử tìm kiếm trên internet. [Stackoverflow](https://stackoverflow.com/) thường chứa rất nhiều mẫu mã hữu ích bằng Python cho nhiều nhiệm vụ điển hình.
## [Câu hỏi trước bài giảng](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## Dữ liệu dạng bảng và Dataframes
Bạn đã gặp dữ liệu dạng bảng khi chúng ta nói về cơ sở dữ liệu quan hệ. Khi bạn có nhiều dữ liệu và nó được chứa trong nhiều bảng liên kết khác nhau, việc sử dụng SQL để làm việc với nó chắc chắn là hợp lý. Tuy nhiên, có nhiều trường hợp khi chúng ta có một bảng dữ liệu và cần tìm hiểu hoặc có cái nhìn sâu sắc về dữ liệu này, chẳng hạn như phân phối, mối tương quan giữa các giá trị, v.v. Trong khoa học dữ liệu, có rất nhiều trường hợp chúng ta cần thực hiện một số chuyển đổi dữ liệu ban đầu, sau đó là trực quan hóa. Cả hai bước này đều có thể dễ dàng thực hiện bằng Python.
## [Bài kiểm tra trước bài giảng](https://ff-quizzes.netlify.app/en/ds/quiz/12)
Có hai thư viện hữu ích nhất trong Python giúp bạn xử lý dữ liệu dạng bảng:
* **[Pandas](https://pandas.pydata.org/)** cho phép bạn thao tác với **Dataframes**, tương tự như các bảng quan hệ. Bạn có thể có các cột được đặt tên và thực hiện các thao tác khác nhau trên hàng, cột và toàn bộ dataframe.
* **[Numpy](https://numpy.org/)** là một thư viện để làm việc với **tensors**, tức là các **mảng** đa chiều. Mảng có các giá trị cùng loại cơ bản và đơn giản hơn dataframe, nhưng nó cung cấp nhiều phép toán toán học hơn và tạo ít chi phí hơn.
## Dữ liệu Bảng và Dataframes
Ngoài ra còn có một vài thư viện khác mà bạn nên biết:
* **[Matplotlib](https://matplotlib.org/)** là một thư viện được sử dụng để trực quan hóa dữ liệu và vẽ đồ thị
* **[SciPy](https://www.scipy.org/)** là một thư viện với một số hàm khoa học bổ sung. Chúng ta đã gặp thư viện này khi nói về xác suất và thống kê
Bạn đã từng gặp dữ liệu bảng khi chúng ta nói về cơ sở dữ liệu quan hệ. Khi bạn có nhiều dữ liệu, và nó nằm trong nhiều bảng liên kết khác nhau, thì chắc chắn việc sử dụng SQL để làm việc với nó là hợp lý. Tuy nhiên, có nhiều trường hợp khi chúng ta có một bảng dữ liệu, và cần thu thập một số **hiểu biết** hoặc **cái nhìn sâu sắc** về dữ liệu này, chẳng hạn như phân bố, mối tương quan giữa các giá trị, v.v. Trong khoa học dữ liệu, có rất nhiều trường hợp cần thực hiện một số biến đổi dữ liệu gốc, sau đó là trực quan hóa. Cả hai bước này đều có thể dễ dàng thực hiện bằng Python.
Dưới đây là một đoạn mã mà bạn thường sử dụng để nhập các thư viện này vào đầu chương trình Python của mình:
Có hai thư viện hữu ích nhất trong Python có thể giúp bạn xử lý dữ liệu bảng:
* **[Pandas](https://pandas.pydata.org/)** cho phép bạn thao tác với cái gọi là **Dataframes**, tương tự bảng quan hệ. Bạn có thể có các cột được đặt tên, và thực hiện các thao tác khác nhau trên hàng, cột và dataframe nói chung.
* **[Numpy](https://numpy.org/)** là thư viện để làm việc với **tensors**, tức là các **mảng** đa chiều. Mảng có các giá trị cùng kiểu dữ liệu cơ bản, và đơn giản hơn dataframe, nhưng nó cung cấp nhiều phép toán toán học hơn và tạo ra ít chi phí overhead hơn.
Cũng có một vài thư viện khác bạn nên biết đến:
* **[Matplotlib](https://matplotlib.org/)** là thư viện dùng cho trực quan hóa dữ liệu và vẽ biểu đồ
* **[SciPy](https://www.scipy.org/)** là thư viện chứa một số hàm khoa học bổ sung. Chúng ta đã từng gặp thư viện này khi nói về xác suất và thống kê
Dưới đây là đoạn mã bạn thường dùng để nhập các thư viện này ở đầu chương trình Python:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # bạn cần chỉ định chính xác các gói con mà bạn cần
```
Pandas tập trung vào một vài khái niệm cơ bản.
Pandas xoay quanh một vài khái niệm cơ bản.
### Series
### Series
**Series** là một chuỗi các giá trị, tương tự như danh sách hoặc mảng numpy. Điểm khác biệt chính là series cũng có một **index**, và khi chúng ta thao tác trên series (ví dụ: cộng chúng), index được tính đến. Index có thể đơn giản như số hàng nguyên (đây là index được sử dụng mặc định khi tạo series từ danh sách hoặc mảng), hoặc nó có thể có cấu trúc phức tạp, chẳng hạn như khoảng thời gian.
**Series** là một chuỗi các giá trị, tương tự như một danh sách hoặc mảng numpy. Sự khác biệt chính là series còn có **chỉ số (index)**, và khi bạn thao tác trên series (ví dụ, cộng chúng), chỉ số được tính đến. Chỉ số có thể đơn giản như số hàng kiểu số nguyên (đây là chỉ số mặc định khi tạo series từ danh sách hoặc mảng), hoặc có cấu trúc phức tạp hơn như khoảng thời gian ngày tháng.
> **Lưu ý**: Có một số mã Pandas giới thiệu trong notebook đi kèm [`notebook.ipynb`](notebook.ipynb). Chúng tôi chỉ phác thảo một số ví dụ ở đây, và bạn chắc chắn được khuyến khích kiểm tra toàn bộ notebook.
> **Lưu ý**: Có một số code Pandas giới thiệu trong sổ tay kèm theo [`notebook.ipynb`](notebook.ipynb). Chúng tôi chỉ phác thảo vài ví dụ ở đây, và bạn chắc chắn có thể xem sổ tay đầy đủ.
Hãy xem xét một ví dụ: chúng ta muốn phân tích doanh số bán hàng của cửa hàng kem. Hãy tạo một series số lượng bán hàng (số lượng sản phẩm bán được mỗi ngày) trong một khoảng thời gian:
Xem ví dụ: chúng ta muốn phân tích doanh số bán hàng của quán kem. Hãy tạo một dãy số doanh số (số món bán được mỗi ngày) trong một khoảng thời gian nhất định:
```python
start_date = "Jan 1, 2020"
@ -66,29 +68,29 @@ items_sold.plot()
```
![Biểu đồ chuỗi thời gian](../../../../translated_images/vi/timeseries-1.80de678ab1cf727e.webp)
Bây giờ giả sử rằng mỗi tuần chúng ta tổ chức một bữa tiệc cho bạn bè và lấy thêm 10 hộp kem cho bữa tiệc. Chúng ta có thể tạo một series khác, được index theo tuần, để minh họa điều đó:
Giả sử mỗi tuần chúng ta tổ chức một bữa tiệc cho bạn bè và mang thêm 10 hộp kem nữa. Chúng ta có thể tạo một series khác, được đánh chỉ số theo tuần, để biểu diễn điều đó:
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
Khi chúng ta cộng hai series lại với nhau, chúng ta sẽ có tổng số:
Khi cộng hai series lại với nhau, chúng ta được tổng số:
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```
![Biểu đồ chuỗi thời gian](../../../../translated_images/vi/timeseries-2.aae51d575c55181c.webp)
> **Lưu ý** rằng chúng ta không sử dụng cú pháp đơn giản `total_items+additional_items`. Nếu làm vậy, chúng ta sẽ nhận được rất nhiều giá trị `NaN` (*Not a Number*) trong series kết quả. Điều này là do có các giá trị bị thiếu cho một số điểm index trong series `additional_items`, và việc cộng `NaN` với bất kỳ giá trị nào sẽ dẫn đến `NaN`. Do đó, chúng ta cần chỉ định tham số `fill_value` trong quá trình cộng.
> **Lưu ý** rằng chúng ta không dùng cú pháp đơn giản `total_items+additional_items`. Nếu dùng, chúng ta sẽ nhận được nhiều giá trị `NaN` (*Not a Number*) trong series kết quả. Điều này vì có những giá trị thiếu sót ở một số điểm chỉ số trong series `additional_items`, và cộng `NaN` với bất cứ giá trị gì cũng ra `NaN`. Do đó chúng ta cần chỉ định tham số `fill_value` khi cộng.
Với chuỗi thời gian, chúng ta cũng có thể **resample** series với các khoảng thời gian khác nhau. Ví dụ, giả sử chúng ta muốn tính khối lượng bán hàng trung bình hàng tháng. Chúng ta có thể sử dụng đoạn mã sau:
Với chuỗi thời gian, ta cũng có thể **lấy mẫu lại (resample)** theo các khoảng thời gian khác nhau. Ví dụ, giả sử ta muốn tính giá trị trung bình doanh số theo tháng. Ta dùng đoạn mã sau:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![Biểu đồ trung bình chuỗi thời gian hàng tháng](../../../../translated_images/vi/timeseries-3.f3147cbc8c624881.webp)
![Trung bình chuỗi thời gian theo tháng](../../../../translated_images/vi/timeseries-3.f3147cbc8c624881.webp)
### DataFrame
DataFrame về cơ bản là một tập hợp các series có cùng index. Chúng ta có thể kết hợp nhiều series lại với nhau thành một DataFrame:
DataFrame về cơ bản là tập hợp các series có cùng chỉ số. Ta có thể kết hợp nhiều series lại thành một DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
@ -100,11 +102,11 @@ df = pd.DataFrame([a,b])
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | I | like | to | use | Python | and | Pandas | very | much |
Chúng ta cũng có thể sử dụng Series làm cột và chỉ định tên cột bằng cách sử dụng dictionary:
Chúng ta cũng có thể sử dụng Series làm cột, và chỉ định tên cột bằng từ điển:
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
Điều này sẽ tạo ra một bảng như sau:
Điều này tạo ra bảng như sau:
| | A | B |
| --- | --- | ------ |
@ -118,39 +120,39 @@ df = pd.DataFrame({ 'A' : a, 'B' : b })
| 7 | 8 | very |
| 8 | 9 | much |
**Lưu ý** rằng chúng ta cũng có thể có bố cục bảng này bằng cách chuyển vị bảng trước đó, ví dụ bằng cách viết
**Lưu ý** rằng chúng ta cũng có thể có được bố cục bảng này bằng cách chuyển vị bảng trước đó, ví dụ viết
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })
```
Ở đây `.T` có nghĩa là thao tác chuyển vị DataFrame, tức là thay đổi hàng và cột, và thao tác `rename` cho phép chúng ta đổi tên cột để khớp với ví dụ trước.
Ở đây `.T` có nghĩa là thao tác chuyển vị DataFrame, tức là đổi hàng và cột, và thao tác `rename` cho phép đổi tên các cột cho phù hợp với ví dụ trước.
Dưới đây là một số thao tác quan trọng nhất mà chúng ta có thể thực hiện trên DataFrames:
Đây là một vài thao tác quan trọng nhất mà ta có thể thực hiện trên DataFrame:
**Chọn cột**. Chúng ta có thể chọn các cột riêng lẻ bằng cách viết `df['A']` - thao tác này trả về một Series. Chúng ta cũng có thể chọn một tập hợp con của các cột thành một DataFrame khác bằng cách viết `df[['B','A']]` - thao tác này trả về một DataFrame khác.
**Chọn cột**. Ta có thể chọn từng cột bằng cách viết `df['A']` - thao tác này trả về một Series. Ta cũng có thể chọn một tập con các cột vào DataFrame khác bằng cách viết `df[['B','A']]` - điều này trả về một DataFrame khác.
**Lọc** chỉ các hàng nhất định theo tiêu chí. Ví dụ, để chỉ giữ lại các hàng có cột `A` lớn hơn 5, chúng ta có thể viết `df[df['A']>5]`.
**Lọc** chỉ một số hàng dựa trên tiêu chí. Ví dụ, để giữ lại chỉ những hàng có giá trị cột `A` lớn hơn 5, ta viết `df[df['A']>5]`.
> **Lưu ý**: Cách hoạt động của lọc là như sau. Biểu thức `df['A']<5` trả về một series boolean, chỉ ra liệu biểu thức có `True` hay `False` cho từng phần tử của series gốc `df['A']`. Khi series boolean được sử dụng làm index, nó trả về tập hợp con của các hàng trong DataFrame. Do đó, không thể sử dụng biểu thức boolean Python tùy ý, ví dụ, viết `df[df['A']>5 and df['A']<7]` sẽ sai. Thay vào đó, bạn nên sử dụng thao tác đặc biệt `&` trên series boolean, viết `df[(df['A']>5) & (df['A']<7)]` (*dấu ngoặc rất quan trọng ở đây*).
> **Lưu ý**: Cách lọc hoạt động như sau. Biểu thức `df['A']<5` trả về một series boolean, biểu thị giá trị đúng hay sai cho mỗi phần tử của series gốc `df['A']`. Khi series boolean được dùng làm chỉ số, nó trả về tập hợp con các hàng trong DataFrame. Do đó, không thể dùng biểu thức boolean Python tùy ý, ví dụ viết `df[df['A']>5 and df['A']<7]` sẽ sai. Thay vào đó, bạn nên dùng phép toán `&` trên các series boolean, viết `df[(df['A']>5) & (df['A']<7)]` (*dấu ngoặc rất quan trọng*).
**Tạo các cột tính toán mới**. Chúng ta có thể dễ dàng tạo các cột tính toán mới cho DataFrame của mình bằng cách sử dụng biểu thức trực quan như sau:
**Tạo các cột mới có thể tính toán**. Ta có thể dễ dàng tạo cột tính toán mới cho DataFrame bằng biểu thức trực quan như sau:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Ví dụ này tính độ lệch của A so với giá trị trung bình của nó. Điều thực sự xảy ra ở đây là chúng ta đang tính một series, sau đó gán series này cho vế trái, tạo một cột mới. Do đó, chúng ta không thể sử dụng bất kỳ thao tác nào không tương thích với series, ví dụ, đoạn mã dưới đây là sai:
Ví dụ này tính độ lệch của A khỏi giá trị trung bình của nó. Thực tế là chúng ta tính toán một series rồi gán nó cho bên trái, tạo ra một cột khác. Do đó, không thể dùng các thao tác không tương thích với series, ví dụ code dưới đây là sai:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
# Mã sai -> df['ADescr'] = "Low" nếu df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Kết qu sai
```
Ví dụ sau, mặc dù cú pháp đúng, nhưng cho kết quả sai, vì nó gán độ dài của series `B` cho tất cả các giá trị trong cột, chứ không phải độ dài của từng phần tử như chúng ta mong muốn.
Ví dụ sau, mặc dù đúng cú pháp, cho kết quả sai vì nó gán độ dài của series `B` cho tất cả các giá trị trong cột, chứ không phải độ dài từng phần tử như mong muốn.
Nếu chúng ta cần tính các biểu thức phức tạp như vậy, chúng ta có thể sử dụng hàm `apply`. Ví dụ cuối cùng có thể được viết như sau:
Nếu cần tính toán biểu thức phức tạp như vậy, ta có thể dùng hàm `apply`. Ví dụ cuối cùng có thể viết lại như sau:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# hoặc
df['LenB'] = df['B'].apply(len)
```
Sau các thao tác trên, chúng ta sẽ có DataFrame sau:
Sau các thao tác trên, ta sẽ có DataFrame như sau:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
@ -164,22 +166,22 @@ Sau các thao tác trên, chúng ta sẽ có DataFrame sau:
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**Chọn hàng dựa trên số** có thể được thực hiện bằng cách sử dụng cấu trúc `iloc`. Ví dụ, để chọn 5 hàng đầu tiên từ DataFrame:
**Chọn hàng dựa trên số thứ tự** có thể dùng cấu trúc `iloc`. Ví dụ, chọn 5 hàng đầu tiên từ DataFrame:
```python
df.iloc[:5]
```
**Nhóm** thường được sử dụng để có kết quả tương tự như *bảng pivot* trong Excel. Giả sử chúng ta muốn tính giá trị trung bình của cột `A` cho mỗi số `LenB` nhất định. Sau đó, chúng ta có thể nhóm DataFrame của mình theo `LenB` và gọi `mean`:
**Nhóm dữ liệu** thường dùng để lấy kết quả tương tự như *bảng tổng hợp (pivot tables)* trong Excel. Giả sử ta muốn tính giá trị trung bình của cột `A` ứng với từng giá trị `LenB`. Ta có thể nhóm DataFrame theo `LenB` rồi gọi hàm `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Nếu chúng ta cần tính giá trị trung bình và số lượng phần tử trong nhóm, thì chúng ta có thể sử dụng hàm `aggregate` phức tạp hơn:
Nếu cần tính cả trung bình và số phần tử trong nhóm thì có thể dùng hàm `aggregate` phức tạp hơn:
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
```
Điều này cho chúng ta bảng sau:
Điều này cho ta bảng kết quả sau:
| LenB | Count | Mean |
| ---- | ----- | -------- |
@ -189,93 +191,98 @@ df.groupby(by='LenB') \
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### Lấy Dữ Liệu
Chúng ta đã thấy việc tạo Series và DataFrames từ các đối tượng Python dễ dàng như thế nào. Tuy nhiên, dữ liệu thường xuất hiện dưới dạng tệp văn bản hoặc bảng Excel. May mắn thay, Pandas cung cấp cho chúng ta một cách đơn giản để tải dữ liệu từ ổ đĩa. Ví dụ, việc đọc tệp CSV đơn giản như sau:
### Lấy dữ liệu
Chúng ta đã thấy việc tạo Series và DataFrames từ các đối tượng Python thật dễ dàng như thế nào. Tuy nhiên, dữ liệu thường ở dạng tệp văn bản hoặc bảng Excel. May mắn thay, Pandas cung cấp cho chúng ta một cách đơn giản để tải dữ liệu từ đĩa. Ví dụ, đọc tệp CSV đơn giản như thế này:
```python
df = pd.read_csv('file.csv')
```
Chúng ta sẽ xem thêm các ví dụ về việc tải dữ liệu, bao gồm cả việc lấy dữ liệu từ các trang web bên ngoài, trong phần "Thử thách".
Chúng ta sẽ xem thêm các ví dụ về tải dữ liệu, bao gồm lấy dữ liệu từ các trang web bên ngoài, trong phần "Thử thách"
### In và Vẽ Biểu Đ
### In ra và Vẽ biểu đ
Một nhà khoa học dữ liệu thường phải khám phá dữ liệu, vì vậy việc có thể trực quan hóa dữ liệu là rất quan trọng. Khi DataFrame lớn, nhiều lần chúng ta chỉ muốn đảm bảo rằng mọi thứ đang được thực hiện đúng bằng cách in ra vài dòng đầu tiên. Điều này có thể thực hiện bằng cách gọi `df.head()`. Nếu bạn chạy nó từ Jupyter Notebook, nó sẽ in DataFrame dưới dạng bảng đẹp mắt.
Một Nhà Khoa học Dữ liệu thường phải khám phá dữ liệu, vì vậy việc có thể trực quan hóa dữ liệu là rất quan trọng. Khi DataFrame lớn, nhiều khi chúng ta chỉ muốn chắc chắn rằng mọi việc đang được thực hiện đúng bằng cách in ra vài hàng đầu tiên. Việc này có thể làm bằng cách gọi `df.head()`. Nếu bạn chạy trong Jupyter Notebook, nó sẽ in DataFrame dưới dạng bảng rất đẹp.
Chúng ta cũng đã thấy cách sử dụng hàm `plot` để trực quan hóa một số cột. Mặc dù `plot` rất hữu ích cho nhiều nhiệm vụ và hỗ trợ nhiều loại biểu đồ khác nhau thông qua tham số `kind=`, bạn luôn có thể sử dụng thư viện `matplotlib` để vẽ những biểu đồ phức tạp hơn. Chúng ta sẽ tìm hiểu chi tiết về trực quan hóa dữ liệu trong các bài học riêng của khóa học.
Chúng ta cũng đã thấy cách sử dụng hàm `plot` để trực quan hóa một số cột. Mặc dù `plot` rất hữu ích cho nhiều nhiệm vụ, và hỗ trợ nhiều kiểu đồ thị khác nhau thông qua tham số `kind=`, bạn luôn có thể sử dụng thư viện `matplotlib` thô để vẽ các đồ thị phức tạp hơn. Chúng ta sẽ đi sâu vào trực quan dữ liệu cụ thể trong các bài học riêng biệt.
Tổng quan này bao gồm các khái niệm quan trọng nhất của Pandas, tuy nhiên, thư viện này rất phong phú và không có giới hạn nào cho những gì bạn có thể làm với nó! Bây giờ hãy áp dụng kiến thức này để giải quyết các vấn đề cụ thể.
Bài tổng quan này bao gồm các khái niệm quan trọng nhất của Pandas, tuy nhiên, thư viện rất phong phú, và không có giới hạn với những gì bạn có thể làm với nó! Giờ hãy áp dụng kiến thức này để giải quyết một vấn đề cụ thể.
## 🚀 Thử thách 1: Phân tích Sự Lây Lan của COVID
## 🚀 Thử thách 1: Phân tích sự lan truyền của COVID
Vấn đề đầu tiên chúng ta sẽ tập trung là mô hình hóa sự lây lan của dịch COVID-19. Để làm điều đó, chúng ta sẽ sử dụng dữ liệu về số lượng người bị nhiễm ở các quốc gia khác nhau, được cung cấp bởi [Trung tâm Khoa học Hệ thống và Kỹ thuật](https://systems.jhu.edu/) (CSSE) tại [Đại học Johns Hopkins](https://jhu.edu/). Bộ dữ liệu có sẵn tại [Kho lưu trữ GitHub này](https://github.com/CSSEGISandData/COVID-19).
Vấn đề đầu tiên chúng ta tập trung là mô hình hoá sự lây lan dịch bệnh COVID-19. Để làm điều đó, chúng ta sẽ sử dụng dữ liệu về số lượng người nhiễm ở các quốc gia khác nhau, do [Trung tâm Khoa học Hệ thống và Kỹ thuật](https://systems.jhu.edu/) (CSSE) tại [Đại học Johns Hopkins](https://jhu.edu/) cung cấp. Bộ dữ liệu có tại [Kho lưu trữ GitHub này](https://github.com/CSSEGISandData/COVID-19).
Vì chúng ta muốn minh họa cách xử lý dữ liệu, hãy mở [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) và đọc từ đầu đến cuối. Bạn cũng có thể thực thi các ô lệnh và thực hiện một số thử thách mà chúng tôi đã để lại cho bạn ở cuối.
Vì chúng ta muốn minh họa cách xử lý dữ liệu, bạn hãy mở [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) và đọc từ trên xuống dưới. Bạn cũng có thể thực thi các ô và làm một số thử thách mà chúng tôi để lại cho bạn ở cuối.
![COVID Spread](../../../../translated_images/vi/covidspread.f3d131c4f1d260ab.webp)
> Nếu bạn không biết cách chạy mã trong Jupyter Notebook, hãy xem [bài viết này](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Nếu bạn chưa biết cách chạy code trong Jupyter Notebook, hãy xem [bài viết này](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Làm Việc Với Dữ Liệu Không Có Cấu Trúc
## Làm việc với dữ liệu không có cấu trúc
Mặc dù dữ liệu thường xuất hiện dưới dạng bảng, trong một số trường hợp chúng ta cần xử lý dữ liệu ít có cấu trúc hơn, ví dụ như văn bản hoặc hình ảnh. Trong trường hợp này, để áp dụng các kỹ thuật xử lý dữ liệu mà chúng ta đã thấy ở trên, chúng ta cần **trích xuất** dữ liệu có cấu trúc. Dưới đây là một vài ví dụ:
Mặc dù dữ liệu thường có dạng bảng, trong một số trường hợp chúng ta phải xử lý dữ liệu ít cấu trúc hơn, ví dụ như văn bản hoặc hình ảnh. Trong trường hợp này, để áp dụng các kỹ thuật xử lý dữ liệu mà chúng ta đã thấy ở trên, ta cần phải **trích xuất** dữ liệu có cấu trúc. Dưới đây là một vài ví dụ:
* Trích xuất từ khóa từ văn bản và xem tần suất xuất hiện của các từ khóa đó
* Sử dụng mạng nơ-ron để trích xuất thông tin về các đối tượng trong hình ảnh
* Thu thập thông tin về cảm xúc của con người từ luồng video camera
* Trích xuất các từ khóa từ văn bản, và xem tần suất xuất hiện của các từ khóa đó
* Sử dụng mạng neural để trích xuất thông tin về các đối tượng trong bức ảnh
* Lấy thông tin về cảm xúc của mọi người qua video camera
## 🚀 Thử thách 2: Phân tích Các Bài Báo về COVID
## 🚀 Thử thách 2: Phân tích các bài báo về COVID
Trong thử thách này, chúng ta sẽ tiếp tục với chủ đề đại dịch COVID và tập trung vào việc xử lý các bài báo khoa học về chủ đề này. Có [Bộ dữ liệu CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) với hơn 7000 bài báo (tại thời điểm viết) về COVID, có sẵn với siêu dữ liệu và tóm tắt (và khoảng một nửa trong số đó cũng có toàn văn).
Trong thử thách này, chúng ta sẽ tiếp tục với chủ đề đại dịch COVID, và tập trung vào xử lý các bài báo khoa học về chủ đề này. Có bộ dữ liệu [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) với hơn 7000 (tại thời điểm viết) bài báo về COVID, có metadata và tóm tắt (và với khoảng một nửa trong số đó còn có bản đầy đủ).
Một ví dụ đầy đủ về việc phân tích bộ dữ liệu này bằng cách sử dụng dịch vụ nhận thức [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) được mô tả [trong bài viết blog này](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Chúng ta sẽ thảo luận phiên bản đơn giản hóa của phân tích này.
Một ví dụ đầy đủ về phân tích bộ dữ liệu này sử dụng dịch vụ nhận thức [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) được mô tả [trong bài viết blog này](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Chúng ta sẽ thảo luận phiên bản đơn giản hơn của phân tích này.
> **NOTE**: Chúng tôi không cung cấp bản sao của bộ dữ liệu như một phần của kho lưu trữ này. Bạn có thể cần tải xuống tệp [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) từ [bộ dữ liệu này trên Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Có thể cần đăng ký với Kaggle. Bạn cũng có thể tải xuống bộ dữ liệu mà không cần đăng ký [tại đây](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), nhưng nó sẽ bao gồm tất cả các văn bản đầy đủ ngoài tệp siêu dữ liệu.
> **LƯU Ý**: Chúng tôi không cung cấp bản sao của bộ dữ liệu trong kho lưu trữ này. Bạn có thể cần tải trước tệp [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) từ [bộ dữ liệu trên Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Có thể yêu cầu đăng ký với Kaggle. Bạn cũng có thể tải bộ dữ liệu mà không cần đăng ký [tại đây](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), nhưng nó sẽ bao gồm tất cả các bản đầy đủ ngoài tập tin metadata.
Hãy mở [`notebook-papers.ipynb`](notebook-papers.ipynb) và đọc từ đầu đến cuối. Bạn cũng có thể thực thi các ô lệnh và thực hiện một số thử thách mà chúng tôi đã để lại cho bạn ở cuối.
Mở [`notebook-papers.ipynb`](notebook-papers.ipynb) và đọc từ trên xuống dưới. Bạn cũng có thể chạy các ô và làm một số thử thách mà chúng tôi để lại cho bạn ở cuối.
![Covid Medical Treatment](../../../../translated_images/vi/covidtreat.b2ba59f57ca45fbc.webp)
![Điều trị Y tế COVID](../../../../translated_images/vi/covidtreat.b2ba59f57ca45fbc.webp)
## Xử Lý Dữ Liệu Hình Ảnh
## Xử lý dữ liệu hình ảnh
Gần đây, các mô hình AI rất mạnh mẽ đã được phát triển, cho phép chúng ta hiểu hình ảnh. Có nhiều nhiệm vụ có thể được giải quyết bằng cách sử dụng các mạng nơ-ron đã được huấn luyện trước hoặc các dịch vụ đám mây. Một số ví dụ bao gồm:
Gần đây, nhiều mô hình AI rất mạnh mẽ đã được phát triển giúp chúng ta hiểu được hình ảnh. Có nhiều nhiệm vụ có thể giải quyết thông qua các mạng neural đã được huấn luyện sẵn hoặc dịch vụ đám mây. Một số ví dụ bao gồm:
* **Phân loại hình ảnh**, giúp bạn phân loại hình ảnh vào một trong các lớp đã được định nghĩa trước. Bạn có thể dễ dàng huấn luyện bộ phân loại hình ảnh của riêng mình bằng các dịch vụ như [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Phát hiện đối tượng** để phát hiện các đối tượng khác nhau trong hình ảnh. Các dịch vụ như [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) có thể phát hiện một số đối tượng phổ biến, và bạn có thể huấn luyện mô hình [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) để phát hiện một số đối tượng cụ thể mà bạn quan tâm.
* **Phát hiện khuôn mặt**, bao gồm tuổi, giới tính và cảm xúc. Điều này có thể được thực hiện thông qua [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Phân loại hình ảnh**, giúp bạn phân loại hình ảnh vào một trong các lớp đã định nghĩa trước. Bạn có thể dễ dàng huấn luyện trình phân loại hình ảnh của riêng mình bằng các dịch vụ như [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Phát hiện đối tượng** để phát hiện các đối tượng khác nhau trong ảnh. Các dịch vụ như [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) có thể phát hiện nhiều đối tượng phổ biến, và bạn có thể huấn luyện mô hình [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) để phát hiện một số đối tượng cụ thể quan tâm.
* **Phát hiện khuôn mặt**, bao gồm phát hiện Tuổi, Giới tính và Cảm xúc. Việc này có thể thực hiện qua [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Tất cả các dịch vụ đám mây này có thể được gọi bằng [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), và do đó có thể dễ dàng tích hợp vào quy trình khám phá dữ liệu của bạn.
Tất cả các dịch vụ đám mây này có thể được gọi thông qua [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), và do đó có thể dễ dàng tích hợp vào quy trình khám phá dữ liệu của bạn.
Dưới đây là một số ví dụ về việc khám phá dữ liệu từ các nguồn dữ liệu hình ảnh:
* Trong bài viết blog [Học Khoa Học Dữ Liệu mà Không Cần Lập Trình](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/), chúng ta khám phá các bức ảnh trên Instagram, cố gắng hiểu điều gì khiến mọi người thích một bức ảnh nhiều hơn. Chúng ta đầu tiên trích xuất càng nhiều thông tin từ hình ảnh càng tốt bằng cách sử dụng [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), và sau đó sử dụng [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) để xây dựng mô hình có thể giải thích được.
* Trong [Hội Thảo Nghiên Cứu Khuôn Mặt](https://github.com/CloudAdvocacy/FaceStudies), chúng ta sử dụng [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) để trích xuất cảm xúc của mọi người trên các bức ảnh từ các sự kiện, nhằm cố gắng hiểu điều gì khiến mọi người hạnh phúc.
Dưới đây là một số ví dụ về khám phá dữ liệu từ nguồn dữ liệu hình ảnh:
* Trong bài viết blog [Học Khoa học Dữ liệu mà không cần viết code](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) chúng tôi khám phá ảnh Instagram, cố gắng hiểu điều gì khiến người ta thích một bức ảnh hơn. Trước tiên chúng tôi trích xuất càng nhiều thông tin từ các bức ảnh càng tốt bằng cách sử dụng [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), rồi sử dụng [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) để xây dựng mô hình dễ hiểu.
* Trong [Hội thảo Nghiên cứu Khuôn mặt](https://github.com/CloudAdvocacy/FaceStudies) chúng tôi sử dụng [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) để trích xuất cảm xúc của người trong ảnh sự kiện, với mục đích hiểu điều gì làm mọi người vui vẻ.
## Kết Luận
## Kết luận
Dù bạn đã có dữ liệu có cấu trúc hay không có cấu trúc, sử dụng Python bạn có thể thực hiện tất cả các bước liên quan đến xử lý và hiểu dữ liệu. Đây có lẽ là cách linh hoạt nhất để xử lý dữ liệu, và đó là lý do phần lớn các nhà khoa học dữ liệu sử dụng Python như công cụ chính của họ. Học Python một cách sâu sắc có lẽ là một ý tưởng tốt nếu bạn nghiêm túc v hành trình khoa học dữ liệu của mình!
Cho dù bạn đã có dữ liệu có cấu trúc hay không có cấu trúc, sử dụng Python bạn có thể thực hiện tất cả các bước liên quan đến xử lý và hiểu dữ liệu. Đây có lẽ là cách xử lý dữ liệu linh hoạt nhất, và đó là lý do phần lớn các nhà khoa học dữ liệu sử dụng Python như công cụ chính của họ. Học Python sâu sắc có lẽ là một ý tưởng tốt nếu bạn nghiêm túc với hành trình khoa học dữ liệu của mình!
## [Câu hỏi sau bài giảng](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## [Bài kiểm tra sau bài giảng](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## Ôn Tập & Tự Học
## Ôn tập & Tự học
**Sách**
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Tài liệu trực tuyến**
**Tài nguyên trực tuyến**
* Hướng dẫn chính thức [10 phút với Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Tài liệu về Trực quan hóa Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
* [Tài liệu về Trực quan hóa trong Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Học Python**
* [Học Python một cách thú vị với Đồ họa Turtle và Fractals](https://github.com/shwars/pycourse)
* [Bắt đầu học Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) trên [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Học Python một cách vui nhộn với Turtle Graphics và Fractals](https://github.com/shwars/pycourse)
* [Bước đầu với Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) trên [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Bài Tập
## Bài tập
[Thực hiện nghiên cứu dữ liệu chi tiết hơn cho các thử thách trên](assignment.md)
## Tín Dụng
## Lời cảm ơn
Bài học này được viết với ♥️ bởi [Dmitry Soshnikov](http://soshnikov.com)
Bài học này được tác giả với ♥️ bởi [Dmitry Soshnikov](http://soshnikov.com)
---
**Tuyên bố miễn trừ trách nhiệm**:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc sự không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn tham khảo chính thức. Đối với các thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp từ con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Tuyên bố miễn trừ trách nhiệm**:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng bản dịch tự động có thể chứa lỗi hoặc sai sót. Tài liệu gốc bằng ngôn ngữ gốc nên được coi là nguồn tin chính thức. Đối với thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm về bất kỳ hiểu lầm hoặc giải thích sai nào phát sinh từ việc sử dụng bản dịch này.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
Loading…
Cancel
Save