程式設計與資料科學導論

week 6

謝舒凱

pic.by DALL-E 3

本週學習內容

  • More advanced Python programming concepts and skills necessary to excel as a data scientist.

    • Functions, Modules, and Libraries
    • String operations and REGEX
  • Simple deployment of a DS (web) app

函式 function

  • 在 Python 中,函式是一個可重用的程式區塊,它執行一個特定的任務。函式可以有參數(輸入)和返回值(輸出)
def greet(name):
    return f"Hi, {name}!"
  • greet 是一個函式,它接受一個參數 name,並返回一個包含問候語的字串。

String format

  • 上面的例子,我們用到了 f-string (formatted string literals),它是 Python 3.6 及以上版本中新增的一個功能,用簡潔而直觀的方式來格式化字串(嵌入變數和表達式)。你可以在字串前加上字母 "f",並在字串中使用大括號 {} 來插入變量的值。

  • 如果使用之前 str.format() 方法時,我們將變數放在字串的外部,並使用 {} 作為佔位符:

def greet(name):
    return "Hi, {}!.format(name)"

格式化字串 (f-string) 的優點

  • f-string 和 str.format() 生成的結果是相同的,但 f-string 提供了一種更簡潔和直觀的語法,效能也更快。

  • f-string 不僅可以插入變數,還可以插入任意表達式的結果。

x = 3
y = 4
result = f"The sum of {x} and {y} is {x + y}."

Lambda 函式

  • Lambda 函式是一種匿名的簡單函式。匿名的意思是,我們可以用它來定義一個簡單的函式,而不需要使用 def 關鍵字。
add = lambda x, y: x + y

等同於

def add(x, y):
    return x + y
  • 綜合起來,那麼前面的妳好函式可以這樣寫:
greet_lambda = lambda name: f"Hello, {name}!"

語法糖 syntax sugar

  • 說到簡潔,就順道談一下語法糖

  • 一種程式設計語言的語法特性,它讓程式碼更容易閱讀和寫作,但並不增加語言的功能。換句話說,它是一種為了使程式碼更加「甜美」(易讀和易寫)的語法。

  • 我們之前已經介紹過的 list comprehension, f-string 就是一種語法糖。

例子

# 普通方式
squares = []
for x in range(10):
    squares.append(x**2)

# List comprehension (更「甜美」的建立列表的語法。)
squares = [x**2 for x in range(10)]

更多的例子

1 < x < 10
# equivalent to 1 < x and x < 10

{key: value for key, value in d.items()}
# Dict comprehension

x = something if condition else otherthing
# python ternary

a += 1
# equivalent to a = a + 1

模塊(Module)

  • 模塊是一個包含一組相關函數和變量的文件。模塊通常用 .py 文檔表示。我們可以使用 import statement 導入模塊,並使用其中的函式和變數。
    • 假設我們有一個叫做 math_operations.py 的模塊。
# math_operations.py
def add(a, b):
    return a + b
def subtract(a, b):
    return a - b
#我們可以在其他地方這樣使用:
import math_operations
result = math_operations.add(3, 4)

有三種導入模塊的方法

  1. import module_name
import math 
result = math.add(3, 4)
  1. import module_name as alias_name
import math as m
result = m.add(3, 4)
  1. from module_name import function_name
from math import add
result = add(3, 4)

套件(Package)

  • 一個包含多個模塊的目錄,它有一個特殊的 init.py 文件(在 Python 3.3 之後,init.py 文件不再是必需的,但通常還是會加上以保持相容性)。
my_package/
    __init__.py
    module1.py
    module2.py
  • 可以使用點運算符(.)來訪問套件中的模塊。例如,如果你想要使用上面結構中的 module1,你可以使用 import my_package.module1

函數庫(Library)

  • 函式庫通常指的是一組相關的模組或套件,它們提供一些相關的功能或工具,並且通常由第三方提供(也就是說,它們不是 Python 標準庫的一部分)。

  • 函式庫可以包括一個或多個模組或套件。通常是為了實現一組相關的功能或提供一組相關的工具或方法。

例如,requests 是一個流行的 HTTP 請求函數庫。我們可以這樣安裝和使用它:

pip install requests
import requests
response = requests.get("https://www.example.com")

小結

  • 一個模組是一個單一的 Python 檔,而一個套件是一個包含多個模組的目錄。
  • 模組用於組織程式碼,而套件用於組織模組。通常會將相關的模塊組織成一個套件。
  • 函式庫則是一個更高層次的組織結構,它可以包含多個模組和/或套件,並經常由第三方維護和發佈。

例子

  • 模組:一個名為 math_operations.py 文件,包含了一些基本的數學函數。
  • 套件:一個名為 math_lib 的目錄,包含了 arithmetic_operations.py 和 trigonometric_operations.py 等多個模組。
  • 函式庫:一個名為 NumPy 的數學函式庫,它提供了大量的數學和統計函數、數組對象等。這個函式庫包含了多個模組和套件。

套件管理工具

協助開發者輕鬆地安裝、管理和更新函式庫與套件(libraries/packages)

  1. pip 是 Python 的官方套件管理工具,它允許你從 Python Package Index (PyPI) 安裝和管理套件。
pip install package_name
  1. conda 是一個開源的套件管理系統,也是一個環境管理系統。這意味著它不僅可以管理套件,還可以管理你的工作環境。通常與 Anaconda 發行版一起使用。

  2. poetry 晚近處理套件之間的依存關係的強大工具。

資料科學

  • 有了套件的支援,我們可以使用 Python 來進行資料科學的工作。(站在社群的肩膀上)

  • 常用的套件有:

    • NumPy
    • Pandas (助教課請認真聽)
    • Matplotlib
    • Scikit-learn
    • ........

Lazy import 的概念

  • 有時候我們不需要一次把所有的套件都載入記憶體,這樣會造成記憶體的浪費。
pip install pyforest
  • 但適合自己練習寫程式的時候使用,因為 Explicit is better than implicit 是 python programming 的座右銘。

Text Analytics

  • 我們期中考那週就會開始進行Data Sciecne/Text Analytics的學習。
  • 在程式概念上還需要了解的,就是正規表達式(Regular Expression)。

Regular Expression

  • 正規表達式是一種用於匹配字符串的(輕量語言)。它們可以用於檢查字符串是否包含特定的字符、子串或模式。它們還可以用於從字符串中提取子字符串。

  • 網路教學很多

  • 這個視覺化工具來練習

專題練習暖身

  • 我們慢慢可以邁向學習實作一個完整的資料科學專案流程

  • 如果你發現自己電腦運算資源不夠用了,善用 Google colab
    • command line and magic command
  • 以下練習會用到 streamlit, textblob, nltk
pip install streamlit textblob nltk
  • 記得再做一件事
import nltk
nltk.download('wordnet')

自然語言處理

用文本情緒分析來練習非結構性數據

分享在 Replit

回家玩玩企鵝

用南極洲的帕默群島 (Palmer Archipelago) 企鵝來練習處理結構性數據

https://lopentu.github.io/nlp_web/slides/week2.html#23

在這個例子中,requests.get 是從 requests 函數庫中導入的一個函數,它發送一個 HTTP GET 請求。

你可以使用 import 語句來導入和使用模組、套件或函式庫中的函數和類。