# 電腦計算基礎 `課程資訊` 開課學期:上學期(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 月。