顯示具有 Python 標籤的文章。 顯示所有文章
顯示具有 Python 標籤的文章。 顯示所有文章

2020年9月23日 星期三

自學Python的互動式網站

《How to Think Like a Computer Scientist: Interactive Edition》 這網站提供互動式的Python教學,對於想要自學的程式語言的人可以試試看。總共分成19個章節:

  1. General Introduction:簡介
  2. Simple Python Data:基本的資料型態
  3. Debugging Interlude 1:程式錯誤與除錯介紹

2019年5月24日 星期五

讓matplotlib的PyPlot出圖在不同的視窗

Python上使用matplotlib繪圖pyplot預設會將結果畫在同一張圖片上,若是想要拆開來畫弄到兩個不同的視窗,要用到plt.figure()這個函式:
  • plt.figure(1)
  • 圖片1的繪圖指令
  • plt.show()

2019年5月17日 星期五

讓Spyder出圖在另外的視窗

Python的整合式編輯器Spyder,當在使用像是matplotlib繪圖時,希望出圖在另外的視窗以方便互動式處理。設定方法如下:
  • Tools > preferences > IPython console
    • Graphics > Graphics backend 
      • Backend: Automatic
把原來的Backend: Inline改成Backend: Automatic,然後把Spyder重開

2018年3月20日 星期二

Jared Lander

Jared Lander的個人網站,介紹R語言與其套件的使用。主要的頁面有:
_EOF_

2017年12月19日 星期二

Python程式執行出現SyntaxError: Non-ASCII character

在執行某個python script的時候出現下面的錯誤訊息
SyntaxError: Non-ASCII character '\xe8' in file 05.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
這是因為註解裡面包含中文,但確定此script是用UTF-8儲存的。參考了《PEP 263 -- Defining Python Source Code Encodings》一文,了解在程式最前面,#!/usr/bin/env 這一行後面要宣告這個script是以哪種編碼方式儲存,如下:
  • # -*- coding: utf-8 -*-
  • # -*- coding: latin-1 -*-
  • # -*- coding: iso-8859-15 -*-
  • # -*- coding: ascii -*-
這幾行代表分別是用utf-8, latin-1, iso-8859-15, ascii來編碼

_EOF_

2017年11月27日 星期一

在Python的virtualenv上安裝TensorFlow

TensorFlow是個開源的機器學習軟體。可以用Python, C++, Java, Go來跑,這邊介紹的安裝方式為透過《Mac上Python的虛擬環境virtualenv》來安裝與使用TensorFlow。
  1. source /tmp/pyve/bin/activate
  2. easy_install -U pip
  3. pip install --upgrade tensorflow 
  4. source /tmp/pyve/bin/activate
  5. (tensorflow)$ python
  6. import tensorflow as tf
    hello = tf.constant('Hello, TensorFlow!')
    sess = tf.Session()
    print(sess.run(hello))
  7. (tensorflow)$ deactivate
上面指令的,藍色的部分是安裝綠色的部分是啟動TensorFlow:

2017年6月2日 星期五

TypeError: 'numpy.float64' object cannot be interpreted as an index

在跑python的時候出現標題這個錯誤訊息 “TypeError: 'numpy.float64' object cannot be interpreted as an index”,這是因為numpy 1.12.0 這個版本不再支援 float index。解法就是將 numpy 1.12 版降回 1.11 版。用下面的指令即可:
  • sudo pip install -U numpy==1.11.0
上述解法參考 Microos 對這個議題的回應
_EOF_

2017年3月28日 星期二

Python複製dict變數要注意

在python裡面將一個dict的變數得值直接複製到另外一個dict變數,不要使用:
  • dict2 = dict1

2017年3月27日 星期一

Python一行文:宣告一個dict變數

用下面指令迅速設定兩個dict變數d3與d1,裡面的值都是0
  • d3 = {k:0.0 for k in ['Ala','Cys','Tyr']}
  • d1 = {c:0 for c in 'ACDEFGHIKLMNPQRSTVWY'}
_EOF_

2017年3月26日 星期日

iPython清除變數空間

在iPython中,不想要跳離開程式的狀況下清除變數空間,用指令:
  1. reset_selective 變數名稱
  2. reset
第一個指令清除一個變數、第二個則是清除所有變數。
清除完之後再用who或是whos來看變數空間

_EOF_

2017年1月7日 星期六

在Python中使用PyMOL的指令 part II

前一篇《在Python中使用PyMOL的指令》用的PyMOL與Python是MacPorts安裝的,但如果希望使用的是OS X系統本身的Python與從PyMOL買來的版本,用下面的方法來做:
  • 安裝預先編譯好的PyMOL
    這邊的例子是安裝到 /pkg/pymol-v1.8.0.5-Darwin-x86_64
  • 開啟系統的Python(/usr/bin/python)

然後在系統的Python內依序執行:
  1. import sys
  2. sys.path.append('/pkg/pymol-v1.8.0.5-Darwin-x86_64/modules')
  3. from pymol import *
  4. pymol.finish_launching(['pymol', '-cqk'])

2017年1月6日 星期五

在Python中使用PyMOL的指令

PyMOL是個很方便的生物巨分子結構顯示軟體,很方便的就可以載入與使用各種生物巨分子結構。但如果希望能夠用依照某些規則來處理很多結構,那就必須要寫程式。這邊介紹如何在Mac下面使用Python載入PyMOL的指令來寫程式。安裝完MacPorts以後在終端機上輸入:
  • sudo port install pymol
  • /opt/local/bin/python2.7
進入python交談式環境(或是寫在python程式最前面)以後,輸入:
  • from pymol import *
  • pymol.finish_launching(['pymol', '-cqk'])

