建立用於科學計算的Python開發環境

快速建立用於科學計算的Python開發環境

因其開源的特性,Python社群會依據不同需求,把Python直譯器(命令列介面)、圖形化介面工具(編輯器、檔案瀏覽視窗、功能選單等)、第三方套件及套件管理工具整合成不同的Python發行版本。然而,Python官網所提供的發行版本並不包含用於科學計算的第三方套件,另外,Linux、Mac OS X也只內建Python直譯器,因此若想快速建立用於科學計算的Python開發環境,可考慮安裝以下其中一個Python發行版本(它們的官網都有下載連結及針對Linux、Mac OS X、Windows三個作業系統的個別安裝說明):

這兩個Python發行版本至少都包含NumPy、SciPy、Matplotlib這幾個用於科學計算的第三方套件,讓使用者可以完成檔案讀寫、矩陣運算、畫圖、線性代數、積分、內插、訊號與影像分析、解微分方程...等科學運算用途。這兩個發行版本也包含IPython 互動式命令列介面,相較於預設的Python命令列介面,它有指令補齊、執行系統指令、瀏覽輸入過的程式碼...等進階功能。我會在"IPython簡介及使用範例"一節中簡介IPython,至於其他套件會在本系列文章中的"Python 基本語法與科學計算套件的使用"做介紹。以下為Anaconda內建的整合開發環境Spyder(上圖)及Enthought Canopy(下圖)的視窗截圖:

自行擴充Python科學運算套件 (適合覺得套裝Python發行版本太佔電腦資源的人)

上述Python發行版本固然安裝方便,但它們也包含了目前你可能不會用到的套件而佔掉電腦資源,若你目前只想要安裝基本常用的科學運算套件,等到以後有需要時再擴充其他套件,可選擇自行擴充Python科學運算套件。因為Linux及Mac OS X 已內建Python直譯器,所以基本常用的科學運算套件可透過作業系統的套件管理工具 (apt-get install 、yum install、port install) 擴充:

  • Ubuntu & Debian Linux
    sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
  • Fedora Linux
    sudo yum install numpy scipy python-matplotlib ipython python-pandas sympy python-nose
  • Mac
    sudo port install py27-numpy py27-scipy py27-matplotlib py27-ipython +notebook py27-pandas py27-sympy py27-nose

詳細請參考安裝說明

當有需要擴充其他套件時,可以透過Python 套件管理程式pip安裝:

  • 先安裝pip (安裝說明)
  • 再透過pip指令擴充其他套件
pip install 欲安裝的套件名稱

如何不在整合開發環境下編輯及執行Python程式

如"快速建立用於科學計算的Python開發環境"一節的圖所示,Anaconda內建的Spyder及Enthought Canopy都是方便編輯及執行Python程式的整合開發環境,不過你也可以用文字編輯器(如Atom、Vim)編寫Python程式,然後在終端機下執行程式(見下圖)。

以下文章有說明如何將Atom和Vim編輯器設定成易於開發Python程式的環境:

註:PEP8 - Python 社群慣用的程式碼風格指南: 因Python開源的特性,自己寫的程式可能會被別人擴充應用,或需要與別人協作開發程式,為幫助開發者寫出易讀且一致的程式碼,Python 官方於是提供關於程式碼排版、註解、命名等風格的指南。Atom及Vim都有外掛能偵測所寫的程式碼是符合PEP8。

安裝專門用於天文研究的Python套件

類似IDL的Astronomy Users Library,Python的天文研究社群也建立了專門用於天文研究的Python套件:

它們提供讀取FITS檔、天文座標系統轉換、線性迴歸、曲線擬合、周期分析...等模組。這兩個套件可透過Python 套件管理程式pip安裝:

pip install astropy
pip install astroML

詳細請參考套件官網的安裝說明。 瀏覽更多可透過pip指令安裝的天文相關套件

IPython簡介及使用範例

IPython是強化版的互動式Python命令列介面,它比預設的Python命令列介面多了許多進階功能,例如:

  • 在套件、模組或函數名稱後加上問號可查看與之相關的資訊
  • 按↑鍵和↓鍵可以瀏覽輸入過的程式碼,便於微調先前的程式碼(修改參數等等)
  • 按tab鍵可以補齊未輸入完的指令、檔案及資料夾名稱
  • history指令可查看所有輸入過的指令
  • 可在IPython下使用linux 及shell指令
  • 能透過瀏覽器在IPython Notebook上編寫程式及筆記

在Anaconda及Enthought Canopy的整合開發環境中,已有IPython的視窗可直接使用(見"快速建立用於科學計算的Python開發環境"一節的截圖)。你也可以在終端機中輸入ipython進入IPython命令列介面。以下為幾個IPyhon的使用範例:


In [1]:
#引入astropy套件並查看相關資訊
import astropy 
astropy?

In [2]:
!pwd #使用指令pwd列出目錄位置


/home/elantievs/astropython-notes/notebooks

In [3]:
# 將所創建的檔案路徑存成一個list
!mkdir input_files
!touch input_files/data01.txt input_files/data02.txt input_files/data03.txt 
file_list = !ls input_files/*
!rm  -r input_files
file_list


Out[3]:
['input_files/data01.txt', 'input_files/data02.txt', 'input_files/data03.txt']

In [4]:
Messier = {'M1': ["Crab Nebula", "NGC1952" , "Taurus A"], 'M31': ["Andromeda Galaxy", "NGC 224"]}
type(Messier)


Out[4]:
dict

In [5]:
#列出所有曾輸入過的指令
%history


#引入astropy套件並查看相關資訊
import astropy 
astropy?
!pwd #使用指令pwd列出目錄位置
# 將所創建的檔案路徑存成一個list
!mkdir input_files
!touch input_files/data01.txt input_files/data02.txt input_files/data03.txt 
file_list = !ls input_files/*
!rm  -r input_files
file_list
Messier = {'M1': ["Crab Nebula", "NGC1952" , "Taurus A"], 'M31': ["Andromeda Galaxy", "NGC 224"]}
type(Messier)
#列出所有曾輸入過的指令
%history

In [6]:
print(In[4]) #IPython 以In及Out變數分別儲存歷史指令及指令的輸出結果
print(Out[3])


Messier = {'M1': ["Crab Nebula", "NGC1952" , "Taurus A"], 'M31': ["Andromeda Galaxy", "NGC 224"]}
type(Messier)
['input_files/data01.txt', 'input_files/data02.txt', 'input_files/data03.txt']

更多關於IPython的使用,請參考官方文件及以下的IPython教學影片:


In [7]:
from IPython.display import YouTubeVideo
YouTubeVideo("bP8ydKBCZiY")


Out[7]:

學習資源

Python的官方教學文件以及上述第三方套件的官方教學文件都提供詳細的說明及範例,而AstroPython網站也有給天文研究人員的Python入門指南。此外,Python的台灣使用者社群網站也羅列了許多學習資源。以下列出我所整理的學習資源:

  1. 基礎語法

  2. 科學計算/天文研究