fbpx
Sigmoidal
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
  • English
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
Sigmoidal
Sem Resultado
Ver Todos Resultados

Machine Learning para a Detecção de Câncer de Mama

Carlos Melo por Carlos Melo
outubro 30, 2019
em Blog, Data Science, Machine Learning, Python, Tutoriais
6
83
COMPARTILHAMENTOS
2.8k
VIEWS
Publicar no LinkedInCompartilhar no FacebookCompartilhar no Whatsapp

A utilização de Machine Learning para a detecção do câncer de mama vem crescendo cada vez mais e contribuindo para diagnósticos mais rápidos e precisos.

De acordo com a Sociedade Brasileira de Mastologia, uma em cada 12 mulheres terá um tumor nas mamas até os 90 anos. Infelizmente, o câncer de mama é a principal causa de morte entre as mulheres, de todos os diferentes tipos de câncer.

Machine Learning Python Câncer de Mama

Uma das principais características do câncer de mama é que quanto mais precoce for o seu diagnóstico, maiores são as chances de tratamento. Entretanto, uma pesquisa realizada revelou que mais de 3,8 milhões de mulheres na faixa de 50 a 69 anos nunca haviam feito autoexame ou mamografia.

A fim de aumentar a conscientização a respeito da prevenção e diagnóstico precoce, há, todo ano, a campanha Outubro Rosa, que visa alertar principalmente as mulheres sobre esta causa.

https://github.com/carlosfab/data_science/blob/master/Machine_Learning_para_a_Detec%C3%A7%C3%A3o_do_C%C3%A2ncer_de_Mama.ipynb

Contribuindo com essa conscientização e com a campanha Outubro Rosa, preparei um projeto de Data Science onde construí um modelo de Machine Learning capaz de detectar o câncer de mama. Para acessar o código fonte deste arquivo, basta clicar no botão acima.

Se você está começando na carreira de Cientista de Dados, recomendo também baixar gratuitamente meu eBook 🙂

Importar os Dados

Para a construção do modelo de Machine Learning, foi usado o banco de dados Wisconsin, disponibilizado no Repositório de Machine Learning da UCI.

Os dados que serão utilizados nesta análise também estão disponíveis para download por meio deste link direto e consistem basicamente em um arquivo csv contendo 569 entradas e 32 colunas, onde as observações foram obtidas por meio da aspiração com agulha fina de células da mama. Ressalta-se ainda que a variável alvo pode ser classificada em benigna ou maligna.

Este arquivo será importado para uma estrutura DataFrame utilizando a biblioteca pandas a fim de possibilitar sua manipulação e análise.

# importar os pacotes necessários
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.impute import SimpleImputer
# configurar o notebook
sns.set_style()
# importar o dataset em csv
data_path = "https://www.dropbox.com/s/z8nw6pfumdw3bb9/breast-cancer-wisconsin.csv?raw=1"
df = pd.read_csv(data_path)
# eliminar uma coluna com erro
df.drop('Unnamed: 32', axis=1, inplace=True)

Análise Exploratória

A primeira coisa que faremos após importar o dataset será examinar as dimensões do DataFrame e as primeiras entradas. Isso possibilitará criar uma consciência situacional inicial a respeito do formato de entrada e da estrutura geral dos dados.

  • A coluna id representa o número de identificação.
  • A coluna diagnosis é a variável alvo.
    • M – Maligno
    • B – Benigno
  • A descrição completa para cada uma das features está disponível neste link.

Uma característica é um número de identificação (ID), outro é o diagnóstico de câncer; e 30 são medidas laboratoriais numéricas. O diagnóstico é codificado como “M” para indicar maligno ou “B” para indicar benigno.

# dimensões do df
print("DIMENSÕES DO DATAFRAME:")
print("Linhas:\t\t{}".format(df.shape[0]))
print("Colunas:\t{}".format(df.shape[1]))
## DIMENSÕES DO DATAFRAME:
## Linhas:	569
## Colunas:	32