2016年11月18日 星期五

Python一行文:if-else變形

Python中的列表可以用一行文來寫出來,依序執行:
  • a = [x for x in range(1,10)]
  • b = [ 'Even' if x%2==0 else 'Odd' for x in a ]

2016年9月30日 星期五

Python的匿名函式lambda

在Python中,一般的函式在使用前必須要先用def定義這個函式的內容,參考《簡單的Python函式》。但平常在用的時候,有時只是在程式碼內臨時需要一個函式而已,並不想要另外在外面多定義一個函式,這個時候就可以使用匿名函式,在Python裡面用lambda expression來完成此功能。

這邊用計算single strand DNA (ssDNA)序列 atgcatgcatgcatgcatgcatgcatgc 的分子量為例子,粗體是輸入的指令、Courier字型則是電腦給的回應

Step 1:啟動Python
$ python3.4
Python 3.4.4 (default, Mar  2 2016, 03:31:27) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

Step 2:輸入序列,這邊輸入小寫,讓python用字串功能upper轉成大寫(使用方法參考《Python內建的字串處理功能》
>>> str='atgcatgcatgcatgcatgcatgcatgc'
>>> str=str.upper()
>>> str
'ATGCATGCATGCATGCATGCATGCATGC'

Step 3:用lambda expression來給一個函式,計算ssDNA的分子量,計算公式參考ThermoFisher的《DNA and RNA Molecular Weights and Conversions》
>>> mw = lambda An, Tn, Cn, Gn: (An * 313.2) + (Tn * 304.2) + (Cn * 289.2) + (Gn * 329.2) + 79.0
>>> mw(str.count('A'), str.count('T'), str.count('C'), str.count('G'))
8729.6

上面的str.count... 是計算字串裡面某個字元出現的個數,這邊可以知道這條ssDNA atgcatgcatgcatgcatgcatgcatgc 的分子量約莫是 8729 g/mol、約莫是8.7 kDa

_EOF_

2016年5月31日 星期二

在PyMOL中將分子移動到原點

用PyMOL開啟分子後,分子不一定會放在原點上。以下以crambin為例子,把一個結構放到原點上:
  1. fetch 1crn
  2. run mv2origin.py; mv2origin 1crn
  3. run axes.py; axes
第1步:抓crambin的分子
第2步:把分子放到原點
第3步:畫出XYZ的座標軸,驗證分子真的被放到原點上

2016年5月10日 星期二

操作Python的字串

前面《內建的Python字串處理功能》說名是單一字串自帶的操作,這邊則是介紹將多個字串合併與子字串(substrings)等等基礎使用
  • str = '':空字串
  • str = "I'm Lovin' It":字串內有單引號之類的符號時使用
  • str = """...""":文字區塊
  • str = r'raw strings'
  • str = u'unicode strings'
  • len(str):字串長度
  • for l in str:一次拿一個字母出來,存在變數l裡面
  • pattern in str:測試pattern是否在這個字串裡面
  • str1 + str2:連結兩個字串
  • str * 7:重複出現字串七次
  • str[i:j]:子字串,見後面的說明


2016年5月9日 星期一

Python內建的字串處理功能

Python這個程式語言和其他直譯語言不一樣的地方在於,字串自己本身就能夠處理自己。

例如說,下面有字串存在str這個變數裡面
>>> str = 'There is no coincidence. Only the illusion of coincidence.'
str.capitalize  str.isalnum     str.lstrip      str.splitlines
str.center      str.isalpha     str.partition   str.startswith
str.count       str.isdigit     str.replace     str.strip
str.decode      str.islower     str.rfind       str.swapcase
str.encode      str.isspace     str.rindex      str.title
str.endswith    str.istitle     str.rjust       str.translate
str.expandtabs  str.isupper     str.rpartition  str.upper
str.find        str.join        str.rsplit      str.zfill
str.format      str.ljust       str.rstrip      
str.index       str.lower       str.split  


2016年5月6日 星期五

讓PyMOL顯示XYZ軸

想要讓PyMOL顯示像VMD一樣有從原點出來的XYZ軸,參考PyMOLWiki上的文章《Axes》,修改程式碼儲存成axes.py。打開PyMOL以後執行下面的指令
  • run axes.py
  • axes
  • axes(2)
  • axes(3)
上面的三個指令都會畫出軸來,大小正比於小括號裡面的數字,結果如附的圖所示
Envelope proteins of Zika virus (PDB code: 5IRE)
axes.py的程式碼如下:

2016年5月5日 星期四

簡單的Python函式

用Python寫個簡單的小程式叫做"aa1to3.py",此程式可將one-letter-code表示的氨基酸序列轉成three-letter-code的序列,程式碼如下:

#!/usr/bin/python

def one2three(a):
    """
    Convert one letter code to three letter code
    """
    aa1to3 = {'A':"Ala", 'R':"Arg", 'N':"Asn", 'D':"Asp", 'C':"Cys",
              'E':"Glu", 'Q':"Gln", 'G':"Gly", 'H':"His", 'I':"Ile",
              'L':"Leu", 'K':"Lys", 'M':"Met", 'F':"Phe", 'P':"Pro",
              'S':"Ser", 'T':"Thr", 'W':"Trp", 'Y':"Tyr", 'V':"Val"}
    aa3to1 = {three: one for one, three in aa1to3.iteritems()}        
    if (a in aa1to3.iterkeys()):
        aaa = aa1to3[a]
    else:
        aaa = 'X'
    return aaa

if __name__ == "__main__":
    s = str(raw_input("Please enter a protein sequence: "))
    seq = list()
    for a in s.upper():
        seq.append(one2three(a))
    print('-'.join(seq))