chore(i18n): sync translations with latest source changes (chunk 9/9, 82 changes)

update-translations
localizeflow[bot] 5 days ago
parent 5de935fc99
commit c6eb10cc76

File diff suppressed because one or more lines are too long

@ -0,0 +1,20 @@
# 資料科學入門
![數據運作](../../../translated_images/zh-TW/data.48e22bb7617d8d92188afbc4c48effb920ba79f5cebdc0652cd9f34bbbd90c18.jpg)
> 照片由 <a href="https://unsplash.com/@dawson2406?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Stephen Dawson</a> 提供,來自 <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
在這些課程中,您將了解資料科學的定義,並學習作為資料科學家必須考慮的倫理問題。您還將學習資料的定義,並簡單了解統計與機率,這些是資料科學的核心學術領域。
### 主題
1. [資料科學的定義](01-defining-data-science/README.md)
2. [資料科學倫理](02-ethics/README.md)
3. [資料的定義](03-defining-data/README.md)
4. [統計與機率入門](04-stats-and-probability/README.md)
### 致謝
這些課程由 [Nitya Narasimhan](https://twitter.com/nitya) 和 [Dmitry Soshnikov](https://twitter.com/shwars) 用 ❤️ 編寫。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。

@ -0,0 +1,190 @@
# 使用資料:關聯式資料庫
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/05-RelationalData.png)|
|:---:|
| 使用資料:關聯式資料庫 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
你很可能過去曾使用過試算表來儲存資訊。你有一組列和欄,列包含資訊(或資料),欄描述該資訊(有時稱為中繼資料)。關聯式資料庫建立在表格中欄與列的核心原則上,允許你將資訊分散在多個表格中。這讓你能處理更複雜的資料,避免重複,並在探索資料時擁有彈性。讓我們來探討關聯式資料庫的概念。
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/8)
## 一切從表格開始
關聯式資料庫的核心是表格。就像試算表一樣,表格是欄與列的集合。列包含我們想處理的資料或資訊,例如城市名稱或降雨量。欄描述它們所儲存的資料。
讓我們開始探索,建立一個用來儲存城市資訊的表格。我們可能會從城市名稱和國家開始。你可以將它儲存在表格中,如下所示:
| City | Country |
| -------- | ------------- |
| Tokyo | Japan |
| Atlanta | United States |
| Auckland | New Zealand |
注意欄位名稱 **city**、**country** 和 **population** 描述所儲存的資料,每一列包含一個城市的資訊。
## 單一表格方法的缺點
你可能覺得上面的表格相當熟悉。讓我們開始為我們逐漸擴充的資料庫新增一些資料——年度降雨量以毫米為單位。我們將專注於2018、2019和2020年。如果我們要為東京新增資料可能會長這樣
| City | Country | Year | Amount |
| ----- | ------- | ---- | ------ |
| Tokyo | Japan | 2020 | 1690 |
| Tokyo | Japan | 2019 | 1874 |
| Tokyo | Japan | 2018 | 1445 |
你注意到我們的表格有什麼嗎?你可能會注意到我們不斷重複城市的名稱和國家。這可能會佔用相當多的儲存空間,而且多份複本大多是不必要的。畢竟,東京只有一個我們感興趣的名稱。
好,讓我們試試別的方法。為每一年新增欄位:
| City | Country | 2018 | 2019 | 2020 |
| -------- | ------------- | ---- | ---- | ---- |
| Tokyo | Japan | 1445 | 1874 | 1690 |
| Atlanta | United States | 1779 | 1111 | 1683 |
| Auckland | New Zealand | 1386 | 942 | 1176 |
雖然這避免了列的重複,但也帶來其他挑戰。每當有新的一年時,我們需要修改表格結構。此外,隨著資料增長,將年份作為欄位會讓檢索和計算變得更困難。
這就是為什麼我們需要多個表格和關聯。透過拆分資料,我們可以避免重複,並在處理資料時擁有更多彈性。
## 關聯的概念
讓我們回到資料,決定如何拆分。我們知道想要儲存城市的名稱和國家,所以這可能最適合放在一個表格中。
| City | Country |
| -------- | ------------- |
| Tokyo | Japan |
| Atlanta | United States |
| Auckland | New Zealand |
但在建立下一個表格之前我們需要找出如何參考每個城市。我們需要某種識別碼、ID或在技術資料庫術語中主鍵。主鍵是用來識別表格中特定列的值。雖然這可以基於值本身例如使用城市名稱但幾乎總是應該是數字或其他識別碼。我們不希望ID改變因為那會破壞關聯。你會發現大多數情況下主鍵或ID會是自動產生的數字。
> ✅ 主鍵常縮寫為 PK
### cities
| city_id | City | Country |
| ------- | -------- | ------------- |
| 1 | Tokyo | Japan |
| 2 | Atlanta | United States |
| 3 | Auckland | New Zealand |
> ✅ 你會注意到在本課程中我們交替使用「id」和「主鍵」這兩個詞。這些概念也適用於你稍後會探索的 DataFrame。DataFrame 不使用「主鍵」這個術語,但你會發現它們的行為非常相似。
建立了城市表格後讓我們儲存降雨量。與其重複城市的完整資訊我們可以使用ID。我們也應該確保新建立的表格也有一個 *id* 欄位因為所有表格都應該有id或主鍵。
### rainfall
| rainfall_id | city_id | Year | Amount |
| ----------- | ------- | ---- | ------ |
| 1 | 1 | 2018 | 1445 |
| 2 | 1 | 2019 | 1874 |
| 3 | 1 | 2020 | 1690 |
| 4 | 2 | 2018 | 1779 |
| 5 | 2 | 2019 | 1111 |
| 6 | 2 | 2020 | 1683 |
| 7 | 3 | 2018 | 1386 |
| 8 | 3 | 2019 | 942 |
| 9 | 3 | 2020 | 1176 |
注意新建立的 **rainfall** 表格中的 **city_id** 欄位。此欄位包含參考 **cities** 表格中ID的值。在技術關聯資料術語中這稱為 **外鍵**;它是另一個表格的主鍵。你可以把它當作參考或指標。**city_id** 1 參考東京。
> [!NOTE]
> 外鍵常縮寫為 FK
## 取回資料
將資料分成兩個表格後,你可能想知道如何取回它。如果我們使用像 MySQL、SQL Server 或 Oracle 這樣的關聯式資料庫我們可以使用一種稱為結構化查詢語言Structured Query LanguageSQL的語言。SQL有時讀作 sequel是用來在關聯式資料庫中取回和修改資料的標準語言。
要取回資料,你使用 `SELECT` 指令。基本上,你**選擇**想看的欄位,**從**它們所在的表格中取出。如果你只想顯示城市名稱,可以使用以下語法:
```sql
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
```
`SELECT` 是列出欄位的地方,`FROM` 是列出表格的地方。
> [!NOTE]
> SQL 語法不區分大小寫,意即 `select``SELECT` 意思相同。但根據你使用的資料庫類型,欄位和表格名稱可能區分大小寫。因此,最佳實務是將程式碼中的所有東西都視為區分大小寫。撰寫 SQL 查詢時,常見慣例是將關鍵字全部大寫。
上述查詢會顯示所有城市。假設我們只想顯示紐西蘭的城市我們需要某種過濾條件。SQL 的關鍵字是 `WHERE`,意即「在某條件為真時」。
```sql
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
```
## 資料連接
到目前為止,我們只從單一表格取回資料。現在我們想將 **cities****rainfall** 的資料合併。這是透過*連接*完成的。你會在兩個表格之間建立一個接縫,並將每個表格中某欄的值配對。
在我們的範例中,我們會將 **rainfall** 中的 **city_id** 欄位與 **cities** 中的 **city_id** 欄位配對。這會將降雨量與其對應的城市匹配。這種連接稱為*內部*連接inner join意即如果有任何列在另一個表格中找不到匹配就不會顯示。在我們的例子中每個城市都有降雨量資料所以全部都會顯示。
讓我們取回2019年所有城市的降雨量。
我們將分步驟進行。第一步是透過指定接縫的欄位——前面提到的 **city_id**,將資料連接起來。
```sql
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
```
我們已標示出想要的兩個欄位,以及我們想用 **city_id** 連接表格。現在我們可以加入 `WHERE` 陳述式過濾出2019年。
```sql
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942
```
## 總結
關聯式資料庫的核心是將資訊分散在多個表格中,然後再將它們合併以供顯示和分析。這提供了高度的彈性來執行計算和其他資料操作。你已經看到關聯式資料庫的核心概念,以及如何在兩個表格間執行連接。
## 🚀 挑戰
網路上有許多關聯式資料庫可用。你可以利用上述學到的技能來探索資料。
## 課後測驗
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/9)
## 複習與自學
在 [Microsoft Learn](https://docs.microsoft.com/learn?WT.mc_id=academic-77958-bethanycheum) 上有多個資源,供你繼續探索 SQL 和關聯式資料庫概念
- [描述關聯資料的概念](https://docs.microsoft.com//learn/modules/describe-concepts-of-relational-data?WT.mc_id=academic-77958-bethanycheum)
- [開始使用 Transact-SQL 查詢](https://docs.microsoft.com//learn/paths/get-started-querying-with-transact-sql?WT.mc_id=academic-77958-bethanycheum)Transact-SQL 是 SQL 的一個版本)
- [Microsoft Learn 上的 SQL 內容](https://docs.microsoft.com/learn/browse/?products=azure-sql-database%2Csql-server&expanded=azure&WT.mc_id=academic-77958-bethanycheum)
## 作業
[顯示機場資料](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免責聲明**
本文件係使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於重要資訊,建議採用專業人工翻譯。我們不對因使用本翻譯而產生的任何誤解或誤譯負責。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -0,0 +1,65 @@
# 顯示機場數據
您已獲得一個基於 [SQLite](https://sqlite.org/index.html) 的 [資料庫](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db),其中包含有關機場的資訊。以下是該資料庫的結構。您將使用 [SQLite 擴展](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum) 在 [Visual Studio Code](https://code.visualstudio.com?WT.mc_id=academic-77958-bethanycheum) 中顯示不同城市的機場資訊。
## 指示
要開始此任務,您需要完成幾個步驟。您需要安裝一些工具並下載範例資料庫。
### 設置您的系統
您可以使用 Visual Studio Code 和 SQLite 擴展來與資料庫互動。
1. 前往 [code.visualstudio.com](https://code.visualstudio.com?WT.mc_id=academic-77958-bethanycheum),按照指示安裝 Visual Studio Code
1. 按照 Marketplace 頁面的指示安裝 [SQLite 擴展](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum)
### 下載並打開資料庫
接下來,您需要下載並打開資料庫。
1. 從 [GitHub 下載資料庫檔案](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db),並將其保存到一個目錄中
1. 打開 Visual Studio Code
1. 在 SQLite 擴展中打開資料庫,按下 **Ctl-Shift-P**(或在 Mac 上按 **Cmd-Shift-P**),然後輸入 `SQLite: Open database`
1. 選擇 **Choose database from file**,並打開您之前下載的 **airports.db** 檔案
1. 打開資料庫後(螢幕上不會顯示更新),通過按下 **Ctl-Shift-P**(或在 Mac 上按 **Cmd-Shift-P**),輸入 `SQLite: New query` 來創建一個新的查詢窗口
打開後,新的查詢窗口可用於對資料庫執行 SQL 語句。您可以使用命令 **Ctl-Shift-Q**(或在 Mac 上按 **Cmd-Shift-Q**)來執行資料庫查詢。
> [!NOTE]
> 有關 SQLite 擴展的更多資訊,您可以參考 [文檔](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum)
## 資料庫結構
資料庫的結構是其表格設計和結構。**airports** 資料庫有兩個表格,`cities` 包含英國和愛爾蘭的城市列表,`airports` 包含所有機場的列表。由於某些城市可能有多個機場,因此創建了兩個表格來存儲資訊。在此練習中,您將使用連接來顯示不同城市的資訊。
| Cities |
| ---------------- |
| id (PK, integer) |
| city (text) |
| country (text) |
| Airports |
| -------------------------------- |
| id (PK, integer) |
| name (text) |
| code (text) |
| city_id (FK to id in **Cities**) |
## 任務
創建查詢以返回以下資訊:
1. `Cities` 表中的所有城市名稱
1. `Cities` 表中所有位於愛爾蘭的城市
1. 所有機場名稱及其所在城市和國家
1. 所有位於英國倫敦的機場
## 評分標準
| 優秀 | 合格 | 需要改進 |
| --------- | --------- | ------------- |
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,149 @@
# 使用資料:非關聯式資料
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記筆記](../../sketchnotes/06-NoSQL.png)|
|:---:|
|使用 NoSQL 資料 - _由 [@nitya](https://twitter.com/nitya) 繪製的速記筆記_ |
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/10)
資料並不限於關聯式資料庫。本課程聚焦於非關聯式資料,並將涵蓋試算表和 NoSQL 的基礎知識。
## 試算表
試算表是一種流行的資料存儲和探索方式,因為它需要較少的設置工作即可開始使用。在本課程中,您將學習試算表的基本組成部分,以及公式和函數。範例將以 Microsoft Excel 為例,但大多數部分和主題在其他試算表軟體中名稱和步驟相似。
![一個空的 Microsoft Excel 工作簿,包含兩個工作表](../../../../2-Working-With-Data/06-non-relational/images/parts-of-spreadsheet.png)
試算表是一個檔案,可以在電腦、設備或基於雲的檔案系統中訪問。軟體本身可能是基於瀏覽器的,或者需要安裝在電腦上或下載為應用程式。在 Excel 中,這些檔案也被定義為 **工作簿**,本課程將使用這個術語。
工作簿包含一個或多個 **工作表**,每個工作表都以標籤命名。在工作表中有稱為 **儲存格** 的矩形,這些儲存格包含實際的資料。儲存格是行和列的交叉點,其中列以字母標記,行以數字標記。一些試算表會在前幾行中包含標題,以描述儲存格中的資料。
了解了 Excel 工作簿的這些基本元素後,我們將使用 [Microsoft Templates](https://templates.office.com/) 中的一個專注於庫存的範例來進一步了解試算表的其他部分。
### 管理庫存
名為 "InventoryExample" 的試算表檔案是一個格式化的庫存項目試算表,包含三個工作表,標籤分別為 "Inventory List"、"Inventory Pick List" 和 "Bin Lookup"。Inventory List 工作表的第 4 行是標題,描述了標題列中每個儲存格的值。
![Microsoft Excel 中庫存清單範例中高亮顯示的公式](../../../../2-Working-With-Data/06-non-relational/images/formula-excel.png)
有些情況下,儲存格的值依賴於其他儲存格的值來生成。在庫存清單試算表中,我們追蹤庫存中每個項目的成本,但如果我們需要知道整個庫存的價值呢?[**公式**](https://support.microsoft.com/en-us/office/overview-of-formulas-34519a4e-1e8d-4f4b-84d4-d642c4f63263) 用於對儲存格資料執行操作,在此範例中用於計算庫存的成本。此試算表在 Inventory Value 列中使用公式,通過將 QTY 標題下的數量與 COST 標題下的成本相乘來計算每個項目的價值。雙擊或高亮顯示儲存格將顯示公式。您會注意到公式以等號開頭,後面是計算或操作。
![Microsoft Excel 中庫存清單範例中高亮顯示的函數](../../../../2-Working-With-Data/06-non-relational/images/function-excel.png)
我們可以使用另一個公式將所有 Inventory Value 的值相加以獲得其總價值。這可以通過逐一相加每個儲存格來計算但這可能是一項繁瑣的任務。Excel 提供了 [**函數**](https://support.microsoft.com/en-us/office/sum-function-043e1c7d-7726-4e80-8f32-07b23e057f89),即預定義的公式,用於對儲存格值進行計算。函數需要參數,即執行這些計算所需的值。當函數需要多個參數時,必須按特定順序列出,否則函數可能無法計算正確的值。本範例使用 SUM 函數,並使用 Inventory Value 的值作為參數來生成列於第 3 行、第 B 列(也稱為 B3的總值。
## NoSQL
NoSQL 是一個涵蓋不同方式存儲非關聯式資料的術語,可以解釋為 "非 SQL"、"非關聯式" 或 "不僅僅是 SQL"。這類型的資料庫系統可以分為四種類型。
![鍵值資料存儲的圖形表示,顯示 4 個唯一的數字鍵與 4 個不同的值相關聯](../../../../2-Working-With-Data/06-non-relational/images/kv-db.png)
> 來源:[Michał Białecki Blog](https://www.michalbialecki.com/2018/03/18/azure-cosmos-db-key-value-database-cloud/)
[鍵值](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#keyvalue-data-stores) 資料庫將唯一鍵(唯一識別符)與值配對。這些配對使用 [哈希表](https://www.hackerearth.com/practice/data-structures/hash-tables/basics-of-hash-tables/tutorial/) 和適當的哈希函數存儲。
![圖形資料存儲的圖形表示,顯示人、他們的興趣和位置之間的關係](../../../../2-Working-With-Data/06-non-relational/images/graph-db.png)
> 來源:[Microsoft](https://docs.microsoft.com/en-us/azure/cosmos-db/graph/graph-introduction#graph-database-by-example)
[圖形](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#graph-data-stores) 資料庫描述資料中的關係,並表示為節點和邊的集合。節點表示實體,即現實世界中存在的事物,例如學生或銀行對帳單。邊表示兩個實體之間的關係。每個節點和邊都有屬性,提供有關每個節點和邊的附加資訊。
![列式資料存儲的圖形表示,顯示一個客戶資料庫,包含名為 Identity 和 Contact Info 的兩個列族](../../../../2-Working-With-Data/06-non-relational/images/columnar-db.png)
[列式](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#columnar-data-stores) 資料存儲將資料組織為列和行,類似於關聯式資料結構,但每列被分為稱為列族的組,其中一列下的所有資料是相關的,可以作為一個單元檢索和更改。
### 使用 Azure Cosmos DB 的文件資料存儲
[文件](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#document-data-stores) 資料存儲基於鍵值資料存儲的概念,由一系列字段和物件組成。本節將使用 Cosmos DB 模擬器探索文件資料庫。
Cosmos DB 資料庫符合 "不僅僅是 SQL" 的定義,其中 Cosmos DB 的文件資料庫依賴 SQL 來查詢資料。[前一課程](../05-relational-databases/README.md) 涵蓋了 SQL 的基礎知識,我們將能夠在此處將一些相同的查詢應用於文件資料庫。我們將使用 Cosmos DB 模擬器,該模擬器允許我們在電腦上本地創建和探索文件資料庫。閱讀更多有關模擬器的資訊 [此處](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21)。
文件是字段和物件值的集合,其中字段描述物件值代表的內容。以下是一個文件範例。
```json
{
"firstname": "Eva",
"age": 44,
"id": "8c74a315-aebf-4a16-bb38-2430a9896ce5",
"_rid": "bHwDAPQz8s0BAAAAAAAAAA==",
"_self": "dbs/bHwDAA==/colls/bHwDAPQz8s0=/docs/bHwDAPQz8s0BAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-9f95-010a691e01d7\"",
"_attachments": "attachments/",
"_ts": 1630544034
}
```
此文件中的關鍵字段包括:`firstname`、`id` 和 `age`。其餘帶有下劃線的字段是由 Cosmos DB 生成的。
#### 使用 Cosmos DB 模擬器探索資料
您可以 [在此處下載並安裝 Windows 版模擬器](https://aka.ms/cosmosdb-emulator)。請參考 [此文件](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21#run-on-linux-macos) 了解如何在 macOS 和 Linux 上運行模擬器的選項。
模擬器會啟動一個瀏覽器窗口,其中的 Explorer 視圖允許您探索文件。
![Cosmos DB 模擬器的 Explorer 視圖](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-explorer.png)
如果您正在跟隨操作,請點擊 "Start with Sample" 以生成名為 SampleDB 的示例資料庫。如果通過點擊箭頭展開 SampleDB您會找到一個名為 `Persons` 的容器,容器包含一系列項目,即容器中的文件。您可以探索 `Items` 下的四個單獨文件。
![在 Cosmos DB 模擬器中探索示例資料](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons.png)
#### 使用 Cosmos DB 模擬器查詢文件資料
我們還可以通過點擊 "New SQL Query" 按鈕(第二個按鈕)來查詢示例資料。
`SELECT * FROM c` 返回容器中的所有文件。讓我們添加一個 where 子句,查找年齡小於 40 的人。
`SELECT * FROM c where c.age < 40`
![在 Cosmos DB 模擬器中運行 SELECT 查詢,查找年齡字段值小於 40 的文件](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons-query.png)
查詢返回了兩個文件,注意每個文件的年齡值都小於 40。
#### JSON 和文件
如果您熟悉 JavaScript Object Notation (JSON),您會注意到文件看起來與 JSON 類似。此目錄中有一個 `PersonsData.json` 文件,包含更多資料,您可以通過模擬器中的 `Upload Item` 按鈕上傳到 Persons 容器。
在大多數情況下,返回 JSON 資料的 API 可以直接轉移並存儲在文件資料庫中。以下是另一個文件,它表示從 Microsoft Twitter 帳戶檢索的推文,該推文使用 Twitter API 獲取,然後插入到 Cosmos DB 中。
```json
{
"created_at": "2021-08-31T19:03:01.000Z",
"id": "1432780985872142341",
"text": "Blank slate. Like this tweet if youve ever painted in Microsoft Paint before. https://t.co/cFeEs8eOPK",
"_rid": "dhAmAIUsA4oHAAAAAAAAAA==",
"_self": "dbs/dhAmAA==/colls/dhAmAIUsA4o=/docs/dhAmAIUsA4oHAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-9f84-a0958ad901d7\"",
"_attachments": "attachments/",
"_ts": 1630537000
```
此文件中的關鍵字段包括:`created_at`、`id` 和 `text`
## 🚀 挑戰
目錄中有一個 `TwitterData.json` 文件,您可以上傳到 SampleDB 資料庫。建議您將其添加到單獨的容器中。這可以通過以下步驟完成:
1. 點擊右上角的 "New Container" 按鈕
1. 選擇現有資料庫 (SampleDB),為容器創建一個容器 ID
1. 將分區鍵設置為 `/id`
1. 點擊 OK您可以忽略此視圖中的其他資訊因為這是一個小型資料集運行在您的本地機器上
1. 打開您的新容器,並使用 `Upload Item` 按鈕上傳 Twitter Data 文件
嘗試運行一些 SELECT 查詢,查找 text 字段中包含 Microsoft 的文件。提示:嘗試使用 [LIKE 關鍵字](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/sql-query-keywords#using-like-with-the--wildcard-character)。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/11)
## 回顧與自學
- 試算表中還有一些額外的格式和功能本課程未涵蓋。如果您有興趣了解更多Microsoft 提供了 [大量的 Excel 文件和視頻資源](https://support.microsoft.com/excel)。
- 此架構文件詳細介紹了不同類型非關聯式資料的特徵:[非關聯式資料和 NoSQL](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data)。
- Cosmos DB 是一個基於雲的非關聯式資料庫,也可以存儲本課程中提到的不同 NoSQL 類型。了解更多這些類型的資訊,請參考 [Cosmos DB Microsoft Learn 模組](https://docs.microsoft.com/en-us/learn/paths/work-with-nosql-data-in-azure-cosmos-db/)。
## 作業
[Soda Profits](assignment.md)
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,22 @@
# 蘇打水利潤
## 說明
[Coca Cola Co 試算表](../../../../2-Working-With-Data/06-non-relational/CocaColaCo.xlsx) 缺少了一些計算。您的任務是:
1. 計算 2015、2016、2017 和 2018 財年的毛利
- 毛利 = 營業淨收入 - 銷售成本
1. 計算所有毛利的平均值。嘗試使用函數來完成此操作。
- 平均值 = 毛利總和除以財年數量 (10)
- [AVERAGE 函數](https://support.microsoft.com/en-us/office/average-function-047bac88-d466-426c-a32b-8f33eb960cf6) 的文件
1. 這是一個 Excel 文件,但應該可以在任何試算表平台中編輯
[數據來源感謝 Yiyi Wang](https://www.kaggle.com/yiyiwang0826/cocacola-excel)
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | ---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

File diff suppressed because one or more lines are too long

@ -0,0 +1,281 @@
# 使用數據Python 和 Pandas 庫
| ![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記圖](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| 使用 Python - _由 [@nitya](https://twitter.com/nitya) 繪製的速記圖_ |
[![介紹影片](../../../../translated_images/zh-TW/video-ds-python.245247dc811db8e4d5ac420246de8a118c63fd28f6a56578d08b630ae549f260.png)](https://youtu.be/dZjWOGbsN4Y)
雖然資料庫提供了非常高效的方式來存儲數據並使用查詢語言進行查詢,但最靈活的數據處理方式是編寫自己的程式來操作數據。在許多情況下,使用資料庫查詢可能更有效。然而,在某些需要更複雜數據處理的情況下,使用 SQL 可能不容易完成。
數據處理可以用任何程式語言編寫,但有些語言在處理數據方面更高效。數據科學家通常偏好以下幾種語言:
* **[Python](https://www.python.org/)** 是一種通用程式語言因其簡單性常被認為是初學者的最佳選擇之一。Python 擁有許多額外的庫,可以幫助解決許多實際問題,例如從 ZIP 壓縮檔案中提取數據或將圖片轉換為灰度。除了數據科學Python 也常用於網頁開發。
* **[R](https://www.r-project.org/)** 是一個傳統工具箱專為統計數據處理而設計。它擁有大量的庫資源CRAN使其成為數據處理的良好選擇。然而R 不是通用程式語言,通常僅用於數據科學領域。
* **[Julia](https://julialang.org/)** 是另一種專為數據科學設計的語言。它旨在提供比 Python 更好的性能,是科學實驗的理想工具。
在本課程中,我們將重點使用 Python 進行簡單的數據處理。我們假設您已對該語言有基本的熟悉。如果您希望更深入地了解 Python可以參考以下資源
* [使用 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 代碼範例。
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## 表格數據和 Dataframes
當我們討論關係型資料庫時,您已經接觸過表格數據。當您擁有大量數據,並且它包含在許多不同的關聯表中時,使用 SQL 來處理它是非常合理的。然而,在許多情況下,我們擁有一個數據表,並需要對該數據進行一些**理解**或**洞察**,例如分佈、值之間的相關性等。在數據科學中,經常需要對原始數據進行一些轉換,然後進行可視化。這兩個步驟都可以使用 Python 輕鬆完成。
Python 中有兩個最有用的庫可以幫助您處理表格數據:
* **[Pandas](https://pandas.pydata.org/)** 允許您操作所謂的 **Dataframes**,它類似於關係型表格。您可以擁有命名的列,並對行、列以及整個 Dataframe 執行不同的操作。
* **[Numpy](https://numpy.org/)** 是一個用於處理 **張量**(即多維**陣列**)的庫。陣列的值具有相同的基礎類型,它比 Dataframe 更簡單,但提供了更多的數學操作,並且開銷更少。
此外,還有幾個您應該了解的庫:
* **[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
```
Pandas 圍繞幾個基本概念進行。
### Series
**Series** 是一系列值,類似於列表或 numpy 陣列。主要區別在於 Series 還具有**索引**,當我們對 Series 進行操作(例如相加)時,索引會被考慮在內。索引可以像整數行號一樣簡單(當從列表或陣列創建 Series 時,默認使用此索引),也可以具有複雜結構,例如日期區間。
> **注意**:在附帶的筆記本 [`notebook.ipynb`](notebook.ipynb) 中有一些 Pandas 的入門代碼。我們在此僅概述一些例子,您可以查看完整的筆記本。
舉例來說:我們想分析冰淇淋店的銷售情況。讓我們生成一段時間內的銷售數據(每天售出的商品數量):
```python
start_date = "Jan 1, 2020"
end_date = "Mar 31, 2020"
idx = pd.date_range(start_date,end_date)
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()
```
![時間序列圖](../../../../translated_images/zh-TW/timeseries-1.80de678ab1cf727e50e00bcf24009fa2b0a8b90ebc43e34b99a345227d28e467.png)
假設每週我們都會為朋友舉辦派對,並額外拿出 10 盒冰淇淋。我們可以創建另一個以週為索引的 Series 來展示這一點:
```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-TW/timeseries-2.aae51d575c55181ceda81ade8c546a2fc2024f9136934386d57b8a189d7570ff.png)
> **注意**:我們並未使用簡單語法 `total_items+additional_items`。如果使用該語法,我們會在結果 Series 中得到許多 `NaN`*非數值*)值。這是因為在 `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.f3147cbc8c624881008564bc0b5d9fcc15e7374d339da91766bd0e1c6bd9e3af.png)
### 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 |
| --- | --- | ------ |
| 0 | 1 | I |
| 1 | 2 | like |
| 2 | 3 | to |
| 3 | 4 | use |
| 4 | 5 | Python |
| 5 | 6 | and |
| 6 | 7 | Pandas |
| 7 | 8 | very |
| 8 | 9 | much |
**注意**:我們也可以通過轉置前一個表格來獲得此表格佈局,例如:
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
```
其中 `.T` 表示轉置 DataFrame 的操作,即交換行和列,而 `rename` 操作允許我們重命名列以匹配前面的例子。
以下是一些我們可以對 DataFrame 執行的重要操作:
**列選擇**。我們可以通過 `df['A']` 選擇單個列,此操作返回一個 Series。我們也可以通過 `df[['B','A']]` 選擇列的子集到另一個 DataFrame此操作返回另一個 DataFrame。
**根據條件篩選**特定行。例如,要僅保留列 `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)]`*括號在此處很重要*)。
**創建新的可計算列**。我們可以通過直觀的表達式輕鬆為 DataFrame 創建新的可計算列:
```python
df['DivA'] = df['A']-df['A'].mean()
```
此例計算列 A 與其平均值的偏差。實際上,我們是在計算一個 Series然後將該 Series 分配給左側,創建另一列。因此,我們不能使用與 Series 不兼容的操作,例如,以下代碼是錯誤的:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
```
後一個例子雖然語法正確,但結果錯誤,因為它將 Series `B` 的長度分配給列中的所有值,而不是分配給每個元素的長度。
如果需要計算此類複雜表達式,我們可以使用 `apply` 函數。上述例子可以寫成如下:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
df['LenB'] = df['B'].apply(len)
```
執行上述操作後,我們將得到以下 DataFrame
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
| 0 | 1 | I | -4.0 | 1 |
| 1 | 2 | like | -3.0 | 4 |
| 2 | 3 | to | -2.0 | 2 |
| 3 | 4 | use | -1.0 | 3 |
| 4 | 5 | Python | 0.0 | 6 |
| 5 | 6 | and | 1.0 | 3 |
| 6 | 7 | Pandas | 2.0 | 6 |
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**根據行號選擇行**可以使用 `iloc` 結構。例如,要選擇 DataFrame 的前 5 行:
```python
df.iloc[:5]
```
**分組**通常用於獲得類似於 Excel 中*樞紐表*的結果。假設我們想計算列 `A` 的平均值,按 `LenB` 的數字分組。我們可以按 `LenB` 分組 DataFrame然後調用 `mean`
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
如果我們需要計算平均值和組中的元素數量,則可以使用更複雜的 `aggregate` 函數:
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
```
這將生成以下表格:
| LenB | Count | Mean |
| ---- | ----- | -------- |
| 1 | 1 | 1.000000 |
| 2 | 1 | 3.000000 |
| 3 | 2 | 5.000000 |
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### 獲取數據
我們已經看到如何輕鬆地從 Python 對象構建 Series 和 DataFrame。然而數據通常以文本文件或 Excel 表格的形式出現。幸運的是Pandas 為我們提供了一種簡單的方法來從磁碟中加載數據。例如,讀取 CSV 文件就像這樣簡單:
```python
df = pd.read_csv('file.csv')
```
我們將在“挑戰”部分中看到更多加載數據的例子,包括從外部網站獲取數據。
### 打印與繪圖
數據科學家經常需要探索數據,因此能夠可視化數據非常重要。當 DataFrame 很大時,我們通常只想通過打印出前幾行來確保我們的操作是正確的。這可以通過調用 `df.head()` 來完成。如果你在 Jupyter Notebook 中運行它,它會以漂亮的表格形式打印出 DataFrame。
我們還看到了使用 `plot` 函數來可視化某些列的用法。雖然 `plot` 對於許多任務非常有用,並且通過 `kind=` 參數支持許多不同的圖表類型,但你也可以使用原始的 `matplotlib` 庫來繪製更複雜的內容。我們將在單獨的課程中詳細介紹數據可視化。
這個概述涵蓋了 Pandas 的一些重要概念,但這個庫非常豐富,你可以用它做的事情幾乎沒有上限!現在,讓我們應用這些知識來解決具體問題。
## 🚀 挑戰 1分析 COVID 傳播
我們將專注於的第一個問題是建模 COVID-19 的流行病傳播。為此,我們將使用由 [約翰霍普金斯大學](https://jhu.edu/) 的 [系統科學與工程中心](https://systems.jhu.edu/) (CSSE) 提供的不同國家感染人數數據。數據集可在 [這個 GitHub 儲存庫](https://github.com/CSSEGISandData/COVID-19) 中獲取。
由於我們想展示如何處理數據,我們邀請你打開 [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) 並從頭到尾閱讀它。你還可以執行單元格,並完成我們在最後為你留下的一些挑戰。
![COVID 傳播](../../../../translated_images/zh-TW/covidspread.f3d131c4f1d260ab0344d79bac0abe7924598dd754859b165955772e1bd5e8a2.png)
> 如果你不知道如何在 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 的論文,並附有元數據和摘要(其中約一半還提供全文)。
使用 [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) 無需註冊下載數據集,但它將包括所有全文以及元數據文件。
打開 [`notebook-papers.ipynb`](notebook-papers.ipynb) 並從頭到尾閱讀它。你還可以執行單元格,並完成我們在最後為你留下的一些挑戰。
![COVID 醫療處理](../../../../translated_images/zh-TW/covidtreat.b2ba59f57ca45fbcda36e0ddca3f8cfdddeeed6ca879ea7f866d93fa6ec65791.png)
## 處理圖像數據
最近,已經開發出非常強大的 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) 完成。
所有這些雲服務都可以通過 [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) 提取活動照片中人們的情感,試圖了解什麼讓人們感到快樂。
## 結論
無論你擁有結構化還是非結構化數據,使用 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)
**學習 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)
## 作業
[對上述挑戰進行更詳細的數據研究](assignment.md)
## 致謝
這節課由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,26 @@
# 使用 Python 進行數據處理的作業
在這份作業中,我們將要求您詳細說明我們在挑戰中開始開發的代碼。作業分為兩部分:
## COVID-19 傳播建模
- [ ] 在一個圖表中繪製 5-6 個不同國家的 *R* 圖表進行比較,或者使用多個並排的圖表。
- [ ] 查看死亡人數和康復人數與感染病例數之間的相關性。
- [ ] 通過視覺化比較感染率和死亡率,找出疾病通常持續的時間,並尋找一些異常情況。您可能需要查看不同國家的數據來得出結論。
- [ ] 計算致死率以及其隨時間的變化。*您可能需要考慮疾病的持續天數,將一個時間序列進行偏移後再進行計算。*
## COVID-19 論文分析
- [ ] 構建不同藥物的共現矩陣,查看哪些藥物經常一起出現(即在同一摘要中提到)。您可以修改用於構建藥物和診斷共現矩陣的代碼。
- [ ] 使用熱圖可視化此矩陣。
- [ ] 作為進階目標,使用 [chord diagram](https://en.wikipedia.org/wiki/Chord_diagram) 可視化藥物的共現情況。[這個庫](https://pypi.org/project/chord/) 可能會幫助您繪製弦圖。
- [ ] 作為另一個進階目標,使用正則表達式提取不同藥物的劑量(例如 *每天服用 400mg 氯喹* 中的 **400mg**),並構建一個數據框架,顯示不同藥物的不同劑量。**注意**:考慮藥物名稱附近的數值。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
所有任務均完成,並附有圖形說明和解釋,包括至少完成一個進階目標 | 完成超過 5 項任務,但未嘗試進階目標,或結果不夠清晰 | 完成少於 5 項(但超過 3 項)任務,且可視化未能有效展示重點
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,336 @@
# 資料處理:資料準備
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/08-DataPreparation.png)|
|:---:|
|資料準備 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/14)
根據資料來源,原始資料可能包含一些不一致性,這些問題會對分析和建模造成挑戰。換句話說,這些資料可以被歸類為「髒資料」,需要進行清理。本課程重點介紹清理和轉換資料的技術,以處理缺失、不準確或不完整的資料。本課程涵蓋的主題將使用 Python 和 Pandas 庫,並在本目錄中的[筆記本](../../../../2-Working-With-Data/08-data-preparation/notebook.ipynb)中進行演示。
## 清理資料的重要性
- **使用和重用的便利性**:當資料被妥善組織和標準化後,搜尋、使用和與他人共享資料會更加容易。
- **一致性**:資料科學通常需要處理多個資料集,來自不同來源的資料集需要合併在一起。確保每個資料集都有共同的標準化,能確保合併後的資料仍然有用。
- **模型準確性**:清理過的資料能提高依賴該資料的模型的準確性。
## 常見的清理目標和策略
- **探索資料集**:資料探索(在[後續課程](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/4-Data-Science-Lifecycle/15-analyzing)中會介紹)可以幫助你發現需要清理的資料。透過視覺化觀察資料集中的值,可以設置對其餘部分的期望,或提供解決問題的思路。探索可以包括基本查詢、視覺化和抽樣。
- **格式化**:根據來源,資料可能在呈現方式上存在不一致性。這可能導致搜尋和表示值時出現問題,雖然在資料集中可以看到,但在視覺化或查詢結果中未正確表示。常見的格式化問題包括解決空白、日期和資料類型。解決格式化問題通常由使用資料的人來決定。例如,日期和數字的表示方式可能因國家而異。
- **重複資料**:重複出現的資料可能會產生不準確的結果,通常應該移除。這在合併兩個或多個資料集時很常見。然而,有些情況下,合併資料集中的重複部分可能提供額外資訊,需要保留。
- **缺失資料**:缺失資料可能導致不準確以及結果偏弱或偏差。有時可以通過重新加載資料、使用 Python 等程式計算填補缺失值,或者直接移除該值及其相關資料來解決。資料缺失的原因有很多,解決缺失值的方式可能取決於它們缺失的原因和方式。
## 探索 DataFrame 資訊
> **學習目標**:完成本小節後,你應該能夠熟練地查找存儲在 pandas DataFrame 中的資料的一般資訊。
當你將資料載入 pandas 後,它通常會以 DataFrame 的形式存在(參考之前的[課程](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python#dataframe)了解詳細概述)。然而,如果你的 DataFrame 中的資料集有 60,000 行和 400 列,你該如何開始了解你正在處理的內容?幸運的是,[pandas](https://pandas.pydata.org/) 提供了一些方便的工具,可以快速查看 DataFrame 的整體資訊以及前幾行和後幾行。
為了探索這些功能,我們將導入 Python 的 scikit-learn 庫並使用一個經典的資料集:**Iris 資料集**。
```python
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
```
| |sepal length (cm)|sepal width (cm)|petal length (cm)|petal width (cm)|
|----------------------------------------|-----------------|----------------|-----------------|----------------|
|0 |5.1 |3.5 |1.4 |0.2 |
|1 |4.9 |3.0 |1.4 |0.2 |
|2 |4.7 |3.2 |1.3 |0.2 |
|3 |4.6 |3.1 |1.5 |0.2 |
|4 |5.0 |3.6 |1.4 |0.2 |
- **DataFrame.info**:首先,`info()` 方法用於列印 `DataFrame` 中內容的摘要。讓我們看看這個資料集的內容:
```python
iris_df.info()
```
```
RangeIndex: 150 entries, 0 to 149
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sepal length (cm) 150 non-null float64
1 sepal width (cm) 150 non-null float64
2 petal length (cm) 150 non-null float64
3 petal width (cm) 150 non-null float64
dtypes: float64(4)
memory usage: 4.8 KB
```
從中我們知道 *Iris* 資料集有 150 筆資料,分布在四個欄位中,且沒有空值。所有資料都以 64 位浮點數存儲。
- **DataFrame.head()**:接下來,為了檢查 `DataFrame` 的實際內容,我們使用 `head()` 方法。讓我們看看 `iris_df` 的前幾行:
```python
iris_df.head()
```
```
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
```
- **DataFrame.tail()**:相反地,為了檢查 `DataFrame` 的最後幾行,我們使用 `tail()` 方法:
```python
iris_df.tail()
```
```
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8
```
> **重點**:僅僅通過查看 DataFrame 的元數據或前幾行和後幾行的值,你就可以立即了解你正在處理的資料的大小、形狀和內容。
## 處理缺失資料
> **學習目標**:完成本小節後,你應該知道如何替換或移除 DataFrame 中的空值。
大多數情況下,你想使用(或必須使用)的資料集中都會有缺失值。如何處理缺失資料涉及微妙的權衡,可能會影響最終分析和實際結果。
Pandas 以兩種方式處理缺失值。第一種方式你之前已經見過:`NaN`即非數值Not a Number。這實際上是一個特殊值是 IEEE 浮點規範的一部分,僅用於表示缺失的浮點值。
對於浮點數以外的缺失值pandas 使用 Python 的 `None` 對象。雖然你可能會覺得遇到兩種不同的值來表示基本相同的事情有些混亂,但這種設計選擇有其合理的程式設計原因,實際上,這種方式為大多數情況提供了良好的折衷。不過,`None` 和 `NaN` 都有一些限制,需注意它們的使用方式。
在[筆記本](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb)中了解更多關於 `NaN``None` 的資訊!
- **檢測空值**:在 `pandas` 中,`isnull()` 和 `notnull()` 方法是檢測空資料的主要方法。兩者都返回布林掩碼。接下來我們將使用 `numpy` 處理 `NaN` 值:
```python
import numpy as np
example1 = pd.Series([0, np.nan, '', None])
example1.isnull()
```
```
0 False
1 True
2 False
3 True
dtype: bool
```
仔細查看輸出。是否有任何結果讓你感到驚訝?雖然 `0` 是一個算術空值但它仍然是一個完全有效的整數pandas 將其視為整數。`''` 則稍微微妙一些。雖然我們在第一部分中使用它來表示空字串值,但它仍然是一個字串對象,而不是 pandas 所認為的空值。
現在,讓我們反過來以更實際的方式使用這些方法。你可以直接將布林掩碼用作 ``Series`` 或 ``DataFrame`` 的索引,這在處理孤立的缺失(或存在)值時非常有用。
> **重點**`isnull()` 和 `notnull()` 方法在 `DataFrame` 中的使用結果相似:它們顯示結果及其索引,這對於處理資料時非常有幫助。
- **移除空值**除了識別缺失值pandas 還提供了一種方便的方法來移除 `Series``DataFrame` 中的空值。(特別是在大型資料集上,通常更建議直接移除缺失值,而不是以其他方式處理它們。)讓我們回到 `example1`
```python
example1 = example1.dropna()
example1
```
```
0 0
2
dtype: object
```
注意,這應該與你的 `example3[example3.notnull()]` 輸出相似。不同之處在於,`dropna` 移除了 `Series` `example1` 中的缺失值,而不是僅僅索引掩碼值。
由於 `DataFrame` 是二維的,它提供了更多選項來移除資料。
```python
example2 = pd.DataFrame([[1, np.nan, 7],
[2, 5, 8],
[np.nan, 6, 9]])
example2
```
| | 0 | 1 | 2 |
|------|---|---|---|
|0 |1.0|NaN|7 |
|1 |2.0|5.0|8 |
|2 |NaN|6.0|9 |
(你是否注意到 pandas 將兩列提升為浮點數以容納 `NaN`
你無法從 `DataFrame` 中移除單個值因此必須移除整行或整列。根據你的需求你可能需要移除其中之一pandas 提供了兩者的選項。由於在資料科學中,列通常代表變數,行代表觀測值,因此你更可能移除資料行;`dropna()` 的預設設置是移除所有包含任何空值的行:
```python
example2.dropna()
```
```
0 1 2
1 2.0 5.0 8
```
如果需要,你可以移除列中的 NA 值。使用 `axis=1` 來完成:
```python
example2.dropna(axis='columns')
```
```
2
0 7
1 8
2 9
```
注意,這可能會移除你可能想保留的大量資料,特別是在較小的資料集中。如果你只想移除包含多個甚至所有空值的行或列,可以在 `dropna` 中使用 `how``thresh` 參數指定這些設置。
預設情況下,`how='any'`(如果你想自己檢查或查看該方法的其他參數,可以在程式碼單元中運行 `example4.dropna?`)。你也可以指定 `how='all'`,以便僅移除包含所有空值的行或列。讓我們擴展我們的示例 `DataFrame` 來看看這一點。
```python
example2[3] = np.nan
example2
```
| |0 |1 |2 |3 |
|------|---|---|---|---|
|0 |1.0|NaN|7 |NaN|
|1 |2.0|5.0|8 |NaN|
|2 |NaN|6.0|9 |NaN|
`thresh` 參數提供了更細緻的控制:你可以設置行或列需要保留的*非空*值數量:
```python
example2.dropna(axis='rows', thresh=3)
```
```
0 1 2 3
1 2.0 5.0 8 NaN
```
在這裡,第一行和最後一行被移除,因為它們僅包含兩個非空值。
- **填充空值**:根據你的資料集,有時用有效值填充空值比移除它們更合理。你可以使用 `isnull` 直接進行填充但這可能很繁瑣特別是當你有很多值需要填充時。由於這是資料科學中非常常見的任務pandas 提供了 `fillna`,它返回一個 `Series``DataFrame` 的副本,將缺失值替換為你選擇的值。讓我們創建另一個示例 `Series` 來看看這在實際中的運作方式。
```python
example3 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
example3
```
```
a 1.0
b NaN
c 2.0
d NaN
e 3.0
dtype: float64
```
你可以用單一值(例如 `0`)填充所有空值:
```python
example3.fillna(0)
```
```
a 1.0
b 0.0
c 2.0
d 0.0
e 3.0
dtype: float64
```
你可以**向前填充**空值,即使用最後一個有效值填充空值:
```python
example3.fillna(method='ffill')
```
```
a 1.0
b 1.0
c 2.0
d 2.0
e 3.0
dtype: float64
```
你也可以**向後填充**,即向後傳播下一個有效值以填充空值:
```python
example3.fillna(method='bfill')
```
```
a 1.0
b 2.0
c 2.0
d 3.0
e 3.0
dtype: float64
```
如你所料,這對 `DataFrame` 也適用,但你還可以指定沿著哪個 `axis` 填充空值。再次使用之前的 `example2`
```python
example2.fillna(method='ffill', axis=1)
```
```
0 1 2 3
0 1.0 1.0 7.0 7.0
1 2.0 5.0 8.0 8.0
2 NaN 6.0 9.0 9.0
```
注意,當前一個值不可用進行向前填充時,空值仍然保留。
> **重點提示:** 處理數據集中缺失值的方法有很多種。具體採用哪種策略(刪除、替換,甚至是如何替換)應該根據該數據的具體情況來決定。隨著你處理和分析數據集的經驗增長,你將對如何處理缺失值有更好的理解。
## 移除重複資料
> **學習目標:** 在本小節結束後,您應該能夠熟練地識別並移除 `DataFrame` 中的重複值。
除了遺漏資料外,您在真實世界的數據集中也經常會遇到重複的資料。幸運的是,`pandas` 提供了一種簡單的方法來檢測和移除重複的項目。
- **識別重複項:`duplicated`**:您可以使用 pandas 的 `duplicated` 方法輕鬆地找到重複值。該方法會返回一個布林遮罩,指示 `DataFrame` 中某個項目是否是之前項目的重複。讓我們創建另一個範例 `DataFrame` 來看看它的運作方式。
```python
example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],
'numbers': [1, 2, 1, 3, 3]})
example4
```
| |letters|numbers|
|------|-------|-------|
|0 |A |1 |
|1 |B |2 |
|2 |A |1 |
|3 |B |3 |
|4 |B |3 |
```python
example4.duplicated()
```
```
0 False
1 False
2 True
3 False
4 True
dtype: bool
```
- **移除重複項:`drop_duplicates`**:此方法會返回一份數據副本,其中所有 `duplicated` 值均為 `False`
```python
example4.drop_duplicates()
```
```
letters numbers
0 A 1
1 B 2
3 B 3
```
`duplicated``drop_duplicates` 預設會考慮所有列,但您可以指定它們僅檢查 `DataFrame` 中的部分列:
```python
example4.drop_duplicates(['letters'])
```
```
letters numbers
0 A 1
1 B 2
```
> **重點:** 移除重複資料是幾乎每個數據科學項目中的重要部分。重複的資料可能會影響分析結果,導致不準確的結論!
## 🚀 挑戰
所有討論過的材料都提供在 [Jupyter Notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/2-Working-With-Data/08-data-preparation/notebook.ipynb) 中。此外,每個部分後面都有練習題,試著完成它們吧!
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/15)
## 回顧與自學
有許多方法可以探索並準備您的數據進行分析和建模,而清理數據是一個需要親自動手的步驟。試試 Kaggle 上的這些挑戰,探索本課未涵蓋的技術。
- [數據清理挑戰:解析日期](https://www.kaggle.com/rtatman/data-cleaning-challenge-parsing-dates/)
- [數據清理挑戰:數據縮放與標準化](https://www.kaggle.com/rtatman/data-cleaning-challenge-scale-and-normalize-data)
## 作業
[評估表單中的數據](assignment.md)
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

File diff suppressed because one or more lines are too long

@ -0,0 +1,17 @@
# 評估表單中的數據
一位客戶正在測試一個[小型表單](../../../../2-Working-With-Data/08-data-preparation/index.html),以收集一些關於其客戶群的基本數據。他們將測試結果交給你,請你驗證所收集的數據。你可以在瀏覽器中打開 `index.html` 頁面來查看該表單。
你已獲得一份[包含表單記錄的 CSV 數據集](../../../../data/form.csv),其中包括表單的輸入內容以及一些基本的可視化圖表。客戶指出其中一些可視化圖表看起來不正確,但他們不確定如何解決。你可以在[作業筆記本](../../../../2-Working-With-Data/08-data-preparation/assignment.ipynb)中進行探索。
## 指導
使用本課程中的技術,提出建議以改進表單,使其能夠收集準確且一致的信息。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,20 @@
# 使用數據
![data love](../../../translated_images/zh-TW/data-love.a22ef29e6742c852505ada062920956d3d7604870b281a8ca7c7ac6f37381d5a.jpg)
> 圖片由 <a href="https://unsplash.com/@swimstaralex?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexander Sinn</a> 提供,來自 <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
在這些課程中,您將學習一些管理、操作和應用數據的方法。您將了解關聯式和非關聯式數據庫,以及數據如何存儲在其中。您還將學習使用 Python 管理數據的基礎知識,並探索使用 Python 管理和挖掘數據的多種方式。
### 主題
1. [關聯式數據庫](05-relational-databases/README.md)
2. [非關聯式數據庫](06-non-relational/README.md)
3. [使用 Python](07-python/README.md)
4. [準備數據](08-data-preparation/README.md)
### 致謝
這些課程由 [Christopher Harrison](https://twitter.com/geektrainer)、[Dmitry Soshnikov](https://twitter.com/shwars) 和 [Jasmine Greenaway](https://twitter.com/paladique) 用 ❤️ 編寫。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,213 @@
# 視覺化數量
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| 視覺化數量 - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ |
在本課程中,您將探索如何使用眾多可用的 Python 庫之一,學習如何圍繞數量的概念創建有趣的視覺化。使用關於明尼蘇達州鳥類的清理數據集,您可以了解許多有趣的本地野生動物資訊。
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/16)
## 使用 Matplotlib 觀察翼展
一個非常出色的庫是 [Matplotlib](https://matplotlib.org/stable/index.html),它可以用來創建各種簡單和複雜的圖表和圖形。一般來說,使用這些庫繪製數據的過程包括:識別您想要處理的數據框部分,對數據進行必要的轉換,分配其 x 和 y 軸值決定要顯示的圖表類型然後顯示圖表。Matplotlib 提供了多種視覺化選項,但在本課程中,我們將專注於最適合視覺化數量的圖表類型:折線圖、散點圖和柱狀圖。
> ✅ 根據數據結構和您想要講述的故事選擇最佳圖表。
> - 分析時間趨勢:折線圖
> - 比較數值:柱狀圖、條形圖、餅圖、散點圖
> - 顯示部分與整體的關係:餅圖
> - 顯示數據分佈:散點圖、柱狀圖
> - 顯示趨勢:折線圖、條形圖
> - 顯示數值之間的關係:折線圖、散點圖、氣泡圖
如果您有一個數據集並需要了解某個項目的數量,第一步通常是檢查其值。
✅ Matplotlib 有非常好的「速查表」,可以在 [這裡](https://matplotlib.org/cheatsheets/cheatsheets.pdf) 找到。
## 建立鳥類翼展數值的折線圖
打開本課程文件夾根目錄中的 `notebook.ipynb` 文件,並添加一個單元格。
> 注意:數據存儲在本倉庫根目錄的 `/data` 文件夾中。
```python
import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
```
這些數據是文本和數字的混合:
| | 名稱 | 學名 | 類別 | 目 | 科 | 屬 | 保育狀況 | 最小長度 | 最大長度 | 最小體重 | 最大體重 | 最小翼展 | 最大翼展 |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | 黑腹樹鴨 | Dendrocygna autumnalis | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | 棕樹鴨 | Dendrocygna bicolor | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | 雪鵝 | Anser caerulescens | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | 羅斯鵝 | Anser rossii | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | 大白額雁 | Anser albifrons | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
讓我們從使用基本折線圖繪製一些數字數據開始。假設您想查看這些有趣鳥類的最大翼展。
```python
wingspan = birds['MaxWingspan']
wingspan.plot()
```
![最大翼展](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-02.png)
您立即注意到什麼似乎至少有一個異常值——這是一個相當大的翼展2300 公分的翼展等於 23 公尺——明尼蘇達州有翼龍在飛翔嗎?讓我們調查一下。
雖然您可以在 Excel 中快速排序以找到這些可能是錯誤的異常值,但請繼續從圖表中進行視覺化分析。
在 x 軸上添加標籤以顯示涉及的鳥類類型:
```
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.xticks(rotation=45)
x = birds['Name']
y = birds['MaxWingspan']
plt.plot(x, y)
plt.show()
```
![帶標籤的翼展](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-labels-02.png)
即使將標籤旋轉設置為 45 度,仍然太多以至於無法閱讀。讓我們嘗試另一種策略:僅標記那些異常值並在圖表內設置標籤。您可以使用散點圖來為標籤留出更多空間:
```python
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
for i in range(len(birds)):
x = birds['Name'][i]
y = birds['MaxWingspan'][i]
plt.plot(x, y, 'bo')
if birds['MaxWingspan'][i] > 500:
plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12)
plt.show()
```
這裡發生了什麼?您使用 `tick_params` 隱藏底部標籤,然後對您的鳥類數據集進行迴圈。通過使用 `bo` 繪製帶有小圓形藍點的圖表,您檢查了任何最大翼展超過 500 的鳥類,並在點旁顯示其標籤。您在 y 軸上稍微偏移標籤 (`y * (1 - 0.05)`) 並使用鳥類名稱作為標籤。
您發現了什麼?
![異常值](../../../../3-Data-Visualization/09-visualization-quantities/images/labeled-wingspan-02.png)
## 篩選數據
禿鷹和草原隼,雖然可能是非常大的鳥類,但似乎被錯誤標記了,其最大翼展多加了一個 `0`。不太可能遇到翼展 25 公尺的禿鷹,但如果真的遇到,請告訴我們!讓我們創建一個新的數據框,去除這兩個異常值:
```python
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
for i in range(len(birds)):
x = birds['Name'][i]
y = birds['MaxWingspan'][i]
if birds['Name'][i] not in ['Bald eagle', 'Prairie falcon']:
plt.plot(x, y, 'bo')
plt.show()
```
通過篩選掉異常值,您的數據現在更加一致且易於理解。
![翼展散點圖](../../../../3-Data-Visualization/09-visualization-quantities/images/scatterplot-wingspan-02.png)
現在我們至少在翼展方面有一個更乾淨的數據集,讓我們進一步探索這些鳥類。
雖然折線圖和散點圖可以顯示數據值及其分佈,但我們想要思考這個數據集中固有的數值。您可以創建視覺化來回答以下關於數量的問題:
> 有多少類別的鳥類?它們的數量是多少?
> 有多少鳥類是滅絕、瀕危、稀有或常見的?
> 根據林奈分類法,有多少屬和目?
## 探索柱狀圖
當您需要顯示數據分組時,柱狀圖非常實用。讓我們探索這個數據集中存在的鳥類類別,看看哪一類最常見。
在 notebook 文件中,創建一個基本柱狀圖。
✅ 注意,您可以篩選掉上一節中識別的兩個異常鳥類,編輯它們翼展中的錯誤,或者保留它們,因為這些練習不依賴於翼展值。
如果您想創建柱狀圖,可以選擇您想要關注的數據。柱狀圖可以從原始數據創建:
```python
birds.plot(x='Category',
kind='bar',
stacked=True,
title='Birds of Minnesota')
```
![完整數據柱狀圖](../../../../3-Data-Visualization/09-visualization-quantities/images/full-data-bar-02.png)
然而,這個柱狀圖因為數據未分組而難以閱讀。您需要選擇您想要繪製的數據,因此讓我們根據鳥類的類別查看它們的長度。
篩選數據以僅包含鳥類的類別。
✅ 注意,您使用 Pandas 管理數據,然後讓 Matplotlib 繪製圖表。
由於類別很多,您可以垂直顯示此圖表並調整其高度以容納所有數據:
```python
category_count = birds.value_counts(birds['Category'].values, sort=True)
plt.rcParams['figure.figsize'] = [6, 12]
category_count.plot.barh()
```
![類別和長度](../../../../3-Data-Visualization/09-visualization-quantities/images/category-counts-02.png)
這個柱狀圖很好地展示了每個類別中鳥類的數量。一眼就能看出,這個地區最多的鳥類屬於鴨/鵝/水禽類別。明尼蘇達州是「萬湖之地」,所以這並不令人驚訝!
✅ 嘗試對此數據集進行其他計數。有什麼讓您感到驚訝嗎?
## 比較數據
您可以通過創建新軸嘗試不同的分組數據比較。嘗試比較鳥類的最大長度,基於其類別:
```python
maxlength = birds['MaxLength']
plt.barh(y=birds['Category'], width=maxlength)
plt.rcParams['figure.figsize'] = [6, 12]
plt.show()
```
![比較數據](../../../../3-Data-Visualization/09-visualization-quantities/images/category-length-02.png)
這裡沒有什麼令人驚訝的:蜂鳥的最大長度比鵜鶘或鵝要小得多。當數據符合邏輯時,這是件好事!
您可以通過疊加數據創建更有趣的柱狀圖視覺化。讓我們在給定的鳥類類別上疊加最小和最大長度:
```python
minLength = birds['MinLength']
maxLength = birds['MaxLength']
category = birds['Category']
plt.barh(category, maxLength)
plt.barh(category, minLength)
plt.show()
```
在這個圖表中,您可以看到每個鳥類類別的最小長度和最大長度範圍。您可以有把握地說,根據這些數據,鳥越大,其長度範圍越大。真是有趣!
![疊加數值](../../../../3-Data-Visualization/09-visualization-quantities/images/superimposed-02.png)
## 🚀 挑戰
這個鳥類數據集提供了關於特定生態系統中不同類型鳥類的大量資訊。上網搜索,看看您是否能找到其他與鳥類相關的數據集。練習圍繞這些鳥類構建圖表和圖形,發現您之前未曾意識到的事實。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/17)
## 回顧與自學
本課程的第一課向您介紹了如何使用 Matplotlib 視覺化數量。研究其他方法來處理數據集進行視覺化。[Plotly](https://github.com/plotly/plotly.py) 是我們不會在這些課程中涵蓋的一個工具,請查看它能提供什麼功能。
## 作業
[折線圖、散點圖和柱狀圖](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,14 @@
# 折線圖、散點圖與長條圖
## 課程指導
在本課程中,你使用了折線圖、散點圖和長條圖來展示這個數據集中的有趣事實。在這次作業中,深入探索數據集,發掘關於某種特定鳥類的事實。例如,創建一個筆記本,視覺化所有你能找到的關於雪雁的有趣數據。使用上述三種圖表,在你的筆記本中講述一個故事。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
筆記本包含良好的註解、完整的故事敘述以及吸引人的圖表 | 筆記本缺少其中一個元素 | 筆記本缺少其中兩個元素
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,106 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# 一起來了解鳥類吧\n",
"\n",
"## 鳥類的基本特徵\n",
"\n",
"鳥類是溫血動物,擁有羽毛、喙以及硬殼的蛋。牠們是地球上最具多樣性的動物群體之一,分佈於幾乎所有的生態系統中。\n",
"\n",
"### 羽毛的功能\n",
"\n",
"羽毛不僅僅是鳥類的標誌性特徵,還有以下幾個重要功能:\n",
"- **保暖**:羽毛幫助鳥類保持體溫,特別是在寒冷的環境中。\n",
"- **飛行**:飛行羽毛提供了飛行所需的升力和控制。\n",
"- **偽裝**:某些鳥類的羽毛顏色可以幫助牠們融入環境,避免被捕食者發現。\n",
"\n",
"[!NOTE] 羽毛的結構非常複雜,由角蛋白組成,這是一種堅韌且靈活的蛋白質。\n",
"\n",
"## 鳥類的飛行\n",
"\n",
"飛行是鳥類最令人著迷的能力之一。雖然並非所有鳥類都能飛行,但大多數鳥類的身體結構都為飛行進化而來。\n",
"\n",
"### 飛行的基本原理\n",
"\n",
"鳥類的飛行依賴於以下幾個關鍵因素:\n",
"1. **翅膀的形狀**:翅膀的弧度和長度影響升力的產生。\n",
"2. **肌肉力量**:強大的胸肌為翅膀提供動力。\n",
"3. **空氣動力學**:鳥類利用氣流來減少阻力並增加效率。\n",
"\n",
"[!TIP] 想了解更多飛行的科學原理?可以參考 @@INLINE_CODE_1@@。\n",
"\n",
"### 不會飛的鳥類\n",
"\n",
"並非所有鳥類都能飛行。例如,鴕鳥和企鵝雖然不能飛,但牠們在其他方面有著驚人的適應能力:\n",
"- 鴕鳥擅長奔跑速度可達每小時70公里。\n",
"- 企鵝是游泳高手,能在水中快速移動以捕捉魚類。\n",
"\n",
"## 鳥類的多樣性\n",
"\n",
"地球上已知的鳥類種類超過10,000種牠們的大小、形狀和行為各不相同。\n",
"\n",
"### 常見的鳥類分類\n",
"\n",
"以下是一些主要的鳥類分類:\n",
"- **猛禽**:如老鷹和鷹,牠們以鋒利的爪子和視力著稱。\n",
"- **水鳥**:如鴨子和鵜鶘,牠們適應了水生環境。\n",
"- **鳴禽**:如麻雀和知更鳥,牠們以悅耳的鳴叫聲聞名。\n",
"\n",
"[!WARNING] 某些鳥類因棲息地喪失和非法捕獵而面臨滅絕的威脅。\n",
"\n",
"## 如何保護鳥類\n",
"\n",
"我們可以採取以下措施來保護鳥類及其棲息地:\n",
"- **種植本地植物**:為鳥類提供食物和棲息地。\n",
"- **避免使用農藥**:農藥可能會毒害鳥類及其食物來源。\n",
"- **支持保育組織**:參與或捐助致力於保護鳥類的組織。\n",
"\n",
"[!IMPORTANT] 每個人都可以為保護鳥類出一份力,無論是小小的行動還是大規模的倡導。\n",
"\n",
"## 結語\n",
"\n",
"鳥類是我們星球上不可或缺的一部分。牠們不僅為我們的生活增添色彩,還在生態系統中扮演著重要角色。讓我們一起努力,確保鳥類的未來更加光明!\n"
],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python",
"version": "3.7.0",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3.7.0 64-bit"
},
"interpreter": {
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
},
"coopTranslator": {
"original_hash": "33e5c5d3f0630388e20f2e161bd4cdf3",
"translation_date": "2025-09-02T08:47:23+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/notebook.ipynb",
"language_code": "tw"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,209 @@
# 視覺化分佈
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| 視覺化分佈 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 繪製_ |
在上一課中,你學到了關於明尼蘇達州鳥類數據集的一些有趣事實。你通過視覺化異常值發現了一些錯誤的數據,並通過最大長度比較了不同鳥類分類的差異。
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/18)
## 探索鳥類數據集
另一種深入了解數據的方法是查看其分佈,也就是數據如何沿著某個軸排列。例如,你可能想了解這個數據集中明尼蘇達州鳥類的最大翼展或最大體重的整體分佈情況。
讓我們來發現一些關於這個數據集中分佈的事實。在本課文件夾根目錄中的 _notebook.ipynb_ 文件中,導入 Pandas、Matplotlib 和你的數據:
```python
import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
```
| | 名稱 | 學名 | 分類 | 目 | 科 | 屬 | 保育狀態 | 最小長度 | 最大長度 | 最小體重 | 最大體重 | 最小翼展 | 最大翼展 |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | 黑腹樹鴨 | Dendrocygna autumnalis | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | 棕樹鴨 | Dendrocygna bicolor | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | 雪雁 | Anser caerulescens | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | 羅氏雁 | Anser rossii | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | 大白額雁 | Anser albifrons | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
通常,你可以通過使用散點圖快速查看數據的分佈方式,就像我們在上一課中所做的那樣:
```python
birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))
plt.title('Max Length per Order')
plt.ylabel('Order')
plt.xlabel('Max Length')
plt.show()
```
![每個目中的最大長度](../../../../3-Data-Visualization/10-visualization-distributions/images/scatter-wb.png)
這提供了每個鳥類目中身體長度的一般分佈概覽,但這並不是顯示真實分佈的最佳方式。這個任務通常通過創建直方圖來完成。
## 使用直方圖
Matplotlib 提供了非常好的方法來使用直方圖視覺化數據分佈。這種類型的圖表類似於條形圖,通過條形的升降可以看到分佈情況。要構建直方圖,你需要數值型數據。構建直方圖時,可以將圖表的類型定義為 'hist'。這個圖表顯示了整個數據集中 MaxBodyMass 的分佈。通過將數據陣列分成更小的區間bins它可以顯示數據值的分佈
```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()
```
![整個數據集的分佈](../../../../3-Data-Visualization/10-visualization-distributions/images/dist1-wb.png)
如你所見,這個數據集中的 400 多種鳥類大多數的最大體重都在 2000 以下。通過將 `bins` 參數設置為更高的數字(例如 30可以獲得更多的數據洞察
```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
plt.show()
```
![使用更大 bins 參數的分佈](../../../../3-Data-Visualization/10-visualization-distributions/images/dist2-wb.png)
這個圖表以更細緻的方式顯示了分佈。通過僅選擇給定範圍內的數據,可以創建一個不那麼偏向左側的圖表:
篩選數據以僅獲取體重低於 60 的鳥類,並顯示 40 個 `bins`
```python
filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()
```
![篩選後的直方圖](../../../../3-Data-Visualization/10-visualization-distributions/images/dist3-wb.png)
✅ 試試其他篩選條件和數據點。若要查看數據的完整分佈,移除 `['MaxBodyMass']` 篩選條件以顯示帶標籤的分佈。
直方圖還提供了一些不錯的顏色和標籤增強功能可以嘗試:
創建一個 2D 直方圖來比較兩個分佈之間的關係。讓我們比較 `MaxBodyMass``MaxLength`。Matplotlib 提供了一種內建方式,通過更亮的顏色顯示匯聚點:
```python
x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']
fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)
```
可以看到這兩個元素之間沿著預期軸線存在預期的相關性,並且有一個特別強的匯聚點:
![2D 圖表](../../../../3-Data-Visualization/10-visualization-distributions/images/2D-wb.png)
直方圖對於數值型數據默認效果很好。如果你需要根據文本數據查看分佈該怎麼辦?
## 使用文本數據探索數據集的分佈
這個數據集還包括關於鳥類分類、屬、種、科以及保育狀態的良好信息。讓我們深入了解這些保育信息。鳥類根據其保育狀態的分佈是什麼樣的?
> ✅ 在數據集中,使用了一些縮寫來描述保育狀態。這些縮寫來自 [IUCN 紅色名錄分類](https://www.iucnredlist.org/),該組織記錄了物種的狀態。
>
> - CR: 極危
> - EN: 瀕危
> - EX: 滅絕
> - LC: 無危
> - NT: 近危
> - VU: 易危
這些是基於文本的值,因此你需要進行轉換以創建直方圖。使用篩選後的 filteredBirds 數據框,顯示其保育狀態與最小翼展。你看到了什麼?
```python
x1 = filteredBirds.loc[filteredBirds.ConservationStatus=='EX', 'MinWingspan']
x2 = filteredBirds.loc[filteredBirds.ConservationStatus=='CR', 'MinWingspan']
x3 = filteredBirds.loc[filteredBirds.ConservationStatus=='EN', 'MinWingspan']
x4 = filteredBirds.loc[filteredBirds.ConservationStatus=='NT', 'MinWingspan']
x5 = filteredBirds.loc[filteredBirds.ConservationStatus=='VU', 'MinWingspan']
x6 = filteredBirds.loc[filteredBirds.ConservationStatus=='LC', 'MinWingspan']
kwargs = dict(alpha=0.5, bins=20)
plt.hist(x1, **kwargs, color='red', label='Extinct')
plt.hist(x2, **kwargs, color='orange', label='Critically Endangered')
plt.hist(x3, **kwargs, color='yellow', label='Endangered')
plt.hist(x4, **kwargs, color='green', label='Near Threatened')
plt.hist(x5, **kwargs, color='blue', label='Vulnerable')
plt.hist(x6, **kwargs, color='gray', label='Least Concern')
plt.gca().set(title='Conservation Status', ylabel='Min Wingspan')
plt.legend();
```
![翼展與保育狀態的對比](../../../../3-Data-Visualization/10-visualization-distributions/images/histogram-conservation-wb.png)
最小翼展與保育狀態之間似乎沒有明顯的相關性。使用這種方法測試數據集中的其他元素。你也可以嘗試不同的篩選條件。你發現了任何相關性嗎?
## 密度圖
你可能已經注意到,我們目前看到的直方圖是“階梯式”的,並沒有平滑地呈現弧形。若要顯示更平滑的密度圖,可以嘗試使用密度圖。
為了使用密度圖,請熟悉一個新的繪圖庫 [Seaborn](https://seaborn.pydata.org/generated/seaborn.kdeplot.html)。
加載 Seaborn嘗試一個基本的密度圖
```python
import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()
```
![密度圖](../../../../3-Data-Visualization/10-visualization-distributions/images/density1.png)
你可以看到這個圖表與之前的最小翼展數據圖表相呼應,只是更平滑了一些。根據 Seaborn 的文檔“相較於直方圖KDE 可以生成一個更簡潔且更易於解讀的圖表,特別是在繪製多個分佈時。但如果底層分佈有界或不平滑,它可能會引入失真。此外,圖表的質量也取決於選擇良好的平滑參數。” [來源](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) 換句話說,異常值仍然會對你的圖表產生不良影響。
如果你想重新訪問第二個圖表中那條鋸齒狀的 MaxBodyMass 線,可以通過使用這種方法將其很好地平滑化:
```python
sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()
```
![平滑的體重線](../../../../3-Data-Visualization/10-visualization-distributions/images/density2.png)
如果你想要一條平滑但不過於平滑的線,可以編輯 `bw_adjust` 參數:
```python
sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()
```
![較少平滑的體重線](../../../../3-Data-Visualization/10-visualization-distributions/images/density3.png)
✅ 閱讀此類圖表可用的參數並進行實驗!
這種類型的圖表提供了非常具有解釋性的視覺化效果。例如,只需幾行代碼,你就可以顯示每個鳥類目中的最大體重密度:
```python
sns.kdeplot(
data=filteredBirds, x="MaxBodyMass", hue="Order",
fill=True, common_norm=False, palette="crest",
alpha=.5, linewidth=0,
)
```
![每個目中的體重密度](../../../../3-Data-Visualization/10-visualization-distributions/images/density4.png)
你還可以在一個圖表中映射多個變量的密度。測試鳥類的 MaxLength 和 MinLength 與其保育狀態的關係:
```python
sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")
```
![多個密度圖,重疊顯示](../../../../3-Data-Visualization/10-visualization-distributions/images/multi.png)
或許值得研究一下,根據鳥類長度的“易危”群體是否具有某種意義。
## 🚀 挑戰
直方圖是一種比基本散點圖、條形圖或折線圖更為複雜的圖表類型。在互聯網上搜索一些直方圖的優秀示例。它們是如何使用的?它們展示了什麼?它們通常在哪些領域或研究範疇中使用?
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/19)
## 回顧與自學
在本課中,你使用了 Matplotlib 並開始使用 Seaborn 來繪製更為複雜的圖表。研究一下 Seaborn 中的 `kdeplot`,這是一種“在一個或多個維度上顯示連續概率密度曲線”的方法。閱讀 [文檔](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) 以了解其工作原理。
## 作業
[應用你的技能](assignment.md)
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,14 @@
# 運用你的技能
## 指導說明
到目前為止,你已經使用了明尼蘇達州鳥類數據集來探索有關鳥類數量和種群密度的信息。現在,嘗試應用這些技術到另一個數據集上,或許可以從 [Kaggle](https://www.kaggle.com/) 獲取數據集。建立一個筆記本,講述這個數據集的故事,並確保在討論數據時使用直方圖。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
筆記本包含有關數據集的註解,包括其來源,並使用至少 5 個直方圖來探索數據中的信息。 | 筆記本包含不完整的註解或存在錯誤。 | 筆記本缺乏註解且包含錯誤。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,32 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# 鳥類分佈\n"
],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python"
},
"coopTranslator": {
"original_hash": "e5272cbcbffd1ddcc09e44d3d8e7e8cd",
"translation_date": "2025-09-02T09:06:15+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/notebook.ipynb",
"language_code": "tw"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,196 @@
# 視覺化比例
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/11-Visualizing-Proportions.png)|
|:---:|
|視覺化比例 - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ |
在這節課中,你將使用一個以自然為主題的數據集來視覺化比例,例如在一個關於蘑菇的數據集中有多少不同種類的真菌。讓我們使用一個來自 Audubon 的數據集來探索這些迷人的真菌,該數據集列出了 Agaricus 和 Lepiota 家族中 23 種有鰓蘑菇的詳細信息。你將嘗試一些有趣的視覺化方式,例如:
- 圓餅圖 🥧
- 甜甜圈圖 🍩
- 華夫圖 🧇
> 💡 微軟研究院的一個非常有趣的項目 [Charticulator](https://charticulator.com) 提供了一個免費的拖放界面,用於數據視覺化。在他們的一個教程中,他們也使用了這個蘑菇數據集!因此,你可以同時探索數據並學習這個庫:[Charticulator 教程](https://charticulator.com/tutorials/tutorial4.html)。
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/20)
## 認識你的蘑菇 🍄
蘑菇非常有趣。讓我們導入一個數據集來研究它們:
```python
import pandas as pd
import matplotlib.pyplot as plt
mushrooms = pd.read_csv('../../data/mushrooms.csv')
mushrooms.head()
```
一個表格被打印出來,包含一些很棒的分析數據:
| 類別 | 帽型 | 帽表面 | 帽顏色 | 是否有瘀傷 | 氣味 | 鰓附著方式 | 鰓間距 | 鰓大小 | 鰓顏色 | 柄型 | 柄根 | 環上方柄表面 | 環下方柄表面 | 環上方柄顏色 | 環下方柄顏色 | 幔膜類型 | 幔膜顏色 | 環數量 | 環類型 | 孢子印顏色 | 分布 | 棲息地 |
| --------- | --------- | ----------- | --------- | ------- | ------- | --------------- | ------------ | --------- | ---------- | ----------- | ---------- | ------------------------ | ------------------------ | ---------------------- | ---------------------- | --------- | ---------- | ----------- | --------- | ----------------- | ---------- | ------- |
| 有毒 | 凸形 | 光滑 | 棕色 | 有瘀傷 | 刺鼻 | 自由 | 緊密 | 狹窄 | 黑色 | 擴大 | 等型 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 黑色 | 分散 | 城市 |
| 可食用 | 凸形 | 光滑 | 黃色 | 有瘀傷 | 杏仁 | 自由 | 緊密 | 寬 | 黑色 | 擴大 | 棍型 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 棕色 | 多數 | 草地 |
| 可食用 | 鐘形 | 光滑 | 白色 | 有瘀傷 | 茴香 | 自由 | 緊密 | 寬 | 棕色 | 擴大 | 棍型 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 棕色 | 多數 | 草地 |
| 有毒 | 凸形 | 鱗片狀 | 白色 | 有瘀傷 | 刺鼻 | 自由 | 緊密 | 狹窄 | 棕色 | 擴大 | 等型 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 黑色 | 分散 | 城市 |
你會立刻注意到所有的數據都是文本格式。你需要將這些數據轉換為可以用於圖表的格式。事實上,大部分數據是以對象形式表示的:
```python
print(mushrooms.select_dtypes(["object"]).columns)
```
輸出為:
```output
Index(['class', 'cap-shape', 'cap-surface', 'cap-color', 'bruises', 'odor',
'gill-attachment', 'gill-spacing', 'gill-size', 'gill-color',
'stalk-shape', 'stalk-root', 'stalk-surface-above-ring',
'stalk-surface-below-ring', 'stalk-color-above-ring',
'stalk-color-below-ring', 'veil-type', 'veil-color', 'ring-number',
'ring-type', 'spore-print-color', 'population', 'habitat'],
dtype='object')
```
將這些數據轉換,並將「類別」列轉換為分類:
```python
cols = mushrooms.select_dtypes(["object"]).columns
mushrooms[cols] = mushrooms[cols].astype('category')
```
```python
edibleclass=mushrooms.groupby(['class']).count()
edibleclass
```
現在,如果你打印出蘑菇數據,你可以看到它已根據有毒/可食用類別分組:
| | 帽型 | 帽表面 | 帽顏色 | 是否有瘀傷 | 氣味 | 鰓附著方式 | 鰓間距 | 鰓大小 | 鰓顏色 | 柄型 | ... | 環下方柄表面 | 環上方柄顏色 | 環下方柄顏色 | 幔膜類型 | 幔膜顏色 | 環數量 | 環類型 | 孢子印顏色 | 分布 | 棲息地 |
| --------- | --------- | ----------- | --------- | ------- | ---- | --------------- | ------------ | --------- | ---------- | ----------- | --- | ------------------------ | ---------------------- | ---------------------- | --------- | ---------- | ----------- | --------- | ----------------- | ---------- | ------- |
| 類別 | | | | | | | | | | | | | | | | | | | | | |
| 可食用 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | ... | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 |
| 有毒 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | ... | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 |
如果你按照這個表格中呈現的順序來創建類別標籤,你可以製作一個圓餅圖:
## 圓餅圖!
```python
labels=['Edible','Poisonous']
plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%')
plt.title('Edible?')
plt.show()
```
完成,一個圓餅圖展示了根據這兩類蘑菇的比例數據。正確排列標籤的順序非常重要,尤其是在這裡,因此請務必核對標籤數組的順序!
![圓餅圖](../../../../3-Data-Visualization/11-visualization-proportions/images/pie1-wb.png)
## 甜甜圈圖!
一個更具視覺吸引力的圓餅圖是甜甜圈圖,它是一個中間有洞的圓餅圖。讓我們用這種方法來查看數據。
看看蘑菇生長的各種棲息地:
```python
habitat=mushrooms.groupby(['habitat']).count()
habitat
```
在這裡,你將數據按棲息地分組。共有 7 種棲息地,因此使用它們作為甜甜圈圖的標籤:
```python
labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood']
plt.pie(habitat['class'], labels=labels,
autopct='%1.1f%%', pctdistance=0.85)
center_circle = plt.Circle((0, 0), 0.40, fc='white')
fig = plt.gcf()
fig.gca().add_artist(center_circle)
plt.title('Mushroom Habitats')
plt.show()
```
![甜甜圈圖](../../../../3-Data-Visualization/11-visualization-proportions/images/donut-wb.png)
這段代碼繪製了一個圖表和一個中心圓,然後將該中心圓添加到圖表中。通過更改 `0.40` 的值來編輯中心圓的寬度。
甜甜圈圖可以通過多種方式進行調整以更改標籤。特別是標籤可以突出顯示以提高可讀性。更多信息請參考 [文檔](https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html?highlight=donut)。
現在你已經知道如何分組數據並將其顯示為圓餅圖或甜甜圈圖,你可以探索其他類型的圖表。試試華夫圖,這是一種不同的方式來探索數量。
## 華夫圖!
華夫圖是一種以 2D 方塊陣列視覺化數量的方式。試著用這個數據集來視覺化蘑菇帽顏色的不同數量。為此,你需要安裝一個名為 [PyWaffle](https://pypi.org/project/pywaffle/) 的輔助庫並使用 Matplotlib
```python
pip install pywaffle
```
選擇一段數據進行分組:
```python
capcolor=mushrooms.groupby(['cap-color']).count()
capcolor
```
通過創建標籤並分組數據來製作華夫圖:
```python
import pandas as pd
import matplotlib.pyplot as plt
from pywaffle import Waffle
data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'],
'amount': capcolor['class']
}
df = pd.DataFrame(data)
fig = plt.figure(
FigureClass = Waffle,
rows = 100,
values = df.amount,
labels = list(df.color),
figsize = (30,30),
colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"],
)
```
使用華夫圖,你可以清楚地看到這個蘑菇數據集中帽顏色的比例。有趣的是,有許多綠帽蘑菇!
![華夫圖](../../../../3-Data-Visualization/11-visualization-proportions/images/waffle.png)
✅ PyWaffle 支持在圖表中使用任何 [Font Awesome](https://fontawesome.com/) 提供的圖標。嘗試進行一些實驗,用圖標代替方塊來創建更有趣的華夫圖。
在這節課中,你學到了三種視覺化比例的方法。首先,你需要將數據分組到分類中,然後決定哪種方式最適合展示數據——圓餅圖、甜甜圈圖或華夫圖。這些方法都很有趣,能讓用戶快速了解數據集。
## 🚀 挑戰
試著在 [Charticulator](https://charticulator.com) 中重現這些有趣的圖表。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/21)
## 回顧與自學
有時候,何時使用圓餅圖、甜甜圈圖或華夫圖並不明顯。以下是一些相關文章:
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402
進行一些研究,找到更多關於這個選擇的相關信息。
## 作業
[在 Excel 中試試看](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,14 @@
# 在 Excel 中嘗試
## 說明
你知道嗎?你可以在 Excel 中製作甜甜圈圖、圓餅圖和華夫餅圖!使用你選擇的數據集,直接在 Excel 試算表中創建這三種類型的圖表。
## 評分標準
| 優秀 | 合格 | 需要改進 |
| ------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------- |
| 提供的 Excel 試算表包含所有三種類型的圖表 | 提供的 Excel 試算表包含兩種類型的圖表 | 提供的 Excel 試算表僅包含一種類型的圖表 |
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,30 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python"
},
"coopTranslator": {
"original_hash": "397e9bbc0743761dbf72e5f16b7043e6",
"translation_date": "2025-09-02T08:38:03+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/notebook.ipynb",
"language_code": "tw"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,179 @@
# 視覺化關係:關於蜂蜜 🍯
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/12-Visualizing-Relationships.png)|
|:---:|
|視覺化關係 - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ |
延續我們研究的自然主題,讓我們探索一些有趣的視覺化方式,來展示不同類型蜂蜜之間的關係。這些數據集來自[美國農業部](https://www.nass.usda.gov/About_NASS/index.php)。
這個包含約 600 項的數據集展示了美國多個州的蜂蜜生產情況。例如,您可以查看每個州在 1998-2012 年間的蜂群數量、每群蜂的產量、總產量、庫存、每磅價格以及蜂蜜的生產價值,每年每州一行數據。
我們可以視覺化某州每年的生產量與該州蜂蜜價格之間的關係。或者,您也可以視覺化各州每群蜂的蜂蜜產量之間的關係。這段時間涵蓋了 2006 年首次出現的毀滅性「蜂群崩潰症候群 (CCD)」http://npic.orst.edu/envir/ccd.html因此這是一個值得研究的數據集。🐝
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/22)
在本課中,您可以使用 Seaborn之前已使用過這是一個很好的庫用於視覺化變數之間的關係。特別有趣的是使用 Seaborn 的 `relplot` 函數,它可以快速生成散點圖和折線圖,視覺化「[統計關係](https://seaborn.pydata.org/tutorial/relational.html?highlight=relationships)」,幫助數據科學家更好地理解變數之間的關聯。
## 散點圖
使用散點圖展示蜂蜜價格如何隨年份在各州演變。Seaborn 的 `relplot` 可以方便地將州的數據分組,並顯示分類和數值數據的數據點。
首先,導入數據和 Seaborn
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()
```
您會注意到蜂蜜數據中有幾個有趣的列,包括年份和每磅價格。讓我們按美國州分組來探索這些數據:
| 州 | 蜂群數量 | 每群蜂產量 | 總產量 | 庫存 | 每磅價格 | 生產價值 | 年份 |
| ----- | ------ | ----------- | --------- | -------- | ---------- | --------- | ---- |
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
創建一個基本的散點圖,展示蜂蜜每磅價格與其來源州之間的關係。將 `y` 軸設置得足夠高以顯示所有州:
```python
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
```
![散點圖 1](../../../../translated_images/zh-TW/scatter1.5e1aa5fd6706c5d12b5e503ccb77f8a930f8620f539f524ddf56a16c039a5d2f.png)
接下來,使用蜂蜜色調展示價格如何隨年份演變。您可以通過添加 'hue' 參數來顯示年份的變化:
> ✅ 了解更多 [Seaborn 中可用的色彩調色板](https://seaborn.pydata.org/tutorial/color_palettes.html) - 試試美麗的彩虹色調!
```python
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
```
![散點圖 2](../../../../translated_images/zh-TW/scatter2.c0041a58621ca702990b001aa0b20cd68c1e1814417139af8a7211a2bed51c5f.png)
通過這種色彩方案的改變,您可以清楚地看到蜂蜜每磅價格在多年來的明顯增長趨勢。事實上,如果您查看數據中的樣本集(例如選擇亞利桑那州),您可以看到價格逐年上漲的模式,僅有少數例外:
| 州 | 蜂群數量 | 每群蜂產量 | 總產量 | 庫存 | 每磅價格 | 生產價值 | 年份 |
| ----- | ------ | ----------- | --------- | ------- | ---------- | --------- | ---- |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
另一種視覺化這種進展的方法是使用大小而非顏色。對於色盲用戶,這可能是一個更好的選擇。編輯您的視覺化,通過點的大小來展示價格的增長:
```python
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
```
您可以看到點的大小逐漸增大。
![散點圖 3](../../../../translated_images/zh-TW/scatter3.3c160a3d1dcb36b37900ebb4cf97f34036f28ae2b7b8e6062766c7c1dfc00853.png)
這是否是一個簡單的供需問題?由於氣候變化和蜂群崩潰等因素,是否每年可供購買的蜂蜜減少,因此價格上漲?
為了探索數據集中某些變數之間的相關性,讓我們來看看一些折線圖。
## 折線圖
問題:蜂蜜每磅價格是否隨年份逐年明顯上升?您可以通過創建一個單一折線圖來最容易地發現這一點:
```python
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
```
答案:是的,但在 2003 年左右有一些例外:
![折線圖 1](../../../../translated_images/zh-TW/line1.f36eb465229a3b1fe385cdc93861aab3939de987d504b05de0b6cd567ef79f43.png)
✅ 由於 Seaborn 將數據聚合到一條線上,它通過繪製均值和均值周圍的 95% 置信區間來顯示「每個 x 值的多個測量值」。[來源](https://seaborn.pydata.org/tutorial/relational.html)。這種耗時的行為可以通過添加 `ci=None` 禁用。
問題:那麼,在 2003 年,我們是否也能看到蜂蜜供應的激增?如果您查看逐年總產量呢?
```python
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
```
![折線圖 2](../../../../translated_images/zh-TW/line2.a5b3493dc01058af6402e657aaa9ae1125fafb5e7d6630c777aa60f900a544e4.png)
答案:並不完全。如果您查看總產量,實際上在那一年似乎有所增加,儘管總體而言蜂蜜的生產量在這些年中呈下降趨勢。
問題在這種情況下2003 年蜂蜜價格的激增可能是什麼原因?
為了探索這一點,您可以使用 Facet Grid。
## Facet Grid
Facet Grid 可以選擇數據集的一個方面(在我們的例子中,您可以選擇「年份」以避免生成過多的 Facet。Seaborn 可以根據您選擇的 x 和 y 坐標為每個 Facet 繪製一個圖表方便比較。2003 年是否在這種比較中顯得突出?
通過繼續使用 `relplot` 創建 Facet Grid這是 [Seaborn 文檔](https://seaborn.pydata.org/generated/seaborn.FacetGrid.html?highlight=facetgrid#seaborn.FacetGrid) 中推薦的方法。
```python
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
)
```
在此視覺化中,您可以比較逐年每群蜂的產量和蜂群數量,並將列的包裹設置為 3
![Facet Grid](../../../../translated_images/zh-TW/facet.6a34851dcd540050dcc0ead741be35075d776741668dd0e42f482c89b114c217.png)
對於這個數據集,逐年和逐州的蜂群數量及其產量並沒有特別突出的地方。是否有其他方式來尋找這兩個變數之間的相關性?
## 雙折線圖
嘗試使用多折線圖,通過將兩個折線圖疊加在一起,使用 Seaborn 的 'despine' 移除其上方和右側的邊框,並使用 `ax.twinx` [源自 Matplotlib](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.twinx.html)。Twins 允許圖表共享 x 軸並顯示兩個 y 軸。因此,疊加顯示每群蜂的產量和蜂群數量:
```python
fig, ax = plt.subplots(figsize=(12,6))
lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey,
label = 'Number of bee colonies', legend=False)
sns.despine()
plt.ylabel('# colonies')
plt.title('Honey Production Year over Year');
ax2 = ax.twinx()
lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r",
label ='Yield per colony', legend=False)
sns.despine(right=False)
plt.ylabel('colony yield')
ax.figure.legend();
```
![疊加折線圖](../../../../translated_images/zh-TW/dual-line.a4c28ce659603fab2c003f4df816733df2bf41d1facb7de27989ec9afbf01b33.png)
雖然在 2003 年左右沒有明顯的異常,但這讓我們可以以一個稍微樂觀的結論結束本課:儘管蜂群數量總體上在下降,但蜂群數量正在穩定,即使每群蜂的產量在減少。
加油,蜜蜂們!
🐝❤️
## 🚀 挑戰
在本課中,您學到了更多關於散點圖和折線圖的其他用途,包括 Facet Grid。挑戰自己使用不同的數據集創建 Facet Grid也許是您之前課程中使用過的數據集。注意它們的生成時間以及如何小心選擇需要繪製的網格數量。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/23)
## 回顧與自學
折線圖可以很簡單,也可以非常複雜。閱讀 [Seaborn 文檔](https://seaborn.pydata.org/generated/seaborn.lineplot.html) 中的相關內容,了解您可以如何構建它們。嘗試使用文檔中列出的其他方法來增強您在本課中構建的折線圖。
## 作業
[深入蜂巢](assignment.md)
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,14 @@
# 探索蜂巢
## 說明
在本課程中,你開始研究一組有關蜜蜂及其蜂蜜產量的數據,涵蓋了一段時間內蜂群數量整體下降的情況。深入分析這組數據,建立一個筆記本,講述蜂群健康狀況的故事,按州和年份進行分析。你是否在這組數據中發現了任何有趣的內容?
## 評分標準
| 卓越表現 | 合格表現 | 需要改進 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------- |
| 提供了一個筆記本,包含至少三個不同的圖表,註解展示數據集的各個方面,按州和年份進行分析 | 筆記本缺少其中一個元素 | 筆記本缺少其中兩個元素 |
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,32 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# 視覺化蜂蜜生產 🍯 🐝\n"
],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python"
},
"coopTranslator": {
"original_hash": "0f988634b7192626d91cc33b4b6388c5",
"translation_date": "2025-09-02T08:57:51+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/notebook.ipynb",
"language_code": "tw"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,173 @@
# 製作有意義的視覺化圖表
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/13-MeaningfulViz.png)|
|:---:|
| 有意義的視覺化圖表 - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ |
> 「如果你對數據施加足夠的壓力,它會承認任何事情」-- [Ronald Coase](https://en.wikiquote.org/wiki/Ronald_Coase)
作為一名數據科學家,基本技能之一就是能夠創建有意義的數據視覺化,幫助回答你可能提出的問題。在進行數據視覺化之前,你需要確保數據已經像之前課程中所教的那樣進行清理和準備。之後,你就可以開始決定如何最佳地呈現數據。
在本課中,你將學習:
1. 如何選擇合適的圖表類型
2. 如何避免誤導性的圖表
3. 如何使用顏色
4. 如何設計圖表以提高可讀性
5. 如何構建動畫或3D圖表解決方案
6. 如何創建創意視覺化
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/24)
## 選擇合適的圖表類型
在之前的課程中,你已經嘗試使用 Matplotlib 和 Seaborn 創建各種有趣的數據視覺化圖表。通常,你可以根據這張表格選擇[合適的圖表類型](https://chartio.com/learn/charts/how-to-select-a-data-vizualization/)來回答你的問題:
| 你的需求是: | 你應該使用: |
| -------------------------- | --------------------------- |
| 展示隨時間變化的數據趨勢 | 折線圖 |
| 比較不同類別 | 柱狀圖、餅圖 |
| 比較總量 | 餅圖、堆疊柱狀圖 |
| 展示關係 | 散點圖、折線圖、分面圖、雙折線圖 |
| 展示分佈 | 散點圖、直方圖、箱型圖 |
| 展示比例 | 餅圖、甜甜圈圖、華夫圖 |
> ✅ 根據數據的組成,你可能需要將其從文本轉換為數字,以支持某些圖表類型。
## 避免誤導
即使數據科學家謹慎地選擇了合適的圖表類型,數據仍然可能被以某種方式展示來支持某個觀點,往往以犧牲數據本身為代價。有許多誤導性圖表和信息圖的例子!
[![Alberto Cairo 的《How Charts Lie》](../../../../3-Data-Visualization/13-meaningful-visualizations/images/tornado.png)](https://www.youtube.com/watch?v=oX74Nge8Wkw "How charts lie")
> 🎥 點擊上方圖片觀看關於誤導性圖表的會議演講
這張圖表反轉了 X 軸,根據日期顯示了與事實相反的內容:
![糟糕的圖表 1](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-1.png)
[這張圖表](https://media.firstcoastnews.com/assets/WTLV/images/170ae16f-4643-438f-b689-50d66ca6a8d8/170ae16f-4643-438f-b689-50d66ca6a8d8_1140x641.jpg) 更具誤導性,因為視覺上吸引人注意的是右側,讓人得出隨時間推移各縣的 COVID 病例數下降的結論。事實上,如果仔細查看日期,你會發現日期被重新排列以製造這種下降趨勢。
![糟糕的圖表 2](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-2.jpg)
這個臭名昭著的例子使用顏色和翻轉的 Y 軸來誤導:原本應該得出槍支友好立法通過後槍支死亡率激增的結論,卻讓人誤以為情況正好相反:
![糟糕的圖表 3](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-3.jpg)
這張奇怪的圖表展示了比例如何被操控,效果令人捧腹:
![糟糕的圖表 4](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-4.jpg)
比較不可比的事物是另一種不正當的手段。有一個[精彩的網站](https://tylervigen.com/spurious-correlations)專門展示「虛假的相關性」,例如緬因州的離婚率與人造奶油的消耗量之間的「事實」相關性。一個 Reddit 群組也收集了[糟糕的數據使用](https://www.reddit.com/r/dataisugly/top/?t=all)。
了解眼睛如何容易被誤導性圖表欺騙是很重要的。即使數據科學家的意圖是好的,選擇不合適的圖表類型(例如顯示過多類別的餅圖)也可能具有誤導性。
## 顏色
你在上面「佛羅里達槍支暴力」的圖表中看到,顏色可以為圖表提供額外的意義,尤其是那些不是使用 Matplotlib 和 Seaborn 等庫設計的圖表,這些庫自帶各種經過驗證的顏色庫和調色板。如果你是手動製作圖表,可以稍微研究一下[顏色理論](https://colormatters.com/color-and-design/basic-color-theory)。
> ✅ 在設計圖表時,請注意可訪問性是視覺化的重要方面。一些用戶可能是色盲——你的圖表是否對視覺障礙者友好?
選擇圖表顏色時要謹慎,因為顏色可能傳達你未曾預料的含義。上面「身高」圖表中的「粉紅女士」傳達了一種明顯的「女性化」意義,這增加了圖表本身的怪異感。
雖然[顏色的含義](https://colormatters.com/color-symbolism/the-meanings-of-colors)可能因地區而異,並且根據色調的不同而改變,但一般來說,顏色的含義包括:
| 顏色 | 含義 |
| ------ | ------------------- |
| 紅色 | 力量 |
| 藍色 | 信任、忠誠 |
| 黃色 | 快樂、警告 |
| 綠色 | 生態、幸運、嫉妒 |
| 紫色 | 快樂 |
| 橙色 | 活力 |
如果你需要使用自定義顏色製作圖表,請確保你的圖表既可訪問又符合你想要傳達的含義。
## 設計圖表以提高可讀性
如果圖表不可讀,那就沒有意義!花點時間考慮調整圖表的寬度和高度,使其能很好地與數據匹配。如果需要顯示一個變量(例如所有 50 個州),請盡可能在 Y 軸上垂直顯示,以避免水平滾動的圖表。
標註你的軸,必要時提供圖例,並提供工具提示以便更好地理解數據。
如果你的數據在 X 軸上是文本且冗長,可以將文本傾斜以提高可讀性。[Matplotlib](https://matplotlib.org/stable/tutorials/toolkits/mplot3d.html) 提供了 3D 繪圖功能,如果你的數據支持它。使用 `mpl_toolkits.mplot3d` 可以生成精美的數據視覺化。
![3D 圖表](../../../../3-Data-Visualization/13-meaningful-visualizations/images/3d.png)
## 動畫和 3D 圖表展示
如今一些最好的數據視覺化是動畫化的。Shirley Wu 使用 D3 創作了令人驚嘆的作品,例如「[電影之花](http://bl.ocks.org/sxywu/raw/d612c6c653fb8b4d7ff3d422be164a5d/)」每朵花都是一部電影的視覺化。另一個例子是《衛報》的「Bussed Out」這是一個結合 Greensock 和 D3 的交互式體驗,並以滾動敘事文章格式展示紐約市如何通過將人們送出城市來處理無家可歸者問題。
![Bussed Out](../../../../3-Data-Visualization/13-meaningful-visualizations/images/busing.png)
> 「Bussed Out: How America Moves its Homeless」來自[衛報](https://www.theguardian.com/us-news/ng-interactive/2017/dec/20/bussed-out-america-moves-homeless-people-country-study)。視覺化由 Nadieh Bremer 和 Shirley Wu 創作
雖然本課程不足以深入教授這些強大的視覺化庫,但你可以嘗試在 Vue.js 應用中使用 D3創建一本書《危險關係》的動畫社交網絡視覺化。
> 《Les Liaisons Dangereuses》危險關係是一部書信體小說即以一系列信件形式呈現的小說。由 Choderlos de Laclos 於 1782 年撰寫,講述了 18 世紀晚期法國貴族中兩位主角 Vicomte de Valmont 和 Marquise de Merteuil 的惡毒、道德淪喪的社交操縱故事。兩人最終都遭遇了悲劇,但在此之前造成了大量社會損害。小說以寫給圈內各人的信件形式展開,內容涉及復仇或純粹製造麻煩。創建這些信件的視覺化,探索敘事中的主要角色,並以視覺方式呈現。
你將完成一個網頁應用,展示這個社交網絡的動畫視圖。它使用了一個庫來創建[網絡視覺化](https://github.com/emiliorizzo/vue-d3-network),基於 Vue.js 和 D3。當應用運行時你可以在屏幕上拖動節點來重新排列數據。
![危險關係](../../../../3-Data-Visualization/13-meaningful-visualizations/images/liaisons.png)
## 專案:使用 D3.js 構建一個展示網絡的圖表
> 本課程文件夾包含一個 `solution` 文件夾,你可以在其中找到完整的專案作為參考。
1. 按照起始文件夾根目錄中的 README.md 文件中的指示操作。在安裝專案依賴項之前,確保你的機器上已運行 NPM 和 Node.js。
2. 打開 `starter/src` 文件夾。你會發現一個 `assets` 文件夾,其中包含一個 .json 文件記錄了所有信件編號並附有「to」和「from」註釋。
3. 完成 `components/Nodes.vue` 中的代碼以啟用視覺化。找到名為 `createLinks()` 的方法,並添加以下嵌套循環。
循環遍歷 .json 對象以捕獲信件的「to」和「from」數據並構建 `links` 對象,以便視覺化庫可以使用:
```javascript
//loop through letters
let f = 0;
let t = 0;
for (var i = 0; i < letters.length; i++) {
for (var j = 0; j < characters.length; j++) {
if (characters[j] == letters[i].from) {
f = j;
}
if (characters[j] == letters[i].to) {
t = j;
}
}
this.links.push({ sid: f, tid: t });
}
```
從終端運行你的應用npm run serve享受視覺化效果
## 🚀 挑戰
在網絡上探索誤導性視覺化。作者如何欺騙用戶?這是故意的嗎?嘗試修正這些視覺化,展示它們應該如何呈現。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/25)
## 回顧與自學
以下是一些關於誤導性數據視覺化的文章:
https://gizmodo.com/how-to-lie-with-data-visualization-1563576606
http://ixd.prattsi.org/2017/12/visual-lies-usability-in-deceptive-data-visualizations/
看看這些有趣的歷史資產和文物視覺化:
https://handbook.pubpub.org/
閱讀這篇文章,了解動畫如何增強你的視覺化:
https://medium.com/@EvanSinar/use-animation-to-supercharge-data-visualization-cd905a882ad4
## 作業
[創建你自己的自定義視覺化](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,14 @@
# 建立自己的自訂視覺化
## 指導說明
使用此專案中的程式碼範例來建立一個社交網絡,模擬您自己的社交互動數據。您可以繪製自己的社交媒體使用情況,或者製作一個家庭成員的圖表。創建一個有趣的網頁應用程式,展示一個獨特的社交網絡視覺化。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
提供一個 GitHub 儲存庫,其中的程式碼能正常運行(嘗試將其部署為靜態網頁應用程式),並且有一份註解清晰的 README 文件解釋專案 | 儲存庫無法正常運行或文件記錄不充分 | 儲存庫無法正常運行且文件記錄不充分
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用本翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,29 @@
# 危險關係數據可視化項目
開始之前,請確保您的電腦上已安裝 NPM 和 Node。安裝依賴項npm install然後在本地運行項目npm run serve
## 項目設置
```
npm install
```
### 編譯並熱重載以進行開發
```
npm run serve
```
### 編譯並壓縮以進行生產環境
```
npm run build
```
### 檢查並修復文件
```
npm run lint
```
### 自定義配置
請參閱 [配置參考](https://cli.vuejs.org/config/)。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,29 @@
# 危險關係數據可視化項目
開始之前,請確保您的機器上已安裝 NPM 和 Node。安裝依賴項npm install然後在本地運行項目npm run serve
## 項目設置
```
npm install
```
### 編譯並熱重載以進行開發
```
npm run serve
```
### 編譯並壓縮以進行生產環境
```
npm run build
```
### 檢查並修復文件
```
npm run lint
```
### 自定義配置
請參閱 [配置參考](https://cli.vuejs.org/config/)。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,223 @@
# 視覺化數量
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| 視覺化數量 - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ |
在本課程中,您將探索如何使用一些可用的 R 套件庫,學習如何圍繞數量概念創建有趣的視覺化。使用有關明尼蘇達州鳥類的清理後數據集,您可以了解許多有趣的本地野生動物事實。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/16)
## 使用 ggplot2 觀察翼展
一個非常出色的庫是 [ggplot2](https://cran.r-project.org/web/packages/ggplot2/index.html),它可以用來創建各種簡單或複雜的圖表和圖形。一般來說,使用這些庫繪製數據的過程包括:識別您想要處理的數據框部分,對數據進行必要的轉換,分配其 x 和 y 軸值,決定要顯示的圖表類型,然後顯示圖表。
`ggplot2` 是一個基於圖形語法Grammar of Graphics聲明性創建圖形的系統。[圖形語法](https://en.wikipedia.org/wiki/Ggplot2) 是一種通用的數據視覺化方案,它將圖形分解為語義組件,例如比例和層次。換句話說,使用少量代碼即可輕鬆為單變量或多變量數據創建圖表和圖形,使得 `ggplot2` 成為 R 中最受歡迎的視覺化套件。使用者告訴 `ggplot2` 如何將變量映射到美學屬性、使用哪些圖形元素,然後 `ggplot2` 負責其餘部分。
> ✅ 圖表 = 數據 + 美學 + 幾何
> - 數據指的是數據集
> - 美學表示要研究的變量x 和 y 變量)
> - 幾何指的是圖表類型(折線圖、柱狀圖等)
根據您的數據和希望通過圖表講述的故事,選擇最佳的幾何(圖表類型)。
> - 分析趨勢:折線圖、柱狀圖
> - 比較數值:條形圖、柱狀圖、餅圖、散點圖
> - 顯示部分與整體的關係:餅圖
> - 顯示數據分佈:散點圖、柱狀圖
> - 顯示數值之間的關係:折線圖、散點圖、氣泡圖
✅ 您也可以查看這份描述性的 [ggplot2 速查表](https://nyu-cdsc.github.io/learningr/assets/data-visualization-2.1.pdf)。
## 建立鳥類翼展值的折線圖
打開 R 控制台並導入數據集。
> 注意:數據集存儲在此 repo 的 `/data` 文件夾中。
讓我們導入數據集並觀察數據的頭部(前 5 行)。
```r
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
head(birds)
```
數據的頭部包含文本和數字的混合:
| | 名稱 | 學名 | 類別 | 目 | 科 | 屬 | 保育狀態 | 最小長度 | 最大長度 | 最小體重 | 最大體重 | 最小翼展 | 最大翼展 |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | 黑腹樹鴨 | Dendrocygna autumnalis | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | 棕樹鴨 | Dendrocygna bicolor | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | 雪鵝 | Anser caerulescens | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | 羅斯鵝 | Anser rossii | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | 大白額雁 | Anser albifrons | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
讓我們開始使用基本折線圖繪製一些數值數據。假設您想查看這些有趣鳥類的最大翼展。
```r
install.packages("ggplot2")
library("ggplot2")
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line()
```
在這裡,您安裝了 `ggplot2` 套件,然後使用 `library("ggplot2")` 命令將其導入工作空間。要在 ggplot 中繪製任何圖表,使用 `ggplot()` 函數並指定數據集、x 和 y 變量作為屬性。在此情況下,我們使用 `geom_line()` 函數,因為我們的目標是繪製折線圖。
![MaxWingspan-lineplot](../../../../../translated_images/zh-TW/MaxWingspan-lineplot.b12169f99d26fdd263f291008dfd73c18a4ba8f3d32b1fda3d74af51a0a28616.png)
您立即注意到什麼似乎至少有一個異常值——那是一個相當大的翼展2000+ 公分的翼展超過 20 公尺——明尼蘇達州有翼龍在漫遊嗎?讓我們調查一下。
雖然您可以在 Excel 中快速排序以找到這些可能是錯誤的異常值,但請繼續從圖表內部進行視覺化處理。
為 x 軸添加標籤以顯示涉及哪些鳥類:
```r
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line() +
theme(axis.text.x = element_text(angle = 45, hjust=1))+
xlab("Birds") +
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters")
```
我們在 `theme` 中指定角度,並分別在 `xlab()``ylab()` 中指定 x 和 y 軸標籤。`ggtitle()` 為圖表/圖形命名。
![MaxWingspan-lineplot-improved](../../../../../translated_images/zh-TW/MaxWingspan-lineplot-improved.04b73b4d5a59552a6bc7590678899718e1f065abe9eada9ebb4148939b622fd4.png)
即使將標籤旋轉設置為 45 度,仍然有太多標籤無法閱讀。讓我們嘗試另一種策略:僅標記那些異常值並在圖表內設置標籤。您可以使用散點圖來為標籤留出更多空間:
```r
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank())
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters") +
```
這裡發生了什麼?您使用 `geom_point()` 函數繪製散點。通過這個,您為 `MaxWingspan > 500` 的鳥類添加了標籤,並隱藏了 x 軸上的標籤以減少圖表的混亂。
您發現了什麼?
![MaxWingspan-scatterplot](../../../../../translated_images/zh-TW/MaxWingspan-scatterplot.60dc9e0e19d32700283558f253841fdab5104abb62bc96f7d97f9c0ee857fa8b.png)
## 篩選數據
禿鷹和草原隼,雖然可能是非常大的鳥類,但似乎被錯誤標記了,其最大翼展多加了一個 0。遇到翼展 25 公尺的禿鷹的可能性不大,但如果有,請告訴我們!讓我們創建一個新的數據框,去掉這兩個異常值:
```r
birds_filtered <- subset(birds, MaxWingspan < 500)
ggplot(data=birds_filtered, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
ylab("Wingspan (CM)") +
xlab("Birds") +
ggtitle("Max Wingspan in Centimeters") +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.text.x=element_blank(), axis.ticks.x=element_blank())
```
我們創建了一個新的數據框 `birds_filtered`,然後繪製了一個散點圖。通過篩選掉異常值,您的數據現在更加一致且易於理解。
![MaxWingspan-scatterplot-improved](../../../../../translated_images/zh-TW/MaxWingspan-scatterplot-improved.7d0af81658c65f3e75b8fedeb2335399e31108257e48db15d875ece608272051.png)
現在我們至少在翼展方面有了一個更乾淨的數據集,讓我們進一步了解這些鳥類。
雖然折線圖和散點圖可以顯示有關數據值及其分佈的信息,但我們希望思考這個數據集中固有的數值。您可以創建視覺化來回答以下有關數量的問題:
> 有多少類別的鳥類?它們的數量是多少?
> 有多少鳥類是滅絕、瀕危、稀有或常見的?
> 根據林奈的術語,有多少屬和目?
## 探索條形圖
當您需要顯示數據分組時,條形圖非常實用。讓我們探索這個數據集中存在的鳥類類別,看看哪一類最常見。
讓我們在篩選後的數據上創建一個條形圖。
```r
install.packages("dplyr")
install.packages("tidyverse")
library(lubridate)
library(scales)
library(dplyr)
library(ggplot2)
library(tidyverse)
birds_filtered %>% group_by(Category) %>%
summarise(n=n(),
MinLength = mean(MinLength),
MaxLength = mean(MaxLength),
MinBodyMass = mean(MinBodyMass),
MaxBodyMass = mean(MaxBodyMass),
MinWingspan=mean(MinWingspan),
MaxWingspan=mean(MaxWingspan)) %>%
gather("key", "value", - c(Category, n)) %>%
ggplot(aes(x = Category, y = value, group = key, fill = key)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("#D62728", "#FF7F0E", "#8C564B","#2CA02C", "#1F77B4", "#9467BD")) +
xlab("Category")+ggtitle("Birds of Minnesota")
```
在以下代碼片段中,我們安裝了 [dplyr](https://www.rdocumentation.org/packages/dplyr/versions/0.7.8) 和 [lubridate](https://www.rdocumentation.org/packages/lubridate/versions/1.8.0) 套件,以幫助操作和分組數據以繪製堆疊條形圖。首先,您按鳥類的 `Category` 分組數據,然後總結 `MinLength`、`MaxLength`、`MinBodyMass`、`MaxBodyMass`、`MinWingspan`、`MaxWingspan` 列。接著,使用 `ggplot2` 套件繪製條形圖並指定不同類別的顏色和標籤。
![Stacked bar chart](../../../../../translated_images/zh-TW/stacked-bar-chart.0c92264e89da7b391a7490224d1e7059a020e8b74dcd354414aeac78871c02f1.png)
然而,這個條形圖因為有太多未分組的數據而難以閱讀。您需要選擇要繪製的數據,因此讓我們看看基於鳥類類別的鳥類長度。
篩選您的數據以僅包含鳥類的類別。
由於有許多類別,您可以垂直顯示此圖表並調整其高度以容納所有數據:
```r
birds_count<-dplyr::count(birds_filtered, Category, sort = TRUE)
birds_count$Category <- factor(birds_count$Category, levels = birds_count$Category)
ggplot(birds_count,aes(Category,n))+geom_bar(stat="identity")+coord_flip()
```
您首先計算 `Category` 列中的唯一值,然後將它們排序到新的數據框 `birds_count` 中。這些排序後的數據在相同層次中進行分級,以便按排序方式繪製。使用 `ggplot2`,您接著繪製條形圖。`coord_flip()` 繪製水平條形圖。
![category-length](../../../../../translated_images/zh-TW/category-length.7e34c296690e85d64f7e4d25a56077442683eca96c4f5b4eae120a64c0755636.png)
此條形圖清楚地顯示了每個類別中鳥類的數量。一眼就能看出,在這個地區,鴨/鵝/水禽類別的鳥類數量最多。明尼蘇達州是“萬湖之地”,所以這並不令人驚訝!
✅ 嘗試對此數據集進行其他計數。是否有任何結果令您驚訝?
## 比較數據
您可以通過創建新的軸嘗試不同的分組數據比較。嘗試比較基於鳥類類別的最大長度:
```r
birds_grouped <- birds_filtered %>%
group_by(Category) %>%
summarise(
MaxLength = max(MaxLength, na.rm = T),
MinLength = max(MinLength, na.rm = T)
) %>%
arrange(Category)
ggplot(birds_grouped,aes(Category,MaxLength))+geom_bar(stat="identity")+coord_flip()
```
我們按 `Category` 分組 `birds_filtered` 數據,然後繪製條形圖。
![comparing data](../../../../../translated_images/zh-TW/comparingdata.f486a450d61c7ca5416f27f3f55a6a4465d00df3be5e6d33936e9b07b95e2fdd.png)
這裡沒有什麼令人驚訝的:蜂鳥的最大長度比鵜鶘或鵝要小得多。當數據符合邏輯時,這是件好事!
您可以通過疊加數據創建更有趣的條形圖視覺化。讓我們在給定的鳥類類別上疊加最小和最大長度:
```r
ggplot(data=birds_grouped, aes(x=Category)) +
geom_bar(aes(y=MaxLength), stat="identity", position ="identity", fill='blue') +
geom_bar(aes(y=MinLength), stat="identity", position="identity", fill='orange')+
coord_flip()
```
![super-imposed values](../../../../../translated_images/zh-TW/superimposed-values.5363f0705a1da4167625a373a1064331ea3cb7a06a297297d0734fcc9b3819a0.png)
## 🚀 挑戰
這個鳥類數據集提供了大量有關特定生態系統中不同類型鳥類的信息。在網上搜索,看看是否能找到其他與鳥類相關的數據集。練習圍繞這些鳥類構建圖表和圖形,發現您之前未曾意識到的事實。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/17)
## 回顧與自學
本課程的第一課向您介紹了如何使用 `ggplot2` 視覺化數量。進一步研究其他方法來處理數據集進行視覺化。研究並尋找可以使用其他套件(如 [Lattice](https://stat.ethz.ch/R-manual/R-devel/library/lattice/html/Lattice.html) 和 [Plotly](https://github.com/plotly/plotly.R#readme))進行視覺化的數據集。
## 作業
[折線圖、散點圖和條形圖](assignment.md)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不精確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,14 @@
# 折線圖、散點圖與長條圖
## 說明
在這節課中,你學習了如何使用折線圖、散點圖和長條圖來展示這個數據集中的有趣事實。在這次作業中,深入挖掘數據集,發現關於某種特定鳥類的事實。例如,撰寫一個腳本,將你能找到的所有關於雪雁的有趣數據可視化。使用上述三種圖表,在你的筆記本中講述一個故事。
## 評分標準
優秀 | 合格 | 需要改進
--- | --- | -- |
腳本具有良好的註解、完整的故事性以及吸引人的圖表 | 腳本缺少其中一個要素 | 腳本缺少其中兩個要素
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。

@ -0,0 +1,172 @@
# 視覺化分佈
|![ 由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記 ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| 視覺化分佈 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 繪製_ |
在上一課中,你學習了關於明尼蘇達州鳥類數據集的一些有趣事實。通過視覺化異常值,你發現了一些錯誤的數據,並通過最大長度比較了不同鳥類類別的差異。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
## 探索鳥類數據集
另一種深入了解數據的方法是查看其分佈,或者數據如何沿著某個軸排列。例如,你可能想了解這個數據集中鳥類的最大翼展或最大體重的一般分佈情況。
讓我們來發現一些關於這個數據集中數據分佈的事實。在你的 R 控制台中,導入 `ggplot2` 和數據庫。像上一個主題中一樣,從數據庫中移除異常值。
```r
library(ggplot2)
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
birds_filtered <- subset(birds, MaxWingspan < 500)
head(birds_filtered)
```
| | 名稱 | 學名 | 類別 | 目 | 科 | 屬 | 保育狀況 | 最小長度 | 最大長度 | 最小體重 | 最大體重 | 最小翼展 | 最大翼展 |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | 黑腹樹鴨 | Dendrocygna autumnalis | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | 棕樹鴨 | Dendrocygna bicolor | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | 雪雁 | Anser caerulescens | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | 羅斯雁 | Anser rossii | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | 大白額雁 | Anser albifrons | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
通常,你可以通過使用散點圖快速查看數據的分佈方式,就像我們在上一課中所做的那樣:
```r
ggplot(data=birds_filtered, aes(x=Order, y=MaxLength,group=1)) +
geom_point() +
ggtitle("Max Length per order") + coord_flip()
```
![每目最大長度](../../../../../translated_images/zh-TW/max-length-per-order.e5b283d952c78c12b091307c5d3cf67132dad6fefe80a073353b9dc5c2bd3eb8.png)
這提供了每個鳥類目身體長度的一般分佈概覽,但這並不是顯示真實分佈的最佳方式。這項任務通常通過創建直方圖來完成。
## 使用直方圖
`ggplot2` 提供了非常好的方法來使用直方圖視覺化數據分佈。這種類型的圖表類似於條形圖,通過條形的升降可以看到分佈情況。要構建直方圖,你需要數值數據。構建直方圖時,可以將圖表類型定義為 'hist' 來表示直方圖。此圖表顯示了整個數據集中 MaxBodyMass 的分佈範圍。通過將數據陣列分成較小的區間,它可以顯示數據值的分佈:
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
geom_histogram(bins=10)+ylab('Frequency')
```
![整個數據集的分佈](../../../../../translated_images/zh-TW/distribution-over-the-entire-dataset.d22afd3fa96be854e4c82213fedec9e3703cba753d07fad4606aadf58cf7e78e.png)
如你所見,這個數據集中大多數的 400 多種鳥類的最大體重都在 2000 以下。通過將 `bins` 參數更改為更高的數字,例如 30可以獲得更多的數據洞察
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')
```
![30 個區間的分佈](../../../../../translated_images/zh-TW/distribution-30bins.6a3921ea7a421bf71f06bf5231009e43d1146f1b8da8dc254e99b5779a4983e5.png)
此圖表以更細緻的方式顯示了分佈。通過確保僅選擇特定範圍內的數據,可以創建一個不那麼偏向左側的圖表:
篩選數據以僅獲取體重低於 60 的鳥類,並顯示 30 個 `bins`
```r
birds_filtered_1 <- subset(birds_filtered, MaxBodyMass > 1 & MaxBodyMass < 60)
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_histogram(bins=30)+ylab('Frequency')
```
![篩選後的直方圖](../../../../../translated_images/zh-TW/filtered-histogram.6bf5d2bfd82533220e1bd4bc4f7d14308f43746ed66721d9ec8f460732be6674.png)
✅ 嘗試其他篩選條件和數據點。要查看數據的完整分佈,移除 `['MaxBodyMass']` 篩選條件以顯示帶標籤的分佈。
直方圖還提供了一些不錯的顏色和標籤增強功能可以嘗試:
創建一個 2D 直方圖來比較兩個分佈之間的關係。我們來比較 `MaxBodyMass``MaxLength`。`ggplot2` 提供了一種內建方式來通過更亮的顏色顯示匯聚點:
```r
ggplot(data=birds_filtered_1, aes(x=MaxBodyMass, y=MaxLength) ) +
geom_bin2d() +scale_fill_continuous(type = "viridis")
```
看起來這兩個元素沿著預期的軸有一個預期的相關性,其中有一個特別強的匯聚點:
![2D 圖](../../../../../translated_images/zh-TW/2d-plot.c504786f439bd7ebceebf2465c70ca3b124103e06c7ff7214bf24e26f7aec21e.png)
直方圖對於數值數據默認效果很好。如果你需要根據文本數據查看分佈該怎麼辦?
## 使用文本數據探索數據集的分佈
此數據集還包括有關鳥類類別及其屬、種、科以及保育狀況的良好信息。讓我們深入了解這些保育信息。鳥類根據其保育狀況的分佈是什麼樣的?
> ✅ 在數據集中,使用了一些縮寫來描述保育狀況。這些縮寫來自 [IUCN 紅色名錄分類](https://www.iucnredlist.org/),該組織記錄了物種的狀況。
>
> - CR: 極危
> - EN: 瀕危
> - EX: 滅絕
> - LC: 無危
> - NT: 近危
> - VU: 易危
這些是基於文本的值,因此你需要進行轉換來創建直方圖。使用篩選後的鳥類數據框架,顯示其保育狀況與最小翼展。你看到了什麼?
```r
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EX'] <- 'x1'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'CR'] <- 'x2'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EN'] <- 'x3'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'NT'] <- 'x4'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'VU'] <- 'x5'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'LC'] <- 'x6'
ggplot(data=birds_filtered_1, aes(x = MinWingspan, fill = ConservationStatus)) +
geom_histogram(position = "identity", alpha = 0.4, bins = 20) +
scale_fill_manual(name="Conservation Status",values=c("red","green","blue","pink"),labels=c("Endangered","Near Threathened","Vulnerable","Least Concern"))
```
![翼展與保育狀況的對比](../../../../../translated_images/zh-TW/wingspan-conservation-collation.4024e9aa6910866aa82f0c6cb6a6b4b925bd10079e6b0ef8f92eefa5a6792f76.png)
最小翼展與保育狀況之間似乎沒有明顯的相關性。使用此方法測試數據集的其他元素。你也可以嘗試不同的篩選條件。你發現了任何相關性嗎?
## 密度圖
你可能已經注意到,我們目前看到的直方圖是“階梯式”的,並未以平滑的弧線呈現。要顯示更平滑的密度圖,可以嘗試密度圖。
現在讓我們來使用密度圖!
```r
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
geom_density()
```
![密度圖](../../../../../translated_images/zh-TW/density-plot.675ccf865b76c690487fb7f69420a8444a3515f03bad5482886232d4330f5c85.png)
你可以看到,這個圖表反映了之前的最小翼展數據,只是稍微平滑了一些。如果你想重新訪問第二個圖表中那條鋸齒狀的 MaxBodyMass 線,可以通過這種方法非常好地將其平滑化:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density()
```
![體重密度](../../../../../translated_images/zh-TW/bodymass-smooth.d31ce526d82b0a1f19a073815dea28ecfbe58145ec5337e4ef7e8cdac81120b3.png)
如果你想要一條平滑但不過於平滑的線,可以編輯 `adjust` 參數:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density(adjust = 1/5)
```
![較不平滑的體重](../../../../../translated_images/zh-TW/less-smooth-bodymass.10f4db8b683cc17d17b2d33f22405413142004467a1493d416608dafecfdee23.png)
✅ 閱讀此類圖表可用的參數並進行實驗!
這種類型的圖表提供了非常直觀的視覺化效果。例如,通過幾行代碼,你可以顯示每個鳥類目最大體重的密度:
```r
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
geom_density(alpha=0.5)
```
![每目體重](../../../../../translated_images/zh-TW/bodymass-per-order.9d2b065dd931b928c839d8cdbee63067ab1ae52218a1b90717f4bc744354f485.png)
## 🚀 挑戰
直方圖比基本的散點圖、條形圖或折線圖更為複雜。上網搜索一些使用直方圖的好例子。它們是如何使用的,展示了什麼,以及它們通常在哪些領域或研究中被使用?
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)
## 回顧與自學
在本課中,你使用了 `ggplot2` 並開始製作更為複雜的圖表。研究一下 `geom_density_2d()`,這是一種“在一個或多個維度上的連續概率密度曲線”。閱讀 [文檔](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) 以了解其工作原理。
## 作業
[應用你的技能](assignment.md)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,14 @@
# 運用你的技能
## 指示
到目前為止,你已經使用了明尼蘇達州鳥類數據集來探索有關鳥類數量和人口密度的信息。嘗試運用這些技術來分析另一個數據集,或許可以從 [Kaggle](https://www.kaggle.com/) 獲取。撰寫一個 R 腳本來講述這個數據集的故事,並確保在討論時使用直方圖。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
提供了一個腳本,包含有關此數據集的註解,包括其來源,並使用至少 5 個直方圖來探索數據的事實。 | 提供了一個腳本,但註解不完整或存在錯誤。 | 提供了一個腳本,但沒有註解且包含錯誤。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,189 @@
# 視覺化比例
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記筆記](../../../sketchnotes/11-Visualizing-Proportions.png)|
|:---:|
|視覺化比例 - _由 [@nitya](https://twitter.com/nitya) 繪製的速記筆記_ |
在本課程中,你將使用一個以自然為主題的數據集來視覺化比例,例如在一個關於蘑菇的數據集中有多少不同類型的真菌。讓我們使用一個來自 Audubon 的數據集來探索這些迷人的真菌,該數據集列出了 Agaricus 和 Lepiota 家族中 23 種有鰓蘑菇的詳細信息。你將嘗試一些有趣的視覺化方式,例如:
- 圓餅圖 🥧
- 甜甜圈圖 🍩
- 華夫圖 🧇
> 💡 微軟研究院的一個非常有趣的項目 [Charticulator](https://charticulator.com) 提供了一個免費的拖放界面,用於數據視覺化。在他們的一個教程中,他們也使用了這個蘑菇數據集!因此,你可以同時探索數據並學習這個工具庫:[Charticulator 教程](https://charticulator.com/tutorials/tutorial4.html)。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/20)
## 認識你的蘑菇 🍄
蘑菇非常有趣。讓我們導入一個數據集來研究它們:
```r
mushrooms = read.csv('../../data/mushrooms.csv')
head(mushrooms)
```
一個表格被打印出來,包含一些很棒的分析數據:
| 類別 | 菌蓋形狀 | 菌蓋表面 | 菌蓋顏色 | 是否有瘀傷 | 氣味 | 鰓附著方式 | 鰓間距 | 鰓大小 | 鰓顏色 | 菌柄形狀 | 菌柄根部 | 菌柄表面(環上方) | 菌柄表面(環下方) | 菌柄顏色(環上方) | 菌柄顏色(環下方) | 菌幕類型 | 菌幕顏色 | 環數量 | 環類型 | 孢子印顏色 | 分布 | 棲息地 |
| --------- | --------- | ----------- | --------- | ------- | ------- | --------------- | ------------ | --------- | ---------- | ----------- | ---------- | ------------------------ | ------------------------ | ---------------------- | ---------------------- | --------- | ---------- | ----------- | --------- | ----------------- | ---------- | ------- |
| 有毒 | 凸形 | 光滑 | 棕色 | 有瘀傷 | 刺鼻 | 自由附著 | 緊密 | 狹窄 | 黑色 | 擴大 | 等長 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 黑色 | 分散 | 城市 |
| 可食用 | 凸形 | 光滑 | 黃色 | 有瘀傷 | 杏仁 | 自由附著 | 緊密 | 寬廣 | 黑色 | 擴大 | 棍狀 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 棕色 | 多數 | 草地 |
| 可食用 | 鐘形 | 光滑 | 白色 | 有瘀傷 | 茴香 | 自由附著 | 緊密 | 寬廣 | 棕色 | 擴大 | 棍狀 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 棕色 | 多數 | 草原 |
| 有毒 | 凸形 | 鱗片狀 | 白色 | 有瘀傷 | 刺鼻 | 自由附著 | 緊密 | 狹窄 | 棕色 | 擴大 | 等長 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 黑色 | 分散 | 城市 |
| 可食用 | 凸形 | 光滑 | 綠色 | 無瘀傷 | 無氣味 | 自由附著 | 擁擠 | 寬廣 | 黑色 | 錐形 | 等長 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 消失 | 棕色 | 豐富 | 草地 |
| 可食用 | 凸形 | 鱗片狀 | 黃色 | 有瘀傷 | 杏仁 | 自由附著 | 緊密 | 寬廣 | 棕色 | 擴大 | 棍狀 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 黑色 | 多數 | 草地 |
你會立刻注意到所有數據都是文本格式。你需要將這些數據轉換為可以用於圖表的格式。事實上,大部分數據是以對象形式表示的:
```r
names(mushrooms)
```
輸出為:
```output
[1] "class" "cap.shape"
[3] "cap.surface" "cap.color"
[5] "bruises" "odor"
[7] "gill.attachment" "gill.spacing"
[9] "gill.size" "gill.color"
[11] "stalk.shape" "stalk.root"
[13] "stalk.surface.above.ring" "stalk.surface.below.ring"
[15] "stalk.color.above.ring" "stalk.color.below.ring"
[17] "veil.type" "veil.color"
[19] "ring.number" "ring.type"
[21] "spore.print.color" "population"
[23] "habitat"
```
將這些數據中的「類別」列轉換為分類:
```r
library(dplyr)
grouped=mushrooms %>%
group_by(class) %>%
summarise(count=n())
```
現在,如果你打印出蘑菇數據,你可以看到它已根據有毒/可食用類別分組:
```r
View(grouped)
```
| 類別 | 數量 |
| --------- | --------- |
| 可食用 | 4208 |
| 有毒 | 3916 |
如果你按照此表格中呈現的順序來創建類別標籤,你可以製作一個圓餅圖。
## 圓餅圖!
```r
pie(grouped$count,grouped$class, main="Edible?")
```
瞧,一個圓餅圖展示了根據這兩類蘑菇的比例數據。在這裡,正確的標籤順序非常重要,因此請務必確認標籤數組的構建順序!
![圓餅圖](../../../../../translated_images/zh-TW/pie1-wb.685df063673751f4b0b82127f7a52c7f9a920192f22ae61ad28412ba9ace97bf.png)
## 甜甜圈圖!
一種更具視覺吸引力的圓餅圖是甜甜圈圖,它是在圓餅圖中間挖了一個洞。讓我們用這種方法來查看數據。
看看蘑菇生長的各種棲息地:
```r
library(dplyr)
habitat=mushrooms %>%
group_by(habitat) %>%
summarise(count=n())
View(habitat)
```
輸出為:
| 棲息地 | 數量 |
| --------- | --------- |
| 草地 | 2148 |
| 樹葉 | 832 |
| 草原 | 292 |
| 小徑 | 1144 |
| 城市 | 368 |
| 廢棄地 | 192 |
| 樹木 | 3148 |
在這裡,你將數據按棲息地分組。共有 7 種棲息地,因此使用它們作為甜甜圈圖的標籤:
```r
library(ggplot2)
library(webr)
PieDonut(habitat, aes(habitat, count=count))
```
![甜甜圈圖](../../../../../translated_images/zh-TW/donut-wb.34e6fb275da9d834c2205145e39a3de9b6878191dcdba6f7a9e85f4b520449bc.png)
此代碼使用了兩個庫 - ggplot2 和 webr。使用 webr 庫的 PieDonut 函數,我們可以輕鬆創建甜甜圈圖!
僅使用 ggplot2 庫也可以在 R 中製作甜甜圈圖。你可以在[這裡](https://www.r-graph-gallery.com/128-ring-or-donut-plot.html)了解更多並自己嘗試。
現在你知道如何分組數據並以圓餅圖或甜甜圈圖顯示它,你可以探索其他類型的圖表。試試華夫圖,它是一種不同的方式來探索數量。
## 華夫圖!
「華夫」類型的圖表是一種以 2D 方格陣列視覺化數量的方式。嘗試視覺化此數據集中蘑菇菌蓋顏色的不同數量。為此,你需要安裝一個名為 [waffle](https://cran.r-project.org/web/packages/waffle/waffle.pdf) 的輔助庫,並使用它來生成你的視覺化:
```r
install.packages("waffle", repos = "https://cinc.rud.is")
```
選擇數據的一部分進行分組:
```r
library(dplyr)
cap_color=mushrooms %>%
group_by(cap.color) %>%
summarise(count=n())
View(cap_color)
```
通過創建標籤並分組數據來製作華夫圖:
```r
library(waffle)
names(cap_color$count) = paste0(cap_color$cap.color)
waffle((cap_color$count/10), rows = 7, title = "Waffle Chart")+scale_fill_manual(values=c("brown", "#F0DC82", "#D2691E", "green",
"pink", "purple", "red", "grey",
"yellow","white"))
```
使用華夫圖,你可以清楚地看到此蘑菇數據集中菌蓋顏色的比例。有趣的是,有許多綠色菌蓋的蘑菇!
![華夫圖](../../../../../translated_images/zh-TW/waffle.aaa75c5337735a6ef32ace0ffb6506ef49e5aefe870ffd72b1bb080f4843c217.png)
在本課程中,你學到了三種視覺化比例的方法。首先,你需要將數據分組到分類中,然後決定哪種方式最適合顯示數據 - 圓餅圖、甜甜圈圖或華夫圖。這些方法都很有趣,並能讓用戶快速了解數據集。
## 🚀 挑戰
嘗試在 [Charticulator](https://charticulator.com) 中重現這些有趣的圖表。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/21)
## 回顧與自學
有時候,何時使用圓餅圖、甜甜圈圖或華夫圖並不明顯。以下是一些相關文章供你閱讀:
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402
進行一些研究,找到更多關於這個選擇的資訊。
## 作業
[在 Excel 中嘗試](assignment.md)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,168 @@
# 視覺化關係:關於蜂蜜 🍯
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/12-Visualizing-Relationships.png)|
|:---:|
|視覺化關係 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
延續我們研究的自然主題,讓我們探索一些有趣的視覺化方式,來展示不同種類蜂蜜之間的關係。這些數據集來自[美國農業部](https://www.nass.usda.gov/About_NASS/index.php)。
這個包含約600項的數據集展示了美國多個州的蜂蜜生產情況。例如您可以查看每個州在1998年至2012年間的蜂群數量、每群產量、總產量、庫存、每磅價格以及蜂蜜的生產價值每個州每年一行數據。
我們可以視覺化某個州每年的生產量與該州蜂蜜價格之間的關係。或者您也可以視覺化各州每群蜂蜜產量之間的關係。這段時間涵蓋了2006年首次出現的毀滅性「蜂群崩壞症候群 (CCD)」http://npic.orst.edu/envir/ccd.html因此這是一個值得研究的數據集。🐝
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/22)
在本課中,您可以使用 ggplot2這是一個您之前使用過的優秀庫用於視覺化變數之間的關係。特別有趣的是 ggplot2 的 `geom_point``qplot` 函數,它們可以快速生成散點圖和折線圖,視覺化「[統計關係](https://ggplot2.tidyverse.org/)」,幫助數據科學家更好地理解變數之間的關聯。
## 散點圖
使用散點圖展示蜂蜜價格如何隨年份在各州演變。ggplot2 的 `ggplot``geom_point` 可以方便地將州的數據分組,並顯示分類和數值數據的數據點。
首先,導入數據和 Seaborn
```r
honey=read.csv('../../data/honey.csv')
head(honey)
```
您會注意到蜂蜜數據中有幾個有趣的列,包括年份和每磅價格。讓我們按美國州分組來探索這些數據:
| 州 | 蜂群數量 | 每群產量 | 總產量 | 庫存 | 每磅價格 | 生產價值 | 年份 |
| ----- | -------- | -------- | -------- | -------- | ---------- | --------- | ---- |
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
| FL | 230000 | 98 | 22540000 | 4508000 | 0.64 | 14426000 | 1998 |
創建一個基本散點圖,展示蜂蜜每磅價格與其來源州之間的關係。讓 `y` 軸足夠高以顯示所有州:
```r
library(ggplot2)
ggplot(honey, aes(x = priceperlb, y = state)) +
geom_point(colour = "blue")
```
![散點圖 1](../../../../../translated_images/zh-TW/scatter1.86b8900674d88b26dd3353a83fe604e9ab3722c4680cc40ee9beb452ff02cdea.png)
接下來,使用蜂蜜色彩方案展示價格如何隨年份演變。您可以通過添加 `scale_color_gradientn` 參數來展示年份的變化:
> ✅ 了解更多關於 [scale_color_gradientn](https://www.rdocumentation.org/packages/ggplot2/versions/0.9.1/topics/scale_colour_gradientn) 的信息 - 試試美麗的彩虹色方案!
```r
ggplot(honey, aes(x = priceperlb, y = state, color=year)) +
geom_point()+scale_color_gradientn(colours = colorspace::heat_hcl(7))
```
![散點圖 2](../../../../../translated_images/zh-TW/scatter2.4d1cbc693bad20e2b563888747eb6bdf65b73ce449d903f7cd4068a78502dcff.png)
使用這種色彩方案,您可以清楚地看到蜂蜜每磅價格在多年來的明顯增長趨勢。事實上,如果您查看數據中的樣本集(例如選擇亞利桑那州),您可以看到價格逐年上漲的模式,只有少數例外:
| 州 | 蜂群數量 | 每群產量 | 總產量 | 庫存 | 每磅價格 | 生產價值 | 年份 |
| ----- | -------- | -------- | -------- | -------- | ---------- | --------- | ---- |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
另一種視覺化這種演變的方法是使用大小而不是顏色。對於色盲用戶,這可能是一個更好的選擇。編輯您的視覺化,通過點的圓周大小來展示價格的增長:
```r
ggplot(honey, aes(x = priceperlb, y = state)) +
geom_point(aes(size = year),colour = "blue") +
scale_size_continuous(range = c(0.25, 3))
```
您可以看到點的大小逐漸增大。
![散點圖 3](../../../../../translated_images/zh-TW/scatter3.722d21e6f20b3ea2e18339bb9b10d75906126715eb7d5fdc88fe74dcb6d7066a.png)
這是否是一個簡單的供需問題?由於氣候變化和蜂群崩壞等因素,是否每年可供購買的蜂蜜減少,導致價格上漲?
為了探索這個數據集中一些變數之間的相關性,讓我們來看看一些折線圖。
## 折線圖
問題:蜂蜜每磅價格是否隨年份逐年明顯上漲?您可以通過創建一個單一折線圖來最簡單地發現這一點:
```r
qplot(honey$year,honey$priceperlb, geom='smooth', span =0.5, xlab = "year",ylab = "priceperlb")
```
答案是的但在2003年左右有一些例外
![折線圖 1](../../../../../translated_images/zh-TW/line1.299b576fbb2a59e60a59e7130030f59836891f90302be084e4e8d14da0562e2a.png)
問題那麼在2003年我們是否也能看到蜂蜜供應的激增如果您查看每年的總產量呢
```python
qplot(honey$year,honey$totalprod, geom='smooth', span =0.5, xlab = "year",ylab = "totalprod")
```
![折線圖 2](../../../../../translated_images/zh-TW/line2.3b18fcda7176ceba5b6689eaaabb817d49c965e986f11cac1ae3f424030c34d8.png)
答案:並不完全。如果您查看總產量,實際上在那一年似乎有所增加,儘管總的來說蜂蜜的生產量在這些年中呈下降趨勢。
問題在這種情況下2003年蜂蜜價格的激增可能是什麼原因
為了探索這一點,您可以使用分面網格。
## 分面網格
分面網格可以選擇數據集的一個分面在我們的例子中您可以選擇「年份」以避免生成過多的分面。Seaborn 可以根據您選擇的 x 和 y 坐標為每個分面生成一個圖表方便進行視覺比較。2003年是否在這種比較中顯得突出
使用 `facet_wrap` 創建分面網格,這是 [ggplot2 文檔](https://ggplot2.tidyverse.org/reference/facet_wrap.html) 推薦的方法。
```r
ggplot(honey, aes(x=yieldpercol, y = numcol,group = 1)) +
geom_line() + facet_wrap(vars(year))
```
在這個視覺化中您可以比較每年的每群產量和蜂群數量並將列的分面設置為3
![分面網格](../../../../../translated_images/zh-TW/facet.491ad90d61c2a7cc69b50c929f80786c749e38217ccedbf1e22ed8909b65987c.png)
對於這個數據集,關於蜂群數量和每群產量,年份與州之間並沒有特別突出的地方。是否有其他方式可以找到這兩個變數之間的相關性?
## 雙折線圖
嘗試使用 R 的 `par``plot` 函數,通過疊加兩個折線圖來創建多折線圖。我們將在 x 軸上繪製年份,並顯示兩個 y 軸。展示每群產量和蜂群數量,疊加在一起:
```r
par(mar = c(5, 4, 4, 4) + 0.3)
plot(honey$year, honey$numcol, pch = 16, col = 2,type="l")
par(new = TRUE)
plot(honey$year, honey$yieldpercol, pch = 17, col = 3,
axes = FALSE, xlab = "", ylab = "",type="l")
axis(side = 4, at = pretty(range(y2)))
mtext("colony yield", side = 4, line = 3)
```
![疊加折線圖](../../../../../translated_images/zh-TW/dual-line.fc4665f360a54018d7df9bc6abcc26460112e17dcbda18d3b9ae6109b32b36c3.png)
雖然在2003年沒有明顯的異常但這讓我們可以以一個稍微樂觀的結論結束這節課儘管蜂群數量總體上在下降但蜂群數量正在穩定即使每群產量在減少。
加油,蜜蜂們,加油!
🐝❤️
## 🚀 挑戰
在本課中,您學到了更多關於散點圖和折線網格的其他用途,包括分面網格。挑戰自己使用不同的數據集(也許是您之前使用過的數據集)來創建分面網格。注意它們的生成時間以及如何小心選擇需要繪製的網格數量。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/23)
## 回顧與自學
折線圖可以是簡單的,也可以是非常複雜的。閱讀 [ggplot2 文檔](https://ggplot2.tidyverse.org/reference/geom_path.html#:~:text=geom_line()%20connects%20them%20in,which%20cases%20are%20connected%20together),了解構建折線圖的各種方法。嘗試使用文檔中列出的其他方法來增強您在本課中構建的折線圖。
## 作業
[深入蜂巢](assignment.md)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,171 @@
# 製作有意義的視覺化圖表
|![ 由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記 ](../../../sketchnotes/13-MeaningfulViz.png)|
|:---:|
| 有意義的視覺化圖表 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 提供_ |
> 「如果你對數據施加足夠的壓力,它會承認任何事情。」-- [Ronald Coase](https://en.wikiquote.org/wiki/Ronald_Coase)
作為一名數據科學家,基本技能之一就是能夠創建有意義的數據視覺化,幫助回答你可能有的問題。在進行數據視覺化之前,你需要確保數據已經像之前課程中那樣被清理和準備好。之後,你就可以開始決定如何最好地呈現數據。
在本課中,你將學習:
1. 如何選擇正確的圖表類型
2. 如何避免誤導性的圖表
3. 如何使用顏色
4. 如何設計圖表以提高可讀性
5. 如何構建動畫或3D圖表解決方案
6. 如何創建有創意的視覺化
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/24)
## 選擇正確的圖表類型
在之前的課程中,你已經嘗試使用 Matplotlib 和 Seaborn 創建各種有趣的數據視覺化。通常,你可以根據這張表格選擇[合適的圖表類型](https://chartio.com/learn/charts/how-to-select-a-data-vizualization/)來回答你的問題:
| 你的需求: | 你應該使用: |
| -------------------------- | ------------------------------- |
| 展示隨時間變化的數據趨勢 | 折線圖 |
| 比較類別 | 條形圖、圓餅圖 |
| 比較總量 | 圓餅圖、堆疊條形圖 |
| 展示關係 | 散點圖、折線圖、分面圖、雙折線圖 |
| 展示分佈 | 散點圖、直方圖、箱形圖 |
| 展示比例 | 圓餅圖、甜甜圈圖、華夫圖 |
> ✅ 根據數據的組成,你可能需要將其從文本轉換為數值,才能支持某些圖表。
## 避免誤導
即使數據科學家謹慎地為數據選擇了正確的圖表類型,數據仍然可能以某種方式被展示來證明某個觀點,往往以犧牲數據本身為代價。有許多關於誤導性圖表和信息圖的例子!
[![Alberto Cairo 的《圖表如何說謊》](../../../../../translated_images/zh-TW/tornado.2880ffc7f135f82b5e5328624799010abefd1080ae4b7ecacbdc7d792f1d8849.png)](https://www.youtube.com/watch?v=oX74Nge8Wkw "圖表如何說謊")
> 🎥 點擊上方圖片觀看關於誤導性圖表的會議演講
這張圖表反轉了 X 軸,根據日期顯示了與事實相反的內容:
![壞圖表 1](../../../../../translated_images/zh-TW/bad-chart-1.596bc93425a8ac301a28b8361f59a970276e7b961658ce849886aa1fed427341.png)
[這張圖表](https://media.firstcoastnews.com/assets/WTLV/images/170ae16f-4643-438f-b689-50d66ca6a8d8/170ae16f-4643-438f-b689-50d66ca6a8d8_1140x641.jpg) 更加誤導,因為視線被吸引到右側,讓人得出結論:隨著時間推移,各縣的 COVID 病例數量下降了。事實上,如果仔細查看日期,你會發現它們被重新排列以製造這種誤導性的下降趨勢。
![壞圖表 2](../../../../../translated_images/zh-TW/bad-chart-2.62edf4d2f30f4e519f5ef50c07ce686e27b0196a364febf9a4d98eecd21f9f60.jpg)
這個臭名昭著的例子使用了顏色和反轉的 Y 軸來誤導:與其得出槍支友好立法通過後槍支死亡人數激增的結論,事實上視線被誤導以為情況正好相反:
![壞圖表 3](../../../../../translated_images/zh-TW/bad-chart-3.e201e2e915a230bc2cde289110604ec9abeb89be510bd82665bebc1228258972.jpg)
這張奇怪的圖表展示了比例如何被操縱,效果令人啼笑皆非:
![壞圖表 4](../../../../../translated_images/zh-TW/bad-chart-4.8872b2b881ffa96c3e0db10eb6aed7793efae2cac382c53932794260f7bfff07.jpg)
比較無法比較的事物是另一種陰險的手段。有一個[精彩的網站](https://tylervigen.com/spurious-correlations)專門展示「虛假的相關性」顯示像緬因州離婚率與人造黃油消耗量這樣的「事實」。Reddit 上也有一個群組收集了[數據的醜陋用法](https://www.reddit.com/r/dataisugly/top/?t=all)。
了解視線如何容易被誤導性圖表欺騙是很重要的。即使數據科學家的意圖是好的,選擇一個不合適的圖表類型(例如顯示過多類別的圓餅圖)也可能具有誤導性。
## 顏色
從上面「佛羅里達槍支暴力」的圖表中可以看到,顏色可以為圖表提供額外的意義層次,特別是那些不是使用 ggplot2 和 RColorBrewer 等庫設計的圖表,這些庫自帶經過驗證的顏色庫和調色板。如果你是手動製作圖表,可以稍微學習一下[色彩理論](https://colormatters.com/color-and-design/basic-color-theory)。
> ✅ 在設計圖表時,請注意無障礙性是視覺化的一個重要方面。你的一些用戶可能是色盲——你的圖表是否對視覺障礙用戶友好?
選擇圖表顏色時要小心,因為顏色可能傳達你未曾預料的含義。上面「身高」圖表中的「粉紅女士」傳遞了一種明顯的「女性化」意義,這增加了圖表本身的怪異感。
雖然[顏色的意義](https://colormatters.com/color-symbolism/the-meanings-of-colors)可能因地區而異,並且根據色調的不同而改變,但一般來說,顏色的意義包括:
| 顏色 | 意義 |
| ------ | ------------------- |
| 紅色 | 力量 |
| 藍色 | 信任、忠誠 |
| 黃色 | 快樂、警告 |
| 綠色 | 生態、幸運、嫉妒 |
| 紫色 | 快樂 |
| 橙色 | 活力 |
如果你需要為圖表設置自定義顏色,請確保你的圖表既無障礙又符合你想要傳達的意義。
## 設計圖表以提高可讀性
如果圖表不可讀,那它就沒有意義!花點時間考慮調整圖表的寬度和高度,使其能夠與數據良好匹配。如果需要顯示一個變量(例如所有 50 個州),盡量將它們垂直顯示在 Y 軸上,以避免水平滾動的圖表。
標記你的軸,必要時提供圖例,並提供工具提示以便更好地理解數據。
如果你的數據在 X 軸上是文本且冗長,可以將文本傾斜以提高可讀性。[plot3D](https://cran.r-project.org/web/packages/plot3D/index.html) 提供了 3D 繪圖功能,如果你的數據支持的話,可以使用它來製作更高級的數據視覺化。
![3D 圖表](../../../../../translated_images/zh-TW/3d.db1734c151eee87d924989306a00e23f8cddac6a0aab122852ece220e9448def.png)
## 動畫和 3D 圖表展示
當今一些最好的數據視覺化是動畫化的。Shirley Wu 使用 D3 創作了許多令人驚嘆的作品,例如「[電影之花](http://bl.ocks.org/sxywu/raw/d612c6c653fb8b4d7ff3d422be164a5d/)」每朵花都是一部電影的視覺化。另一個例子是《衛報》的「Bussed Out」這是一個結合了 Greensock 和 D3 的互動體驗,並採用滾動敘事的文章格式,展示了紐約市如何通過將無家可歸者送出城市來處理這一問題。
![Bussed Out](../../../../../translated_images/zh-TW/busing.8157cf1bc89a3f65052d362a78c72f964982ceb9dcacbe44480e35909c3dce62.png)
> 「Bussed Out: How America Moves its Homeless」來自[衛報](https://www.theguardian.com/us-news/ng-interactive/2017/dec/20/bussed-out-america-moves-homeless-people-country-study)。視覺化由 Nadieh Bremer 和 Shirley Wu 創作。
雖然本課不足以深入教授這些強大的視覺化庫,但你可以嘗試在 Vue.js 應用中使用 D3通過一個庫來展示《危險關係》這本書的動畫化社交網絡視覺化。
> 《危險關係》是一部書信體小說,或以一系列信件形式呈現的小說。由 Choderlos de Laclos 於 1782 年創作,講述了 18 世紀末法國貴族中兩位主角 Vicomte de Valmont 和 Marquise de Merteuil 的惡毒、道德淪喪的社交操縱故事。最終兩人都走向毀滅,但在此之前造成了巨大的社會破壞。小說以他們寫給圈內各人的信件形式展開,策劃復仇或僅僅是製造麻煩。創建這些信件的視覺化,來發現敘事中的主要關鍵人物。
你將完成一個網頁應用,展示這個社交網絡的動畫化視圖。它使用了一個基於 Vue.js 和 D3 的庫來創建[網絡視覺化](https://github.com/emiliorizzo/vue-d3-network)。應用運行時,你可以在屏幕上拖動節點來重新排列數據。
![危險關係](../../../../../translated_images/zh-TW/liaisons.90ce7360bcf8476558f700bbbaf198ad697d5b5cb2829ba141a89c0add7c6ecd.png)
## 專案:使用 D3.js 構建一個展示網絡的圖表
> 本課文件夾中包含一個 `solution` 文件夾,你可以在其中找到完整的專案作為參考。
1. 按照起始文件夾根目錄中的 README.md 文件中的指示進行操作。在安裝專案依賴項之前,確保你的機器上已運行 NPM 和 Node.js。
2. 打開 `starter/src` 文件夾。你會發現一個 `assets` 文件夾,其中有一個 .json 文件包含小說中的所有信件按編號排列並帶有「to」和「from」的註釋。
3. 完成 `components/Nodes.vue` 中的代碼以啟用視覺化。找到名為 `createLinks()` 的方法,並添加以下嵌套循環。
遍歷 .json 對象以捕獲信件的「to」和「from」數據並構建 `links` 對象,以便視覺化庫可以使用它:
```javascript
//loop through letters
let f = 0;
let t = 0;
for (var i = 0; i < letters.length; i++) {
for (var j = 0; j < characters.length; j++) {
if (characters[j] == letters[i].from) {
f = j;
}
if (characters[j] == letters[i].to) {
t = j;
}
}
this.links.push({ sid: f, tid: t });
}
```
從終端運行你的應用npm run serve享受視覺化的樂趣
## 🚀 挑戰
在互聯網上探索誤導性的視覺化圖表。作者是如何欺騙用戶的,這是有意的嗎?嘗試修正這些圖表,展示它們應有的樣子。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/25)
## 回顧與自學
以下是一些關於誤導性數據視覺化的文章:
https://gizmodo.com/how-to-lie-with-data-visualization-1563576606
http://ixd.prattsi.org/2017/12/visual-lies-usability-in-deceptive-data-visualizations/
看看這些有趣的歷史資產和文物視覺化:
https://handbook.pubpub.org/
閱讀這篇文章,了解動畫如何增強你的視覺化效果:
https://medium.com/@EvanSinar/use-animation-to-supercharge-data-visualization-cd905a882ad4
## 作業
[創建你自己的自定義視覺化](assignment.md)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,31 @@
# 視覺化
![一隻蜜蜂停在薰衣草花上](../../../translated_images/zh-TW/bee.0aa1d91132b12e3a8994b9ca12816d05ce1642010d9b8be37f8d37365ba845cf.jpg)
> 照片由 <a href="https://unsplash.com/@jenna2980?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Jenna Lee</a> 提供,來自 <a href="https://unsplash.com/s/photos/bees-in-a-meadow?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
視覺化數據是數據科學家最重要的任務之一。一張圖片勝過千言萬語,視覺化可以幫助你識別數據中的各種有趣部分,例如尖峰、異常值、分組、趨勢等等,這些都能幫助你理解數據背後的故事。
在這五節課中,你將探索來自自然界的數據,並使用各種技術創建有趣且美觀的視覺化圖表。
| 主題編號 | 主題 | 相關課程 | 作者 |
| :-----------: | :--: | :-----------: | :----: |
| 1. | 數量視覺化 | <ul> <li> [Python](09-visualization-quantities/README.md)</li> <li>[R](../../../3-Data-Visualization/R/09-visualization-quantities) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
| 2. | 分佈視覺化 | <ul> <li> [Python](10-visualization-distributions/README.md)</li> <li>[R](../../../3-Data-Visualization/R/10-visualization-distributions) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
| 3. | 比例視覺化 | <ul> <li> [Python](11-visualization-proportions/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
| 4. | 關係視覺化 | <ul> <li> [Python](12-visualization-relationships/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
| 5. | 創建有意義的視覺化 | <ul> <li> [Python](13-meaningful-visualizations/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
### 致謝
這些視覺化課程由 [Jen Looper](https://twitter.com/jenlooper)、[Jasleen Sondhi](https://github.com/jasleen101010) 和 [Vidushi Gupta](https://github.com/Vidushi-Gupta) 用 🌸 精心撰寫。
🍯 美國蜂蜜生產數據來自 Jessica Li 在 [Kaggle](https://www.kaggle.com/jessicali9530/honey-production) 上的項目。該[數據](https://usda.library.cornell.edu/concern/publications/rn301137d)來源於[美國農業部](https://www.nass.usda.gov/About_NASS/index.php)。
🍄 蘑菇數據同樣來自 [Kaggle](https://www.kaggle.com/hatterasdunton/mushroom-classification-updated-dataset),由 Hatteras Dunton 修訂。該數據集包括對假設樣本的描述,這些樣本對應於伞菌科和口蘑科的 23 種有鰓蘑菇。數據來源於《Audubon Society Field Guide to North American Mushrooms》(1981)。該數據集於 1987 年捐贈給 UCI ML 27。
🦆 明尼蘇達州鳥類數據來自 [Kaggle](https://www.kaggle.com/hannahcollins/minnesota-birds),由 Hannah Collins 從 [Wikipedia](https://en.wikipedia.org/wiki/List_of_birds_of_Minnesota) 抓取。
所有這些數據集均以 [CC0: Creative Commons](https://creativecommons.org/publicdomain/zero/1.0/) 授權。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,111 @@
# 資料科學生命週期介紹
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/14-DataScience-Lifecycle.png)|
|:---:|
| 資料科學生命週期介紹 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/26)
到目前為止,你可能已經意識到資料科學是一個過程。這個過程可以分為五個階段:
- 資料捕捉
- 資料處理
- 資料分析
- 資料溝通
- 資料維護
本課程將重點放在生命週期的三個部分:資料捕捉、資料處理和資料維護。
![資料科學生命週期圖示](../../../../translated_images/zh-TW/data-science-lifecycle.a1e362637503c4fb0cd5e859d7552edcdb4aa629a279727008baa121f2d33f32.jpg)
> 圖片來源:[Berkeley School of Information](https://ischoolonline.berkeley.edu/data-science/what-is-data-science/)
## 資料捕捉
生命週期的第一階段非常重要,因為接下來的階段都依賴於此。這實際上是兩個階段的結合:獲取資料以及定義需要解決的目的和問題。
定義專案目標需要深入了解問題或問題的背景。首先,我們需要識別並獲取那些需要解決問題的人。這些可能是企業的利益相關者或專案的贊助者,他們可以幫助確定誰或什麼將從這個專案中受益,以及他們需要什麼和為什麼需要它。一個明確定義的目標應該是可測量且可量化的,以定義可接受的結果。
資料科學家可能會問的問題:
- 這個問題以前是否被研究過?發現了什麼?
- 所有參與者是否都理解目的和目標?
- 是否存在模糊性?如何減少模糊性?
- 有哪些限制條件?
- 最終結果可能會是什麼樣子?
- 有多少資源(時間、人力、計算能力)可用?
接下來是識別、收集,然後探索為實現這些目標所需的資料。在資料獲取的這一步,資料科學家還必須評估資料的數量和質量。這需要一些資料探索,以確認所獲取的資料是否能支持達到期望的結果。
資料科學家可能會問的關於資料的問題:
- 我已經擁有哪些資料?
- 誰擁有這些資料?
- 有哪些隱私問題?
- 我是否有足夠的資料來解決這個問題?
- 這些資料的質量是否適合解決這個問題?
- 如果我通過這些資料發現了額外的信息,我們是否應該考慮更改或重新定義目標?
## 資料處理
生命週期的資料處理階段專注於發現資料中的模式以及建模。一些在資料處理階段使用的技術需要統計方法來揭示模式。通常,這對於人類來說是一項繁瑣的任務,尤其是面對大型資料集,因此需要依賴計算機來加速過程。在這個階段,資料科學和機器學習會交叉。正如你在第一課中學到的,機器學習是建立模型以理解資料的過程。模型是資料中變數之間關係的表示,幫助預測結果。
此階段常用的技術在《機器學習初學者》課程中有涵蓋。點擊以下連結了解更多:
- [分類](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification):將資料組織到不同的類別中以提高使用效率。
- [聚類](https://github.com/microsoft/ML-For-Beginners/tree/main/5-Clustering):將資料分組到相似的群組中。
- [回歸](https://github.com/microsoft/ML-For-Beginners/tree/main/2-Regression):確定變數之間的關係以預測或預估值。
## 資料維護
在生命週期的圖示中,你可能注意到維護位於資料捕捉和資料處理之間。維護是一個持續的過程,涉及在專案過程中管理、存儲和保護資料,並且應在整個專案期間予以考慮。
### 資料存儲
資料存儲的方式和位置可能會影響存儲成本以及資料訪問的性能。這些決策通常不會由資料科學家單獨做出,但他們可能需要根據資料的存儲方式來選擇如何使用資料。
以下是現代資料存儲系統的一些方面,可能會影響這些選擇:
**本地存儲 vs 離線存儲 vs 公有或私有雲**
本地存儲指的是使用自己的設備來管理資料,例如擁有一台存儲資料的伺服器,而離線存儲則依賴於你不擁有的設備,例如資料中心。公有雲是一種流行的資料存儲選擇,不需要了解資料的具體存儲位置或方式,其中公有指的是所有使用雲服務的人共享統一的基礎設施。一些組織有嚴格的安全政策,要求完全訪問存儲資料的設備,因此會選擇提供專屬雲服務的私有雲。你將在[後續課程](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/5-Data-Science-In-Cloud)中學到更多關於雲端資料的內容。
**冷資料 vs 熱資料**
在訓練模型時,你可能需要更多的訓練資料。如果你對模型感到滿意,更多的資料將到來以使模型發揮其作用。無論如何,隨著資料的累積,存儲和訪問資料的成本將增加。將不常使用的資料(冷資料)與頻繁訪問的資料(熱資料)分開存儲,可以通過硬體或軟體服務提供更便宜的存儲選擇。如果需要訪問冷資料,可能會比熱資料花費更長的時間來檢索。
### 資料管理
在處理資料時,你可能會發現一些資料需要使用本課程中[資料準備](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/08-data-preparation)中涵蓋的技術進行清理以建立準確的模型。當新資料到來時也需要應用相同的技術來保持質量的一致性。一些專案會使用自動化工具進行清理、聚合和壓縮然後將資料移動到最終位置。Azure Data Factory 就是一個這樣的工具。
### 資料安全
資料安全的主要目標之一是確保資料的使用者能夠控制所收集的資料以及其使用的背景。保持資料安全包括限制只有需要的人才能訪問資料,遵守當地法律和法規,以及維持道德標準,這些在[道德課程](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/02-ethics)中有涵蓋。
以下是團隊可能採取的一些安全措施:
- 確保所有資料都已加密
- 向客戶提供有關其資料使用方式的信息
- 移除已離開專案的成員的資料訪問權限
- 僅允許特定專案成員修改資料
## 🚀 挑戰
資料科學生命週期有許多版本,每個步驟可能有不同的名稱和階段數量,但都包含本課程中提到的相同過程。
探索[團隊資料科學過程生命週期](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/lifecycle)和[跨行業標準資料挖掘過程](https://www.datascience-pm.com/crisp-dm-2/)。列出兩者的三個相似點和不同點。
|團隊資料科學過程 (TDSP)|跨行業標準資料挖掘過程 (CRISP-DM)|
|--|--|
|![團隊資料科學生命週期](../../../../translated_images/zh-TW/tdsp-lifecycle2.e19029d598e2e73d5ef8a4b98837d688ec6044fe332c905d4dbb69eb6d5c1d96.png) | ![資料科學過程聯盟圖示](../../../../translated_images/zh-TW/CRISP-DM.8bad2b4c66e62aa75278009e38e3e99902c73b0a6f63fd605a67c687a536698c.png) |
| 圖片來源:[Microsoft](https://docs.microsoft.comazure/architecture/data-science-process/lifecycle) | 圖片來源:[Data Science Process Alliance](https://www.datascience-pm.com/crisp-dm-2/) |
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/27)
## 回顧與自學
應用資料科學生命週期涉及多個角色和任務,其中一些可能專注於每個階段的特定部分。團隊資料科學過程提供了一些資源,解釋了專案中可能涉及的角色和任務類型。
* [團隊資料科學過程的角色和任務](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/roles-tasks)
* [執行資料科學任務:探索、建模和部署](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/execute-data-science-tasks)
## 作業
[評估資料集](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,26 @@
# 評估數據集
一位客戶向您的團隊尋求幫助,調查紐約市計程車乘客的季節性消費習慣。
他們想知道:**紐約市的黃計程車乘客在冬季還是夏季給司機的小費更多?**
您的團隊目前處於數據科學生命週期的[捕捉階段](Readme.md#Capturing),而您負責處理數據集。您已獲得一個筆記本和[數據](../../../../data/taxi.csv)進行探索。
在此目錄中,有一個[筆記本](../../../../4-Data-Science-Lifecycle/14-Introduction/notebook.ipynb),使用 Python 從[紐約市計程車與禮車委員會](https://docs.microsoft.com/en-us/azure/open-datasets/dataset-taxi-yellow?tabs=azureml-opendatasets)載入黃計程車行程數據。
您也可以使用文字編輯器或像 Excel 這樣的電子表格軟體打開計程車數據文件。
## 指導說明
- 評估此數據集中的數據是否能幫助回答問題。
- 探索[紐約市開放數據目錄](https://data.cityofnewyork.us/browse?sortBy=most_accessed&utf8=%E2%9C%93)。識別一個可能有助於回答客戶問題的額外數據集。
- 撰寫 3 個您會向客戶提出的問題,以便更清楚地了解問題並獲得更多澄清。
請參考[數據集字典](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf)和[用戶指南](https://www1.nyc.gov/assets/tlc/downloads/pdf/trip_record_user_guide.pdf),以獲取有關數據的更多信息。
## 評分標準
卓越 | 足夠 | 需要改進
--- | --- | ---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,140 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# 冬季和夏季的紐約市計程車數據\n",
"\n",
"請參考[數據字典](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf)以了解提供的欄位詳細資訊。\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"#Install the pandas library\r\n",
"!pip install pandas"
],
"outputs": [],
"metadata": {
"scrolled": true
}
},
{
"cell_type": "code",
"execution_count": 7,
"source": [
"import pandas as pd\r\n",
"\r\n",
"path = '../../data/taxi.csv'\r\n",
"\r\n",
"#Load the csv file into a dataframe\r\n",
"df = pd.read_csv(path)\r\n",
"\r\n",
"#Print the dataframe\r\n",
"print(df)\r\n"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" VendorID tpep_pickup_datetime tpep_dropoff_datetime passenger_count \\\n",
"0 2.0 2019-07-15 16:27:53 2019-07-15 16:44:21 3.0 \n",
"1 2.0 2019-07-17 20:26:35 2019-07-17 20:40:09 6.0 \n",
"2 2.0 2019-07-06 16:01:08 2019-07-06 16:10:25 1.0 \n",
"3 1.0 2019-07-18 22:32:23 2019-07-18 22:35:08 1.0 \n",
"4 2.0 2019-07-19 14:54:29 2019-07-19 15:19:08 1.0 \n",
".. ... ... ... ... \n",
"195 2.0 2019-01-18 08:42:15 2019-01-18 08:56:57 1.0 \n",
"196 1.0 2019-01-19 04:34:45 2019-01-19 04:43:44 1.0 \n",
"197 2.0 2019-01-05 10:37:39 2019-01-05 10:42:03 1.0 \n",
"198 2.0 2019-01-23 10:36:29 2019-01-23 10:44:34 2.0 \n",
"199 2.0 2019-01-30 06:55:58 2019-01-30 07:07:02 5.0 \n",
"\n",
" trip_distance RatecodeID store_and_fwd_flag PULocationID DOLocationID \\\n",
"0 2.02 1.0 N 186 233 \n",
"1 1.59 1.0 N 141 161 \n",
"2 1.69 1.0 N 246 249 \n",
"3 0.90 1.0 N 229 141 \n",
"4 4.79 1.0 N 237 107 \n",
".. ... ... ... ... ... \n",
"195 1.18 1.0 N 43 237 \n",
"196 2.30 1.0 N 148 234 \n",
"197 0.83 1.0 N 237 263 \n",
"198 1.12 1.0 N 144 113 \n",
"199 2.41 1.0 N 209 107 \n",
"\n",
" payment_type fare_amount extra mta_tax tip_amount tolls_amount \\\n",
"0 1.0 12.0 1.0 0.5 4.08 0.0 \n",
"1 2.0 10.0 0.5 0.5 0.00 0.0 \n",
"2 2.0 8.5 0.0 0.5 0.00 0.0 \n",
"3 1.0 4.5 3.0 0.5 1.65 0.0 \n",
"4 1.0 19.5 0.0 0.5 5.70 0.0 \n",
".. ... ... ... ... ... ... \n",
"195 1.0 10.0 0.0 0.5 2.16 0.0 \n",
"196 1.0 9.5 0.5 0.5 2.15 0.0 \n",
"197 1.0 5.0 0.0 0.5 1.16 0.0 \n",
"198 2.0 7.0 0.0 0.5 0.00 0.0 \n",
"199 1.0 10.5 0.0 0.5 1.00 0.0 \n",
"\n",
" improvement_surcharge total_amount congestion_surcharge \n",
"0 0.3 20.38 2.5 \n",
"1 0.3 13.80 2.5 \n",
"2 0.3 11.80 2.5 \n",
"3 0.3 9.95 2.5 \n",
"4 0.3 28.50 2.5 \n",
".. ... ... ... \n",
"195 0.3 12.96 0.0 \n",
"196 0.3 12.95 0.0 \n",
"197 0.3 6.96 0.0 \n",
"198 0.3 7.80 0.0 \n",
"199 0.3 12.30 0.0 \n",
"\n",
"[200 rows x 18 columns]\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用本翻譯而引起的任何誤解或錯誤解讀概不負責。\n"
]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3.9.7 64-bit ('venv': venv)"
},
"language_info": {
"mimetype": "text/x-python",
"name": "python",
"pygments_lexer": "ipython3",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"version": "3.9.7",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"name": "04-nyc-taxi-join-weather-in-pandas",
"notebookId": 1709144033725344,
"interpreter": {
"hash": "6b9b57232c4b57163d057191678da2030059e733b8becc68f245de5a75abe84e"
},
"coopTranslator": {
"original_hash": "3bd4c20c4e8f3158f483f0f1cc543bb1",
"translation_date": "2025-09-02T08:36:17+00:00",
"source_file": "4-Data-Science-Lifecycle/14-Introduction/notebook.ipynb",
"language_code": "tw"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,55 @@
# 數據科學生命周期:分析
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/15-Analyzing.png)|
|:---:|
| 數據科學生命周期:分析 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/28)
在數據生命周期中的分析階段確認數據是否能回答所提出的問題或解決特定問題。這一步驟也可以用來確認模型是否正確地解決了這些問題。本課程專注於探索性數據分析Exploratory Data AnalysisEDA這是一種用於定義數據特徵和關係的技術並可用於為建模準備數據。
我們將使用 [Kaggle](https://www.kaggle.com/balaka18/email-spam-classification-dataset-csv/version/1) 的示例數據集,展示如何使用 Python 和 Pandas 庫來應用這些技術。該數據集包含一些電子郵件中常見詞彙的計數,這些電子郵件的來源是匿名的。使用此目錄中的 [notebook](notebook.ipynb) 來跟隨學習。
## 探索性數據分析
在生命周期的捕獲階段,我們獲取數據以及相關的問題和疑問,但我們如何知道這些數據能否支持最終結果呢?
回想一下,數據科學家在獲取數據時可能會提出以下問題:
- 我是否有足夠的數據來解決這個問題?
- 這些數據的質量是否足以解決這個問題?
- 如果我通過這些數據發現了額外的信息,我們是否應該考慮改變或重新定義目標?
探索性數據分析是一個了解數據的過程,可以用來回答這些問題,並識別處理數據集時可能面臨的挑戰。讓我們來看看一些用於實現這些目標的技術。
## 數據剖析、描述性統計和 Pandas
我們如何評估是否有足夠的數據來解決這個問題?數據剖析可以通過描述性統計技術來總結並收集數據集的一些整體信息。數據剖析幫助我們了解可用的數據,而描述性統計幫助我們了解數據的數量。
在之前的一些課程中,我們使用 Pandas 的 [`describe()` 函數](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html) 提供了一些描述性統計。它可以對數值數據提供計數、最大值和最小值、平均值、標準差以及分位數等信息。使用像 `describe()` 函數這樣的描述性統計可以幫助你評估數據量是否足夠,或者是否需要更多數據。
## 抽樣和查詢
探索大型數據集中的所有內容可能非常耗時,通常是由計算機完成的任務。然而,抽樣是一種理解數據的有用工具,能幫助我們更好地了解數據集的內容及其代表的意義。通過抽樣,你可以應用概率和統計來對數據得出一些一般性的結論。雖然沒有明確規定應該抽取多少數據,但需要注意的是,抽取的數據越多,對數據的概括就越精確。
Pandas 提供了 [`sample()` 函數](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sample.html),你可以傳遞一個參數來指定希望獲取的隨機樣本數量。
對數據進行一般性查詢可以幫助你回答一些普遍的問題和假設。與抽樣相比,查詢允許你控制並專注於數據中你感興趣的特定部分。
Pandas 庫中的 [`query()` 函數](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html) 允許你選擇列並通過檢索的行獲得關於數據的簡單答案。
## 使用可視化進行探索
你不必等到數據完全清理和分析後才開始創建可視化。事實上,在探索過程中使用可視化可以幫助識別數據中的模式、關係和問題。此外,可視化為那些未參與數據管理的人提供了一種溝通方式,並且可以是一個分享和澄清捕獲階段未解決問題的機會。請參考 [可視化部分](../../../../../../../../../3-Data-Visualization) 了解一些流行的可視化探索方法。
## 探索以識別不一致性
本課程中的所有主題都可以幫助識別缺失或不一致的值,但 Pandas 提供了一些函數來檢查這些問題。[isna() 或 isnull()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.isna.html) 可以檢查缺失值。探索這些值為什麼會出現缺失是一個重要的步驟,這可以幫助你決定要採取哪些 [措施來解決它們](/2-Working-With-Data/08-data-preparation/notebook.ipynb)。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/29)
## 作業
[探索答案](assignment.md)
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,154 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# 冬季和夏季的紐約市計程車數據\n",
"\n",
"請參考 [Data dictionary](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf) 以了解提供的欄位詳細資訊。\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"#Install the pandas library\r\n",
"!pip install pandas"
],
"outputs": [],
"metadata": {
"scrolled": true
}
},
{
"cell_type": "code",
"execution_count": 7,
"source": [
"import pandas as pd\r\n",
"\r\n",
"path = '../../data/taxi.csv'\r\n",
"\r\n",
"#Load the csv file into a dataframe\r\n",
"df = pd.read_csv(path)\r\n",
"\r\n",
"#Print the dataframe\r\n",
"print(df)\r\n"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" VendorID tpep_pickup_datetime tpep_dropoff_datetime passenger_count \\\n",
"0 2.0 2019-07-15 16:27:53 2019-07-15 16:44:21 3.0 \n",
"1 2.0 2019-07-17 20:26:35 2019-07-17 20:40:09 6.0 \n",
"2 2.0 2019-07-06 16:01:08 2019-07-06 16:10:25 1.0 \n",
"3 1.0 2019-07-18 22:32:23 2019-07-18 22:35:08 1.0 \n",
"4 2.0 2019-07-19 14:54:29 2019-07-19 15:19:08 1.0 \n",
".. ... ... ... ... \n",
"195 2.0 2019-01-18 08:42:15 2019-01-18 08:56:57 1.0 \n",
"196 1.0 2019-01-19 04:34:45 2019-01-19 04:43:44 1.0 \n",
"197 2.0 2019-01-05 10:37:39 2019-01-05 10:42:03 1.0 \n",
"198 2.0 2019-01-23 10:36:29 2019-01-23 10:44:34 2.0 \n",
"199 2.0 2019-01-30 06:55:58 2019-01-30 07:07:02 5.0 \n",
"\n",
" trip_distance RatecodeID store_and_fwd_flag PULocationID DOLocationID \\\n",
"0 2.02 1.0 N 186 233 \n",
"1 1.59 1.0 N 141 161 \n",
"2 1.69 1.0 N 246 249 \n",
"3 0.90 1.0 N 229 141 \n",
"4 4.79 1.0 N 237 107 \n",
".. ... ... ... ... ... \n",
"195 1.18 1.0 N 43 237 \n",
"196 2.30 1.0 N 148 234 \n",
"197 0.83 1.0 N 237 263 \n",
"198 1.12 1.0 N 144 113 \n",
"199 2.41 1.0 N 209 107 \n",
"\n",
" payment_type fare_amount extra mta_tax tip_amount tolls_amount \\\n",
"0 1.0 12.0 1.0 0.5 4.08 0.0 \n",
"1 2.0 10.0 0.5 0.5 0.00 0.0 \n",
"2 2.0 8.5 0.0 0.5 0.00 0.0 \n",
"3 1.0 4.5 3.0 0.5 1.65 0.0 \n",
"4 1.0 19.5 0.0 0.5 5.70 0.0 \n",
".. ... ... ... ... ... ... \n",
"195 1.0 10.0 0.0 0.5 2.16 0.0 \n",
"196 1.0 9.5 0.5 0.5 2.15 0.0 \n",
"197 1.0 5.0 0.0 0.5 1.16 0.0 \n",
"198 2.0 7.0 0.0 0.5 0.00 0.0 \n",
"199 1.0 10.5 0.0 0.5 1.00 0.0 \n",
"\n",
" improvement_surcharge total_amount congestion_surcharge \n",
"0 0.3 20.38 2.5 \n",
"1 0.3 13.80 2.5 \n",
"2 0.3 11.80 2.5 \n",
"3 0.3 9.95 2.5 \n",
"4 0.3 28.50 2.5 \n",
".. ... ... ... \n",
"195 0.3 12.96 0.0 \n",
"196 0.3 12.95 0.0 \n",
"197 0.3 6.96 0.0 \n",
"198 0.3 7.80 0.0 \n",
"199 0.3 12.30 0.0 \n",
"\n",
"[200 rows x 18 columns]\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"# 使用以下單元格進行您的探索性數據分析\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。\n"
]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3.9.7 64-bit ('venv': venv)"
},
"language_info": {
"mimetype": "text/x-python",
"name": "python",
"pygments_lexer": "ipython3",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"version": "3.9.7",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"name": "04-nyc-taxi-join-weather-in-pandas",
"notebookId": 1709144033725344,
"interpreter": {
"hash": "6b9b57232c4b57163d057191678da2030059e733b8becc68f245de5a75abe84e"
},
"coopTranslator": {
"original_hash": "7bca1c1abc1e55842817b62e44e1a963",
"translation_date": "2025-09-02T08:33:45+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/assignment.ipynb",
"language_code": "tw"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,25 @@
# 探索答案
這是上一課[作業](../14-Introduction/assignment.md)的延續,我們之前簡單瀏覽了數據集。現在,我們將更深入地研究這些數據。
再次重申,客戶想知道的問題是:**紐約市的黃色計程車乘客在冬季還是夏季給司機的小費更多?**
您的團隊目前處於數據科學生命周期的[分析](README.md)階段負責對數據集進行探索性數據分析。您已獲得一個筆記本和數據集其中包含2019年1月和7月的200筆計程車交易記錄。
## 指導說明
在此目錄中,有一個[筆記本](../../../../4-Data-Science-Lifecycle/15-analyzing/assignment.ipynb)和來自[計程車與禮車委員會](https://docs.microsoft.com/en-us/azure/open-datasets/dataset-taxi-yellow?tabs=azureml-opendatasets)的數據。請參考[數據集字典](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf)和[用戶指南](https://www1.nyc.gov/assets/tlc/downloads/pdf/trip_record_user_guide.pdf)以獲取更多關於數據的信息。
使用本課中學到的一些技術,在筆記本中進行自己的探索性數據分析(如有需要可新增單元格),並回答以下問題:
- 數據中還有哪些其他因素可能影響小費金額?
- 哪些欄位最有可能不需要用來回答客戶的問題?
- 根據目前提供的數據,是否有任何證據顯示季節性的小費行為?
## 評分標準
卓越 | 足夠 | 需要改進
--- | --- | ---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,193 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# 分析數據\n",
"[課程](README.md)中提到的 Pandas 函數範例。\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 1,
"source": [
"import pandas as pd\r\n",
"import glob\r\n",
"\r\n",
"#Loading the dataset\r\n",
"path = '../../data/emails.csv'\r\n",
"email_df = pd.read_csv(path)"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 2,
"source": [
"# Using Describe on the email dataset\r\n",
"print(email_df.describe())"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" the to ect and for of \\\n",
"count 406.000000 406.000000 406.000000 406.000000 406.000000 406.000000 \n",
"mean 7.022167 6.519704 4.948276 3.059113 3.502463 2.662562 \n",
"std 10.945522 9.801907 9.293820 6.267806 4.901372 5.443939 \n",
"min 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 \n",
"25% 1.000000 1.000000 1.000000 0.000000 1.000000 0.000000 \n",
"50% 3.000000 3.000000 2.000000 1.000000 2.000000 1.000000 \n",
"75% 9.000000 7.750000 4.000000 3.000000 4.750000 3.000000 \n",
"max 99.000000 88.000000 79.000000 69.000000 39.000000 57.000000 \n",
"\n",
" a you in on is this \\\n",
"count 406.000000 406.000000 406.000000 406.000000 406.000000 406.000000 \n",
"mean 57.017241 2.394089 10.817734 11.591133 5.901478 1.485222 \n",
"std 78.868243 4.067015 19.050972 16.407175 8.793103 2.912473 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 15.000000 0.000000 1.250000 3.000000 1.000000 0.000000 \n",
"50% 29.000000 1.000000 5.000000 6.000000 3.000000 0.000000 \n",
"75% 61.000000 3.000000 12.000000 13.000000 7.000000 2.000000 \n",
"max 843.000000 31.000000 223.000000 125.000000 61.000000 24.000000 \n",
"\n",
" i be that will \n",
"count 406.000000 406.000000 406.000000 406.000000 \n",
"mean 47.155172 2.950739 1.034483 0.955665 \n",
"std 71.043009 4.297865 1.904846 2.042271 \n",
"min 0.000000 0.000000 0.000000 0.000000 \n",
"25% 11.000000 1.000000 0.000000 0.000000 \n",
"50% 24.000000 1.000000 0.000000 0.000000 \n",
"75% 50.750000 3.000000 1.000000 1.000000 \n",
"max 754.000000 40.000000 14.000000 24.000000 \n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 5,
"source": [
"# Sampling 10 emails\r\n",
"print(email_df.sample(10))"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" Email No. the to ect and for of a you in on is this i \\\n",
"150 Email 151 0 1 2 0 3 0 15 0 0 5 0 0 7 \n",
"380 Email 5147 0 3 2 0 0 0 7 0 1 1 0 0 3 \n",
"19 Email 20 3 4 11 0 4 2 32 1 1 3 9 5 25 \n",
"300 Email 301 2 1 1 0 1 1 15 2 2 3 2 0 8 \n",
"307 Email 308 0 0 1 0 0 0 1 0 1 0 0 0 2 \n",
"167 Email 168 2 2 2 1 5 1 24 2 5 6 4 0 30 \n",
"320 Email 321 10 12 4 6 8 6 187 5 26 28 23 2 171 \n",
"61 Email 62 0 1 1 0 4 1 15 4 4 3 3 0 19 \n",
"26 Email 27 5 4 1 1 4 4 51 0 8 6 6 2 44 \n",
"73 Email 74 0 0 1 0 0 0 7 0 4 3 0 0 6 \n",
"\n",
" be that will \n",
"150 1 0 0 \n",
"380 0 0 0 \n",
"19 3 0 1 \n",
"300 0 0 0 \n",
"307 0 0 0 \n",
"167 2 0 0 \n",
"320 5 1 1 \n",
"61 2 0 0 \n",
"26 6 0 0 \n",
"73 0 0 0 \n"
]
}
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 14,
"source": [
"# Returns rows where there are more occurrences of \"to\" than \"the\"\r\n",
"print(email_df.query('the < to'))"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" Email No. the to ect and for of a you in on is this i \\\n",
"1 Email 2 8 13 24 6 6 2 102 1 18 21 13 0 61 \n",
"3 Email 4 0 5 22 0 5 1 51 2 1 5 9 2 16 \n",
"5 Email 6 4 5 1 4 2 3 45 1 16 12 8 1 52 \n",
"7 Email 8 0 2 2 3 1 2 21 6 2 6 2 0 28 \n",
"13 Email 14 4 5 7 1 5 1 37 1 8 8 6 1 43 \n",
".. ... ... .. ... ... ... .. ... ... .. .. .. ... .. \n",
"390 Email 5157 4 13 1 0 3 1 48 2 8 26 9 1 45 \n",
"393 Email 5160 2 13 1 0 2 1 38 2 7 24 6 1 34 \n",
"396 Email 5163 2 3 1 2 1 2 32 0 7 3 2 0 26 \n",
"404 Email 5171 2 7 1 0 2 1 28 2 8 11 7 1 39 \n",
"405 Email 5172 22 24 5 1 6 5 148 8 23 13 5 4 99 \n",
"\n",
" be that will \n",
"1 4 2 0 \n",
"3 2 0 0 \n",
"5 2 0 0 \n",
"7 1 0 1 \n",
"13 1 0 1 \n",
".. .. ... ... \n",
"390 1 0 0 \n",
"393 1 0 0 \n",
"396 3 0 0 \n",
"404 1 0 0 \n",
"405 6 4 1 \n",
"\n",
"[169 rows x 17 columns]\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python",
"version": "3.9.7",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3.9.7 64-bit ('venv': venv)"
},
"interpreter": {
"hash": "6b9b57232c4b57163d057191678da2030059e733b8becc68f245de5a75abe84e"
},
"coopTranslator": {
"original_hash": "9d102c8c3cdbc8ea4e92fc32593462c6",
"translation_date": "2025-09-02T08:30:41+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb",
"language_code": "tw"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,213 @@
# 數據科學生命周期:溝通
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev)](../../sketchnotes/16-Communicating.png)|
|:---:|
| 數據科學生命周期:溝通 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/30)
透過上方的課前測驗來測試你對即將學習內容的了解!
# 簡介
### 什麼是溝通?
讓我們從定義溝通的含義開始這堂課。**溝通是傳遞或交換信息的過程。** 信息可以是想法、思考、感受、消息、隱秘信號、數據——任何一個**_發送者_**(傳遞信息的人)希望**_接收者_**(接收信息的人)理解的內容。在這堂課中,我們將把發送者稱為溝通者,而接收者稱為受眾。
### 數據溝通與故事講述
我們知道溝通的目的是傳遞或交換信息。但在溝通數據時,目標不應僅僅是向受眾傳遞數字,而是要講述一個由數據支撐的故事——有效的數據溝通與故事講述是密不可分的。受眾更可能記住你講述的故事,而不是你提供的數字。在這堂課的後半部分,我們將探討一些方法,幫助你更有效地利用故事講述來溝通數據。
### 溝通的類型
在這堂課中,我們將討論兩種不同類型的溝通:單向溝通和雙向溝通。
**單向溝通**是指發送者向接收者傳遞信息,而不需要任何反饋或回應。我們每天都能看到單向溝通的例子——例如群發電子郵件、新聞報導最新事件,或者電視廣告告訴你他們的產品有多好。在這些情況下,發送者並不尋求信息的交換,他們只是希望傳遞或提供信息。
**雙向溝通**是指所有參與方既是發送者又是接收者。發送者首先向接收者溝通,接收者則提供反饋或回應。雙向溝通是我們通常所認為的溝通方式,例如面對面的交談、電話通話、社交媒體互動或短信交流。
在溝通數據時,有些情況下你會使用單向溝通(例如在會議或大型群體中進行演講,之後不會直接回答問題),而有些情況下你會使用雙向溝通(例如用數據說服幾位利益相關者支持某項提案,或說服同事投入時間和精力開發新項目)。
# 有效溝通
### 作為溝通者的責任
在溝通時,你的責任是確保接收者能夠理解你希望他們接收到的信息。在溝通數據時,你不僅希望接收者記住數字,更希望他們能理解由數據支撐的故事。一位優秀的數據溝通者也是一位優秀的故事講述者。
如何用數據講述故事?方法無窮無盡——但以下是我們在這堂課中將討論的六種方法:
1. 理解你的受眾、溝通渠道和溝通方式
2. 從結果出發
3. 像講述真正的故事一樣進行溝通
4. 使用有意義的詞語和短語
5. 善用情感
以下是每種策略的詳細解釋。
### 1. 理解你的受眾、溝通渠道和溝通方式
你與家人溝通的方式可能與你與朋友溝通的方式不同。你可能會使用不同的詞語和短語,讓對方更容易理解。同樣的原則也適用於數據溝通。思考你正在與誰溝通,思考他們的目標以及他們對你所描述情境的背景知識。
你可以將大多數受眾分為以下幾個類別。在 _哈佛商業評論_ 的文章“[如何用數據講故事](http://blogs.hbr.org/2013/04/how-to-tell-a-story-with-data/)”中,戴爾的執行策略師 Jim Stikeleather 提出了五種受眾類型:
- **初學者**:第一次接觸該主題,但不希望過於簡化
- **普通人**:對主題有所了解,但希望獲得概述和主要主題
- **管理者**:深入了解細節和相互關係,並能採取行動
- **專家**:更注重探索和發現,較少需要故事講述,並希望獲得詳細信息
- **高管**:只關注重要性和結論,並希望快速了解加權概率
這些類別可以幫助你決定如何向受眾展示數據。
除了考慮受眾的類別,你還應該考慮你用來與受眾溝通的渠道。如果你是寫備忘錄或電子郵件,與在會議或大會上進行演講的方式應有所不同。
此外,了解你將如何與受眾溝通(使用單向溝通或雙向溝通)也至關重要。
如果你的受眾主要是初學者,並且你使用的是單向溝通,你必須首先教育受眾並提供適當的背景知識。然後,你需要向他們展示你的數據,並解釋數據的含義以及數據的重要性。在這種情況下,你可能需要專注於提高清晰度,因為受眾無法直接向你提問。
如果你的受眾主要是管理者,並且你使用的是雙向溝通,你可能不需要教育受眾或提供太多背景知識。你可以直接討論你收集的數據及其重要性。然而,在這種情況下,你需要專注於時間管理和控制你的演示。使用雙向溝通時(尤其是面對尋求“深入了解細節和相互關係”的管理者受眾),可能會出現一些問題,導致討論偏離你想要講述的故事方向。當這種情況發生時,你可以採取行動,將討論拉回到你的故事主題。
### 2. 從結果出發
從結果出發意味著在開始溝通之前,先了解你希望受眾獲得的主要信息。提前思考你希望受眾獲得的關鍵信息,可以幫助你構建一個受眾能夠跟隨的故事。從結果出發適用於單向溝通和雙向溝通。
如何從結果出發?在溝通數據之前,先寫下你的關鍵信息。然後,在準備用數據講述的故事的每一步,都問自己:“這如何融入我正在講述的故事?”
需要注意的是——雖然從結果出發是理想的,但你不應只溝通支持你預期結果的數據。這種做法被稱為挑選性溝通,指溝通者只傳遞支持自己觀點的數據,而忽略其他數據。
如果你收集的所有數據都明確支持你的預期結果,那很好。但如果你收集的數據中有些不支持你的結果,甚至支持與你的關鍵信息相反的觀點,你也應該溝通這些數據。如果出現這種情況,坦誠地告訴受眾,並解釋為什麼即使所有數據並不完全支持你的故事,你仍然選擇堅持自己的故事。
### 3. 像講述真正的故事一樣進行溝通
傳統故事通常分為五個階段。你可能聽過這些階段被表述為:背景介紹、情節升級、高潮、情節下降和結局。或者更容易記住的:背景、衝突、高潮、結束和結論。在溝通你的數據和故事時,你可以採用類似的方法。
你可以從背景開始,設置場景並確保受眾都在同一頁面上。然後引入衝突——為什麼需要收集這些數據?你試圖解決什麼問題?接下來是高潮——數據是什麼?數據的含義是什麼?數據告訴我們需要哪些解決方案?然後是結束——你可以重申問題和提出的解決方案。最後是結論——總結你的關鍵信息以及你建議團隊採取的下一步行動。
### 4. 使用有意義的詞語和短語
如果我們一起合作開發一款產品,我對你說“我們的用戶在註冊平台時花了很長時間”,你會估計“很長時間”是多久?一小時?一周?很難確定。如果我對整個受眾說這句話呢?每個人可能會對用戶註冊平台所需的時間有不同的理解。
但如果我說“我們的用戶平均花了3分鐘註冊並完成平台的使用”那就清晰多了。
在溝通數據時,很容易認為受眾的思維方式和你一樣。但事實並非總是如此。清晰地傳達你的數據及其含義是你作為溝通者的責任。如果數據或故事不清晰,受眾就很難跟隨,也更不可能理解你的關鍵信息。
你可以通過使用有意義的詞語和短語,而不是模糊的表述,來更清晰地溝通數據。以下是一些例子:
- 我們有一個*令人印象深刻*的一年!
- 一個人可能認為令人印象深刻的一年意味著收入增長2%-3%而另一個人可能認為是50%-60%的增長。
- 我們用戶的成功率*顯著*提高。
- 多大的提高才算顯著?
- 這項工作需要*大量*努力。
- 多少努力才算大量?
使用模糊的詞語可能在引入更多數據或總結故事時有用,但請考慮確保演示的每個部分對受眾都清晰。
### 5. 善用情感
情感是故事講述的關鍵。在用數據講述故事時,情感更為重要。當你溝通數據時,一切都圍繞你希望受眾獲得的關鍵信息。喚起受眾的情感有助於他們產生共鳴,並更可能採取行動。情感還能增加受眾記住你的信息的可能性。
你可能在電視廣告中遇到過這種情況。一些廣告非常沉重,利用悲傷的情感與受眾建立聯繫,讓他們更關注所展示的數據。或者,一些廣告非常歡快,讓你將他們的數據與快樂的感覺聯繫起來。
如何在溝通數據時使用情感?以下是幾種方法:
- 使用見證和個人故事
- 在收集數據時,嘗試收集定量和定性數據,並在溝通時整合這兩種類型的數據。如果你的數據主要是定量的,尋找個人故事來了解他們的經歷。
- 使用圖像
- 圖像幫助受眾將自己置於情境中。使用圖像可以引導受眾產生你希望他們對數據的情感。
- 使用顏色
- 不同的顏色喚起不同的情感。以下是一些常見顏色及其喚起的情感。需要注意的是,顏色在不同文化中可能有不同的含義。
- 藍色通常喚起和平和信任的情感
- 綠色通常與自然和環境相關
- 紅色通常代表激情和興奮
- 黃色通常代表樂觀和快樂
# 溝通案例研究
Emerson 是一款移動應用的產品經理。他注意到客戶在週末提交的投訴和錯誤報告增加了42%。他還發現如果客戶提交的投訴在48小時內未得到回應他們給應用商店評分1或2星的可能性增加了32%。
經過研究Emerson 提出了幾個解決方案來解決這個問題。他安排了一次30分鐘的會議與公司的三位主管溝通數據和提出的解決方案。
在這次會議中Emerson 的目標是讓公司主管理解以下兩個解決方案可以提高應用的評分,這可能會轉化為更高的收入。
**解決方案1.** 雇用客服人員在週末工作
**解決方案2.** 購買新的客服工單系統,讓客服人員能輕鬆識別隊列中等待時間最長的投訴——以便優先處理。
在會議中Emerson 花了5分鐘解釋為什麼應用商店的低評分是有害的10分鐘解釋研究過程和如何識別趨勢10分鐘討論一些最近的客戶投訴最後5分鐘簡略介紹了兩個潛在解決方案。
艾默生在這次會議中是否有效地進行了溝通?
在會議中一位公司主管只專注於艾默生所提到的10分鐘客戶投訴內容。會後這些投訴成為該主管唯一記得的部分。另一位公司主管主要關注艾默生描述的研究過程。第三位公司主管記得艾默生提出的解決方案但不確定這些方案如何實施。
在上述情況中,可以看到艾默生希望主管們從會議中獲得的重點與他們實際記住的內容之間存在顯著差距。以下是艾默生可以考慮的另一種方法。
艾默生如何改進這種方法?
背景、衝突、高潮、結尾、結論
**背景** - 艾默生可以花前5分鐘介紹整個情況並確保主管們了解這些問題如何影響公司關鍵指標例如收入。
可以這樣表述「目前我們的應用程式在應用商店的評分是2.5。應用商店的評分對應用商店優化至關重要,這會影響有多少用戶在搜索中看到我們的應用,以及潛在用戶如何看待我們的應用。而當然,我們的用戶數量直接與收入掛鉤。」
**衝突** 接下來艾默生可以花5分鐘左右談論衝突。
可以這樣表述「用戶在週末提交的投訴和錯誤報告多了42%。提交投訴後48小時內未得到回覆的客戶給我們的應用程式評分超過2的可能性降低了32%。將我們的應用程式評分提高到4將提升我們的可見度20-30%我預計這將使收入增加10%。」當然,艾默生應該準備好為這些數據提供合理的解釋。
**高潮** 在鋪墊完成後艾默生可以花5分鐘左右進入高潮部分。
艾默生可以介紹提出的解決方案說明這些方案如何解決所列出的問題如何融入現有的工作流程這些方案的成本是多少投資回報率ROI如何甚至可以展示一些解決方案實施後的截圖或線框圖。艾默生還可以分享一些用戶的感言例如那些投訴超過48小時才得到回覆的用戶的感言甚至是公司內部現有客服代表對目前工單系統的評論。
**結尾** 現在艾默生可以花5分鐘重申公司面臨的問題回顧提出的解決方案並再次說明為什麼這些方案是正確的選擇。
**結論** 由於這是一場與少數利益相關者的會議會使用雙向溝通艾默生可以計劃留出10分鐘的時間回答問題以確保主管們在會議結束前能夠澄清任何困惑的地方。
如果艾默生採用方法#2主管們更有可能從會議中獲得艾默生希望他們記住的重點——即投訴和錯誤的處理方式可以改進並且有兩個解決方案可以實施以實現這一改進。這種方法將更有效地傳達艾默生希望溝通的數據和故事。
# 結論
### 主要要點摘要
- 溝通是傳遞或交換信息。
- 在溝通數據時,目標不應僅僅是向觀眾傳遞數字,而應該是傳達一個由數據支持的故事。
- 溝通有兩種類型:單向溝通(信息傳遞無意圖回應)和雙向溝通(信息來回交流)。
- 有許多策略可以用來講述數據故事,我們討論了以下五種策略:
- 了解你的觀眾、媒介和溝通方式
- 從結果開始思考
- 像講述真正的故事一樣進行
- 使用有意義的詞語和短語
- 善用情感
### 自學推薦資源
[The Five C's of Storytelling - Articulate Persuasion](http://articulatepersuasion.com/the-five-cs-of-storytelling/)
[1.4 Your Responsibilities as a Communicator Business Communication for Success (umn.edu)](https://open.lib.umn.edu/businesscommunication/chapter/1-4-your-responsibilities-as-a-communicator/)
[How to Tell a Story with Data (hbr.org)](https://hbr.org/2013/04/how-to-tell-a-story-with-data)
[Two-Way Communication: 4 Tips for a More Engaged Workplace (yourthoughtpartner.com)](https://www.yourthoughtpartner.com/blog/bid/59576/4-steps-to-increase-employee-engagement-through-two-way-communication)
[6 succinct steps to great data storytelling - BarnRaisers, LLC (barnraisersllc.com)](https://barnraisersllc.com/2021/05/02/6-succinct-steps-to-great-data-storytelling/)
[How to Tell a Story With Data | Lucidchart Blog](https://www.lucidchart.com/blog/how-to-tell-a-story-with-data)
[6 Cs of Effective Storytelling on Social Media | Cooler Insights](https://coolerinsights.com/2018/06/effective-storytelling-social-media/)
[The Importance of Emotions In Presentations | Ethos3 - A Presentation Training and Design Agency](https://ethos3.com/2015/02/the-importance-of-emotions-in-presentations/)
[Data storytelling: linking emotions and rational decisions (toucantoco.com)](https://www.toucantoco.com/en/blog/data-storytelling-dataviz)
[Emotional Advertising: How Brands Use Feelings to Get People to Buy (hubspot.com)](https://blog.hubspot.com/marketing/emotions-in-advertising-examples)
[Choosing Colors for Your Presentation Slides | Think Outside The Slide](https://www.thinkoutsidetheslide.com/choosing-colors-for-your-presentation-slides/)
[How To Present Data [10 Expert Tips] | ObservePoint](https://resources.observepoint.com/blog/10-tips-for-presenting-data)
[Microsoft Word - Persuasive Instructions.doc (tpsnva.org)](https://www.tpsnva.org/teach/lq/016/persinstr.pdf)
[The Power of Story for Your Data (thinkhdi.com)](https://www.thinkhdi.com/library/supportworld/2019/power-story-your-data.aspx)
[Common Mistakes in Data Presentation (perceptualedge.com)](https://www.perceptualedge.com/articles/ie/data_presentation.pdf)
[Infographic: Here are 15 Common Data Fallacies to Avoid (visualcapitalist.com)](https://www.visualcapitalist.com/here-are-15-common-data-fallacies-to-avoid/)
[Cherry Picking: When People Ignore Evidence that They Dislike Effectiviology](https://effectiviology.com/cherry-picking/#How_to_avoid_cherry_picking)
[Tell Stories with Data: Communication in Data Science | by Sonali Verghese | Towards Data Science](https://towardsdatascience.com/tell-stories-with-data-communication-in-data-science-5266f7671d7)
[1. Communicating Data - Communicating Data with Tableau [Book] (oreilly.com)](https://www.oreilly.com/library/view/communicating-data-with/9781449372019/ch01.html)
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/31)
透過上方的課後測驗回顧你剛學到的內容!
## 作業
[市場研究](assignment.md)
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,15 @@
# 講述一個故事
## 說明
數據科學的核心在於講故事。選擇任意一個數據集,撰寫一篇簡短的文章,描述你可以從中講述的故事。你希望你的數據集能揭示什麼?如果它的揭示結果出現問題,你會怎麼做?如果數據無法輕易揭示其秘密,你又該如何應對?思考你的數據集可能呈現的各種情境,並將它們記錄下來。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
一篇一頁的文章以 .doc 格式呈現,對數據集進行了解釋、記錄、標註來源,並基於數據提供了一個連貫的故事,包含詳細的數據示例。| 一篇較短的文章,細節較少 | 文章在上述某一方面有所欠缺。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,19 @@
# 數據科學生命週期
![communication](../../../translated_images/zh-TW/communication.06d8e2a88d30d168d661ad9f9f0a4f947ebff3719719cfdaf9ed00a406a01ead.jpg)
> 圖片由 <a href="https://unsplash.com/@headwayio?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Headway</a> 提供,來自 <a href="https://unsplash.com/s/photos/communication?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
在這些課程中,您將探索數據科學生命週期的一些方面,包括數據的分析和溝通。
### 主題
1. [介紹](14-Introduction/README.md)
2. [分析](15-analyzing/README.md)
3. [溝通](16-communication/README.md)
### 致謝
這些課程由 [Jalen McGee](https://twitter.com/JalenMCG) 和 [Jasmine Greenaway](https://twitter.com/paladique) 用 ❤️ 編寫。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,104 @@
# 雲端中的資料科學介紹
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/17-DataScience-Cloud.png)|
|:---:|
| 雲端中的資料科學:介紹 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
在本課程中,您將學習雲端的基本原則,了解使用雲端服務來執行資料科學項目的好處,並探索一些在雲端中運行的資料科學項目範例。
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/32)
## 什麼是雲端?
雲端,或稱雲端運算,是透過網際網路提供一系列按需付費的運算服務,這些服務基於一個基礎架構上運行。服務包括存儲、資料庫、網路、軟體、分析以及智能服務等解決方案。
我們通常將公有雲、私有雲和混合雲區分如下:
* 公有雲:公有雲由第三方雲端服務提供商擁有和運營,並透過網際網路向公眾提供其運算資源。
* 私有雲:私有雲指的是專門由單一企業或組織使用的雲端運算資源,服務和基礎架構維護在私人網路上。
* 混合雲:混合雲是一種結合公有雲和私有雲的系統。使用者可以選擇本地數據中心,同時允許數據和應用程式在一個或多個公有雲上運行。
大多數雲端運算服務分為三類:基礎架構即服務 (IaaS)、平台即服務 (PaaS) 和軟體即服務 (SaaS)。
* 基礎架構即服務 (IaaS):使用者租用 IT 基礎架構,例如伺服器和虛擬機 (VM)、存儲、網路、操作系統。
* 平台即服務 (PaaS):使用者租用一個開發、測試、交付和管理軟體應用程式的環境。使用者不需要擔心設置或管理伺服器、存儲、網路和資料庫等基礎架構。
* 軟體即服務 (SaaS):使用者透過網際網路按需訪問軟體應用程式,通常以訂閱方式提供。使用者不需要擔心托管和管理軟體應用程式、基礎架構或維護,例如軟體升級和安全修補。
一些最大的雲端提供商包括 Amazon Web Services、Google Cloud Platform 和 Microsoft Azure。
## 為什麼選擇雲端進行資料科學?
開發者和 IT 專業人士選擇使用雲端的原因有很多,包括以下幾點:
* 創新:您可以透過將雲端提供商創建的創新服務直接整合到您的應用程式中來提升應用程式的功能。
* 靈活性:您只需支付所需的服務費用,並可從多種服務中選擇。通常採用按需付費模式,並根據需求調整服務。
* 預算:您不需要進行初期投資來購買硬體和軟體,設置和運行本地數據中心,僅需支付使用的費用。
* 可擴展性:您的資源可以根據項目需求進行擴展,這意味著您的應用程式可以根據外部因素在任何時間點使用更多或更少的運算能力、存儲和頻寬。
* 生產力:您可以專注於業務,而不是花時間處理可以由其他人管理的任務,例如管理數據中心。
* 可靠性:雲端運算提供多種方式來持續備份您的數據,並可設置災難恢復計劃,即使在危機時期也能保持業務和服務運行。
* 安全性:您可以受益於加強項目安全性的政策、技術和控制措施。
以上是人們選擇使用雲端服務的一些常見原因。現在我們對雲端及其主要優勢有了更好的理解,接下來我們將更具體地探討資料科學家和處理數據的開發者的工作,以及雲端如何幫助他們應對可能面臨的多種挑戰:
* 存儲大量數據:與其購買、管理和保護大型伺服器,您可以直接將數據存儲在雲端,例如使用 Azure Cosmos DB、Azure SQL Database 和 Azure Data Lake Storage。
* 執行數據整合:數據整合是資料科學的重要部分,讓您從數據收集過渡到採取行動。透過雲端提供的數據整合服務,您可以從多個來源收集、轉換和整合數據到單一數據倉庫,例如使用 Data Factory。
* 處理數據:處理大量數據需要大量運算能力,而並非每個人都能擁有足夠強大的機器,因此許多人選擇直接利用雲端的巨大運算能力來運行和部署解決方案。
* 使用數據分析服務:雲端服務如 Azure Synapse Analytics、Azure Stream Analytics 和 Azure Databricks幫助您將數據轉化為可行的洞察。
* 使用機器學習和數據智能服務:與其從零開始,您可以使用雲端提供商提供的機器學習算法,例如 AzureML。您還可以使用認知服務例如語音轉文字、文字轉語音、電腦視覺等。
## 雲端中的資料科學範例
讓我們透過幾個場景來更具體地了解。
### 即時社交媒體情緒分析
我們從一個常見的機器學習入門場景開始:即時社交媒體情緒分析。
假設您運營一個新聞媒體網站,並希望利用即時數據來了解讀者可能感興趣的內容。為了更深入了解,您可以建立一個程序,對 Twitter 上與讀者相關的主題進行即時情緒分析。
您需要關注的關鍵指標是特定主題(標籤)的推文數量和情緒,情緒是透過分析工具對指定主題進行情緒分析得出的。
建立此項目所需的步驟如下:
* 創建一個事件中心以收集 Twitter 的輸入數據流
* 配置並啟動 Twitter 客戶端應用程式,調用 Twitter Streaming APIs
* 創建一個 Stream Analytics 作業
* 指定作業輸入和查詢
* 創建輸出接收器並指定作業輸出
* 啟動作業
查看完整過程,請參考[文件](https://docs.microsoft.com/azure/stream-analytics/stream-analytics-twitter-sentiment-analysis-trends?WT.mc_id=academic-77958-bethanycheum&ocid=AID30411099)。
### 科學論文分析
讓我們看另一個由本課程作者之一 [Dmitry Soshnikov](http://soshnikov.com) 創建的項目範例。
Dmitry 創建了一個分析 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&ocid=AID3041109) 提取和預處理信息
* 使用 [Azure ML](https://azure.microsoft.com/services/machine-learning?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 進行並行處理
* 使用 [Cosmos DB](https://azure.microsoft.com/services/cosmos-db?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 存儲和查詢信息
* 使用 Power BI 創建交互式儀表板進行數據探索和可視化
查看完整過程,請訪問 [Dmitry 的博客](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)。
如您所見,我們可以以多種方式利用雲端服務來進行資料科學。
## 備註
來源:
* https://azure.microsoft.com/overview/what-is-cloud-computing?ocid=AID3041109
* https://docs.microsoft.com/azure/stream-analytics/stream-analytics-twitter-sentiment-analysis-trends?ocid=AID3041109
* https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/
## 課後測驗
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/33)
## 作業
[市場研究](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,14 @@
# 市場調查
## 說明
在本課程中,你學到了幾個重要的雲端服務提供商。進行一些市場調查,了解每個提供商能為數據科學家提供什麼服務。這些服務是否具有可比性?撰寫一篇文章,描述其中三個或更多雲端服務提供商的服務內容。
## 評分標準
優秀 | 足夠 | 需要改進
--- | --- | --- |
一篇一頁的文章描述了三個雲端服務提供商的數據科學服務,並區分了它們之間的差異。 | 提交了一篇較短的文章 | 提交了一篇未完成分析的文章
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,342 @@
# 雲端中的數據科學:「低代碼/無代碼」方式
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/18-DataScience-Cloud.png)|
|:---:|
| 雲端中的數據科學:低代碼 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 提供_ |
目錄:
- [雲端中的數據科學:「低代碼/無代碼」方式](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [課前測驗](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1. 簡介](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.1 什麼是 Azure Machine Learning](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.2 心力衰竭預測項目:](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.3 心力衰竭數據集:](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2. 在 Azure ML Studio 中進行低代碼/無代碼模型訓練](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.1 創建 Azure ML 工作區](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2 計算資源](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2.1 選擇適合的計算資源選項](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2.2 創建計算叢集](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.3 加載數據集](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.4 使用 AutoML 進行低代碼/無代碼訓練](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3. 低代碼/無代碼模型部署與端點使用](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3.1 模型部署](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3.2 端點使用](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [🚀 挑戰](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [課後測驗](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [回顧與自學](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [作業](../../../../5-Data-Science-In-Cloud/18-Low-Code)
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/34)
## 1. 簡介
### 1.1 什麼是 Azure Machine Learning
Azure 雲平台包含超過 200 種產品和雲服務,旨在幫助您實現創新解決方案。
數據科學家通常需要花費大量時間探索和預處理數據,並嘗試各種模型訓練算法以生成準確的模型。這些任務耗時且經常導致計算硬件資源的低效使用。
[Azure ML](https://docs.microsoft.com/azure/machine-learning/overview-what-is-azure-machine-learning?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 是一個基於雲的平臺,用於在 Azure 中構建和運行機器學習解決方案。它提供了廣泛的功能,幫助數據科學家準備數據、訓練模型、發布預測服務並監控其使用情況。最重要的是,它通過自動化許多與模型訓練相關的耗時任務來提高效率,並允許使用可擴展的雲計算資源來處理大量數據,同時僅在實際使用時產生成本。
Azure ML 提供了開發者和數據科學家進行機器學習工作流所需的所有工具,包括:
- **Azure Machine Learning Studio**:一個基於網頁的門戶,提供低代碼和無代碼選項,用於模型訓練、部署、自動化、跟蹤和資產管理。該 Studio 與 Azure Machine Learning SDK 集成,提供無縫體驗。
- **Jupyter Notebooks**:快速原型設計和測試 ML 模型。
- **Azure Machine Learning Designer**:允許通過拖放模塊來構建實驗,並在低代碼環境中部署管道。
- **自動化機器學習界面 (AutoML)**:自動化機器學習模型開發的迭代任務,實現高效能和高生產力,同時保持模型質量。
- **數據標註**:一種輔助機器學習工具,用於自動標註數據。
- **Visual Studio Code 的機器學習擴展**:提供一個功能齊全的開發環境,用於構建和管理 ML 項目。
- **機器學習 CLI**:提供命令行工具來管理 Azure ML 資源。
- **與開源框架集成**:如 PyTorch、TensorFlow、Scikit-learn 等,用於訓練、部署和管理端到端的機器學習過程。
- **MLflow**:一個開源庫,用於管理機器學習實驗的生命周期。**MLFlow Tracking** 是 MLflow 的一個組件,用於記錄和跟蹤訓練運行的指標和模型工件,無論實驗環境如何。
### 1.2 心力衰竭預測項目:
毫無疑問,通過實踐和構建項目是檢驗技能和知識的最佳方式。在本課中,我們將探索兩種不同的方法來構建一個數據科學項目,用於預測心力衰竭發作,這兩種方法分別是通過 Azure ML Studio 的低代碼/無代碼方式和通過 Azure ML SDK如下圖所示
![項目架構](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/project-schema.PNG)
每種方法都有其優缺點。低代碼/無代碼方式更容易上手,因為它涉及與圖形用戶界面 (GUI) 的交互,無需事先了解代碼。這種方法可以快速測試項目的可行性並創建概念驗證 (POC)。然而,隨著項目的增長並需要進入生產階段,僅通過 GUI 創建資源將變得不可行。我們需要以編程方式自動化所有內容,從資源創建到模型部署。這時,了解如何使用 Azure ML SDK 就變得至關重要。
| | 低代碼/無代碼 | Azure ML SDK |
|-------------------|----------------|---------------------------|
| 代碼專業知識 | 不需要 | 需要 |
| 開發時間 | 快速且簡單 | 取決於代碼專業知識 |
| 生產準備 | 否 | 是 |
### 1.3 心力衰竭數據集:
心血管疾病 (CVDs) 是全球死亡的首要原因,佔全球死亡人數的 31%。環境和行為風險因素(如吸煙、不健康飲食和肥胖、缺乏運動以及有害的酒精使用)可以作為估算模型的特徵。能夠估算 CVD 發展的可能性對於預防高風險人群的發作具有重要意義。
Kaggle 提供了一個[心力衰竭數據集](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data),我們將在本項目中使用該數據集。您現在可以下載該數據集。這是一個包含 13 列12 個特徵和 1 個目標變量)和 299 行的表格數據集。
| | 變量名稱 | 類型 | 描述 | 示例 |
|----|---------------------------|-----------------|---------------------------------------------------------|-----------------|
| 1 | age | 數值型 | 患者年齡 | 25 |
| 2 | anaemia | 布爾型 | 紅細胞或血紅蛋白減少 | 0 或 1 |
| 3 | creatinine_phosphokinase | 數值型 | 血液中 CPK 酶的水平 | 542 |
| 4 | diabetes | 布爾型 | 患者是否患有糖尿病 | 0 或 1 |
| 5 | ejection_fraction | 數值型 | 每次心臟收縮時排出的血液百分比 | 45 |
| 6 | high_blood_pressure | 布爾型 | 患者是否有高血壓 | 0 或 1 |
| 7 | platelets | 數值型 | 血液中的血小板數量 | 149000 |
| 8 | serum_creatinine | 數值型 | 血液中的血清肌酐水平 | 0.5 |
| 9 | serum_sodium | 數值型 | 血液中的血清鈉水平 | jun |
| 10 | sex | 布爾型 | 女性或男性 | 0 或 1 |
| 11 | smoking | 布爾型 | 患者是否吸煙 | 0 或 1 |
| 12 | time | 數值型 | 隨訪期(天) | 4 |
|----|---------------------------|-----------------|---------------------------------------------------------|-----------------|
| 21 | DEATH_EVENT [目標] | 布爾型 | 患者是否在隨訪期間死亡 | 0 或 1 |
獲取數據集後,我們就可以在 Azure 中開始項目了。
## 2. 在 Azure ML Studio 中進行低代碼/無代碼模型訓練
### 2.1 創建 Azure ML 工作區
要在 Azure ML 中訓練模型,您首先需要創建一個 Azure ML 工作區。工作區是 Azure Machine Learning 的頂級資源,提供了一個集中式位置,用於管理您在使用 Azure Machine Learning 時創建的所有工件。工作區會記錄所有訓練運行的歷史記錄,包括日誌、指標、輸出以及腳本的快照。您可以使用這些信息來確定哪次訓練運行生成了最佳模型。[了解更多](https://docs.microsoft.com/azure/machine-learning/concept-workspace?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
建議使用與操作系統兼容的最新瀏覽器。支持以下瀏覽器:
- Microsoft Edge新版 Microsoft Edge最新版本。不支持舊版 Microsoft Edge
- Safari最新版本僅限 Mac
- Chrome最新版本
- Firefox最新版本
要使用 Azure Machine Learning請在您的 Azure 訂閱中創建一個工作區。然後,您可以使用該工作區來管理與機器學習工作負載相關的數據、計算資源、代碼、模型和其他工件。
> **_注意_** 只要 Azure Machine Learning 工作區存在於您的訂閱中,您的 Azure 訂閱將會因數據存儲而產生少量費用,因此建議在不再使用時刪除 Azure Machine Learning 工作區。
1. 使用與您的 Azure 訂閱相關聯的 Microsoft 賬戶登錄 [Azure 入口網站](https://ms.portal.azure.com/)。
2. 選擇 **+創建資源**
![工作區-1](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-1.PNG)
搜索 Machine Learning 並選擇 Machine Learning 磚塊
![工作區-2](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-2.PNG)
點擊創建按鈕
![工作區-3](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-3.PNG)
按以下方式填寫設置:
- 訂閱:您的 Azure 訂閱
- 資源組:創建或選擇一個資源組
- 工作區名稱:輸入一個唯一的工作區名稱
- 區域:選擇離您最近的地理區域
- 存儲帳戶:注意將為您的工作區創建的默認新存儲帳戶
- 密鑰保管庫:注意將為您的工作區創建的默認新密鑰保管庫
- 應用洞察:注意將為您的工作區創建的默認新應用洞察資源
- 容器註冊表:無(首次將模型部署到容器時會自動創建)
![工作區-4](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-4.PNG)
- 點擊創建 + 查看,然後點擊創建按鈕
3. 等待工作區創建完成(這可能需要幾分鐘)。然後在入口網站中進入該工作區。您可以通過 Machine Learning Azure 服務找到它。
4. 在工作區的概覽頁面,啟動 Azure Machine Learning Studio或打開一個新的瀏覽器標籤並導航到 https://ml.azure.com並使用您的 Microsoft 賬戶登錄 Azure Machine Learning Studio。如果系統提示選擇您的 Azure 目錄和訂閱,以及您的 Azure Machine Learning 工作區。
![工作區-5](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-5.PNG)
5. 在 Azure Machine Learning Studio 中,切換左上角的 ☰ 圖標以查看界面中的各個頁面。您可以使用這些頁面來管理工作區中的資源。
![工作區-6](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-6.PNG)
您可以使用 Azure 入口網站管理工作區但對於數據科學家和機器學習運營工程師來說Azure Machine Learning Studio 提供了一個更專注的用戶界面,用於管理工作區資源。
### 2.2 計算資源
計算資源是基於雲的資源,您可以在其上運行模型訓練和數據探索過程。您可以創建以下四種類型的計算資源:
- **計算實例**:數據科學家用於處理數據和模型的開發工作站。這涉及創建一個虛擬機 (VM) 並啟動一個筆記本實例。然後,您可以通過筆記本調用計算叢集來訓練模型。
- **計算叢集**:可擴展的虛擬機叢集,用於按需處理實驗代碼。訓練模型時需要使用計算叢集。計算叢集還可以使用專門的 GPU 或 CPU 資源。
- **推理叢集**:用於部署使用您訓練模型的預測服務的目標。
- **附加計算資源**:連結至現有的 Azure 計算資源,例如虛擬機器或 Azure Databricks 叢集。
#### 2.2.1 為計算資源選擇合適的選項
在建立計算資源時需要考慮一些關鍵因素,這些選擇可能是至關重要的決策。
**需要 CPU 還是 GPU**
CPU中央處理器是執行計算機程式指令的電子電路。GPU圖形處理器是一種專門的電子電路可以以非常高的速度執行與圖形相關的代碼。
CPU 和 GPU 架構的主要區別在於CPU 設計用於快速處理廣泛的任務(以 CPU 時鐘速度衡量但在同時執行的任務數量上有限。GPU 則設計用於平行計算,因此在深度學習任務中表現更佳。
| CPU | GPU |
|-----------------------------------------|-----------------------------|
| 價格較低 | 價格較高 |
| 並行性較低 | 並行性較高 |
| 深度學習模型訓練速度較慢 | 深度學習的最佳選擇 |
**叢集大小**
較大的叢集成本較高,但響應速度更快。因此,如果您有時間但預算有限,應該選擇小型叢集。相反,如果您有預算但時間有限,應該選擇大型叢集。
**虛擬機器大小**
根據您的時間和預算限制,您可以調整 RAM、磁碟、核心數量和時鐘速度的大小。增加這些參數會提高成本但性能也會更好。
**專用或低優先級實例?**
低優先級實例意味著它是可中斷的基本上Microsoft Azure 可以將這些資源分配給其他任務,從而中斷作業。專用實例(不可中斷)則意味著作業不會在未經您允許的情況下被終止。
這是另一個時間與金錢的考量,因為可中斷實例比專用實例便宜。
#### 2.2.2 建立計算叢集
在我們之前建立的 [Azure ML 工作區](https://ml.azure.com/) 中,進入計算資源頁面,您將能看到我們剛剛討論的不同計算資源(例如計算實例、計算叢集、推理叢集和附加計算資源)。在這個專案中,我們需要一個計算叢集來進行模型訓練。在 Studio 中,點擊 "Compute" 菜單,然後選擇 "Compute cluster" 標籤,點擊 "+ New" 按鈕以建立計算叢集。
![22](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-1.PNG)
1. 選擇您的選項:專用 vs 低優先級、CPU 或 GPU、虛擬機器大小和核心數量您可以保留此專案的預設設定
2. 點擊 "Next" 按鈕。
![23](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-2.PNG)
3. 為叢集命名。
4. 選擇您的選項:節點的最小/最大數量、閒置秒數後縮減、SSH 存取。請注意,如果最小節點數量為 0當叢集閒置時您可以節省成本。請注意最大節點數量越高訓練時間越短。建議的最大節點數量為 3。
5. 點擊 "Create" 按鈕。此步驟可能需要幾分鐘。
![29](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-3.PNG)
太棒了!現在我們已經有了一個計算叢集,接下來需要將數據加載到 Azure ML Studio。
### 2.3 加載數據集
1. 在我們之前建立的 [Azure ML 工作區](https://ml.azure.com/) 中,點擊左側菜單中的 "Datasets",然後點擊 "+ Create dataset" 按鈕以建立數據集。選擇 "From local files" 選項並選擇我們之前下載的 Kaggle 數據集。
![24](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-1.PNG)
2. 為您的數據集命名、選擇類型並添加描述。點擊 "Next"。從文件中上傳數據。點擊 "Next"。
![25](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-2.PNG)
3. 在 Schema 中,將以下特徵的數據類型更改為 Booleananaemia、diabetes、高血壓、性別、吸煙和 DEATH_EVENT。點擊 "Next" 並點擊 "Create"。
![26](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-3.PNG)
太棒了!現在數據集已準備好,計算叢集也已建立,我們可以開始訓練模型了!
### 2.4 使用 AutoML 進行低代碼/無代碼訓練
傳統的機器學習模型開發需要大量資源,並且需要顯著的領域知識和時間來生成和比較多個模型。
自動化機器學習AutoML是一種自動化機器學習模型開發中耗時且迭代任務的過程。它使數據科學家、分析師和開發者能夠以高效能和生產力建立 ML 模型,同時保持模型質量。它減少了生成可投入生產的 ML 模型所需的時間,並且操作簡便高效。[了解更多](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
1. 在我們之前建立的 [Azure ML 工作區](https://ml.azure.com/) 中,點擊左側菜單中的 "Automated ML",選擇您剛剛上傳的數據集。點擊 "Next"。
![27](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-1.PNG)
2. 輸入新的實驗名稱、目標列DEATH_EVENT以及我們建立的計算叢集。點擊 "Next"。
![28](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-2.PNG)
3. 選擇 "Classification" 並點擊 "Finish"。此步驟可能需要 30 分鐘到 1 小時,具體取決於您的計算叢集大小。
![30](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-3.PNG)
4. 一旦運行完成,點擊 "Automated ML" 標籤,點擊您的運行,然後在 "Best model summary" 卡片中點擊算法。
![31](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-4.PNG)
在這裡,您可以看到 AutoML 生成的最佳模型的詳細描述。您還可以在 "Models" 標籤中探索其他生成的模型。花幾分鐘時間探索 "Explanations (preview)" 按鈕中的模型。一旦您選擇了要使用的模型(在這裡我們選擇 AutoML 選擇的最佳模型),接下來我們將了解如何部署它。
## 3. 低代碼/無代碼模型部署與端點使用
### 3.1 模型部署
自動化機器學習界面允許您將最佳模型部署為網絡服務,僅需幾個步驟。部署是模型的整合,使其能夠根據新數據進行預測並識別潛在的機會領域。對於此專案,部署到網絡服務意味著醫療應用程序將能夠使用模型進行患者心臟病風險的即時預測。
在最佳模型描述中,點擊 "Deploy" 按鈕。
![deploy-1](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-1.PNG)
15. 為其命名、添加描述、選擇計算類型Azure Container Instance啟用身份驗證並點擊 "Deploy"。此步驟可能需要約 20 分鐘完成。部署過程包括註冊模型、生成資源並配置它們以供網絡服務使用。部署狀態下會顯示狀態消息。定期點擊 "Refresh" 檢查部署狀態。當狀態顯示 "Healthy" 時,表示已部署並正在運行。
![deploy-2](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-2.PNG)
16. 部署完成後,點擊 "Endpoint" 標籤並點擊您剛剛部署的端點。在這裡,您可以找到有關端點的所有詳細信息。
![deploy-3](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-3.PNG)
太棒了!現在我們已經部署了模型,可以開始使用端點。
### 3.2 端點使用
點擊 "Consume" 標籤。在這裡,您可以找到 REST 端點以及消費選項中的 Python 腳本。花些時間閱讀 Python 代碼。
此腳本可以直接從您的本地機器運行,並將使用您的端點。
![35](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/consumption-1.PNG)
花些時間檢查以下兩行代碼:
```python
url = 'http://98e3715f-xxxx-xxxx-xxxx-9ec22d57b796.centralus.azurecontainer.io/score'
api_key = '' # Replace this with the API key for the web service
```
`url` 變數是消費標籤中找到的 REST 端點,而 `api_key` 變數是消費標籤中找到的主密鑰(僅在啟用了身份驗證的情況下)。這就是腳本如何使用端點。
18. 運行腳本,您應該看到以下輸出:
```python
b'"{\\"result\\": [true]}"'
```
這表示給定數據的心臟衰竭預測為真。這是合理的,因為如果您仔細查看腳本中自動生成的數據,所有值默認為 0 和 false。您可以使用以下輸入樣本更改數據
```python
data = {
"data":
[
{
'age': "0",
'anaemia': "false",
'creatinine_phosphokinase': "0",
'diabetes': "false",
'ejection_fraction': "0",
'high_blood_pressure': "false",
'platelets': "0",
'serum_creatinine': "0",
'serum_sodium': "0",
'sex': "false",
'smoking': "false",
'time': "0",
},
{
'age': "60",
'anaemia': "false",
'creatinine_phosphokinase': "500",
'diabetes': "false",
'ejection_fraction': "38",
'high_blood_pressure': "false",
'platelets': "260000",
'serum_creatinine': "1.40",
'serum_sodium': "137",
'sex': "false",
'smoking': "false",
'time': "130",
},
],
}
```
腳本應返回:
```python
b'"{\\"result\\": [true, false]}"'
```
恭喜!您剛剛使用 Azure ML 訓練並部署了模型,並成功使用了端點!
> **_注意_** 完成專案後,請記得刪除所有資源。
## 🚀 挑戰
仔細查看 AutoML 為頂級模型生成的模型解釋和詳細信息。嘗試理解為什麼最佳模型比其他模型更好。比較了哪些算法?它們之間有什麼差異?為什麼在這種情況下最佳模型表現更好?
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/35)
## 回顧與自學
在本課中,您學習了如何在雲端以低代碼/無代碼方式訓練、部署和使用模型來預測心臟衰竭風險。如果您尚未完成,請深入研究 AutoML 為頂級模型生成的模型解釋,並嘗試理解為什麼最佳模型比其他模型更好。
您可以通過閱讀此 [文件](https://docs.microsoft.com/azure/machine-learning/tutorial-first-experiment-automated-ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 進一步了解低代碼/無代碼 AutoML。
## 作業
[Azure ML 上的低代碼/無代碼數據科學專案](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,14 @@
# 在 Azure ML 上進行低代碼/無代碼的數據科學專案
## 指導說明
我們已經學習了如何使用 Azure ML 平台以低代碼/無代碼的方式訓練、部署和使用模型。現在,請尋找一些可以用來訓練另一個模型的數據,並將其部署和使用。你可以在 [Kaggle](https://kaggle.com) 和 [Azure Open Datasets](https://azure.microsoft.com/services/open-datasets/catalog?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 上尋找數據集。
## 評分標準
| 優秀 | 合格 | 需要改進 |
|------|------|----------|
|在上傳數據時,你注意到了是否需要更改特徵的類型。如果需要,你也對數據進行了清理。你使用 AutoML 對數據集進行了訓練,並檢查了模型解釋。你部署了最佳模型,並成功使用了它。 | 在上傳數據時,你注意到了是否需要更改特徵的類型。你使用 AutoML 對數據集進行了訓練,部署了最佳模型,並成功使用了它。 | 你部署了 AutoML 訓練出的最佳模型,並成功使用了它。 |
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,303 @@
# 雲端中的數據科學:使用 "Azure ML SDK"
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/19-DataScience-Cloud.png)|
|:---:|
| 雲端中的數據科學Azure ML SDK - _由 [@nitya](https://twitter.com/nitya) 繪製的速記圖_ |
目錄:
- [雲端中的數據科學:使用 "Azure ML SDK"](../../../../5-Data-Science-In-Cloud/19-Azure)
- [課前測驗](../../../../5-Data-Science-In-Cloud/19-Azure)
- [1. 簡介](../../../../5-Data-Science-In-Cloud/19-Azure)
- [1.1 什麼是 Azure ML SDK](../../../../5-Data-Science-In-Cloud/19-Azure)
- [1.2 心臟衰竭預測項目和數據集介紹](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2. 使用 Azure ML SDK 訓練模型](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.1 創建 Azure ML 工作區](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.2 創建計算實例](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.3 加載數據集](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.4 創建筆記本](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.5 訓練模型](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.5.1 設置工作區、實驗、計算集群和數據集](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.5.2 AutoML 配置和訓練](../../../../5-Data-Science-In-Cloud/19-Azure)
- [3. 使用 Azure ML SDK 部署模型和消費端點](../../../../5-Data-Science-In-Cloud/19-Azure)
- [3.1 保存最佳模型](../../../../5-Data-Science-In-Cloud/19-Azure)
- [3.2 模型部署](../../../../5-Data-Science-In-Cloud/19-Azure)
- [3.3 消費端點](../../../../5-Data-Science-In-Cloud/19-Azure)
- [🚀 挑戰](../../../../5-Data-Science-In-Cloud/19-Azure)
- [課後測驗](../../../../5-Data-Science-In-Cloud/19-Azure)
- [回顧與自學](../../../../5-Data-Science-In-Cloud/19-Azure)
- [作業](../../../../5-Data-Science-In-Cloud/19-Azure)
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/36)
## 1. 簡介
### 1.1 什麼是 Azure ML SDK
數據科學家和 AI 開發者使用 Azure Machine Learning SDK 與 Azure Machine Learning 服務一起構建和運行機器學習工作流。您可以在任何 Python 環境中與該服務交互,包括 Jupyter Notebooks、Visual Studio Code 或您喜愛的 Python IDE。
SDK 的主要功能包括:
- 探索、準備和管理機器學習實驗中使用的數據集的生命周期。
- 管理雲端資源以進行監控、日誌記錄和組織機器學習實驗。
- 在本地或使用雲端資源(包括 GPU 加速的模型訓練)訓練模型。
- 使用自動化機器學習,該功能接受配置參數和訓練數據,並自動迭代算法和超參數設置以找到最佳模型進行預測。
- 部署 Web 服務,將訓練好的模型轉換為可在任何應用中使用的 RESTful 服務。
[了解更多關於 Azure Machine Learning SDK 的信息](https://docs.microsoft.com/python/api/overview/azure/ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
在[上一課](../18-Low-Code/README.md)中,我們學習了如何以低代碼/無代碼方式訓練、部署和使用模型。我們使用了心臟衰竭數據集來生成心臟衰竭預測模型。在本課中,我們將使用 Azure Machine Learning SDK 完成相同的任務。
![project-schema](../../../../5-Data-Science-In-Cloud/19-Azure/images/project-schema.PNG)
### 1.2 心臟衰竭預測項目和數據集介紹
查看[此處](../18-Low-Code/README.md)了解心臟衰竭預測項目和數據集介紹。
## 2. 使用 Azure ML SDK 訓練模型
### 2.1 創建 Azure ML 工作區
為了簡化操作,我們將在 Jupyter Notebook 中工作。這意味著您已經擁有一個工作區和一個計算實例。如果您已經擁有工作區,可以直接跳到 2.3 筆記本創建部分。
如果沒有,請按照[上一課](../18-Low-Code/README.md)中 **2.1 創建 Azure ML 工作區** 部分的指示創建工作區。
### 2.2 創建計算實例
在我們之前創建的 [Azure ML 工作區](https://ml.azure.com/) 中,進入計算菜單,您將看到可用的不同計算資源。
![compute-instance-1](../../../../5-Data-Science-In-Cloud/19-Azure/images/compute-instance-1.PNG)
讓我們創建一個計算實例來提供 Jupyter Notebook。
1. 點擊 + New 按鈕。
2. 為您的計算實例命名。
3. 選擇您的選項CPU 或 GPU、虛擬機大小和核心數量。
4. 點擊 Create 按鈕。
恭喜,您剛剛創建了一個計算實例!我們將在[創建筆記本部分](../../../../5-Data-Science-In-Cloud/19-Azure)中使用此計算實例。
### 2.3 加載數據集
如果您尚未上傳數據集,請參考[上一課](../18-Low-Code/README.md)中的 **2.3 加載數據集** 部分。
### 2.4 創建筆記本
> **_注意:_** 接下來的步驟,您可以選擇從頭創建一個新的筆記本,或者上傳我們之前創建的 [筆記本](../../../../5-Data-Science-In-Cloud/19-Azure/notebook.ipynb) 到您的 Azure ML Studio。要上傳只需點擊 "Notebook" 菜單並上傳筆記本。
筆記本是數據科學過程中非常重要的一部分。它們可以用於進行探索性數據分析EDA、調用計算集群訓練模型、調用推理集群部署端點。
要創建筆記本,我們需要一個提供 Jupyter Notebook 實例的計算節點。返回 [Azure ML 工作區](https://ml.azure.com/) 並點擊計算實例。在計算實例列表中,您應該看到我們之前創建的[計算實例](../../../../5-Data-Science-In-Cloud/19-Azure)。
1. 在 Applications 部分,點擊 Jupyter 選項。
2. 勾選 "Yes, I understand" 框並點擊 Continue 按鈕。
![notebook-1](../../../../5-Data-Science-In-Cloud/19-Azure/images/notebook-1.PNG)
3. 這將在新瀏覽器標籤中打開您的 Jupyter Notebook 實例。點擊 "New" 按鈕創建筆記本。
![notebook-2](../../../../5-Data-Science-In-Cloud/19-Azure/images/notebook-2.PNG)
現在我們有了一個筆記本,可以開始使用 Azure ML SDK 訓練模型。
### 2.5 訓練模型
首先,如果您有任何疑問,請參考 [Azure ML SDK 文檔](https://docs.microsoft.com/python/api/overview/azure/ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)。它包含了理解我們在本課中將看到的模塊所需的所有信息。
#### 2.5.1 設置工作區、實驗、計算集群和數據集
您需要使用以下代碼從配置文件加載 `workspace`
```python
from azureml.core import Workspace
ws = Workspace.from_config()
```
這將返回一個表示工作區的 `Workspace` 類型的對象。接下來,您需要使用以下代碼創建一個 `experiment`
```python
from azureml.core import Experiment
experiment_name = 'aml-experiment'
experiment = Experiment(ws, experiment_name)
```
要從工作區獲取或創建實驗,您需要使用實驗名稱請求實驗。實驗名稱必須是 3-36 個字符,並以字母或數字開頭,只能包含字母、數字、下劃線和連字符。如果在工作區中找不到實驗,則會創建一個新實驗。
現在,您需要使用以下代碼創建一個計算集群進行訓練。請注意,此步驟可能需要幾分鐘。
```python
from azureml.core.compute import AmlCompute
aml_name = "heart-f-cluster"
try:
aml_compute = AmlCompute(ws, aml_name)
print('Found existing AML compute context.')
except:
print('Creating new AML compute context.')
aml_config = AmlCompute.provisioning_configuration(vm_size = "Standard_D2_v2", min_nodes=1, max_nodes=3)
aml_compute = AmlCompute.create(ws, name = aml_name, provisioning_configuration = aml_config)
aml_compute.wait_for_completion(show_output = True)
cts = ws.compute_targets
compute_target = cts[aml_name]
```
您可以使用數據集名稱從工作區獲取數據集,如下所示:
```python
dataset = ws.datasets['heart-failure-records']
df = dataset.to_pandas_dataframe()
df.describe()
```
#### 2.5.2 AutoML 配置和訓練
要設置 AutoML 配置,請使用 [AutoMLConfig 類](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.automlconfig(class)?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)。
如文檔所述,有許多參數可以進行調整。對於本項目,我們將使用以下參數:
- `experiment_timeout_minutes`:實驗允許運行的最大時間(以分鐘為單位),超過此時間後實驗將自動停止並生成結果。
- `max_concurrent_iterations`:實驗允許的最大並發訓練迭代次數。
- `primary_metric`:用於確定實驗狀態的主要指標。
- `compute_target`:運行自動化機器學習實驗的 Azure Machine Learning 計算目標。
- `task`:要運行的任務類型。值可以是 'classification'、'regression' 或 'forecasting',具體取決於要解決的自動化機器學習問題類型。
- `training_data`:實驗中使用的訓練數據。它應包含訓練特徵和標籤列(可選的樣本權重列)。
- `label_column_name`:標籤列的名稱。
- `path`Azure Machine Learning 項目文件夾的完整路徑。
- `enable_early_stopping`:是否啟用早期終止,如果短期內分數沒有改善則終止。
- `featurization`:指示是否應自動完成特徵化步驟,或者是否應使用自定義特徵化。
- `debug_log`:用於寫入調試信息的日誌文件。
```python
from azureml.train.automl import AutoMLConfig
project_folder = './aml-project'
automl_settings = {
"experiment_timeout_minutes": 20,
"max_concurrent_iterations": 3,
"primary_metric" : 'AUC_weighted'
}
automl_config = AutoMLConfig(compute_target=compute_target,
task = "classification",
training_data=dataset,
label_column_name="DEATH_EVENT",
path = project_folder,
enable_early_stopping= True,
featurization= 'auto',
debug_log = "automl_errors.log",
**automl_settings
)
```
現在您已設置好配置,可以使用以下代碼訓練模型。此步驟可能需要長達一小時,具體取決於您的集群大小。
```python
remote_run = experiment.submit(automl_config)
```
您可以運行 RunDetails 小部件以顯示不同的實驗。
```python
from azureml.widgets import RunDetails
RunDetails(remote_run).show()
```
## 3. 使用 Azure ML SDK 部署模型和消費端點
### 3.1 保存最佳模型
`remote_run` 是 [AutoMLRun](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.run.automlrun?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 類型的對象。該對象包含 `get_output()` 方法,該方法返回最佳運行及其相應的擬合模型。
```python
best_run, fitted_model = remote_run.get_output()
```
您可以通過打印 fitted_model 查看最佳模型使用的參數,並使用 [get_properties()](https://docs.microsoft.com/python/api/azureml-core/azureml.core.run(class)?view=azure-ml-py#azureml_core_Run_get_properties?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 方法查看最佳模型的屬性。
```python
best_run.get_properties()
```
現在使用 [register_model](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.run.automlrun?view=azure-ml-py#register-model-model-name-none--description-none--tags-none--iteration-none--metric-none-?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 方法註冊模型。
```python
model_name = best_run.properties['model_name']
script_file_name = 'inference/score.py'
best_run.download_file('outputs/scoring_file_v_1_0_0.py', 'inference/score.py')
description = "aml heart failure project sdk"
model = best_run.register_model(model_name = model_name,
model_path = './outputs/',
description = description,
tags = None)
```
### 3.2 模型部署
保存最佳模型後,我們可以使用 [InferenceConfig](https://docs.microsoft.com/python/api/azureml-core/azureml.core.model.inferenceconfig?view=azure-ml-py?ocid=AID3041109) 類進行部署。InferenceConfig 表示用於部署的自定義環境的配置設置。[AciWebservice](https://docs.microsoft.com/python/api/azureml-core/azureml.core.webservice.aciwebservice?view=azure-ml-py) 類表示部署為 Azure 容器實例上的 Web 服務端點的機器學習模型。部署的服務由模型、腳本和相關文件創建。生成的 Web 服務是一個負載均衡的 HTTP 端點,具有 REST API。您可以向此 API 發送數據並接收模型返回的預測。
使用 [deploy](https://docs.microsoft.com/python/api/azureml-core/azureml.core.model(class)?view=azure-ml-py#deploy-workspace--name--models--inference-config-none--deployment-config-none--deployment-target-none--overwrite-false--show-output-false-?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 方法部署模型。
```python
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import AciWebservice
inference_config = InferenceConfig(entry_script=script_file_name, environment=best_run.get_environment())
aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1,
memory_gb = 1,
tags = {'type': "automl-heart-failure-prediction"},
description = 'Sample service for AutoML Heart Failure Prediction')
aci_service_name = 'automl-hf-sdk'
aci_service = Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig)
aci_service.wait_for_deployment(True)
print(aci_service.state)
```
此步驟可能需要幾分鐘。
### 3.3 消費端點
您可以通過創建一個示例輸入來使用您的端點:
```python
data = {
"data":
[
{
'age': "60",
'anaemia': "false",
'creatinine_phosphokinase': "500",
'diabetes': "false",
'ejection_fraction': "38",
'high_blood_pressure': "false",
'platelets': "260000",
'serum_creatinine': "1.40",
'serum_sodium': "137",
'sex': "false",
'smoking': "false",
'time': "130",
},
],
}
test_sample = str.encode(json.dumps(data))
```
然後,您可以將此輸入發送到您的模型進行預測:
```python
response = aci_service.run(input_data=test_sample)
response
```
這應該輸出 `'{"result": [false]}'`。這表示我們發送到端點的患者輸入生成了預測結果 `false`,這意味著此人不太可能發生心臟病發作。
恭喜你!你剛剛使用 Azure ML SDK 消費了在 Azure ML 上部署和訓練的模型!
> **_NOTE:_** 完成專案後,別忘了刪除所有資源。
## 🚀 挑戰
透過 SDK你還可以完成許多其他操作但很遺憾我們無法在這節課中全部介紹。不過有個好消息學會如何快速瀏覽 SDK 文件可以幫助你自行探索更多功能。查看 Azure ML SDK 文件,找到允許你建立管線的 `Pipeline` 類別。管線是一系列可以作為工作流程執行的步驟集合。
**提示:** 前往 [SDK 文件](https://docs.microsoft.com/python/api/overview/azure/ml/?view=azure-ml-py?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109),在搜尋欄中輸入關鍵字,例如 "Pipeline"。你應該會在搜尋結果中看到 `azureml.pipeline.core.Pipeline` 類別。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/37)
## 回顧與自學
在這節課中,你學會了如何在雲端使用 Azure ML SDK 訓練、部署並消費一個模型來預測心臟衰竭風險。查看這份 [文件](https://docs.microsoft.com/python/api/overview/azure/ml/?view=azure-ml-py?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109),以獲取有關 Azure ML SDK 的更多資訊。嘗試使用 Azure ML SDK 建立你自己的模型。
## 作業
[使用 Azure ML SDK 的數據科學專案](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,14 @@
# 使用 Azure ML SDK 的數據科學專案
## 指示
我們已經學習如何使用 Azure ML 平台透過 Azure ML SDK 進行模型的訓練、部署和使用。現在,請尋找一些可以用來訓練其他模型的數據,並將其部署和使用。您可以在 [Kaggle](https://kaggle.com) 和 [Azure Open Datasets](https://azure.microsoft.com/services/open-datasets/catalog?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) 上尋找數據集。
## 評分標準
| 卓越 | 合格 | 需要改進 |
|------|------|----------|
|在進行 AutoML 配置時,您查閱了 SDK 文件以了解可以使用的參數。您使用 Azure ML SDK 透過 AutoML 在數據集上進行了訓練,並檢查了模型解釋。您部署了最佳模型,並能夠透過 Azure ML SDK 使用該模型。 | 您使用 Azure ML SDK 透過 AutoML 在數據集上進行了訓練,並檢查了模型解釋。您部署了最佳模型,並能夠透過 Azure ML SDK 使用該模型。 | 您使用 Azure ML SDK 透過 AutoML 在數據集上進行了訓練。您部署了最佳模型,並能夠透過 Azure ML SDK 使用該模型。 |
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,323 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# 雲端中的數據科學「Azure ML SDK」方式\n",
"\n",
"## 簡介\n",
"\n",
"在這份筆記本中,我們將學習如何使用 Azure ML SDK 來訓練、部署和使用模型,通過 Azure ML 完成這些操作。\n",
"\n",
"前置條件:\n",
"1. 您已經創建了一個 Azure ML 工作區。\n",
"2. 您已將 [心臟衰竭數據集](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data) 加載到 Azure ML 中。\n",
"3. 您已將這份筆記本上傳到 Azure ML Studio。\n",
"\n",
"接下來的步驟是:\n",
"\n",
"1. 在現有的工作區中創建一個實驗。\n",
"2. 創建一個計算叢集。\n",
"3. 加載數據集。\n",
"4. 使用 AutoMLConfig 配置 AutoML。\n",
"5. 運行 AutoML 實驗。\n",
"6. 探索結果並獲取最佳模型。\n",
"7. 註冊最佳模型。\n",
"8. 部署最佳模型。\n",
"9. 使用端點。\n",
"\n",
"## Azure Machine Learning SDK 的特定匯入\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"from azureml.core import Workspace, Experiment\n",
"from azureml.core.compute import AmlCompute\n",
"from azureml.train.automl import AutoMLConfig\n",
"from azureml.widgets import RunDetails\n",
"from azureml.core.model import InferenceConfig, Model\n",
"from azureml.core.webservice import AciWebservice"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## 初始化工作區\n",
"從已保存的配置中初始化一個工作區物件。請確保配置檔案存在於 .\\config.json\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"ws = Workspace.from_config()\n",
"print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## 建立 Azure ML 實驗\n",
"\n",
"讓我們在剛剛初始化的工作區中建立一個名為「aml-experiment」的實驗。\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"experiment_name = 'aml-experiment'\n",
"experiment = Experiment(ws, experiment_name)\n",
"experiment"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## 建立計算叢集\n",
"您需要為您的 AutoML 執行建立一個[計算目標](https://docs.microsoft.com/azure/machine-learning/concept-azure-machine-learning-architecture#compute-target)。\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"aml_name = \"heart-f-cluster\"\n",
"try:\n",
" aml_compute = AmlCompute(ws, aml_name)\n",
" print('Found existing AML compute context.')\n",
"except:\n",
" print('Creating new AML compute context.')\n",
" aml_config = AmlCompute.provisioning_configuration(vm_size = \"Standard_D2_v2\", min_nodes=1, max_nodes=3)\n",
" aml_compute = AmlCompute.create(ws, name = aml_name, provisioning_configuration = aml_config)\n",
" aml_compute.wait_for_completion(show_output = True)\n",
"\n",
"cts = ws.compute_targets\n",
"compute_target = cts[aml_name]"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## 資料\n",
"確保您已將資料集上傳到 Azure ML並且金鑰名稱與資料集名稱相同。\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"key = 'heart-failure-records'\n",
"dataset = ws.datasets[key]\n",
"df = dataset.to_pandas_dataframe()\n",
"df.describe()"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## 自動機器學習配置\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"automl_settings = {\n",
" \"experiment_timeout_minutes\": 20,\n",
" \"max_concurrent_iterations\": 3,\n",
" \"primary_metric\" : 'AUC_weighted'\n",
"}\n",
"\n",
"automl_config = AutoMLConfig(compute_target=compute_target,\n",
" task = \"classification\",\n",
" training_data=dataset,\n",
" label_column_name=\"DEATH_EVENT\",\n",
" enable_early_stopping= True,\n",
" featurization= 'auto',\n",
" debug_log = \"automl_errors.log\",\n",
" **automl_settings\n",
" )"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## 自動機器學習運行\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"remote_run = experiment.submit(automl_config)"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"RunDetails(remote_run).show()"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"best_run, fitted_model = remote_run.get_output()"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"best_run.get_properties()"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"model_name = best_run.properties['model_name']\n",
"script_file_name = 'inference/score.py'\n",
"best_run.download_file('outputs/scoring_file_v_1_0_0.py', 'inference/score.py')\n",
"description = \"aml heart failure project sdk\"\n",
"model = best_run.register_model(model_name = model_name,\n",
" description = description,\n",
" tags = None)"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## 部署最佳模型\n",
"\n",
"執行以下程式碼以部署最佳模型。您可以在 Azure ML 入口網站中查看部署的狀態。此步驟可能需要幾分鐘時間。\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"inference_config = InferenceConfig(entry_script=script_file_name, environment=best_run.get_environment())\n",
"\n",
"aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1,\n",
" memory_gb = 1,\n",
" tags = {'type': \"automl-heart-failure-prediction\"},\n",
" description = 'Sample service for AutoML Heart Failure Prediction')\n",
"\n",
"aci_service_name = 'automl-hf-sdk'\n",
"aci_service = Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig)\n",
"aci_service.wait_for_deployment(True)\n",
"print(aci_service.state)"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## 使用端點\n",
"您可以將輸入新增到以下的輸入範例中。\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"data = {\n",
" \"data\":\n",
" [\n",
" {\n",
" 'age': \"60\",\n",
" 'anaemia': \"false\",\n",
" 'creatinine_phosphokinase': \"500\",\n",
" 'diabetes': \"false\",\n",
" 'ejection_fraction': \"38\",\n",
" 'high_blood_pressure': \"false\",\n",
" 'platelets': \"260000\",\n",
" 'serum_creatinine': \"1.40\",\n",
" 'serum_sodium': \"137\",\n",
" 'sex': \"false\",\n",
" 'smoking': \"false\",\n",
" 'time': \"130\",\n",
" },\n",
" ],\n",
"}\n",
"\n",
"test_sample = str.encode(json.dumps(data))"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"response = aci_service.run(input_data=test_sample)\n",
"response"
],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python"
},
"coopTranslator": {
"original_hash": "af42669556d5dc19fc4cc3866f7d2597",
"translation_date": "2025-09-02T05:43:50+00:00",
"source_file": "5-Data-Science-In-Cloud/19-Azure/notebook.ipynb",
"language_code": "tw"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,23 @@
# 雲端中的數據科學
![cloud-picture](../../../translated_images/zh-TW/cloud-picture.f5526de3c6c6387b2d656ba94f019b3352e5e3854a78440e4fb00c93e2dea675.jpg)
> 照片由 [Jelleke Vanooteghem](https://unsplash.com/@ilumire) 提供,來自 [Unsplash](https://unsplash.com/s/photos/cloud?orientation=landscape)
在處理大數據的數據科學時,雲端可以帶來革命性的改變。在接下來的三節課中,我們將了解什麼是雲端以及它為什麼如此有用。我們還將探索一個心臟衰竭數據集,並建立一個模型來幫助評估某人患心臟衰竭的可能性。我們將利用雲端的強大功能來訓練、部署並以兩種不同的方式使用模型。一種方式是僅使用用戶界面,以低代碼/無代碼的方式進行;另一種方式是使用 Azure 機器學習軟件開發工具包 (Azure ML SDK)。
![project-schema](../../../translated_images/zh-TW/project-schema.420e56d495624541eaecf2b737f138c86fb7d8162bb1c0bf8783c350872ffc4d.png)
### 主題
1. [為什麼在數據科學中使用雲端?](17-Introduction/README.md)
2. [雲端中的數據科學:低代碼/無代碼方式](18-Low-Code/README.md)
3. [雲端中的數據科學Azure ML SDK 方式](19-Azure/README.md)
### 致謝
這些課程由 [Maud Levy](https://twitter.com/maudstweets) 和 [Tiffany Souterre](https://twitter.com/TiffanySouterre) 用 ☁️ 和 💕 編寫。
心臟衰竭預測項目的數據來源於 [Larxel](https://www.kaggle.com/andrewmvd) 在 [Kaggle](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data) 上提供。該數據遵循 [Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/) 授權。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,147 @@
# 數據科學在現實世界中的應用
| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-RealWorld.png) |
| :--------------------------------------------------------------------------------------------------------------: |
| 數據科學在現實世界中的應用 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
我們即將完成這段學習旅程!
我們從數據科學和倫理的定義開始探索了各種數據分析和可視化的工具與技術回顧了數據科學的生命周期並研究了如何利用雲端計算服務擴展和自動化數據科學工作流程。所以你可能會想_「如何將這些學到的知識應用到現實世界的情境中」_
在這節課中,我們將探討數據科學在各行業中的現實應用,並深入研究在研究、數字人文和可持續性方面的具體例子。我們還會介紹學生項目機會,並提供一些有用的資源,幫助你繼續你的學習旅程!
## 課前測驗
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/38)
## 數據科學 + 行業
隨著人工智慧的普及化,開發者現在更容易設計和整合基於人工智慧的決策以及數據驅動的洞察到用戶體驗和開發工作流程中。以下是數據科學在各行業中「應用」到現實世界的一些例子:
* [Google Flu Trends](https://www.wired.com/2015/10/can-learn-epic-failure-google-flu-trends/) 使用數據科學將搜索詞與流感趨勢相關聯。雖然這種方法存在缺陷,但它提高了人們對數據驅動的醫療預測可能性(以及挑戰)的認識。
* [UPS 路線預測](https://www.technologyreview.com/2018/11/21/139000/how-ups-uses-ai-to-outsmart-bad-weather/) - 解釋了 UPS 如何利用數據科學和機器學習來預測最佳配送路線,考慮到天氣條件、交通模式、配送截止日期等因素。
* [紐約市計程車路線可視化](http://chriswhong.github.io/nyctaxi/) - 使用[信息自由法](https://chriswhong.com/open-data/foil_nyc_taxi/)收集的數據幫助可視化紐約市計程車一天的運作情況幫助我們了解它們如何在繁忙的城市中穿梭、賺取的收入以及每24小時內行程的持續時間。
* [Uber 數據科學工作台](https://eng.uber.com/dsw/) - 利用每天從數百萬次 Uber 行程中收集的數據(如接送地點、行程時長、偏好路線等),構建數據分析工具以幫助定價、安全、欺詐檢測和導航決策。
* [運動分析](https://towardsdatascience.com/scope-of-analytics-in-sports-world-37ed09c39860) - 專注於_預測分析_團隊和球員分析例如[Moneyball](https://datasciencedegree.wisconsin.edu/blog/moneyball-proves-importance-big-data-big-ideas/)和_數據可視化_團隊和粉絲儀表板、比賽等應用於人才挖掘、運動博彩以及庫存/場地管理。
* [銀行業中的數據科學](https://data-flair.training/blogs/data-science-in-banking/) - 強調數據科學在金融行業中的價值,應用包括風險建模和欺詐檢測、客戶分群、實時預測和推薦系統。預測分析還推動了關鍵指標,如[信用評分](https://dzone.com/articles/using-big-data-and-predictive-analytics-for-credit)。
* [醫療保健中的數據科學](https://data-flair.training/blogs/data-science-in-healthcare/) - 強調應用如醫學影像(例如 MRI、X光、CT掃描、基因組學DNA測序、藥物開發風險評估、成功預測、預測分析患者護理和供應物流、疾病追蹤和預防等。
![數據科學在現實世界中的應用](../../../../translated_images/zh-TW/data-science-applications.4e5019cd8790ebac2277ff5f08af386f8727cac5d30f77727c7090677e6adb9c.png) 圖片來源:[Data Flair: 6 Amazing Data Science Applications ](https://data-flair.training/blogs/data-science-applications/)
該圖展示了其他領域和應用數據科學技術的例子。想探索其他應用嗎?查看下面的[回顧與自學](../../../../6-Data-Science-In-Wild/20-Real-World-Examples)部分。
## 數據科學 + 研究
| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-Research.png) |
| :---------------------------------------------------------------------------------------------------------------: |
| 數據科學與研究 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
雖然現實世界的應用通常專注於行業中的大規模使用案例_研究_應用和項目可以從兩個角度提供價值
* _創新機會_ - 探索快速原型設計先進概念並測試下一代應用的用戶體驗。
* _部署挑戰_ - 調查數據科學技術在現實世界中的潛在危害或意外後果。
對於學生來說,這些研究項目可以提供學習和合作的機會,幫助你加深對主題的理解,並擴展你對相關領域的認識和參與。那麼研究項目是什麼樣的,它們如何產生影響?
讓我們看一個例子——[MIT Gender Shades Study](http://gendershades.org/overview.html),由 Joy BuolamwiniMIT Media Labs進行並與 Timnit Gebru當時在 Microsoft Research共同撰寫了一篇[重要研究論文](http://proceedings.mlr.press/v81/buolamwini18a/buolamwini18a.pdf),該研究專注於:
* **什麼:** 該研究項目的目的是_評估基於性別和膚色的自動面部分析算法和數據集中的偏差_。
* **為什麼:** 面部分析被用於執法、機場安全、招聘系統等領域——在這些情境中,由於偏差導致的不準確分類可能對受影響的個人或群體造成潛在的經濟和社會危害。理解(並消除或減輕)偏差是使用公平性的關鍵。
* **如何:** 研究人員認識到現有基準主要使用膚色較淺的受試者並策劃了一個新的數據集1000多張圖片該數據集在性別和膚色方面更加平衡。該數據集被用於評估三個性別分類產品來自 Microsoft、IBM 和 Face++)的準確性。
結果顯示,雖然整體分類準確性良好,但不同子群體之間的錯誤率存在顯著差異——其中**性別錯誤分類**在女性或膚色較深的人群中更高,表明存在偏差。
**主要成果:** 提高了人們對數據科學需要更多_代表性數據集_平衡子群體和更多_包容性團隊_多樣背景的認識以便在人工智慧解決方案中更早地識別並消除或減輕這些偏差。像這樣的研究努力對許多組織定義負責任人工智慧的原則和實踐也至關重要以改善其人工智慧產品和流程的公平性。
**想了解 Microsoft 的相關研究工作嗎?**
* 查看 [Microsoft Research Projects](https://www.microsoft.com/research/research-area/artificial-intelligence/?facet%5Btax%5D%5Bmsr-research-area%5D%5B%5D=13556&facet%5Btax%5D%5Bmsr-content-type%5D%5B%5D=msr-project) 中的人工智慧研究項目。
* 探索 [Microsoft Research Data Science Summer School](https://www.microsoft.com/en-us/research/academic-program/data-science-summer-school/) 的學生項目。
* 查看 [Fairlearn](https://fairlearn.org/) 項目和 [Responsible AI](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6) 的相關倡議。
## 數據科學 + 人文
| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-Humanities.png) |
| :---------------------------------------------------------------------------------------------------------------: |
| 數據科學與數字人文 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
數字人文[被定義為](https://digitalhumanities.stanford.edu/about-dh-stanford)「結合計算方法與人文探究的一系列實踐和方法」。[斯坦福項目](https://digitalhumanities.stanford.edu/projects)如_「重啟歷史」_和_「詩意思考」_展示了[數字人文與數據科學](https://digitalhumanities.stanford.edu/digital-humanities-and-data-science)之間的聯繫——強調網絡分析、信息可視化、空間和文本分析等技術,幫助我們重新審視歷史和文學數據集,從中獲得新的洞察和視角。
*想探索並擴展這方面的項目嗎?*
查看 ["Emily Dickinson and the Meter of Mood"](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671)——這是一個由 [Jen Looper](https://twitter.com/jenlooper) 提供的精彩例子探討如何利用數據科學重新審視熟悉的詩歌並在新的情境中重新評估其意義及作者的貢獻。例如_我們能否通過分析詩歌的語氣或情感來預測其創作的季節_——這對於理解作者在相關時期的心理狀態有何啟示
為了回答這個問題,我們遵循數據科學生命周期的步驟:
* [`數據獲取`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#acquiring-the-dataset) - 收集相關數據集進行分析。選項包括使用 API例如 [Poetry DB API](https://poetrydb.org/index.html))或抓取網頁(例如 [Project Gutenberg](https://www.gutenberg.org/files/12242/12242-h/12242-h.htm))使用工具如 [Scrapy](https://scrapy.org/)。
* [`數據清理`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#clean-the-data) - 解釋如何使用基本工具(如 Visual Studio Code 和 Microsoft Excel格式化、清理和簡化文本。
* [`數據分析`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#working-with-the-data-in-a-notebook) - 解釋如何將數據集導入「筆記本」進行分析,使用 Python 包(如 pandas、numpy 和 matplotlib組織和可視化數據。
* [`情感分析`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#sentiment-analysis-using-cognitive-services) - 解釋如何整合雲服務(如文本分析),使用低代碼工具(如 [Power Automate](https://flow.microsoft.com/en-us/))進行自動化數據處理工作流程。
通過這個工作流程,我們可以探索季節對詩歌情感的影響,並幫助我們形成自己對作者的看法。自己試試看——然後擴展筆記本以提出其他問題或以新的方式可視化數據!
> 你可以使用一些工具,例如 [Digital Humanities toolkit](https://github.com/Digital-Humanities-Toolkit),來進行這些探究。
## 數據科學 + 可持續性
| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-Sustainability.png) |
| :---------------------------------------------------------------------------------------------------------------: |
| 數據科學與可持續性 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
[2030年可持續發展議程](https://sdgs.un.org/2030agenda)——由所有聯合國成員於2015年採納——確定了17個目標其中包括**保護地球**免受退化和氣候變化影響的目標。[Microsoft Sustainability](https://www.microsoft.com/en-us/sustainability)倡議支持這些目標,探索技術解決方案如何支持並構建更可持續的未來,並專注於[四個目標](https://dev.to/azure/a-visual-guide-to-sustainable-software-engineering-53hh)——到2030年實現碳負、正水、零廢物和生物多樣性。
以可擴展和及時的方式應對這些挑戰需要雲端規模的思維——以及大規模數據。[Planetary Computer](https://planetarycomputer.microsoft.com/)倡議提供了四個組件,幫助數據科學家和開發者應對這些挑戰:
* [數據目錄](https://planetarycomputer.microsoft.com/catalog) - 提供地球系統數據的PB級數據集免費且託管於Azure
* [Planetary API](https://planetarycomputer.microsoft.com/docs/reference/stac/) - 幫助用戶在空間和時間上搜索相關數據。
* [Hub](https://planetarycomputer.microsoft.com/docs/overview/environment/) - 為科學家提供處理大規模地理空間數據集的管理環境。
* [應用](https://planetarycomputer.microsoft.com/applications) - 展示可持續性洞察的使用案例和工具。
**行星電腦計畫目前處於預覽階段截至2021年9月** - 以下是如何開始使用資料科學為永續解決方案做出貢獻的方式。
* [申請訪問權限](https://planetarycomputer.microsoft.com/account/request),開始探索並與同行建立聯繫。
* [瀏覽文件](https://planetarycomputer.microsoft.com/docs/overview/about)了解支援的數據集和API。
* 探索像 [生態系統監測](https://analytics-lab.org/ecosystemmonitoring/) 這樣的應用程式,從中獲得應用靈感。
思考如何利用數據視覺化來揭示或放大與氣候變遷和森林砍伐等相關的洞察力。或者,思考如何利用這些洞察力來創造新的用戶體驗,激勵行為改變,實現更永續的生活方式。
## 資料科學 + 學生
我們已經討論了在產業和研究中的真實應用,並探索了數位人文學科和永續性中的資料科學應用範例。那麼,作為資料科學的初學者,你如何提升技能並分享專業知識呢?
以下是一些資料科學學生專案的範例,供你參考和啟發。
* [MSR 資料科學暑期學校](https://www.microsoft.com/en-us/research/academic-program/data-science-summer-school/#!projects) 的 GitHub [專案](https://github.com/msr-ds3),探索以下主題:
- [警察使用武力中的種族偏見](https://www.microsoft.com/en-us/research/video/data-science-summer-school-2019-replicating-an-empirical-analysis-of-racial-differences-in-police-use-of-force/) | [Github](https://github.com/msr-ds3/stop-question-frisk)
- [紐約地鐵系統的可靠性](https://www.microsoft.com/en-us/research/video/data-science-summer-school-2018-exploring-the-reliability-of-the-nyc-subway-system/) | [Github](https://github.com/msr-ds3/nyctransit)
* [數位化物質文化:探索 Sirkap 的社會經濟分佈](https://claremont.maps.arcgis.com/apps/Cascade/index.html?appid=bdf2aef0f45a4674ba41cd373fa23afc) - 來自 [Ornella Altunyan](https://twitter.com/ornelladotcom) 和 Claremont 團隊,使用 [ArcGIS StoryMaps](https://storymaps.arcgis.com/)。
## 🚀 挑戰
搜尋推薦給初學者的資料科學專案文章,例如[這50個主題領域](https://www.upgrad.com/blog/data-science-project-ideas-topics-beginners/)、[這21個專案點子](https://www.intellspot.com/data-science-project-ideas)或[這16個帶有源代碼的專案](https://data-flair.training/blogs/data-science-project-ideas/),你可以拆解並重新組合這些專案。別忘了記錄你的學習過程,並與我們分享你的洞察。
## 課後測驗
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/39)
## 回顧與自學
想探索更多使用案例嗎?以下是一些相關文章:
* [17 個資料科學應用與範例](https://builtin.com/data-science/data-science-applications-examples) - 2021年7月
* [11 個令人驚嘆的真實世界資料科學應用](https://myblindbird.com/data-science-applications-real-world/) - 2021年5月
* [真實世界中的資料科學](https://towardsdatascience.com/data-science-in-the-real-world/home) - 文章合集
* [12 個真實世界資料科學應用與範例](https://www.scaler.com/blog/data-science-applications/) - 2024年5月
* 資料科學在:[教育](https://data-flair.training/blogs/data-science-in-education/)、[農業](https://data-flair.training/blogs/data-science-in-agriculture/)、[金融](https://data-flair.training/blogs/data-science-in-finance/)、[電影](https://data-flair.training/blogs/data-science-at-movies/)、[醫療保健](https://onlinedegrees.sandiego.edu/data-science-health-care/) 等領域。
## 作業
[探索行星電腦數據集](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,39 @@
# 探索行星電腦數據集
## 說明
在本課程中,我們討論了各種數據科學應用領域,深入探討了與研究、可持續性和數字人文相關的示例。在這次作業中,您將更詳細地探索其中一個示例,並應用您在數據可視化和分析方面的學習成果,從可持續性數據中獲得洞察。
[行星電腦](https://planetarycomputer.microsoft.com/)項目提供了可以通過帳戶訪問的數據集和API——如果您想嘗試作業的額外步驟可以申請帳戶以獲得訪問權限。該網站還提供了一個[Explorer](https://planetarycomputer.microsoft.com/explore)功能,您可以在不創建帳戶的情況下使用。
`步驟:`
Explorer界面如下圖所示允許您選擇數據集從提供的選項中、預設查詢用於篩選數據和渲染選項用於創建相關的可視化。在這次作業中您的任務是
1. 閱讀[Explorer文檔](https://planetarycomputer.microsoft.com/docs/overview/explorer/)——了解選項。
2. 探索數據集[目錄](https://planetarycomputer.microsoft.com/catalog)——了解每個數據集的用途。
3. 使用Explorer——選擇一個感興趣的數據集選擇相關的查詢和渲染選項。
![行星電腦Explorer](../../../../translated_images/zh-TW/planetary-computer-explorer.c1e95a9b053167d64e2e8e4347cfb689e47e2037c33103fc1bbea1a149d4f85b.png)
`您的任務:`
現在研究瀏覽器中渲染的可視化,並回答以下問題:
* 數據集有哪些_特徵_
* 可視化提供了哪些_洞察_或結果
* 這些洞察對項目的可持續性目標有什麼_影響_
* 可視化的_局限性_是什麼您未獲得哪些洞察
* 如果您能獲得原始數據您會創建哪些_替代可視化_為什麼
`額外加分:`
申請帳戶——並在獲得批准後登錄。
* 使用 _Launch Hub_ 選項在Notebook中打開原始數據。
* 交互式探索數據,並實現您想到的替代可視化。
* 現在分析您的自定義可視化——您是否能夠獲得之前未能獲得的洞察?
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
回答了所有五個核心問題。學生清楚地指出了當前和替代可視化如何提供有關可持續性目標或結果的洞察。| 學生詳細回答了至少前三個問題表明他們對Explorer有實際經驗。| 學生未能回答多個問題,或提供的細節不足——表明未對項目進行有意義的嘗試 |
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,14 @@
# 野外數據科學
數據科學在各行各業中的實際應用。
### 主題
1. [現實世界中的數據科學](20-Real-World-Examples/README.md)
### 致謝
由 [Nitya Narasimhan](https://twitter.com/nitya) 用 ❤️ 撰寫
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,366 @@
# AGENTS.md
## 專案概述
《初學者的數據科學》是一個由 Microsoft Azure Cloud Advocates 創建的全面性 10 週、20 課課程。此存儲庫是一個學習資源,通過基於項目的課程教授基礎數據科學概念,包括 Jupyter 筆記本、互動測驗和實作練習。
**主要技術:**
- **Jupyter 筆記本**:使用 Python 3 作為主要學習媒介
- **Python 庫**pandas、numpy、matplotlib 用於數據分析和可視化
- **Vue.js 2**測驗應用程式quiz-app 資料夾)
- **Docsify**:離線存取的文件站點生成器
- **Node.js/npm**JavaScript 元件的套件管理
- **Markdown**:所有課程內容和文件
**架構:**
- 多語言教育存儲庫,提供廣泛的翻譯
- 結構化為課程模組1-Introduction 至 6-Data-Science-In-Wild
- 每課包含 README、筆記本、作業和測驗
- 獨立的 Vue.js 測驗應用程式,用於課前/課後評估
- 支援 GitHub Codespaces 和 VS Code 開發容器
## 設置指令
### 存儲庫設置
```bash
# Clone the repository (if not already cloned)
git clone https://github.com/microsoft/Data-Science-For-Beginners.git
cd Data-Science-For-Beginners
```
### Python 環境設置
```bash
# Create a virtual environment (recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install common data science libraries (no requirements.txt exists)
pip install jupyter pandas numpy matplotlib seaborn scikit-learn
```
### 測驗應用程式設置
```bash
# Navigate to quiz app
cd quiz-app
# Install dependencies
npm install
# Start development server
npm run serve
# Build for production
npm run build
# Lint and fix files
npm run lint
```
### Docsify 文件伺服器
```bash
# Install Docsify globally
npm install -g docsify-cli
# Serve documentation locally
docsify serve
# Documentation will be available at localhost:3000
```
### 可視化項目設置
針對像 meaningful-visualizations第 13 課)這樣的可視化項目:
```bash
# Navigate to starter or solution folder
cd 3-Data-Visualization/13-meaningful-visualizations/starter
# Install dependencies
npm install
# Start development server
npm run serve
# Build for production
npm run build
# Lint files
npm run lint
```
## 開發工作流程
### 使用 Jupyter 筆記本
1. 在存儲庫根目錄啟動 Jupyter`jupyter notebook`
2. 導航到所需的課程資料夾
3. 打開 `.ipynb` 文件進行練習
4. 筆記本是自包含的,包含解釋和代碼單元
5. 大多數筆記本使用 pandas、numpy 和 matplotlib請確保已安裝這些庫
### 課程結構
每課通常包含:
- `README.md` - 主要課程內容,包含理論和範例
- `notebook.ipynb` - 實作 Jupyter 筆記本練習
- `assignment.ipynb``assignment.md` - 練習作業
- `solution/` 資料夾 - 解答筆記本和代碼
- `images/` 資料夾 - 支援的視覺材料
### 測驗應用程式開發
- Vue.js 2 應用程式,開發期間支援熱重載
- 測驗存儲於 `quiz-app/src/assets/translations/`
- 每種語言有自己的翻譯資料夾en、fr、es 等)
- 測驗編號從 0 開始,最多到 39共 40 個測驗)
### 添加翻譯
- 翻譯存放於存儲庫根目錄的 `translations/` 資料夾
- 每種語言的課程結構與英文完全鏡像
- 通過 GitHub Actions 自動翻譯co-op-translator.yml
## 測試指導
### 測驗應用程式測試
```bash
cd quiz-app
# Run lint checks
npm run lint
# Test build process
npm run build
# Manual testing: Start dev server and verify quiz functionality
npm run serve
```
### 筆記本測試
- 筆記本沒有自動化測試框架
- 手動驗證:按順序運行所有單元以確保無錯誤
- 確認數據文件可訪問且輸出正確生成
- 檢查可視化是否正確渲染
### 文件測試
```bash
# Verify Docsify renders correctly
docsify serve
# Check for broken links manually by navigating through content
# Verify all lesson links work in the rendered documentation
```
### 代碼質量檢查
```bash
# Vue.js projects (quiz-app and visualization projects)
cd quiz-app # or visualization project folder
npm run lint
# Python notebooks - manual verification recommended
# Ensure imports work and cells execute without errors
```
## 代碼風格指南
### PythonJupyter 筆記本)
- 遵循 PEP 8 代碼風格指南
- 使用清晰的變數名稱,說明正在分析的數據
- 在代碼單元之前包含解釋的 Markdown 單元
- 代碼單元應專注於單一概念或操作
- 使用 pandas 進行數據操作matplotlib 進行可視化
- 常見的導入模式:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
```
### JavaScript/Vue.js
- 遵循 Vue.js 2 風格指南和最佳實踐
- ESLint 配置於 `quiz-app/package.json`
- 使用 Vue 單文件元件(.vue 文件)
- 維持基於元件的架構
- 提交更改前運行 `npm run lint`
### Markdown 文件
- 使用清晰的標題層次結構(# ## ### 等)
- 包含帶語言指定的代碼塊
- 為圖片添加替代文字
- 鏈接相關課程和資源
- 保持合理的行長以提高可讀性
### 文件組織
- 課程內容存放於編號資料夾01-defining-data-science 等)
- 解答存放於專用的 `solution/` 子資料夾
- 翻譯在 `translations/` 資料夾中鏡像英文結構
- 數據文件存放於 `data/` 或課程專用資料夾
## 構建和部署
### 測驗應用程式部署
```bash
cd quiz-app
# Build production version
npm run build
# Output is in dist/ folder
# Deploy dist/ folder to static hosting (Azure Static Web Apps, Netlify, etc.)
```
### Azure 靜態 Web 應用部署
測驗應用程式可部署到 Azure 靜態 Web 應用:
1. 創建 Azure 靜態 Web 應用資源
2. 連接到 GitHub 存儲庫
3. 配置構建設置:
- 應用位置:`quiz-app`
- 輸出位置:`dist`
4. GitHub Actions 工作流程會在推送時自動部署
### 文件站點
```bash
# Build PDF from Docsify (optional)
npm run convert
# Docsify documentation is served directly from markdown files
# No build step required for deployment
# Deploy repository to static hosting with Docsify
```
### GitHub Codespaces
- 存儲庫包含開發容器配置
- Codespaces 自動設置 Python 和 Node.js 環境
- 通過 GitHub UI 打開存儲庫中的 Codespace
- 所有依賴項自動安裝
## 拉取請求指南
### 提交前
```bash
# For Vue.js changes in quiz-app
cd quiz-app
npm run lint
npm run build
# Test changes locally
npm run serve
```
### PR 標題格式
- 使用清晰、描述性的標題
- 格式:`[元件] 簡短描述`
- 範例:
- `[Lesson 7] 修復 Python 筆記本導入錯誤`
- `[Quiz App] 添加德語翻譯`
- `[Docs] 更新 README新增前置條件`
### 必要檢查
- 確保所有代碼無錯誤運行
- 驗證筆記本完整執行
- 確認 Vue.js 應用程式成功構建
- 檢查文件鏈接是否正常
- 測試修改的測驗應用程式
- 確認翻譯保持一致結構
### 貢獻指南
- 遵循現有代碼風格和模式
- 為複雜邏輯添加解釋性註解
- 更新相關文件
- 在不同課程模組中測試更改(如適用)
- 查看 CONTRIBUTING.md 文件
## 附加說明
### 常用庫
- **pandas**:數據操作和分析
- **numpy**:數值計算
- **matplotlib**:數據可視化和繪圖
- **seaborn**:統計數據可視化(部分課程)
- **scikit-learn**:機器學習(進階課程)
### 使用數據文件
- 數據文件存放於 `data/` 資料夾或課程專用目錄
- 大多數筆記本期望數據文件位於相對路徑
- CSV 文件是主要數據格式
- 部分課程使用 JSON 作為非關聯數據範例
### 多語言支援
- 通過 GitHub Actions 提供 40+ 語言翻譯
- 翻譯工作流程位於 `.github/workflows/co-op-translator.yml`
- 翻譯存放於 `translations/` 資料夾,使用語言代碼命名
- 測驗翻譯存放於 `quiz-app/src/assets/translations/`
### 開發環境選項
1. **本地開發**:本地安裝 Python、Jupyter、Node.js
2. **GitHub Codespaces**:基於雲端的即時開發環境
3. **VS Code 開發容器**:基於容器的本地開發
4. **Binder**:在雲端啟動筆記本(如已配置)
### 課程內容指南
- 每課是獨立的,但建立在之前概念之上
- 課前測驗測試先前知識
- 課後測驗加強學習
- 作業提供實作練習
- Sketchnotes 提供視覺摘要
### 常見問題排查
**Jupyter 核心問題:**
```bash
# Ensure correct kernel is installed
python -m ipykernel install --user --name=datascience
```
**npm 安裝失敗:**
```bash
# Clear npm cache and retry
npm cache clean --force
rm -rf node_modules package-lock.json
npm install
```
**筆記本導入錯誤:**
- 確認已安裝所有必要庫
- 檢查 Python 版本兼容性(建議使用 Python 3.7+
- 確保虛擬環境已啟動
**Docsify 無法加載:**
- 確認您從存儲庫根目錄提供服務
- 檢查 `index.html` 是否存在
- 確保網絡訪問正常(端口 3000
### 性能考量
- 大型數據集可能需要較長時間加載到筆記本中
- 複雜圖表的可視化渲染可能較慢
- Vue.js 開發伺服器啟用熱重載以快速迭代
- 生產構建已優化並縮小
### 安全注意事項
- 不應提交敏感數據或憑證
- 在雲端課程中使用環境變數存儲 API 密鑰
- 與 Azure 相關的課程可能需要 Azure 帳戶憑證
- 保持依賴項更新以獲得安全修補
## 翻譯貢獻
- 通過 GitHub Actions 管理自動翻譯
- 歡迎手動修正以提高翻譯準確性
- 遵循現有翻譯資料夾結構
- 更新測驗鏈接以包含語言參數:`?loc=fr`
- 測試翻譯課程以確保正確渲染
## 相關資源
- 主課程https://aka.ms/datascience-beginners
- Microsoft Learnhttps://docs.microsoft.com/learn/
- 學生中心https://docs.microsoft.com/learn/student-hub
- 討論論壇https://github.com/microsoft/Data-Science-For-Beginners/discussions
- 其他 Microsoft 課程ML for Beginners、AI for Beginners、Web Dev for Beginners
## 專案維護
- 定期更新以保持內容最新
- 歡迎社群貢獻
- 問題在 GitHub 上追蹤
- PR 由課程維護者審核
- 每月進行內容審查和更新
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,12 @@
# Microsoft 開源行為準則
此專案已採用 [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/)。
資源:
- [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/)
- [Microsoft 行為準則常見問題](https://opensource.microsoft.com/codeofconduct/faq/)
- 如有疑問或擔憂,請聯繫 [opencode@microsoft.com](mailto:opencode@microsoft.com)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,353 @@
# 貢獻《初學者的數據科學》
感謝您對《初學者的數據科學》課程的貢獻興趣!我們歡迎社群的貢獻。
## 目錄
- [行為準則](../..)
- [我可以如何貢獻?](../..)
- [開始使用](../..)
- [貢獻指南](../..)
- [拉取請求流程](../..)
- [風格指南](../..)
- [貢獻者授權協議](../..)
## 行為準則
本專案採用了 [Microsoft 開源行為準則](https://opensource.microsoft.com/codeofconduct/)。
欲了解更多資訊,請參閱 [行為準則 FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 或聯繫 [opencode@microsoft.com](mailto:opencode@microsoft.com) 提出其他問題或意見。
## 我可以如何貢獻?
### 回報錯誤
在建立錯誤報告之前,請檢查現有的問題以避免重複。當您建立錯誤報告時,請包含盡可能多的細節:
- **使用清晰且描述性的標題**
- **描述重現問題的具體步驟**
- **提供具體範例**(程式碼片段、截圖)
- **描述您觀察到的行為以及您期望的行為**
- **包含您的環境細節**作業系統、Python版本、瀏覽器
### 建議改進
我們歡迎改進建議!當提出改進建議時:
- **使用清晰且描述性的標題**
- **提供詳細的建議改進描述**
- **解釋為什麼此改進會有用**
- **列出其他專案中類似的功能(如果適用)**
### 貢獻文件
我們非常感謝文件的改進:
- **修正拼寫和語法錯誤**
- **改善解釋的清晰度**
- **補充缺失的文件**
- **更新過時的資訊**
- **添加範例或使用案例**
### 貢獻程式碼
我們歡迎以下程式碼貢獻:
- **新增課程或練習**
- **修正錯誤**
- **改進現有的筆記本**
- **新增數據集或範例**
- **測驗應用程式的改進**
## 開始使用
### 先決條件
在貢獻之前,請確保您已具備以下條件:
1. 一個 GitHub 帳號
2. 系統上已安裝 Git
3. 安裝了 Python 3.7+ 和 Jupyter
4. 安裝了 Node.js 和 npm用於測驗應用程式的貢獻
5. 熟悉課程結構
請參閱 [INSTALLATION.md](INSTALLATION.md) 以獲取詳細的設置說明。
### Fork 和 Clone
1. 在 GitHub 上 **Fork 此倉庫**
2. **將您的 Fork 本地克隆**
```bash
git clone https://github.com/YOUR-USERNAME/Data-Science-For-Beginners.git
cd Data-Science-For-Beginners
```
3. **添加上游遠端倉庫**
```bash
git remote add upstream https://github.com/microsoft/Data-Science-For-Beginners.git
```
### 建立分支
為您的工作建立新分支:
```bash
git checkout -b feature/your-feature-name
# or
git checkout -b fix/your-bug-fix
```
分支命名規則:
- `feature/` - 新功能或課程
- `fix/` - 錯誤修正
- `docs/` - 文件更改
- `refactor/` - 程式碼重構
## 貢獻指南
### 關於課程內容
當貢獻課程或修改現有課程時:
1. **遵循現有結構**
- README.md 包含課程內容
- Jupyter 筆記本包含練習
- 作業(如果適用)
- 連結到前測和後測
2. **包含以下元素**
- 清晰的學習目標
- 步驟式的解釋
- 帶有註解的程式碼範例
- 練習題以供練習
- 額外資源的連結
3. **確保可及性**
- 使用清晰、簡單的語言
- 為圖片提供替代文字
- 包含程式碼註解
- 考慮不同的學習風格
### 關於 Jupyter 筆記本
1. **在提交之前清除所有輸出**
```bash
jupyter nbconvert --clear-output --inplace notebook.ipynb
```
2. **包含帶有解釋的 Markdown 單元格**
3. **使用一致的格式**
```python
# Import libraries at the top
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Use meaningful variable names
# Add comments for complex operations
# Follow PEP 8 style guidelines
```
4. **在提交之前完整測試您的筆記本**
### 關於 Python 程式碼
遵循 [PEP 8](https://www.python.org/dev/peps/pep-0008/) 風格指南:
```python
# Good practices
import pandas as pd
def calculate_mean(data):
"""Calculate the mean of a dataset.
Args:
data (list): List of numerical values
Returns:
float: Mean of the dataset
"""
return sum(data) / len(data)
```
### 關於測驗應用程式的貢獻
當修改測驗應用程式時:
1. **本地測試**
```bash
cd quiz-app
npm install
npm run serve
```
2. **運行 linter**
```bash
npm run lint
```
3. **成功構建**
```bash
npm run build
```
4. **遵循 Vue.js 風格指南** 和現有模式
### 關於翻譯
當新增或更新翻譯時:
1. 遵循 `translations/` 資料夾中的結構
2. 使用語言代碼作為資料夾名稱(例如,法語使用 `fr`
3. 維持與英文版本相同的檔案結構
4. 更新測驗連結以包含語言參數:`?loc=fr`
5. 測試所有連結和格式
## 拉取請求流程
### 提交之前
1. **使用最新更改更新您的分支**
```bash
git fetch upstream
git rebase upstream/main
```
2. **測試您的更改**
- 運行所有修改過的筆記本
- 測試測驗應用程式(如果有修改)
- 驗證所有連結是否有效
- 檢查拼寫和語法錯誤
3. **提交您的更改**
```bash
git add .
git commit -m "Brief description of changes"
```
撰寫清晰的提交訊息:
- 使用現在式(例如:"新增功能" 而非 "已新增功能"
- 使用命令式語氣(例如:"移動游標到..." 而非 "游標移動到..."
- 第一行限制在 72 個字元內
- 參考相關問題和拉取請求(如果適用)
4. **推送到您的 Fork**
```bash
git push origin feature/your-feature-name
```
### 建立拉取請求
1. 前往 [倉庫](https://github.com/microsoft/Data-Science-For-Beginners)
2. 點擊 "Pull requests" → "New pull request"
3. 點擊 "compare across forks"
4. 選擇您的 Fork 和分支
5. 點擊 "Create pull request"
### PR 標題格式
使用清晰、描述性的標題,遵循以下格式:
```
[Component] Brief description
```
範例:
- `[Lesson 7] 修正 Python 筆記本導入錯誤`
- `[Quiz App] 新增德語翻譯`
- `[Docs] 更新 README新增先決條件`
- `[Fix] 修正可視化課程中的數據路徑`
### PR 描述
在您的 PR 描述中包含:
- **內容**:您做了哪些更改?
- **原因**:為什麼需要這些更改?
- **方法**:您如何實現這些更改?
- **測試**:您如何測試這些更改?
- **截圖**:包含視覺更改的截圖
- **相關問題**:連結到相關問題(例如,"Fixes #123"
### 審核流程
1. **自動檢查** 會在您的 PR 上運行
2. **維護者會審核** 您的貢獻
3. **根據反饋進行修改**,並提交額外的更改
4. 一旦獲得批准,**維護者會合併** 您的 PR
### PR 合併後
1. 刪除您的分支:
```bash
git branch -d feature/your-feature-name
git push origin --delete feature/your-feature-name
```
2. 更新您的 Fork
```bash
git checkout main
git pull upstream main
git push origin main
```
## 風格指南
### Markdown
- 使用一致的標題層級
- 在各部分之間添加空行
- 使用帶有語言指定的程式碼塊:
````markdown
```python
import pandas as pd
```
````
- 為圖片添加替代文字:`![替代文字](../../translated_images/zh-TW/image.4ee84a82b5e4c9e6651b13fd27dcf615e427ec584929f2cef7167aa99151a77a.png)`
- 保持合理的行長度(約 80-100 字元)
### Python
- 遵循 PEP 8 風格指南
- 使用有意義的變數名稱
- 為函數添加文檔字符串
- 在適當的地方包含類型提示:
```python
def process_data(df: pd.DataFrame) -> pd.DataFrame:
"""Process the input dataframe."""
return df
```
### JavaScript/Vue.js
- 遵循 Vue.js 2 風格指南
- 使用提供的 ESLint 配置
- 撰寫模組化、可重用的元件
- 為複雜邏輯添加註解
### 文件組織
- 將相關文件放在一起
- 使用描述性的文件名稱
- 遵循現有的目錄結構
- 不要提交不必要的文件(例如 .DS_Store、.pyc、node_modules 等)
## 貢獻者授權協議
本專案歡迎貢獻和建議。大多數貢獻需要您同意貢獻者授權協議CLA聲明您有權並確實授予我們使用您的貢獻的權利。詳細資訊請訪問 https://cla.microsoft.com。
當您提交拉取請求時CLA 機器人會自動判斷您是否需要提供 CLA並適當地標記 PR例如標籤、評論。只需按照機器人提供的指示操作即可。您只需在使用我們的 CLA 的所有倉庫中執行一次此操作。
## 有問題嗎?
- 查看我們的 [Discord 頻道 #data-science-for-beginners](https://aka.ms/ds4beginners/discord)
- 加入我們的 [Discord 社群](https://aka.ms/ds4beginners/discord)
- 查看現有的 [問題](https://github.com/microsoft/Data-Science-For-Beginners/issues) 和 [拉取請求](https://github.com/microsoft/Data-Science-For-Beginners/pulls)
## 感謝!
您的貢獻使這個課程對每個人都更有價值。感謝您抽出時間進行貢獻!
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,252 @@
# 安裝指南
本指南將幫助您設置環境,以使用《初學者的數據科學》課程。
## 目錄
- [先決條件](../..)
- [快速開始選項](../..)
- [本地安裝](../..)
- [驗證您的安裝](../..)
## 先決條件
在開始之前,您應該具備以下條件:
- 基本的命令行/終端操作知識
- 一個 GitHub 帳戶(免費)
- 穩定的網絡連接以完成初始設置
## 快速開始選項
### 選項 1GitHub Codespaces推薦給初學者
最簡單的開始方式是使用 GitHub Codespaces它在瀏覽器中提供完整的開發環境。
1. 前往 [倉庫](https://github.com/microsoft/Data-Science-For-Beginners)
2. 點擊 **Code** 下拉菜單
3. 選擇 **Codespaces** 標籤
4. 點擊 **Create codespace on main**
5. 等待環境初始化2-3 分鐘)
您的環境現在已準備好,所有依賴項都已預先安裝!
### 選項 2本地開發
如果您希望在自己的電腦上工作,請按照以下詳細說明進行操作。
## 本地安裝
### 步驟 1安裝 Git
Git 是用於克隆倉庫和跟蹤更改的必要工具。
**Windows:**
- 從 [git-scm.com](https://git-scm.com/download/win) 下載
- 使用默認設置運行安裝程序
**macOS:**
- 通過 Homebrew 安裝:`brew install git`
- 或從 [git-scm.com](https://git-scm.com/download/mac) 下載
**Linux:**
```bash
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install git
# Fedora
sudo dnf install git
# Arch
sudo pacman -S git
```
### 步驟 2克隆倉庫
```bash
# Clone the repository
git clone https://github.com/microsoft/Data-Science-For-Beginners.git
# Navigate to the directory
cd Data-Science-For-Beginners
```
### 步驟 3安裝 Python 和 Jupyter
課程需要 Python 3.7 或更高版本。
**Windows:**
1. 從 [python.org](https://www.python.org/downloads/) 下載 Python
2. 安裝過程中勾選 "Add Python to PATH"
3. 驗證安裝:
```bash
python --version
```
**macOS:**
```bash
# Using Homebrew
brew install python3
# Verify installation
python3 --version
```
**Linux:**
```bash
# Most Linux distributions come with Python pre-installed
python3 --version
# If not installed:
# Debian/Ubuntu
sudo apt-get install python3 python3-pip
# Fedora
sudo dnf install python3 python3-pip
```
### 步驟 4設置 Python 環境
建議使用虛擬環境來隔離依賴項。
```bash
# Create a virtual environment
python -m venv venv
# Activate the virtual environment
# On Windows:
venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate
```
### 步驟 5安裝 Python 套件
安裝所需的數據科學庫:
```bash
pip install jupyter pandas numpy matplotlib seaborn scikit-learn
```
### 步驟 6安裝 Node.js 和 npm用於測驗應用
測驗應用需要 Node.js 和 npm。
**Windows/macOS:**
- 從 [nodejs.org](https://nodejs.org/) 下載(推薦 LTS 版本)
- 運行安裝程序
**Linux:**
```bash
# Debian/Ubuntu
# WARNING: Piping scripts from the internet directly into bash can be a security risk.
# It is recommended to review the script before running it:
# curl -fsSL https://deb.nodesource.com/setup_lts.x -o setup_lts.x
# less setup_lts.x
# Then run:
# sudo -E bash setup_lts.x
#
# Alternatively, you can use the one-liner below at your own risk:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# Fedora
sudo dnf install nodejs
# Verify installation
node --version
npm --version
```
### 步驟 7安裝測驗應用依賴項
```bash
# Navigate to quiz app directory
cd quiz-app
# Install dependencies
npm install
# Return to root directory
cd ..
```
### 步驟 8安裝 Docsify可選
用於離線訪問文檔:
```bash
npm install -g docsify-cli
```
## 驗證您的安裝
### 測試 Python 和 Jupyter
```bash
# Activate your virtual environment if not already activated
# On Windows:
venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate
# Start Jupyter Notebook
jupyter notebook
```
您的瀏覽器應打開 Jupyter 界面。您現在可以導航到任何課程的 `.ipynb` 文件。
### 測試測驗應用
```bash
# Navigate to quiz app
cd quiz-app
# Start development server
npm run serve
```
測驗應用應可在 `http://localhost:8080`(如果 8080 端口被佔用,則使用其他端口)訪問。
### 測試文檔服務器
```bash
# From the root directory of the repository
docsify serve
```
文檔應可在 `http://localhost:3000` 訪問。
## 使用 VS Code Dev Containers
如果您已安裝 Docker可以使用 VS Code Dev Containers
1. 安裝 [Docker Desktop](https://www.docker.com/products/docker-desktop)
2. 安裝 [Visual Studio Code](https://code.visualstudio.com/)
3. 安裝 [Remote - Containers 擴展](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
4. 在 VS Code 中打開倉庫
5. 按 `F1` 並選擇 "Remote-Containers: Reopen in Container"
6. 等待容器構建(僅首次需要)
## 下一步
- 探索 [README.md](README.md) 以了解課程概述
- 閱讀 [USAGE.md](USAGE.md) 以了解常見工作流程和示例
- 如果遇到問題,查看 [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
- 如果您想貢獻,請查看 [CONTRIBUTING.md](CONTRIBUTING.md)
## 獲取幫助
如果您遇到問題:
1. 查看 [TROUBLESHOOTING.md](TROUBLESHOOTING.md) 指南
2. 搜索現有的 [GitHub Issues](https://github.com/microsoft/Data-Science-For-Beginners/issues)
3. 加入我們的 [Discord 社群](https://aka.ms/ds4beginners/discord)
4. 創建一個新問題,並詳細描述您的問題
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,254 @@
# 初學者資料科學課程大綱
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=344191198)
[![GitHub license](https://img.shields.io/github/license/microsoft/Data-Science-For-Beginners.svg)](https://github.com/microsoft/Data-Science-For-Beginners/blob/master/LICENSE)
[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/graphs/contributors/)
[![GitHub issues](https://img.shields.io/github/issues/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/issues/)
[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/pulls/)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/Data-Science-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/Data-Science-For-Beginners/watchers/)
[![GitHub forks](https://img.shields.io/github/forks/microsoft/Data-Science-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Data-Science-For-Beginners/network/)
[![GitHub stars](https://img.shields.io/github/stars/microsoft/Data-Science-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Data-Science-For-Beginners/stargazers/)
[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG)
[![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum)
微軟 Azure 雲端倡導者很高興提供一個為期 10 週、共 20 節的資料科學課程。每堂課包含課前和課後測驗、完成課程的書面指南、解答以及作業。我們採用以專案為基礎的教學法,讓你在實作中學習,這是一種讓新技能穩固吸收的有效方式。
**衷心感謝我們的作者們:** [Jasmine Greenaway](https://www.twitter.com/paladique)、[Dmitry Soshnikov](http://soshnikov.com)、[Nitya Narasimhan](https://twitter.com/nitya)、[Jalen McGee](https://twitter.com/JalenMcG)、[Jen Looper](https://twitter.com/jenlooper)、[Maud Levy](https://twitter.com/maudstweets)、[Tiffany Souterre](https://twitter.com/TiffanySouterre)、[Christopher Harrison](https://www.twitter.com/geektrainer)。
**🙏 特別感謝 🙏 我們的 [Microsoft 學生大使](https://studentambassadors.microsoft.com/) 作者、審查員與內容貢獻者,** 主要包括 Aaryan Arora、[Aditya Garg](https://github.com/AdityaGarg00)、[Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/)、[Ankita Singh](https://www.linkedin.com/in/ankitasingh007)、[Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/)、[Arpita Das](https://www.linkedin.com/in/arpitadas01/)、ChhailBihari Dubey、[Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor)、[Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb)、[Majd Safi](https://www.linkedin.com/in/majd-s/)、[Max Blum](https://www.linkedin.com/in/max-blum-6036a1186/)、[Miguel Correa](https://www.linkedin.com/in/miguelmque/)、[Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119)、[Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum)、[Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/)、[Rohit Yadav](https://www.linkedin.com/in/rty2423)、Samridhi Sharma、[Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200)、[Sheena Narula](https://www.linkedin.com/in/sheena-narua-n/)、[Tauqeer Ahmad](https://www.linkedin.com/in/tauqeerahmad5201/)、Yogendrasingh Pawar、[Vidushi Gupta](https://www.linkedin.com/in/vidushi-gupta07/)、[Jasleen Sondhi](https://www.linkedin.com/in/jasleen-sondhi/)
|![Sketchnote by @sketchthedocs https://sketchthedocs.dev](../../translated_images/zh-TW/00-Title.8af36cd35da1ac55.webp)|
|:---:|
| 初學者資料科學 - _圖解筆記由 [@nitya](https://twitter.com/nitya) 製作_ |
### 🌐 多語系支援
#### 透過 GitHub Action 支援(自動且隨時更新)
<!-- CO-OP TRANSLATOR LANGUAGES TABLE START -->
[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](./README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
> **偏好本機複製?**
> 本儲存庫包含超過 50 種語言翻譯,會大幅增加下載大小。若要在沒有翻譯的情況下複製,請使用稀疏檢出:
> ```bash
> git clone --filter=blob:none --sparse https://github.com/microsoft/Data-Science-For-Beginners.git
> cd Data-Science-For-Beginners
> git sparse-checkout set --no-cone '/*' '!translations' '!translated_images'
> ```
> 這樣你會以更快的速度獲得完成課程所需的一切。
<!-- CO-OP TRANSLATOR LANGUAGES TABLE END -->
**如果你希望支援其他翻譯語言,清單列於[這裡](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)**
#### 加入我們的社群
[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG)
我們持續進行 Discord 上的 AI 學習系列,詳情請參閱並加入 [Learn with AI Series](https://aka.ms/learnwithai/discord),活動期間為 2025 年 9 月 18 日至 30 日。你將獲得使用 GitHub Copilot 進行資料科學的技巧與秘訣。
![Learn with AI series](../../translated_images/zh-TW/1.2b28cdc6205e26fe.webp)
# 你是學生嗎?
請使用以下資源開始:
- [學生中心頁面](https://docs.microsoft.com/en-gb/learn/student-hub?WT.mc_id=academic-77958-bethanycheum) 在這頁你可以找到初學者資源、學生套件,甚至有方式取得免費認證憑證。這是一個你應該收藏並常回訪的網頁,因為我們至少每月更新一次內容。
- [Microsoft Learn 學生大使](https://studentambassadors.microsoft.com?WT.mc_id=academic-77958-bethanycheum) 加入全球學生大使社群,這可能是你進入微軟的門路。
# 入門指南
## 📚 文件資源
- **[安裝指南](INSTALLATION.md)** - 初學者逐步安裝說明
- **[使用指南](USAGE.md)** - 範例與常見工作流程
- **[故障排除](TROUBLESHOOTING.md)** - 常見問題解決方案
- **[貢獻指南](CONTRIBUTING.md)** - 如何為此專案做出貢獻
- **[教師專用](for-teachers.md)** - 教學指引和課堂資源
## 👨‍🎓 對學生
> **完全初學者**:對資料科學不熟悉?從我們的[初學者範例](examples/README.md)開始吧!這些簡單且註解完整的範例,能幫助你先了解基礎,再投入完整課程。
> **[學生](https://aka.ms/student-page)**:想自行使用本課程,請將整個儲存庫 fork 一份,自行完成課程活動,從課前測驗開始。然後閱讀課程內容,完成後續練習。嘗試理解課程內容自行建立專案,不要直接複製解答程式碼;不過這些程式碼會放在每個以專案為導向課程的 /solutions 目錄下。另一個想法是與朋友組成學習小組,一起研讀課程內容。進一步學習,建議參考 [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-77958-bethanycheum)。
**快速開始:**
1. 參考[安裝指南](INSTALLATION.md)設定你的開發環境
2. 閱讀[使用指南](USAGE.md)了解如何操作課程內容
3. 從第一課開始,依序完成各課
4. 加入我們的[Discord 社群](https://aka.ms/ds4beginners/discord)尋求支援
## 👩‍🏫 對教師
> **教師們**:我們在[此處](for-teachers.md)提供了一些使用本課程的建議。歡迎你在[討論論壇](https://github.com/microsoft/Data-Science-For-Beginners/discussions)提供回饋!
## 認識團隊
[![宣傳影片](../../ds-for-beginners.gif)](https://youtu.be/8mzavjQSMM4 "宣傳影片")
**Gif 製作者** [Mohit Jaisal](https://www.linkedin.com/in/mohitjaisal)
> 🎥 點擊上方圖片觀看關於此專案及創作者的影片!
## 教學法
我們在建構此課程時選擇了兩個教學原則:確保它是以專案為基礎,並包括頻繁的小測驗。到本系列結束時,學生將學會資料科學的基本原理,包括倫理概念、資料準備、不同的資料處理方式、資料視覺化、資料分析、資料科學的實際案例等。
此外課前的低壓測驗能設定學生學習主題的意圖而課後的第二次測驗則確保進一步的記憶鞏固。此課程設計靈活且有趣可全部或部分學習。專案由簡入深隨著10週週期的結束逐漸變得複雜。
> 請參閱我們的[行為準則](CODE_OF_CONDUCT.md)、[貢獻指南](CONTRIBUTING.md)、[翻譯指南](TRANSLATIONS.md)。我們歡迎您的建設性回饋!
## 每堂課包含:
- 可選擇的手繪筆記
- 可選擇的補充影片
- 課前暖身小測驗
- 書面課程內容
- 以專案為基礎的課程,包含如何逐步構建專案的指南
- 知識檢查
- 挑戰任務
- 補充閱讀
- 作業
- [課後小測驗](https://ff-quizzes.netlify.app/en/)
> **關於測驗的說明**:所有測驗存放於 Quiz-App 資料夾中共40個小測驗每個含三個問題。它們從課程內部連結但該測驗應用也可以在本地執行或部署到 Azure請參考 `quiz-app` 資料夾中的指示。正逐步進行在地化。
## 🎓 初學者友善範例
**資料科學新手?** 我們建立了一個特別的[範例目錄](examples/README.md),提供簡單且詳細註解的程式碼,幫助你快速上手:
- 🌟 **Hello World** - 你的第一個資料科學程式
- 📂 **載入資料** - 學習讀取與探索資料集
- 📊 **簡單分析** - 計算統計與尋找模式
- 📈 **基本視覺化** - 製作圖表
- 🔬 **真實專案** - 完整流程從頭到尾
每個範例皆附詳細註解說明每一步,適合完全初學者!
👉 **[從範例開始學習](examples/README.md)** 👈
## 課程列表
|![ 由 @sketchthedocs 製作的手繪筆記 https://sketchthedocs.dev](../../translated_images/zh-TW/00-Roadmap.4905d6567dff4753.webp)|
|:---:|
| 初學資料科學:路線圖 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 製作_ |
| 課程編號 | 主題 | 課程群組 | 學習目標 | 連結課程 | 作者 |
| :-------: | :----------------------------------------: | :--------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------: | :----: |
| 01 | 定義資料科學 | [介紹](1-Introduction/README.md) | 了解資料科學的基本概念及其與人工智慧、機器學習和大數據的關係。 | [課程](1-Introduction/01-defining-data-science/README.md) [影片](https://youtu.be/beZ7Mb_oz9I) | [Dmitry](http://soshnikov.com) |
| 02 | 資料科學倫理 | [介紹](1-Introduction/README.md) | 資料倫理的概念、挑戰與架構。 | [課程](1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) |
| 03 | 定義資料 | [介紹](1-Introduction/README.md) | 資料如何分類及常見來源。 | [課程](1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) |
| 04 | 統計與機率入門 | [介紹](1-Introduction/README.md) | 運用機率與統計的數學技術理解資料。 | [課程](1-Introduction/04-stats-and-probability/README.md) [影片](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) |
| 05 | 處理關聯型資料 | [處理資料](2-Working-With-Data/README.md) | 介紹關聯型資料及使用結構化查詢語言SQL讀作「see-quell」探索與分析關聯資料的基礎。 | [課程](2-Working-With-Data/05-relational-databases/README.md) | [Christopher](https://www.twitter.com/geektrainer) |
| 06 | 處理 NoSQL 資料 | [處理資料](2-Working-With-Data/README.md) | 介紹非關聯資料及其類型,及探索與分析文件型資料庫的基礎。 | [課程](2-Working-With-Data/06-non-relational/README.md) | [Jasmine](https://twitter.com/paladique) |
| 07 | 使用 Python | [處理資料](2-Working-With-Data/README.md) | 使用 Python 與 Pandas 等函式庫進行資料探索的基礎。建議具備 Python 程式設計基礎。 | [課程](2-Working-With-Data/07-python/README.md) [影片](https://youtu.be/dZjWOGbsN4Y) | [Dmitry](http://soshnikov.com) |
| 08 | 資料準備 | [處理資料](2-Working-With-Data/README.md) | 資料清理與轉換技術,應對缺失、不準確或不完整資料的挑戰。 | [課程](2-Working-With-Data/08-data-preparation/README.md) | [Jasmine](https://www.twitter.com/paladique) |
| 09 | 數量視覺化 | [資料視覺化](3-Data-Visualization/README.md) | 學習用 Matplotlib 來視覺化鳥類資料 🦆 | [課程](3-Data-Visualization/09-visualization-quantities/README.md) | [Jen](https://twitter.com/jenlooper) |
| 10 | 資料分布視覺化 | [資料視覺化](3-Data-Visualization/README.md) | 視覺化區間內的觀測與趨勢。 | [課程](3-Data-Visualization/10-visualization-distributions/README.md) | [Jen](https://twitter.com/jenlooper) |
| 11 | 比例視覺化 | [資料視覺化](3-Data-Visualization/README.md) | 視覺化離散與分組百分比。 | [課程](3-Data-Visualization/11-visualization-proportions/README.md) | [Jen](https://twitter.com/jenlooper) |
| 12 | 關係視覺化 | [資料視覺化](3-Data-Visualization/README.md) | 視覺化資料集及其變數間的連結與關聯。 | [課程](3-Data-Visualization/12-visualization-relationships/README.md) | [Jen](https://twitter.com/jenlooper) |
| 13 | 有意義的視覺化 | [資料視覺化](3-Data-Visualization/README.md) | 製作具價值且有助於有效問題解決與洞察的視覺化技術與指導。 | [課程](3-Data-Visualization/13-meaningful-visualizations/README.md) | [Jen](https://twitter.com/jenlooper) |
| 14 | 資料科學生命週期入門 | [生命週期](4-Data-Science-Lifecycle/README.md) | 介紹資料科學生命週期及其第一步:獲取與萃取資料。 | [課程](4-Data-Science-Lifecycle/14-Introduction/README.md) | [Jasmine](https://twitter.com/paladique) |
| 15 | 資料分析 | [生命週期](4-Data-Science-Lifecycle/README.md) | 資料科學生命週期中專注於資料分析技術的階段。 | [課程](4-Data-Science-Lifecycle/15-analyzing/README.md) | [Jasmine](https://twitter.com/paladique) |
| 16 | 溝通 | [生命週期](4-Data-Science-Lifecycle/README.md) | 資料科學生命週期中著重於以便於決策者理解的方式呈現資料洞察的階段。 | [課程](4-Data-Science-Lifecycle/16-communication/README.md) | [Jalen](https://twitter.com/JalenMcG) |
| 17 | 雲端中的資料科學 | [雲端資料](5-Data-Science-In-Cloud/README.md) | 系列課程介紹雲端資料科學及其優點。 | [課程](5-Data-Science-In-Cloud/17-Introduction/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) 和 [Maud](https://twitter.com/maudstweets) |
| 18 | 雲端中的資料科學 | [雲端資料](5-Data-Science-In-Cloud/README.md) | 使用低代碼工具訓練模型。 |[課程](5-Data-Science-In-Cloud/18-Low-Code/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) 和 [Maud](https://twitter.com/maudstweets) |
| 19 | 雲端中的資料科學 | [雲端資料](5-Data-Science-In-Cloud/README.md) | 使用 Azure Machine Learning Studio 部署模型。 | [課程](5-Data-Science-In-Cloud/19-Azure/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) 和 [Maud](https://twitter.com/maudstweets) |
| 20 | 實務中的資料科學 | [實務應用](6-Data-Science-In-Wild/README.md) | 實務中由資料科學驅動的專案。 | [課程](6-Data-Science-In-Wild/20-Real-World-Examples/README.md) | [Nitya](https://twitter.com/nitya) |
## GitHub Codespaces
請依照以下步驟打開此範例於 Codespace
1. 點擊 Code 下拉選單選擇「Open with Codespaces」。
2. 在窗格底部選擇「+ New codespace」。
更多資訊請參考 [GitHub 文件](https://docs.github.com/en/codespaces/developing-in-codespaces/creating-a-codespace-for-a-repository#creating-a-codespace)。
## VSCode 遠端容器
請依照下列步驟使用 VS Code Remote - Containers 擴充套件,在你的本機和 VSCode 中於容器中開啟此倉庫:
1. 若是首次使用開發容器,請確保你的系統已符合前置需求(例如安裝 Docker詳見[入門文件](https://code.visualstudio.com/docs/devcontainers/containers#_getting-started)。
使用此倉庫時,可以選擇在隔離的 Docker 卷中開啟:
**注意**:底層會使用 Remote-Containers 的 **Clone Repository in Container Volume...** 指令,將原始碼克隆到 Docker 卷,而非本地檔案系統。[卷](https://docs.docker.com/storage/volumes/) 是持續保存容器資料的首選方式。
或是開啟本地克隆或下載的倉庫版本:
- 將此倉庫克隆到本地檔案系統。
- 按 F1 鍵並選擇 **Remote-Containers: Open Folder in Container...** 指令。
- 選擇剛克隆的資料夾,等待容器啟動後即可開始使用。
## 離線使用
可用 [Docsify](https://docsify.js.org/#/) 離線運行此文件。請 fork 此倉庫,[在本機安裝 Docsify](https://docsify.js.org/#/quickstart),然後於此倉庫根目錄輸入 `docsify serve`。網站將於本地主機的 3000 埠執行:`localhost:3000`。
> 注意,筆記本無法經由 Docsify 渲染,需時請另行在 VS Code 中使用 Python 核心運行。
## 其他課程
我們團隊也製作其他課程!歡迎查看:
<!-- CO-OP TRANSLATOR OTHER COURSES START -->
### LangChain
[![LangChain4j 初學者](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners)
[![LangChain.js for Beginners](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
---
### Azure / Edge / MCP / Agents
[![AZD for Beginners](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
[![Edge AI for Beginners](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
[![MCP for Beginners](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
[![AI Agents for Beginners](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### 生成式 AI 系列
[![Generative AI for Beginners](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[![Generative AI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
[![Generative AI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
[![Generative AI (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
### 核心學習
[![ML for Beginners](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[![Data Science for Beginners](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[![AI for Beginners](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[![Cybersecurity for Beginners](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
[![Web Dev for Beginners](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
[![IoT for Beginners](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
[![XR Development for Beginners](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Copilot 系列
[![Copilot for AI Paired Programming](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
[![Copilot for C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
[![Copilot Adventure](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
<!-- CO-OP TRANSLATOR OTHER COURSES END -->
## 獲取幫助
**遇到問題嗎?** 查看我們的[故障排除指南](TROUBLESHOOTING.md),獲得常見問題的解決方案。
如果您卡住或對建立 AI 應用有任何疑問,請加入學習者及資深開發人員的 MCP 討論社群。這是一個支持性強的社群,歡迎提問且自由分享知識。
[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG)
如果您在開發過程中有產品反饋或錯誤,請訪問:
[![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免責聲明**
本文件係使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 所翻譯而成。雖然我們致力於確保翻譯的準確性,但請注意自動翻譯可能包含錯誤或不準確之處。原始語言版本應視為權威且具法律效力的文件。對於關鍵資訊,建議聘請專業人工翻譯。我們不對因使用本翻譯內容而產生的任何誤解或誤譯負責。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -0,0 +1,40 @@
## 安全性
Microsoft 非常重視我們軟體產品和服務的安全性,包括透過我們的 GitHub 組織管理的所有原始碼庫,這些組織包括 [Microsoft](https://github.com/Microsoft)、[Azure](https://github.com/Azure)、[DotNet](https://github.com/dotnet)、[AspNet](https://github.com/aspnet)、[Xamarin](https://github.com/xamarin) 以及 [我們的 GitHub 組織](https://opensource.microsoft.com/)。
如果您認為在任何 Microsoft 擁有的原始碼庫中發現了符合 [Microsoft 對安全性漏洞的定義](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)) 的安全性漏洞,請按照以下描述向我們報告。
## 回報安全性問題
**請勿透過公開的 GitHub 問題回報安全性漏洞。**
相反,請透過 Microsoft Security Response Center (MSRC) 回報,網址為 [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report)。
如果您希望在不登入的情況下提交,請發送電子郵件至 [secure@microsoft.com](mailto:secure@microsoft.com)。如果可能,請使用我們的 PGP 金鑰加密您的訊息;您可以從 [Microsoft Security Response Center PGP Key 頁面](https://www.microsoft.com/en-us/msrc/pgp-key-msrc) 下載。
您應該在 24 小時內收到回覆。如果因某些原因未收到回覆,請透過電子郵件跟進,以確保我們收到您的原始訊息。更多資訊可參考 [microsoft.com/msrc](https://www.microsoft.com/msrc)。
請提供以下所需資訊(盡可能完整),以幫助我們更好地了解問題的性質和範圍:
* 問題類型例如緩衝區溢位、SQL 注入、跨站腳本攻擊等)
* 與問題表現相關的原始檔案完整路徑
* 受影響原始碼的位置(標籤/分支/提交或直接 URL
* 重現問題所需的任何特殊配置
* 重現問題的逐步指導
* 概念驗證或漏洞利用程式碼(如果可能)
* 問題的影響,包括攻擊者可能如何利用該問題
這些資訊將幫助我們更快速地分類您的報告。
如果您是為了漏洞賞金計劃而回報,提供更完整的報告可能有助於獲得更高的賞金獎勵。請造訪我們的 [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) 頁面,了解更多有關我們現行計劃的詳細資訊。
## 偏好語言
我們偏好所有的溝通使用英文。
## 政策
Microsoft 遵循 [協調式漏洞披露](https://www.microsoft.com/en-us/msrc/cvd) 的原則。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,13 @@
# 支援
## 如何提交問題並獲得協助
此專案使用 GitHub Issues 來追蹤錯誤和功能請求。在提交新問題之前,請先搜尋現有的問題以避免重複。對於新問題,請將您的錯誤或功能請求提交為一個新的 Issue。
如果需要協助或對使用此專案有任何疑問,請提交一個 Issue。
## Microsoft 支援政策
對此存儲庫的支援僅限於上述列出的資源。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,618 @@
# 疑難排解指南
本指南提供了解決在使用《初學者的數據科學》課程時可能遇到的常見問題的方法。
## 目錄
- [Python 和 Jupyter 問題](../..)
- [套件和依賴問題](../..)
- [Jupyter Notebook 問題](../..)
- [測驗應用程式問題](../..)
- [Git 和 GitHub 問題](../..)
- [Docsify 文件問題](../..)
- [數據和檔案問題](../..)
- [效能問題](../..)
- [獲取額外幫助](../..)
## Python 和 Jupyter 問題
### 找不到 Python 或版本錯誤
**問題:** `python: command not found` 或 Python 版本錯誤
**解決方法:**
```bash
# Check Python version
python --version
python3 --version
# If Python 3 is installed as 'python3', create an alias
# On macOS/Linux, add to ~/.bashrc or ~/.zshrc:
alias python=python3
alias pip=pip3
# Or use python3 explicitly
python3 -m pip install jupyter
```
**Windows 解決方法:**
1. 從 [python.org](https://www.python.org/) 重新安裝 Python
2. 安裝過程中勾選 "Add Python to PATH"
3. 重新啟動終端機/命令提示符
### 虛擬環境啟動問題
**問題:** 虛擬環境無法啟動
**解決方法:**
**Windows**
```bash
# If you get execution policy error
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Then activate
venv\Scripts\activate
```
**macOS/Linux**
```bash
# Ensure the activate script is executable
chmod +x venv/bin/activate
# Then activate
source venv/bin/activate
```
**驗證啟動:**
```bash
# Your prompt should show (venv)
# Check Python location
which python # Should point to venv
```
### Jupyter 核心問題
**問題:** "Kernel not found" 或 "Kernel keeps dying"
**解決方法:**
```bash
# Reinstall kernel
python -m ipykernel install --user --name=datascience --display-name="Python (Data Science)"
# Or use the default kernel
python -m ipykernel install --user
# Restart Jupyter
jupyter notebook
```
**問題:** Jupyter 中的 Python 版本錯誤
**解決方法:**
```bash
# Install Jupyter in your virtual environment
source venv/bin/activate # Activate first
pip install jupyter ipykernel
# Register the kernel
python -m ipykernel install --user --name=venv --display-name="Python (venv)"
# In Jupyter, select Kernel -> Change kernel -> Python (venv)
```
## 套件和依賴問題
### 匯入錯誤
**問題:** `ModuleNotFoundError: No module named 'pandas'`(或其他套件)
**解決方法:**
```bash
# Ensure virtual environment is activated
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows
# Install missing package
pip install pandas
# Install all common packages
pip install jupyter pandas numpy matplotlib seaborn scikit-learn
# Verify installation
python -c "import pandas; print(pandas.__version__)"
```
### Pip 安裝失敗
**問題:** `pip install` 因權限錯誤而失敗
**解決方法:**
```bash
# Use --user flag
pip install --user package-name
# Or use virtual environment (recommended)
python -m venv venv
source venv/bin/activate
pip install package-name
```
**問題:** `pip install` 因 SSL 憑證錯誤而失敗
**解決方法:**
```bash
# Update pip first
python -m pip install --upgrade pip
# Try installing with trusted host (temporary workaround)
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org package-name
```
### 套件版本衝突
**問題:** 套件版本不兼容
**解決方法:**
```bash
# Create fresh virtual environment
python -m venv venv-new
source venv-new/bin/activate # or venv-new\Scripts\activate on Windows
# Install packages with specific versions if needed
pip install pandas==1.3.0
pip install numpy==1.21.0
# Or let pip resolve dependencies
pip install jupyter pandas numpy matplotlib seaborn scikit-learn
```
## Jupyter Notebook 問題
### Jupyter 無法啟動
**問題:** `jupyter notebook` 命令未找到
**解決方法:**
```bash
# Install Jupyter
pip install jupyter
# Or use python -m
python -m jupyter notebook
# Add to PATH if needed (macOS/Linux)
export PATH="$HOME/.local/bin:$PATH"
```
### Notebook 無法載入或儲存
**問題:** "Notebook failed to load" 或儲存錯誤
**解決方法:**
1. 檢查檔案權限
```bash
# Make sure you have write permissions
ls -l notebook.ipynb
chmod 644 notebook.ipynb # If needed
```
2. 檢查檔案是否損壞
```bash
# Try opening in text editor to check JSON structure
# Copy content to new notebook if corrupted
```
3. 清除 Jupyter 快取
```bash
jupyter notebook --clear-cache
```
### 程式碼單元無法執行
**問題:** 程式碼單元卡在 "In [*]" 或執行時間過長
**解決方法:**
1. **中斷核心**:點擊 "Interrupt" 按鈕或按 `I, I`
2. **重新啟動核心**:核心選單 → Restart
3. **檢查程式碼中的無限迴圈**
4. **清除輸出**Cell → All Output → Clear
### 圖表無法顯示
**問題:** `matplotlib` 圖表未在 Notebook 中顯示
**解決方法:**
```python
# Add magic command at the top of notebook
%matplotlib inline
import matplotlib.pyplot as plt
# Create plot
plt.plot([1, 2, 3, 4])
plt.show() # Make sure to call show()
```
**互動式圖表的替代方法:**
```python
%matplotlib notebook
# Or
%matplotlib widget
```
## 測驗應用程式問題
### npm install 失敗
**問題:** 執行 `npm install` 時出現錯誤
**解決方法:**
```bash
# Clear npm cache
npm cache clean --force
# Remove node_modules and package-lock.json
rm -rf node_modules package-lock.json
# Reinstall
npm install
# If still failing, try with legacy peer deps
npm install --legacy-peer-deps
```
### 測驗應用程式無法啟動
**問題:** `npm run serve` 執行失敗
**解決方法:**
```bash
# Check Node.js version
node --version # Should be 12.x or higher
# Reinstall dependencies
cd quiz-app
rm -rf node_modules package-lock.json
npm install
# Try different port
npm run serve -- --port 8081
```
### 埠已被佔用
**問題:** "Port 8080 is already in use"
**解決方法:**
```bash
# Find and kill process on port 8080
# macOS/Linux:
lsof -ti:8080 | xargs kill -9
# Windows:
netstat -ano | findstr :8080
taskkill /PID <PID> /F
# Or use a different port
npm run serve -- --port 8081
```
### 測驗無法載入或顯示空白頁面
**問題:** 測驗應用程式載入但顯示空白頁面
**解決方法:**
1. 檢查瀏覽器主控台中的錯誤(按 F12
2. 清除瀏覽器快取和 Cookie
3. 嘗試使用其他瀏覽器
4. 確保 JavaScript 已啟用
5. 檢查是否有廣告攔截器干擾
```bash
# Rebuild the app
npm run build
npm run serve
```
## Git 和 GitHub 問題
### Git 未被識別
**問題:** `git: command not found`
**解決方法:**
**Windows**
- 從 [git-scm.com](https://git-scm.com/) 安裝 Git
- 安裝後重新啟動終端機
**macOS**
> **注意:** 如果尚未安裝 Homebrew請先按照 [https://brew.sh/](https://brew.sh/) 的指示進行安裝。
```bash
# Install via Homebrew
brew install git
# Or install Xcode Command Line Tools
xcode-select --install
```
**Linux**
```bash
sudo apt-get install git # Debian/Ubuntu
sudo dnf install git # Fedora
```
### Clone 失敗
**問題:** `git clone` 因身份驗證錯誤而失敗
**解決方法:**
```bash
# Use HTTPS URL
git clone https://github.com/microsoft/Data-Science-For-Beginners.git
# If you have 2FA enabled on GitHub, use Personal Access Token
# Create token at: https://github.com/settings/tokens
# Use token as password when prompted
```
### 權限被拒絕publickey
**問題:** SSH 金鑰身份驗證失敗
**解決方法:**
```bash
# Generate SSH key
ssh-keygen -t ed25519 -C "your_email@example.com"
# Add key to ssh-agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# Add public key to GitHub
# Copy key: cat ~/.ssh/id_ed25519.pub
# Add at: https://github.com/settings/keys
```
## Docsify 文件問題
### Docsify 命令未找到
**問題:** `docsify: command not found`
**解決方法:**
```bash
# Install globally
npm install -g docsify-cli
# If permission error on macOS/Linux
sudo npm install -g docsify-cli
# Verify installation
docsify --version
# If still not found, add npm global path
# Find npm global path
npm config get prefix
# Add to PATH (add to ~/.bashrc or ~/.zshrc)
export PATH="$PATH:/usr/local/bin"
```
### 文件無法載入
**問題:** Docsify 啟動但內容未載入
**解決方法:**
```bash
# Ensure you're in the repository root
cd Data-Science-For-Beginners
# Check for index.html
ls index.html
# Serve with specific port
docsify serve --port 3000
# Check browser console for errors (F12)
```
### 圖片無法顯示
**問題:** 圖片顯示為損壞的連結圖示
**解決方法:**
1. 檢查圖片路徑是否為相對路徑
2. 確保圖片檔案存在於存儲庫中
3. 清除瀏覽器快取
4. 驗證檔案副檔名是否匹配(某些系統對大小寫敏感)
## 數據和檔案問題
### 找不到檔案錯誤
**問題:** 載入數據時出現 `FileNotFoundError`
**解決方法:**
```python
import os
# Check current working directory
print(os.getcwd())
# Use absolute path
data_path = os.path.join(os.getcwd(), 'data', 'filename.csv')
df = pd.read_csv(data_path)
# Or use relative path from notebook location
df = pd.read_csv('../data/filename.csv')
# Verify file exists
print(os.path.exists('data/filename.csv'))
```
### CSV 讀取錯誤
**問題:** 讀取 CSV 檔案時出現錯誤
**解決方法:**
```python
import pandas as pd
# Try different encodings
df = pd.read_csv('file.csv', encoding='utf-8')
# or
df = pd.read_csv('file.csv', encoding='latin-1')
# or
df = pd.read_csv('file.csv', encoding='ISO-8859-1')
# Handle missing values
df = pd.read_csv('file.csv', na_values=['NA', 'N/A', ''])
# Specify delimiter if not comma
df = pd.read_csv('file.csv', delimiter=';')
```
### 大型數據集的記憶體錯誤
**問題:** 載入大型檔案時出現 `MemoryError`
**解決方法:**
```python
# Read in chunks
chunk_size = 10000
chunks = []
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
# Process chunk
chunks.append(chunk)
df = pd.concat(chunks)
# Or read specific columns only
df = pd.read_csv('file.csv', usecols=['col1', 'col2'])
# Use more efficient data types
df = pd.read_csv('file.csv', dtype={'column_name': 'int32'})
```
## 效能問題
### Notebook 效能緩慢
**問題:** Notebook 執行速度非常慢
**解決方法:**
1. **重新啟動核心並清除輸出**
- 核心 → Restart & Clear Output
2. **關閉未使用的 Notebook**
3. **優化程式碼:**
```python
# Use vectorized operations instead of loops
# Bad:
result = []
for x in data:
result.append(x * 2)
# Good:
result = data * 2 # NumPy/Pandas vectorization
```
4. **抽樣大型數據集:**
```python
# Work with sample during development
df_sample = df.sample(n=1000) # or df.head(1000)
```
### 瀏覽器崩潰
**問題:** 瀏覽器崩潰或無法響應
**解決方法:**
1. 關閉未使用的標籤頁
2. 清除瀏覽器快取
3. 增加瀏覽器記憶體Chrome`chrome://settings/system`
4. 使用 JupyterLab 替代:
```bash
pip install jupyterlab
jupyter lab
```
## 獲取額外幫助
### 在尋求幫助之前
1. 檢查本疑難排解指南
2. 搜索 [GitHub Issues](https://github.com/microsoft/Data-Science-For-Beginners/issues)
3. 查看 [INSTALLATION.md](INSTALLATION.md) 和 [USAGE.md](USAGE.md)
4. 嘗試在線搜索錯誤訊息
### 如何尋求幫助
在創建問題或尋求幫助時,請提供以下信息:
1. **操作系統**Windows、macOS 或 Linux哪個版本
2. **Python 版本**:執行 `python --version`
3. **錯誤訊息**:複製完整的錯誤訊息
4. **重現步驟**:錯誤發生前的操作
5. **已嘗試的解決方法**:您已嘗試的解決方案
**範例:**
```
**Operating System:** macOS 12.0
**Python Version:** 3.9.7
**Error Message:** ModuleNotFoundError: No module named 'pandas'
**Steps to Reproduce:**
1. Activated virtual environment
2. Started Jupyter notebook
3. Tried to import pandas
**What I've Tried:**
- Ran pip install pandas
- Restarted Jupyter
```
### 社群資源
- **GitHub Issues**[創建問題](https://github.com/microsoft/Data-Science-For-Beginners/issues/new)
- **Discord**[加入我們的社群](https://aka.ms/ds4beginners/discord)
- **討論區**[GitHub Discussions](https://github.com/microsoft/Data-Science-For-Beginners/discussions)
- **Microsoft Learn**[問答論壇](https://docs.microsoft.com/answers/)
### 相關文件
- [INSTALLATION.md](INSTALLATION.md) - 安裝指南
- [USAGE.md](USAGE.md) - 如何使用課程
- [CONTRIBUTING.md](CONTRIBUTING.md) - 如何貢獻
- [README.md](README.md) - 專案概述
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,365 @@
# 使用指南
本指南提供了使用「初學者的數據科學」課程的範例和常見工作流程。
## 目錄
- [如何使用本課程](../..)
- [使用課程內容](../..)
- [使用 Jupyter Notebook](../..)
- [使用測驗應用程式](../..)
- [常見工作流程](../..)
- [自學者的提示](../..)
- [教師的提示](../..)
## 如何使用本課程
本課程設計靈活,可用於多種方式:
- **自學**:按照自己的進度獨立完成課程
- **課堂教學**:作為結構化課程進行指導教學
- **學習小組**:與同儕合作學習
- **工作坊形式**:短期密集學習
## 使用課程內容
每節課遵循一致的結構以最大化學習效果:
### 課程結構
1. **課前測驗**:測試現有知識
2. **手繪筆記**(可選):關鍵概念的視覺摘要
3. **影片**(可選):補充影片內容
4. **書面課程**:核心概念和解釋
5. **Jupyter Notebook**:動手編碼練習
6. **作業**:練習所學內容
7. **課後測驗**:加強理解
### 課程範例工作流程
```bash
# 1. Navigate to the lesson directory
cd 1-Introduction/01-defining-data-science
# 2. Read the README.md
# Open README.md in your browser or editor
# 3. Take the pre-lesson quiz
# Click the quiz link in the README
# 4. Open the Jupyter notebook (if available)
jupyter notebook
# 5. Complete the exercises in the notebook
# 6. Work on the assignment
# 7. Take the post-lesson quiz
```
## 使用 Jupyter Notebook
### 啟動 Jupyter
```bash
# Activate your virtual environment
source venv/bin/activate # On macOS/Linux
# OR
venv\Scripts\activate # On Windows
# Start Jupyter from the repository root
jupyter notebook
```
### 執行 Notebook 的單元格
1. **執行單元格**:按 `Shift + Enter` 或點擊「執行」按鈕
2. **執行所有單元格**從選單中選擇「Cell」→「Run All」
3. **重啟核心**如果遇到問題選擇「Kernel」→「Restart」
### 範例:在 Notebook 中處理數據
```python
# Import required libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Load a dataset
df = pd.read_csv('data/sample.csv')
# Explore the data
df.head()
df.info()
df.describe()
# Create a visualization
plt.figure(figsize=(10, 6))
plt.plot(df['column_name'])
plt.title('Sample Visualization')
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.show()
```
### 保存您的工作
- Jupyter 會定期自動保存
- 手動保存:按 `Ctrl + S`macOS 上為 `Cmd + S`
- 您的進度會保存到 `.ipynb` 文件中
## 使用測驗應用程式
### 本地運行測驗應用程式
```bash
# Navigate to quiz app directory
cd quiz-app
# Start the development server
npm run serve
# Access at http://localhost:8080
```
### 參加測驗
1. 課前測驗連結位於每節課的頂部
2. 課後測驗連結位於每節課的底部
3. 每個測驗有 3 個問題
4. 測驗旨在加強學習,而非全面測試
### 測驗編號
- 測驗編號為 0-39共 40 個測驗)
- 每節課通常有課前和課後測驗
- 測驗 URL 包含測驗編號:`https://ff-quizzes.netlify.app/en/ds/quiz/0`
## 常見工作流程
### 工作流程 1完全初學者路徑
```bash
# 1. Set up your environment (see INSTALLATION.md)
# 2. Start with Lesson 1
cd 1-Introduction/01-defining-data-science
# 3. For each lesson:
# - Take pre-lesson quiz
# - Read the lesson content
# - Work through the notebook
# - Complete the assignment
# - Take post-lesson quiz
# 4. Progress through all 20 lessons sequentially
```
### 工作流程 2特定主題學習
如果您對某個特定主題感興趣:
```bash
# Example: Focus on Data Visualization
cd 3-Data-Visualization
# Explore lessons 9-13:
# - Lesson 9: Visualizing Quantities
# - Lesson 10: Visualizing Distributions
# - Lesson 11: Visualizing Proportions
# - Lesson 12: Visualizing Relationships
# - Lesson 13: Meaningful Visualizations
```
### 工作流程 3基於項目學習
```bash
# 1. Review the Data Science Lifecycle lessons (14-16)
cd 4-Data-Science-Lifecycle
# 2. Work through a real-world example (Lesson 20)
cd ../6-Data-Science-In-Wild/20-Real-World-Examples
# 3. Apply concepts to your own project
```
### 工作流程 4基於雲端的數據科學
```bash
# Learn about cloud data science (Lessons 17-19)
cd 5-Data-Science-In-Cloud
# 17: Introduction to Cloud Data Science
# 18: Low-Code ML Tools
# 19: Azure Machine Learning Studio
```
## 自學者的提示
### 保持組織性
```bash
# Create a learning journal
mkdir my-learning-journal
# For each lesson, create notes
echo "# Lesson 1 Notes" > my-learning-journal/lesson-01-notes.md
```
### 定期練習
- 每天或每週安排固定的學習時間
- 每週至少完成一節課
- 定期回顧之前的課程
### 與社群互動
- 加入 [Discord 社群](https://aka.ms/ds4beginners/discord)
- 參與 Discord 的 #Data-Science-for-Beginners 頻道 [Discord 討論](https://aka.ms/ds4beginners/discord)
- 分享您的進度並提出問題
### 建立自己的項目
完成課程後,將概念應用於個人項目:
```python
# Example: Analyze your own dataset
import pandas as pd
# Load your own data
my_data = pd.read_csv('my-project/data.csv')
# Apply techniques learned
# - Data cleaning (Lesson 8)
# - Exploratory data analysis (Lesson 7)
# - Visualization (Lessons 9-13)
# - Analysis (Lesson 15)
```
## 教師的提示
### 課堂設置
1. 查看 [for-teachers.md](for-teachers.md) 以獲取詳細指導
2. 設置共享環境GitHub Classroom 或 Codespaces
3. 建立溝通渠道Discord、Slack 或 Teams
### 課程規劃
**建議的 10 週時間表:**
- **第 1-2 週**:介紹(課程 1-4
- **第 3-4 週**:數據處理(課程 5-8
- **第 5-6 週**:數據可視化(課程 9-13
- **第 7-8 週**:數據科學生命周期(課程 14-16
- **第 9 週**:雲端數據科學(課程 17-19
- **第 10 週**:實際應用與最終項目(課程 20
### 運行 Docsify 以離線訪問
```bash
# Serve documentation locally for classroom use
docsify serve
# Students can access at localhost:3000
# No internet required after initial setup
```
### 作業評分
- 查看學生 Notebook 中完成的練習
- 通過測驗分數檢查理解程度
- 使用數據科學生命周期原則評估最終項目
### 創建作業
```python
# Example custom assignment template
"""
Assignment: [Topic]
Objective: [Learning goal]
Dataset: [Provide or have students find one]
Tasks:
1. Load and explore the dataset
2. Clean and prepare the data
3. Create at least 3 visualizations
4. Perform analysis
5. Communicate findings
Deliverables:
- Jupyter notebook with code and explanations
- Written summary of findings
"""
```
## 離線使用
### 下載資源
```bash
# Clone the entire repository
git clone https://github.com/microsoft/Data-Science-For-Beginners.git
# Download datasets in advance
# Most datasets are included in the repository
```
### 本地運行文檔
```bash
# Serve with Docsify
docsify serve
# Access at localhost:3000
```
### 本地運行測驗應用程式
```bash
cd quiz-app
npm run serve
```
## 訪問翻譯內容
翻譯版本提供超過 40 種語言:
```bash
# Access translated lessons
cd translations/fr # French
cd translations/es # Spanish
cd translations/de # German
# ... and many more
```
每個翻譯版本的結構與英文版保持一致。
## 其他資源
### 繼續學習
- [Microsoft Learn](https://docs.microsoft.com/learn/) - 額外的學習路徑
- [Student Hub](https://docs.microsoft.com/learn/student-hub) - 學生資源
- [Azure AI Foundry](https://aka.ms/foundry/forum) - 社群論壇
### 相關課程
- [AI 初學者課程](https://aka.ms/ai-beginners)
- [ML 初學者課程](https://aka.ms/ml-beginners)
- [Web 開發初學者課程](https://aka.ms/webdev-beginners)
- [生成式 AI 初學者課程](https://aka.ms/genai-beginners)
## 獲取幫助
- 查看 [TROUBLESHOOTING.md](TROUBLESHOOTING.md) 以解決常見問題
- 搜索 [GitHub Issues](https://github.com/microsoft/Data-Science-For-Beginners/issues)
- 加入我們的 [Discord](https://aka.ms/ds4beginners/discord)
- 查看 [CONTRIBUTING.md](CONTRIBUTING.md) 以報告問題或貢獻內容
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,29 @@
- 介紹
- [定義數據科學](../1-Introduction/01-defining-data-science/README.md)
- [數據科學的倫理](../1-Introduction/02-ethics/README.md)
- [定義數據](../1-Introduction/03-defining-data/README.md)
- [概率與統計](../1-Introduction/04-stats-and-probability/README.md)
- 處理數據
- [關聯式數據庫](../2-Working-With-Data/05-relational-databases/README.md)
- [非關聯式數據庫](../2-Working-With-Data/06-non-relational/README.md)
- [Python](../2-Working-With-Data/07-python/README.md)
- [數據準備](../2-Working-With-Data/08-data-preparation/README.md)
- 數據可視化
- [可視化數量](../3-Data-Visualization/09-visualization-quantities/README.md)
- [可視化分佈](../3-Data-Visualization/10-visualization-distributions/README.md)
- [可視化比例](../3-Data-Visualization/11-visualization-proportions/README.md)
- [可視化關係](../3-Data-Visualization/12-visualization-relationships/README.md)
- [有意義的可視化](../3-Data-Visualization/13-meaningful-visualizations/README.md)
- 數據科學生命周期
- [介紹](../4-Data-Science-Lifecycle/14-Introduction/README.md)
- [分析](../4-Data-Science-Lifecycle/15-analyzing/README.md)
- [溝通](../4-Data-Science-Lifecycle/16-communication/README.md)
- 雲端中的數據科學
- [介紹](../5-Data-Science-In-Cloud/17-Introduction/README.md)
- [低代碼](../5-Data-Science-In-Cloud/18-Low-Code/README.md)
- [Azure](../5-Data-Science-In-Cloud/19-Azure/README.md)
- 野外的數據科學
- [野外的數據科學](../6-Data-Science-In-Wild/README.md)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,136 @@
# 初學者友善的資料科學範例
歡迎來到範例目錄!這些簡單且有詳細註解的範例旨在幫助您開始學習資料科學,即使您是完全的初學者。
## 📚 您會在這裡找到什麼
每個範例都是獨立的,並包含:
- **清晰的註解**,解釋每一步驟
- **簡單易讀的程式碼**,一次展示一個概念
- **真實世界的背景**,幫助您了解何時以及為什麼使用這些技術
- **預期輸出**,讓您知道應該看到什麼結果
## 🚀 開始使用
### 先決條件
在執行這些範例之前,請確保您已經:
- 安裝 Python 3.7 或更高版本
- 基本了解如何執行 Python 腳本
### 安裝所需的庫
```bash
pip install pandas numpy matplotlib
```
## 📖 範例概覽
### 1. Hello World - 資料科學風格
**檔案:** `01_hello_world_data_science.py`
您的第一個資料科學程式!學習如何:
- 載入簡單的資料集
- 顯示有關資料的基本資訊
- 輸出您的第一個資料科學結果
非常適合想要看到第一個資料科學程式運作的絕對初學者。
---
### 2. 載入和探索資料
**檔案:** `02_loading_data.py`
學習處理資料的基本知識:
- 從 CSV 檔案讀取資料
- 查看資料集的前幾行
- 獲取有關資料的基本統計資訊
- 了解資料型別
這通常是任何資料科學專案的第一步!
---
### 3. 簡單資料分析
**檔案:** `03_simple_analysis.py`
進行您的第一次資料分析:
- 計算基本統計數據(平均值、中位數、眾數)
- 找出最大值和最小值
- 計算值的出現次數
- 根據條件篩選資料
看看如何回答有關資料的簡單問題。
---
### 4. 資料視覺化基礎
**檔案:** `04_basic_visualization.py`
創建您的第一個視覺化:
- 繪製簡單的柱狀圖
- 創建折線圖
- 生成圓餅圖
- 將視覺化結果保存為圖片
學習如何以視覺方式傳達您的發現!
---
### 5. 使用真實資料
**檔案:** `05_real_world_example.py`
將所有內容結合在一起的完整範例:
- 從資料庫載入真實資料
- 清理和準備資料
- 進行分析
- 創建有意義的視覺化
- 得出結論
此範例展示了從頭到尾的完整工作流程。
---
## 🎯 如何使用這些範例
1. **從頭開始**:範例按難度排序編號。從 `01_hello_world_data_science.py` 開始,逐步完成。
2. **閱讀註解**:每個檔案都有詳細的註解,解釋程式碼的作用及原因。仔細閱讀!
3. **嘗試修改**:嘗試修改程式碼。如果更改某個值會發生什麼?破壞程式並修復它——這是學習的方式!
4. **執行程式碼**:執行每個範例並觀察輸出。與您的預期結果進行比較。
5. **擴展範例**:一旦理解了範例,嘗試用自己的想法擴展它。
## 💡 初學者提示
- **不要急躁**:在進入下一個範例之前,花時間理解每個範例
- **自己輸入程式碼**:不要只是複製貼上。輸入程式碼有助於學習和記憶
- **查詢不熟悉的概念**:如果看到不理解的內容,請在線搜索或查看主要課程
- **提出問題**:如果需要幫助,請加入 [討論論壇](https://github.com/microsoft/Data-Science-For-Beginners/discussions)
- **定期練習**:每天嘗試編寫一些程式碼,而不是每週一次的長時間學習
## 🔗 下一步
完成這些範例後,您可以:
- 學習主要課程的內容
- 嘗試每個課程資料夾中的作業
- 探索 Jupyter 筆記本以進一步深入學習
- 創建自己的資料科學專案
## 📚 其他資源
- [主要課程](../README.md) - 完整的 20 篇課程
- [給教師的指南](../for-teachers.md) - 在課堂中使用此課程
- [Microsoft Learn](https://docs.microsoft.com/learn/) - 免費的線上學習資源
- [Python 文件](https://docs.python.org/3/) - 官方 Python 參考
## 🤝 貢獻
發現錯誤或有新範例的想法?我們歡迎您的貢獻!請參閱 [貢獻指南](../CONTRIBUTING.md)。
---
**祝學習愉快!🎉**
記住:每位專家都曾是初學者。一步一步來,不要害怕犯錯——它們是學習過程的一部分!
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不精確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,67 @@
## 給教育工作者
想在課堂上使用這份課程嗎?請隨意使用!
事實上,您可以直接在 GitHub 上使用這份課程,透過 GitHub Classroom 來實現。
要做到這一點,請先 fork 這個倉庫。您需要為每一課創建一個倉庫,因此需要將每個資料夾提取到一個單獨的倉庫中。這樣,[GitHub Classroom](https://classroom.github.com/classrooms) 就可以分別處理每一課。
這些[完整的指導說明](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)將幫助您了解如何設置您的課堂。
## 按原樣使用這個倉庫
如果您希望按目前的形式使用這個倉庫,而不使用 GitHub Classroom也完全可以。您需要與學生溝通告訴他們應該一起完成哪一課。
在線上教學(如 Zoom、Teams 或其他平台)中,您可以為測驗設置分組討論室,並指導學生為學習做好準備。然後邀請學生參加測驗,並在特定時間以 "issues" 的形式提交答案。如果您希望學生公開協作完成作業,也可以採用相同的方式。
如果您更喜歡更私密的形式,可以要求學生逐課 fork 課程到他們自己的 GitHub 私人倉庫,並授予您訪問權限。這樣,他們可以私下完成測驗和作業,並通過 classroom repo 上的 issues 提交給您。
在線課堂有很多種運作方式。請告訴我們哪種方式最適合您!
## 本課程包含內容:
20 節課、40 次測驗和 20 個作業。課程還附有手繪筆記,適合視覺型學習者。許多課程提供 Python 和 R 兩種版本,並可在 VS Code 的 Jupyter notebooks 中完成。了解更多關於如何設置課堂以使用這些技術堆棧的資訊https://code.visualstudio.com/docs/datascience/jupyter-notebooks。
所有手繪筆記,包括一張大幅海報,都在[這個資料夾](../../sketchnotes)中。
您還可以使用 [Docsify](https://docsify.js.org/#/) 將這份課程作為獨立的、離線友好的網站運行。[安裝 Docsify](https://docsify.js.org/#/quickstart) 到您的本地機器,然後在這個倉庫的本地副本的根目錄中輸入 `docsify serve`。網站將在本地端的 3000 埠上運行:`localhost:3000`。
課程的離線友好版本將以獨立網頁的形式打開https://localhost:3000
課程分為六個部分:
- 1: 介紹
- 1: 定義數據科學
- 2: 倫理
- 3: 定義數據
- 4: 概率與統計概述
- 2: 處理數據
- 5: 關聯式數據庫
- 6: 非關聯式數據庫
- 7: Python
- 8: 數據準備
- 3: 數據可視化
- 9: 數量的可視化
- 10: 分佈的可視化
- 11: 比例的可視化
- 12: 關係的可視化
- 13: 有意義的可視化
- 4: 數據科學生命周期
- 14: 介紹
- 15: 分析
- 16: 溝通
- 5: 雲端中的數據科學
- 17: 介紹
- 18: 低代碼選項
- 19: Azure
- 6: 真實世界中的數據科學
- 20: 概述
## 請分享您的想法!
我們希望這份課程能夠滿足您和您的學生的需求。請在討論區提供您的反饋!也可以在討論區為您的學生創建一個課堂專區。
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,128 @@
# 測驗
這些測驗是數據科學課程的課前和課後測驗課程網址為https://aka.ms/datascience-beginners
## 新增翻譯的測驗集
要新增測驗翻譯,請在 `assets/translations` 資料夾中建立相應的測驗結構。原始測驗位於 `assets/translations/en`。測驗分為多個組別。請確保編號與正確的測驗部分對齊。整個課程共有 40 個測驗,編號從 0 開始。
完成翻譯後,編輯翻譯資料夾中的 `index.js` 文件,按照 `en` 的約定導入所有文件。
接著,編輯 `assets/translations` 中的 `index.js` 文件以導入新的翻譯文件。
然後,編輯此應用中的 `App.vue` 文件中的下拉選單,新增您的語言。將本地化縮寫與您的語言資料夾名稱匹配。
最後,編輯翻譯課程中的所有測驗連結(如果存在),以包含本地化的查詢參數,例如:`?loc=fr`。
## 專案設置
```
npm install
```
### 編譯並熱重載以進行開發
```
npm run serve
```
### 編譯並壓縮以進行生產環境
```
npm run build
```
### 檢查並修復文件
```
npm run lint
```
### 自訂配置
請參閱 [配置參考](https://cli.vuejs.org/config/)。
致謝感謝此測驗應用的原始版本https://github.com/arpan45/simple-quiz-vue
## 部署到 Azure
以下是幫助您開始的逐步指南:
1. Fork GitHub 儲存庫
確保您的靜態網頁應用程式代碼位於您的 GitHub 儲存庫中。Fork 此儲存庫。
2. 建立 Azure 靜態網頁應用
- 建立 [Azure 帳戶](http://azure.microsoft.com)
- 前往 [Azure 入口網站](https://portal.azure.com)
- 點擊「建立資源」,搜尋「靜態網頁應用」。
- 點擊「建立」。
3. 配置靜態網頁應用
- 基本設定:
- 訂閱:選擇您的 Azure 訂閱。
- 資源群組:建立新的資源群組或使用現有的資源群組。
- 名稱:為您的靜態網頁應用提供名稱。
- 地區:選擇最接近使用者的地區。
- #### 部署詳情:
- 原始碼選擇「GitHub」。
- GitHub 帳戶:授權 Azure 訪問您的 GitHub 帳戶。
- 組織:選擇您的 GitHub 組織。
- 儲存庫:選擇包含靜態網頁應用的儲存庫。
- 分支:選擇您要部署的分支。
- #### 建置詳情:
- 建置預設:選擇您的應用所使用的框架(例如 React、Angular、Vue 等)。
- 應用位置:指定包含應用程式代碼的資料夾(例如 / 如果在根目錄)。
- API 位置:如果有 API請指定其位置可選
- 輸出位置:指定建置輸出生成的資料夾(例如 build 或 dist
4. 檢查並建立
檢查您的設置並點擊「建立」。Azure 會設置必要的資源並在您的儲存庫中建立 GitHub Actions 工作流程。
5. GitHub Actions 工作流程
Azure 會自動在您的儲存庫中建立 GitHub Actions 工作流程文件(.github/workflows/azure-static-web-apps-<name>.yml。此工作流程將處理建置和部署過程。
6. 監控部署
前往 GitHub 儲存庫中的「Actions」標籤。
您應該看到工作流程正在運行。此工作流程將建置並部署您的靜態網頁應用到 Azure。
工作流程完成後,您的應用將在提供的 Azure URL 上線。
### 範例工作流程文件
以下是 GitHub Actions 工作流程文件的範例:
name: Azure Static Web Apps CI/CD
```
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
jobs:
build_and_deploy_job:
runs-on: ubuntu-latest
name: Build and Deploy Job
steps:
- uses: actions/checkout@v2
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: "upload"
app_location: "quiz-app" # App source code path
api_location: ""API source code path optional
output_location: "dist" #Built app content directory - optional
```
### 其他資源
- [Azure 靜態網頁應用文件](https://learn.microsoft.com/azure/static-web-apps/getting-started)
- [GitHub Actions 文件](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,10 @@
在這裡可以找到所有的手繪筆記!
## 致謝
Nitya Narasimhan藝術家
![路線圖手繪筆記](../../../translated_images/zh-TW/00-Roadmap.4905d6567dff47532b9bfb8e0b8980fc6b0b1292eebb24181c1a9753b33bc0f5.png)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。
Loading…
Cancel
Save