Python_(2/4)T6600の生データを解析してPTM結果をレポート | バイオとDX

バイオとDX

バイオ医薬品とDX、データサイエンス

# =============================================================================
# LC/MSの生データを解析してPTMをレポートする
# =============================================================================
import os
import datetime
import pandas as pd

# 元になるエクセルファイルを読み込み
xls1 = input('Excel file to be analysed ,as ###.xlsx:')
xls2 = str(xls1) + '.xlsx'

# 解析内容(1脱アミ、2酸化、3ほか)を入力する
analysis1 = ('target', 'deamidation', 'oxidation', 'others')
an = input('Input analysis 1,2,3 as "1:deamidation; 2:oxidation; 3:others":')
analysis = analysis1[int(an)]
  
# sheet1を指定して、データフレームに読み込む
df = pd.read_excel(xls2, sheet_name='Matched')

# dfの中を表示する
print('')
print('--- dataframe ---')
print(analysis)
print(df)

# 条件9つに合致するものだけを選び出す
# https://kino-code.com/pandas_course_data_extraction/
# locメソッドを使ったデータ抽出

# ■ 基準1/9 ■ Auto-Validatedが、「T(True)」のもの
df1 = df[df['Auto-Validated'] == True]

# ■ 基準2/9 ■ Useが、「Certain」のもの
df2 = df1[df1['Use'] == 'Use']

# ■ 基準3/9 ■ Errorが、5ppm以下のもの
df3 = df2[df2['Error (ppm)'] < 5]

# ■ 基準4/9 ■ Modificationsが空欄のものは除外
df4 = df3[pd.notnull(df3['Modifications']) == True]

# ■ 基準5/9 ■ Modificationsで、表記が1つだけ('Carboxymethyl'はカウントに入れない)
df5 = df4[df4['Modifications'].str.count(',') + 1 - df4['Modifications'].str.count('Carboxymethyl') == 1]

# =============================================================================
# Modifictionを1つにする
# =============================================================================
# Carboxymethylではじまるのをすべて除去する
for i, modi in enumerate(df5['Modifications']):
    modi2 = modi.split(',')
    for j, modi3 in enumerate(modi2):
        if modi3[j] == 'Carboxymethyl*':
            modi3 = modi2.drop(modi3[j])     #Oxidatin@33(33)       

# =============================================================================
# ペプチド番号とアミノ酸番号を取得する(別法)
# =============================================================================
#modi4 = modi3.split('@')
#print(modi4[0])

#modi5 = modi4[1].split('(')
#print(modi5[0])

#modi6 = modi3.split('(')
#modi7 = modi6[1].split(')')
#print(modi7[0])

# =============================================================================
# ペプチド番号とアミノ酸番号を取得する(複数の区切り文字で分ける)
# =============================================================================
# https://magazine.techacademy.jp/magazine/28390

import re
print(re.split('[\xa0@()]',modi3))


# =============================================================================
# 日付を得て、ディレクトリにフォルダを作成して、結果を保存
# =============================================================================

#日付取得/ファイル名のため
#d_today = str(datetime.date.today())

# ディレクトリにフォルダ作成
#dirname = d_today+'_'+xls1+'_'+analysis+'/'
#if not os.path.exists(dirname):
#    os.mkdir(dirname)   
    
# エクセルとして保存
#filename1 = dirname + xls1 +'_' +analysis +'.xlsx'
#df5.to_excel(filename1)



# コードの終わり