@ -1,61 +1,63 @@
# 使用數據: Python 和 Pandas 庫
# 與資料共舞: Python 與 Pandas 函式 庫
|  繪製的速記圖 ](../../sketchnotes/07-WorkWithPython.png) |
|  製作 ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| 使用 Python - _由 [@nitya](https://twitter.com/nitya) 繪製的速記圖_ |
| 與 Python 共舞 - _速記筆記作者 [@nitya](https://twitter.com/nitya)_ |
[](https://youtu.be/dZjWOGbsN4Y)
[](https://youtu.be/dZjWOGbsN4Y)
雖然資料庫提供了非常高效的方式來存儲數據並使用查詢語言進行查詢,但最靈活的數據處理方式是編寫自己的程式來操作數據。在許多情況下,使用資料庫查詢可能更有效。然而,在某些需要更複雜數據處理的情況下,使用 SQL 可能不容易完成。
雖然資料庫提供非常有效率的方式來存放資料並使用查詢語言查詢,但處理資料最靈活的方式是撰寫自己的程式來操作資料。許多情況下,使用資料庫查詢會是更有效率的方式。然而當需要複雜的資料處理時,用 SQL 就無法輕易完成。
資料處理可以用任何程式語言進行,但某些語言在資料操作方面層級較高。資料科學家通常偏好以下其中一種語言:
數據處理可以用任何程式語言編寫,但有些語言在處理數據方面更高效。數據科學家通常偏好以下幾種語言:
* ** [Python ](https://www.python.org/ )**, 一種通用程式語言, 由於簡單易學, 經常被認為是初學者最佳選擇。Python 擁有許多額外的函式庫,可以幫助你解決許多實際問題,例如從 ZIP 壓縮檔案擷取資料, 或將圖片轉成灰階。除了資料科學之外, Python 也常用於網站開發。
* ** [R ](https://www.r-project.org/ )** 是專門為統計資料處理設計的傳統工具箱。它擁有龐大的函式庫資源庫 (CRAN),因此是資料處理的良好選擇。但 R 不是通用程式語言,在資料科學領域之外很少使用。
* ** [Julia ](https://julialang.org/ )** 是另種專為資料科學開發的語言,目標是比 Python 擁有更好的效能,是科學實驗的絕佳工具。
* ** [Python ](https://www.python.org/ )** 是一種通用程式語言, 因其簡單性常被認為是初學者的最佳選擇之一。Python 擁有許多額外的庫,可以幫助解決許多實際問題,例如從 ZIP 壓縮檔案中提取數據, 或將圖片轉換為灰度。除了數據科學, Python 也常用於網頁開發。
* ** [R ](https://www.r-project.org/ )** 是一個傳統工具箱, 專為統計數據處理而設計。它擁有大量的庫資源( CRAN) , 使其成為數據處理的良好選擇。然而, R 不是通用程式語言,通常僅用於數據科學領域。
* ** [Julia ](https://julialang.org/ )** 是另一種專為數據科學設計的語言。它旨在提供比 Python 更好的性能,是科學實驗的理想工具。
本課程將專注於使用 Python 進行簡單資料處理,假設你對該語言有基本熟悉。如果你想深入學習 Python, 可以參考以下資源:
在本課程中,我們將重點使用 Python 進行簡單的數據處理。我們假設您已對該語言有基本的熟悉。如果您希望更深入地了解 Python, 可以參考以下資源:
* [有趣學習 Python: 烏龜圖形與分形 ](https://github.com/shwars/pycourse ) – GitHub 上的 Python 快速入門課程
* [Python 入門初階學習路線 ](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum ),在 [Microsoft Learn ](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum ) 平台提供
* [使用 Turtle Graphics 和 Fractals 以有趣的方式學習 Python ](https://github.com/shwars/pycourse ) - 基於 GitHub 的 Python 程式快速入門課程
* [從 Python 開始您的第一步 ](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum ) - [Microsoft Learn ](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum ) 上的學習路徑
資料的型態多種多樣。這堂課將討論三種資料形式——< strong > 表格式資料< / strong > 、< strong > 文字資料< / strong > 及< strong > 影像資料< / strong > 。
數據可以有多種形式。在本課程中,我們將考慮三種數據形式:**表格數據**、**文本**和**圖片** 。
我們將著重幾個資料處理範例,而非完整介紹所有相關函式庫。這將幫助你理解其中的主要概念,並為你提供在需要時尋找解決方案的方法 。
我們將重點介紹一些數據處理的例子,而不是全面概述所有相關庫。這樣可以幫助您了解主要概念,並在需要時知道如何尋找解決方案 。
> < strong > 最實用的建議< / strong > :當你想進行某項資料操作,但不知道怎麼做時,請嘗試在網路上搜尋。[Stackoverflow](https://stackoverflow.com/) 通常有許多 Python 範例程式碼,可以應用於各種典型任務 。
> ** 最有用的建議**:當您需要對數據執行某些操作但不知道如何進行時,嘗試在網路上搜索。[Stackoverflow](https://stackoverflow.com/) 通常包含許多針對常見任務的 Python 代碼範例。
## [課前測驗 ](https://ff-quizzes.netlify.app/en/ds/quiz/12 )
## 表格數據和 Dataframes
## [課前小考 ](https://ff-quizzes.netlify.app/en/ds/quiz/12 )
當我們討論關係型資料庫時,您已經接觸過表格數據。當您擁有大量數據,並且它包含在許多不同的關聯表中時,使用 SQL 來處理它是非常合理的。然而,在許多情況下,我們擁有一個數據表,並需要對該數據進行一些**理解**或**洞察**,例如分佈、值之間的相關性等。在數據科學中,經常需要對原始數據進行一些轉換,然後進行可視化。這兩個步驟都可以使用 Python 輕鬆完成。
## 表格式資料與 DataFrame
Python 中有兩個最有用的庫可以幫助您處理表格數據:
* ** [Pandas ](https://pandas.pydata.org/ )** 允許您操作所謂的 **Dataframes** ,它類似於關係型表格。您可以擁有命名的列,並對行、列以及整個 Dataframe 執行不同的操作。
* ** [Numpy ](https://numpy.org/ )** 是一個用於處理 ** 張量**(即多維**陣列**)的庫。陣列的值具有相同的基礎類型,它比 Dataframe 更簡單,但提供了更多的數學操作,並且開銷更少。
在談到關聯式資料庫時,你已經接觸過表格式資料。當你有龐大資料且包含多個相互連結的資料表時,使用 SQL 來處理非常合理。然而,許多情況是我們擁有一張資料表,希望獲得該資料的< strong > 認識< / strong > 或< strong > 洞察< / strong > ,例如分佈情況、數值間的相關性等。在資料科學中,許多情況需要對原始資料進行轉換,接著進行視覺化。這些任務都可以透過 Python 輕鬆完成。
此外,還有幾個您應該了解的庫 :
* ** [Matplotlib](https://matplotlib.org/ )** 是一個用於數據可視化和繪製圖表的庫
* ** [SciPy](https://www.scipy.org/ )** 是一個包含一些額外科學函數的庫。我們在討論概率和統計時已經接觸過該庫
Python 有兩個最常用的函式庫幫助你處理表格式資料:
* ** [Pandas](https://pandas.pydata.org/ )** 允許你操作稱為 **Dataframe** 的結構,它類似於關聯型資料表。你可以擁有具名稱的欄位,且能對列、欄及整個 Dataframe 執行各種操作。
* ** [Numpy](https://numpy.org/ )** 是操作 < strong > 張量</ strong > (即多維度 < strong > 陣列</ strong > )的函式庫。陣列採用相同底層型態,結構較 Dataframe 簡單,但提供更多數學運算且開銷較小。
以下是您通常在 Python 程式開頭用來導入這些庫的代碼:
另外還有幾個你應該知道的函式庫:
* ** [Matplotlib ](https://matplotlib.org/ )** 是用於資料視覺化與繪圖的函式庫
* ** [SciPy ](https://www.scipy.org/ )** 包含額外的科學運算功能,之前談到機率與統計時已出現過它
下面是一段通常用作於 Python 程式開頭,導入上述函式庫的範例代碼:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # 你需要指定你所需的確切子套件
```
Pandas 圍繞幾個基本概念進行 。
Pandas 依靠幾個基本概念構成 。
### Series
**Series** 是一系列值,類似於列表或 numpy 陣列。主要區別在於 Series 還具有**索引**,當我們對 Series 進行操作(例如相加)時,索引會被考慮在內。索引可以像整數行號一樣簡單(當從列表或陣列創建 Series 時,默認使用此索引),也可以具有複雜結構,例如日期區間。
**Series** 是一系列數值序列,類似清單或 numpy 陣列。主要差異是 series 擁有 < strong > 索引值< / strong > ,且當我們對 series 操作(如相加)時,會考慮索引。索引可簡單為整數列號(當從清單或陣列建立 series 時預設使用),也可以是複雜的結構,例如日期區間。
> < strong > 注意</ strong > :附帶的筆記本 [`notebook.ipynb` ](notebook.ipynb ) 含有 Pandas 入門範例。我們此處只大略說明部分範例,你也非常歡迎閱讀完整筆記本。
> ** 注意**:在附帶的筆記本 [`notebook.ipynb` ](notebook.ipynb ) 中有一些 Pandas 的入門代碼。我們在此僅概述一些例子,您可以查看完整的筆記本。
以範例說明:假設我們想分析冰淇淋店的銷售量。先生成一段銷售數量(每日銷售件數)的 series:
舉例來說:我們想分析冰淇淋店的銷售情況。讓我們生成一段時間內的銷售數據(每天售出的商品數量):
```python
start_date = "Jan 1, 2020"
end_date = "Mar 31, 2020"
@ -66,45 +68,45 @@ items_sold.plot()
```

假設每週我們都會為朋友舉辦派對,並額外拿出 10 盒冰淇淋。我們可以創建另一個以週為索引的 Series 來展示這一點 :
假設每週我們會為朋友聚會準備額外 10 包冰淇淋,並且以週為索引建立另一個 series, 來表示額外銷售量 :
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
當我們將兩個 Series 相加時,我們得到總數 :
將兩個 series 相加,得到總銷售數量 :
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```

> ** 注意**:我們並未使用簡單語法 `total_items+additional_items` 。如果使用該語法,我們會在結果 Series 中得到許多 `NaN` ( *非數值*)值。這是因為在 `additional_items` Series 的某些索引點缺少值,而將 `NaN` 與任何值相加會得到 `NaN` 。因此,我們需要在相加時 指定 `fill_value` 參數。
> < strong > 注意</ strong > :我們沒有直接使用簡單語法 `total_items+additional_items` 。如果如此,我們會得到許多 `NaN` (非數值)在結果 series 中。原因是 `additional_items` series 的部分索引值不存在,任何數值與 `NaN` 相加均為 `NaN` 。因此在相加時需 指定 `fill_value` 參數。
使用時間序列,我們還可以**重新取樣**不同的時間間隔。例如,假設我們想計算每月的平均銷售量。我們可以使 用以下代碼:
對於時間序列,我們也能< strong > 重新取樣< / strong > 成不同時間間隔。例如,要計算每月平均銷售量,可 用以下代碼:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```


### DataFrame
DataFrame 本質上是具有相同索引的多個 Series 的集合。我們可以將幾個 Series 組 合成一個 DataFrame:
DataFrame 實際上是多個相同索引的 series 集合。我們可以將數個 series 合成一個 DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])
```
這將創建如下的水平表格 :
這會建立如下橫向資料表 :
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| --- | --- | ---- | --- | --- | ------ | --- | ------ | ---- | ---- |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | I | like | to | use | Python | and | Pandas | very | much |
我們也可以使用 Series 作為列,並通過字典指定列名 :
也可以將 Series 作為欄位,並透過字典指定欄位名稱 :
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
這將生成如下表格 :
這會產生如下資料表 :
| | A | B |
| --- | --- | ------ |
@ -118,39 +120,39 @@ df = pd.DataFrame({ 'A' : a, 'B' : b })
| 7 | 8 | very |
| 8 | 9 | much |
**注意**:我們也可以通過轉置前一個表格來獲得此表格佈局,例如:
< strong > 注意< / strong > 我們也能透過轉置前表格來得到同樣結果,例如寫成
```python
df = pd.DataFrame([a,b]).T.. rename(columns={ 0 : 'A', 1 : 'B' })
df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })
```
其中 `.T` 表示轉置 DataFrame 的操作,即交換行和列,而 `rename` 操作允許我們重命名列以匹配前面的例子 。
這裡 `.T` 表示 DataFrame 轉置操作,即行列交換,`rename` 則可以重命名欄位符合前例 。
以下是一些 我們可以對 DataFrame 執行的重要操作:
以下是我們可以對 DataFrame 執行的幾項 重要操作:
**列選擇**。我們可以通過 `df['A']` 選擇單個列,此操作返回一個 Series。我們也可以通過 `df[['B','A']]` 選擇列的子集到另一個 DataFrame, 此操作返回 另一個 DataFrame。
< strong > 欄位選擇</ strong > 。可用 `df['A']` 選取單一欄,回傳一個 Series。也可用 `df[['B','A']]` 選取子欄位集合,回傳 另一個 DataFrame。
**根據條件篩選**特定行。例如,要僅保留列 `A` 大於 5 的行,我們可以寫 `df[df['A']>5]` 。
< strong > 篩選特定列</ strong > 。比如,留下欄位 `A` 值大於 5 的列,可寫為 `df[df['A']>5]` 。
> ** 注意**:篩選的工作方式如下。表達式 `df['A']<5` 返回一個布林 Series, 指示原始 Series `df['A']` 中每個元素的表達式是否為 `True` 或 `False` 。當布林 Series 用作索引時,它返回 DataFrame 中的行子集。因此,不能使用任意 Python 布林表達式,例如,寫 `df[df['A']>5 and df['A']<7]` 是錯誤的。相反,您應使用布林 Series 的特殊 `&` 操作,寫 `df[(df['A']>5) & (df['A']<7)]` ( *括號在此處很重要* )。
> < strong > 注意</ strong > :篩選是如此工作的。表達式 `df['A']<5` 回傳布林型 Series, 表示 `df['A']` 中各元素是否符合條件。當用此布林型 Series 做為索引時,會回傳 DataFrame 的子集列。因此無法用一般 Python 布林表達式,例如 `df[df['A']>5 and df['A']<7]` 是錯誤的。應使用布林 Series 的特殊 `&` 運算,寫為 `df[(df['A']>5) & (df['A']<7)]` ( < em > 括號很重要</ em > )。
**創建新的可計算列**。我們可以通過直觀的表達式輕鬆為 DataFrame 創建新的可計算列 :
< strong > 建立新的可計算欄位< / strong > 。我們可以用直覺式表達式輕鬆建立新欄位:
```python
df['DivA'] = df['A']-df['A'].mean()
```
此例計算列 A 與其平均值的偏差。實際上,我們是在計算一個 Series, 然後將該 Series 分配給左側,創建另一列。因此,我們不能使用與 Series 不兼容的操作,例如,以下代碼是錯誤的 :
此範例計算欄位 A 相對其均值的偏差。實際上,我們先計算一個 Series, 再將其指派給左邊的欄位, 新增一欄。因此不可用與 Series 不相容的操作,否則會錯誤,例如下例 :
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else " Hi "
df['LenB'] = len(df['B']) # < - Wrong result
# 錯誤的程式碼 -> df['ADescr'] = "Low" if df['A'] < 5 else " Hi "
df['LenB'] = len(df['B']) # < - 錯 誤 的 結 果
```
後一個例子雖然語法正確,但結果錯誤,因為它將 Series `B` 的長度分配給列中的所有值,而不是分配給每個元素的 長度。
這個例子雖語法正確,但結果錯誤,因為它將欄位 B 的整體長度指派給所有列,而非意圖的各元素 長度。
如果需要計算此類複雜表達式,我們可以使用 `apply` 函數。上述例子可以寫成如下 :
如果需計算較複雜的表達式,可用 `apply` 函數。之前例子也可改寫為 :
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# 或者
df['LenB'] = df['B'].apply(len)
```
執行上述操作後,我們將 得到以下 DataFrame:
執行上述操作後,我們得到以下 DataFrame:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
@ -164,22 +166,22 @@ df['LenB'] = df['B'].apply(len)
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**根據行號選擇行**可以使用 `iloc` 結構。例如,要選擇 DataFrame 的前 5 行 :
< strong > 依照列號選取列</ strong > 可用 `iloc` 。例如,選取前 5 列:
```python
df.iloc[:5]
```
**分組**通常用於獲得類似於 Excel 中*樞紐表*的結果。假設我們想計算列 `A` 的平均值,按 `LenB` 的數字分組。我們可以按 `LenB` 分組 DataFrame, 然後調用 `mean` :
< strong > 分組</ strong > 常用於得到類似 Excel 中 < em > 樞紐分析表</ em > 的效果。假設想計算欄位 `A` 於每個 `LenB` 群組的平均值,可對 DataFrame 依 `LenB` 分組,再呼叫 `mean` :
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
如果我們需要計算平均值和組中的元素數量,則可以使用更 複雜的 `aggregate` 函數:
若同時計算群組數量與平均值,可用較 複雜的 `aggregate` 函數:
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
```
這將生成以下表格 :
結果會得到這張表 :
| LenB | Count | Mean |
| ---- | ----- | -------- |
@ -189,93 +191,98 @@ df.groupby(by='LenB') \
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### 獲取數據
我們已經看到如何輕鬆地從 Python 對象構建 Series 和 DataFrame。然而, 數據通常以文本文件或 Excel 表格的形式出現。幸運的是, Pandas 為我們提供了一種簡單的方法來從磁碟中加載數據。例如,讀取 CSV 文件就像這樣簡單:
### 獲取資料
我們已經看到了從 Python 物件構造 Series 和 DataFrames 是多麼簡單。然而,資料通常以文字檔案或 Excel 表格的形式出現。幸運的是, Pandas 提供了從磁盤加載資料的簡單方法。例如,讀取 CSV 檔案就像這樣簡單:
```python
df = pd.read_csv('file.csv')
```
我們將在“挑戰”部分中看到更多加載數據的例子,包括從外部網站獲取數據。
我們將在「挑戰」部分看到更多載入資料的範例,包括從外部網站抓取資料
### 打 印與繪圖
### 列 印與繪圖
數據科學家經常需要探索數據,因此能夠可視化數據非常重要。當 DataFrame 很大時,我們通常只想通過打印出前幾行來確保我們的操作是正確的。這可以通 過調用 `df.head()` 來完成。如果你在 Jupyter Notebook 中運行它 , 它 會以漂亮的表格形式打 印出 DataFrame。
資料科學家經常需要探索資料,因此能夠視覺化資料非常重要。當 DataFrame 很大時,很多時候我們只想確保所有操作正確無誤,這時候可以只列印出前幾行。這可以透 過調用 `df.head()` 來完成。如果你是 在 Jupyter Notebook 中運行,會以漂亮的表格形式印出 DataFrame。
我們還看到了使用 `plot` 函數來可視化某些列的用法。雖然 `plot` 對於許多任務非常有用,並且通過 `kind=` 參數支持許多不同的圖表類型,但你也可以使用原始的 `matplotlib` 庫來繪製更複雜的內容。我們將在單獨的課程中詳細介紹數據可視 化。
我們也看到了使用 `plot` 函數來視覺化部分欄位。雖然 `plot` 對許多任務很有用,並且支持透過 `kind=` 參數繪製多種不同的圖形類型,但你也可以使用原生 `matplotlib` 函式庫來繪出更複雜的圖形。我們會在單獨的課程中詳細講解資料視覺 化。
這個概述涵蓋了 Pandas 的一些重要概念,但這個庫非常豐富,你可以用它做的事情幾乎沒有上限!現在,讓我們應用這些知識來解決具體 問題。
本概述涵蓋了 Pandas 最重要的概念,不過這個函式庫功能非常豐富,幾乎沒有你不能做到的事情!現在讓我們運用這些知識來解決特定 問題。
## 🚀 挑戰 1: 分析 COVID 傳播
我們將專注於的第一個問題是建模 COVID-19 的流行病傳播。為此,我們將使用由 [約翰霍普金斯大學 ](https://jhu.edu/ ) 的 [系統科學與工程中心 ](https://systems.jhu.edu/ ) (CSSE) 提供的不同國家感染人數數據。數據集可在 [這個 GitHub 儲存庫 ](https://github.com/CSSEGISandData/COVID-19 ) 中獲取 。
我們首個關注的問題是模擬 COVID-19 流行病的傳播。為此,我們將使用由[約翰霍普金斯大學](https://jhu.edu/)的[系統科學與工程中心](https://systems.jhu.edu/)( CSSE) 提供的不同國家感染者人數資料。資料集可在[這個 GitHub 倉庫](https://github.com/CSSEGISandData/COVID-19)取得 。
由於我們想展示如何處理數據,我們 邀請你打開 [`notebook-covidspread.ipynb` ](notebook-covidspread.ipynb ) 並從頭到尾閱讀它。你還可以執行單元格,並完成我們在最後為你留下的一些 挑戰。
因為我們想示範如何處理資料, 邀請你打開 [`notebook-covidspread.ipynb` ](notebook-covidspread.ipynb ) 並從頭到尾閱讀。你也可以執行其中的程式碼區塊,並完成我們在最後留給你的 挑戰。

> 如果你不知道如何在 Jupyter Notebook 中運行代碼,請查看 [這篇文章 ]( https://soshnikov.com/education/how-to-execute-notebooks-from-github/ )。
> 如果你不知道如何在 Jupyter Notebook 中執行程式碼,請參考[這篇文章]( https://soshnikov.com/education/how-to-execute-notebooks-from-github/)。
## 處理非結構化數據
## 處理非結構化資料
雖然數據通常以表格形式出現,但在某些情況下,我們需要處理結構化程度較低的數據,例如文本或圖像。在這種情況下,為了應用我們上面看到的數據處理技術,我們需要以某種方式**提取**結構化數據。以下是一些例子 :
雖然資料往往以表格形式出現,但在某些情況下,我們需要處理較不結構化的資料,例如文字或圖片。在這種情況下,要應用上述資料處理技術,我們需要以某種方式< strong > 擷取< / strong > 結構化的資料。以下是幾個範例 :
* 從文本中提取關鍵詞,並查看這些關鍵詞 出現的頻率
* 使用神經網絡提取圖片中物體的信息
* 獲取視頻鏡頭中人們的情感信息
* 從文字中擷取關鍵字,並統計這些關鍵字 出現的頻率
* 使用神經網絡擷取圖片中物件的資訊
* 獲取影片畫面中人們的情緒資訊
## 🚀 挑戰 2: 分析 COVID 論文
在這個挑戰中,我們將繼續關注 COVID 大流行的主題,並專注於處理該主題的科學論文。有一個 [CORD-19 數據集 ](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge ),其中包含超過 7000 篇(撰寫本文時)關於 COVID 的論文,並附有元數據和摘要(其中約一半還提供 全文)。
在這個挑戰中,我們將繼續探討 COVID 疫情的主題,重點放在處理相關的科學論文。有一個 [CORD-19 資料集 ](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge ),截至撰寫時收錄了超過 7000 篇關於 COVID 的論文,並附有元資料與摘要(約一半論文還附有 全文)。
使用 [Text Analytics for Health ](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum ) 認知服務分析該數據集的完整示例已在 [這篇博客文章 ](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/ ) 中描述。我們將討論此分析的簡化版本 。
使用 [Text Analytics for Health ](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum ) 認知服務分析此資料集的完整範例在[這篇部落格文章](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/)中有說明。我們將討論其簡化版本的分析 。
> **NOTE** : 我們不提供該數據集的副本作為此儲存庫的一部分。你可能需要先從 [Kaggle 上的這個數據 集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv ) 下載 [`metadata.csv` ](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv ) 文件。可能需要在 Kaggle 上註冊。你也可以從 [這裡 ](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html ) 無需註冊下載數據集,但它將包括所有全文以及元數據文件 。
> < strong > 注意</ strong > :本倉庫中並未提供資料集副本。你可能需要先從 [Kaggle 的此資料 集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv ) 下載 [`metadata.csv` ](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv ) 檔案。註冊 Kaggle 可能是必要的。你也可以不需註冊[從這裡下載](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html),但裡面包含所有全文以及元資料檔 。
打開 [`notebook-papers.ipynb` ](notebook-papers.ipynb ) 並從頭到尾閱讀它。你還可以執行單元格,並完成我們在最後為你留下的一些 挑戰。
打開 [`notebook-papers.ipynb` ](notebook-papers.ipynb ),從頭到尾閱讀。你也可執行其中的程式碼區塊並完成最後留給你的 挑戰。


## 處理圖像數據
## 處理影像資料
最近,已經開發出非常強大的 AI 模型,能夠理解圖像。有許多任務可以使用預訓練的神經網絡或雲服務來解決。一些例子包括 :
近來開發出非常強大的 AI 模型,使我們能夠理解影像。有許多任務可以使用預先訓練的神經網絡或雲端服務來解決。一些範例如下 :
* ** 圖像分類**,可以幫助你將圖像分類到預定義的類別中。你可以使用像 [Custom Vision ](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum ) 這樣的服務輕鬆訓練自己的圖像分類器。
* ** 物體檢測**,用於檢測圖像中的不同物體。像 [Computer V ision](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 ) 完成。
* < strong > 影像分類</ strong > ,幫助你將影像分類到預訂的類別中。你也可以使用如 [Custom Vision ](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum ) 等服務輕鬆訓練自己的影像分類器
* < strong > 物件偵測</ strong > ,用於辨識影像中的不同物件。像是 [computer v ision](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 ) 模型來偵測一些特定的關注物件 。
* < strong > 臉部偵測</ strong > ,包括年齡、性別和情緒偵測。可透 過 [Face API ](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum ) 完成。
所有這些雲服務都可以通過 [Python SDK ](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum ) 調用,因此可以輕鬆地集成到你的數據探索工作流程中 。
這些雲端服務皆可使用 [Python SDKs ](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum ) 呼叫,因此能輕鬆整合入你的資料探索工作流程 。
以下是一些探索圖像數據源的例子 :
* 在博客文章 [如何在不編碼的情況下學習數據 科學](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/ ) 中,我們探索了 Instagram 照片,試圖了解什麼使人們對某張照片點贊更多。我們首先使用 [Computer V ision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum ) 從圖片中提取盡可能多的信息,然後 使用 [Azure Machine Learning AutoML ](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum ) 構 建可解釋的模型。
* 在 [Facial Studies Workshop ](https://github.com/CloudAdvocacy/FaceStudies ) 中,我們使 用 [Face API ](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum ) 提取活動照片中人們的情感,試圖了解什麼讓人們感到 快樂。
這裡是一些來自影像資料源探索資料的範例 :
* 在部落格文章 [如何在不寫程式下學習資料 科學](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/ ) 中,我們探索 Instagram 照片,嘗試理解什麼因素使人們給照片按讚更多。我們先使用 [computer v ision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum ) 擷取照片中的最多資訊,接著 使用 [Azure Machine Learning AutoML ](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum ) 建立 可解釋的模型。
* 在 [Facial Studies Workshop ](https://github.com/CloudAdvocacy/FaceStudies ) 中,我們利 用 [Face API ](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum ) 從活動照片中擷取人物的情緒,試圖理解什麼會讓人 快樂。
## 結論
無論你擁有結構化還是非結構化數據,使用 Python 你都可以執行與數據處理和理解相關的所有步驟。這可能是最靈活的數據處理方式,這也是為什麼大多數數據科學家將 Python 作為主要工具的原因。如果你對數據科學之旅是認真的,那麼深入學習 Python 可能是一 個好主意!
無論你已有結構化或非結構化資料,使用 Python 你都可以執行所有與資料處理與理解相關的步驟。它可能是最靈活的資料處理方式,這也是大多數資料科學家將 Python 當作主要工具的原因。如果你對資料科學之路抱持認真態度,深入學習 Python 很可能是 個好主意!
## [課後測驗 ](https://ff-quizzes.netlify.app/en/ds/quiz/13 )
## 回顧 與自學
## 複習 與自學
**書籍**
< strong > 書籍< / strong >
* [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 )
< strong > 線上資源< / strong >
* 官方 [10 分鐘 入門 Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html ) 教程
* [Pandas 視覺化文件 ](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html )
**學習 Python**
* [用 Turtle Graphics 和分形圖形以有趣的方式學習 Python](https://github.com/shwars/pycourse )
* [在 Microsoft Learn 上學習 Python 的 第一步](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum )
* [用 海龜繪圖和分形有趣學 Python](https://github.com/shwars/pycourse )
* [Python 入門 第一步](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum ) 學習路徑,發布於 [Microsoft Learn ](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum )
## 作業
[對上述挑戰進行更詳細的數據 研究](assignment.md )
[針對上述挑戰進行更細緻的資料 研究](assignment.md )
## 致謝
這節課由 [Dmitry Soshnikov ](http://soshnikov.com ) 用 ♥️ 編寫。
本課程由 [Dmitry Soshnikov ](http://soshnikov.com ) 用 ♥️ 創作
---
**免責聲明**:
本文件已使用 AI 翻譯服務 [Co-op Translator ](https://github.com/Azure/co-op-translator ) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。
<!-- CO - OP TRANSLATOR DISCLAIMER START -->
**免責聲明**:
此文件已使用 AI 翻譯服務 [Co-op Translator ](https://github.com/Azure/co-op-translator ) 進行翻譯。雖然我們努力追求準確性,但請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於關鍵資訊,建議採用專業人工翻譯。我們不對因使用此翻譯所產生的任何誤解或誤譯承擔責任。
<!-- CO - OP TRANSLATOR DISCLAIMER END -->