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

update-translations
localizeflow[bot] 6 days ago
parent 59632bdff7
commit 3f52543aa9

File diff suppressed because one or more lines are too long

@ -0,0 +1,282 @@
# 使用數據Python 和 Pandas 庫
| ![ 由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記 ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| 使用 Python - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ |
[![介紹影片](../../../../translated_images/zh-HK/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 和分形圖形趣味學習 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)
## 表格數據與 DataFrame
當我們討論關係型數據庫時,您已經接觸過表格數據。當您擁有大量數據,並且這些數據存儲在許多不同的關聯表中時,使用 SQL 來處理它們是非常合理的。然而,在許多情況下,我們擁有一個數據表,並需要對該數據獲得一些**理解**或**洞察**,例如分佈情況、值之間的相關性等。在數據科學中,經常需要對原始數據進行一些轉換,然後進行可視化。這兩個步驟都可以輕鬆地使用 Python 完成。
Python 中有兩個非常有用的庫可以幫助您處理表格數據:
* **[Pandas](https://pandas.pydata.org/)**:允許您操作所謂的 **DataFrame**,類似於關係型表格。您可以擁有命名的列,並對行、列以及整個 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 的入門代碼。我們在這裡僅概述一些示例,您可以查看完整的筆記本。
舉個例子:我們想分析我們冰淇淋店的銷售情況。讓我們生成一個銷售數據的 Series某段時間內每天售出的數量
```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-HK/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-HK/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-HK/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']` 的每個元素是否滿足條件。當布爾 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 中*樞軸表*的結果。假設我們想計算每個 `LenB` 值對應的列 `A` 的平均值。我們可以按 `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 和 DataFrames。然而數據通常以文本文件或 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-HK/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-HK/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 SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum) 調用,因此可以輕鬆地集成到你的數據探索工作流程中。
以下是一些探索圖片數據源的例子:
* 在博客文章 [如何在無需編碼的情況下學習數據科學](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) 中,我們探索 Instagram 照片,試圖了解什麼使人們更喜歡某張照片。我們首先使用 [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) 從圖片中提取盡可能多的信息,然後使用 [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) 建立可解釋的模型。
* 在 [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) 中,我們使用 [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) 提取活動照片中人物的情感,試圖了解什麼使人們感到快樂。
## 結論
無論你已經擁有結構化數據還是非結構化數據,使用 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)
* [從 Python 開始你的第一步](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) 在 [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum) 上的學習路徑
## 作業
[對上述挑戰進行更詳細的數據研究](assignment.md)
## 致謝
這節課由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。
---
**免責聲明**
本文件已使用人工智能翻譯服務 [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 項)任務,且可視化未能有效展示重點
**免責聲明**
本文件已使用人工智能翻譯服務 [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` 中的空值。(特別是在大型數據集上,通常更建議直接從分析中刪除缺失 [NA] 值,而不是以其他方式處理它們。)讓我們回到 `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)
---
**免責聲明**
此文件已使用人工智能翻譯服務 [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)中進行探索。
## 指引
使用本課程中的技術,提出建議以改進表單,使其能夠收集準確且一致的信息。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要信息,建議使用專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,20 @@
# 處理數據
![數據之愛](../../../translated_images/zh-HK/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) 用 ❤️ 編寫。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,213 @@
# 視覺化數量
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| 視覺化數量 - _Sketchnote by [@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 @@
# 折線圖、散點圖與柱狀圖
## 指引
在這節課中,你學習了如何使用折線圖、散點圖和柱狀圖來展示這個數據集中的有趣事實。在這次作業中,深入挖掘數據集,發現關於某種特定鳥類的事實。例如,創建一個筆記本,視覺化展示你能找到的所有關於雪雁的有趣數據。使用上述三種圖表,在你的筆記本中講述一個故事。
## 評分標準
優秀 | 合格 | 需要改進
--- | --- | -- |
筆記本包含良好的註解、完整的故事敘述以及吸引人的圖表 | 筆記本缺少其中一個元素 | 筆記本缺少其中兩個元素
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,130 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# 一起學習關於鳥類吧\n",
"\n",
"## 鳥類是什麼?\n",
"\n",
"鳥類是一種擁有羽毛的溫血動物。牠們是現存唯一擁有羽毛的動物群體。大多數鳥類都能飛行,但也有一些鳥類是不能飛的,例如企鵝和鴕鳥。\n",
"\n",
"[!NOTE] 鳥類的羽毛不僅用於飛行,還能提供保暖和保護。\n",
"\n",
"---\n",
"\n",
"## 鳥類的主要特徵\n",
"\n",
"1. **羽毛** \n",
" 羽毛是鳥類最顯著的特徵,能幫助牠們飛行、調節體溫以及進行求偶展示。\n",
"\n",
"2. **喙** \n",
" 鳥類沒有牙齒,牠們用喙來進食。喙的形狀和大小因鳥類的飲食習慣而異。\n",
"\n",
"3. **骨骼** \n",
" 鳥類的骨骼輕盈但堅固,這有助於減輕牠們的體重,方便飛行。\n",
"\n",
"4. **蛋** \n",
" 鳥類是卵生動物,牠們會產下有硬殼的蛋。\n",
"\n",
"[!TIP] 如果你想觀察鳥類,可以在清晨或黃昏時分去公園,這是牠們最活躍的時間。\n",
"\n",
"---\n",
"\n",
"## 鳥類的分類\n",
"\n",
"鳥類可以根據牠們的特徵和行為分為不同的類別。以下是一些常見的分類:\n",
"\n",
"- **猛禽** \n",
" 例如老鷹和貓頭鷹,牠們以鋒利的爪子和喙捕食其他動物。\n",
"\n",
"- **水鳥** \n",
" 例如鴨子和鵜鶘,牠們通常生活在水域附近,並擅長游泳。\n",
"\n",
"- **鳴禽** \n",
" 例如麻雀和畫眉,牠們以悅耳的鳴叫聲聞名。\n",
"\n",
"[!WARNING] 不要靠近猛禽的巢穴,牠們可能會變得具有攻擊性。\n",
"\n",
"---\n",
"\n",
"## 鳥類的生態重要性\n",
"\n",
"鳥類在生態系統中扮演著重要角色:\n",
"\n",
"- **傳播種子** \n",
" 許多鳥類通過進食水果並排泄種子來幫助植物繁殖。\n",
"\n",
"- **控制害蟲** \n",
" 一些鳥類以昆蟲為食,幫助控制害蟲數量。\n",
"\n",
"- **指標物種** \n",
" 鳥類的數量和健康狀況可以反映環境的健康程度。\n",
"\n",
"[!IMPORTANT] 保護鳥類及其棲息地對維持生態平衡至關重要。\n",
"\n",
"---\n",
"\n",
"## 如何幫助鳥類\n",
"\n",
"1. **提供食物和水源** \n",
" 在你的花園或陽台放置鳥食器和水盆,吸引鳥類。\n",
"\n",
"2. **種植本地植物** \n",
" 本地植物能提供鳥類所需的食物和棲息地。\n",
"\n",
"3. **避免使用化學品** \n",
" 農藥和化肥可能對鳥類有害,應盡量避免使用。\n",
"\n",
"4. **支持保育組織** \n",
" 捐款或參與志願活動,支持保護鳥類的行動。\n",
"\n",
"[!CAUTION] 不要餵食鳥類人類的食物,例如麵包,這可能對牠們的健康有害。\n",
"\n",
"---\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:48:03+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/notebook.ipynb",
"language_code": "hk"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,208 @@
# 視覺化數據分佈
|![由 [(@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'。以下圖表顯示了整個數據集範圍內最大體重的分佈。通過將數據數組分成較小的區間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: 易危
這些是基於文本的值,因此你需要進行轉換以創建直方圖。使用篩選後的數據框架,顯示其保育狀況以及最小翼展。你看到了什麼?
```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) 換句話說,異常值仍然會影響圖表的表現。
如果你想重新訪問第二個圖表中那條鋸齒狀的最大體重線,你可以通過這種方法將其很好地平滑化:
```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)
你還可以在一個圖表中映射多個變量的密度。比較鳥類的最大長度和最小長度與其保育狀況:
```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)
---
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,14 @@
# 運用你的技能
## 指引
到目前為止,你已經使用了明尼蘇達州的鳥類數據集,探索了有關鳥類數量和種群密度的信息。現在試試運用這些技巧,選擇一個不同的數據集,例如從 [Kaggle](https://www.kaggle.com/) 獲取的數據集。建立一個筆記本,講述這個數據集的故事,並確保在討論時使用直方圖。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
提供了一個包含有關此數據集的註解(包括其來源)的筆記本,並使用至少 5 個直方圖來探索數據的事實。 | 提供了一個包含不完整註解或有錯誤的筆記本。 | 提供了一個沒有註解且包含錯誤的筆記本。
**免責聲明**
本文件已使用人工智能翻譯服務 [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本文件已使用人工智能翻譯服務 [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:30+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/notebook.ipynb",
"language_code": "hk"
}
},
"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 試算表僅包含一種圖表 |
**免責聲明**
本文件已使用人工智能翻譯服務 [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:13+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/notebook.ipynb",
"language_code": "hk"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,179 @@
# 視覺化關係:關於蜂蜜 🍯
|![ 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年首次出現的毀滅性“蜂群崩潰症”CCDColony Collapse Disorderhttp://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);
```
![scatterplot 1](../../../../translated_images/zh-HK/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);
```
![scatterplot 2](../../../../translated_images/zh-HK/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);
```
您可以看到點的大小逐漸增大。
![scatterplot 3](../../../../translated_images/zh-HK/scatter3.3c160a3d1dcb36b37900ebb4cf97f34036f28ae2b7b8e6062766c7c1dfc00853.png)
這是否是一個簡單的供需問題?由於氣候變化和蜂群崩潰等因素,是否每年可供購買的蜂蜜減少,因此價格上漲?
為了探索數據集中某些變量之間的相關性,讓我們研究一些折線圖。
## 折線圖
問題:蜂蜜每磅價格是否每年都有明顯上漲?您可以通過創建一個單一折線圖來最容易地發現這一點:
```python
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
```
答案是的但在2003年左右有一些例外
![line chart 1](../../../../translated_images/zh-HK/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);
```
![line chart 2](../../../../translated_images/zh-HK/line2.a5b3493dc01058af6402e657aaa9ae1125fafb5e7d6630c777aa60f900a544e4.png)
答案:並不完全。如果您查看總生產量,實際上在那一年似乎有所增加,儘管總體而言蜂蜜的生產量在這些年中呈下降趨勢。
問題在這種情況下2003年蜂蜜價格的激增可能是什麼原因
為了探索這一點,您可以使用 Facet Grid。
## Facet Grids
Facet Grids 將數據集的一個方面(在我們的例子中,您可以選擇“年份”,以避免生成過多的 Facets。Seaborn 可以為您選擇的 x 和 y 坐標生成每個 Facet 的圖表方便比較。2003年是否在這種比較中脫穎而出
繼續使用 Seaborn 的 `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"
)
```
在這個視覺化中,您可以比較每年的每群產量和蜂群數量,並將列的 wrap 設置為3
![facet grid](../../../../translated_images/zh-HK/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();
```
![superimposed plots](../../../../translated_images/zh-HK/dual-line.a4c28ce659603fab2c003f4df816733df2bf41d1facb7de27989ec9afbf01b33.png)
雖然在2003年沒有明顯的異常但這讓我們以一個稍微樂觀的結論結束本課儘管蜂群數量總體上在下降但蜂群數量正在穩定即使每群產量在減少。
加油,蜜蜂們,加油!
🐝❤️
## 🚀 挑戰
在本課中,您學到了更多關於散點圖和折線圖的其他用途,包括 Facet Grids。挑戰自己使用不同的數據集創建 Facet Grid也許是您之前使用過的數據集。注意它們的生成時間以及如何小心選擇需要繪製的 Facets 數量。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/23)
## 回顧與自學
折線圖可以簡單也可以非常複雜。閱讀 [Seaborn 文檔](https://seaborn.pydata.org/generated/seaborn.lineplot.html) 中的各種構建方法。嘗試使用文檔中列出的其他方法來增強您在本課中構建的折線圖。
## 作業
[深入蜂巢](assignment.md)
---
**免責聲明**
此文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,14 @@
# 探索蜂巢
## 指引
在這節課中,你開始研究一個有關蜜蜂及其蜂蜜生產的數據集,涵蓋了一段時間內蜂群數量整體下降的情況。深入分析這個數據集,建立一個筆記本,講述蜂群健康狀況的故事,按州和年份進行分析。你是否在這個數據集中發現了任何有趣的事情?
## 評分標準
| 卓越表現 | 合格表現 | 需要改進 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------- |
| 提供了一個筆記本,包含至少三個不同的圖表,註解展示數據集的各個方面,按州和年份進行分析 | 筆記本缺少其中一個元素 | 筆記本缺少其中兩個元素 |
**免責聲明**
本文件已使用人工智能翻譯服務 [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本文件已使用人工智能翻譯服務 [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:58:08+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/notebook.ipynb",
"language_code": "hk"
}
},
"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 的惡毒、道德敗壞的社交操縱。他們最終都遭遇了悲劇,但在此之前造成了巨大的社會損害。小說以一系列信件展開,這些信件寫給他們圈子中的各種人,策劃復仇或僅僅是製造麻煩。創建這些信件的視覺化,探索敘事中的主要角色。
你將完成一個網頁應用,顯示這個社交網絡的動畫視圖。它使用了一個庫,該庫旨在使用 Vue.js 和 D3 創建[網絡視覺化](https://github.com/emiliorizzo/vue-d3-network)。當應用運行時,你可以在屏幕上拖動節點來重新排列數據。
![危險關係](../../../../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)
---
**免責聲明**
此文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議使用專業的人工作翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。

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

@ -0,0 +1,221 @@
# 視覺化數量
|![由 [(@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 控制台並導入數據集。
> 注意:數據集存儲在此倉庫的 `/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-HK/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-HK/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-HK/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-HK/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` 套件繪製條形圖並指定不同類別的顏色和標籤。
![堆疊條形圖](../../../../../translated_images/zh-HK/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()` 繪製水平條形圖。
![類別-長度](../../../../../translated_images/zh-HK/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` 數據,然後繪製條形圖。
![比較數據](../../../../../translated_images/zh-HK/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()
```
![疊加值](../../../../../translated_images/zh-HK/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,174 @@
# 視覺化分佈
|![由 [(@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-HK/max-length-per-order.e5b283d952c78c12b091307c5d3cf67132dad6fefe80a073353b9dc5c2bd3eb8.png)
這提供了每個鳥類目身體長度分佈的概覽,但這並不是顯示真實分佈的最佳方式。這個任務通常通過創建直方圖來完成。
## 使用直方圖
`ggplot2` 提供了非常好的方法來使用直方圖視覺化數據分佈。這種類型的圖表類似於條形圖,通過條形的升降可以看到分佈情況。要構建直方圖,你需要數值數據。構建直方圖時,可以將圖表類型定義為 'hist'。這個圖表顯示了整個數據集範圍內最大體重的分佈。通過將數據分為更小的區間bins它可以顯示數據值的分佈
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
geom_histogram(bins=10)+ylab('Frequency')
```
![整個數據集的分佈](../../../../../translated_images/zh-HK/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-HK/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-HK/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-HK/2d-plot.c504786f439bd7ebceebf2465c70ca3b124103e06c7ff7214bf24e26f7aec21e.png)
直方圖對於數值數據效果很好。如果需要查看基於文本數據的分佈該怎麼辦?
## 使用文本數據探索數據集的分佈
這個數據集還包括關於鳥類分類、屬、種、科以及保育狀況的良好信息。讓我們深入了解這些保育信息。鳥類根據其保育狀況的分佈是什麼樣的?
> ✅ 在數據集中,使用了一些縮寫來描述保育狀況。這些縮寫來自 [IUCN 紅色名錄分類](https://www.iucnredlist.org/),該組織記錄了物種的狀況。
>
> - CR: 極危
> - EN: 瀕危
> - EX: 滅絕
> - LC: 無危
> - NT: 近危
> - VU: 易危
這些是基於文本的值,因此你需要進行轉換以創建直方圖。使用篩選後的 `filteredBirds` 數據框,顯示其保育狀況與最小翼展。你看到了什麼?
```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-HK/wingspan-conservation-collation.4024e9aa6910866aa82f0c6cb6a6b4b925bd10079e6b0ef8f92eefa5a6792f76.png)
最小翼展與保育狀況之間似乎沒有明顯的相關性。使用這種方法測試數據集的其他元素。你也可以嘗試不同的篩選條件。你發現了任何相關性嗎?
## 密度圖
你可能已經注意到,我們目前看到的直方圖是“階梯式”的,並未以平滑的弧線呈現。若要顯示更平滑的密度圖,可以嘗試密度圖。
現在讓我們來使用密度圖!
```r
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
geom_density()
```
![密度圖](../../../../../translated_images/zh-HK/density-plot.675ccf865b76c690487fb7f69420a8444a3515f03bad5482886232d4330f5c85.png)
你可以看到這個圖表反映了之前的最小翼展數據,只是更平滑了一些。如果你想重新查看第二個圖表中那條不平滑的最大體重線,可以使用這種方法將其非常平滑地重現:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density()
```
![體重密度](../../../../../translated_images/zh-HK/bodymass-smooth.d31ce526d82b0a1f19a073815dea28ecfbe58145ec5337e4ef7e8cdac81120b3.png)
如果你想要一條平滑但不過於平滑的線,可以編輯 `adjust` 參數:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density(adjust = 1/5)
```
![較少平滑的體重線](../../../../../translated_images/zh-HK/less-smooth-bodymass.10f4db8b683cc17d17b2d33f22405413142004467a1493d416608dafecfdee23.png)
✅ 閱讀此類圖表可用的參數並進行實驗!
這種類型的圖表提供了非常具有解釋性的視覺化。例如,只需幾行代碼,你就可以顯示每個鳥類目最大體重的密度:
```r
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
geom_density(alpha=0.5)
```
![每目體重密度](../../../../../translated_images/zh-HK/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 個直方圖來發掘數據的相關信息。 | 提供了一個腳本,但註解不完整或存在錯誤。 | 提供了一個腳本,但缺乏註解且包含錯誤。
**免責聲明**
本文件已使用人工智能翻譯服務 [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-HK/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-HK/donut-wb.34e6fb275da9d834c2205145e39a3de9b6878191dcdba6f7a9e85f4b520449bc.png)
這段代碼使用了兩個庫——ggplot2 和 webr。使用 webr 庫的 PieDonut 函數,我們可以輕鬆創建甜甜圈圖!
在 R 中僅使用 ggplot2 庫也可以製作甜甜圈圖。你可以在[這裡](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-HK/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)
**免責聲明**
本文件已使用人工智能翻譯服務 [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年首次出現的毀滅性“蜂群崩潰症”CCDColony Collapse Disorderhttp://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")
```
![scatterplot 1](../../../../../translated_images/zh-HK/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))
```
![scatterplot 2](../../../../../translated_images/zh-HK/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))
```
您可以看到點的大小逐漸增大。
![scatterplot 3](../../../../../translated_images/zh-HK/scatter3.722d21e6f20b3ea2e18339bb9b10d75906126715eb7d5fdc88fe74dcb6d7066a.png)
這是否是一個簡單的供需問題?由於氣候變化和蜂群崩潰等因素,是否每年可供購買的蜂蜜減少,導致價格上漲?
為了探索數據集中某些變量之間的相關性,讓我們研究一些折線圖。
## 折線圖
問題:蜂蜜每磅價格是否每年明顯上漲?您可以通過創建一個單一折線圖來最簡單地發現這一點:
```r
qplot(honey$year,honey$priceperlb, geom='smooth', span =0.5, xlab = "year",ylab = "priceperlb")
```
答案是的但在2003年左右有一些例外
![line chart 1](../../../../../translated_images/zh-HK/line1.299b576fbb2a59e60a59e7130030f59836891f90302be084e4e8d14da0562e2a.png)
問題那麼在2003年我們是否也能看到蜂蜜供應的激增如果您查看每年的總生產量呢
```python
qplot(honey$year,honey$totalprod, geom='smooth', span =0.5, xlab = "year",ylab = "totalprod")
```
![line chart 2](../../../../../translated_images/zh-HK/line2.3b18fcda7176ceba5b6689eaaabb817d49c965e986f11cac1ae3f424030c34d8.png)
答案:並不完全。如果您查看總生產量,實際上在那一年似乎有所增加,儘管總體而言蜂蜜的生產量在這些年中呈下降趨勢。
問題在這種情況下2003年蜂蜜價格的激增可能是什麼原因
為了探索這一點,您可以使用分面網格。
## 分面網格
分面網格可以選擇數據集的一個方面在我們的例子中您可以選擇“年份”以避免生成過多的分面。Seaborn 可以根據您選擇的 x 和 y 坐標為每個分面生成一個圖表方便進行視覺比較。2003年是否在這種比較中顯得突出
使用 [ggplot2 的文檔](https://ggplot2.tidyverse.org/reference/facet_wrap.html)推薦的 `facet_wrap` 創建分面網格。
```r
ggplot(honey, aes(x=yieldpercol, y = numcol,group = 1)) +
geom_line() + facet_wrap(vars(year))
```
在此視覺化中您可以比較每群產量和蜂群數量每年每州的變化並將列數設置為3
![facet grid](../../../../../translated_images/zh-HK/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)
```
![superimposed plots](../../../../../translated_images/zh-HK/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)
**免責聲明**
本文件已使用人工智能翻譯服務 [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 的《How Charts Lie》](../../../../../translated_images/zh-HK/tornado.2880ffc7f135f82b5e5328624799010abefd1080ae4b7ecacbdc7d792f1d8849.png)](https://www.youtube.com/watch?v=oX74Nge8Wkw "How charts lie")
> 🎥 點擊上方圖片觀看關於誤導性圖表的會議演講
這張圖表反轉了 X 軸,根據日期顯示了與事實相反的內容:
![糟糕的圖表 1](../../../../../translated_images/zh-HK/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-HK/bad-chart-2.62edf4d2f30f4e519f5ef50c07ce686e27b0196a364febf9a4d98eecd21f9f60.jpg)
這個臭名昭著的例子使用顏色和反轉的 Y 軸來誤導:原本應該得出槍支友好立法通過後槍支死亡率激增的結論,卻讓人誤以為情況正好相反:
![糟糕的圖表 3](../../../../../translated_images/zh-HK/bad-chart-3.e201e2e915a230bc2cde289110604ec9abeb89be510bd82665bebc1228258972.jpg)
這張奇怪的圖表展示了比例如何被操控,效果令人捧腹:
![糟糕的圖表 4](../../../../../translated_images/zh-HK/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-HK/3d.db1734c151eee87d924989306a00e23f8cddac6a0aab122852ece220e9448def.png)
## 動畫和 3D 圖表展示
如今一些最好的數據視覺化是動畫化的。Shirley Wu 使用 D3 創作了令人驚嘆的作品,例如「[電影之花](http://bl.ocks.org/sxywu/raw/d612c6c653fb8b4d7ff3d422be164a5d/)」每朵花都是一部電影的視覺化。另一個例子是《衛報》的「Bussed Out」這是一個結合 Greensock 和 D3 的視覺化與滾動敘事文章格式的互動體驗,展示了紐約市如何通過將無家可歸者送出城市來處理其無家可歸問題。
![Bussed Out](../../../../../translated_images/zh-HK/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 的惡毒、道德敗壞的社交手段。兩人最終都遭遇了悲劇,但在此之前造成了大量社會損害。小說以寫給圈內各人的信件形式展開,策劃復仇或僅僅是製造麻煩。創建這些信件的視覺化,探索敘事中的主要角色,並以視覺方式呈現。
你將完成一個網頁應用,展示這個社交網絡的動畫視圖。它使用了一個庫來創建[網絡視覺化](https://github.com/emiliorizzo/vue-d3-network),基於 Vue.js 和 D3。當應用運行時你可以在屏幕上拖動節點重新排列數據。
![危險關係](../../../../../translated_images/zh-HK/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)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,31 @@
# 視覺化
![一隻蜜蜂停在薰衣草花上](../../../translated_images/zh-HK/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 修訂。該數據集包括描述假設樣本,涵蓋 Agaricus 和 Lepiota 家族中 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 @@
# 數據科學生命周期簡介
|![ 由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記 ](../../sketchnotes/14-DataScience-Lifecycle.png)|
|:---:|
| 數據科學生命周期簡介 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 繪製_ |
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/26)
到目前為止,你可能已經意識到數據科學是一個過程。這個過程可以分為五個階段:
- 捕獲
- 處理
- 分析
- 溝通
- 維護
本課程將重點介紹生命周期中的三個部分:捕獲、處理和維護。
![數據科學生命周期圖](../../../../translated_images/zh-HK/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-HK/tdsp-lifecycle2.e19029d598e2e73d5ef8a4b98837d688ec6044fe332c905d4dbb69eb6d5c1d96.png) | ![數據科學過程聯盟圖片](../../../../translated_images/zh-HK/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)
---
**免責聲明**
此文件已使用人工智能翻譯服務 [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)。識別一個可能有助於回答客戶問題的額外數據集。
- 撰寫三個問題,向客戶提出以獲得更多澄清並更好地理解問題。
參考[數據集字典](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)以獲取更多關於數據的信息。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
**免責聲明**
本文件已使用人工智能翻譯服務 [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:34+00:00",
"source_file": "4-Data-Science-Lifecycle/14-Introduction/notebook.ipynb",
"language_code": "hk"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,54 @@
# 數據科學生命周期:分析
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/15-Analyzing.png)|
|:---:|
| 數據科學生命周期:分析 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 繪製_ |
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/28)
在數據生命周期中的分析階段確認數據是否能回答所提出的問題或解決特定問題。這一步驟還可以用來確認模型是否正確地解決了這些問題。本課重點介紹探索性數據分析Exploratory Data Analysis簡稱 EDA這是一種用於定義數據特徵和關係的技術並可用於為建模做準備。
我們將使用來自 [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)
---
**免責聲明**
此文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,154 @@
{
"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",
"source": [
"# 使用以下單元格進行您的探索性數據分析\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**免責聲明** \n本文件已使用人工智能翻譯服務 [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:34:06+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/assignment.ipynb",
"language_code": "hk"
}
},
"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)以獲取更多關於數據的信息。
使用本課中的一些技術,在筆記本中進行自己的探索性數據分析(如有需要可新增單元格),並回答以下問題:
- 數據中還有哪些其他因素可能影響小費金額?
- 哪些欄位最有可能不需要用來回答客戶的問題?
- 根據目前提供的數據,是否有任何證據顯示季節性的小費行為?
## 評分標準
優秀 | 合格 | 需要改進
--- | --- | ---
**免責聲明**
本文件已使用人工智能翻譯服務 [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:56+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb",
"language_code": "hk"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,213 @@
# 數據科學生命周期:溝通
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/16-Communicating.png)|
|:---:|
| 數據科學生命周期:溝通 - _手繪筆記由 [@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%。Emerson 還發現如果用戶提交的投訴在48小時內未得到回應他們給應用打1星或2星評分的可能性會增加32%。
經過研究Emerson 提出了幾個解決方案來解決這個問題。他安排了一個30分鐘的會議與公司內的3位領導溝通數據和建議的解決方案。
在這次會議中Emerson 的目標是讓公司領導理解以下兩個解決方案可以提高應用的評分,這可能會轉化為更高的收入。
**解決方案1.** 雇用客服人員在週末工作
**解決方案2.** 購買一個新的客服工單系統,讓客服人員能夠輕鬆識別哪些投訴在隊列中等待的時間最長——以便他們能夠優先處理。
在會議中Emerson 花了5分鐘解釋為什麼應用商店中的低評分會帶來負面影響10分鐘解釋研究過程以及如何識別趨勢10分鐘分析一些近期的用戶投訴最後5分鐘簡略介紹了兩個潛在的解決方案。
Emerson在這次會議中的溝通方式是否有效
在會議中一位公司主管只專注於Emerson所提到的10分鐘客戶投訴內容。會議結束後這些投訴成為該主管唯一記得的內容。另一位公司主管主要關注Emerson描述的研究過程。第三位公司主管記得Emerson提出的解決方案但不確定這些方案如何實施。
在上述情況中可以看到Emerson希望公司主管們從會議中獲得的重點與他們實際記住的內容之間存在顯著差距。以下是Emerson可以考慮的另一種方法。
Emerson如何改進這種方法
背景、衝突、高潮、結尾、結論
**背景** - Emerson可以花前5分鐘介紹整個情況確保公司主管們了解問題如何影響公司關鍵指標例如收入。
可以這樣表述「目前我們的應用程式在應用商店的評分是2.5。應用商店的評分對應用商店優化至關重要,這會影響有多少用戶在搜索中看到我們的應用,以及潛在用戶如何看待我們的應用。而且,當然,我們的用戶數量直接與收入掛鉤。」
**衝突** Emerson接著可以花5分鐘左右談論衝突。
可以這樣表述「用戶在週末提交的投訴和錯誤報告多了42%。提交投訴後48小時內未得到回覆的客戶給我們的應用程式評分超過2的可能性降低了32%。將我們的應用程式評分提高到4將提升20-30%的可見度我預計這將使收入增加10%。」當然Emerson應該準備好為這些數據提供合理的解釋。
**高潮** 在鋪墊好基礎後Emerson可以花5分鐘左右進入高潮部分。
Emerson可以介紹提出的解決方案說明這些方案如何解決所列出的問題如何融入現有的工作流程解決方案的成本是多少投資回報率ROI如何甚至可以展示一些解決方案實施後的截圖或線框圖。Emerson還可以分享一些用戶的感言例如那些投訴超過48小時才得到回覆的用戶的感言甚至可以分享公司內部客服代表對現有工單系統的評論。
**結尾** 接下來Emerson可以花5分鐘重申公司面臨的問題重溫提出的解決方案並回顧為什麼這些方案是正確的選擇。
**結論** 由於這是一場與少數利益相關者的會議會進行雙向溝通Emerson可以計劃留出10分鐘的時間回答問題確保主管們在會議結束前能夠澄清任何困惑的地方。
如果Emerson採用方法#2主管們更有可能從會議中獲得Emerson希望他們記住的重點——即投訴和錯誤的處理方式可以改進並且有兩個解決方案可以實施以實現這一改進。這種方法將更有效地傳達Emerson希望溝通的數據和故事。
# 結論
### 主要要點摘要
- 溝通是傳遞或交換信息。
- 在溝通數據時,目標不應僅僅是向觀眾傳遞數字,而是要傳達一個由數據支持的故事。
- 溝通有兩種類型:單向溝通(信息傳遞無需回應)和雙向溝通(信息來回交流)。
- 有許多策略可以用來講述數據故事,我們討論了以下五種策略:
- 了解你的觀眾、媒介和溝通方式
- 從結果開始思考
- 像講述真正的故事一樣進行
- 使用有意義的詞語和短語
- 善用情感
### 自學推薦資源
[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)
---
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,15 @@
# 講述一個故事
## 指引
數據科學的核心在於講故事。選擇任何一個數據集,撰寫一篇短文,講述你可以從中挖掘出的故事。你希望你的數據集能揭示什麼?如果它的揭示結果令人困擾,你會怎樣處理?如果你的數據無法輕易解開它的秘密,你又會怎樣應對?思考你的數據集可能呈現的情境,並將它們記錄下來。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
一篇完整的文章以 .doc 格式呈現,清楚解釋、記錄並標註數據集,並以數據中的詳細例子講述一個連貫的故事。| 一篇較短的文章,細節較少 | 文章在上述某些細節方面有所欠缺。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,19 @@
# 數據科學生命周期
![communication](../../../translated_images/zh-HK/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) 用 ❤️ 編寫。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,107 @@
# 雲端中的數據科學簡介
|![ 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
* 創建一個流分析作業
* 指定作業輸入和查詢
* 創建輸出接收器並指定作業輸出
* 啟動作業
查看完整過程,請參考[文檔](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)
---
**免責聲明**
此文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議使用專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。

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

@ -0,0 +1,339 @@
# 雲端中的數據科學:「低代碼/無代碼」方式
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/18-DataScience-Cloud.png)|
|:---:|
| 雲端中的數據科學:低代碼 - _Sketchnote by [@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**Azure Machine Learning 的網頁入口提供低代碼和無代碼選項用於模型訓練、部署、自動化、跟蹤和資產管理。Studio 與 Azure Machine Learning SDK 集成,提供無縫體驗。
- **Jupyter Notebooks**:快速原型設計和測試 ML 模型。
- **Azure Machine Learning Designer**:允許通過拖放模塊來構建實驗,並在低代碼環境中部署管道。
- **自動化機器學習界面 (AutoML)**:自動化機器學習模型開發的迭代任務,能以高效和高生產力的方式構建 ML 模型,同時保持模型質量。
- **數據標籤**:一種輔助 ML 工具,用於自動標籤數據。
- **Visual Studio Code 的機器學習擴展**:提供完整的開發環境,用於構建和管理 ML 項目。
- **機器學習 CLI**:提供命令行管理 Azure ML 資源的功能。
- **與開源框架集成**:如 PyTorch、TensorFlow、Scikit-learn 等,用於訓練、部署和管理端到端的機器學習過程。
- **MLflow**:一個開源庫,用於管理機器學習實驗的生命周期。**MLFlow Tracking** 是 MLflow 的一個組件,用於記錄和跟蹤訓練運行的指標和模型工件,無論實驗環境如何。
### 1.2 心臟衰竭預測項目:
毫無疑問,製作和構建項目是檢驗技能和知識的最佳方式。在本課程中,我們將探索兩種不同的方式來構建一個心臟衰竭攻擊預測的數據科學項目,分別是通過低代碼/無代碼方式和通過 Azure ML SDK如下圖所示
![project-schema](../../../../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 訂閱將因數據存儲而產生少量費用,只要 Azure Machine Learning 工作區存在於您的訂閱中。因此,我們建議在不再使用工作區時刪除它。
1. 使用與您的 Azure 訂閱相關聯的 Microsoft 賬戶登錄 [Azure 入口網站](https://ms.portal.azure.com/)。
2. 選擇 **+創建資源**
![workspace-1](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-1.PNG)
搜索 Machine Learning 並選擇 Machine Learning 磚塊
![workspace-2](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-2.PNG)
點擊創建按鈕
![workspace-3](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-3.PNG)
按以下方式填寫設置:
- 訂閱:您的 Azure 訂閱
- 資源組:創建或選擇一個資源組
- 工作區名稱:輸入工作區的唯一名稱
- 地區:選擇離您最近的地理區域
- 存儲帳戶:注意將為您的工作區創建的默認新存儲帳戶
- 密鑰保管庫:注意將為您的工作區創建的默認新密鑰保管庫
- 應用洞察:注意將為您的工作區創建的默認新應用洞察資源
- 容器註冊表:無(第一次將模型部署到容器時會自動創建)
![workspace-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 工作區。
![workspace-5](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-5.PNG)
5. 在 Azure Machine Learning Studio 中,切換左上角的 ☰ 圖標以查看界面中的各個頁面。您可以使用這些頁面來管理工作區中的資源。
![workspace-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)
---
**免責聲明**
此文件已使用人工智能翻譯服務 [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 訓練的最佳模型並成功使用了它。 |
**免責聲明**
本文件已使用人工智能翻譯服務 [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 - _Sketchnote by [@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
數據科學家和人工智能開發者使用 Azure Machine Learning SDK 與 Azure Machine Learning 服務一起構建和運行機器學習工作流。您可以在任何 Python 環境中與該服務交互,包括 Jupyter Notebooks、Visual Studio Code 或您喜愛的 Python IDE。
SDK 的主要功能包括:
- 探索、準備和管理機器學習實驗中使用的數據集的生命周期。
- 管理雲端資源以進行監控、日誌記錄和組織機器學習實驗。
- 在本地或使用雲端資源(包括 GPU 加速的模型訓練)訓練模型。
- 使用自動化機器學習,該功能接受配置參數和訓練數據,並自動迭代算法和超參數設置以找到最佳模型進行預測。
- 部署網絡服務,將訓練好的模型轉換為可在任何應用程序中使用的 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 完成相同的任務。
![項目架構](../../../../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/) 中,進入計算菜單,您將看到不同的計算資源。
![計算實例-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 按鈕。
![筆記本-1](../../../../5-Data-Science-In-Cloud/19-Azure/images/notebook-1.PNG)
3. 這將在瀏覽器中打開一個新的標籤頁,顯示您的 Jupyter Notebook 實例。點擊 "New" 按鈕創建筆記本。
![筆記本-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 容器實例上的網絡服務端點的機器學習模型。部署的服務由模型、腳本和相關文件創建。生成的網絡服務是一個負載均衡的 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 使用該模型。 |
**免責聲明**
本文件已使用人工智能翻譯服務 [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此文件已使用人工智能翻譯服務 [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:44:56+00:00",
"source_file": "5-Data-Science-In-Cloud/19-Azure/notebook.ipynb",
"language_code": "hk"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,23 @@
# 雲端中的數據科學
![cloud-picture](../../../translated_images/zh-HK/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-HK/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) 帶著 ☁️ 和 💕 編寫。
心臟衰竭預測項目的數據來源於 [Kaggle](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data) 上的 [Larxel](https://www.kaggle.com/andrewmvd)。該數據根據 [Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/) 授權。
**免責聲明**
本文件已使用人工智能翻譯服務 [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-HK/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))或使用工具(如 [Scrapy](https://scrapy.org/))抓取網頁(例如 [Project Gutenberg](https://www.gutenberg.org/files/12242/12242-h/12242-h.htm))。
* [`數據清理`](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) - 展示可持續性洞察的使用案例和工具。
**Planetary Computer Project 目前處於預覽階段(截至 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/) 等。
## 作業
[探索 Planetary Computer 數據集](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-HK/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) 用 ❤️ 撰寫
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,366 @@
# AGENTS.md
## 項目概覽
《Data Science for Beginners》是一個由 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 開始,共 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**:在雲中啟動筆記本(如果已配置)
### 課程內容指南
- 每節課是獨立的,但建立在之前的概念之上
- 課前測驗測試先前知識
- 課後測驗加強學習
- 作業提供實踐練習
- 手繪筆記提供視覺摘要
### 常見問題排查
**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)
**免責聲明**
本文件已使用人工智能翻譯服務 [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"
```
撰寫清晰的提交訊息:
- 使用現在時態(例如 "Add feature" 而非 "Added feature"
- 使用命令式語氣(例如 "Move cursor to..." 而非 "Moves cursor to..."
- 第一行限制在 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
```
````
- 為圖片添加替代文字:`![Alt text](../../translated_images/zh-HK/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)
## 感謝!
您的貢獻使這個課程對所有人都更好。感謝您花時間貢獻!
---
**免責聲明**
本文件已使用人工智能翻譯服務 [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. 創建一個新問題,並詳細描述您的問題
---
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,251 @@
# Data Science for Beginners - 一個課程大綱
[![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 Cloud Advocates 很高興呈獻一個長達 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 Student Ambassador](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-HK/00-Title.8af36cd35da1ac55.webp)|
|:---:|
| Data Science For Beginners - _手繪筆記由 [@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)](./README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/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 多種語言的翻譯,這大幅增加下載大小。若想不含翻譯檔案克隆,請使用 sparse checkout
> ```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 Learn with AI 系列,詳細瞭解並於 2025 年 9 月 18 日至 30 日加入我們,詳情見 [Learn with AI Series](https://aka.ms/learnwithai/discord)。你將獲得如何使用 GitHub Copilot 進行數據科學的技巧與竅門。
![Learn with AI series](../../translated_images/zh-HK/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. 從第 1 課開始,依序進行
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 "宣傳短片")
**動圖由** [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-HK/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 遠端 - 容器
請依照以下步驟,使用本機電腦與 VSCode 以及 VS Code Remote - Containers 擴充功能,在容器中開啟此儲存庫:
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 for Beginners](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 / 代理人
[![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)
---
### 生成式人工智能系列
[![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) 的原則。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,13 @@
# 支援
## 如何提交問題和獲取幫助
此項目使用 GitHub Issues 來追蹤錯誤和功能請求。在提交新問題之前,請先搜尋現有問題以避免重複。對於新問題,請將您的錯誤或功能請求提交為一個新問題。
如需有關使用此項目的幫助和問題,請提交一個問題。
## Microsoft 支援政策
對於此存儲庫的支援僅限於上述列出的資源。
**免責聲明**
本文件已使用人工智能翻譯服務 [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
```
### Cell 無法執行
**問題:** Cell 停留在 "In [*]" 或執行時間過長
**解決方法:**
1. **中斷核心**:點擊 "Interrupt" 按鈕或按 `I, I`
2. **重啟核心**Kernel 菜單 → 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. **重啟核心並清除輸出**
- Kernel → 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) - 專案概述
---
**免責聲明**
本文件已使用人工智能翻譯服務 [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 for Beginners](https://aka.ms/ai-beginners)
- [ML for Beginners](https://aka.ms/ml-beginners)
- [Web Dev for Beginners](https://aka.ms/webdev-beginners)
- [Generative AI for Beginners](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)
**免責聲明**
本文件已使用人工智能翻譯服務 [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 此 repo。你需要為每一課建立一個 repo因此需要將每個文件夾提取到一個獨立的 repo。這樣[GitHub Classroom](https://classroom.github.com/classrooms) 就可以分別處理每一課。
這些[完整指引](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/)可以幫助你了解如何設置你的課堂。
## 按原樣使用此 repo
如果你希望直接使用目前的 repo而不使用 GitHub Classroom也可以做到。你需要與學生溝通告訴他們一起學習哪一課。
在網上教學形式(例如 Zoom、Teams 或其他平台)中,你可以為測驗設置分組討論室,並指導學生準備學習。然後邀請學生參加測驗,並在指定時間以 "issues" 的形式提交答案。如果你希望學生公開合作完成作業,也可以採用相同的方式。
如果你更喜歡私密的形式,可以要求學生逐課 fork 課程到他們自己的 GitHub 私人 repo並授予你訪問權限。然後他們可以私下完成測驗和作業並通過 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) 到你的本地機器,然後在本地 repo 的根文件夾中輸入 `docsify serve`。網站將在本地端口 3000 上運行:`localhost:3000`。
課程的離線友好版本將以獨立網頁形式打開https://localhost:3000
課程分為 6 部分:
- 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藝術家
![roadmap sketchnote](../../../translated_images/zh-HK/00-Roadmap.4905d6567dff47532b9bfb8e0b8980fc6b0b1292eebb24181c1a9753b33bc0f5.png)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,422 @@
{
"1-Introduction/01-defining-data-science/README.md": {
"original_hash": "43212cc1ac137b7bb1dcfb37ca06b0f4",
"translation_date": "2025-10-25T18:39:24+00:00",
"source_file": "1-Introduction/01-defining-data-science/README.md",
"language_code": "zh-MO"
},
"1-Introduction/01-defining-data-science/assignment.md": {
"original_hash": "4e0f1773b9bee1be3b28f9fe2c71b3de",
"translation_date": "2025-08-27T09:03:46+00:00",
"source_file": "1-Introduction/01-defining-data-science/assignment.md",
"language_code": "zh-MO"
},
"1-Introduction/01-defining-data-science/solution/assignment.md": {
"original_hash": "a8f79b9c0484c35b4f26e8aec7fc4d56",
"translation_date": "2025-08-27T09:04:54+00:00",
"source_file": "1-Introduction/01-defining-data-science/solution/assignment.md",
"language_code": "zh-MO"
},
"1-Introduction/02-ethics/README.md": {
"original_hash": "58860ce9a4b8a564003d2752f7c72851",
"translation_date": "2025-10-03T16:07:36+00:00",
"source_file": "1-Introduction/02-ethics/README.md",
"language_code": "zh-MO"
},
"1-Introduction/02-ethics/assignment.md": {
"original_hash": "b588c0fc73014f52520c666efc3e0cc3",
"translation_date": "2025-08-27T08:56:31+00:00",
"source_file": "1-Introduction/02-ethics/assignment.md",
"language_code": "zh-MO"
},
"1-Introduction/03-defining-data/README.md": {
"original_hash": "12339119c0165da569a93ddba05f9339",
"translation_date": "2025-09-06T07:03:13+00:00",
"source_file": "1-Introduction/03-defining-data/README.md",
"language_code": "zh-MO"
},
"1-Introduction/03-defining-data/assignment.md": {
"original_hash": "2e5cacb967c1e9dfd07809bfc441a0b4",
"translation_date": "2025-08-27T09:08:29+00:00",
"source_file": "1-Introduction/03-defining-data/assignment.md",
"language_code": "zh-MO"
},
"1-Introduction/04-stats-and-probability/README.md": {
"original_hash": "ce95884566a74db72572cd51f0cb25ad",
"translation_date": "2025-09-06T13:03:40+00:00",
"source_file": "1-Introduction/04-stats-and-probability/README.md",
"language_code": "zh-MO"
},
"1-Introduction/04-stats-and-probability/assignment.md": {
"original_hash": "01d1b493e8b51a6ebb42524f6b1bcfff",
"translation_date": "2025-08-27T09:17:18+00:00",
"source_file": "1-Introduction/04-stats-and-probability/assignment.md",
"language_code": "zh-MO"
},
"1-Introduction/README.md": {
"original_hash": "696a8474a01054281704cbfb09148949",
"translation_date": "2025-08-27T08:43:53+00:00",
"source_file": "1-Introduction/README.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/05-relational-databases/README.md": {
"original_hash": "11739c7b40e7c6b16ad29e3df4e65862",
"translation_date": "2025-12-19T10:43:38+00:00",
"source_file": "2-Working-With-Data/05-relational-databases/README.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/05-relational-databases/assignment.md": {
"original_hash": "25b37acdfb2452917c1aa2e2ca44317a",
"translation_date": "2025-10-24T09:53:08+00:00",
"source_file": "2-Working-With-Data/05-relational-databases/assignment.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/06-non-relational/README.md": {
"original_hash": "c182e87f9f80be7e7cdffc7b40bbfccf",
"translation_date": "2025-09-06T06:53:29+00:00",
"source_file": "2-Working-With-Data/06-non-relational/README.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/06-non-relational/assignment.md": {
"original_hash": "f824bfdb8b12d33293913f76f5c787c5",
"translation_date": "2025-08-27T08:41:51+00:00",
"source_file": "2-Working-With-Data/06-non-relational/assignment.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/07-python/README.md": {
"original_hash": "7bfec050f4717dcc2dfd028aca9d21f3",
"translation_date": "2025-09-06T15:27:16+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/07-python/assignment.md": {
"original_hash": "dc8f035ce92e4eaa078ab19caa68267a",
"translation_date": "2025-08-27T08:37:14+00:00",
"source_file": "2-Working-With-Data/07-python/assignment.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/08-data-preparation/README.md": {
"original_hash": "1b560955ff39a2bcf2a049fce474a951",
"translation_date": "2025-09-06T06:55:21+00:00",
"source_file": "2-Working-With-Data/08-data-preparation/README.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/08-data-preparation/assignment.md": {
"original_hash": "f9d5a7275e046223fa6474477674b810",
"translation_date": "2025-08-27T08:29:52+00:00",
"source_file": "2-Working-With-Data/08-data-preparation/assignment.md",
"language_code": "zh-MO"
},
"2-Working-With-Data/README.md": {
"original_hash": "abc3309ab41bc5a7846f70ee1a055838",
"translation_date": "2025-08-27T08:19:08+00:00",
"source_file": "2-Working-With-Data/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/09-visualization-quantities/README.md": {
"original_hash": "a49d78e32e280c410f04e5f2a2068e77",
"translation_date": "2025-09-06T06:58:39+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/09-visualization-quantities/assignment.md": {
"original_hash": "ad163c4fda72c8278280b61cad317ff4",
"translation_date": "2025-08-27T10:46:08+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/assignment.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/10-visualization-distributions/README.md": {
"original_hash": "80a20467e046d312809d008395051fc7",
"translation_date": "2025-09-06T07:00:05+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/10-visualization-distributions/assignment.md": {
"original_hash": "40eeb9b9f94009c537c7811f9f27f037",
"translation_date": "2025-08-27T10:16:19+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/assignment.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/11-visualization-proportions/README.md": {
"original_hash": "42119bcc97bee88254e381156d770f3c",
"translation_date": "2025-09-06T06:57:46+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/11-visualization-proportions/assignment.md": {
"original_hash": "1e00fe6a244c2f8f9a794c862661dd4f",
"translation_date": "2025-08-27T10:50:16+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/assignment.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/12-visualization-relationships/README.md": {
"original_hash": "0764fd4077f3f04a1d968ec371227744",
"translation_date": "2025-09-06T11:29:42+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/12-visualization-relationships/assignment.md": {
"original_hash": "680419753c086eef51be86607c623945",
"translation_date": "2025-08-27T10:20:51+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/assignment.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/13-meaningful-visualizations/README.md": {
"original_hash": "cfb068050337a36e348debaa502a24fa",
"translation_date": "2025-09-06T06:59:09+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/13-meaningful-visualizations/assignment.md": {
"original_hash": "e56df4c0f49357e30ac8fc77aa439dd4",
"translation_date": "2025-08-27T10:10:59+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/assignment.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/13-meaningful-visualizations/solution/README.md": {
"original_hash": "5c51a54dd89075a7a362890117b7ed9e",
"translation_date": "2025-08-27T10:12:13+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/solution/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/13-meaningful-visualizations/starter/README.md": {
"original_hash": "5c51a54dd89075a7a362890117b7ed9e",
"translation_date": "2025-08-27T10:11:36+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/starter/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/R/09-visualization-quantities/README.md": {
"original_hash": "22acf28f518a4769ea14fa42f4734b9f",
"translation_date": "2025-08-27T10:32:04+00:00",
"source_file": "3-Data-Visualization/R/09-visualization-quantities/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/R/09-visualization-quantities/assignment.md": {
"original_hash": "0ea21b6513df5ade7419c6b7d65f10b1",
"translation_date": "2025-08-27T10:34:18+00:00",
"source_file": "3-Data-Visualization/R/09-visualization-quantities/assignment.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/R/10-visualization-distributions/README.md": {
"original_hash": "ea67c0c40808fd723594de6896c37ccf",
"translation_date": "2025-08-27T10:23:12+00:00",
"source_file": "3-Data-Visualization/R/10-visualization-distributions/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/R/10-visualization-distributions/assignment.md": {
"original_hash": "a233d542512136c4dd29aad38ca0175f",
"translation_date": "2025-08-27T10:24:40+00:00",
"source_file": "3-Data-Visualization/R/10-visualization-distributions/assignment.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/R/11-visualization-proportions/README.md": {
"original_hash": "47028abaaafa2bcb1079702d20569066",
"translation_date": "2025-08-27T10:39:33+00:00",
"source_file": "3-Data-Visualization/R/11-visualization-proportions/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/R/12-visualization-relationships/README.md": {
"original_hash": "a33c5d4b4156a2b41788d8720b6f724c",
"translation_date": "2025-08-27T10:26:49+00:00",
"source_file": "3-Data-Visualization/R/12-visualization-relationships/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/R/13-meaningful-vizualizations/README.md": {
"original_hash": "b4039f1c76548d144a0aee0bf28304ec",
"translation_date": "2025-08-27T10:36:31+00:00",
"source_file": "3-Data-Visualization/R/13-meaningful-vizualizations/README.md",
"language_code": "zh-MO"
},
"3-Data-Visualization/README.md": {
"original_hash": "1441550a0d789796b2821e04f7f4cc94",
"translation_date": "2025-08-27T10:06:27+00:00",
"source_file": "3-Data-Visualization/README.md",
"language_code": "zh-MO"
},
"4-Data-Science-Lifecycle/14-Introduction/README.md": {
"original_hash": "07e12a25d20b8f191e3cb651c27fdb2b",
"translation_date": "2025-09-06T20:28:19+00:00",
"source_file": "4-Data-Science-Lifecycle/14-Introduction/README.md",
"language_code": "zh-MO"
},
"4-Data-Science-Lifecycle/14-Introduction/assignment.md": {
"original_hash": "564445c39ad29a491abcb9356fc4d47d",
"translation_date": "2025-08-27T09:54:08+00:00",
"source_file": "4-Data-Science-Lifecycle/14-Introduction/assignment.md",
"language_code": "zh-MO"
},
"4-Data-Science-Lifecycle/15-analyzing/README.md": {
"original_hash": "661dad02c3ac239644d34c1eb51e76f8",
"translation_date": "2025-09-06T20:28:05+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/README.md",
"language_code": "zh-MO"
},
"4-Data-Science-Lifecycle/15-analyzing/assignment.md": {
"original_hash": "fcc7547171f4530f159676dd73ed772e",
"translation_date": "2025-08-27T09:57:40+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/assignment.md",
"language_code": "zh-MO"
},
"4-Data-Science-Lifecycle/16-communication/README.md": {
"original_hash": "215a3254ba5a222a57c5bb0192cea8e3",
"translation_date": "2025-09-06T20:28:40+00:00",
"source_file": "4-Data-Science-Lifecycle/16-communication/README.md",
"language_code": "zh-MO"
},
"4-Data-Science-Lifecycle/16-communication/assignment.md": {
"original_hash": "8980d7efd101c82d6d6ffc3458214120",
"translation_date": "2025-08-27T10:05:17+00:00",
"source_file": "4-Data-Science-Lifecycle/16-communication/assignment.md",
"language_code": "zh-MO"
},
"4-Data-Science-Lifecycle/README.md": {
"original_hash": "dd173fd30fc039a7a299898920680723",
"translation_date": "2025-08-27T09:48:06+00:00",
"source_file": "4-Data-Science-Lifecycle/README.md",
"language_code": "zh-MO"
},
"5-Data-Science-In-Cloud/17-Introduction/README.md": {
"original_hash": "5f8e7cdefa096664ae86f795be571580",
"translation_date": "2025-09-06T06:52:26+00:00",
"source_file": "5-Data-Science-In-Cloud/17-Introduction/README.md",
"language_code": "zh-MO"
},
"5-Data-Science-In-Cloud/17-Introduction/assignment.md": {
"original_hash": "96f3696153d9ed54b19a1bb65438c104",
"translation_date": "2025-08-27T09:38:56+00:00",
"source_file": "5-Data-Science-In-Cloud/17-Introduction/assignment.md",
"language_code": "zh-MO"
},
"5-Data-Science-In-Cloud/18-Low-Code/README.md": {
"original_hash": "bd4da10766c64fce4294a98f6479dfb0",
"translation_date": "2025-09-06T06:51:27+00:00",
"source_file": "5-Data-Science-In-Cloud/18-Low-Code/README.md",
"language_code": "zh-MO"
},
"5-Data-Science-In-Cloud/18-Low-Code/assignment.md": {
"original_hash": "8fdc4a5fd9bc27a8d2ebef995dfbf73f",
"translation_date": "2025-08-27T09:33:59+00:00",
"source_file": "5-Data-Science-In-Cloud/18-Low-Code/assignment.md",
"language_code": "zh-MO"
},
"5-Data-Science-In-Cloud/19-Azure/README.md": {
"original_hash": "472d3fab1c5be50f387336e7a686dbe1",
"translation_date": "2025-09-06T06:52:49+00:00",
"source_file": "5-Data-Science-In-Cloud/19-Azure/README.md",
"language_code": "zh-MO"
},
"5-Data-Science-In-Cloud/19-Azure/assignment.md": {
"original_hash": "386efdbc19786951341f6956247ee990",
"translation_date": "2025-08-27T09:45:48+00:00",
"source_file": "5-Data-Science-In-Cloud/19-Azure/assignment.md",
"language_code": "zh-MO"
},
"5-Data-Science-In-Cloud/README.md": {
"original_hash": "8dfe141a0f46f7d253e07f74913c7f44",
"translation_date": "2025-08-27T09:26:01+00:00",
"source_file": "5-Data-Science-In-Cloud/README.md",
"language_code": "zh-MO"
},
"6-Data-Science-In-Wild/20-Real-World-Examples/README.md": {
"original_hash": "0f67a4139454816631526779a456b734",
"translation_date": "2025-09-06T18:17:06+00:00",
"source_file": "6-Data-Science-In-Wild/20-Real-World-Examples/README.md",
"language_code": "zh-MO"
},
"6-Data-Science-In-Wild/20-Real-World-Examples/assignment.md": {
"original_hash": "d1e05715f9d97de6c4f1fb0c5a4702c0",
"translation_date": "2025-08-27T09:25:02+00:00",
"source_file": "6-Data-Science-In-Wild/20-Real-World-Examples/assignment.md",
"language_code": "zh-MO"
},
"6-Data-Science-In-Wild/README.md": {
"original_hash": "07faf02ff163e609edf0b0308dc5d4e6",
"translation_date": "2025-08-27T09:18:25+00:00",
"source_file": "6-Data-Science-In-Wild/README.md",
"language_code": "zh-MO"
},
"AGENTS.md": {
"original_hash": "cc2e18ab65df63e75d3619c4752e9b22",
"translation_date": "2025-10-03T11:06:04+00:00",
"source_file": "AGENTS.md",
"language_code": "zh-MO"
},
"CODE_OF_CONDUCT.md": {
"original_hash": "c06b12caf3c901eb3156e3dd5b0aea56",
"translation_date": "2025-08-27T08:16:13+00:00",
"source_file": "CODE_OF_CONDUCT.md",
"language_code": "zh-MO"
},
"CONTRIBUTING.md": {
"original_hash": "10f86fb29b5407088445ac803b3d0ed1",
"translation_date": "2025-10-03T13:31:22+00:00",
"source_file": "CONTRIBUTING.md",
"language_code": "zh-MO"
},
"INSTALLATION.md": {
"original_hash": "a64d8afa22ffcc2016bb239188d6acb1",
"translation_date": "2025-10-03T15:16:12+00:00",
"source_file": "INSTALLATION.md",
"language_code": "zh-MO"
},
"README.md": {
"original_hash": "8ec92ecfeb14923af733851239552146",
"translation_date": "2026-01-30T01:16:57+00:00",
"source_file": "README.md",
"language_code": "zh-MO"
},
"SECURITY.md": {
"original_hash": "0d575483100c332b2dbaefef915bb3c4",
"translation_date": "2025-08-27T08:17:33+00:00",
"source_file": "SECURITY.md",
"language_code": "zh-MO"
},
"SUPPORT.md": {
"original_hash": "872be8bc1b93ef1dd9ac3d6e8f99f6ab",
"translation_date": "2025-08-27T08:14:12+00:00",
"source_file": "SUPPORT.md",
"language_code": "zh-MO"
},
"TROUBLESHOOTING.md": {
"original_hash": "93a6a8a8a209128cbfedcbc076ee21b0",
"translation_date": "2025-10-03T15:32:11+00:00",
"source_file": "TROUBLESHOOTING.md",
"language_code": "zh-MO"
},
"USAGE.md": {
"original_hash": "f546349678757508d69ce9e1d2688446",
"translation_date": "2025-10-03T14:55:02+00:00",
"source_file": "USAGE.md",
"language_code": "zh-MO"
},
"docs/_sidebar.md": {
"original_hash": "3767555b3cc28a2865c79202f4374204",
"translation_date": "2025-08-27T08:43:04+00:00",
"source_file": "docs/_sidebar.md",
"language_code": "zh-MO"
},
"examples/README.md": {
"original_hash": "9bef7fd96c8f262339933117d9b3e342",
"translation_date": "2025-10-03T12:57:31+00:00",
"source_file": "examples/README.md",
"language_code": "zh-MO"
},
"for-teachers.md": {
"original_hash": "f7440be10c17a8a9262713af3d2818a9",
"translation_date": "2025-09-06T19:53:07+00:00",
"source_file": "for-teachers.md",
"language_code": "zh-MO"
},
"quiz-app/README.md": {
"original_hash": "e92c33ea498915a13c9aec162616db18",
"translation_date": "2025-08-27T09:47:00+00:00",
"source_file": "quiz-app/README.md",
"language_code": "zh-MO"
},
"sketchnotes/README.md": {
"original_hash": "3a848466cb63aff1a93411affb152c2a",
"translation_date": "2025-08-27T09:17:58+00:00",
"source_file": "sketchnotes/README.md",
"language_code": "zh-MO"
}
}

@ -0,0 +1,167 @@
# 定義數據科學
| ![ 由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記 ](../../sketchnotes/01-Definitions.png) |
| :----------------------------------------------------------------------------------------------------: |
| 定義數據科學 - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ |
---
[![定義數據科學影片](../../../../translated_images/zh-MO/video-def-ds.6623ee2392ef1abf6d7faf3fad10a4163642811749da75f44e35a5bb121de15c.png)](https://youtu.be/beZ7Mb_oz9I)
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/0)
## 什麼是數據?
在我們的日常生活中,我們無時無刻不被數據所包圍。你現在正在閱讀的文字就是數據。你手機裡朋友的電話號碼列表是數據,你手錶上顯示的當前時間也是數據。作為人類,我們天生就會處理數據,比如數錢或者給朋友寫信。
然而,隨著電腦的誕生,數據變得更加重要。電腦的主要功能是進行計算,但它們需要數據來進行操作。因此,我們需要了解電腦如何存儲和處理數據。
隨著互聯網的出現,電腦作為數據處理設備的角色變得更加重要。如果你仔細想想,我們現在使用電腦更多的是進行數據處理和通信,而不是實際的計算。當我們給朋友寫電子郵件或在互聯網上搜索信息時,我們實際上是在創建、存儲、傳輸和操作數據。
> 你能記得上一次你用電腦實際進行計算是什麼時候嗎?
## 什麼是數據科學?
根據 [維基百科](https://en.wikipedia.org/wiki/Data_science)**數據科學**被定義為*一個使用科學方法從結構化和非結構化數據中提取知識和洞察力,並將數據中的知識和可行洞察應用於廣泛應用領域的科學領域*。
這一定義突出了數據科學的以下重要方面:
* 數據科學的主要目標是從數據中**提取知識**,換句話說,就是**理解**數據,發現一些隱藏的關係並建立**模型**。
* 數據科學使用**科學方法**,例如概率和統計。事實上,當*數據科學*這個術語首次被提出時,有些人認為數據科學只是統計學的一個新潮名稱。然而,現在已經很明顯這個領域要廣泛得多。
* 獲得的知識應用於產生一些**可行的洞察**,即可以應用於實際業務情境的實用洞察。
* 我們應該能夠處理**結構化**和**非結構化**數據。我們將在課程的後面部分回到這一點,討論不同類型的數據。
* **應用領域**是一個重要的概念,數據科學家通常需要對問題領域(例如:金融、醫學、行銷等)有一定程度的專業知識。
> 數據科學的另一個重要方面是研究如何使用電腦收集、存儲和操作數據。雖然統計學為我們提供了數學基礎,但數據科學將數學概念應用於實際從數據中獲取洞察。
根據 [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist)) 的說法,數據科學可以被視為一種獨立的科學範式:
* **經驗科學**,主要依賴觀察和實驗結果
* **理論科學**,從現有的科學知識中產生新概念
* **計算科學**,基於一些計算實驗發現新原則
* **數據驅動科學**,基於發現數據中的關係和模式
## 其他相關領域
由於數據無處不在,數據科學本身也是一個廣泛的領域,涉及許多其他學科。
<dl>
<dt>數據庫</dt>
<dd>
一個關鍵的考量是<b>如何存儲</b>數據,即如何以允許更快處理的方式結構化數據。有不同類型的數據庫可以存儲結構化和非結構化數據,這些我們會在<a href="../../2-Working-With-Data/README.md">課程中進一步探討</a>
</dd>
<dt>大數據</dt>
<dd>
我們經常需要存儲和處理結構相對簡單但數量非常龐大的數據。有專門的方法和工具可以將這些數據分佈式存儲在計算機集群上,並高效地處理它們。
</dd>
<dt>機器學習</dt>
<dd>
理解數據的一種方法是<b>建立模型</b>,以預測所需的結果。從數據中開發模型被稱為<b>機器學習</b>。你可以參考我們的<a href="https://aka.ms/ml-beginners">機器學習入門課程</a>以了解更多。
</dd>
<dt>人工智慧</dt>
<dd>
機器學習的一個領域稱為人工智慧AI它也依賴於數據並涉及構建模仿人類思維過程的高複雜性模型。AI 方法通常允許我們將非結構化數據(例如自然語言)轉化為結構化洞察。
</dd>
<dt>可視化</dt>
<dd>
龐大的數據量對人類來說是難以理解的,但一旦我們使用這些數據創建了有用的可視化,我們就能更好地理解數據,並得出一些結論。因此,了解多種可視化信息的方法非常重要——這是我們將在課程的<a href="../../3-Data-Visualization/README.md">第三部分</a>中涵蓋的內容。相關領域還包括<b>資訊圖表</b><b>人機互動</b>
</dd>
</dl>
## 數據的類型
正如我們已經提到的,數據無處不在。我們只需要以正確的方式捕捉它!區分**結構化**和**非結構化**數據是很有用的。前者通常以某種結構化的形式表示,通常是表格或多個表格,而後者則只是文件的集合。有時我們也可以談論**半結構化**數據,它具有某種結構,但結構可能有很大差異。
| 結構化數據 | 半結構化數據 | 非結構化數據 |
| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------- |
| 包含人員及其電話號碼的列表 | 包含鏈接的維基百科頁面 | 《大英百科全書》的文本 |
| 過去 20 年內每分鐘建築物中所有房間的溫度 | 以 JSON 格式存儲的科學論文集合,包括作者、發表日期和摘要 | 包含公司文件的文件共享 |
| 進入建築物的所有人的年齡和性別數據 | 網頁 | 監控攝像頭的原始視頻流 |
## 從哪裡獲取數據
數據的來源有很多種,無法一一列舉!然而,我們可以提到一些典型的數據來源:
* **結構化數據**
- **物聯網**IoT包括來自不同傳感器如溫度或壓力傳感器的數據提供了許多有用的數據。例如如果一棟辦公樓配備了 IoT 傳感器,我們可以自動控制供暖和照明以降低成本。
- **調查問卷**,例如我們在用戶購買後或訪問網站後要求他們完成的問卷。
- **行為分析**,例如可以幫助我們了解用戶如何深入瀏覽網站,以及他們離開網站的典型原因。
* **非結構化數據**
- **文本**可以是豐富的洞察來源,例如整體的**情感分數**,或提取關鍵詞和語義意義。
- **圖像**或**視頻**。來自監控攝像頭的視頻可以用於估算道路上的交通流量,並通知人們可能的交通堵塞。
- 網頁伺服器的**日誌**可以用來了解我們網站的哪些頁面最常被訪問,以及訪問的時長。
* **半結構化數據**
- **社交網絡**圖表可以是關於用戶個性和信息傳播潛力的數據的絕佳來源。
- 當我們有一堆派對的照片時,我們可以通過構建人們互相拍照的圖表來嘗試提取**群體動態**數據。
通過了解不同的數據來源,你可以嘗試思考不同的場景,看看數據科學技術可以在哪些方面應用,以更好地了解情況並改進業務流程。
## 你可以用數據做什麼
在數據科學中,我們專注於數據旅程的以下步驟:
<dl>
<dt>1) 數據獲取</dt>
<dd>
第一步是收集數據。雖然在許多情況下這可能是一個簡單的過程,比如從網頁應用程序進入數據庫的數據,但有時我們需要使用特殊技術。例如,來自 IoT 傳感器的數據可能過於龐大,因此使用像 IoT Hub 這樣的緩衝端點來收集所有數據以便進一步處理是一個好習慣。
</dd>
<dt>2) 數據存儲</dt>
<dd>
存儲數據可能具有挑戰性,特別是當我們談論大數據時。在決定如何存儲數據時,預測未來你希望如何查詢數據是有意義的。數據可以通過多種方式存儲:
<ul>
<li>關聯數據庫存儲表的集合,並使用一種稱為 SQL 的特殊語言來查詢它們。通常,表被組織成不同的組,稱為模式。在許多情況下,我們需要將數據從原始形式轉換為適合模式的形式。</li>
<li><a href="https://en.wikipedia.org/wiki/NoSQL">NoSQL</a> 數據庫,例如 <a href="https://azure.microsoft.com/services/cosmos-db/?WT.mc_id=academic-77958-bethanycheum">CosmosDB</a>,不對數據強制執行模式,並允許存儲更複雜的數據,例如層次結構的 JSON 文檔或圖表。然而NoSQL 數據庫沒有 SQL 的豐富查詢功能,並且無法強制執行參考完整性,即表結構和表之間關係的規則。</li>
<li><a href="https://en.wikipedia.org/wiki/Data_lake">數據湖</a>存儲用於以原始、非結構化形式存儲大量數據。數據湖通常用於大數據,當所有數據無法容納在一台機器上時,必須由伺服器集群存儲和處理。<a href="https://en.wikipedia.org/wiki/Apache_Parquet">Parquet</a> 是一種經常與大數據一起使用的數據格式。</li>
</ul>
</dd>
<dt>3) 數據處理</dt>
<dd>
這是數據旅程中最令人興奮的部分,涉及將數據從其原始形式轉換為可用於可視化/模型訓練的形式。當處理非結構化數據(如文本或圖像)時,我們可能需要使用一些 AI 技術從數據中提取<b>特徵</b>,從而將其轉換為結構化形式。
</dd>
<dt>4) 可視化 / 人類洞察</dt>
<dd>
為了理解數據,我們經常需要對其進行可視化。擁有多種可視化技術,我們可以找到合適的視圖來獲得洞察。通常,數據科學家需要“玩轉數據”,多次對其進行可視化,尋找某些關係。此外,我們還可以使用統計技術來檢驗假設或證明數據之間的相關性。
</dd>
<dt>5) 訓練預測模型</dt>
<dd>
由於數據科學的最終目標是能夠根據數據做出決策,我們可能希望使用<a href="http://github.com/microsoft/ml-for-beginners">機器學習</a>技術來構建預測模型。然後,我們可以使用這些模型對具有相似結構的新數據集進行預測。
</dd>
</dl>
當然,根據實際數據的不同,有些步驟可能會缺失(例如,當我們已經在數據庫中擁有數據,或者當我們不需要模型訓練時),或者某些步驟可能會重複多次(例如數據處理)。
## 數字化與數字化轉型
在過去的十年中,許多企業開始意識到數據在業務決策中的重要性。要將數據科學原則應用於經營業務,首先需要收集一些數據,即將業務流程轉化為數字形式,這被稱為**數字化**。將數據科學技術應用於這些數據以指導決策,可以顯著提高生產力(甚至實現業務轉型),這被稱為**數字化轉型**。
讓我們來看一個例子。假設我們有一門數據科學課程(比如這門課程),我們在線上向學生提供,並希望使用數據科學來改進它。我們該怎麼做?
我們可以從問“什麼可以數字化?”開始。最簡單的方法是測量每位學生完成每個模組所需的時間,並通過在每個模組結束時進行選擇題測試來測量所獲得的知識。通過計算所有學生的平均完成時間,我們可以找出哪些模組對學生來說最具挑戰性,並著手簡化它們。
> 你可能會認為這種方法並不理想,因為模組的長度可能不同。或許更公平的做法是將時間除以模組的長度(以字元數計算),然後比較這些值。
當我們開始分析多選測試的結果時,可以嘗試找出學生難以理解的概念,並利用這些資訊來改進內容。為了達到這個目的,我們需要設計測試,使每個問題都能對應到某個特定的概念或知識塊。
如果我們想進一步深入分析,可以將每個模組所花的時間與學生的年齡類別進行對比。我們可能會發現某些年齡層的學生完成模組所需的時間過長,或者在完成之前就中途退出。這可以幫助我們為模組提供年齡建議,並減少因錯誤期望而導致的不滿。
## 🚀 挑戰
在這個挑戰中,我們將透過分析文本來尋找與資料科學領域相關的概念。我們會選取一篇關於資料科學的維基百科文章,下載並處理文本,然後建立一個像這樣的文字雲:
![資料科學文字雲](../../../../translated_images/zh-MO/ds_wordcloud.664a7c07dca57de017c22bf0498cb40f898d48aa85b3c36a80620fea12fadd42.png)
請訪問 [`notebook.ipynb`](../../../../1-Introduction/01-defining-data-science/notebook.ipynb ':ignore') 來閱讀程式碼。你也可以執行程式碼,並即時查看它如何進行所有的資料轉換。
> 如果你不知道如何在 Jupyter Notebook 中執行程式碼,可以參考 [這篇文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)。
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/1)
## 作業
* **任務 1**:修改上述程式碼,找出與 **大數據** 和 **機器學習** 領域相關的概念
* **任務 2**[思考資料科學場景](assignment.md)
## 致謝
這堂課由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫完成
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,37 @@
# 作業:資料科學情境
在這份作業中,我們希望你思考一些現實生活中的流程或問題,涵蓋不同的問題領域,並探討如何利用資料科學流程來改進它。請思考以下問題:
1. 你可以收集哪些資料?
1. 你會如何收集這些資料?
1. 你會如何儲存這些資料?資料的規模可能有多大?
1. 從這些資料中你可能獲得哪些洞察?基於這些資料,我們可以做出哪些決策?
試著思考三個不同的問題或流程,並針對每個問題領域描述上述的每個要點。
以下是一些問題領域和問題,幫助你開始思考:
1. 如何利用資料來改善學校中兒童的教育流程?
1. 如何利用資料在疫情期間控制疫苗接種?
1. 如何利用資料確保自己在工作中保持高效?
## 指示
填寫以下表格(如果需要,可以替換建議的問題領域為你自己的領域):
| 問題領域 | 問題 | 收集哪些資料 | 如何儲存資料 | 我們可以做出的洞察/決策 |
|----------|------|--------------|--------------|--------------------------|
| 教育 | | | | |
| 疫苗接種 | | | | |
| 生產力 | | | | |
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
能夠為所有問題領域識別合理的資料來源、儲存方式以及可能的決策/洞察 | 解決方案的某些方面未詳細說明,未討論資料儲存,至少描述了兩個問題領域 | 僅描述部分資料解決方案,僅考慮了一個問題領域。
---
**免責聲明**
本文件使用 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,39 @@
# 作業:數據科學情境
在這份作業中,我們希望你思考一些真實生活中的流程或問題,並探討如何使用數據科學流程來改進它。請思考以下問題:
1. 你可以收集哪些數據?
1. 你會如何收集這些數據?
1. 你會如何存儲這些數據?這些數據的規模可能有多大?
1. 你可能從這些數據中獲得哪些洞察?基於這些數據,我們可以做出哪些決策?
試著思考三個不同的問題或流程,並針對每個問題領域描述上述的每個要點。
以下是一些問題領域和問題,幫助你開始思考:
1. 如何使用數據來改善學校中兒童的教育流程?
1. 如何使用數據來控制疫情期間的疫苗接種?
1. 如何使用數據來確保自己在工作中保持高效?
## 指導
填寫以下表格(如果需要,可以替換建議的問題領域為你自己的問題領域):
| 問題領域 | 問題 | 收集哪些數據 | 如何存儲數據 | 我們可以做出的洞察/決策 |
|----------|------|--------------|--------------|--------------------------|
| 教育 | 在大學中,通常課堂出席率較低,我們假設出席課堂的學生在考試中表現更好。我們希望刺激出席率並測試這一假設。 | 我們可以通過教室內的安全攝像頭拍攝的照片,或追蹤學生手機的藍牙/無線網絡地址來記錄出席情況。考試數據已經存儲在大學的數據庫中。 | 如果我們追蹤安全攝像頭的照片——我們需要存儲一些5-10張課堂期間拍攝的照片非結構化數據然後使用人工智能識別學生的面部將數據轉換為結構化形式。 | 我們可以計算每位學生的平均出席率,並查看是否與考試成績有任何相關性。我們會在[概率與統計](../../04-stats-and-probability/README.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,259 @@
# 資料倫理簡介
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/02-Ethics.png)|
|:---:|
| 資料科學倫理 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
---
我們都是生活在數據化世界中的資料公民。
市場趨勢顯示到2022年三分之一的大型組織將通過線上[市場和交易所](https://www.gartner.com/smarterwithgartner/gartner-top-10-trends-in-data-and-analytics-for-2020/)購買和出售其數據。作為**應用程式開發者**,我們將更容易、更便宜地將數據驅動的洞察力和算法驅動的自動化整合到日常用戶體驗中。但隨著人工智慧的普及,我們也需要了解這些算法在大規模應用時可能造成的[武器化](https://www.youtube.com/watch?v=TQHs8SA1qpk)危害。
趨勢顯示到2025年我們將生成和消耗超過[180澤字節](https://www.statista.com/statistics/871513/worldwide-data-created/)的數據。對於**資料科學家**而言,這種信息爆炸提供了前所未有的個人和行為數據的訪問權限。這使得建立詳細的用戶檔案並微妙地影響決策成為可能——通常以促進[自由選擇的幻覺](https://www.datasciencecentral.com/the-pareto-set-and-the-paradox-of-choice/)的方式進行。雖然這可以用來引導用戶朝向偏好的結果,但也引發了關於數據隱私、自主性以及算法影響的倫理界限的關鍵問題。
資料倫理現在是資料科學和工程的_必要防護措施_幫助我們減少數據驅動行動可能帶來的危害和意外後果。[Gartner人工智慧技術成熟度曲線](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/)指出數字倫理、負責任的人工智慧和人工智慧治理是推動人工智慧_民主化_和_工業化_的主要趨勢。
![Gartner的人工智慧技術成熟度曲線 - 2020](https://images-cdn.newscred.com/Zz1mOWJhNzlkNDA2ZTMxMWViYjRiOGFiM2IyMjQ1YmMwZQ==)
在本課程中,我們將探索資料倫理這個迷人的領域——從核心概念和挑戰,到案例研究和應用人工智慧概念(如治理),幫助在處理數據和人工智慧的團隊和組織中建立倫理文化。
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/2) 🎯
## 基本定義
讓我們先了解一些基本術語。
「倫理」一詞源自[希臘詞「ethikos」](https://en.wikipedia.org/wiki/Ethics)及其根詞「ethos」意為_品格或道德本質_。
**倫理**是指在社會中規範我們行為的共同價值觀和道德原則。倫理不是基於法律,而是基於廣泛接受的「對與錯」的規範。然而,倫理考量可以影響企業治理倡議和政府法規,從而創造更多的合規激勵。
**資料倫理**是一個[新的倫理分支](https://royalsocietypublishing.org/doi/full/10.1098/rsta.2016.0360#sec-1)研究和評估與_數據、算法及相關實踐_相關的道德問題。在這裡**「數據」**側重於生成、記錄、策劃、處理、傳播、共享和使用的行動,**「算法」**側重於人工智慧、代理、機器學習和機器人,**「實踐」**側重於負責任的創新、編程、駭客行為和倫理守則等主題。
**應用倫理**是[道德考量的實際應用](https://en.wikipedia.org/wiki/Applied_ethics)。它是積極調查_現實世界行動、產品和流程_中的倫理問題並採取糾正措施以確保這些行動與我們定義的倫理價值保持一致。
**倫理文化**是關於[將應用倫理_付諸實踐_](https://hbr.org/2019/05/how-to-design-an-ethical-organization),確保我們的倫理原則和實踐在整個組織中以一致且可擴展的方式被採用。成功的倫理文化定義了全組織範圍的倫理原則,提供有意義的合規激勵,並通過鼓勵和放大期望的行為來加強每個層級的倫理規範。
## 倫理概念
在本節中,我們將討論**共同價值觀**(原則)和**倫理挑戰**(問題)等資料倫理概念,並探索**案例研究**,幫助您在現實世界的背景中理解這些概念。
### 1. 倫理原則
每個資料倫理策略都始於定義_倫理原則_——描述可接受行為並指導合規行動的「共同價值觀」用於我們的數據和人工智慧項目。您可以在個人或團隊層面定義這些原則。然而大多數大型組織會在企業層面定義一個_倫理人工智慧_使命聲明或框架並在所有團隊中一致執行。
**範例:** 微軟的[負責任人工智慧](https://www.microsoft.com/en-us/ai/responsible-ai)使命聲明寫道_「我們致力於推動以倫理原則為基礎的人工智慧將人放在首位」_並在以下框架中確定了6個倫理原則
![微軟的負責任人工智慧](https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png)
讓我們簡要探討這些原則。_透明性_和_問責性_是其他原則的基礎價值觀因此我們從這裡開始
* [**問責性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)使實踐者對其數據和人工智慧操作以及遵守這些倫理原則負責。
* [**透明性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)確保數據和人工智慧行動對用戶是_可理解的_可解釋的並解釋決策背後的內容和原因。
* [**公平性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6)——專注於確保人工智慧公平對待_所有人_解決數據和系統中的任何系統性或隱性社會技術偏見。
* [**可靠性與安全性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)——確保人工智慧以_一致性_的方式行事並減少潛在危害或意外後果。
* [**隱私與安全**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)——關注數據來源並為用戶提供_數據隱私及相關保護_。
* [**包容性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)——旨在有意設計人工智慧解決方案並使其適應_廣泛的人類需求_和能力。
> 🚨 想一想您的資料倫理使命聲明可能是什麼。探索其他組織的倫理人工智慧框架——以下是[IBM](https://www.ibm.com/cloud/learn/ai-ethics)、[Google](https://ai.google/principles)和[Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/)的範例。他們有哪些共同的價值觀?這些原則如何與他們所運營的人工智慧產品或行業相關?
### 2. 倫理挑戰
一旦我們定義了倫理原則下一步就是評估我們的數據和人工智慧行動是否符合這些共同價值觀。思考您的行動可以分為兩類_數據收集_和_算法設計_。
在數據收集方面,行動可能涉及**個人數據**或可識別的活人個人信息PII。這包括[多樣化的非個人數據項目](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en)這些數據_共同_識別一個個體。倫理挑戰可能涉及_數據隱私_、_數據所有權_以及相關主題如_知情同意_和_用戶的知識產權_。
在算法設計方面,行動將涉及收集和策劃**數據集**,然後使用它們來訓練和部署**數據模型**以在現實世界的背景中預測結果或自動化決策。倫理挑戰可能來自_數據集偏差_、_數據質量_問題、_不公平性_以及算法中的_誤導性_——包括一些系統性問題。
在這兩種情況下,倫理挑戰突出了我們的行動可能與共同價值觀發生衝突的領域。為了檢測、減輕、最小化或消除這些問題,我們需要針對我們的行動提出道德「是/否」問題,然後根據需要採取糾正措施。以下是一些倫理挑戰及其引發的道德問題:
#### 2.1 數據所有權
數據收集通常涉及可識別數據主體的個人數據。[數據所有權](https://permission.io/blog/data-ownership)關注於與數據的創建、處理和傳播相關的_控制_和[用戶權利](https://permission.io/blog/data-ownership)。
需要提出的道德問題包括:
* 誰擁有數據?(用戶或組織)
* 數據主體擁有哪些權利?(例如:訪問、刪除、可攜性)
* 組織擁有哪些權利?(例如:糾正惡意用戶評論)
#### 2.2 知情同意
[知情同意](https://legaldictionary.net/informed-consent/)指的是用戶在充分了解相關事實(包括目的、潛在風險和替代方案)的情況下同意某項行動(如數據收集)。
需要探討的問題包括:
* 用戶(數據主體)是否允許數據的捕獲和使用?
* 用戶是否了解捕獲數據的目的?
* 用戶是否了解參與可能帶來的潛在風險?
#### 2.3 知識產權
[知識產權](https://en.wikipedia.org/wiki/Intellectual_property)指的是人類創造的無形產物可能對個人或企業具有_經濟價值_。
需要探討的問題包括:
* 收集的數據是否對用戶或企業具有經濟價值?
* **用戶**是否擁有知識產權?
* **組織**是否擁有知識產權?
* 如果存在這些權利,我們如何保護它們?
#### 2.4 數據隱私
[數據隱私](https://www.northeastern.edu/graduate/blog/what-is-data-privacy/)或信息隱私指的是保護用戶隱私和身份,特別是與可識別個人信息相關的部分。
需要探討的問題包括:
* 用戶的(個人)數據是否安全,防止駭客攻擊和洩漏?
* 用戶的數據是否僅限於授權用戶和授權情境訪問?
* 用戶的匿名性是否在數據共享或傳播時得到保護?
* 用戶是否可以從匿名數據集中被去識別?
#### 2.5 被遺忘的權利
[被遺忘的權利](https://en.wikipedia.org/wiki/Right_to_be_forgotten)或[刪除權](https://www.gdpreu.org/right-to-be-forgotten/)為用戶提供額外的個人數據保護。具體而言,它賦予用戶在特定情況下要求刪除或移除個人數據的權利,允許他們在網上重新開始,而不受過去行為的影響。
需要探討的問題包括:
* 系統是否允許數據主體請求刪除?
* 用戶撤回同意是否應觸發自動刪除?
* 是否存在未經同意或非法手段收集的數據?
* 我們是否符合政府對數據隱私的法規?
#### 2.6 數據集偏差
數據集或[收集偏差](http://researcharticles.com/index.php/bias-in-data-collection-in-research/)指的是選擇_非代表性_的數據子集進行算法開發可能導致對不同群體的結果不公平。偏差類型包括選擇或抽樣偏差、志願者偏差和工具偏差。
需要探討的問題包括:
* 我們是否招募了代表性數據主體的集合?
* 我們是否測試了收集或策劃的數據集以檢測各種偏差?
* 我們是否能減輕或消除發現的偏差?
#### 2.7 數據質量
[數據質量](https://lakefs.io/data-quality-testing/)關注於用於開發算法的策劃數據集的有效性,檢查特徵和記錄是否符合人工智慧目的所需的準確性和一致性要求。
需要探討的問題包括:
* 我們是否捕獲了適合我們使用案例的有效_特徵_
* 數據是否在不同數據來源中_一致性_地捕獲
* 數據集是否在不同條件或場景下_完整_
* 是否準確捕捉信息以反映現實?
#### 2.8 演算法公平性
[演算法公平性](https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f)檢查演算法設計是否系統性地對特定數據主體的子群體造成歧視,導致在資源分配(即資源被拒絕或扣留)和服務質量(即人工智能對某些子群體的準確性不如其他群體)方面的[潛在傷害](https://docs.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml)。
需要探討的問題包括:
* 我們是否評估了模型在不同子群體和條件下的準確性?
* 我們是否仔細檢查了系統是否存在潛在傷害(例如,刻板印象)?
* 我們是否可以修正數據或重新訓練模型以減輕已識別的傷害?
探索像[人工智能公平性檢查清單](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4t6dA)這樣的資源以了解更多。
#### 2.9 錯誤陳述
[數據錯誤陳述](https://www.sciencedirect.com/topics/computer-science/misrepresentation)是指我們是否以欺騙的方式傳達來自誠實報告數據的洞察,以支持某種期望的敘述。
需要探討的問題包括:
* 我們是否報告了不完整或不準確的數據?
* 我們是否以導致誤導性結論的方式可視化數據?
* 我們是否使用選擇性的統計技術來操縱結果?
* 是否存在可能提供不同結論的替代解釋?
#### 2.10 自由選擇
[自由選擇的幻象](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice)發生在系統的“選擇架構”使用決策演算法來引導人們採取偏好的結果,同時看似給予他們選擇和控制權。這些[黑暗模式](https://www.darkpatterns.org/)可能對用戶造成社會和經濟上的傷害。由於用戶的決策會影響行為檔案,這些行動可能會驅動未來的選擇,進一步放大或延續這些傷害的影響。
需要探討的問題包括:
* 用戶是否理解做出該選擇的影響?
* 用戶是否了解(替代)選擇及其各自的利弊?
* 用戶是否可以在後期逆轉自動化或受影響的選擇?
### 3. 案例研究
為了將這些倫理挑戰置於現實世界的背景中,研究案例研究有助於突出當忽視這些倫理問題時,對個人和社會可能造成的傷害和後果。
以下是一些例子:
| 倫理挑戰 | 案例研究 |
|--- |--- |
| **知情同意** | 1972年 - [塔斯基吉梅毒研究](https://en.wikipedia.org/wiki/Tuskegee_Syphilis_Study) - 參與研究的非裔美國男性被承諾提供免費醫療服務但研究人員欺騙了受試者未告知他們的診斷或治療的可用性。許多受試者死亡其伴侶或子女也受到影響研究持續了40年。 |
| **數據隱私** | 2007年 - [Netflix數據獎](https://www.wired.com/2007/12/why-anonymous-data-sometimes-isnt/)向研究人員提供了_來自50,000名客戶的1,000萬匿名電影評分_以幫助改進推薦演算法。然而研究人員能夠將匿名數據與_外部數據集_例如IMDb評論中的個人身份數據相關聯實際上“去匿名化”了一些Netflix訂閱者。|
| **收集偏差** | 2013年 - 波士頓市[開發了Street Bump](https://www.boston.gov/transportation/street-bump),這是一款讓市民報告路面坑洞的應用程式,幫助城市獲得更好的道路數據以發現和修復問題。然而,[低收入群體的人們較少擁有汽車和手機](https://hbr.org/2013/04/the-hidden-biases-in-big-data)使得他們的道路問題在這款應用程式中被忽視。開發者與學者合作解決公平性問題例如_公平訪問和數字鴻溝_。|
| **演算法公平性** | 2018年 - MIT [Gender Shades研究](http://gendershades.org/overview.html)評估了性別分類人工智能產品的準確性,揭示了女性和有色人種的準確性差距。一個[2019年Apple Card](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/)似乎給女性提供的信用額度低於男性。這兩個例子都說明了演算法偏差導致的社會經濟傷害問題。|
| **數據錯誤陳述** | 2020年 - [喬治亞州公共衛生部發布的COVID-19圖表](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening)似乎通過非時間順序的x軸排列誤導公民關於確診病例趨勢的理解。這說明了通過可視化技巧進行的錯誤陳述。|
| **自由選擇的幻象** | 2020年 - 學習應用程式[ABCmouse支付了1000萬美元以解決FTC投訴](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/),家長被迫支付無法取消的訂閱費用。這說明了選擇架構中的黑暗模式,用戶被引導做出可能有害的選擇。|
| **數據隱私與用戶權利** | 2021年 - Facebook [數據洩漏](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users)洩露了5.3億用戶的數據導致向FTC支付了50億美元的和解金。然而它拒絕通知用戶洩漏事件違反了用戶關於數據透明度和訪問的權利。|
想探索更多案例研究?查看以下資源:
* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - 涵蓋多個行業的倫理困境。
* [數據科學倫理課程](https://www.coursera.org/learn/data-science-ethics#syllabus) - 探索標誌性案例研究。
* [錯誤案例](https://deon.drivendata.org/examples/) - Deon清單中的示例。
> 🚨 回想你所看到的案例研究——你是否曾經遇到或受到類似倫理挑戰的影響?你能想到至少一個其他案例研究來說明我們在本節中討論的倫理挑戰嗎?
## 應用倫理
我們已經討論了倫理概念、挑戰以及在現實世界中的案例研究。但我們如何開始在項目中_應用_倫理原則和實踐我們又如何_實現_這些實踐以改善治理讓我們探索一些現實世界的解決方案
### 1. 專業守則
專業守則為組織提供了一種選擇通過“激勵”成員支持其倫理原則和使命聲明。守則是專業行為的_道德指南_幫助員工或成員做出符合其組織原則的決策。它的效力取決於成員的自願遵守然而許多組織提供額外的獎勵和懲罰以激勵成員遵守。
例子包括:
* [Oxford Munich](http://www.code-of-ethics.org/code-of-conduct/)倫理守則
* [數據科學協會](http://datascienceassn.org/code-of-conduct.html)行為守則創建於2013年
* [ACM倫理與專業行為守則](https://www.acm.org/code-of-ethics)自1993年起
> 🚨 你是否屬於某個專業工程或數據科學組織?探索他們的網站,看看是否定義了專業倫理守則。這些守則說明了哪些倫理原則?他們如何“激勵”成員遵守守則?
### 2. 倫理檢查清單
雖然專業守則定義了從業者所需的_倫理行為_但它們在執行方面[存在已知的局限性](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md),特別是在大規模項目中。因此,許多數據科學專家[提倡使用檢查清單](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md),這些清單可以**將原則與實踐聯繫起來**,以更具決定性和可操作的方式。
檢查清單將問題轉化為“是/否”任務,可以實現操作化,並允許將其作為標準產品發布工作流程的一部分進行跟蹤。
例子包括:
* [Deon](https://deon.drivendata.org/) - 一個通用數據倫理檢查清單,由[行業建議](https://deon.drivendata.org/#checklist-citations)創建,並配有命令行工具以便於集成。
* [隱私審核檢查清單](https://cyber.harvard.edu/ecommerce/privacyaudit.html) - 從法律和社會暴露的角度提供信息處理實踐的一般指導。
* [人工智能公平性檢查清單](https://www.microsoft.com/en-us/research/project/ai-fairness-checklist/) - 由人工智能從業者創建,用於支持公平性檢查的採用和集成到人工智能開發周期中。
* [數據與人工智能倫理的22個問題](https://medium.com/the-organization/22-questions-for-ethics-in-data-and-ai-efb68fd19429) - 更開放式的框架,結構化用於設計、實施和組織背景下的倫理問題初步探索。
### 3. 倫理法規
倫理是關於定義共同價值並_自願_做正確的事情。**合規**是指_遵守法律_如果有定義。**治理**則廣泛涵蓋了組織為執行倫理原則和遵守既定法律所採取的所有方式。
今天,治理在組織內部有兩種形式。首先,它是關於定義**倫理人工智能**原則並建立實踐以在組織內所有與人工智能相關的項目中實現採用。其次,它是關於遵守所有政府規定的**數據保護法規**,以適應其運營的地區。
數據保護和隱私法規的例子:
* `1974年`[美國隱私法案](https://www.justice.gov/opcl/privacy-act-1974) - 規範_聯邦政府_收集、使用和披露個人信息。
* `1996年`[美國健康保險流通與責任法案HIPAA](https://www.cdc.gov/phlp/publications/topic/hipaa.html) - 保護個人健康數據。
* `1998年`[美國兒童在線隱私保護法案COPPA](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule) - 保護13歲以下兒童的數據隱私。
* `2018年`[通用數據保護條例GDPR](https://gdpr-info.eu/) - 提供用戶權利、數據保護和隱私。
* `2018年`[加州消費者隱私法案CCPA](https://www.oag.ca.gov/privacy/ccpa) - 賦予消費者更多_個人數據_的權利。
* `2021年`,中國[個人信息保護法](https://www.reuters.com/world/china/china-passes-new-personal-data-privacy-law-take-effect-nov-1-2021-08-20/)剛剛通過,創造了全球最強的在線數據隱私法規之一。
> 🚨 歐盟定義的通用數據保護條例GDPR仍然是當今最具影響力的數據隱私法規之一。你知道它還定義了[8項用戶權利](https://www.freeprivacypolicy.com/blog/8-user-rights-gdpr)以保護公民的數字隱私和個人數據嗎?了解這些權利是什麼以及它們為什麼重要。
### 4. 倫理文化
請注意_合規_做到足以滿足“法律條文”與解決[系統性問題](https://www.coursera.org/learn/data-science-ethics/home/week/4)(如僵化、信息不對稱和分配不公平)之間仍然存在無形的差距,這些問題可能加速人工智能的武器化。
後者需要[協作方法來定義倫理文化](https://towardsdatascience.com/why-ai-ethics-requires-a-culture-driven-approach-26f451afa29f),以在行業內部建立情感聯繫和一致的共同價值觀。這需要在組織內部建立更多[正式化的數據倫理文化](https://www.codeforamerica.org/news/formalizing-an-ethical-data-culture)允許_任何人_在過程早期[拉響安燈繩](https://en.wikipedia.org/wiki/Andon_(manufacturing))提出倫理問題並將_倫理評估_例如在招聘中作為人工智能項目團隊組建的核心標準。
---
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/3) 🎯
## 回顧與自學
課程和書籍有助於理解核心倫理概念和挑戰,而案例研究和工具有助於在現實世界中應用倫理實踐。以下是一些入門資源。
* [機器學習入門](https://github.com/microsoft/ML-For-Beginners/blob/main/1-Introduction/3-fairness/README.md) - 微軟提供的公平性課程。
* [負責任的人工智慧原則](https://docs.microsoft.com/en-us/learn/modules/responsible-ai-principles/) - 微軟學習平台的免費學習路徑。
* [倫理與數據科學](https://resources.oreilly.com/examples/0636920203964) - O'Reilly 電子書 (M. Loukides, H. Mason 等人著)
* [數據科學倫理](https://www.coursera.org/learn/data-science-ethics#syllabus) - 密西根大學提供的線上課程。
* [倫理解讀](https://ethicsunwrapped.utexas.edu/case-studies) - 德州大學的案例研究。
# 作業
[撰寫一篇數據倫理案例研究](assignment.md)
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,26 @@
## 撰寫一份數據倫理案例研究
## 指導說明
你已經學習了各種[數據倫理挑戰](README.md#2-ethics-challenges),並且看過一些反映現實世界中數據倫理挑戰的[案例研究](README.md#3-case-studies)範例。
在這次作業中,你將撰寫一份自己的案例研究,反映你自身經歷或你熟悉的相關現實情境中的數據倫理挑戰。只需按照以下步驟進行:
1. `選擇一個數據倫理挑戰`。參考[課程範例](README.md#2-ethics-challenges)或在線上探索一些範例,例如[Deon 清單](https://deon.drivendata.org/examples/)來獲取靈感。
2. `描述一個現實世界的例子`。思考你聽說過的情境(新聞頭條、研究報告等)或你經歷過的情境(當地社區),其中發生了這個特定挑戰。思考與該挑戰相關的數據倫理問題——並討論由於這個問題而產生的潛在危害或意外後果。加分項:思考可以在此處應用的潛在解決方案或流程,以幫助消除或減輕該挑戰的不利影響。
3. `提供相關資源清單`。分享一個或多個資源(例如文章鏈接、個人博客文章或圖片、在線研究報告等),以證明這是一個真實世界的事件。加分項:分享能展示該事件潛在危害與後果的資源,或突出防止其再次發生的積極措施。
## 評分標準
卓越 | 合格 | 需改進
--- | --- | -- |
識別出一個或多個數據倫理挑戰。<br/><br/>案例研究清楚地描述了一個反映該挑戰的現實世界事件,並突出了其造成的不良後果或危害。<br/><br/>至少有一個鏈接資源證明該事件的發生。 | 識別出一個數據倫理挑戰。<br/><br/>至少簡要討論了一個相關的危害或後果。<br/><br/>然而,討論有限或缺乏證明其真實發生的證據。 | 識別出一個數據挑戰。<br/><br/>然而,描述或資源未能充分反映該挑戰或證明其真實發生。 |
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,75 @@
# 定義資料
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/03-DefiningData.png)|
|:---:|
|定義資料 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
資料是用來進行探索和支持明智決策的事實、資訊、觀察和測量。一個資料點是資料集中的單一資料單位,而資料集則是由多個資料點組成的集合。資料集可能有不同的格式和結構,通常取決於其來源或資料的來源。例如,一家公司的月度收益可能以電子表格形式呈現,而智能手錶的每小時心率資料可能以 [JSON](https://stackoverflow.com/a/383699) 格式呈現。資料科學家通常需要處理資料集中不同類型的資料。
本課程重點在於根據資料的特性和來源來識別和分類資料。
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/4)
## 資料的描述方式
### 原始資料
原始資料是來自其來源的初始狀態,尚未被分析或組織。為了理解資料集中的情況,必須將其組織成一種人類和技術都能理解的格式。資料集的結構描述了其組織方式,可以分為結構化、非結構化和半結構化。這些結構類型會因來源而異,但最終都屬於這三類之一。
### 定量資料
定量資料是資料集中的數值觀察通常可以進行分析、測量並用於數學運算。一些定量資料的例子包括一個國家的人口、一個人的身高或一家公司季度收益。通過進一步分析定量資料可以用來發現空氣品質指數AQI的季節性趨勢或估算典型工作日高峰時段交通的概率。
### 定性資料
定性資料,也稱為分類資料,是無法像定量資料那樣客觀測量的資料。它通常是各種格式的主觀資料,用來捕捉某事物的品質,例如產品或流程。有時,定性資料是數值形式,但通常不會用於數學運算,例如電話號碼或時間戳。一些定性資料的例子包括:影片評論、汽車的品牌和型號或你最親密朋友最喜歡的顏色。定性資料可以用來了解消費者最喜歡哪些產品或識別求職申請表中的熱門關鍵字。
### 結構化資料
結構化資料是以行和列的形式組織的資料,其中每一行都具有相同的列集合。列代表特定類型的值,並以描述該值代表內容的名稱來識別,而行則包含實際的值。列通常會有一組特定的規則或限制,以確保值準確地代表該列。例如,想像一個客戶的電子表格,其中每一行都必須有一個電話號碼,且電話號碼不能包含字母字符。可能會在電話號碼列上應用規則,以確保它永遠不會是空的,並且只包含數字。
結構化資料的一個優勢是可以以某種方式組織,使其能與其他結構化資料相關聯。然而,由於資料被設計成以特定方式組織,對其整體結構進行更改可能需要付出大量努力。例如,向客戶電子表格中添加一個不能為空的電子郵件列,意味著需要想辦法將這些值添加到資料集中現有的客戶行中。
結構化資料的例子:電子表格、關聯式資料庫、電話號碼、銀行對帳單
### 非結構化資料
非結構化資料通常無法分類為行或列,並且不包含格式或遵循的規則。由於非結構化資料對其結構的限制較少,與結構化資料相比,添加新資訊更容易。如果一個每兩分鐘捕捉一次氣壓資料的感測器收到更新,現在可以測量和記錄溫度,那麼如果資料是非結構化的,就不需要更改現有資料。然而,這可能會使分析或調查此類資料的時間更長。例如,一位科學家希望從感測器的資料中找到上個月的平均溫度,但發現感測器在某些記錄資料中使用了 "e" 來表示故障,而不是典型的數字,這意味著資料不完整。
非結構化資料的例子:文字檔案、簡訊、影片檔案
### 半結構化資料
半結構化資料具有結構化和非結構化資料的特徵。它通常不符合行和列的格式,但以某種被認為是結構化的方式組織,並可能遵循固定的格式或規則。結構會因來源而異,例如從明確定義的層次結構到更靈活的方式,允許輕鬆整合新資訊。中繼資料是幫助決定資料如何組織和存儲的指標,並根據資料類型有不同的名稱。一些常見的中繼資料名稱包括標籤、元素、實體和屬性。例如,一封典型的電子郵件訊息會有主題、正文和一組收件人,並可以根據發送者或發送時間進行組織。
半結構化資料的例子HTML、CSV 檔案、JavaScript Object Notation (JSON)
## 資料來源
資料來源是資料生成的初始位置,或其 "存在" 的地方,並會根據資料的收集方式和時間而有所不同。由使用者生成的資料被稱為原始資料,而二手資料則來自為一般用途收集資料的來源。例如,一群科學家在雨林中收集觀察資料被視為原始資料,而如果他們決定與其他科學家分享,對於使用這些資料的人來說則被視為二手資料。
資料庫是常見的資料來源,依賴資料庫管理系統來托管和維護資料,使用者使用稱為查詢的命令來探索資料。作為資料來源的檔案可以是音訊、影像和影片檔案,也可以是像 Excel 這樣的電子表格。網路來源是托管資料的常見位置資料庫和檔案都可以在其中找到。應用程式介面API允許程式設計師通過網路創建與外部使用者共享資料的方式而網頁爬取則是從網頁中提取資料的過程。[《資料操作》課程](../../../../../../../../../2-Working-With-Data) 將重點介紹如何使用各種資料來源。
## 結論
在本課程中,我們學到了:
- 資料是什麼
- 資料的描述方式
- 資料的分類和歸類方式
- 資料的來源
## 🚀 挑戰
Kaggle 是一個開放資料集的絕佳來源。使用 [資料集搜尋工具](https://www.kaggle.com/datasets) 找到一些有趣的資料集,並根據以下標準分類 3-5 個資料集:
- 資料是定量還是定性?
- 資料是結構化、非結構化還是半結構化?
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/5)
## 回顧與自學
- Microsoft Learn 單元 [分類你的資料](https://docs.microsoft.com/en-us/learn/modules/choose-storage-approach-in-azure/2-classify-data) 詳細介紹了結構化、半結構化和非結構化資料。
## 作業
[分類資料集](assignment.md)
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,70 @@
# 資料集分類
## 指導說明
按照此作業中的提示,識別並分類資料,並為每種資料類型選擇一個分類:
**結構類型**:結構化、半結構化或非結構化
**數值類型**:定性或定量
**來源類型**:原始或次級
1. 一家公司被收購,現在有了一家母公司。資料科學家從母公司收到了一份包含客戶電話號碼的電子表格。
結構類型:
數值類型:
來源類型:
---
2. 一款智慧手錶正在收集佩戴者的心率數據,原始數據以 JSON 格式儲存。
結構類型:
數值類型:
來源類型:
---
3. 一份關於員工士氣的職場調查,資料以 CSV 檔案形式儲存。
結構類型:
數值類型:
來源類型:
---
4. 天體物理學家正在訪問由太空探測器收集的星系資料庫。該資料包含每個星系中的行星數量。
結構類型:
數值類型:
來源類型:
---
5. 一款個人理財應用程式使用 API 連接用戶的金融帳戶,以計算其淨資產。用戶可以看到所有交易,格式為行和列,類似於電子表格。
結構類型:
數值類型:
來源類型:
## 評分標準
卓越 | 合格 | 需改進
--- | --- | --- |
正確識別所有結構、數值和來源類型 | 正確識別 3 種結構、數值和來源類型 | 正確識別 2 種或更少的結構、數值和來源類型 |
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,272 @@
# 統計與機率簡介
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/04-Statistics-Probability.png)|
|:---:|
| 統計與機率 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
統計學與機率論是數學中兩個密切相關的領域,對於數據科學非常重要。雖然在沒有深入數學知識的情況下也可以處理數據,但了解一些基本概念仍然是有益的。在這裡,我們將提供一個簡短的介紹,幫助你入門。
[![介紹影片](../../../../translated_images/zh-MO/video-prob-and-stats.e4282e5efa2f2543400843ed98b1057065c9600cebfc8a728e8931b5702b2ae4.png)](https://youtu.be/Z5Zy85g4Yjw)
## [課前測驗](https://ff-quizzes.netlify.app/en/ds/quiz/6)
## 機率與隨機變數
**機率** 是介於 0 和 1 之間的一個數字,用來表示某個 **事件** 發生的可能性。它被定義為正面結果(導致事件發生的結果)的數量,除以所有可能結果的總數,前提是所有結果的可能性相等。例如,當我們擲骰子時,得到偶數的機率是 3/6 = 0.5。
當我們談論事件時,我們使用 **隨機變數**。例如,表示擲骰子時得到的數字的隨機變數,其值範圍是 1 到 6。1 到 6 的數字集合被稱為 **樣本空間**。我們可以討論隨機變數取某個值的機率,例如 P(X=3)=1/6。
上述例子中的隨機變數被稱為 **離散型**,因為它有一個可數的樣本空間,也就是說可以列舉出單獨的值。有些情況下,樣本空間是一個實數範圍,或者是整個實數集合。這樣的變數被稱為 **連續型**。一個好的例子是公車到達的時間。
## 機率分佈
對於離散型隨機變數,我們可以用函數 P(X) 簡單地描述每個事件的機率。對於樣本空間 *S* 中的每個值 *s*,它會給出一個介於 0 和 1 之間的數字,並且所有事件的 P(X=s) 值的總和為 1。
最著名的離散分佈是 **均勻分佈**,其中樣本空間有 N 個元素,每個元素的機率相等,為 1/N。
描述連續型變數的機率分佈則更困難,這些變數的值來自某個區間 [a,b] 或整個實數集合 ℝ。以公車到達時間為例,事實上,公車在某個精確時間 *t* 到達的機率是 0
> 現在你知道了機率為 0 的事件是可能發生的,而且非常常見!至少每次公車到達時都是如此!
我們只能討論變數落在某個值區間內的機率,例如 P(t<sub>1</sub>≤X<t<sub>2</sub>)。在這種情況下,機率分佈由 **機率密度函數** p(x) 描述,其公式如下:
![P(t_1\le X<t_2)=\int_{t_1}^{t_2}p(x)dx](../../../../translated_images/zh-MO/probability-density.a8aad29f17a14afb519b407c7b6edeb9f3f9aa5f69c9e6d9445f604e5f8a2bf7.png)
連續型均勻分佈是均勻分佈的連續版本,定義在有限區間內。變數 X 落入某個區間的機率與區間長度 l 成正比,並且最大為 1。
另一個重要的分佈是 **正態分佈**,我們將在下面詳細討論。
## 平均值、方差與標準差
假設我們抽取了 n 個隨機變數 X 的樣本x<sub>1</sub>, x<sub>2</sub>, ..., x<sub>n</sub>。我們可以用傳統方式定義這些樣本的 **平均值**(或 **算術平均值**),公式為 (x<sub>1</sub>+x<sub>2</sub>+x<sub>n</sub>)/n。當樣本數量增加即 n→∞我們將得到分佈的平均值也稱為 **期望值**)。我們用 **E**(x) 表示期望值。
> 可以證明,對於任何離散分佈,其值為 {x<sub>1</sub>, x<sub>2</sub>, ..., x<sub>N</sub>},對應的機率為 p<sub>1</sub>, p<sub>2</sub>, ..., p<sub>N</sub>,期望值為 E(X)=x<sub>1</sub>p<sub>1</sub>+x<sub>2</sub>p<sub>2</sub>+...+x<sub>N</sub>p<sub>N</sub>
為了衡量數值的分散程度,我們可以計算方差 σ<sup>2</sup> = ∑(x<sub>i</sub> - μ)<sup>2</sup>/n其中 μ 是樣本的平均值。σ 被稱為 **標準差**,而 σ<sup>2</sup> 則被稱為 **方差**。
## 眾數、中位數與四分位數
有時候,平均值並不能充分代表數據的「典型」值。例如,當有一些極端值完全超出範圍時,它們可能會影響平均值。另一個良好的指標是 **中位數**,即一個值,使得一半的數據點低於它,另一半高於它。
為了幫助我們理解數據的分佈,討論 **四分位數** 是有幫助的:
* 第一四分位數Q125% 的數據低於此值
* 第三四分位數Q375% 的數據低於此值
我們可以用一個稱為 **盒形圖** 的圖表來表示中位數與四分位數之間的關係:
<img src="../../../../translated_images/zh-MO/boxplot_explanation.4039b7de08780fd4.webp" alt="盒形圖解釋" width="50%">
在這裡,我們還計算了 **四分位距** IQR=Q3-Q1以及所謂的 **離群值**——位於 [Q1-1.5*IQR,Q3+1.5*IQR] 範圍之外的值。
對於包含少量可能值的有限分佈,一個好的「典型」值是出現頻率最高的值,稱為 **眾數**。它通常應用於分類數據,例如顏色。考慮以下情況:我們有兩組人,一組強烈偏愛紅色,另一組偏愛藍色。如果我們用數字編碼顏色,最喜歡的顏色的平均值可能會落在橙色或綠色範圍,這並不能反映任何一組的實際偏好。然而,眾數可能是其中一種顏色,或者如果兩種顏色的投票人數相等,則為兩種顏色(在這種情況下,我們稱樣本為 **多眾數**)。
## 真實世界數據
當我們分析真實世界的數據時,這些數據通常不是隨機變數,因為我們並未進行未知結果的實驗。例如,考慮一組棒球隊員及其身體數據,如身高、體重和年齡。這些數字並不完全是隨機的,但我們仍然可以應用相同的數學概念。例如,一組人的體重序列可以被視為某個隨機變數的值序列。以下是來自 [美國職業棒球大聯盟](http://mlb.mlb.com/index.jsp) 的棒球隊員的體重序列,取自 [這個數據集](http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights)(為方便起見,僅顯示前 20 個值):
```
[180.0, 215.0, 210.0, 210.0, 188.0, 176.0, 209.0, 200.0, 231.0, 180.0, 188.0, 180.0, 185.0, 160.0, 180.0, 185.0, 197.0, 189.0, 185.0, 219.0]
```
> **注意**:要查看使用此數據集的示例,請參考 [配套筆記本](notebook.ipynb)。本課程中還有許多挑戰,你可以通過向該筆記本添加一些代碼來完成它們。如果你不確定如何操作數據,請不要擔心——我們稍後會回到使用 Python 處理數據的部分。如果你不知道如何在 Jupyter Notebook 中運行代碼,請參考 [這篇文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)。
以下是顯示我們數據的平均值、中位數和四分位數的盒形圖:
![體重盒形圖](../../../../translated_images/zh-MO/weight-boxplot.1dbab1c03af26f8a008fff4e17680082c8ab147d6df646cbac440bbf8f5b9c42.png)
由於我們的數據包含不同球員 **角色** 的信息,我們也可以按角色繪製盒形圖——這將幫助我們了解參數值在不同角色之間的差異。這次我們將考慮身高:
![按角色繪製的盒形圖](../../../../translated_images/zh-MO/boxplot_byrole.036b27a1c3f52d42f66fba2324ec5cde0a1bca6a01a619eeb0ce7cd054b2527b.png)
這個圖表表明,平均而言,一壘手的身高高於二壘手的身高。在本課程的後面部分,我們將學習如何更正式地檢驗這一假設,以及如何證明我們的數據在統計上具有顯著性。
> 在處理真實世界數據時,我們假設所有數據點都是從某個機率分佈中抽取的樣本。這一假設使我們能夠應用機器學習技術並構建有效的預測模型。
為了查看我們數據的分佈,我們可以繪製一個稱為 **直方圖** 的圖表。X 軸包含不同的體重區間(即 **箱**Y 軸顯示隨機變數樣本落入某個區間的次數。
![真實世界數據的直方圖](../../../../translated_images/zh-MO/weight-histogram.bfd00caf7fc30b145b21e862dba7def41c75635d5280de25d840dd7f0b00545e.png)
從這個直方圖中可以看出,所有值都集中在某個平均體重附近,距離平均體重越遠,該值出現的次數越少。也就是說,棒球隊員的體重非常不同於平均體重的可能性很低。體重的方差顯示了體重與平均值可能的差異程度。
> 如果我們取其他人的體重,而不是棒球聯盟的球員,分佈可能會有所不同。然而,分佈的形狀會保持相同,但平均值和方差會改變。因此,如果我們在棒球隊員上訓練模型,當應用於大學學生時可能會得出錯誤的結果,因為底層分佈不同。
## 正態分佈
我們上面看到的體重分佈非常典型,許多來自真實世界的測量值遵循相同類型的分佈,但具有不同的平均值和方差。這種分佈被稱為 **正態分佈**,在統計學中扮演著非常重要的角色。
使用正態分佈是生成潛在棒球隊員隨機體重的正確方法。一旦我們知道平均體重 `mean` 和標準差 `std`,我們可以用以下方式生成 1000 個體重樣本:
```python
samples = np.random.normal(mean,std,1000)
```
如果我們繪製生成樣本的直方圖,我們會看到與上面類似的圖像。如果我們增加樣本數量和箱數,我們可以生成更接近理想的正態分佈圖像:
![平均值=0標準差=1 的正態分佈](../../../../translated_images/zh-MO/normal-histogram.dfae0d67c202137d552d0015fb87581eca263925e512404f3c12d8885315432e.png)
*平均值=0標準差=1 的正態分佈*
## 信賴區間
當我們談論棒球隊員的體重時,我們假設存在某個 **隨機變數 W**,它對應於所有棒球隊員體重的理想機率分佈(即 **母體**)。我們的體重序列對應於所有棒球隊員的一個子集,我們稱之為 **樣本**。一個有趣的問題是,我們能否知道 W 的分佈參數,即母體的平均值和方差?
最簡單的答案是計算樣本的平均值和方差。然而,可能出現我們的隨機樣本未能準確代表完整母體的情況。因此,討論 **信賴區間** 是有意義的。
> **信賴區間** 是基於樣本估計母體真實平均值的範圍,其準確性具有一定的概率(或 **信賴水平**)。
假設我們有一個樣本 X
1</sub>, ..., X<sub>n</sub> 來自我們的分佈。每次我們從分佈中抽取樣本時,會得到不同的平均值 μ。因此,μ 可以被視為一個隨機變量。一個具有置信度 p 的 **置信區間** 是一對值 (L<sub>p</sub>,R<sub>p</sub>),使得 **P**(L<sub>p</sub>≤μ≤R<sub>p</sub>) = p也就是說測得的平均值落在該區間內的概率等於 p。
詳細討論如何計算這些置信區間超出了我們簡短介紹的範圍。更多細節可以參考 [維基百科](https://en.wikipedia.org/wiki/Confidence_interval)。簡而言之,我們定義了計算出的樣本平均值相對於總體真實平均值的分佈,這被稱為 **學生分佈**。
> **有趣的事實**:學生分佈是以數學家 William Sealy Gosset 的筆名 "Student" 命名的。他在健力士啤酒廠工作,根據其中一個說法,他的雇主不希望公眾知道他們使用統計測試來檢測原材料的質量。
如果我們希望以置信度 p 估計總體的平均值 μ,我們需要取學生分佈 A 的 *(1-p)/2 分位數*,這可以從表中查得,或者使用統計軟件(例如 Python、R 等)的內建函數計算。然後 μ 的區間將由 X±A*D/√n 給出,其中 X 是樣本的平均值D 是標準差。
> **注意**:我們同樣省略了關於 [自由度](https://en.wikipedia.org/wiki/Degrees_of_freedom_(statistics)) 的重要概念的討論,這在學生分佈中非常重要。您可以參考更完整的統計學書籍來深入理解這一概念。
在 [配套筆記本](notebook.ipynb) 中給出了計算體重和身高置信區間的例子。
| p | 體重平均值 |
|-----|-----------|
| 0.85 | 201.73±0.94 |
| 0.90 | 201.73±1.08 |
| 0.95 | 201.73±1.28 |
請注意,置信概率越高,置信區間越寬。
## 假設檢驗
在我們的棒球運動員數據集中,有不同的球員角色,可以總結如下(請參考 [配套筆記本](notebook.ipynb) 查看如何計算此表):
| 角色 | 身高 | 體重 | 數量 |
|-------------------|------------|------------|------|
| 捕手 | 72.723684 | 204.328947 | 76 |
| 指定打擊 | 74.222222 | 220.888889 | 18 |
| 一壘手 | 74.000000 | 213.109091 | 55 |
| 外野手 | 73.010309 | 199.113402 | 194 |
| 救援投手 | 74.374603 | 203.517460 | 315 |
| 二壘手 | 71.362069 | 184.344828 | 58 |
| 游擊手 | 71.903846 | 182.923077 | 52 |
| 先發投手 | 74.719457 | 205.163636 | 221 |
| 三壘手 | 73.044444 | 200.955556 | 45 |
我們可以注意到,一壘手的平均身高高於二壘手。因此,我們可能會得出結論:**一壘手比二壘手高**。
> 這種說法被稱為 **假設**,因為我們並不知道這一事實是否真實。
然而,是否可以得出這一結論並不總是顯而易見的。從上面的討論中我們知道,每個平均值都有一個相關的置信區間,因此這種差異可能僅僅是統計誤差。我們需要更正式的方法來檢驗我們的假設。
讓我們分別計算一壘手和二壘手身高的置信區間:
| 置信度 | 一壘手 | 二壘手 |
|--------|-------------|-------------|
| 0.85 | 73.62..74.38 | 71.04..71.69 |
| 0.90 | 73.56..74.44 | 70.99..71.73 |
| 0.95 | 73.47..74.53 | 70.92..71.81 |
我們可以看到,在任何置信度下,這些區間都不重疊。這證明了一壘手比二壘手高的假設。
更正式地說,我們正在解決的問題是檢查 **兩個概率分佈是否相同**,或者至少是否具有相同的參數。根據分佈的類型,我們需要使用不同的檢驗方法。如果我們知道分佈是正態分佈,我們可以應用 **[學生 t 檢驗](https://en.wikipedia.org/wiki/Student%27s_t-test)**。
在學生 t 檢驗中,我們計算所謂的 **t 值**,它表示平均值之間的差異,同時考慮到方差。已證明 t 值遵循 **學生分佈**,這使我們能夠獲得給定置信水平 **p** 的臨界值(這可以計算,或者在數值表中查找)。然後我們將 t 值與該臨界值進行比較,以接受或拒絕假設。
在 Python 中,我們可以使用 **SciPy** 套件,其中包括 `ttest_ind` 函數(以及許多其他有用的統計函數!)。它為我們計算 t 值,並且還反向查找置信 p 值,因此我們只需查看置信度即可得出結論。
例如,我們對一壘手和二壘手身高的比較給出了以下結果:
```python
from scipy.stats import ttest_ind
tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Designated_Hitter',['Height']],equal_var=False)
print(f"T-value = {tval[0]:.2f}\nP-value: {pval[0]}")
```
```
T-value = 7.65
P-value: 9.137321189738925e-12
```
在我們的情況下p 值非常低,這意味著有強有力的證據支持一壘手比二壘手高。
此外,我們還可能想要檢驗其他類型的假設,例如:
* 證明某個樣本遵循某種分佈。在我們的例子中,我們假設身高是正態分佈的,但這需要正式的統計驗證。
* 證明樣本的平均值對應於某個預定值。
* 比較多個樣本的平均值(例如,不同年齡組之間的幸福感差異)。
## 大數法則與中心極限定理
正態分佈如此重要的原因之一是所謂的 **中心極限定理**。假設我們有一個包含獨立 N 個值 X<sub>1</sub>, ..., X<sub>N</sub> 的大樣本,這些值來自任何具有平均值 μ 和方差 σ<sup>2</sup> 的分佈。那麼,當 N 足夠大時(換句話說,當 N→∞ 時),平均值 Σ<sub>i</sub>X<sub>i</sub> 將呈正態分佈,平均值為 μ,方差為 σ<sup>2</sup>/N。
> 中心極限定理的另一種解釋是,無論分佈如何,當你計算任何隨機變量值的和的平均值時,最終會得到正態分佈。
由中心極限定理還可以得出,當 N→∞ 時,樣本平均值等於 μ 的概率趨於 1。這被稱為 **大數法則**。
## 協方差與相關性
數據科學的一個重要任務是發現數據之間的關係。我們說兩個序列 **相關**,當它們在同一時間表現出相似的行為時,即它們同時上升/下降,或者一個序列上升時另一個序列下降,反之亦然。換句話說,兩個序列之間似乎存在某種關係。
> 相關性並不一定表示兩個序列之間存在因果關係;有時兩個變量可能依賴於某個外部原因,或者兩個序列的相關性純屬偶然。然而,強數學相關性是一個很好的指示,表明兩個變量之間可能存在某種聯繫。
數學上,顯示兩個隨機變量之間關係的主要概念是 **協方差**其計算公式為Cov(X,Y) = **E**\[(X-**E**(X))(Y-**E**(Y))\]。我們計算兩個變量偏離其平均值的偏差,然後將這些偏差相乘。如果兩個變量一起偏離,乘積將始終為正值,從而累加為正協方差。如果兩個變量不同步偏離(即當一個低於平均值時,另一個高於平均值),我們將始終得到負數,從而累加為負協方差。如果偏差彼此獨立,它們將大致加總為零。
協方差的絕對值並不能告訴我們相關性的大小,因為它取決於實際值的大小。為了對其進行標準化,我們可以將協方差除以兩個變量的標準差,得到 **相關性**。相關性的好處是它始終在 [-1,1] 範圍內,其中 1 表示值之間的強正相關,-1 表示強負相關0 表示完全無相關(變量是獨立的)。
**例子**:我們可以計算棒球運動員數據集中體重和身高之間的相關性:
```python
print(np.corrcoef(weights,heights))
```
結果,我們得到如下的 **相關矩陣**
```
array([[1. , 0.52959196],
[0.52959196, 1. ]])
```
> 相關矩陣 C 可以針對任意數量的輸入序列 S<sub>1</sub>, ..., S<sub>n</sub> 計算。C<sub>ij</sub> 的值是 S<sub>i</sub> 和 S<sub>j</sub> 之間的相關性,對角線元素始終為 1這也是 S<sub>i</sub> 的自相關性)。
在我們的例子中,值 0.53 表明一個人的體重和身高之間存在一定的相關性。我們還可以繪製一個值對另一個值的散點圖,以直觀地查看關係:
![體重與身高的關係](../../../../translated_images/zh-MO/weight-height-relationship.3f06bde4ca2aba9974182c4ef037ed602acd0fbbbbe2ca91cefd838a9e66bcf9.png)
> 更多關於相關性和協方差的例子可以在 [配套筆記本](notebook.ipynb) 中找到。
## 結論
在本節中,我們學習了:
* 數據的基本統計屬性,例如平均值、方差、眾數和四分位數
* 隨機變量的不同分佈,包括正態分佈
* 如何找到不同屬性之間的相關性
* 如何使用數學和統計的嚴謹工具來證明一些假設
* 如何根據數據樣本計算隨機變量的置信區間
雖然這絕不是概率和統計學中所有主題的完整列表,但應該足以讓您順利開始這門課程。
## 🚀 挑戰
使用筆記本中的示例代碼來檢驗以下假設:
1. 一壘手比二壘手年齡更大
2. 一壘手比三壘手更高
3. 游擊手比二壘手更高
## [課後測驗](https://ff-quizzes.netlify.app/en/ds/quiz/7)
## 複習與自學
概率和統計是一個非常廣泛的主題,它值得一門專門的課程。如果您有興趣深入理論,您可能希望繼續閱讀以下書籍:
1. [Carlos Fernandez-Granda](https://cims.nyu.edu/~cfgranda/) 來自紐約大學的優秀講義 [Probability and Statistics for Data Science](https://cims.nyu.edu/~cfgranda/pages/stuff/probability_stats_for_DS.pdf)(在線可用)
2. [Peter and Andrew Bruce. Practical Statistics for Data Scientists.](https://www.oreilly.com/library/view/practical-statistics-for/9781491952955/) [[R 語言示例代碼](https://github.com/andrewgbruce/statistics-for-data-scientists)]。
3. [James D. Miller. Statistics for Data Science](https://www.packtpub.com/product/statistics-for-data-science/9781788290678) [[R 語言示例代碼](https://github.com/PacktPublishing/Statistics-for-Data-Science)]
## 作業
[小型糖尿病研究](assignment.md)
## 致謝
本課程由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。

@ -0,0 +1,260 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"## 概論:機率與統計 \n",
"## 作業 \n",
"\n",
"在這次作業中,我們將使用糖尿病患者的數據集,該數據集取自[這裡](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html)。 \n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 13,
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"df = pd.read_csv(\"../../data/diabetes.tsv\",sep='\\t')\n",
"df.head()"
],
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" AGE SEX BMI BP S1 S2 S3 S4 S5 S6 Y\n",
"0 59 2 32.1 101.0 157 93.2 38.0 4.0 4.8598 87 151\n",
"1 48 1 21.6 87.0 183 103.2 70.0 3.0 3.8918 69 75\n",
"2 72 2 30.5 93.0 156 93.6 41.0 4.0 4.6728 85 141\n",
"3 24 1 25.3 84.0 198 131.4 40.0 5.0 4.8903 89 206\n",
"4 50 1 23.0 101.0 192 125.4 52.0 4.0 4.2905 80 135"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>AGE</th>\n",
" <th>SEX</th>\n",
" <th>BMI</th>\n",
" <th>BP</th>\n",
" <th>S1</th>\n",
" <th>S2</th>\n",
" <th>S3</th>\n",
" <th>S4</th>\n",
" <th>S5</th>\n",
" <th>S6</th>\n",
" <th>Y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>59</td>\n",
" <td>2</td>\n",
" <td>32.1</td>\n",
" <td>101.0</td>\n",
" <td>157</td>\n",
" <td>93.2</td>\n",
" <td>38.0</td>\n",
" <td>4.0</td>\n",
" <td>4.8598</td>\n",
" <td>87</td>\n",
" <td>151</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>48</td>\n",
" <td>1</td>\n",
" <td>21.6</td>\n",
" <td>87.0</td>\n",
" <td>183</td>\n",
" <td>103.2</td>\n",
" <td>70.0</td>\n",
" <td>3.0</td>\n",
" <td>3.8918</td>\n",
" <td>69</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>72</td>\n",
" <td>2</td>\n",
" <td>30.5</td>\n",
" <td>93.0</td>\n",
" <td>156</td>\n",
" <td>93.6</td>\n",
" <td>41.0</td>\n",
" <td>4.0</td>\n",
" <td>4.6728</td>\n",
" <td>85</td>\n",
" <td>141</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>24</td>\n",
" <td>1</td>\n",
" <td>25.3</td>\n",
" <td>84.0</td>\n",
" <td>198</td>\n",
" <td>131.4</td>\n",
" <td>40.0</td>\n",
" <td>5.0</td>\n",
" <td>4.8903</td>\n",
" <td>89</td>\n",
" <td>206</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>50</td>\n",
" <td>1</td>\n",
" <td>23.0</td>\n",
" <td>101.0</td>\n",
" <td>192</td>\n",
" <td>125.4</td>\n",
" <td>52.0</td>\n",
" <td>4.0</td>\n",
" <td>4.2905</td>\n",
" <td>80</td>\n",
" <td>135</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {},
"execution_count": 13
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"在此數據集中,欄位如下:\n",
"* 年齡和性別不需額外解釋\n",
"* BMI 是身體質量指數\n",
"* BP 是平均血壓\n",
"* S1 到 S6 是不同的血液測量值\n",
"* Y 是疾病在一年內進展的定性指標\n",
"\n",
"讓我們使用概率和統計方法來研究這個數據集。\n",
"\n",
"### 任務 1計算所有值的平均值和方差\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"### 任務 2根據性別繪製 BMI、BP 和 Y 的箱型圖\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"### 任務 4測試不同變數與疾病進展 (Y) 之間的相關性\n",
"\n",
"> **提示** 相關矩陣可以提供最有用的資訊,幫助判斷哪些值是相互依賴的。\n"
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {}
},
{
"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",
"version": "3.8.8",
"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.8.8 64-bit (conda)"
},
"interpreter": {
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
},
"coopTranslator": {
"original_hash": "6d945fd15163f60cb473dbfe04b2d100",
"translation_date": "2025-09-06T17:11:24+00:00",
"source_file": "1-Introduction/04-stats-and-probability/assignment.ipynb",
"language_code": "mo"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,31 @@
# 小型糖尿病研究
在這次作業中,我們將使用一個來自[這裡](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html)的小型糖尿病患者數據集。
| | 年齡 (AGE) | 性別 (SEX) | 身體質量指數 (BMI) | 血壓 (BP) | S1 | S2 | S3 | S4 | S5 | S6 | Y疾病進展 |
|---|-----------|-----------|------------------|----------|----|----|----|----|----|----|--------------|
| 0 | 59 | 2 | 32.1 | 101. | 157 | 93.2| 38.0| 4. | 4.8598 | 87 | 151 |
| 1 | 48 | 1 | 21.6 | 87.0 | 183 | 103.2| 70. | 3. | 3.8918 | 69 | 75 |
| 2 | 72 | 2 | 30.5 | 93.0 | 156 | 93.6| 41.0| 4.0 | 4. | 85 | 141 |
| ... | ... | ... | ... | ... | ...| ...| ...| ...| ...| ...| ... |
## 指導說明
* 在 jupyter notebook 環境中打開 [assignment notebook](assignment.ipynb)
* 完成 notebook 中列出的所有任務,包括:
* [ ] 計算所有值的平均值和方差
* [ ] 根據性別繪製 BMI、BP 和 Y 的箱型圖
* [ ] 分析年齡、性別、BMI 和 Y 變數的分佈情況
* [ ] 測試不同變數與疾病進展Y之間的相關性
* [ ] 檢驗糖尿病進展程度在男性和女性之間是否存在差異的假設
## 評分標準
優秀 | 合格 | 需要改進
--- | --- | -- |
所有要求的任務均已完成,並附有圖表說明和解釋 | 大部分任務已完成,但缺少圖表或獲得數值的解釋或結論 | 僅完成基本任務,例如計算平均值/方差和基本圖表,未從數據中得出結論
---
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或誤讀概不負責。

@ -0,0 +1,581 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction to Probability and Statistics\n",
"In this notebook, we will play around with some of the concepts we have previously discussed. Many concepts from probability and statistics are well-represented in major libraries for data processing in Python, such as `numpy` and `pandas`.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import random\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 隨機變量與分佈\n",
"讓我們從介乎 0 至 9 的均勻分佈中抽取 30 個樣本值。 我們亦會計算平均數和變異數。\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sample = [ random.randint(0,10) for _ in range(30) ]\n",
"print(f\"Sample: {sample}\")\n",
"print(f\"Mean = {np.mean(sample)}\")\n",
"print(f\"Variance = {np.var(sample)}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"為了視覺上估計樣本中有多少不同的值,我們可以繪製**直方圖**\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.hist(sample)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 分析實際數據\n",
"\n",
"均值和方差在分析實際世界數據時非常重要。讓我們從[SOCR MLB Height/Weight Data](http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights)載入有關棒球運動員的數據。\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv(\"../../data/SOCR_MLB.tsv\",sep='\\t', header=None, names=['Name','Team','Role','Weight','Height','Age'])\n",
"df\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 我們在這裏使用一個名為 [**Pandas**](https://pandas.pydata.org/) 的套件來進行數據分析。我們會在這門課程稍後討論更多關於 Pandas 和在 Python 中處理數據的內容。\n",
"\n",
"讓我們計算年齡、身高和體重的平均值:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df[['Age','Height','Weight']].mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"現在讓我們專注於身高,並計算標準差和變異數:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(list(df['Height'])[:20])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mean = df['Height'].mean()\n",
"var = df['Height'].var()\n",
"std = df['Height'].std()\n",
"print(f\"Mean = {mean}\\nVariance = {var}\\nStandard Deviation = {std}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除了平均值之外,查看中位數和四分位數也是很有意義的。它們可以用**箱型圖**來視覺化:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,2))\n",
"plt.boxplot(df['Height'].ffill(), vert=False, showmeans=True)\n",
"plt.grid(color='gray', linestyle='dotted')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我哋亦可以對數據集中嘅子集製作箱形圖,例如按球員角色分組。\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.boxplot(column='Height', by='Role', figsize=(10,8))\n",
"plt.xticks(rotation='vertical')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> **注意**:這個圖表表明,平均而言,一壘手的身高較二壘手的身高高。稍後我們會學習如何更正式地檢驗這個假設,以及如何證明我們的數據在統計上顯著支持這一點。 \n",
"\n",
"年齡、身高和體重都是連續隨機變數。你認為它們的分佈是什麼?一個好方法是繪製值的直方圖: \n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df['Weight'].hist(bins=15, figsize=(10,6))\n",
"plt.suptitle('Weight distribution of MLB Players')\n",
"plt.xlabel('Weight')\n",
"plt.ylabel('Count')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 常態分佈\n",
"\n",
"讓我們創建一個人工重量樣本,該樣本遵循與我們的真實數據具有相同均值和方差的常態分佈:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"generated = np.random.normal(mean, std, 1000)\n",
"generated[:20]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.hist(generated, bins=15)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.hist(np.random.normal(0,1,50000), bins=300)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"由於現實生活中大多數數值呈常態分佈,因此我們不應使用均勻隨機數生成器來生成樣本數據。以下是如果我們嘗試使用均勻分佈(由 `np.random.rand` 生成)來生成體重數據時會發生的情況:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"wrong_sample = np.random.rand(1000)*2*std+mean-std\n",
"plt.figure(figsize=(10,6))\n",
"plt.hist(wrong_sample)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 置信區間\n",
"\n",
"現在讓我們計算棒球運動員體重及身高的置信區間。我們將使用[這個stackoverflow討論中的程式碼](https://stackoverflow.com/questions/15033511/compute-a-confidence-interval-from-sample-data)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import scipy.stats\n",
"\n",
"def mean_confidence_interval(data, confidence=0.95):\n",
" a = 1.0 * np.array(data)\n",
" n = len(a)\n",
" m, se = np.mean(a), scipy.stats.sem(a)\n",
" h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)\n",
" return m, h\n",
"\n",
"for p in [0.85, 0.9, 0.95]:\n",
" m, h = mean_confidence_interval(df['Weight'].fillna(method='pad'),p)\n",
" print(f\"p={p:.2f}, mean = {m:.2f} ± {h:.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 假設檢定\n",
"\n",
"讓我們探索我們棒球選手資料集中的不同角色:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.groupby('Role').agg({ 'Weight' : 'mean', 'Height' : 'mean', 'Age' : 'count'}).rename(columns={ 'Age' : 'Count'})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"讓我們測試一個假設,即一壘手的身高比二壘手高。最簡單的方法是檢驗置信區間:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for p in [0.85,0.9,0.95]:\n",
" m1, h1 = mean_confidence_interval(df.loc[df['Role']=='First_Baseman',['Height']],p)\n",
" m2, h2 = mean_confidence_interval(df.loc[df['Role']=='Second_Baseman',['Height']],p)\n",
" print(f'Conf={p:.2f}, 1st basemen height: {m1-h1[0]:.2f}..{m1+h1[0]:.2f}, 2nd basemen height: {m2-h2[0]:.2f}..{m2+h2[0]:.2f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我哋可以見到啲區間冇重疊。\n",
"\n",
"一個統計上更正確嘅方法去證明呢個假設係用**Student t檢定**\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from scipy.stats import ttest_ind\n",
"\n",
"tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Second_Baseman',['Height']],equal_var=False)\n",
"print(f\"T-value = {tval[0]:.2f}\\nP-value: {pval[0]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`ttest_ind` 函式返回的兩個值是:\n",
"* p 值可以被視為兩個分佈具有相同平均值的機率。在我們的案例中,該值非常低,表示有強烈證據支持一壘手較高。\n",
"* t 值是標準化平均差的中間值,用於 t 檢定,並且會與給定信心水準的閾值進行比較。\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 模擬常態分佈與中心極限定理\n",
"\n",
"Python 的偽隨機生成器設計成給我們一個均勻分佈。如果我們想要建立一個常態分佈的生成器,可以使用中心極限定理。要取得常態分佈的值,我們只需計算均勻生成樣本的平均值。\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def normal_random(sample_size=100):\n",
" sample = [random.uniform(0,1) for _ in range(sample_size) ]\n",
" return sum(sample)/sample_size\n",
"\n",
"sample = [normal_random() for _ in range(100)]\n",
"plt.figure(figsize=(10,6))\n",
"plt.hist(sample)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 相關性與邪惡棒球公司\n",
"\n",
"相關性讓我們能夠找到數據序列之間的關係。在我們的玩具範例中,假設有一家邪惡的棒球公司根據球員的身高支付薪水——球員越高,薪水越多。假設有一個基本薪資為$1000並根據身高額外獎勵$0到$100。我們將採用MLB的真實球員並計算他們的虛擬薪水\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"heights = df['Height'].fillna(method='pad')\n",
"salaries = 1000+(heights-heights.min())/(heights.max()-heights.mean())*100\n",
"print(list(zip(heights, salaries))[:10])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"現在讓我們計算這些序列的協方差和相關係數。`np.cov` 將會給我們所謂的**協方差矩陣**,這是協方差對多個變量的擴展。協方差矩陣 $M$ 的元素 $M_{ij}$ 是輸入變量 $X_i$ 和 $X_j$ 之間的協方差,而對角線上的值 $M_{ii}$ 是 $X_{i}$ 的變異數。類似地,`np.corrcoef` 將會給我們**相關矩陣**。\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(f\"Covariance matrix:\\n{np.cov(heights, salaries)}\")\n",
"print(f\"Covariance = {np.cov(heights, salaries)[0,1]}\")\n",
"print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"相關係數等於1表示兩個變數之間存在強烈的**線性關係**。我們可以通過繪製一個值與另一個值的圖形來直觀地看到這種線性關係:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.scatter(heights,salaries)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"讓我們看看如果關係不是線性會發生什麼。假設我們的公司決定隱藏身高和薪水之間明顯的線性依賴,並在公式中引入一些非線性,如 `sin`\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"salaries = 1000+np.sin((heights-heights.min())/(heights.max()-heights.mean()))*100\n",
"print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在這種情況下,相關性稍微小一些,但仍然相當高。現在,為了使關係更不明顯,我們可能想通過向薪水中加入一些隨機變量來增加額外的隨機性。讓我們看看會發生什麼:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"salaries = 1000+np.sin((heights-heights.min())/(heights.max()-heights.mean()))*100+np.random.random(size=len(heights))*20-10\n",
"print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.scatter(heights, salaries)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 你能猜到為什麼點會排成這樣的垂直線嗎?\n",
"\n",
"我們已經觀察到像薪水這種人工設計的概念與觀察變量*身高*之間的相關性。現在讓我們也看看兩個觀察變量,比如身高和體重,是否也存在相關性:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.corrcoef(df['Height'].ffill(),df['Weight'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不幸的是,我們沒有得到任何結果——只有一些奇怪的 `nan` 值。這是因為我們序列中的一些值未定義,表示為 `nan`,這導致運算結果也未定義。從矩陣中我們可以看到,`Weight` 是有問題的欄位,因為已經計算了 `Height` 值之間的自我相關。\n",
"\n",
"> 此範例顯示了**資料準備**和**清理**的重要性。沒有適當的資料,我們無法計算任何東西。\n",
"\n",
"讓我們使用 `fillna` 方法來填補缺失值,並計算相關性:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.corrcoef(df['Height'].fillna(method='pad'), df['Weight'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"確實存在相關性,但沒有我們人工示例中的那麼強烈。事實上,如果我們觀察一個數值與另一個數值的散點圖,這種關係會不那麼明顯:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.scatter(df['Weight'],df['Height'])\n",
"plt.xlabel('Weight')\n",
"plt.ylabel('Height')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion\n",
"\n",
"在本筆記本中,我們學會了如何對資料進行基本操作以計算統計函數。我們現在知道如何使用完善的數學和統計工具來驗證某些假設,以及如何根據資料樣本計算任意變數的信賴區間。\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**免責聲明**\n本文件是使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們努力確保準確性,但請注意自動翻譯可能包含錯誤或不準確之處。請以原文文件為權威資料來源。對於重要資訊,建議採用專業人工翻譯。對於因使用此翻譯而引起的任何誤解或錯誤詮釋,我們概不負責。\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
"metadata": {
"interpreter": {
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
},
"coopTranslator": {
"original_hash": "0f899e3c5019f948e7c787b22f3b2304",
"translation_date": "2026-01-16T10:08:43+00:00",
"source_file": "1-Introduction/04-stats-and-probability/notebook.ipynb",
"language_code": "mo"
}
},
"nbformat": 4,
"nbformat_minor": 4
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,22 @@
# 資料科學簡介
![數據運作](../../../translated_images/zh-MO/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) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對於因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。
Loading…
Cancel
Save