---
# System prepended metadata

title: 電腦計算基礎
tags: [課程資訊]

---

# 電腦計算基礎
`課程資訊`
開課學期：上學期（xxx-1）
授課時間：週二 2,3,4 (09:10-12:10)
上課地點：全變 403 大講堂
授課教師：洪淑蕙
領域專長：地震學
學分：3.0

`課程大綱`
1. Linux (Unix) 系統及基礎命令
2. vi 編輯器
3. C shell 與 bash shell
4. AWK 與 SED
5. Python
5.1  資料型態、變數、基本操作
5.2  邏輯運算、條件控制、迴圈、列表、函數、數對、字典
5.3  NumPy 與 scipy 科學運算套件
5.4  matplotlib 繪圖套件
6. Obspy 地震學資料處理套件
6.1  讀取與寫入地震資料
6.2  繪製地震波形
6.3  從地震資料中心(IRIS, FDSN, …)索取資料
6.4  訊號處理與濾波
6.5  修正儀器響應 

`課程目標`
本門課程旨在幫助大學部高年級，以及新進研究所學生快速掌握 LINUX 系統中免費的多種程式語言（尤其是地球物理、地震學相關的資料處理及分析工具）。希望學生能透過本門課程紮實的學習與訓練，能夠利用這些工具或甚至寫下自己的程式來完成課堂練習、回家作業、期末報告，乃至於個人的研究工作。


`評分標準`
(60%) 課堂練習+回家作業
(40%) 課程相關之期末報告

## Plain Language Introduction
對於就讀地質系的學生來說，地球物理是完全不同的世界，必修課的地球物理充滿了理論和推導，彷彿回到大一微積分的惡夢。但如果能從實做開始接觸單一面向的知識，循序漸進的理解，或許這門學科並不如你想像中的遙不可及哦！

## Part I: Basic commands on Linux
在地震學(Seismology)的研究中，有很多理論和技術是基於數學與物理的性質與模型的，而要實現這些技術，就必須仰賴電腦強大的運算能力來進行資料處理。

個人電腦並不適合儲存大量的資料和進行運算，因此，我們將工作站(Workstation)和磁碟陣列架成伺服器(Server/Host)，並透過網路連線進行工作。

不同於個人電腦的Windows系統以圖像介面(GUI)為主，這些工作站的作業系統通常都使用開源且輕量的Linux系統，而我們則透過指令列(Command line, CLI)來進行操作。

因此，這門課的第一部分將會帶大家學習如何使用指令列，在Linux系統中來去自如！

## Part II: vim editor
vi/vim是一套為了在指令列中進行文件編輯而生的工具，對於習慣一手鍵盤、一手滑鼠在圖像介面上工作的人(基本上就是所有人)來說可說是非常痛苦。

不過一旦你克服了它陡如峭壁的學習曲線，便可以體會到和程式碼融為一體、把滑鼠丟掉、把所有其他編輯器都加上vim插件、嚇死看你寫程式的人等各式各樣的快感(好像沒有很吸引人)。

如果沒有追求以上遠大的目標，你只要知道:q可以退出vi模式，並加入[VScode](https://code.visualstudio.com/)教的懷抱，只在偶爾需要快速檢視或編輯的時候再拿出vim這把小瑞士刀。

## Part III: Shell script, AWK, and SED
學會了如何在Linux指令列進行基本的瀏覽和編輯後，我們要開始學習一些實用的工具。

殼層(Shell)在系統中扮演的是下指令給算核(kernal)的角色，前面學到在Linux指令列中常用的指令如cd, ls都是shell的語法，通常預設的殼層語法是Bash，其他的先不做介紹。

有些時候我們要做比較複雜的操作，單行的指令難以達成或是會太冗長難以編輯，因此我們會寫成一個shell script的腳本檔(.sh)，讓這些指令逐步執行。來路不明的腳本可以很危險，因為它基本上擁有你這個使用者所有的權限。Windows系統上的批次檔(.bat)也是同樣的道理，所以這些檔案格式常常被禁止用電子郵件或訊息傳送。

至於SED和AWK則是幫助shell來處理資料的工具，SED主要用來處理一行一行的文字，而AWK則更多用來讀寫分欄位的資料(例如有用空白分隔的.txt或是逗號分隔的.csv)。
:::info
![image](https://hackmd.io/_uploads/S1tXyVHOC.png =300x300)
[Linux (十) - Shell 的基本概念和操作](/ODt4BBqEQQuIIMZmO9C1VA)
:::


## Part IV: Python
到了這裡，你可能會有種倒吃甘蔗的感覺，彷彿突然從唐詩宋詞進入到現代散文，識讀的難度大幅降低。但隨之而來的是廣泛多樣的套件(package)需要熟悉。

在這門課程中有幾個重要的套件需要學習，閱讀冗長的教學文件(document)令人煩躁。實際上我們不需要硬記下所有的指令，只要掌握每個套件大致上有哪些功能，需要時候再去查詢，用久自然就會慢慢熟悉了。

第一個是幾乎相當於Python標配的數學計算套件NumPy，它提供了數值專用的陣列NumPy Array，以及許多計算功能，再搭配上科學計算套件SciPy，可以處理絕大多數你需要的數學計算。

第二個是資料庫Pandas，這個套件提供的資料格式pandas dataset比較接近常用的excel，可以給文字格式的row跟column，內容也不限定要是數字，在讀寫上有比較大的靈活度。

最後則是地震學大套件ObsPy，基於NumPy和SciPy的科學計算功能，再加上現代研究所需要的讀寫地震資料的功能，可以說是不可或缺的一個套件。也有許多人基於ObsPy開發各自研究所需要的功能，因此打好ObsPy的基礎相當重要。

## 結論: 實作為王
在一個學期接觸這麼廣泛的知識可能會令你感到吃力，不過並不用太有壓力，你只要了解每個項目能夠提供什麼功能，忘記的時候再去查詢說明文件（Documentation）就好。不論你是否要往地震學的研究發展，這門課都能提供你科學計算所需要的程式基礎。對於做研究的人來說電腦計算只是一個工具，更重要的還是要如何運用它來達成你的目標哦！

> @shihchi90 （邵思齊）、@KGJ0717 （柯俊杰） 撰寫於 2024 年 7 月。