本篇文章主要為資料科學導論中的 Python 程式語言的基礎教學,用於描述如何安裝 Python 環境以及 Python 相關基礎語法介紹,相關內容大綱如下所示。
大綱
- 安裝 Python 與 Jupyter
- Python 與資料科學
- Python 特色
- Python 環境架構與 Python Script
- Python 語言與資料科學
- Python 語法基礎
- 1.變數(variables)與資料型態、型別(types)
- 2.基本運算與是非邏輯(logic)
- 3.list、dict
- 4.if-else 陳述句
- 5.迴圈
- 6.函式(function)
- 7.檔案(File)
- 8.函式庫(libraries)
- 9.錯誤偵測(try catch)
- 10.物件導向(object)
安裝 Python 與 Jupyter
什麼是 Jupyter Notebook
Jupyter 主要提供一個網頁介面,讓使用者可以透過瀏覽器撰寫程式,可以在上面進行 Python 、R 或 Scala 程式的開發!功能相當強大。其特色如下:
- 適合開發資料科學相關的 Python 程式時使用,簡單的網頁編譯器,可以打完程式隨即執行
- 可以用 Markdown 語法做豐富的筆記文件、寫數學式子、執行程式
- 可以方便的看到用 Python 視覺化圖型的結果
可以參考此篇文章來安裝 Python 及 Jupyter
Python 與資料科學
Python 特色
- 易寫、易讀、易學
- 免費、開源,你可以自由的發布複製程式碼、閱讀它的原始碼、並把更動的部分用於新的開源軟件中
- 跨平台,可以在這些平臺上執行,包括 Linux、Windows、MacOS 等
- 擁有強大的社群以及生態系統
Python 環境架構與 Python Script
- Python 腳本以 .py 作檔案名稱結尾
- 內容包含的就是 Python 程式,也就是一連串的 Python 指令
- 通常會用自己偏好的文字編輯器來撰寫程式,例如:最新流行的 VSCode然後再執行它
- 可以在命令提示字元(cmd)輸入「python xxx.py」來執行 xxx.py 這個 python 腳本
假設我們有一個檔案叫 hello.py ,內容如下, 我們可以在命令提示字元用 python 指令來執行它
python hello.py
Python 語言與資料科學
Python 本身就是拿來做做資料科學的應用?
- Python 本身並非被特地設計用來做資料科學應用
- Python 除了資料分析外,也常被拿來做網站後端,撰寫 API、IoT 開發板開發等應用
- Python 生態系統裡有很多第三方套件是專門為資料科學與科學計算而生
Python 常見做資料科學應用的套件:
- numpy:做向量矩陣轉換
- scipy:可以針對矩陣進行許多常見的統計計算
- pandas:做資料分析與資料處理
- matplotlib:做資料視覺化
- scikit-learn:做機器學習
- opencv:做影像辨識
Python 語法基礎
1.變數(variables)與資料型態、型別(types)
- 賦予名字給某個值
- 在程式裡重複使用
- 值可以不斷被改變
- 變數規則:
❖ 變數名稱保留字:
❖ 指定變數的語法:
x = 20
在此之後 x 即代表 20 請注意這個等號並不是數學裡相等的意思,而是「指定」,左右不能互換
❖ 使用變數:
x * 40
結果 = 4000
- 資料型態、型別(types)
- int:整數
- float:浮點數
- str:字串
❖ int:Integer,整數,沒有小數點
可以使用 type 來判斷目前資料的型態
EX:
type(0)
type(-124819)
Output 為:
int
int
❖ float:Float,浮點數,有小數點的數字
可以使用 type 來判斷目前資料的型態
EX:
type(3.5)
Output 為:
float
❖ str:String,字串,任何用單引號(')或雙引號(")括起來的文字都是字串
可以使用 type 來判斷目前資料的型態
EX:
type('hello world')
type("你好")
type('3') #即使內容是數字,如果用引號括起來就是字串
Output 為:
str
str
str
str 可以相加,會把兩個字串連在一起
'A' + 'Python'
Output 為:
APython
2.基本運算與是非邏輯(logic)
- 運算元、運算子
- 基本的加減乘除
❖ 算數運算子
EX:
print(5 + 3)
print(25 - 13)
print(5 * 3)
print(25 / 5)
Output 為:
8
12
15
5
print(21 % 2) # 21 / 2 的餘數為 1,所以結果為 1
print(3 ** 5) # 3 的 5 次方
Output 為:
1
243
- 比較運算子
- 如何判斷兩個數字是否相等?
- 兩串文字是否相等?
- 數字 A 是否大於數字 B?
- 我們可以用 == 來知道兩個值是否相等,用 != 來知道兩個值是否不相等
EX:
print(2 == 2)
print(2 == 5)
print(3 != 3)
print(3 != 4)
Output:
True
False
False
True
結果可以看出這些比較判斷所呈現的結果,只有 True or False
請注意
== 和 = 是完全不一樣的
= 用於指定,將左項指定為右項的值,左右不可交換
== 用於比較,比較兩者是否相等,左右可以交換
另外比較運算子也可用於字串 EX:
print('word' == 'word')
print('word' != 'world')
Output:
True
True
- 邏輯運算子
- 條件 X 成立「而且」條件 Y 成立
- 條件 X 成立「或者」條件 Y 成立
- 條件 X 「不成立」
EX:
print(True and True)
print(True and False)
print(True or False)
print(False or False)
print(not True)
print(not False)
Output:
True
False
True
False
False
True
3.list、dict
當資料如果有一整串時,例如:十屆金鐘獎的得主、多個人名、多個品牌種類, 在 Python 裡,list 可以表示這種類型的資料
❖ List
用一對中括弧 [] 來代表一個 list 的開始與結束,list 中的元素用逗號分隔
EX:
a = ['Ben', 'Polo', 'Ken', 'Archer']
len(a) #可以用 len 函式來檢視它的長度
a[0] #取得 list 中的元素
a[-1] #從後面取得 list 中的元素
Output:
4
'Ben'
'Archer'
語法剖析:
1. a 是我們想檢視的 list
2. index 是從 0 開始而非 1
3. 因此 'Ben' 在這個 list 中的位置是 0 而非 1
取得 list 中的「其中一部分」
EX:
a = ["1", "2", "3", "4", "5", "6", "7"]
print(a[3:6])
print(l[:5])
Output:
['4', '5', '6', '7']
['1', '2', '3', '4']
語法剖析:
- 中括弧裡面的內容包含一個冒號:
- 冒號前是開始位置
- 冒號後是結束位置
- 結果並不包含結束項
改變 list 中的內容:
EX:
a[0] = 'first'
print(a)
Output:
['first', '2', '3', '4', '5', '6', '7']
增加 list 的內容 可以使用 append 方法:
EX:
a.append('eight')
print(a)
Output:
['first', '2', '3', '4', '5', '6', '7', 'eight']
❖ Dictionary
- 用一對大括弧 {} 來表示一個 dict 的開始與結束
- 每一個元素都是一組 key-value
- key 即是索引,每個索引對到一個值
- key 與 value 中間用冒號隔開,每組之間用逗號隔開
- 使用方法很類似 list,但 dict 是以 key 代表值的位置,因此我們可以用以下語法查看內容:
EX:
a_dict = {'name': 'Ben', 'height': 178}
print(a_dict['height'])
#增加資料到字典中
a_dict['age'] = 'xx'
print a_dict
#更新字典內的元素
a_dict.update({'height': 200})
print a_dict
Output:
178
{'name': 'Ben', 'height': 178, 'age': 'xx'}
{'name': 'Ben', 'height': 200, 'age': 'xx'}
至於要如何將 dict 裡的資料全部讀出來,可以透過下列語法:
# 遍歷整個字典資料
for rec in a_dict:
print rec, a_dict[rec]
4.if-else 陳述句
if 陳述句可以用來實現所謂的判斷流程,讓某些程式只有在某個條件成立時才會執行
if 語法需要注意的細節:
- if 陳述句之後,必須加一個冒號
- 只有在該判斷式成立時才會執行的程式碼,稱為 if 區塊(if block),if block 裡面的每一行程式碼,前面都必須縮排
- else 後面也必須增加冒號,下面的內容叫 else block,else block 裡面的內容也必須縮排
EX:
判斷奇偶數,no % 2 為 0
num = input('please input a n')
if num%2 == 0:
print(num, 'even')
else:
print(num, 'odd')
5.迴圈
迴圈 (loop) 就是在特定程式區塊 (block) 中,重複執行相同的工作,分為 for 迴圈及 while 兩種,下列再詳細描述
❖ for
for 迴圈擁有一個計數器,稱為迴圈變數。這使得 for 迴圈能夠知道過程中的執行順序
EX:
no = [1,2,3,4,5,6,7,8,9]
for i in no:
print i
Output:
1
2
3
4
5
6
7
8
9
❖ while
利用一個返回結果為布林值的表達式作為循環條件,當這個表達式的返回值為「true」時,則反覆執行循環內的程式碼;若表達式的返回值為「false」,則不再執行循環體內的代碼,繼續執行循環體下面的代碼
EX:
# While 迴圈
x=0
while x < 10:
print 'x is currently: ',x
print 'x is still less than 10, adding 1 to x'
x+=1
else:
print 'All Done!'
Output:
x is currently: 0
x is still less than 10, adding 1 to x
x is currently: 1
x is still less than 10, adding 1 to x
x is currently: 2
x is still less than 10, adding 1 to x
x is currently: 3
x is still less than 10, adding 1 to x
x is currently: 4
x is still less than 10, adding 1 to x
x is currently: 5
x is still less than 10, adding 1 to x
x is currently: 6
x is still less than 10, adding 1 to x
x is currently: 7
x is still less than 10, adding 1 to x
x is currently: 8
x is still less than 10, adding 1 to x
x is currently: 9
x is still less than 10, adding 1 to x
All Done!
6.函式(function)
將重複使用的程式碼轉換為一個函式,有效簡化程式碼,並可重複利用,也可將函式當成一個函式的輸入(lambda)
先前章節我們有使用過的函式:
- print: 印出某個值
- len: 取得一個串列的長度
- type: 取得一個值的型別
EX:
len(list)
5
語法剖析:
- len 是函式名稱
- 函式名稱之後須加一對括弧,括弧間的是函式的輸入
- 在這裡只有一個輸入,即 list
- 若有多個輸入值,則用逗號分隔( , )
- (非語法) 5 是這個函數呼叫的輸出
函式撰寫方式
EX:
# 函式
def addNum(a, b): # 函式命名標準會採取駝峰式的樣式
return a+b #Return
print addNum(1,4)
Output:
5
如果要在函式的輸入值不預先定義有幾個,可以透過下列語法:
# 接受多個 Key/Value 參數
def make_two_lists(**kwargs):
keys,values = [],[]
for k,v in kwargs.items():
keys.append(k)
values.append(v)
return [keys,values]
make_two_lists(david='M', Mary = 'F', John='M')
Output:
[['John', 'Mary', 'david'], ['M', 'F', 'M']]
7.檔案(file)
本章節主要描述該如何讀取檔案內容以及對檔案的操作
❖ 寫檔
EX:
#將Hello World 寫入檔案中
fid = open('test.txt', 'w')
fid.write('Hello\nWorld')
fid.close()
❖ 讀檔
EX:
# 一行一行讀取檔案
with open('test.txt', 'r') as fid:
for line in fid:
print("Line: " + line.strip())
# 讀取檔案中所有內容
with open('test.txt', 'r') as fid:
s = fid.read()
print "讀取檔案中所有內容line =>",s
Output:
Line: Hello
Line: World
讀取檔案中所有內容line => Hello
World
8.函式庫(libraries)
函式庫是使用 Python 不可或缺的一環,沒有函式庫的 Python 簡直沒有用處!
所謂的函式庫:
- 前人或神人寫好的一堆函式
- 使用者可以「引用」(import) 函式庫來使用這些函式
- 讓程式碼更簡潔且開發更快速
EX:
# 引用函式庫,並顯示目前的時間
import time
# 我們可以使用這個函式庫裡面的函式strftime
proc_time = time.strftime("%Y-%m-%d %H:%M:%S")
print(proc_time)
Output:
2017-09-21 06:51:11
也可以只引用函式庫中的其中某幾個函式
EX:
# from 後面接的是函式庫名稱,import 後接的是函式名稱
from random import choice
choice([1, 5, 7, 3, 9, 0])
Output:
5
9.錯誤偵測(try catch)
程式在執行的過程中,往往會遇到錯誤狀況,例如:型別錯誤,資料讀取錯誤等,為了避免一發生錯誤程式就停止且能夠即時紀錄或顯示錯誤資訊,就必須做好錯誤判斷的處理
EX:
# 處理 IO Exception
try:
f = open('testfile','w')
f.write('Test write this')
except IOError: #處理IOError
print("Error: Could not find file or read data")
else:
print("Content written succesfully")
f.close()
10.物件導向(object)
待補