owned this note
owned this note
Published
Linked with GitHub
# W2教材大綱: Python基礎
:::info
共編、註記方法
- 打勾代表這一頁要用
- 刪除 : ~~導向~~
- 其他需要新增的細節,學姊註解,
- 例如: ===> Anna 學姊 : 這邊增加圖片
:::
## Source
- Anna學姊Python課PPT
- 成為python數據分析達人的第一堂課 3 & 4
## 課堂投影片與練習
- [ ] Python基礎資料型態介紹
- 參考Anna學姊Python教材
---
- [ ] **為什麼學習 NumPy 與 Array?**
* 數據分析是當前重要的技能。
* Python 是數據分析的熱門工具。
* NumPy 是 Python 在科學計算及數據分析中**最重要**的套件。
* 學習 NumPy 能讓您更有效地處理和分析數據。
* 一個**核心概念**是「陣列導向程式設計」。
---
- [x] **核心概念:陣列導向程式設計 (Array-Oriented Programming)**
* 這是數據分析中**非常重要**的概念。
* **核心思想:少用 for 迴圈,多用 Array**。
* 可以將 for 迴圈視為一個應「禁用」的項目,盡量用 Array 來取代。
* **原因:計算速度**。
* 使用 Array 進行計算可以**大幅提升速度**,尤其在處理大量數據時,比傳統 for 迴圈更有效率。
* **目標:** 不到最後關頭,應盡量使用 Array 這種**向量處理方式**,而非 List。
---
- [x] **NumPy 介紹 - 數據分析的基石**
* NumPy 套件是 Python 在科學計算及數據分析中**最重要**的套件之一。
* NumPy 的核心資料形態是 **array (陣列)**。
* Array 在外觀和感覺上與 Python 的 **list (列表)** 非常相似。
* 但 Array 專為數值計算進行了最佳化,支援高效的陣列導向運算。
---
- [x] **Python 套件的正規匯入方式**
* 正確地匯入所需的 Python 套件是良好的程式習慣。
* **不推薦**的匯入方式:
* `Pilab inline`:會偷偷匯入許多套件,方式比較混亂,應**禁用**。
* `from package import *` (使用星號 `*` 匯入套件的所有指令)。
* **不推薦 `import *` 的原因:**
* 不同套件可能會有**同名指令**。
* 例如:`random` 套件和 `numpy.random` 套件都有 `random.randint`,但它們的行為可能不同 (`random` 包含上限值,`numpy.random` 不包含)。
* 這會導致**混淆且難以除錯**。
---
- [x] **Python 套件的正規匯入方式**
* 正規的匯入方式包括 `from package import specific_function` 或直接 `import package`。
* **最推薦且業界標準的匯入方式:** 使用 **`import package as alias`**。
* 這樣可以方便地使用套件中的所有指令,同時避免名稱衝突。
* 使用時,在指令前加上定義好的縮寫 (alias) 即可,例如 `np.sign()`。
* **標準縮寫慣例:**
* **NumPy 套件:** 標準縮寫是 **`np`** (`import numpy as np`)。**幾乎所有**程式設計師都這樣縮寫。
* **Matplotlib 的繪圖模組 (`matplotlib.pyplot`):** 標準縮寫是 **`plt`** (`import matplotlib.pyplot as plt`)。
* 使用標準縮寫能展現程式設計師的**涵養**。
---
- [ ] **Jupyter Notebook 編輯器介紹**
> from - 大數據分析與資料探勘 W2 P6
- Jupyter Notebook 是一個IPython的Web擴充模組,讓使用者可在瀏覽器中進行程式的開發與執行,或撰寫說明文件。
- 執行Anaconda下的Jupyter Notebook即可開啟,預設的路徑為<c:\Users\帳號名稱>,下方會列出預設路徑下所有資料夾及檔案,新建檔案也會儲存於此路徑中。
- 建立Jupyter Notebook檔案:點選New按鈕,在下拉式選單中點選Python3項目即可建立Python程式檔(點選TextFile項目建立文字檔,Folder項目建立資料夾)。
- Jupyter Notebook是以Cell作為輸入及執行單位,使用者在Cell中撰寫及執行程式,一個檔案可包含多個Cell,建立新檔案時,預設產生一個Cell。
- 新檔案名稱為Untitled,點選後可於對話方塊中輸入新檔案名稱,按下Rename完成修改。
- Jupyter Notebook簡易智慧輸入:簡易智慧輸入功能與Spyder編輯器雷同,在Cell中輸入部分指令文字後按Tab鍵,系統會列出所有可用的項目供使用者選取,可按上或下移動選取項目,確認後按下Enter即可。
- 輸入完程式後,可以按下工具列的Run鈕或Shift+Enter執行程式,結果後呈現在Cell下方並新增一個新Cell。若按下Ctrl+Enter同樣會執行程式並產生結果,但游標會停留在原有Cell,不會新增Cell。
- Jupyter Notebook的檔案附加檔名為.ipynb,若要開啟舊檔,就點選資料夾中附檔名為.ipynb的檔案。
- Jupyter Notebook在開發頁面中分為兩種模式:
- 編輯模式:用來開發程式的模式。用滑鼠點選Cell後,左方邊框呈現綠色,此時為編輯模式,使用者可進行程式開發。
- 命令模式:用來管理Cell的模式。按下Esc鍵,會使左方邊框呈現藍色,此時為命令模式,使用者可進行新增Cell、刪除Cell等動作。其中,按下A(或B)可在目前Cell上方(或下方)新增Cell,連按兩次D可刪除目前Cell。
- 使用markdown做筆記(註解): Jupyter Notebook中Cell預設狀態為Code,供使用者輸入程式碼,在Cell前都會顯示in[]:,若要在Cell中進行註解,則必須將狀態切換到markdown,輸入文字後按下Ctrl+Enter。
- 匯出為其他格式檔案: 由File/Download as 選擇所要匯出的檔案格式。
---
- [x] **Jupyter Notebook 的標準起始設定**
* 每次在 Jupyter Notebook 中開始數據分析時,建議養成習慣先執行幾個標準指令。
* 標準的起始設定:
1. **`matplotlib inline`**:
* 取代了不推薦的 `Pilab inline`。
* 目的是讓 Matplotlib 繪製的圖形**直接顯示在網頁上**。
2. **匯入 NumPy 套件並縮寫為 `np`:** `import numpy as np`。
3. **匯入 Matplotlib 的繪圖模組並縮寫為 `plt`:** `import matplotlib.pyplot as plt`。
* (提示:善用 **TAB 鍵** 來自動補齊指令,避免拼字錯誤)。
---
- [x] **對應課堂練習一:標準起始設定與套件匯入**
1. **任務:** 在您的 Jupyter Notebook 中,執行標準的起始設定三行程式碼。
* `%matplotlib inline`
* `import numpy as np`
* `import matplotlib.pyplot as plt`
2. **任務:** 嘗試使用 `import numpy as np` 方式匯入 NumPy 套件,並使用 `np.sin(3)` 計算 sin(3) 的值。
3. **任務:** 解釋為什麼不推薦使用 `from package import *` (星號) 的方式匯入套件。請舉例說明可能遇到的問題 (例如:`random.randint` 在不同套件中的行為差異)。
4. **提示:** 在打程式碼時,善用 TAB 鍵來自動補齊指令。
---
- [x] **Array 的快速生成方法**
* 從 List 轉換:使用 `np.array(your_list)`。
* 生成特定值的 Array:
* 全為零的 Array:`np.zeros(shape)`。
* 全為一的 Array:`np.ones(shape)`。
* 生成單位矩陣 (Identity Matrix):`np.eye(size)`。
* 生成等間距的數字序列:`np.linspace(start, stop, num)`。 (常用於繪製函數圖形的 X 軸數據)
* 生成亂數 Array:
* `np.random.rand()`:生成 0 到 1 之間的均勻分佈亂數。
* `np.random.randn()`:生成平均值為 0、標準差為 1 的常態分佈亂數。
---
- [ ] **對應課堂練習二:Array 的生成與基本操作**
1. **任務:** 建立一個 Python List,包含數字 ``。將這個 List 轉換成一個 NumPy Array,並將其賦值給變數 `my_array`。
2. **任務:** 建立一個形狀為 (3, 4),所有元素皆為 0 的 NumPy Array。
3. **任務:** 建立一個形狀為 (2, 5),所有元素皆為 1 的 NumPy Array。
4. **任務:** 建立一個 4x4 的單位矩陣 (Identity Matrix)。
5. **任務:** 使用 `np.linspace()` 生成一個包含 100 個點的 Array,範圍從 -π 到 π (可以使用 `np.pi`)。將其賦值給變數 `x_values`。
---
- [ ] **陣列導向運算範例 (一):Array 與純量運算**
* Array 與純量 (scalar) 進行運算 (例如:加、減、乘、除) 時。
* 該運算會應用到 Array 中的**每一個元素**。
* **範例:** 貨幣換算。
* 若使用 List 儲存價格,換算所有價格需要一個 for 迴圈。
* 若使用 Array 儲存價格,只需要簡單的一行乘法指令 (`prices_array * exchange_rate`) 即可一次完成所有換算。
---
- [x] **對應課堂練習三:陣列導向運算:取代 For 迴圈 (貨幣換算)**
1. **情境:** 假設您有一些商品的價格 (美金),儲存在一個 Python List 中:`usd_prices = [1096.95, 596.95, 896.95]`。當前的匯率是 1 美金 = 30.1 台幣。
2. **任務 (傳統方式 - 練習理解為何不推薦):**
* 使用一個 `for` 迴圈,逐一取出 `usd_prices` 中的美金價格。
* 將每個美金價格乘以匯率 `30.1` 轉換為台幣價格。
* 將計算出的台幣價格添加到一個新的 List `twd_prices_list` 中 (可以使用 `.append()`)。
* 印出 `twd_prices_list` 的內容。
3. **任務 (陣列導向方式):**
* 將 `usd_prices` List 轉換成一個 NumPy Array,並賦值給變數 `usd_prices_array`。
* 直接將 `usd_prices_array` 乘以匯率 `30.1`,將結果賦值給變數 `twd_prices_array`。
* 印出 `twd_prices_array` 的內容。
4. **討論:** 比較使用 `for` 迴圈和使用 Array 導向方式進行貨幣換算的程式碼長度和易讀性。回憶課程中提到的陣列導向優勢是什麼?
---
- [x] **陣列導向運算範例 (二):內積 (Dot Product)**
* 內積是用於計算兩個向量的對應元素相乘後加總的運算。
* 在數據分析中常用於計算**加權總和**,例如計算成績。
* NumPy 提供了高效的內積計算方法。
* 使用函數:`np.dot(array1, array2)`。
* 使用運算符 (較新版本):`array1 @ array2`。(課程中使用 `np.dot`)
* **範例:** 計算單一學生的加權平均成績。
* 學生成績 Array 與加權權重 Array 進行內積計算。
* **範例:** 計算**多位學生**的加權平均成績。
* 將所有學生的成績組織成一個多維 Array。
* 這個多維 Array 與權重 Array 進行點積,NumPy 會自動對每一行 (每一位學生) 執行內積計算。
* 可以**一次性**計算出全班同學的成績,無需使用迴圈。
---
- [x] **對應課堂練習四:陣列導向運算:內積 (加權總和)**
1. **情境:** 計算學生分數的加權平均。有學生的分數 Array `grades = np.array()`,以及對應的權重 Array `weights = np.array([0.3, 0.4, 0.3])`。
2. **任務:** 使用 NumPy 的內積 (Dot Product) 功能計算這位學生的加權平均分數。可以使用 `np.dot()` 或 `@` 運算符 (如果您的 Python 版本支援)。印出結果。
3. **情境:** 現在有多位學生的成績。這些成績儲存在一個二維 Array 中,每一列代表一位學生的成績 (期中, 期末, 平時)。
`all_grades = np.array([, , , ])`
權重 Array 仍然是 `weights = np.array([0.3, 0.4, 0.3])`。
4. **任務:** 使用 NumPy 的內積功能,一次性計算出所有學生的加權平均分數。印出結果。解釋 NumPy 在這裡是如何進行運算的。
---
- [ ] **Array 的變形與重塑 (Reshape)**
* 可以改變 Array 的維度或形狀,例如將一維 Array 變成二維矩陣。
* 查看 Array 形狀:使用 `.shape` 屬性。
* 改變 Array 形狀的方法:
* 直接修改 `.shape` 屬性:`array.shape = new_shape`。**會修改原來的 Array**。
* 使用 `reshape()` 方法:`array.reshape(new_shape)`。
* `reshape()` 方法會**產生一個新的 Array**,而**不會改變原來的 Array**。若要更新原 Array,需將結果賦值回去 (`array = array.reshape(new_shape)`)。
* 改變前後的元素總數必須一致。
---
- [ ] **對應課堂練習五:Array 的變形 (Reshape)**
1. **任務:** 建立一個包含數字 1 到 12 的一維 NumPy Array (例如,可以使用 `np.arange(1, 13)`)。將其賦值給變數 `data_1d`。
2. **任務:** 查看 `data_1d` 的形狀 (shape)。
3. **任務:** 將 `data_1d` 變形 (reshape) 為一個 3x4 的二維 Array。印出變形後的 Array,並確認原來的 `data_1d` **是否**改變。
4. **任務:** 將 `data_1d` 變形為一個 4x3 的二維 Array,並將結果**賦值**回 `data_1d`。印出 `data_1d` 的內容和形狀,確認它已經被改變。
---
- [x] **Array 的索引與快篩 (Indexing & Boolean Indexing)**
* Array 的基本索引 (使用中括號加索引或切片) 與 Python List 類似。
* **布林索引 (Boolean Indexing)** 是 Array 強大的資料篩選方式。
* **原理:**
* 建立一個與原 Array 形狀相同的**布林 Array** (內容是 `True` 或 `False`)。
* 這個布林 Array 通常是透過對原 Array 進行條件判斷產生,例如 `array < 0`。
* 將這個布林 Array 放在原 Array 的中括號中 (`original_array[boolean_array]`)。
* NumPy 會自動選出布林 Array 中對應位置為 `True` 的所有元素。
* **範例:** 快速篩選出 Array 中所有小於 0 的數字 (`array[array < 0]`)。
* 布林索引是一種高效的資料篩選方式,無需手寫迴圈判斷。
---
- [ ] **對應課堂練習六:Array 的布林索引 (快篩)**
1. **情境:** 假設有一個 Array 包含一些數字:`numbers = np.array([3, -2, 4, -5, 33, -33, -5, -6, -10])`。
2. **任務:** 建立一個布林 Array,用於判斷 `numbers` Array 中哪些元素小於 0。印出這個布林 Array。
3. **任務:** 使用上一步生成的布林 Array 作為索引,從 `numbers` Array 中選出所有小於 0 的元素。印出篩選後的結果。
4. **任務:** 使用類似的方法,從 `numbers` Array 中選出所有大於 5 的元素。
---
- [x] **結合 NumPy 與 Matplotlib 繪圖**
* Matplotlib 是常用的繪圖套件,標準匯入為 `import matplotlib.pyplot as plt`。
* 結合 NumPy 的 `np.linspace()` 生成等間距的 X 軸數據。
* 利用 Array 導向的運算,快速計算出對應的 Y 軸數據 (例如 `np.sin(x)`, `x + np.sin(x)`)。
* 使用 `plt.plot(x, y)` 即可輕鬆繪製函數圖形。
* 電腦繪製函數圖形的基本原理是**描點法**。
* show: 顯示圖形
```python=
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()
```
* 可以在同一張圖上繪製多條曲線。
* 利用**布林索引**,可以只繪製函數中符合特定條件的部分 (例如只繪製 Y 值大於 0 的部分)。
---
- [x] **對應課堂練習七:結合 NumPy 與 Matplotlib 繪圖**
1. **任務:** 使用 `np.linspace()` 生成一個包含 200 個點的 Array,範圍從 -2π 到 2π。將其賦值給變數 `x_vals`。
2. **任務:** 利用 Array 導向運算,計算對應的 `np.sin(x_vals)` 值,將結果賦值給變數 `y_sin`。
3. **任務:** 使用 `plt.plot()` 函數,以 `x_vals` 為 x 軸數據,`y_sin` 為 y 軸數據,繪製 sin 函數的圖形。
4. **任務:** 在同一張圖上,計算並繪製 `np.cos(x_vals)` 的圖形。
5. **進階任務 (選作):** 嘗試使用布林索引,只繪製 `y_sin` 中值大於 0 的部分 (提示:您需要同時篩選 `x_vals` 和 `y_sin`)。
:::info
以下為`成為python數據分析達人的第一門課 4`中與dict有關的內容,此外大部分時間在演示`Jupyter Notebook 的互動功能 (Interactive Features) + Matplotlib`,也有教一點點overfitting的概念,感覺可以之後補。
:::
---
- [ ] Python 字典 (dict) - 什麼是字典?
* 想像一本真正的字典:每個「字」(Key) 對應一個「解釋」(Value)。
* 在 Python 中,字典是一種用來儲存鍵值對 (key-value pairs) 的資料結構。
* 每個項目都包含一個獨一無二的鍵 (Key) 和一個對應的值 (Value)。
* 它特別適合用來組織那些有關聯性的資料,例如:學生的學號對應姓名、城市名稱對應人口數等等。
* 常用於查表、映射等用途
---
- [ ] Python 字典 (dict) - 如何建立與操作實例
* 使用大括號 {} 來建立字典。
* 鍵值對之間用冒號 : 分隔,不同項目用逗點 , 分隔。
* 值可以是任何資料型態:student_info = {'Name': '小明', 'Score': 85.5, 'IsEnrolled': True}
* 取得值: 使用中括號 [] 和對應的鍵 (Key) 來取得值。
* print(myDictionary['Apple']) # 輸出: '蘋果'
* 新增或修改值: 透過指定一個新的鍵並賦值來新增項目。如果鍵已存在,則修改值。
* myDictionary['orange'] = '六成' # 新增一個項目
* student_info['Score'] = 90 # 修改 Score 的值
```python=
# 查詢
print(my_dict['apple']) # 蘋果
# 新增
my_dict['orange'] = '柳橙'
# 遍歷
for key in my_dict:
print(key, "->", my_dict[key])
```
---
- [ ] 課堂練習:字典操作
* 請在 Jupyter Notebook 中完成以下任務:
* 建立一個字典 colors = {'red': '紅色', 'blue': '藍色'}
* 新增一個顏色 'green' -> '綠色'
* 印出所有英文顏色與對應中文名稱
---
- [ ] 字典 (dict) - 遍歷與格式化輸出
* 使用 for 迴圈可以遍歷字典的鍵 (Keys)。
* for key in myDictionary:
* 在迴圈內,可以用 myDictionary[key] 取得對應的值。
* 結合 .format() 方法: 讓輸出的鍵值對更整齊易讀。
* print("單字: {}, 意思是: {}".format(key, myDictionary[key]))
<!-- - [x] **總結與展望**
* **陣列導向程式設計**是數據分析的關鍵思維:**多用 Array,少用 For 迴圈**。
* **NumPy** 及其核心資料形態 **Array** 是實現這一思維的**最重要工具**。
* 學習 **正規匯入方式** (特別是 `import package as alias`) 是良好的程式習慣。
* 養成 **Jupyter Notebook 標準起始設定**的習慣 (`matplotlib inline`, `import numpy as np`, `import matplotlib.pyplot as plt`)。
* 掌握 Array 的**生成、運算、變形和索引**是進行高效數據分析的基礎。
* 這些技能將為您打開 Python 數據分析的大門。 -->
## 課後練習題
### 簡答題
* NumPy 套件在 Python 數據分析中的重要性是什麼?
> NumPy 是 Python 在科學計算和數據分析領域最核心的套件,提供了高效處理陣列數據的功能。
* 「陣列導向」程式設計的核心概念是什麼?
> 陣列導向是指多利用 Array 的整體運算來處理數據,盡量減少使用 for 迴圈,以提升程式執行效率。
* 為什麼不推薦使用 from package import * 這種方式匯入套件?
> 這種匯入方式會將套件內所有指令都載入到當前命名空間,容易造成不同套件之間的指令命名衝突,增加程式碼的維護難度。
* 標準的匯入 NumPy 和 Matplotlib 繪圖模組的方式是什麼?
> 標準的匯入 NumPy 方式是 import numpy as np,匯入 Matplotlib 繪圖模組的方式是 import matplotlib.pyplot as plt。
* 在進行數據分析時,建議最先執行的三行標準指令是什麼?
> 建議先執行 %matplotlib inline、import numpy as np 和 import matplotlib.pyplot as plt 這三行指令。
* 相較於 Python List,NumPy Array 在批量數據計算上的優勢是什麼?
> NumPy Array 支援向量化運算,可以在整個 Array 上一次性執行數學計算,比 List 使用 for 迴圈逐個元素處理要高效得多。
* 如何將一個 Python List 轉換為 NumPy Array?
> 可以使用 np.array(your_list) 這個指令將一個 List 轉換為 NumPy Array。
* 什麼是 Array 的 Reshape 功能?它有什麼用途?
> Array 的 Reshape 功能允許改變 Array 的維度,例如將一維 Array 轉換為多維矩陣,這在處理不同結構的數據時非常有用。
* 如何快速生成一個包含十個零的 NumPy Array?
> 可以使用 np.zeros(10) 這個指令快速生成一個包含十個零的一維 Array。
* 如何利用布林陣列對 NumPy Array 進行快速篩選?
> 可以將一個與原 Array 長度相同的布林陣列作為索引,放在原 Array 的中括號內,Array 會自動選出對應布林值為 True 的元素。
## 名詞解釋
* NumPy: Python 程式語言的一個開源函式庫,專門用於進行科學計算,提供了高效的多維陣列物件(Array)以及大量的數學函數來操作這些陣列。
* Array: NumPy 的核心數據結構,是一個同質的多維陣列,所有元素的數據類型相同。與 Python 的 List 相比,Array 更適合進行數值計算和批量操作。
* 陣列導向 (Array-oriented): 一種程式設計理念,強調利用 Array 的整體運算來處理數據,而非使用迴圈對單個元素進行操作,以提高程式效率。
* for 迴圈 (For loop): Python 中用於重複執行一段程式碼的控制結構,通常用於遍歷序列(如 List)中的元素。在 Array 導向的程式設計中,盡量避免使用 for 迴圈進行數值計算。
* 套件 (Package): Python 中組織模組的方式,包含多個相關的模組和子套件,提供了更豐富的功能。
* 匯入 (Import): 將 Python 模組或套件載入到當前程式中,以便使用其中的功能。
* PiLab inline: 一個早期用於 IPython Notebook 的魔術指令,可以方便地匯入 NumPy 和 Matplotlib 等套件並在 Notebook 中直接顯示圖形,但因匯入方式較混亂而較少推薦。
* Matplotlib: Python 中一個常用的繪圖套件,用於生成各種靜態、動態和交互式圖形。
* matplotlib inline: IPython 或 Jupyter Notebook 中的一個魔術指令,用於在 Notebook 中直接顯示 Matplotlib 繪製的圖形。
* pyplot: Matplotlib 套件中的一個模組,提供了一個類似 MATLAB 的繪圖介面,通常匯入為 plt。
* 縮寫 (Alias): 在匯入套件時,為套件指定一個較短的名稱,方便在程式碼中使用。
* 向量化運算 (Vectorization): 利用 Array 的整體運算能力,一次性對 Array 中的所有元素進行數學計算或操作,效率遠高於使用迴圈逐個處理。
* Dot Product (內積): 兩個向量的內積是一個標量,計算方式為對應元素的乘積之和。在 NumPy 中可以使用 np.dot() 函數或 @ 運算符進行計算。
* Reshape: 改變 Array 的維度而不改變其數據的功能,例如將一維 Array 轉換為二維矩陣。
* np.zeros(): NumPy 函數,用於創建一個指定形狀(維度)且所有元素都為零的 Array。
* np.ones(): NumPy 函數,用於創建一個指定形狀(維度)且所有元素都為一的 Array。
* np.eye(): NumPy 函數,用於創建一個二維的單位矩陣(Identity Matrix),對角線上的元素為一,其餘為零。
* 布林陣列 (Boolean Array): 一種特殊的 Array,其元素為布林值 (True 或 False)。常用於作為索引,對其他 Array 進行篩選。
* 篩選 (Indexing/Filtering): 從 Array 中根據特定條件選擇或提取元素的過程。利用布林陣列進行篩選是 Array 的一個重要功能。
* np.linspace(): NumPy 函數,用於在指定區間內均勻生成指定數量的數字,常用於生成繪圖時的 X 軸數據點。
* np.random.rand(): NumPy 函數,用於生成介於 0 到 1 之間的隨機浮點數 Array。
* np.random.randn(): NumPy 函數,用於生成符合標準常態分佈(平均值為 0,標準差為 1)的隨機浮點數 Array。
* np.random.randint(): NumPy 函數,用於生成指定範圍內的隨機整數 Array。
# Brisk teaching v.s. Gamma
## Gamma

## Brisk teaching

- Gamma 比較注重美編,生成出來的內容比較好看
- Brisk teaching
- 優點 : 可以從 youtube 直接生成教材,省略了很多步驟(影片轉文字-> 摘要 -> Notebookllm -> 審核 -> Gamma產生ppt)
- 缺點 : 模板選擇較少
# QA 生成
- 以課程為例 : 成為python數據分析達人的第一門課-蔡炎龍 3-2 Python強大的秘密: numpy、向量化與各式套件 正規讀套件的方法之一


# 老師問題
* Brisk teaching for YouTube video https://youtu.be/4HvpgNXEqks?si=h1g6G1HYl6TJerkO
* Brisk teaching for Website 網路文章 https://www.youtube.com/watch?v=uoZxtNsrQGI&t=22s
* Magic School AI for 課程設計 https://youtu.be/NLOHFZu187Y?si=SmJLYGyJCui2bw2A
* Magic School AI for 學生活動 https://youtu.be/QFlD80_5iPE?si=v6mdj_eZUuGGIgoR