Já as primeiras 5 entradas desse conjunto de dados permitem adquirirmos uma noção inicial sobre o tipo de formato, exemplos de entrada e formulação das hipóteses iniciais do processo investigativo.

Por meio do método describe, é possível ver um resumo estatístico das variáveis numéricas.

Com exceção da coluna diagnosis, todas as outras são do tipo numérica (int e float). Apesar dessa ser a nossa conclusão olhando as primeiras entradas, é prudente analisar por meio do atributo dtypes para ter certeza que nenhuma foi importada como string.

Como em qualquer projeto de Data Science, a verificação da presença de valores ausentes no dataset é de extrema importância, pois é o reflexo direto da qualidade do mesmo. Para ver essas informações integralmente, acesso o código completo neste Jupyter notebook.

Agora, irei verificar o balanceamento do dataset vendo a porcentagem de valores da variável alvo. Como se pode ver abaixo, existe um pequeno desbalanceamento de valores.

Para ter a noção de como as variáveis estão distribuídas, vou plotar o histograma de todas as variáveis numéricas, excluindo a coluna id, uma vez que ela não acrescenta nenhuma informação importante.

Preste sempre atenção em como os valores de algumas variáveis estão mais bem distribuídos em torno de uma média, e outras tendem a puxar o histograma para a esquerda.

Machine Learning para a Detecção do Câncer de Mama

Para ver a força da correlação entre as variáveis, uma opção é plotar um heatmap. Repare no mapa abaixo como diversas variáveis possuem correlação positiva.

Machine Learning para a Detecção do Câncer de Mama

Preparação dos dados

Como parte do pré-processamento dos dados, que irão alimentar o modelo de Machine Learning, vou usar o StardardScaler, que vem junto com sklearn.preprocessing, para padronizar nossos dados numéricos.

Se você olhar no começo do código, vai reparar que a nossa variável alvo é categórica, onde M representa os tumores malignos e B os benignos. Usando LabelEncoder somos capazes de converter variáveis categóricas em numéricas e alimentar o modelo adequadamente.

from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
# separar as variáveis independentes da variável alvo
X = df.drop(['diagnosis', 'id'], axis=1)
y = df['diagnosis']
# padronizar as colunas numéricas
X = StandardScaler().fit_transform(X)
# label encoder na variável alvo
y = LabelEncoder().fit_transform(y)
# dividir o dataset entre treino e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

Por fim, antes de construir o modelo de fato, dividimos o dataset entre treino e teste usando o train_test_split, função que facilita muito o trabalho e que se encontra em sklearn.model_selection.

Modelo de Machine Learning para detecção do câncer de mama

Este problema de detecção de câncer consiste em classificar corretamente um tumor entre benigno e maligno, ou seja, é necessário que o modelo de Machine Learning dê uma classificação ao ser alimentado com diversas variáveis independentes (features).

Aqui, usarei um modelo do tipo Random Forest (Floresta Aleatória) devido à sua flexibilidade e facilidade de uso (uma vez que funciona muito bem mesmo sem o ajuste nos hiperparâmetros).

from sklearn.ensemble import RandomForestClassifier
# instanciando o modelo de Random Forest
ml_model = RandomForestClassifier(n_estimators = 10, criterion='entropy', random_state = 42)
# treinando o modelo
ml_model.fit(X_train, y_train)

O algoritmo Random Forest, que usa métodos ensemble, tem esse nome por que cria uma combinação de várias árvores de decisão – uma “floresta” realmente – verificando qual combinação apresenta melhor desempenho e acurácia.

Vamos dar uma checada no desempenho do modelo quando se depara pela primeira vez com o conjunto de testes.

Desempenho do modelo de detecção de câncer de mama

Cada caso é um caso. Nem sempre uma excelente acurácia vai significar que seu modelo está bom.

Por exemplo, quando se trata de detectar câncer, queremos maximizar o número de verdadeiros positivos e minimizar o número de falsos negativos. No entanto, esta é uma balança difícil de equilibrar, e o trade-off pode ser bem subjetivo inclusive.

