Taxinines i taxol contra el càncer

Hem estudiat i descarregat la proteïna amb codi PDB 4HFZ.

4HFZ és una lligassa, és a dir, una proteïna capaç de catalitzar la unió entre dues molècules de gran mida (una d'elles el p53). És una potencial molècula que es podria utilitzar en la intervenció terapèutica del càncer, especialment com a objectiu al qual atacar. Tot i que és gran reconeguda per a la possibilitat d'aquesta estratègia, hi ha realment poques estructures per a inhibidors moleculars petits de la interacció MDM2-p53 disponibles al PDB.

Volem bloquejar la proteïna per tal que no pugui unir-se amb una molècula de càncer i no pugui distribuir-la per les cèl·lules i reprodueixi la malaltia. També volem mesurar l'energia d'unió en kcal/mol. Quant més negativa sigui l'energia en kcal/mol, més bona serà la molècula com a anticancerígen.

Aquests són els resultats d'acoblament molecular obtinguts amb a l'institut suís de bioinformàtica amb el software SwissDock.

Aquí estan els gràfics sobre quin compost és més actiu sobre la proteïna MDM2. El resultat que he obtingut és que el taxol és el compost més actiu.

També he fet dos gràfics comparatius entre les diferents molècules i l'energia d'unió:

Les conclusions extretes dels gràfics són que el taxol ha estat la molècula que s'ha unit i reacciona més amb la proteïna MDM2.

Aquí tens el codi que ha generat les imatges comparatives de més amunt:

Abans de posar el codi expliquem que està fet amb Google Colab, una biblioteca on es pot triar un entorn d'execució Python o R i GPU o CPU, entrant a Edit-Notebook settings. La GPU és la unitat de processament gràfic i la CPU és la unitat de processament del computador. La GPU és més útil en DeepLearning, perquè permet processament simultani de codi (en paral·lel). La CPU pot tenir diversos nuclis, però és més lenta en DeepLearning o visió per ordinador, per exemple.

Si vull descarregar el Google Colab ho puc fer i es descarregarà en format IPYNB, que significa Interactive Python Notebook. Aquest tipus d'arxiu es pot obrir amb un entorn Jupyter, que es pot instal·lar a l'ordinador descarregant Anaconda. Hi ha dues versions de Jupyter: Jupyter Notebook i Jupyter Lab, que es poden instal·lar localment en el PC i tenen el mateix aspecte i funcionalitat que Google Colab. Aquest entorn té l'avantatge i inconvenient que utilitza totes les capacitats de l'ordinador.


# 2. Upload deltaG_values.csv of every docking to generate a boxplot to obtain a summary table transposed data in csv and boxplot
# Has de pujar els diferents arxius i penjar cancel quan acabis, posar els noms en català (en aquest exemple: Taxinina A, etc)
# Després has d'escriure el codi PDB de la teva proteïna (en aquest exemple 4HFZ)

# Instal·lem les biblioteques de Python que utilitzarem al codi de més abaix; pandas ens permet treballar amb arxius csv més fàcilment, matplotlib ens permet dibuixar gràfics, io ens permet pujar i baixar arxius (input i output) i numpy, que és la biblioteca numèrica principal de Python.
# Els signes d'exclamació o "bang" en anglès (!) indiquen que s'executi com si estigués en un terminal o shell (CMD). Per exemple, !pwd (print working directory) serveix per a saber en quin directori estic treballant al moment (carpeta, arxiu, disc...) o !cd que vol dir change directory, !ls que vol dir que em fagi un llistat dins del directori on estigui... !ls -l vol dir que té el paràmetre "long", és a dir que no només em digui els arxius sinó que també em digui els permisos dels arxius, que poden ser r (read, llegible), w (write, escribible), x (executable) de forma que per exemple un arxiu dirà: "arxiu.csv rwxrw-r--". Això significa que el super usuari o administrador té tots els permisos (rwd), un usuari normal només podrà llegir i escriure (rw-) i un convidat només podrà llegir l'arxiu (r--). Per canviar permisos utilitzem la instrucció "chmod" que significa "change mode" i vol dir que per exemple un arxiu que no podíem llegir, aplicant aquesta instrucció ara podrem executar-lo, llegir i escriure. La lletra r té un valor 1, la w un valor 2 i la lletra x un valor 4. Quan escric "chmod 777" es transforma en "rwxrwxrwx", és a dir, tan siguis administrador, usuari o convidat tindràs tots els permisos (les tres primeres lletres són de l'administrador, les tres segones de l'usuari i les tres últimes del convidat). Si poso "chmod 543" (5=4+1=permís administrador, 4=4=permís usuari, 3=1+2=permís convidat) sortirà "r-x--xrw-", que vol dir que l'administrador podrà llegir i executar, l'usuari només executar i el convidat podrà llegir i escriure. !ls -a significa veure tots els arxius (all), i !ls -la buscarà tots els arxius, inclosos els ocults i mostrarà els seus permisos. "!mkdir" vol dir make directory amb el nom que posem a continuació, és a dir, "!mkdir noudirectori" crea un directori amb el nom "noudirectori". "!rm deltaG.csv" esborrarà l'arxiu "deltaG.csv", ja que "rm" vol dir remove. Es poden posar dues admiracions (!!) que el que farien es executar a la cel·la i mostrar la sortida.
!pip install pandas matplodlib io numpy 

from google.colab import files
import pandas as pd
import matplotlib.pyplot as plt
import io
import numpy as np

# Initialize an empty list to store DataFrame objects. És un dataframe de pandas.
dfs = []


# Upload CSV files one by one
print("Upload CSV files one by one. Press Cancel to stop uploading.")

while True:
    uploaded_files = files.upload() # El files.upload pertany a la biblioteca google.colab (import files). Estem accedint al mètode upload que pertany a files de la biblioteca de colab.
    if len(uploaded_files) == 0:
        break
    for filename, contents in uploaded_files.items():
        # Read CSV file as DataFrame and append it to the list
        df = pd.read_csv(io.StringIO(contents.decode('utf-8')), header=None)
        # Add a column to identify the compound
        df['Compound'] = f'Compound {chr(ord("A") + len(dfs))}'
        dfs.append(df)

# Concatenate DataFrames vertically
combined_df = pd.concat(dfs, ignore_index=True)

# Transpose the DataFrame so that rows become columns
transposed_df = combined_df.set_index('Compound').T

# Save the transposed DataFrame to a new CSV file
transposed_csv_path = 'transposed_data.csv'
transposed_df.to_csv(transposed_csv_path)

# Prompt the user to enter real chemical names for each compound
real_names_mapping = {}
for i, df_name in enumerate(transposed_df.columns):
    real_name = input(f"Enter the real chemical name for {df_name}: ")
    real_names_mapping[df_name] = real_name

# Prompt the user to enter the last word of the graph title
graph_title_suffix = input("Enter the last word of the graph title: ").strip()

# Create a customized boxplot for compounds
plt.figure(figsize=(8, 6))

# Set colors
box_color = 'blue'
median_color = 'orange'
whisker_color = 'green'
cap_color = 'purple'

# Create a boxplot
boxprops = dict(color=box_color)
medianprops = dict(color=median_color)
whiskerprops = dict(color=whisker_color)
capprops = dict(color=cap_color)
boxplot = transposed_df.boxplot(vert=False, return_type='dict', boxprops=boxprops, medianprops=medianprops, whiskerprops=whiskerprops, capprops=capprops)

# Overlay individual data points
for df_name in transposed_df.columns:
    y = np.random.normal(list(transposed_df.columns).index(df_name) + 1, 0.1, size=len(transposed_df[df_name]))
    plt.scatter(transposed_df[df_name], y, alpha=0.5, s=10)

# Set ticks and labels
plt.yticks(np.arange(1, len(transposed_df.columns) + 1), [real_names_mapping[col] for col in transposed_df.columns])

plt.xlabel("Energia d'unió (kcal/mol)")
plt.ylabel("Lligands")
plt.title(f"Acoblament molecular amb proteïna PDB {graph_title_suffix}")
plt.grid(True)
plt.axvline(x=0, color='red', linestyle='--')  # Add line at 0 for reference
plt.tight_layout()

# Save the plot as an image file
plot_image_path = 'boxplot.png'
plt.savefig(plot_image_path)

# Download the transposed CSV file and the plot image
files.download(transposed_csv_path)
files.download(plot_image_path)

# Print paths to the saved files
print("Transposed data saved to:", transposed_csv_path)
print("Plot image saved to:", plot_image_path)