利用python中的pysam模塊做一些簡單的數據統計(BAM文件)

說點閑話

起因是因為有個朋友問我能不能處理BAM文件,我找了一下python的確有處理BAM文件的模塊,在沒有搞清楚能不能做的情況下,我說可以沒問題,這B可裝上了天。
然后,這B是哭著也要裝下去了。
首先了解一下pysam和BAM是干啥的:
python讀寫處理模塊pysam是在開發基因組相關流程或工具時,經常需要讀取、處理和創建bam、vcf、bcf文件。它打包了htslib-1.3、samtools-1.3 和 bcftools-1.3的核心功能,能在編程時非常靈活的處理bam和bcf文件。
簡單來說就是一個存取數據庫一樣的東西,利用pysam功能可以實現提取文本,OK。

一、安裝環境部署

打開cmd然后

pip install pysam
C:\Users\hasee>pip install pysam
Collecting pysam
  Using cached https://files.pythonhosted.org/packages/73/59/c319f1bde3019bbce4583cecb12b9e3e52ffcfbe2c96d8b1fb131c0d4fb7/pysam-0.15.1.tar.gz
    Complete output from command python setup.py egg_info:
    '.' 不是內部或外部命令,也不是可運行的程序
    或批處理文件。
    '.' 不是內部或外部命令,也不是可運行的程序
    或批處理文件。
    # pysam: no cython available - using pre-compiled C
    # pysam: htslib mode is shared
    # pysam: HTSLIB_CONFIGURE_OPTIONS=None
    # pysam: htslib configure options: None
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\hasee\AppData\Local\Temp\pip-install-pgf7vjf2\pysam\setup.py", line 223, in <module>
        htslib_make_options = run_make_print_config()
      File "C:\Users\hasee\AppData\Local\Temp\pip-install-pgf7vjf2\pysam\setup.py", line 69, in run_make_print_config
        stdout = subprocess.check_output(["make", "-s", "print-config"])
      File "c:\python37\lib\subprocess.py", line 376, in check_output
        **kwargs).stdout
      File "c:\python37\lib\subprocess.py", line 453, in run
        with Popen(*popenargs, **kwargs) as process:
      File "c:\python37\lib\subprocess.py", line 756, in __init__
        restore_signals, start_new_session)
      File "c:\python37\lib\subprocess.py", line 1155, in _execute_child
        startupinfo)
    FileNotFoundError: [WinError 2] 系統找不到指定的文件。

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\hasee\AppData\Local\Temp\pip-install-pgf7vjf2\pysam\
You are using pip version 18.0, however version 18.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

報錯,細讀錯誤,WinError 2找不到指定文件,一番周折,上pip官網發現了問題所在
111.png

pysam只支持linux系統下運行,在WIN下缺少DLL文件啟動。沒辦法,只好安裝虛擬機和Linux(我用的是ubuntu)在虛擬環境下工作
在準備開發環境前,先試試能不能安裝pysam
打開terminal

pip install pysam
Installing collected packages: pysam
Successfully installed pysam-0.15.1

安裝成功,OK,終于開始緊鑼密鼓的部署開發環境。這里不得不提又來一個坑ubuntu自帶pip和python,在我安裝好pycharm之后,pycharm無法識別我已經安裝好的pysam,我們必須用pip3 install pysam不然他會在原生的python2里面安裝。至此,部署環境結束。

任務需求

對BAM文件進行分析,提取所有目標序列,并計算儀器檢測上下限GC含量的最大值,最少值。

程序

我直接上最后的程序吧

import pysam
import re

def GC_squence(path_in):
    samfile = pysam.AlignmentFile(path_in, "rb")
    number = 0
    total_GC_MAX = 0 #GC含量最大值計數
    total_GC_MIN = 1 #GC含量最小值計數
    number_lose= []  #提取失敗序列統計
    for line in samfile:
        number += 1
        if number < 100:
            squence = (re.findall("[AGCT][AGCT][AGCT].*[AGCT][AGCT][AGCT]",str(line))) #提取目標序列
            print(squence)
            str_squence = " ".join(squence)
            total_squence =len(str_squence) #統計序列長度
            if total_squence < 400:
                print("序列長度:",total_squence)
                find_G = re.findall("G",str_squence)
                total_fin_G =len(find_G) #統計G數量
                print("C數量",total_fin_G)
                find_C = re.findall("C",str_squence)
                total_fin_C = len(find_C)  # 統計C數量
                print("G數量",total_fin_C)
                total_GC = (int(total_fin_G )+ int(total_fin_C))/int(total_squence) #計算GC含量
                print(number,total_GC)
            else:
                number_lose.append(number)
        if total_GC > total_GC_MAX:
            total_GC_MAX = total_GC
            number_MAX =number
        if total_GC_MIN > total_GC:
            total_GC_MIN = total_GC
            number_MIN = number
    print("統計總條數%s,最大GC含量%s,編號%s,最小GC含量%s,編號%s,"%(number,total_GC_MAX,number_MAX,total_GC_MIN,number_MIN))
    print("提取失敗序列合計%s條,編號爲%s:"%(len(number_lose),number_lose))

if __name__ == '__main__':
        path_in = "/home/charmflystar/桌面/LibPrep70_rawlib.bam"#導入BAM文件地址
        GC_squence(path_in)

試了一下pysam的內置函數,所有內置函數得到結果均為空,但能正常讀取序列,最后決定放棄該功能,直接使用正則提取序列。
但是正則提取序列偶爾會出現錯誤的讀長,研究一天依然原因未明。因損失數據為極少量,最后采取跳過策略。

結果

99999 0.6652173913043479 
統計總條數1853129,最大GC含量0.8928571428571429,編號85128,最小GC含量0.25,編號63095,
提取失敗序列合計108條,編號爲[1897, 2496, 4247, 4357, 4358, 6860, 11949, 12256, 14237, 15802, 16103, 16112, 16114, 17869, 20134, 23055, 23075, 23102, 23127, 23130, 23135, 23145, 23147, 23152, 23153, 23158, 23161, 23162, 23168, 23169, 23173, 23177, 23179, 23180, 23193, 23198, 23206, 23207, 23210, 23220, 23223, 23231, 23232, 23234, 23239, 23244, 23245, 23247, 23248, 23249, 24120, 30210, 30897, 32018, 36447, 39740, 41929, 45007, 45860, 48468, 48502, 48506, 48518, 48525, 48526, 48579, 48582, 49108, 49330, 52864, 53812, 55594, 55626, 55634, 55653, 55664, 55674, 62145, 62949, 62975, 64321, 64856, 64994, 68642, 69522, 71159, 72266, 73190, 75649, 76752, 80220, 82459, 88235, 88255, 88323, 88638, 90107, 90302, 91539, 91576, 91592, 91594, 95568, 95570, 97141, 98528, 99253, 99274]:
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容