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

バイオとDX

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

# =============================================================================
# Modifictionsにある、(1)記述、(2)ぺプチド番号、(3)アミノ酸番号を分解して、エクセルにこれらの列を追加する。
# =============================================================================
import os
import datetime
import pandas as pd
import re

from openpyxl import load_workbook
from openpyxl.styles import Font
from openpyxl.styles.alignment import Alignment

# 配列入力
seq = 'ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0'

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

# sheet1を指定して、データフレームに読み込む
df = pd.read_excel(xlsB2, sheet_name='Sheet1')

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

# Modificationに記された、(1)記述, (2)ペプチド番号、(3)アミノ酸番号に分解する。

df2 = df['Modifications1']
print(df2)

Aaa = []  #Deamidated / Oxidation / ...
PPn = []  #ペプチド番号
An = []  #アミノ酸番号
AAn = []  #アミノ酸表記
BBB1 = []  #Modificationを分解したリスト

for i, AAA in enumerate(df2):
    BBB1 = re.split('[\xa0@()]',AAA)
#----------
    if len(BBB1) >=1:
        Aaa.append(BBB1[0])
    else:
        Aaa.append('9999')  #空欄のときは、9999 を割り当てる
#----------    
    if len(BBB1) >=2:
        PPn.append(BBB1[1])
    else:
        PPn.append('9999')  #空欄のときは、9999 を割り当てる
#----------        
    if len(BBB1) >=3:
        AAn.append(BBB1[2])
    else:
        AAn.append('9999')  #空欄のときは、9999 を割り当てる



#----------                        
    if len(BBB1) >=3:
        if (BBB1[2] == '') or (BBB1[2] == '*'):
            An1 = 'X'   #空欄のときは、X を割り当てる
        else:
            print(BBB1[2])
            An1 = seq[int(BBB1[2])]#文字列の要素にアクセスしようとした際に、その要素が存在しない場合に発生するエラーです。
        An.append(An1) 

    else:
        An1 = 'X'  #BBB1の表記が足らないで、割り当てられていないときは、アミノ酸 X を割り当てる
        An.append(An1)

               
df['Modifications_Aaa'] = Aaa
df['Modifications_PPn'] = PPn
df['Modifications_AAn'] = AAn
df['Modifications_An'] = An
    
# =============================================================================
# 日付を得て、ディレクトリにフォルダを作成して、結果を保存
# =============================================================================

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

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

# =============================================================================
# エクセルの書式設定
# =============================================================================
wb = load_workbook(filename2)
ws = wb.active

# set font
font = Font(name='Calibri', size=9)

# write in sheet
for row in ws:
    for cell in row:
        ws[cell.coordinate].font = font

# alignment  #【エクセル】タイトル行だけ左寄せ
for row in ws['A1:AZ1']:
    for cell in row:
        cell.alignment = Alignment(horizontal='left')

#filename2 = dirname + xlsB1 +'.xlsx'
wb.save(filename2)

# コードの終わり