# =============================================================================
# Modificationのフィルタリングしてペプチドごとにタブ化する
# =============================================================================
# ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
# 残っている作業
# 1)読みに行く配列をLCとHCで切り替える
# 2)アミノ酸リストを作成
# 3)に沿って、すべてのアミノ酸のエクセル作成を繰り返す
# 4)HCとLCのもの_4ファイルを、アミノ酸ごとに2つを作る
# ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
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
from openpyxl.utils.dataframe import dataframe_to_rows
# 元になるエクセルファイルを読み込み
xls0 = 'bpv'
xls = str(xls0) +'.xlsx'
# 配列入力
seq_hc = 'ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0'
seq_lc = 'ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0'
Modific = input('どのPTMを抽出する? 1: Deamidated, 2: Oxidation, 3: Hex ?')
if Modific == '1':
ModificD = 'Deamidated'
elif Modific == '2':
ModificD = 'Oxidation'
elif Modific == '3':
ModificD = 'HEX'
else:
ModificD = 'Others'
# エクセルの所定のシートを指定して、データフレームに読み込む
df11 = pd.read_excel(xls, sheet_name='Matched')
# =============================================================================
# 条件に合致するものだけを選び出す
# =============================================================================
# ■ 基準1/9 ■ Auto-Validatedが、「TRUE」のもの
#df = df[df['Auto-Validated'] == True]
# ■ 基準2/9 ■ Useが、「Certain」のもの
#df = df[df['Use'] == 'Use']
# ■ 基準3/9 ■ Errorが、10ppm以下のもの
#df = df[df['Error (ppm)'] < 10]
# ■ 基準4/9 ■ Modificationsが空欄のものは除外
#df = df[pd.notnull(df3['Modifications']) == True]
# ■ 基準5/9 ■ DeとOxとHxの合計が一つ/Modificationsで、表記が1つだけのものを抽出
# Modification の ModificDを規定
De = 'Deamidated'
Ox = 'Oxidation'
Hx = 'HEX'
Ca = 'Carboxymethyl'
a2 = 'A2G1'
m5 = 'M5'
g0 = 'G0'
g1 = 'G1'
g2 = 'G2'
df12 = df11[df11['Modifications'].str.count(De) +df11['Modifications'].str.count(Ox) +df11['Modifications'].str.count(Hx) == 1]
# ■ 基準6/9 ■ どのPTMかで抽出する
df13 = df12[df12['Modifications'].str.count(ModificD) == 1]
# =============================================================================
# Deamiか、Oxidation、あるいはHEX を含むものだけにして、あとはすべて除去する
# =============================================================================
df14 = df13['Modifications']
li_modi1 = []
li_deam = []
for i, deam in enumerate(df14):
li_deam1 = re.split(',', deam)
for j, modi3 in enumerate(li_deam1):
print('modi3: ' + modi3)
if (De in modi3):
modi3 = modi3.strip() #空白文字を除く
li_deam.append(modi3) #合致したものをリストに追加
else:
None
df13['Modifications1'] = li_deam
# =============================================================================
# 日付を得て、ディレクトリにフォルダを作成して、結果を保存
# =============================================================================
# 日付取得/ファイル名のため
d_today = str(datetime.date.today())
# ディレクトリにフォルダ作成
dirname = d_today +'/'
if not os.path.exists(dirname):
os.mkdir(dirname)
# エクセルとして保存
filename11 = dirname + ModificD +'_' +xls
df13.to_excel(filename11)
# =============================================================================
# エクセルの書式設定
# =============================================================================
wb = load_workbook(filename11)
ws = wb.active
# set font #【エクセル】フォント設定
font = Font(name='Calibri', size=9)
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')
wb.save(filename11) #【エクセル】書式整えたものを保存
# =============================================================================
# Modifictionsにある、(1)記述、(2)ぺプチド番号、(3)アミノ酸番号を分解して、エクセルにこれらの列を追加する。
# =============================================================================
# sheet1を指定して、データフレームに読み込む
df20 = pd.read_excel(filename11, sheet_name='Sheet1')
# Modificationに記された、(1)記述, (2)ペプチド番号、(3)アミノ酸番号に分解する。
df21 = df20['Modifications1']
print(df21)
Aaa = [] #Deamidated / Oxidation / ...
PPn = [] #ペプチド番号
An = [] #アミノ酸番号
AAn = [] #アミノ酸表記
AnAAn = [] #アミノ酸表記
BBB1 = [] #Modificationを分解したリスト
for i, AAA in enumerate(df21):
BBB1 = re.split('[\xa0@()]',AAA)
#----------
if len(BBB1) >=1:
Aaa1 = BBB1[0]
else:
Aaa1 = '9999' #空欄のときは、9999 を割り当てる
Aaa.append(Aaa1)
#----------
if len(BBB1) >=2:
PPn1 = BBB1[1]
else:
PPn1 = '9999' #空欄のときは、9999 を割り当てる
PPn.append(PPn1)
#----------
if len(BBB1) >=3:
AAn1 = BBB1[2]
else:
AAn1 = '9999' #空欄のときは、9999 を割り当てる
AAn.append(AAn1)
#----------
if len(BBB1) >=3:
if (BBB1[2] == '') or (BBB1[2] == '*'):
An1 = 'X' #空欄のときは、X を割り当てる
else:
print(BBB1[2])
An1 = seq_hc[int(BBB1[2])] #文字列の要素にアクセスしようとした際に、その要素が存在しない場合に発生するエラーです。
An.append(An1)
else:
An1 = 'X' #BBB1の表記が足らないで、割り当てられていないときは、アミノ酸 X を割り当てる
An.append(An1)
AnAAn.append(str(An1)+str(AAn1))
df20['Modifications_Aaa'] = Aaa
df20['Modifications_PPn'] = PPn
df20['Modifications_AAn'] = AAn
df20['Modifications_An'] = An
df20['Modifications_AnAAn'] = AnAAn
# エクセルとして保存
filename21 = dirname + ModificD +'_' +xls0 +'2.xlsx'
df20.to_excel(filename21)
# =============================================================================
# エクセルの書式設定
# =============================================================================
wb = load_workbook(filename21)
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')
wb.save(filename21)
# =============================================================================
# あらかじめX999が記述されたExcelを元に、アミノ酸ごとにwbを作成、Peptideごとにwsにして分類する
# =============================================================================
df40 = pd.read_excel(filename21, sheet_name='Sheet1')
AAnAn = 'E84'
# =============================================================================
# アミノ酸をリスト化。重複をさけてSeries作る
Ser3 = df40['Modifications_AnAAn'] #X100のリスト化
ser_AnAAn = set(Ser3) #X100のリスト化/重複回避
print(ser_AnAAn)
# =============================================================================
# (アミノ酸で制限をかけて) ペプチドをリスト化。重複をさけてSeries作る
df41 = df40[df40['Modifications_AnAAn'] == AAnAn] #B61のアミノ酸のwb作成
Ser5 = df41['Peptide']
ser_Pep = set(Ser5) #ペプチドのリスト化/重複回避
print(ser_Pep) #ワークシートタイトルのser_Pep作成
# エクセルとして保存
filename41 = dirname +'hc_'+ModificD +'_' +AAnAn + '_4.xlsx'
df41.to_excel(filename41)
# ペプチドリストをもとにシートを作成
wb = load_workbook(filename41)
ws = wb.active
ws.title = 'total'
for i, page in enumerate(ser_Pep):
ws = wb.create_sheet()
df6 = df41[df41['Peptide'] == page]
for row in dataframe_to_rows(df6,index=None, header=True):
ws.append(row)
ws.title = str(page)
wb.save(filename41) #workbook保存
# コードの終わり