程式設計與資料科學導論

week 9

謝舒凱

pic.by DALL-E 3

本週學習內容

  • 資料科學:流程、工具與應用

  • 爬蟲入門與文本資料前處理


Open Edition

資料科學處理流程(🫙

  • 資料收集
  • 資料清理與前處理
  • 資料探索分析、視覺呈現與假說驗證
  • 資料建模(機器學習/AI 導入)
  • 資料故事講述與應用部署

記得要處理的資料是什麼類型?(structured vs unstructured),會有不太一樣的方法。這個處理流程對初學者的概念定位很重要。。

虛擬環境建立

virtual environment

  • 開始建立專案了,環境與套件管理就變得重要。
  • 這也像是上週提到的指令列技能,是資料科學實踐的一種基本的技能。
  • (日後可以學習 docker:它模擬了一個完整的操作系統,提供了比虛擬環境 virtual environment更高層次的隔離。)

附帶一提

pip, virtualenv, conda

  • pip 是 Python 的套件管理工具,可以用來安裝、更新、移除套件。
  • virtualenv 是 Python 的虛擬環境管理工具,可以用來建立虛擬環境。
  • conda 是 Python 的套件管理工具,也可以用來建立虛擬環境。

miniconda

  • 進入專案資料夾
cd myproject
  • 建立虛擬環境
conda create -n (改成你想要的環境名稱) python=(改成你要的版本號)
//激活環境,此時可以安裝你需要的套件
conda activate (你剛創建的環境名稱)
//退出環境
conda deactivate
  • 在環境內安裝套件
conda install beautifulsoup4

安裝小技巧

  • 先把所有套件條列式的寫在一個txt檔案 (例如:requirements.txt) ,然後一次安裝所有套件。
beautifulsoup4
requests
html5lib
matplotlib
selenium
jieba
lxml
pip install -r requirements.txt

資料蒐集

  • 資料來源:網路、資料庫(語料庫)、檔案、API 等。
  • 資料格式:結構化、非結構化、半結構化等。
  • 資料蒐集:網頁抓取(深度)和網路爬蟲(廣度)。

網頁抓取 Web Scraping

  • 目的:主要是針對特定網頁進行數據提取,通常是為了獲取特定信息,如產品價格、股票報價、新聞文章等。
  • 操作:往往需要解析網頁的HTML代碼,提取出有用的信息。
  • 選擇性:它通常是選擇性的,只針對特定網頁或網頁的特定部分。
  • 後處理:提取的數據通常會進行進一步的處理或整理,如清理數據、轉換格式、存儲到數據庫等。
  • 負載:由於只關注特定數據,因此對目標網站的負載相對較小。

網頁爬蟲 Web Crawling

  • 目的:指的是系統地瀏覽網際網路來索引網頁信息的過程,搜索引擎的爬蟲(如Googlebot)。
  • 操作:Crawlers 自動瀏覽網絡中的網頁,通常會遵循網頁中的連結到達其他網頁。
  • 廣泛性:廣泛訪問盡可能多的網頁。
  • 數據處理:爬取到的數據可能只簡單地被索引和存儲,例如,搜索引擎會索引網頁內容以改善搜索結果。
  • 負載:由於需要瀏覽大量網頁,爬蟲可能會對網站產生較高的負載。
  • 對大家來說,目前可以學習 web scraping 做專案,但是要注意法律問題 (以及碳足跡!)。

Web page 101

  • 網頁是由 HTML、CSS、JavaScript 組成的。

    • HTML (HyperText Markup Language):網頁的結構與內容。
    • CSS (Cascading Style Sheets):網頁的樣式 (配色、排版..)。
    • JavaScript:網頁的互動與行為。
  • 一開始,我們先知道只需要 HTML 就好了。

參考課程 NLP web

HTML 例子

下載 test.html 並用瀏覽器開啟。

假定我們只要標題

import requests
from bs4 import BeautifulSoup

res = requests.get('https://raw.githubusercontent.com/lopentu/dspy2023/master/lectures/test.html?token=GHSAT0AAAAAACEHU3PIWDTMFGUMF6W2JPMQZKDFM7A')
soup = BeautifulSoup(res.text, 'html.parser')
print(soup.find('h1').text)

Web scraping

步驟

  • 請求網頁 (Requests): 使用工具發送 HTTP 請求(與網頁溝通),取得網頁的HTML內容。
  • 解析HTML (Parsing): 使用剖析器來解析 HTML,從中提取你想要的資料。
  • 儲存資料 (Storage): 將抓取到的資料儲存到你想要的格式,例如 CSV、資料庫等。

課堂練習 colab

[1] 請求網頁 (Requests)

  • 使用 requests 套件來發送HTTP請求,取得網頁的HTML內容。
import requests
  • HTTP 的狀態碼 (status code) 有很多種,例如:200(正常)、404(找不到網頁)、403(權限不足)等等。

例外處理 exception handling

  • 有時候我們會遇到一些錯誤,例如:網頁不存在、網路連線問題等等。
  • 我們可以使用 tryexcept 來處理這些錯誤。
try:
    res = requests.get('https://www.sksksk222.com')
except:
    print('網頁不存在')

[2] 解析 HTML (Parsing)

使用 BeautifulSoup (**) 來解析這個HTML並提取一些數據。

  • find 找符合條件的標籤; 用 find_all 找所有符合條件的標籤。
  • text 取得標籤的文字內容。

(**) 其使用的是 html.parser。除此之外還有 html5lib, lxml 等 parser 可以選擇。

實例練習

中文斷詞(分詞)word segmentation

  • tokenization vs word segmentation

  • 詞彙是語言的基本單位

Wordhood

  • 書寫系統沒有提供線索 (沒有空格)

為何需要斷詞

一切都跟歧義 (ambiguity) 有關

  • 小花生了很久才出來

  • 這題全台大都會。

  • 我去買好了

中文斷詞

  • 有不同的演算法(但已經不太有意義)。

  • 常用的套件 jieba repo

  • 可以做一點簡單的文本分析(關鍵字提取、詞性標記等)。

  • 可以客製化:自訂字典、詞類集(POS set)與停用詞 (stopwords)。

課堂練習 colab

--- # 先分組 <p class="small-text">開始習慣在線上(git)與實體(classroom)的合作方式</p> ![w:550 bg right](../assets/img/textming2.png)