# 2024.5.26 上課講義
## Matplotlib
[**官方資料**](https://matplotlib.org/stable/index.html)
掛接雲端硬碟
```python=
from google.colab import drive
drive.mount('/content/drive')
```
引入所需套件
```python=
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '字型路徑')
```
### 關係圖 Plotting
#### 設定x、y軸的點
```python=
x_point = np.array([1, 5])
y_point = np.array([4, 10])
```
#### 設定繪圖
```python=
plt.plot(x_point, y_point)
plt.show()
```
:::spoiler 全部程式碼
```python=
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
x_point = np.array([1, 5])
y_point = np.array([4, 10])
plt.plot(x_point, y_point)
plt.show()
```
:::

#### 加上一些設定、標題、標籤
```python=
# 設定繪圖區大小
plt.figure(figsize = (12, 6))
# 繪圖區的標題
plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20)
# 設定橫軸和縱軸的標題
plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20)
plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20)
# 函數標籤
plt.plot(x_point, y_point, label = "標籤")
# 顯示標籤
plt.legend(prop = twfont1)
```
>fontproperties 是用來設定字型, twfont1 是前面所設定的字型名稱(可改)
>fontsize 是用來設定字體的大小
>`plt.legend()` 可以取代 `plt.show()`
:::spoiler 全部程式碼
```python=
# 加入說明
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (5, 5))
plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20)
plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20)
plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20)
x_point = np.array([1, 5])
y_point = np.array([4, 10])
plt.plot(x_point, y_point, label = "標籤")
plt.legend(prop = twfont1)
```
:::

#### 描點、無線
```python=
# 無線
plt.plot(x_point, y_point, 'o', label = "標籤")
```
:::spoiler 全部程式碼
```python=
# 無線
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (5, 5))
plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20)
plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20)
plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20)
x_point = np.array([1, 5])
y_point = np.array([4, 10])
plt.plot(x_point, y_point, 'o', label = "標籤")
plt.legend(prop = twfont1)
```
:::

```python=
# 描點
plt.plot(x_point, y_point, marker='o', label = "標籤")
```
:::spoiler 全部程式碼
```python=
# 描點
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (5, 5))
plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20)
plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20)
plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20)
x_point = np.array([1, 5])
y_point = np.array([4, 10])
plt.plot(x_point, y_point, marker='o', label = "標籤")
plt.legend(prop = twfont1)
```
:::

:::info
**練習**
請利用剛剛教的內容,畫出一個 $y = sinx$ 的圖形
```python=
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '字型路徑')
plt.figure(figsize = (5, 5))
plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20)
plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20)
plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20)
# 把 x, y 的點改成 sin 圖形
______
plt.plot(x_point, y_point, label = "標籤")
plt.legend(prop = twfont1)
```
```python=
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (8, 5))
plt.title("y = sinx", fontproperties = twfont1, fontsize = 20)
plt.xlabel("x", fontproperties = twfont1, fontsize = 20)
plt.ylabel("y", fontproperties = twfont1, fontsize = 20)
# 把 x, y 的點改成 sin 圖形
x_point = np.linspace(-2*np.pi, 2*np.pi, 100)
y_point = np.sin(x_point)
plt.plot(x_point, y_point, label = "sin")
plt.legend(prop = twfont1)
```

:::
#### 改變顏色、線條、符號
順序是顏色、線條、符號,不用間隔直接加在資料後面
```python=
plt.plot(x_point, y_point, "r--+", marker='o', label = "標籤")
```
:::spoiler 全部程式碼
```python=
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (5, 5))
plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20)
plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20)
plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20)
x_point = np.array([1, 5])
y_point = np.array([4, 10])
plt.plot(x_point, y_point, "r--+", marker='o', label = "標籤")
plt.legend(prop = twfont1)
```
:::

[**其他顏色、線條、符號**](https://www.w3schools.com/python/matplotlib_markers.asp)
[**更多跟線有關的參數**](https://www.w3schools.com/python/matplotlib_line.asp)
:::info
**練習**
請大家畫一個 $f1: y = (x-\frac{1}{5})^2 + 2$ 和一個 $f2: y = -x^3 + 2$ 的圖形,條件如下:
1. 圖的大小是 $8 * 8$
2. 標題是 **二次函數** 字體大小為 15
4. x是在-2~2之間平均取20個點(上次有教)
5. 要畫線+描點
6. f1的顏色為 #005AB5 ;f2的顏色為 #3D7878
7. 要有圖例標示
8. 其餘的自訂
```python=
# 載入套件、模組
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '字型路徑')
# 定義出指定函式
def f1(x):
return __f1__
def f2(x):
return __f2__
# 設定座標點
x_point = _____
y_point1 = __f1_y__
y_point2 = __f2_y__
# 定義圖片大小、標題
plt.figure(figsize = (___, ___))
plt.title("___", fontproperties = twfont1, fontsize = ___)
plt.xlabel("x軸", fontproperties = twfont1, fontsize = ___)
plt.ylabel("y軸", fontproperties = twfont1, fontsize = ___)
# 畫出來
plt.plot(___f1___)
plt.plot(___f2___)
plt.legend(prop = twfont1)
```
```python=
# 載入套件、模組
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
# 定義出指定函式
def f1(x):
return (x-0.2)**2+2
def f2(x):
return -x**3+2
# 設定座標點
x_point = np.linspace(-2, 2, 20)
y_point1 = f1(x_point)
y_point2 = f2(x_point)
# 定義圖片大小、標題
plt.figure(figsize = (8, 8))
plt.title("二次函數", fontproperties = twfont1, fontsize = 15)
plt.xlabel("x軸", fontproperties = twfont1, fontsize = 8)
plt.ylabel("y軸", fontproperties = twfont1, fontsize = 8)
# 畫出來
plt.plot(x_point, y_point1, c = "#005AB5", linewidth = 2, marker='o', ms = 5, label = "f1")
plt.plot(x_point, y_point2, linestyle = "dotted", c = "#3D7878", linewidth = 2, marker='s', ms = 5, label = "f2")
plt.legend(prop = twfont1)
```

:::
### 散佈圖 Scatter
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (5, 5))
plt.title("散佈圖", fontproperties = twfont1, fontsize = 20)
x_point = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y_point = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
# 散佈圖用scatter
plt.scatter(x_point, y_point, c = "#7373B9")
# 沒有圖例,用plt.show()
plt.show()
```

:::warning
**顏色可以用漸層的**
[cmps](https://matplotlib.org/stable/users/explain/colors/colormaps.html)
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (5, 5))
plt.title("散佈圖", fontproperties = twfont1, fontsize = 20)
x_point = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y_point = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.linspace(0, 100, 13)
plt.scatter(x_point, y_point, c = colors, cmap = "Blues")
# 顯示colorbar
plt.colorbar()
plt.show()
```

:::
:::warning
**補充**
匯入檔案
>[**2-22 grade連結**](https://drive.google.com/file/d/1FlvETq3yinKiEv0UF4fmCias1NySX5RW/view?usp=drive_link)(也有放在資料夾裡)
>第一行是座號;第二行是成績
```python=
data = np.loadtxt("/content/drive/MyDrive/資研/雄資/教學/20240526/2-22 grade.csv",delimiter=",")
print(data.shape)
```
調整檔案
```python=
data_T = data.T
```
畫出散佈圖
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (8, 5))
plt.title("二年二十二班成績散佈圖", fontproperties = twfont1, fontsize = 20)
plt.xlabel("座號", fontproperties = twfont1, fontsize = 12)
plt.ylabel("成績", fontproperties = twfont1, fontsize = 12)
x_point = data_T[0]
y_point = data_T[1]
plt.scatter(x_point, y_point)
plt.show()
```

加上班平均的標準線
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (8, 5))
plt.title("二年二十二班成績散佈圖", fontproperties = twfont1, fontsize = 20)
plt.xlabel("座號", fontproperties = twfont1, fontsize = 12)
plt.ylabel("成績", fontproperties = twfont1, fontsize = 12)
# 計算班平均
s = 0
for i in data_T[1]:
s += i
standard = s//40
x_point = data_T[0]
y_point = data_T[1]
# 設定點
x_point1 = [0, 40]
y_point1 = [standard]*2
plt.scatter(x_point, y_point)
# 畫出班平均的線
plt.plot(x_point1, y_point1, 'r', label = "班平均")
plt.legend(prop = twfont1)
```

:::
### 長條圖 Bars
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (10, 5))
plt.title("長條圖", fontproperties = twfont1, fontsize = 20)
plt.xlabel("座號", fontproperties = twfont1, fontsize = 10)
plt.ylabel("作業完成度", fontproperties = twfont1, fontsize = 10)
# 取得 array = 1~38
x_point = np.arange(1, 39)
# 取得 array = 1~100
Y = list(np.arange(0, 100))
# 隨機取 38個1~100之間 的數字做為 1~38號的完成狀況
y_point = rd.sample(Y, 38)
# 長條圖用bar
plt.bar(x_point, y_point)
plt.show()
```

:::warning
**補充**
使用 `plt.barh()` 可以繪製橫向的長條圖
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (5, 10))
plt.title("長條圖", fontproperties = twfont1, fontsize = 20)
plt.xlabel("座號", fontproperties = twfont1, fontsize = 10)
plt.ylabel("作業完成度", fontproperties = twfont1, fontsize = 10)
# 取得 array = 1~38
x_point = np.arange(1, 39)
# 取得 array = 1~100
Y = list(np.arange(1, 101))
# 隨機取 38個1~100之間 的數字做為 1~38號的完成狀況
y_point = rd.sample(Y, 38)
# 長條圖用bar
plt.barh(x_point, y_point)
plt.show()
```

:::
:::info
**練習**
請利用以下檔案,先將作業完成度轉換成完成百分比,並畫出長條圖
>[**2-22 homework連結**](https://drive.google.com/file/d/1zi9dw0euNINONgm0t-Fqlt17DyCMcWlU/view?usp=drive_link)(也有放在資料夾裡)
>第一行是座號;第二行是完成作業數(共17項作業)
匯入檔案
```python=
data = np.loadtxt("/content/drive/MyDrive/資研/雄資/教學/20240526/2-22 homework.csv",delimiter=",")
data_T = data.T
```
把完成件數轉成百分比
```python=
finish = data_T[1]
percentage = finish/17*100
```
引入套件 + 設定圖片
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (10, 5))
plt.title("長條圖", fontproperties = twfont1, fontsize = 20)
plt.xlabel("座號", fontproperties = twfont1, fontsize = 10)
plt.ylabel("作業完成度", fontproperties = twfont1, fontsize = 10)
```
繪圖
```python=
x_point = data_T[0]
y_point = percentage
plt.bar(x_point, y_point)
plt.show()
```
:::
### 直方圖 Histograms
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (10, 5))
plt.title("長方圖", fontproperties = twfont1, fontsize = 20)
D = list(np.arange(0, 100))
data = rd.sample(D, 20)
# 直方圖用plt.hist(),bins = "auto"會自動決定組距
plt.hist(data, bins = 'auto')
plt.show()
```

### 圓餅圖 Pie Charts
```python=
import numpy as np
import random as rd
import matplotlib.pyplot as plt
import matplotlib.font_manager as plt_font
twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc')
plt.figure(figsize = (10, 5))
plt.title("圓餅圖", fontproperties = twfont1, fontsize = 20)
data = np.array([35, 25, 25, 15])
# 設定各項數據名稱
L = ["freshman", "sophomore", "junior", "senior"]
# 設定圓餅突出的距離
E = [0, 0.2, 0, 0]
# 設定顏色
C = ["#C4E1FF", "#66B3FF", "#2894FF", "#004B97"]
# 圓餅圖用plt.pie(),labels圖例,explode突出,colors顏色,shadow陰影
plt.pie(data, labels = L, explode = E, colors = C, shadow = True)
# title標題,loc圖例位置
plt.legend(prop = twfont1, title = "Students", loc = "upper left")
```

---
## 讀寫檔案
:::danger
注意!以下所有程式碼的檔案路徑都要記得修改成自己的檔案路徑
或是直接複製我的,但是另外加一行
```python=
f = '裡面放要存資料的資料夾路徑'
```
:::
在 Python 檔案中,使用`\n`來辨別文章的分行
```
今天星期日。
今天的日期是5/26。
-2024.5.26
```
在檔案中,格式會是
```
今天星期日。\n今天的日期是5/26。\n-2024.5.26
```
### 開啟檔案
```python=
infile = open('檔案路徑', '代號')
```
| 代號 | 功能 |
|:----:|:---------------------:|
| r | read 讀取 |
| w | write 撰寫(複寫) |
| a | append 添加(在最後) |
| x | create 建立 |
>w、a 在檔案不存在的情況下會直接建立一個新的檔案
### 關閉檔案
開啟檔案後要記得關閉就像瀏覽器要記得登出一樣,是一種好習慣
>沒有關閉會記憶體被佔據
```python=
infile.close()
```
### 讀取檔案
| 名稱 | 功能 |
|:---------:|:----------------------:|
| read | 一次讀進全部的檔案 |
| readline | 讀取第一行 |
| readlines | 一行一行讀取全部的檔案 |
1. read
```python=
infile = open(f+'text01.txt','r')
content = infile.read()
infile.close()
```
加上指定大小(讀取指定字元數)
```python=
infile = open(f+'text01.txt','r')
content = infile.read(7)
infile.close()
```
2. readline
```python=
infile = open(f+'text01.txt','r')
content = infile.readline()
infile.close()
```
加上指定大小(讀取第一行的指定字元數)
>超過字數還是只會讀取第一行
```python=
infile = open(f+'text01.txt','r')
content = infile.readline(20)
infile.close()
```
3. readlines
```python=
infile = open(f+'text01.txt','r')
content = infile.readlines()
infile.close()
```
加上指定大小(讀取包含指定字元數的那幾行)
```python=
infile = open(f+'text01.txt','r')
content = infile.readlines(20)
infile.close()
```
:::info
**練習**
請讀取下列檔案的內容,並輸出成以下格式
```
寒蟬淒切。
對長亭晚,驟雨初歇。
都門帳飲無緒,留戀處,蘭舟催發。
執手相看淚眼,竟無語凝噎。
念去去、千里煙波,暮靄沈沈楚天闊。
多情自古傷離別。
更那堪、冷落清秋節。
今宵酒醒何處,楊柳岸、曉風殘月。
此去經年,應是良辰好景虛設。
便縱有、千種風情,更與何人說。
```
>[**檔案連結**](https://drive.google.com/file/d/1-kaNLx9_iDO4_CplLsG56xMWHhUDuswx/view?usp=sharing)
>可以先下載下來再傳上雲端
```python=
infile = open(f+'practice1.txt','r')
content = infile.read()
infile.close()
for i in content:
if i == '。': print('。')
else: print(i, end='')
```
:::
4. readable
回傳該檔案是否能進行讀取
```python=
infile1 = open(f+'text00.txt','r')
infile2 = open(f+'text00.txt','w')
print(infile1.readable())
print(infile2.readable())
infile1.close()
infile2.close()
```
### 撰寫檔案
:::danger
使用 write 會先 **清空原先的所有內容** 再寫入新的
:::
1. write
```python=
infile = open(f+'text02.txt','w')
infile.write('今天星期天。')
infile.close()
```
2. writelines
會一行一行寫入
```python=
infile = open(f+'text03.txt','w')
infile.writelines(['今天星期天。\n', 'Hello World\n', 'weee~\n'])
infile.close()
```
3. writable
回傳該檔案是否能進行撰寫
```python=
infile1 = open(f+'text00.txt','r')
infile2 = open(f+'text00.txt','w')
print(infile1.writable())
print(infile2.writable())
infile1.close()
infile2.close()
```
### 其他
1. 添加內容(不刪除原先內容)
```python=
infile = open(f+'text04.txt','a')
infile.write('新增的文字\n')
infile.close()
```
2. 撰寫檔案
使用 print 的 file 參數
```python=
infile = open(f+'text05.txt','w')
print('ㄚㄚㄚㄚㄚㄚㄚㄚㄚ', file=infile)
infile.close()
```
3. tell
回傳指針位置
```python=
infile = open(f+'text01.txt','r')
content = infile.read(10)
t = infile.tell()
infile.close()
```
4. seek
- 移動指針位置
- 函式:seek(a, b)
>a 為偏移量, b 為起始位置
```python=
infile = open(f+'text01.txt','r')
content1 = infile.read(10)
infile.seek(0, 0)
content2 = infile.read(10)
infile.close()
```
5. with
會在執行動作結束後自行關閉檔案
```python=
with open(f+'text06.txt', 'w') as infile:
infile.write('hello')
```
:::info
**練習**
請寫程式建立一個檔案,並利用程式碼在檔案內撰寫文字(可以是這堂課的感想、建議或是什麼都行),上傳到資料夾
>[**資料夾連結**](https://drive.google.com/drive/folders/12JXvKVSa6xW3pC9d85UxaMFsP-YlR4VN?usp=sharing)
>可以署名也可以不用
:::
---
## 網路爬蟲 Web Crawler
1. 自動抓取網頁內容並分析、找到特定需要的資料
2. 流程:網頁的 URL -> 打開網址 & 存取內容 -> 分析、取得要的部分
3. 特色:省力、省時間,可以執行重複性高的工作
### 引入套件
```python=
# Request 送出請求;urlopen 用來開啟連結
from urllib.request import Request, urlopen
# 爬蟲的核心
from bs4 import BeautifulSoup
```
### 進入網站
```python=
# 台大電機的教授名單
url = 'https://web.ee.ntu.edu.tw/teacher_index_all.php'
# 傳送 request 給伺服器,相當於在搜尋欄打上網址
req = Request(url)
# urlopen 開啟連結內容 利用 read 讀進變數 decode 是把 bytes 轉成 string
html = urlopen(req).read().decode()
# 利用 BeautifulSoup 去解析成 html 檔案
bsObj = BeautifulSoup(html, "html.parser")
```
:::warning
如果網站有擋爬蟲的機制會出現 Error
可以利用以下程式偽裝成瀏覽器
```python=
req = Request(url, headers={ 'User-Agent': 'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/35.0.1916.47 Safari/537.36' } )
```
>User-Agent 可以按 F12 後找到 Network conditions
>
>按 F12 後找到叉叉旁邊的三個點
>
>
>點開選 More tools 裡的 Network conditions
>
>
>取消勾選 User browser default 就可以在 Custom... 裡選喜歡的 User-Agent
>
:::
### 取得特定內容
>按 F12 可以看到網頁原始碼
1. find
會找到該標籤下第一次出現的內容
```python=
bsObj.find('tag')
```
2. get_text
利用 get_text 擷取文字內容
```python=
bsObj.find('tag').get_text()
```
如果是 class 就利用 `{}`
```python=
bsObj.find('tag', {'class':'class name'})
```
3. find_all
會找到所有該標籤下的內容,並包裝成 list
```python=
bsObj.find_all('tag')
```
>可以利用 for-loop 一一取出
:::info
**練習**
請撰寫一個程式列出所有教授的名字、email、職稱、研究專業
```
e.g.
戴邇立 thierryblu@ntu.edu.tw 專任教授 通訊與信號處理
張子璿 tchang9@ntu.edu.tw 副教授 奈米電子
張耀文 ywchang@ntu.edu.tw 特聘教授 計算機,電子設計自動化
陳政維 cwchenee@ntu.edu.tw 副教授 自動控制
陳景然 chenjim@ntu.edu.tw 專任教授 積體電路與系統,電力系統與電力電子組
陳中平 cpchen@ntu.edu.tw 專任教授 電子設計自動化,醫工
.
.
.
葉丙成 pcyeh@ntu.edu.tw 專任教授 計算機,通訊與信號處理,資料科學與智慧網路
顏嗣鈞 hcyen@ntu.edu.tw 特聘教授 計算機
于天立 tianliyu@ntu.edu.tw 副教授 計算機
```
```python=
```
:::