Aqui, além da métrica de acurácia vou usar a função classification_report para ver ver o desempenho do modelo sobre as métricas de precisão, recall, f1-score e support.

from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
# realizar as previsões no dataset de teste
y_pred = ml_model.predict(X_test)
# ver acurácia geral
print('[Acurácia] Random Forest:', accuracy_score(y_test, y_pred))
# imprimir o classification report
print('\n[Classification Report] Random Forest')
print( classification_report(y_test, y_pred))

Aparentemente, o modelo está com ótimos valores nas métricas consideradas. Mas como eu disse lá em cima, cada caso é um caso.

Eu acho muito interessante você sempre dar uma checada na matriz de confusão. Para exemplificar, imagine que seu modelo é capaz de detectar com 99,999% de acurácia sempre que um paciente não apresenta um tumor maligno, mas apenas 85% de acurácia quando prevê que o mesmo paciente apresenta esse tumor maligno.

Há vezes em que é melhor ter mais falsos positivos e investigar mais profundamente o caso (como também é o caso de fraudes no cartão de crédito), e ter um modelo menos preciso.

# plotar a matriz de confusão
pd.DataFrame(confusion_matrix(y_test, y_pred),
             index=['neg', 'pos'], columns=['pred_neg', 'pred_pos'])

Como você pode confirmar, o modelo classificatório Random Forest para a detecção de câncer de mama foi capaz de atingir uma acurácia superior a 96% e lidou muito bem com ambas as classes.

Outubro Rosa e Machine Learning

Apesar da campanha Outubro Rosa ser em Outubro, a conscientização deve existir durante o ano todo. A importância de um dianóstico precoce do câncer de mama deve estar clara na cabeça de todo mundo.

Machine Learning para a Detecção do Câncer de Mama

Avanços e descobertas no campo da Inteligência Artificial ocorrem a todo momento, principalmente na área da saúde. Detecção de câncer por meio de algoritmos de Machine Learning ajuda cada vez mais os médicos a diagnosticarem seus pacientes, aumentando drasticamente as chances dos tratamentos convencionais.

No entanto, mesmo a construção de modelos altamente confiáveis para a detecção de câncer de mama não substitui uma variável, a principal feature, o diagnóstico precoce 😉

