Luiz Felipe P. Figueiredo
  • Home
  • Tech Skills
  • Skill Sets
  • Work Experience
  • Projects
  • Dashboards
  • Blog
  • About me

Comparação entre sequências de DNA - COVID-19 vs Influenza A.

  • Mostrar o código
  • Esconder o código
Python
EDA
Plotly
Análise das Sequências de DNA das Doenças Covid - 19 e Influenza A
Autor

Luiz Felipe P. Figueiredo

Data de Publicação

30/09/2023

Comparação entre sequências de DNA - COVID-19 vs Influenza A.

Image by Freepik

Neste projeto iremos avaliar o sequenciamento de DNA dos vírus SARS-CoV-2 e Influenza A para verificar se existe diferença nas estruturas com funções parecidas destes organismos.

Os dados utilizados para este estudo são de sequencias de DNA que podem ser acessadas em:

SARS-CoV-2 Wuhan-Hu-1

Virus da Influenza A (California/07/2009(H1N1))

Importando os módulos necessários

Código
import numpy as np 
import pandas as pd
import plotly.express as px
import plotly.colors as colors
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.io as pio
pio.renderers.default = "notebook_connected"
 
with open('datasets/sequence_influ.fasta', 'r') as influenza_file:
    influenza_sequence = influenza_file.read()[104:]

with open('datasets/sequence_covid.fasta', 'r') as covid_file:
    covid_sequence = covid_file.read()[97:]

Preparação dos dados

Código
# Preparando os dados para os gráficos

influenza_sequence  = influenza_sequence .replace("\n","")
# cria uma lista contendo todos elementos menos o ultimo
x_influenza = list(influenza_sequence [:-1])  
y_influenza = list(influenza_sequence [1:])   

covid_sequence = covid_sequence.replace("\n","")
# cria uma lista contendo todos elementos menos o ultimo
x_covid = list(covid_sequence [:-1]) 
y_covid = list(covid_sequence [1:])  
Código
# cria um pandas dataframe com as listas acima, para cada doença

df_influenza_sequence = pd.DataFrame({'x_influenza': x_influenza, 'y_influenza': y_influenza})

df_covid_sequence = pd.DataFrame({'x_covid': x_covid, 'y_covid': y_covid })

# cria uma nova coluna em cada dataframe com o nome de sua respectiva doença

df_influenza_sequence['doenca']='Influenza A'
df_covid_sequence['doenca']='Covid-19'

# realiza uma serie de concatenações para deixar o df_concatenated pronto para o gráfico de barras

influenza_codiv_concatenated = pd.concat([df_influenza_sequence['x_influenza'], df_covid_sequence['x_covid']], axis=0, ignore_index=True)
doenca_df = pd.concat([df_influenza_sequence['doenca'], df_covid_sequence['doenca']], axis=0, ignore_index=True)
df_concatenated = pd.concat([influenza_codiv_concatenated, doenca_df], axis=1, ignore_index=True)
df_concatenated = df_concatenated.rename({0:'nucleotideo', 1:'doenca'}, axis=1)

Número de Nucleotídeos por Doença

Código
# gráfico de comparação entre o número de nucleotídeos de cada doença
px.bar(data_frame=df_concatenated.groupby('doenca').value_counts().reset_index(name='count'), 
                                                    x='nucleotideo',y='count' ,barmode='group', color='doenca', 
                                                    color_discrete_sequence= px.colors.qualitative.T10, 
                                                    labels=dict(nucleotideo='Nucleotídeo', count='Quantidade', doenca='Doença'),
                                                    hover_name='doenca', title='Número de Nucleotídeos por Doença')

Vemos que o número de nucleotídeos da Covid-19 é muito maior do que da Influenza A.

Código
#Transformando os dados em formato de matriz para criar o heatmap

influenza_sequence_cross_tabulated = pd.crosstab(index=df_influenza_sequence.x_influenza, columns=df_influenza_sequence.y_influenza)

covid_sequence_cross_tabulated = pd.crosstab(index=df_covid_sequence.x_covid, columns=df_covid_sequence.y_covid)

Heatmap dos Pares de Nucleotídeos da Covid-19 e Influenza A

Código
# Cria a grade de plots
fig = make_subplots(rows=1, cols=2, 
                    subplot_titles=['Influenza A', 'Covid-19'])
fig.add_trace(go.Heatmap(z=influenza_sequence_cross_tabulated.values, x=influenza_sequence_cross_tabulated.columns.tolist(), 
                         y=influenza_sequence_cross_tabulated.index.tolist(), colorbar=dict(x=.45, len=0.9, thickness=20, xanchor='left', yanchor='middle'), colorscale='Blues',
                         hovertemplate='Pares %{x}x%{y}<br>Número de Pares: %{z}', hoverlabel={'namelength': 0}), row=1, col=1)

fig.add_trace(go.Heatmap(z=covid_sequence_cross_tabulated.values, x=covid_sequence_cross_tabulated.columns.tolist(), 
                         y=covid_sequence_cross_tabulated.index.tolist(), colorbar=dict(x=1.0001, len=0.9, thickness=20, xanchor='left', yanchor='middle'), colorscale='Blues',
                         hovertemplate='Pares %{x}x%{y}<br>Número de Pares: %{z}', hoverlabel={'namelength': 0}), row=1, col=2)
fig.update_layout(
    title="Heatmap dos Pares de Nucleotídeos da Covid-19 e Influenza A",
    title_x=0.5
)

Os pares AG por exemplo diferem bastante em seu número com relação as duas doenças, como observado no gráfico acima. Essa disparidade pode ser um dos possíveis motivos que justificam as variações significativas na gravidade dos sintomas, na taxa de mortalidade e na capacidade de contágio entre essas doenças.

This work is licensed under CC BY-SA 4.0
Designed and Developed collaboratively by
Jose C. S. Junior & Luiz F. P. Figueiredo
Built with Quarto