From bbef5d99258787afa6fdfa7064682227e248df02 Mon Sep 17 00:00:00 2001 From: "localizeflow[bot]" Date: Fri, 17 Jul 2026 17:38:52 +0000 Subject: [PATCH] [zh-MO,zh-HK,zh-TW] chore(i18n): sync translations Sync translations with latest source changes. Languages: Chinese (Traditional, Macau) [zh-MO], Chinese (Traditional, Hong Kong) [zh-HK], Chinese (Traditional, Taiwan) [zh-TW] --- translations/zh-HK/.co-op-translator.json | 4 +- .../2-Working-With-Data/07-python/README.md | 206 ++++++++--------- translations/zh-MO/.co-op-translator.json | 4 +- .../2-Working-With-Data/07-python/README.md | 210 +++++++++--------- translations/zh-TW/.co-op-translator.json | 4 +- .../2-Working-With-Data/07-python/README.md | 205 ++++++++--------- 6 files changed, 326 insertions(+), 307 deletions(-) diff --git a/translations/zh-HK/.co-op-translator.json b/translations/zh-HK/.co-op-translator.json index ac6cc390..62fdbeb8 100644 --- a/translations/zh-HK/.co-op-translator.json +++ b/translations/zh-HK/.co-op-translator.json @@ -96,8 +96,8 @@ "language_code": "zh-HK" }, "2-Working-With-Data/07-python/README.md": { - "original_hash": "7bfec050f4717dcc2dfd028aca9d21f3", - "translation_date": "2025-09-06T15:28:08+00:00", + "original_hash": "fb29e3e0be486fe8f15d50bdade79eb1", + "translation_date": "2026-07-17T17:37:10+00:00", "source_file": "2-Working-With-Data/07-python/README.md", "language_code": "zh-HK" }, diff --git a/translations/zh-HK/2-Working-With-Data/07-python/README.md b/translations/zh-HK/2-Working-With-Data/07-python/README.md index 4c70d07f..32f22686 100644 --- a/translations/zh-HK/2-Working-With-Data/07-python/README.md +++ b/translations/zh-HK/2-Working-With-Data/07-python/README.md @@ -1,61 +1,62 @@ -# 使用數據:Python 和 Pandas 庫 +# 處理數據:Python 與 Pandas 庫 -| ![ 由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記 ](../../sketchnotes/07-WorkWithPython.png) | +| ![ 筆記手稿由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製 ](../../sketchnotes/07-WorkWithPython.png) | | :-------------------------------------------------------------------------------------------------------: | -| 使用 Python - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ | +| 使用 Python - _筆記手稿由 [@nitya](https://twitter.com/nitya) 繪製_ | [![介紹影片](../../../../translated_images/zh-HK/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 更佳的效能,非常適合科學實驗。 -* **[Python](https://www.python.org/)**:一種通用編程語言,因其簡單性常被認為是初學者的最佳選擇之一。Python 擁有許多額外的庫,可以幫助解決許多實際問題,例如從 ZIP 壓縮檔中提取數據,或將圖片轉換為灰階。除了數據科學,Python 還常用於網頁開發。 -* **[R](https://www.r-project.org/)**:一個專為統計數據處理而開發的傳統工具箱。它擁有大量的庫(CRAN),使其成為數據處理的良好選擇。然而,R 並不是通用編程語言,通常僅用於數據科學領域。 -* **[Julia](https://julialang.org/)**:另一種專為數據科學開發的語言。它旨在提供比 Python 更好的性能,是科學實驗的強大工具。 +本課程將聚焦於使用 Python 進行簡單資料處理。我們假設你具備基本的 Python 知識。如果你想更深入了解 Python,可以參考以下資源: -在本課中,我們將專注於使用 Python 進行簡單的數據處理。我們假設您對該語言已有基本的了解。如果您想更深入地學習 Python,可以參考以下資源: +* [以海龜圖形與分形趣學 Python](https://github.com/shwars/pycourse) - GitHub 上快速入門 Python 程式設計課程 +* [開始使用 Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) 微軟學習平台學習路徑 -* [用 Turtle Graphics 和分形圖形趣味學習 Python](https://github.com/shwars/pycourse) - 基於 GitHub 的 Python 編程快速入門課程 -* [邁出學習 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) 上的學習路徑 +資料有許多形式。本課程將考慮三種資料形式 — 表格資料文字圖片。 -數據可以有多種形式。在本課中,我們將考慮三種數據形式——**表格數據**、**文本**和**圖像**。 +我們將著重在幾個資料處理示例,而非全面介紹所有相關函式庫。這樣能讓你了解可行的主要方法,並知道未來需找解決方案時的方向。 + +> 最重要的建議:當你需要對資料執行某些不懂的方法時,嘗試上網搜尋。[Stackoverflow](https://stackoverflow.com/) 通常有很多有用的 Python 程式碼範例,涵蓋多數常見任務。 -我們將專注於一些數據處理的例子,而不是全面介紹所有相關庫。這樣可以讓您了解主要的可能性,並在需要時知道去哪裡尋找解決方案。 -> **最有用的建議**:當您需要對數據執行某些操作但不知道如何實現時,嘗試在互聯網上搜索。[Stackoverflow](https://stackoverflow.com/) 通常包含許多針對常見任務的 Python 代碼示例。 ## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/12) -## 表格數據與 DataFrame +## 表格資料與資料框 -當我們討論關係型數據庫時,您已經接觸過表格數據。當您擁有大量數據,並且這些數據存儲在許多不同的關聯表中時,使用 SQL 來處理它們是非常合理的。然而,在許多情況下,我們擁有一個數據表,並需要對該數據獲得一些**理解**或**洞察**,例如分佈情況、值之間的相關性等。在數據科學中,經常需要對原始數據進行一些轉換,然後進行可視化。這兩個步驟都可以輕鬆地使用 Python 完成。 +當我們談到關聯式資料庫時,你已經接觸過表格資料。當資料繁多且分散於多個相互關聯的表格中,使用 SQL 工作肯定更合理。然而,有很多情況是我們擁有一個資料表,想從中獲得關於資料的 理解洞見,例如分佈、變數間的關聯等。在資料科學中,我們經常需要對原始資料做出轉換,接著做視覺化。上述兩步驟均可輕鬆用 Python 完成。 -Python 中有兩個非常有用的庫可以幫助您處理表格數據: -* **[Pandas](https://pandas.pydata.org/)**:允許您操作所謂的 **DataFrame**,類似於關係型表格。您可以擁有命名的列,並對行、列以及整個 DataFrame 執行不同的操作。 -* **[Numpy](https://numpy.org/)**:用於處理 **張量**(即多維 **數組**)的庫。數組中的值具有相同的基礎類型,並且比 DataFrame 更簡單,但它提供了更多的數學操作,並且開銷更小。 +Python 中有兩個最實用的函式庫可助你處理表格資料: +* **[Pandas](https://pandas.pydata.org/)** 允許你操作所謂的 資料框(Dataframes),類似關聯資料表。你可以設定命名欄位,並對列、欄及整體資料框執行不同操作。 +* **[Numpy](https://numpy.org/)** 是一個用於處理 張量,即多維 陣列 的函式庫。陣列中所有值具有相同底層型態,結構較資料框簡單,數學運算較多且負擔較小。 -此外,還有幾個您應該了解的庫: -* **[Matplotlib](https://matplotlib.org/)**:用於數據可視化和繪製圖表的庫 -* **[SciPy](https://www.scipy.org/)**:包含一些額外科學函數的庫。我們在討論概率和統計時已經接觸過該庫 +還有幾個你應該了解的函式庫: +* **[Matplotlib](https://matplotlib.org/)** 是資料視覺化及繪圖函式庫 +* **[SciPy](https://www.scipy.org/)** 提供額外科學計算功能。我們在談論機率與統計時已接觸此函式庫 -以下是您通常在 Python 程序開頭導入這些庫的代碼: +以下是你通常在 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 ... # 你需要指定你需要的確切子包 ``` -Pandas 圍繞幾個基本概念構建。 +Pandas 以幾個基本概念為核心。 -### Series +### 系列 (Series) -**Series** 是一組值的序列,類似於列表或 numpy 數組。主要區別在於 Series 還有一個 **索引**,當我們對 Series 進行操作(例如相加)時,索引會被考慮在內。索引可以簡單如整數行號(從列表或數組創建 Series 時默認使用的索引),也可以具有複雜結構,例如日期區間。 +**Series** 是一列值的序列,類似串列或 numpy 陣列。主要差別是系列有個 索引,對系列執行運算(例如加法)時會考慮索引。索引可以很簡單,比如整數行號(預設由串列或陣列建立系列時使用的索引),也可以有複雜結構,如日期區間。 -> **注意**:在隨附的筆記本 [`notebook.ipynb`](notebook.ipynb) 中有一些 Pandas 的入門代碼。我們在這裡僅概述一些示例,您可以查看完整的筆記本。 +> 注意:在附贈筆記本 [`notebook.ipynb`](notebook.ipynb) 中,有些 Pandas 的入門程式碼。我們此處僅概述部分範例,你完全可以查看完整筆記本。 -舉個例子:我們想分析我們冰淇淋店的銷售情況。讓我們生成一個銷售數據的 Series(某段時間內每天售出的數量): +舉個例子:我們想分析冰淇淋店的銷售情況。生成一段期間內每日銷售量(售出商品數量)的系列: ```python start_date = "Jan 1, 2020" @@ -67,45 +68,45 @@ items_sold.plot() ``` ![時間序列圖](../../../../translated_images/zh-HK/timeseries-1.80de678ab1cf727e.webp) -假設每週我們都會為朋友舉辦派對,並額外準備 10 盒冰淇淋。我們可以創建另一個以週為索引的 Series 來展示這一點: +假設每週我們都會為朋友聚會額外準備 10 包冰淇淋。我們可建立另一個以週為索引的系列,來展示此情況: ```python additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W")) ``` -當我們將兩個 Series 相加時,我們得到總數: +兩個系列相加可得總數: ```python total_items = items_sold.add(additional_items,fill_value=0) total_items.plot() ``` ![時間序列圖](../../../../translated_images/zh-HK/timeseries-2.aae51d575c55181c.webp) -> **注意**:我們並未使用簡單的語法 `total_items+additional_items`。如果這樣做,結果 Series 中會有許多 `NaN`(*非數值*)值。這是因為在 `additional_items` Series 的某些索引點上存在缺失值,而將 `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/zh-HK/timeseries-3.f3147cbc8c624881.webp) +![月平均時間序列](../../../../translated_images/zh-HK/timeseries-3.f3147cbc8c624881.webp) -### DataFrame +### 資料框 (DataFrame) -DataFrame 本質上是具有相同索引的多個 Series 的集合。我們可以將多個 Series 組合成一個 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]) ``` -這將創建如下的橫向表格: +這會建立一個橫向表格如下: | | 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 | -我們還可以將 Series 作為列,並使用字典指定列名: +我們也可以用系列當作欄,利用字典指定欄名: ```python df = pd.DataFrame({ 'A' : a, 'B' : b }) ``` -這將生成如下表格: +這會得到如下表格: | | A | B | | --- | --- | ------ | @@ -119,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` 可重命名欄位以符合前例。 -以下是我們可以對 DataFrame 執行的一些最重要操作: +以下為資料框可執行的一些重要操作: -**選擇列**。我們可以通過 `df['A']` 選擇單個列——此操作返回一個 Series。我們還可以通過 `df[['B','A']]` 選擇列的子集到另一個 DataFrame 中——此操作返回另一個 DataFrame。 +欄位選擇。我們可以用 `df['A']` 選取單一欄,該操作回傳一個系列。也能用 `df[['B','A']]` 選取多個欄,回傳另一資料框。 -**篩選**符合條件的行。例如,要僅保留列 `A` 大於 5 的行,我們可以寫 `df[df['A']>5]`。 +根據條件篩選行。例如想保留欄 `A` 大於 5 的行,可寫成 `df[df['A']>5]`。 -> **注意**:篩選的工作方式如下。表達式 `df['A']<5` 返回一個布爾 Series,指示原始 Series `df['A']` 的每個元素是否滿足條件。當布爾 Series 用作索引時,它返回 DataFrame 中的行子集。因此,不能使用任意的 Python 布爾表達式,例如,寫 `df[df['A']>5 and df['A']<7]` 是錯誤的。相反,您應該使用布爾 Series 的特殊 `&` 操作,寫作 `df[(df['A']>5) & (df['A']<7)]`(*括號在這裡很重要*)。 +> 注意:篩選結果的運作方式如下:表達式 `df['A']<5` 會回傳一個布林系列,指出原系列中每個元素是否符合條件。以布林系列索引時,會回傳符合條件的資料框子集。因此不能直接用 Python 的一般布林運算,例如寫 `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 與其平均值的偏差。實際上,我們是在計算一個 Series,然後將該 Series 賦值給左側,創建另一列。因此,我們不能使用與 Series 不兼容的任何操作,例如,以下代碼是錯誤的: +此範例計算 A 欄與其平均值的偏差。實際上是在計算系列,再將該系列指派給左邊,形成新欄。因此,不能使用不支援系列的運算,下例即錯誤: ```python -# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi" -df['LenB'] = len(df['B']) # <- Wrong result +# 錯誤的程式碼 -> df['ADescr'] = "Low" 如果 df['A'] < 5 否則 "Hi" +df['LenB'] = len(df['B']) # <- 錯誤的結果 ``` -後一個示例雖然語法正確,但給出了錯誤的結果,因為它將 Series `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 | | --- | --- | ------ | ---- | ---- | @@ -165,22 +166,22 @@ df['LenB'] = df['B'].apply(len) | 7 | 8 | very | 3.0 | 4 | | 8 | 9 | much | 4.0 | 4 | -**基於行號選擇行**可以使用 `iloc` 結構。例如,要從 DataFrame 中選擇前 5 行: +用數字選取行 可以用 `iloc` 結構。例如,要選取前 5 行: ```python df.iloc[:5] ``` -**分組**通常用於獲得類似於 Excel 中*樞軸表*的結果。假設我們想計算每個 `LenB` 值對應的列 `A` 的平均值。我們可以按 `LenB` 將 DataFrame 分組,然後調用 `mean`: +群組 經常用來達成類似 Excel 中 樞紐分析表 功能。假設想算同一個 `LenB` 下欄 `A` 的平均值,可透過依 `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() }) \ .rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'}) ``` -這將生成以下表格: +結果為下表: | LenB | Count | Mean | | ---- | ----- | -------- | @@ -190,93 +191,98 @@ df.groupby(by='LenB') \ | 4 | 3 | 6.333333 | | 6 | 2 | 6.000000 | -### 獲取數據 -我們已經看到如何輕鬆地從 Python 對象構建 Series 和 DataFrames。然而,數據通常以文本文件或 Excel 表格的形式存在。幸運的是,Pandas 為我們提供了一種簡單的方法來從磁碟中載入數據。例如,讀取 CSV 文件就像這樣簡單: +### 取得資料 + + +我們已經看到從 Python 物件構建 Series 和 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 傳播 -我們將專注於的第一個問題是 COVID-19 的流行病傳播建模。為了做到這一點,我們將使用由 [約翰霍普金斯大學](https://jhu.edu/) 的 [系統科學與工程中心](https://systems.jhu.edu/) (CSSE) 提供的不同國家感染人數數據。數據集可在 [這個 GitHub 存儲庫](https://github.com/CSSEGISandData/COVID-19) 中找到。 +我們首先聚焦的問題是 COVID-19 疫情擴散的建模。為此,我們將使用約翰霍普金斯大學系統科學與工程中心([Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE))提供的不同國家感染人數資料。資料集存放於[此 GitHub 倉庫](https://github.com/CSSEGISandData/COVID-19)。 -由於我們想展示如何處理數據,我們邀請你打開 [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) 並從頭到尾閱讀。你也可以執行單元格,並完成我們在最後留下的一些挑戰。 +因為我們想演示如何處理數據,邀請你打開 [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) 從上到下閱讀。你也可以執行儲存格,並挑戰我們最後留給你的練習。 ![COVID 傳播](../../../../translated_images/zh-HK/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 的論文,並提供了元數據和摘要(其中約一半還提供了全文)。 +在這個挑戰中,我們將持續探討 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**: 我們不提供此存儲庫中的數據集副本。你可能需要先從 [Kaggle 的這個數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 中下載 [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 文件。可能需要在 Kaggle 註冊。你也可以從 [這裡](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html) 無需註冊下載數據集,但它將包括所有全文以及元數據文件。 +> 注意:本倉庫不提供資料集複本。你需要先從[此 Kaggle 資料集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv)下載 [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv)文件。可能需要註冊 Kaggle 帳戶。你也可不經註冊從[此處](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/zh-HK/covidtreat.b2ba59f57ca45fbc.webp) -## 處理圖片數據 +## 處理影像數據 -最近,已經開發出非常強大的 AI 模型,能夠理解圖片。有許多任務可以使用預訓練的神經網絡或雲服務解決。一些例子包括: +近來,有非常強大的 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) 模型來檢測一些特定的感興趣物體。 -* **人臉檢測**,包括年齡、性別和情感檢測。這可以通過 [Face API](https://azure.microsoft.com/services/cognitive-services/face/?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) 調用,因此可以輕鬆地集成到你的數據探索工作流程中。 +上述所有雲端服務皆可透過 [Python 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/) 中,我們探索 Instagram 照片,試圖了解什麼使人們更喜歡某張照片。我們首先使用 [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) 提取活動照片中人物的情感,試圖了解什麼使人們感到快樂。 +這裡有一些從影像資料來源探索數據的範例: +* 在部落格文章 [如何在不用寫程式的情況下學習資料科學](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) 中,我們探討 Instagram 照片,試圖了解什麼使人們對一張照片給予更多讚。過程中,我們先利用 [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 可能是一個好主意! +無論你已經擁有結構化或非結構化數據,使用 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 分鐘掌握 Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) 教程 +* [Pandas 視覺化文件](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html) **學習 Python** -* [用 Turtle Graphics 和分形圖以有趣的方式學習 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) 上的學習路徑 +* [用烏龜圖形與分形有趣學習 Python](https://github.com/shwars/pycourse) +* [Python 初學者入門](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) 微軟學習路徑(Microsoft Learn) ## 作業 -[對上述挑戰進行更詳細的數據研究](assignment.md) +[為上述挑戰做更詳細的數據研究](assignment.md) -## 致謝 +## 版權聲明 -這節課由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。 +本課程由 [Dmitry Soshnikov](http://soshnikov.com) ♥️ 撰寫 --- -**免責聲明**: -本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file + +**免責聲明**: +本文件由 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻譯而成。雖然我們致力於確保準確性,但請注意,機器自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議進行專業人工翻譯。我們不對因使用本翻譯而產生的任何誤解或誤釋承擔責任。 + \ No newline at end of file diff --git a/translations/zh-MO/.co-op-translator.json b/translations/zh-MO/.co-op-translator.json index 53b7639b..f24004af 100644 --- a/translations/zh-MO/.co-op-translator.json +++ b/translations/zh-MO/.co-op-translator.json @@ -96,8 +96,8 @@ "language_code": "zh-MO" }, "2-Working-With-Data/07-python/README.md": { - "original_hash": "7bfec050f4717dcc2dfd028aca9d21f3", - "translation_date": "2025-09-06T15:27:16+00:00", + "original_hash": "fb29e3e0be486fe8f15d50bdade79eb1", + "translation_date": "2026-07-17T17:35:37+00:00", "source_file": "2-Working-With-Data/07-python/README.md", "language_code": "zh-MO" }, diff --git a/translations/zh-MO/2-Working-With-Data/07-python/README.md b/translations/zh-MO/2-Working-With-Data/07-python/README.md index ecac273a..9e057f9f 100644 --- a/translations/zh-MO/2-Working-With-Data/07-python/README.md +++ b/translations/zh-MO/2-Working-With-Data/07-python/README.md @@ -1,61 +1,62 @@ -# 使用數據:Python 和 Pandas 庫 +# 處理數據:Python 與 Pandas 函式庫 -| ![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記筆記](../../sketchnotes/07-WorkWithPython.png) | +| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) | | :-------------------------------------------------------------------------------------------------------: | -| 使用 Python - _由 [@nitya](https://twitter.com/nitya) 繪製的速記筆記_ | +| 使用 Python - _由 [@nitya](https://twitter.com/nitya) 製作的 Sketchnote_ | -[![介紹影片](../../../../translated_images/zh-MO/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y) +[![介紹視頻](../../../../translated_images/zh-MO/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 更優的性能,是科學實驗的極佳工具。 -* **[Python](https://www.python.org/)** 是一種通用程式語言,因其簡單性常被認為是初學者的最佳選擇。Python 擁有許多額外的庫,可以幫助解決許多實際問題,例如從 ZIP 壓縮檔案中提取數據或將圖片轉換為灰度。除了數據科學,Python 也常用於網頁開發。 -* **[R](https://www.r-project.org/)** 是一個傳統工具箱,專為統計數據處理而設計。它擁有大量的庫(CRAN),使其成為數據處理的良好選擇。然而,R 不是通用程式語言,通常僅限於數據科學領域使用。 -* **[Julia](https://julialang.org/)** 是另一種專為數據科學設計的語言。它旨在提供比 Python 更好的性能,是科學實驗的理想工具。 +本課程將專注於使用 Python 進行簡單的數據處理。我們假設你對該語言已有基本了解。如果想更深入了解 Python,可以參考以下資源: -在本課程中,我們將重點使用 Python 進行簡單的數據處理。我們假設您已對該語言有基本的熟悉。如果您想深入了解 Python,可以參考以下資源: +* [用海龜圖形與分形趣味學 Python](https://github.com/shwars/pycourse) - 基於 GitHub 的 Python 編程快速入門課程 +* [你的第一步 Python 學習之路](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) — Microsoft Learn 平台學習路徑 -* [使用 Turtle Graphics 和 Fractals 以有趣的方式學習 Python](https://github.com/shwars/pycourse) - 基於 GitHub 的 Python 程式快速入門課程 -* [從 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) 上的學習路徑 +數據可以有多種形式。在本課程,我們會考慮三種數據形式—表格數據文字圖像。 -數據可以有多種形式。在本課程中,我們將考慮三種數據形式——**表格數據**、**文本**和**圖片**。 +我們會專注於數個數據處理示例,而非全面介紹所有相關函式庫。這讓你能抓住核心概念,並了解在需要時如何尋找解決方案。 + +> 最有用的建議。當你需要執行某項數據操作卻不知如何下手時,嘗試在網路上搜尋。 [Stackoverflow](https://stackoverflow.com/) 通常包含大量 Python 範例程式碼,適用於許多常見任務。 -我們將專注於一些數據處理的例子,而不是全面介紹所有相關庫。這樣可以讓您了解主要概念,並在需要時知道如何找到解決問題的方法。 -> **最有用的建議**:當您需要對數據執行某些操作但不知道如何進行時,嘗試在網路上搜索。[Stackoverflow](https://stackoverflow.com/) 通常包含許多針對常見任務的 Python 代碼範例。 ## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/12) -## 表格數據和 DataFrame +## 表格數據與資料框 (Dataframes) -當我們討論關聯式資料庫時,您已經接觸過表格數據。當您擁有大量數據並且它包含在許多不同的連結表中時,使用 SQL 來處理它是非常合理的。然而,在許多情況下,我們有一個數據表,並需要對該數據進行一些**理解**或**洞察**,例如分佈、值之間的相關性等。在數據科學中,經常需要對原始數據進行一些轉換,然後進行可視化。這兩個步驟都可以輕鬆地使用 Python 完成。 +對於關聯式數據庫的介紹中,你已經遇過表格數據。當數據量大且包含許多不同聯繫的表格時,使用 SQL 來處理數據絕對是合理的。然而,有很多情況下,我們有一張數據表,需要獲得關於這些數據的理解洞察,例如分布、數值間的相關性等等。在數據科學中,經常需要對原始數據做轉換,並接著以視覺化呈現。這兩個步驟都可以用 Python 輕易完成。 -在 Python 中,有兩個最有用的庫可以幫助您處理表格數據: -* **[Pandas](https://pandas.pydata.org/)** 允許您操作所謂的 **DataFrame**,它類似於關聯式表格。您可以擁有命名的列,並對行、列以及整個 DataFrame 執行不同的操作。 -* **[Numpy](https://numpy.org/)** 是一個用於處理 **張量**(即多維**陣列**)的庫。陣列具有相同的基礎類型值,比 DataFrame 更簡單,但提供了更多的數學操作,並且開銷更少。 +在 Python 中,有兩個非常有用的函式庫能幫助你處理表格數據: +* **[Pandas](https://pandas.pydata.org/)** 允許你操作所謂的 **Dataframes**,與關聯式資料表類似。你可以擁有命名的欄位,並對列、欄及整個 Dataframe 執行不同操作。 +* **[Numpy](https://numpy.org/)** 是一個用於處理 張量(多維 陣列)的函式庫。陣列的所有元素類型相同,結構比 Dataframe 簡單,但是擁有更多數學運算功能,且造成的運算負擔較輕。 -此外,還有幾個您應該了解的庫: -* **[Matplotlib](https://matplotlib.org/)** 是一個用於數據可視化和繪製圖表的庫 -* **[SciPy](https://www.scipy.org/)** 是一個包含一些額外科學函數的庫。我們在討論概率和統計時已經接觸過該庫 +你還應該知道另外幾個函式庫: +* **[Matplotlib](https://matplotlib.org/)** 是用於數據視覺化與繪製圖表的函式庫 +* **[SciPy](https://www.scipy.org/)** 提供一些額外的科學運算函式庫,我們在討論機率與統計時已經涉及過 -以下是您通常在 Python 程式開頭用來導入這些庫的代碼: +下面是一段你一般會在 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 ... # 你需要指定你需要的確切子套件 +``` -Pandas 圍繞幾個基本概念構建。 +Pandas 是圍繞幾個基本概念運作。 -### Series +### 序列 (Series) -**Series** 是一系列值,類似於列表或 numpy 陣列。主要區別在於 Series 還具有**索引**,當我們對 Series 進行操作(例如相加)時,索引會被考慮。索引可以像整數行號一樣簡單(當從列表或陣列創建 Series 時,默認使用此索引),也可以具有複雜結構,例如日期間隔。 +**Series** 是一組值的序列,類似於列表或 numpy 陣列。主要差別是 Series 具有索引值,當我們對 Series 進行運算(例如相加)時,索引會被考慮在內。索引可以是簡單的整數列號(在用列表或陣列建立 Series 時預設使用的索引),也可以是複雜結構,如日期區間。 -> **注意**:在附帶的筆記本 [`notebook.ipynb`](notebook.ipynb) 中有一些 Pandas 的入門代碼。我們僅在此概述一些例子,您可以查看完整的筆記本。 +> 注意:附帶的筆記本檔 [`notebook.ipynb`](notebook.ipynb) 中包含一些初學 Pandas 的程式碼範例。我們此處只概述部分範例,你當然可以查看完整筆記本。 -舉個例子:我們想分析我們冰淇淋店的銷售情況。讓我們生成一段時間內的銷售數字(每天售出的商品數量)Series: +以一個例子說明:我們想分析冰淇淋店的銷售情況。生成一段銷售數量(每天售出數量)的序列如下: ```python start_date = "Jan 1, 2020" @@ -67,45 +68,45 @@ items_sold.plot() ``` ![時間序列圖](../../../../translated_images/zh-MO/timeseries-1.80de678ab1cf727e.webp) -假設每週我們都會為朋友舉辦派對,並額外準備 10 盒冰淇淋。我們可以創建另一個以週為索引的 Series 來展示這一點: +假設我們每週都組織一次朋友聚會,會額外備 10 盒冰淇淋。我們可以建立另一個以週為索引的 Series 來示範此情況: ```python additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W")) ``` -當我們將兩個 Series 相加時,我們得到總數: +兩個 Series 相加,得到總銷售數量: ```python total_items = items_sold.add(additional_items,fill_value=0) total_items.plot() ``` ![時間序列圖](../../../../translated_images/zh-MO/timeseries-2.aae51d575c55181c.webp) -> **注意**:我們沒有使用簡單的語法 `total_items+additional_items`。如果使用該語法,我們會在結果 Series 中得到許多 `NaN`(*非數值*)值。這是因為在 `additional_items` Series 的某些索引點缺少值,並且將 `NaN` 與任何值相加都會得到 `NaN`。因此,我們需要在相加時指定 `fill_value` 參數。 +> 注意 我們沒有使用 `total_items+additional_items` 這種簡單語法。若如此做,結果 Series 中會產生大量 `NaN`(非數值)值。原因是 `additional_items` 中某些索引存在缺失,`NaN` 與任何數相加結果仍為 `NaN`。因此需要在相加時指定 `fill_value` 參數。 -使用時間序列,我們還可以使用不同的時間間隔對 Series 進行**重採樣**。例如,假設我們想計算每月的平均銷售量。我們可以使用以下代碼: +對時間序列數據,我們還可以根據不同時間間隔重採樣。例如,我們想計算每月平均銷售量,可用以下程式碼: ```python monthly = total_items.resample("1M").mean() ax = monthly.plot(kind='bar') ``` -![每月時間序列平均值](../../../../translated_images/zh-MO/timeseries-3.f3147cbc8c624881.webp) +![每月平均時間序列](../../../../translated_images/zh-MO/timeseries-3.f3147cbc8c624881.webp) ### DataFrame -DataFrame 本質上是具有相同索引的 Series 集合。我們可以將幾個 Series 組合成一個 DataFrame: +DataFrame 本質上是具有相同索引的多個 Series 集合。我們可以把幾個 Series 合在一起形成 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]) ``` -這將創建如下的水平表格: +此操作會生成類似下面的橫向表格: | | 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 | -我們還可以使用 Series 作為列,並通過字典指定列名: +也可以用 Series 作為欄位,並用字典指定欄名: ```python df = pd.DataFrame({ 'A' : a, 'B' : b }) ``` -這將生成如下表格: +這會產生如下表格: | | A | B | | --- | --- | ------ | @@ -119,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` 表示對 DataFrame 進行轉置操作,即變換列和行,而 `rename` 操作則允許我們重新命名欄位以符合之前的例子。 -以下是我們可以對 DataFrame 執行的一些最重要的操作: +以下是一些 DataFrame 上最重要的操作: -**列選擇**。我們可以通過編寫 `df['A']` 選擇單個列——此操作返回一個 Series。我們還可以通過編寫 `df[['B','A']]` 選擇列的子集到另一個 DataFrame——此操作返回另一個 DataFrame。 +欄位選擇。我們可以用 `df['A']` 選擇單一欄位,會回傳 Series。也可以選擇多欄位組成另一個 DataFrame,寫為 `df[['B','A']]`。 -**篩選**符合條件的行。例如,要僅保留列 `A` 大於 5 的行,我們可以編寫 `df[df['A']>5]`。 +過濾 特定條件的列。例如,保留欄 `A` 大於 5 的行,可寫 `df[df['A']>5]`。 -> **注意**:篩選的工作方式如下。表達式 `df['A']<5` 返回一個布林 Series,指示原始 Series `df['A']` 的每個元素是否為 `True` 或 `False`。當布林 Series 用作索引時,它返回 DataFrame 中的行子集。因此,不能使用任意的 Python 布林表達式,例如,編寫 `df[df['A']>5 and df['A']<7]` 是錯誤的。相反,您應該使用布林 Series 的特殊 `&` 操作,編寫 `df[(df['A']>5) & (df['A']<7)]`(*括號在這裡很重要*)。 +> 注意:過濾的運作方式是這樣的。`df['A']<5` 會回傳布林 Series,表示原來 `df['A']` 每個元素是否為真 (True) 或假 (False)。當布林序列作為索引時,會回傳 DataFrame 中該條件為真的行子集。因此不能寫任意 Python 布林表達式,例如 `df[df['A']>5 and df['A']<7]` 是錯誤的。要使用布林 Series 的特殊運算符 `&`,寫成 `df[(df['A']>5) & (df['A']<7)]` (括號很重要)。 -**創建新的可計算列**。我們可以通過使用直觀的表達式輕鬆為 DataFrame 創建新的可計算列: +創建可計算的新欄位。我們可以用直觀的表達式輕鬆在 DataFrame 中新增可以計算的欄位: ```python df['DivA'] = df['A']-df['A'].mean() -``` -此例子計算 A 與其平均值的偏差。實際上,我們正在計算一個 Series,然後將此 Series 分配給左側,創建另一列。因此,我們不能使用與 Series 不兼容的任何操作,例如,以下代碼是錯誤的: +``` +此範例計算 A 欄與其平均值的差異。實際執行的是先計算一個 Series,然後將它賦值給左邊,形成另一欄位。因此不能使用不適合於 Series 的任意運算。例如,下面程式碼就是錯誤的: ```python -# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi" -df['LenB'] = len(df['B']) # <- Wrong result -``` -後一個例子雖然語法正確,但給出了錯誤的結果,因為它將 Series `B` 的長度分配給列中的所有值,而不是分配給每個元素的長度。 +# 錯誤代碼 -> df['ADescr'] = "Low" 如果 df['A'] < 5 否則 "Hi" +df['LenB'] = len(df['B']) # <- 錯誤結果 +``` +儘管語法正確,但結果錯誤,因為它將 Series `B` 的長度賦予欄位所有值,而非我們預期中每個元素的長度。 -如果需要計算此類複雜表達式,我們可以使用 `apply` 函數。最後一個例子可以寫成如下: +若需計算複雜表達式,可以用 `apply` 函數。上述例子改寫如下: ```python df['LenB'] = df['B'].apply(lambda x : len(x)) -# or +# 或者 df['LenB'] = df['B'].apply(len) ``` -執行上述操作後,我們將得到以下 DataFrame: +執行上述操作後,我們將得到如下 DataFrame: | | A | B | DivA | LenB | | --- | --- | ------ | ---- | ---- | @@ -165,22 +166,22 @@ df['LenB'] = df['B'].apply(len) | 7 | 8 | very | 3.0 | 4 | | 8 | 9 | much | 4.0 | 4 | -**基於數字選擇行**可以使用 `iloc` 結構。例如,要選擇 DataFrame 的前 5 行: +根據數字選擇行 可以用 `iloc` 語法。例如,選擇前 5 行: ```python df.iloc[:5] ``` -**分組**通常用於獲得類似於 Excel 中*樞紐分析表*的結果。假設我們想計算列 `A` 的平均值,按 `LenB` 的每個數字分組。然後我們可以按 `LenB` 分組 DataFrame,並調用 `mean`: +分組 常用於取得類似 Excel 透視表結果。假設我們想計算每一個 `LenB` 數值下 `A` 欄的平均值。把 DataFrame 依 `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() }) \ .rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'}) ``` -這將生成以下表格: +會得到以下表: | LenB | Count | Mean | | ---- | ----- | -------- | @@ -190,93 +191,98 @@ df.groupby(by='LenB') \ | 4 | 3 | 6.333333 | | 6 | 2 | 6.000000 | -### 獲取數據 -我們已經看到如何輕鬆地從 Python 對象構建 Series 和 DataFrame。然而,數據通常以文本文件或 Excel 表格的形式存在。幸運的是,Pandas 提供了一種簡單的方法來從磁碟中載入數據。例如,讀取 CSV 文件就像這樣簡單: +### 取得數據 + + +我們已經見識到從 Python 物件構造 Series 和 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 傳播 -我們將專注於的第一個問題是 COVID-19 的流行病傳播建模。為了做到這一點,我們將使用由 [約翰霍普金斯大學](https://jhu.edu/) [系統科學與工程中心](https://systems.jhu.edu/) (CSSE) 提供的不同國家感染人數數據。數據集可在 [這個 GitHub 存儲庫](https://github.com/CSSEGISandData/COVID-19) 中找到。 +我們將聚焦的第一個問題是 COVID-19 疫情傳播的建模。為此,我們會使用約翰霍普金斯大學系統科學與工程中心(CSSE)提供的不同國家感染人數數據。數據集可於 [該 GitHub 儲存庫](https://github.com/CSSEGISandData/COVID-19) 獲得。 -由於我們想展示如何處理數據,我們邀請你打開 [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) 並從頭到尾閱讀。你也可以執行單元格,並完成我們在最後留下的一些挑戰。 +既然我們想展示如何處理數據,邀請你打開 [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb),從頭到尾閱讀。你也可以執行程式碼區塊,完成我們在結尾留給你的挑戰。 ![COVID 傳播](../../../../translated_images/zh-MO/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 相關論文 -在這個挑戰中,我們將繼續探討 COVID 疫情的主題,並專注於處理相關的科學論文。有一個 [CORD-19 數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge),其中包含超過 7000 篇(撰寫時)關於 COVID 的論文,並提供元數據和摘要(其中約一半還提供全文)。 +在此挑戰中,我們將繼續 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**: 我們不提供此存儲庫中的數據集副本。你可能需要先從 [Kaggle 上的這個數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 下載 [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 文件。可能需要在 Kaggle 註冊。你也可以從 [這裡](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html) 無需註冊下載數據集,但它將包括所有全文以及元數據文件。 +> 注意:此儲存庫不提供資料集副本。你可能需要先從 [Kaggle 的資料集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) 下載 [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 檔案。可能需註冊 Kaggle。你也可以不註冊,從[此處](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/zh-MO/covidtreat.b2ba59f57ca45fbc.webp) +![COVID 醫療治療](../../../../translated_images/zh-MO/covidtreat.b2ba59f57ca45fbc.webp) -## 處理圖像數據 +## 處理影像數據 -最近,已經開發出非常強大的 AI 模型,可以幫助我們理解圖像。有許多任務可以使用預訓練的神經網絡或雲服務解決。一些例子包括: +最近,強大的 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) 模型來檢測一些特定的感興趣物體。 -* **人臉檢測**,包括年齡、性別和情感檢測。這可以通過 [Face API](https://azure.microsoft.com/services/cognitive-services/face/?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) 調用,因此可以輕鬆地集成到你的數據探索工作流程中。 +這些雲端服務均可透過 [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) 呼叫,因而能輕鬆地融入你的資料探索工作流程。 -以下是一些探索圖像數據源的例子: -* 在博客文章 [如何在無需編碼的情況下學習數據科學](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) 中,我們探索 Instagram 照片,試圖了解什麼使人們更喜歡某張照片。我們首先使用 [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) 提取照片中人物的情感,試圖了解什麼使人們感到快樂。 +以下是一些從影像數據來源探索數據的例子: +* 在部落格文 [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) 中,我們探索 Instagram 照片,嘗試瞭解什麼因素會讓照片獲得更多讚。先利用 [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 可能是一個好主意! +無論你已有結構化或非結構化數據,都能利用 Python 執行與數據處理與理解相關的所有步驟。這應該是最具彈性的數據處理方法,這也是多數資料科學家將 Python 作為主要工具的原因。如果你真正嚴肅看待資料科學旅程,深入學習 Python 大概是個好主意! ## [課後測驗](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 分鐘學 Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) 教學 +* [Pandas 視覺化文件](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html) **學習 Python** -* [用 Turtle Graphics 和分形以有趣的方式學習 Python](https://github.com/shwars/pycourse) -* [在 Microsoft Learn 上開始你的 Python 第一步](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) +* [用烏龜繪圖和分形趣味學 Python](https://github.com/shwars/pycourse) +* [用 Python 起步](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Microsoft Learn 學習路徑 [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum) ## 作業 -[對上述挑戰進行更詳細的數據研究](assignment.md) +[對上述挑戰做更詳細的數據研究](assignment.md) -## 致謝 +## 作者名單 -這節課由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。 +本課程由 [Dmitry Soshnikov](http://soshnikov.com) 以 ♥️ 撰寫 --- -**免責聲明**: -本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。 \ No newline at end of file + +**免責聲明**: +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。 + \ No newline at end of file diff --git a/translations/zh-TW/.co-op-translator.json b/translations/zh-TW/.co-op-translator.json index 13910866..bb8494fe 100644 --- a/translations/zh-TW/.co-op-translator.json +++ b/translations/zh-TW/.co-op-translator.json @@ -96,8 +96,8 @@ "language_code": "zh-TW" }, "2-Working-With-Data/07-python/README.md": { - "original_hash": "7bfec050f4717dcc2dfd028aca9d21f3", - "translation_date": "2025-09-06T15:29:13+00:00", + "original_hash": "fb29e3e0be486fe8f15d50bdade79eb1", + "translation_date": "2026-07-17T17:38:43+00:00", "source_file": "2-Working-With-Data/07-python/README.md", "language_code": "zh-TW" }, diff --git a/translations/zh-TW/2-Working-With-Data/07-python/README.md b/translations/zh-TW/2-Working-With-Data/07-python/README.md index 01267bf8..29dcc18e 100644 --- a/translations/zh-TW/2-Working-With-Data/07-python/README.md +++ b/translations/zh-TW/2-Working-With-Data/07-python/README.md @@ -1,61 +1,63 @@ -# 使用數據:Python 和 Pandas 庫 +# 與資料共舞:Python 與 Pandas 函式庫 -| ![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記圖](../../sketchnotes/07-WorkWithPython.png) | +| ![ 速記筆記由 [(@sketchthedocs)](https://sketchthedocs.dev) 製作 ](../../sketchnotes/07-WorkWithPython.png) | | :-------------------------------------------------------------------------------------------------------: | -| 使用 Python - _由 [@nitya](https://twitter.com/nitya) 繪製的速記圖_ | +| 與 Python 共舞 - _速記筆記作者 [@nitya](https://twitter.com/nitya)_ | -[![介紹影片](../../../../translated_images/zh-TW/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y) +[![入門影片](../../../../translated_images/zh-TW/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 擁有更好的效能,是科學實驗的絕佳工具。 -* **[Python](https://www.python.org/)** 是一種通用程式語言,因其簡單性常被認為是初學者的最佳選擇之一。Python 擁有許多額外的庫,可以幫助解決許多實際問題,例如從 ZIP 壓縮檔案中提取數據,或將圖片轉換為灰度。除了數據科學,Python 也常用於網頁開發。 -* **[R](https://www.r-project.org/)** 是一個傳統工具箱,專為統計數據處理而設計。它擁有大量的庫資源(CRAN),使其成為數據處理的良好選擇。然而,R 不是通用程式語言,通常僅用於數據科學領域。 -* **[Julia](https://julialang.org/)** 是另一種專為數據科學設計的語言。它旨在提供比 Python 更好的性能,是科學實驗的理想工具。 +本課程將專注於使用 Python 進行簡單資料處理,假設你對該語言有基本熟悉。如果你想深入學習 Python,可以參考以下資源: -在本課程中,我們將重點使用 Python 進行簡單的數據處理。我們假設您已對該語言有基本的熟悉。如果您希望更深入地了解 Python,可以參考以下資源: +* [有趣學習 Python:烏龜圖形與分形](https://github.com/shwars/pycourse) – GitHub 上的 Python 快速入門課程 +* [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) 平台提供 -* [使用 Turtle Graphics 和 Fractals 以有趣的方式學習 Python](https://github.com/shwars/pycourse) - 基於 GitHub 的 Python 程式快速入門課程 -* [從 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) 上的學習路徑 +資料的型態多種多樣。這堂課將討論三種資料形式——表格式資料文字資料影像資料。 -數據可以有多種形式。在本課程中,我們將考慮三種數據形式:**表格數據**、**文本**和**圖片**。 +我們將著重幾個資料處理範例,而非完整介紹所有相關函式庫。這將幫助你理解其中的主要概念,並為你提供在需要時尋找解決方案的方法。 -我們將重點介紹一些數據處理的例子,而不是全面概述所有相關庫。這樣可以幫助您了解主要概念,並在需要時知道如何尋找解決方案。 +> 最實用的建議:當你想進行某項資料操作,但不知道怎麼做時,請嘗試在網路上搜尋。[Stackoverflow](https://stackoverflow.com/) 通常有許多 Python 範例程式碼,可以應用於各種典型任務。 -> **最有用的建議**:當您需要對數據執行某些操作但不知道如何進行時,嘗試在網路上搜索。[Stackoverflow](https://stackoverflow.com/) 通常包含許多針對常見任務的 Python 代碼範例。 -## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/12) -## 表格數據和 Dataframes +## [課前小考](https://ff-quizzes.netlify.app/en/ds/quiz/12) -當我們討論關係型資料庫時,您已經接觸過表格數據。當您擁有大量數據,並且它包含在許多不同的關聯表中時,使用 SQL 來處理它是非常合理的。然而,在許多情況下,我們擁有一個數據表,並需要對該數據進行一些**理解**或**洞察**,例如分佈、值之間的相關性等。在數據科學中,經常需要對原始數據進行一些轉換,然後進行可視化。這兩個步驟都可以使用 Python 輕鬆完成。 +## 表格式資料與 DataFrame -Python 中有兩個最有用的庫可以幫助您處理表格數據: -* **[Pandas](https://pandas.pydata.org/)** 允許您操作所謂的 **Dataframes**,它類似於關係型表格。您可以擁有命名的列,並對行、列以及整個 Dataframe 執行不同的操作。 -* **[Numpy](https://numpy.org/)** 是一個用於處理 **張量**(即多維**陣列**)的庫。陣列的值具有相同的基礎類型,它比 Dataframe 更簡單,但提供了更多的數學操作,並且開銷更少。 +在談到關聯式資料庫時,你已經接觸過表格式資料。當你有龐大資料且包含多個相互連結的資料表時,使用 SQL 來處理非常合理。然而,許多情況是我們擁有一張資料表,希望獲得該資料的認識洞察,例如分佈情況、數值間的相關性等。在資料科學中,許多情況需要對原始資料進行轉換,接著進行視覺化。這些任務都可以透過 Python 輕鬆完成。 -此外,還有幾個您應該了解的庫: -* **[Matplotlib](https://matplotlib.org/)** 是一個用於數據可視化和繪製圖表的庫 -* **[SciPy](https://www.scipy.org/)** 是一個包含一些額外科學函數的庫。我們在討論概率和統計時已經接觸過該庫 +Python 有兩個最常用的函式庫幫助你處理表格式資料: +* **[Pandas](https://pandas.pydata.org/)** 允許你操作稱為 **Dataframe** 的結構,它類似於關聯型資料表。你可以擁有具名稱的欄位,且能對列、欄及整個 Dataframe 執行各種操作。 +* **[Numpy](https://numpy.org/)** 是操作 張量(即多維度 陣列)的函式庫。陣列採用相同底層型態,結構較 Dataframe 簡單,但提供更多數學運算且開銷較小。 -以下是您通常在 Python 程式開頭用來導入這些庫的代碼: +另外還有幾個你應該知道的函式庫: +* **[Matplotlib](https://matplotlib.org/)** 是用於資料視覺化與繪圖的函式庫 +* **[SciPy](https://www.scipy.org/)** 包含額外的科學運算功能,之前談到機率與統計時已出現過它 + +下面是一段通常用作於 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 ... # 你需要指定你所需的確切子套件 ``` -Pandas 圍繞幾個基本概念進行。 +Pandas 依靠幾個基本概念構成。 ### Series -**Series** 是一系列值,類似於列表或 numpy 陣列。主要區別在於 Series 還具有**索引**,當我們對 Series 進行操作(例如相加)時,索引會被考慮在內。索引可以像整數行號一樣簡單(當從列表或陣列創建 Series 時,默認使用此索引),也可以具有複雜結構,例如日期區間。 +**Series** 是一系列數值序列,類似清單或 numpy 陣列。主要差異是 series 擁有 索引值,且當我們對 series 操作(如相加)時,會考慮索引。索引可簡單為整數列號(當從清單或陣列建立 series 時預設使用),也可以是複雜的結構,例如日期區間。 + +> 注意:附帶的筆記本 [`notebook.ipynb`](notebook.ipynb) 含有 Pandas 入門範例。我們此處只大略說明部分範例,你也非常歡迎閱讀完整筆記本。 -> **注意**:在附帶的筆記本 [`notebook.ipynb`](notebook.ipynb) 中有一些 Pandas 的入門代碼。我們在此僅概述一些例子,您可以查看完整的筆記本。 +以範例說明:假設我們想分析冰淇淋店的銷售量。先生成一段銷售數量(每日銷售件數)的 series: -舉例來說:我們想分析冰淇淋店的銷售情況。讓我們生成一段時間內的銷售數據(每天售出的商品數量): ```python start_date = "Jan 1, 2020" end_date = "Mar 31, 2020" @@ -66,45 +68,45 @@ items_sold.plot() ``` ![時間序列圖](../../../../translated_images/zh-TW/timeseries-1.80de678ab1cf727e.webp) -假設每週我們都會為朋友舉辦派對,並額外拿出 10 盒冰淇淋。我們可以創建另一個以週為索引的 Series 來展示這一點: +假設每週我們會為朋友聚會準備額外 10 包冰淇淋,並且以週為索引建立另一個 series,來表示額外銷售量: ```python additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W")) ``` -當我們將兩個 Series 相加時,我們得到總數: +將兩個 series 相加,得到總銷售數量: ```python total_items = items_sold.add(additional_items,fill_value=0) total_items.plot() ``` ![時間序列圖](../../../../translated_images/zh-TW/timeseries-2.aae51d575c55181c.webp) -> **注意**:我們並未使用簡單語法 `total_items+additional_items`。如果使用該語法,我們會在結果 Series 中得到許多 `NaN`(*非數值*)值。這是因為在 `additional_items` Series 的某些索引點缺少值,而將 `NaN` 與任何值相加會得到 `NaN`。因此,我們需要在相加時指定 `fill_value` 參數。 +> 注意:我們沒有直接使用簡單語法 `total_items+additional_items`。如果如此,我們會得到許多 `NaN`(非數值)在結果 series 中。原因是 `additional_items` series 的部分索引值不存在,任何數值與 `NaN` 相加均為 `NaN`。因此在相加時需指定 `fill_value` 參數。 -使用時間序列,我們還可以**重新取樣**不同的時間間隔。例如,假設我們想計算每月的平均銷售量。我們可以使用以下代碼: +對於時間序列,我們也能重新取樣成不同時間間隔。例如,要計算每月平均銷售量,可用以下代碼: ```python monthly = total_items.resample("1M").mean() ax = monthly.plot(kind='bar') ``` -![每月時間序列平均值](../../../../translated_images/zh-TW/timeseries-3.f3147cbc8c624881.webp) +![每月時間序列平均](../../../../translated_images/zh-TW/timeseries-3.f3147cbc8c624881.webp) ### DataFrame -DataFrame 本質上是具有相同索引的多個 Series 的集合。我們可以將幾個 Series 組合成一個 DataFrame: +DataFrame 實際上是多個相同索引的 series 集合。我們可以將數個 series 合成一個 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]) ``` -這將創建如下的水平表格: +這會建立如下橫向資料表: | | 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 | -我們也可以使用 Series 作為列,並通過字典指定列名: +也可以將 Series 作為欄位,並透過字典指定欄位名稱: ```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` 表示 DataFrame 轉置操作,即行列交換,`rename` 則可以重命名欄位符合前例。 -以下是一些我們可以對 DataFrame 執行的重要操作: +以下是我們可以對 DataFrame 執行的幾項重要操作: -**列選擇**。我們可以通過 `df['A']` 選擇單個列,此操作返回一個 Series。我們也可以通過 `df[['B','A']]` 選擇列的子集到另一個 DataFrame,此操作返回另一個 DataFrame。 +欄位選擇。可用 `df['A']` 選取單一欄,回傳一個 Series。也可用 `df[['B','A']]` 選取子欄位集合,回傳另一個 DataFrame。 -**根據條件篩選**特定行。例如,要僅保留列 `A` 大於 5 的行,我們可以寫 `df[df['A']>5]`。 +篩選特定列。比如,留下欄位 `A` 值大於 5 的列,可寫為 `df[df['A']>5]`。 -> **注意**:篩選的工作方式如下。表達式 `df['A']<5` 返回一個布林 Series,指示原始 Series `df['A']` 中每個元素的表達式是否為 `True` 或 `False`。當布林 Series 用作索引時,它返回 DataFrame 中的行子集。因此,不能使用任意 Python 布林表達式,例如,寫 `df[df['A']>5 and df['A']<7]` 是錯誤的。相反,您應使用布林 Series 的特殊 `&` 操作,寫 `df[(df['A']>5) & (df['A']<7)]`(*括號在此處很重要*)。 +> 注意:篩選是如此工作的。表達式 `df['A']<5` 回傳布林型 Series,表示 `df['A']` 中各元素是否符合條件。當用此布林型 Series 做為索引時,會回傳 DataFrame 的子集列。因此無法用一般 Python 布林表達式,例如 `df[df['A']>5 and df['A']<7]` 是錯誤的。應使用布林 Series 的特殊 `&` 運算,寫為 `df[(df['A']>5) & (df['A']<7)]`(括號很重要)。 -**創建新的可計算列**。我們可以通過直觀的表達式輕鬆為 DataFrame 創建新的可計算列: +建立新的可計算欄位。我們可以用直覺式表達式輕鬆建立新欄位: ```python df['DivA'] = df['A']-df['A'].mean() ``` -此例計算列 A 與其平均值的偏差。實際上,我們是在計算一個 Series,然後將該 Series 分配給左側,創建另一列。因此,我們不能使用與 Series 不兼容的操作,例如,以下代碼是錯誤的: +此範例計算欄位 A 相對其均值的偏差。實際上,我們先計算一個 Series,再將其指派給左邊的欄位,新增一欄。因此不可用與 Series 不相容的操作,否則會錯誤,例如下例: ```python -# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi" -df['LenB'] = len(df['B']) # <- Wrong result +# 錯誤的程式碼 -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi" +df['LenB'] = len(df['B']) # <- 錯誤的結果 ``` -後一個例子雖然語法正確,但結果錯誤,因為它將 Series `B` 的長度分配給列中的所有值,而不是分配給每個元素的長度。 +這個例子雖語法正確,但結果錯誤,因為它將欄位 B 的整體長度指派給所有列,而非意圖的各元素長度。 -如果需要計算此類複雜表達式,我們可以使用 `apply` 函數。上述例子可以寫成如下: +如果需計算較複雜的表達式,可用 `apply` 函數。之前例子也可改寫為: ```python df['LenB'] = df['B'].apply(lambda x : len(x)) -# or +# 或者 df['LenB'] = df['B'].apply(len) ``` -執行上述操作後,我們將得到以下 DataFrame: +執行上述操作後,我們得到以下 DataFrame: | | A | B | DivA | LenB | | --- | --- | ------ | ---- | ---- | @@ -164,22 +166,22 @@ df['LenB'] = df['B'].apply(len) | 7 | 8 | very | 3.0 | 4 | | 8 | 9 | much | 4.0 | 4 | -**根據行號選擇行**可以使用 `iloc` 結構。例如,要選擇 DataFrame 的前 5 行: +依照列號選取列可用 `iloc`。例如,選取前 5 列: ```python df.iloc[:5] ``` -**分組**通常用於獲得類似於 Excel 中*樞紐表*的結果。假設我們想計算列 `A` 的平均值,按 `LenB` 的數字分組。我們可以按 `LenB` 分組 DataFrame,然後調用 `mean`: +分組常用於得到類似 Excel 中 樞紐分析表 的效果。假設想計算欄位 `A` 於每個 `LenB` 群組的平均值,可對 DataFrame 依 `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() }) \ .rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'}) ``` -這將生成以下表格: +結果會得到這張表: | LenB | Count | Mean | | ---- | ----- | -------- | @@ -189,93 +191,98 @@ df.groupby(by='LenB') \ | 4 | 3 | 6.333333 | | 6 | 2 | 6.000000 | -### 獲取數據 -我們已經看到如何輕鬆地從 Python 對象構建 Series 和 DataFrame。然而,數據通常以文本文件或 Excel 表格的形式出現。幸運的是,Pandas 為我們提供了一種簡單的方法來從磁碟中加載數據。例如,讀取 CSV 文件就像這樣簡單: +### 獲取資料 + + +我們已經看到了從 Python 物件構造 Series 和 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 傳播 -我們將專注於的第一個問題是建模 COVID-19 的流行病傳播。為此,我們將使用由 [約翰霍普金斯大學](https://jhu.edu/) 的 [系統科學與工程中心](https://systems.jhu.edu/) (CSSE) 提供的不同國家感染人數數據。數據集可在 [這個 GitHub 儲存庫](https://github.com/CSSEGISandData/COVID-19) 中獲取。 +我們首個關注的問題是模擬 COVID-19 流行病的傳播。為此,我們將使用由[約翰霍普金斯大學](https://jhu.edu/)的[系統科學與工程中心](https://systems.jhu.edu/)(CSSE)提供的不同國家感染者人數資料。資料集可在[這個 GitHub 倉庫](https://github.com/CSSEGISandData/COVID-19)取得。 -由於我們想展示如何處理數據,我們邀請你打開 [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) 並從頭到尾閱讀它。你還可以執行單元格,並完成我們在最後為你留下的一些挑戰。 +因為我們想示範如何處理資料,邀請你打開 [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) 並從頭到尾閱讀。你也可以執行其中的程式碼區塊,並完成我們在最後留給你的挑戰。 ![COVID 傳播](../../../../translated_images/zh-TW/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 論文 -在這個挑戰中,我們將繼續關注 COVID 大流行的主題,並專注於處理該主題的科學論文。有一個 [CORD-19 數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge),其中包含超過 7000 篇(撰寫本文時)關於 COVID 的論文,並附有元數據和摘要(其中約一半還提供全文)。 +在這個挑戰中,我們將繼續探討 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**: 我們不提供該數據集的副本作為此儲存庫的一部分。你可能需要先從 [Kaggle 上的這個數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 下載 [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 文件。可能需要在 Kaggle 上註冊。你也可以從 [這裡](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html) 無需註冊下載數據集,但它將包括所有全文以及元數據文件。 +> 注意:本倉庫中並未提供資料集副本。你可能需要先從 [Kaggle 的此資料集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 下載 [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 檔案。註冊 Kaggle 可能是必要的。你也可以不需註冊[從這裡下載](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/zh-TW/covidtreat.b2ba59f57ca45fbc.webp) +![Covid 醫療治療](../../../../translated_images/zh-TW/covidtreat.b2ba59f57ca45fbc.webp) -## 處理圖像數據 +## 處理影像資料 -最近,已經開發出非常強大的 AI 模型,能夠理解圖像。有許多任務可以使用預訓練的神經網絡或雲服務來解決。一些例子包括: +近來開發出非常強大的 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) 模型來檢測一些特定的感興趣物體。 -* **人臉檢測**,包括年齡、性別和情感檢測。這可以通過 [Face API](https://azure.microsoft.com/services/cognitive-services/face/?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 SDK](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?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) 呼叫,因此能輕鬆整合入你的資料探索工作流程。 -以下是一些探索圖像數據源的例子: -* 在博客文章 [如何在不編碼的情況下學習數據科學](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) 中,我們探索了 Instagram 照片,試圖了解什麼使人們對某張照片點贊更多。我們首先使用 [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) 提取活動照片中人們的情感,試圖了解什麼讓人們感到快樂。 +這裡是一些來自影像資料源探索資料的範例: +* 在部落格文章 [如何在不寫程式下學習資料科學](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) 中,我們探索 Instagram 照片,嘗試理解什麼因素使人們給照片按讚更多。我們先使用 [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 可能是一個好主意! +無論你已有結構化或非結構化資料,使用 Python 你都可以執行所有與資料處理與理解相關的步驟。它可能是最靈活的資料處理方式,這也是大多數資料科學家將 Python 當作主要工具的原因。如果你對資料科學之路抱持認真態度,深入學習 Python 很可能是個好主意! ## [課後測驗](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 分鐘入門 Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) 教程 +* [Pandas 視覺化文件](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html) **學習 Python** -* [用 Turtle Graphics 和分形圖形以有趣的方式學習 Python](https://github.com/shwars/pycourse) -* [在 Microsoft Learn 上學習 Python 的第一步](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) +* [用海龜繪圖和分形有趣學 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) ## 作業 -[對上述挑戰進行更詳細的數據研究](assignment.md) +[針對上述挑戰進行更細緻的資料研究](assignment.md) ## 致謝 -這節課由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。 +本課程由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 創作 --- -**免責聲明**: -本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file + +**免責聲明**: +此文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們努力追求準確性,但請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於關鍵資訊,建議採用專業人工翻譯。我們不對因使用此翻譯所產生的任何誤解或誤譯承擔責任。 + \ No newline at end of file