Espero ter contribuido um pouco com a causa, apresentando um modelo 100% replicável por qualquer pessoa (basta abrir o código no Google Colab e executar cada linha.

Sinta-se à vontade para modificar, expandir e melhorar esse modelo. Abraços!

Compartilhar6Compartilhar33Enviar
Post Anterior

Como criar uma WordCloud em Python

Próximo Post

5 motivos para você aprender Python

Carlos Melo

Carlos Melo

Engenheiro de Visão Computacional graduado em Ciências Aeronáuticas pela Academia da Força Aérea (AFA) e Mestre em Engenharia Aeroespacial pelo Instituto Tecnológico de Aeronáutica (ITA).

Relacionado Artigos

O Que é Amostragem e Quantização no Processamento de Imagens
Artigos

O Que é Amostragem e Quantização no Processamento de Imagens

por Carlos Melo
junho 20, 2025
Curso de Pós-Graduação em Data Science
Data Science

Vale a pena fazer uma Pós-Graduação em Data Science?

por Carlos Melo
janeiro 20, 2025
Review do Livro “Mãos à obra: Aprendizado de Máquina com Scikit-Learn, Keras & TensorFlow”
Livros

Review do Livro “Mãos à obra: Aprendizado de Máquina com Scikit-Learn, Keras & TensorFlow”

janeiro 18, 2025
Carlos Melo e Sérgio Sacani – Ciência Sem Fim
Youtube

Carlos Melo e Sérgio Sacani – Ciência Sem Fim

por Carlos Melo
janeiro 16, 2025
Carlos Melo da Pós Graduação em Data Science do Sigmoidal
Aeroespacial

Oportunidades no Setor Espacial para Cientistas de Dados

por Carlos Melo
janeiro 15, 2025
Próximo Post
5 motivos para você aprender Python

5 motivos para você aprender Python

Comentários 6

  1. Tiago says:
    6 anos atrás

    Show o artigo!

    Responder
    • Carlos Melo Carlos Melo says:
      6 anos atrás

      Muito obrigado, Tiago! 🙂

      Responder
  2. Ariel Teles says:
    6 anos atrás

    Ola, neste caso a classe esta bem desbalanceada , teria que balancear antes de colocar o modelo para rodar correto?

    Responder
    • Carlos Melo Carlos Melo says:
      6 anos atrás

      Seria o ideal sim. Ou o modelo pode ficar enviesado para o label com mais ocorrências 🙂

      Responder
    • Igor Farah says:
      5 anos atrás

      Sobre a pergunta do Ariel de desbalanceamento de dados, como poderíamos “corrigir” esse problema?

      Responder
  3. tainabueno says:
    5 anos atrás

    Muito bom!!

    Responder

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Pós-Graduação em Data Science Pós-Graduação em Data Science Pós-Graduação em Data Science

Mais Populares

  • Introdução ao MediaPipe e Pose Estimation

    Introdução ao MediaPipe e Pose Estimation

    482 compartilhamentos
    Compartilhar 193 Tweet 121
  • ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

    405 compartilhamentos
    Compartilhar 162 Tweet 101
  • Processamento de Nuvens de Pontos com Open3D e Python

    43 compartilhamentos
    Compartilhar 17 Tweet 11
  • Geometria da Formação de Imagens: Matrizes, Transformações e Sistemas de Coordenadas

    381 compartilhamentos
    Compartilhar 152 Tweet 95
  • O Que é Amostragem e Quantização no Processamento de Imagens

    5 compartilhamentos
    Compartilhar 2 Tweet 1
  • Em Alta
  • Comentários
  • Mais Recente
Como Tratar Dados Ausentes com Pandas

Como Tratar Dados Ausentes com Pandas

agosto 13, 2019
Como usar o DALL-E 2 para gerar imagens a partir de textos

Como usar o DALL-E 2 para gerar imagens a partir de textos

dezembro 25, 2022
Introdução ao MediaPipe e Pose Estimation

Introdução ao MediaPipe e Pose Estimation

julho 15, 2023

ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

abril 10, 2023
Como Analisar Ações da Bolsa com Python

Como Analisar Ações da Bolsa com Python

15
Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

13
Como Aprender Data Science?

Como Aprender Data Science?

9
Qual o Cenário de Data Science no Brasil hoje?

Qual o Cenário de Data Science no Brasil hoje?

8
O Que é Amostragem e Quantização no Processamento de Imagens

O Que é Amostragem e Quantização no Processamento de Imagens

junho 20, 2025
DeepSeek vazamento de dados de usuários

DeepSeek: Vazamento de dados expõe dados de usuários

fevereiro 1, 2025
DeepSeek R1 vs OpenAI o1 – Qual é o Melhor Modelo de IA

DeepSeek R1 vs OpenAI o1 – Qual é o Melhor Modelo de IA?

janeiro 25, 2025
Trump Anuncia Investimento de US$ 500 Bilhões em Infraestrutura de IA

Trump Anuncia Investimento de US$ 500 Bilhões em Infraestrutura de IA

janeiro 22, 2025

Seguir

  • 🎙️ Corte da minha conversa com o Thiago Nigro, no PrimoCast #224

Falamos sobre por que os dados são considerados o novo petróleo - para mim, dados são o novo bacon!

Expliquei como empresas que dominam a ciência de dados ganham vantagem real no mercado. Não por armazenarem mais dados, mas por saberem o que fazer com eles.

Também conversamos sobre as oportunidades para quem quer entrar na área de tecnologia. Data Science é uma das áreas mais democráticas que existem. Não importa sua idade, formação ou cidade. O que importa é a vontade de aprender.

Se você quiser ver o episódio completo, é só buscar por Primocast 224.

“O que diferencia uma organização de outra não é a capacidade de armazenamento de dados; é a capacidade de seu pessoal extrair conhecimento desses dados.”

#machinelearning #datascience #visãocomputacional #python
  • 📸 Palestra que realizei no palco principal da Campus Party #15, o maior evento de tecnologia da América Latina!

O tema que escolhi foi "Computação Espacial", onde destaquei as inovações no uso de visão computacional para reconstrução 3D e navegação autônoma.

Apresentei técnicas como Structure-from-Motion (SFM), uma técnica capaz de reconstruir cidades inteiras (como Roma) usando apenas fotos publicadas em redes sociais, e ORB-SLAM, usada por drones e robôs para mapeamento em tempo real.

#visãocomputacional #machinelearning #datascience #python
  • ⚠️❗ Não deem ideia para o Haddad! 

A França usou Inteligência Artificial para detectar mais de 20 mil piscinas não declaradas a partir de imagens aéreas.

Com modelos de Deep Learning, o governo identificou quem estava devendo imposto... e arrecadou mais de €10 milhões com isso.

Quer saber como foi feito? Veja no post completo no blog do Sigmoidal: https://sigmoidal.ai/como-a-franca-usou-inteligencia-artificial-para-detectar-20-mil-piscinas/

#datascience #deeplearning #computerVision #IA
  • Como aprender QUALQUER coisa rapidamente?

💡 Comece com projetos reais desde o primeiro dia.
📁 Crie um portfólio enquanto aprende. 
📢 E compartilhe! Poste, escreva, ensine. Mostre o que está fazendo. Documente a jornada, não o resultado.

Dois livros que mudaram meu jogo:
-> Ultra Aprendizado (Scott Young)
-> Uma Vida Intelectual (Sertillanges)

Aprenda em público. Evolua fazendo.

#ultralearning #estudos #carreira
  • Como eu usava VISÃO COMPUTACIONAL no Centro de Operações Espaciais, planejando missões de satélites em situações de desastres naturais.

A visão computacional é uma fronteira fascinante da tecnologia que transforma a forma como entendemos e respondemos a desastres e situações críticas. 

Neste vídeo, eu compartilho um pouco da minha experiência como Engenheiro de Missão de Satélite e especialista em Visão Computacional. 

#VisãoComputacional #DataScience #MachineLearning #Python
  • 🤔 Essa é a MELHOR linguagem de programação, afinal?

Coloque sua opinião nos comentários!

#python #datascience #machinelearning
  • 💘 A história de como conquistei minha esposa... com Python!

Lá em 2011, mandei a real:

“Eu programo em Python.”
O resto é história.
  • Para rotacionar uma matriz 2D em 90°, primeiro inverto a ordem das linhas (reverse). Depois, faço a transposição in-place. Isso troca matrix[i][j] com matrix[j][i], sem criar outra matriz. A complexidade segue sendo O(n²), mas o uso de memória se mantém O(1).

Esse padrão aparece com frequência em entrevistas. Entender bem reverse + transpose te prepara para várias variações em matrizes.

#machinelearning #visaocomputacional #leetcode
  • Na última aula de estrutura de dados, rodei um simulador de labirintos para ensinar como resolver problemas em grids e matrizes.

Mostrei na prática a diferença entre DFS e BFS. Enquanto a DFS usa stacks, a BFS utiliza a estrutura de fila (queue). Cada abordagem tem seu padrão de propagação e uso ideal.

#machinelearning #visaocomputacional #algoritmos
  • 🔴 Live #2 – Matrizes e Grids: Fundamentos e Algoritmos Essenciais

Na segunda aula da série de lives sobre Estruturas de Dados e Algoritmos, o foco será em Matrizes e Grids, estruturas fundamentais em problemas de caminho, busca e representação de dados espaciais.

📌 O que você vai ver:

Fundamentos de matrizes e grids em programação
Algoritmos de busca: DFS e BFS aplicados a grids
Resolução ao vivo de problemas do LeetCode

📅 Terça-feira, 01/07, às 22h no YouTube 
🎥 (link nos Stories)

#algoritmos #estruturasdedados #leetcode #datascience #machinelearning
  • 💡 Quer passar em entrevistas técnicas?
Veja essa estratégia para você estudar estruturas de dados em uma sequência lógica e intuitiva.
⠀
👨‍🏫 NEETCODE.io
⠀
🚀 Marque alguém que também está se preparando!

#EntrevistaTecnica #LeetCode #MachineLearning #Data Science
  • Live #1 – Arrays & Strings: Teoria e Prática para Entrevistas Técnicas

Segunda-feira eu irei começar uma série de lives sobre Estruturas de Dados e Algoritmos. 

No primeiro encontro, falarei sobre um dos tipos de problemas mais cobrados em entrevistas: Arrays e Strings.

Nesta aula, você vai entender a teoria por trás dessas estruturas, aprender os principais padrões de resolução de problemas e aplicar esse conhecimento em exercícios selecionados do LeetCode.

📅 Segunda-feira, 23/06, às 21h no YouTube

🎥 (link nos Stories)

#machinelearning #datascience #cienciadedados #visãocomputacional
  • 🤖 Robôs que escalam, nadam, voam e rastejam.

Acabei de ver o que a Gecko Robotics está fazendo — e é impressionante.
Eles usam robôs que escalam, rastejam, nadam e voam para coletar dados estruturais de ativos físicos como navios, refinarias e usinas de energia.

Depois, tudo isso entra numa plataforma de AI chamada Cantilever, que combina:

✅ Ontologias baseadas em princípios físicos
✅ Edge robotics + sensores fixos
✅ Modelos preditivos para manutenção e operação

É como se estivessem criando um Digital Twin confiável de infraestruturas críticas — com dados de verdade, coletados direto do mundo físico.

Ah, e agora alcançaram status de unicórnio 🦄:
$1.25B de valuation, com foco em defesa, energia e manufatura pesada.

#MachineLearning #Robótica #MLOps #visãocomputacional
  • 🚨 FALTAM 2 DIAS!
As inscrições para a nova Pós em Visão Computacional & Deep Learning encerram neste domingo, 8 de junho, às 23h59.

Essa é sua chance de dominar IA aplicada, com foco total em projetos, e conquistar oportunidades como Machine Learning Engineer ou Computer Vision Specialist, no Brasil ou no exterior.

🔗 Link na bio para garantir sua vaga com bônus e valor promocional!

#VisaoComputacional #DeepLearning
  • 🤔🤔🤔 verdade ou mentira??
  • 🚀 NOVA PÓS EM VISÃO COMPUTACIONAL!

Seja especialista em Visão Computacional e Deep Learning! 

✔️ 400h de conteúdo
✔️ Curso reconhecido pelo MEC
✔️ Foco em prática e projetos reais

💡 1 CURSO, 2 CARREIRAS
Atue como Machine Learning Engineer E Computer Vision Engineer! 

📅 Aula de lançamento: 1º de junho, 20h

📍 Link na bio. Ative o lembrete e participe!

#computervision #machinelearning #datascience
Instagram Youtube LinkedIn Twitter
Sigmoidal

O melhor conteúdo técnico de Data Science, com projetos práticos e exemplos do mundo real.

Seguir no Instagram

Categorias

  • Aeroespacial
  • Artigos
  • Blog
  • Carreira
  • Cursos
  • Data Science
  • Deep Learning
  • Destaques
  • Entrevistas
  • IA Generativa
  • Livros
  • Machine Learning
  • Notícias
  • Python
  • Teoria
  • Tutoriais
  • Visão Computacional
  • Youtube

Navegar por Tags

camera calibration carreira chatgpt cientista de dados cnn computer vision Cursos dados desbalanceados data science data science na prática decision tree deep learning gpt-3 histograma IA generativa image formation inteligência artificial jupyter kaggle keras machine learning matplotlib mnist nft openai opencv overfitting pandas profissão python redes neurais redes neurais convolucionais regressão linear regressão logística salário scikit-learn seaborn sklearn tensorflow titanic tutorial visão computacional vídeo youtube árvore de decisão

© 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist

Sem Resultado
Ver Todos Resultados
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
  • English

© 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.