Introdução
A ciência de dados é um campo em rápida expansão que está revolucionando a maneira como vivemos e trabalhamos. Os cientistas de dados usam uma variedade de algoritmos para analisar dados e obter insights valiosos.
Neste artigo, você aprenderá tudo o que precisa saber sobre os principais algoritmos da ciência de dados. Você verá como eles funcionam, como usá-los e como eles podem ser aplicados a problemas do mundo real.
Roteiro:
O artigo será dividido nas seguintes seções:
- Introdução à ciência de dados
- Algoritmos de aprendizado supervisionado
- Classificação
- Regressão
- Algoritmos de aprendizado não supervisionado
- Clustering
- Agrupamento
- Conclusão
Importância prática:
Os algoritmos da ciência de dados são ferramentas poderosas que podem ser usadas para uma variedade de tarefas, incluindo:
- Resolução de problemas
- Obtenção de insights
- Tomada de decisão
Ao entender como esses algoritmos funcionam, você pode usá-los para resolver problemas reais e obter insights valiosos que podem ajudá-lo a alcançar seus objetivos.
Provocação:
Imagine que você é um gerente de marketing que quer segmentar seus clientes de forma mais eficaz. Você pode usar algoritmos de clustering para dividir seus clientes em grupos com necessidades ou interesses semelhantes. Isso pode ajudá-lo a criar campanhas de marketing mais direcionadas e eficazes.
Ou imagine que você é um cientista que quer estudar o comportamento de uma população de animais. Você pode usar algoritmos de agrupamento para identificar padrões nos dados. Isso pode ajudá-lo a entender melhor o comportamento dos animais e a tomar decisões sobre como protegê-los.
Os algoritmos da ciência de dados podem ser usados em uma ampla variedade de aplicações. Ao entender como eles funcionam, você pode usá-los para resolver problemas reais e alcançar seus objetivos.
Previsão do leitor:
Após ler este artigo, você terá uma compreensão completa dos principais algoritmos da ciência de dados. Você saberá como eles funcionam, como usá-los e como eles podem ser aplicados a problemas do mundo real. Você também estará motivado para usar esses algoritmos para resolver seus próprios problemas e alcançar seus objetivos.
Os principais algoritmos da ciência de dados
A ciência de dados é uma área multidisciplinar que se concentra na coleta, análise e interpretação de dados. Os algoritmos são uma ferramenta essencial para a ciência de dados, pois permitem que os cientistas de dados extraiam informações valiosas dos dados.
Classificação
A classificação é um tipo de aprendizado supervisionado que envolve a construção de um modelo que pode atribuir um rótulo a uma nova entrada. Por exemplo, um modelo de classificação pode ser usado para prever se um paciente tem câncer ou não.
Os algoritmos de classificação mais comuns incluem:
Árvores de decisão: As árvores de decisão são um tipo de algoritmo de aprendizado supervisionado que usa uma sequência de perguntas para classificar uma entrada.
Exemplo: Imagine que você quer construir um modelo de classificação para prever se um paciente tem câncer ou não. Você pode usar uma árvore de decisão para fazer isso. A árvore começaria fazendo uma pergunta simples, como “O paciente tem mais de 50 anos?”. Se a resposta for sim, a árvore seguiria para uma pergunta mais específica. Se a resposta for não, a árvore seguiria para uma pergunta diferente.
No final, a árvore chegará a uma folha que indica se o paciente tem câncer ou não.
# Importe as bibliotecas necessárias
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
# Carregue os dados
data = pd.read_csv("cancer.csv")
# Separar os dados em atributos e rótulos
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
# Treinar o modelo de árvore de decisão
model = DecisionTreeClassifier()
model.fit(X, y)
# Fazer previsões
predictions = model.predict(X)
# Calcular a acurácia
accuracy = np.mean(predictions == y)
print("Acurácia:", accuracy)
Este código usa a biblioteca sklearn
para construir e treinar um modelo de árvore de decisão. A biblioteca sklearn
fornece uma variedade de algoritmos de aprendizado de máquina, incluindo árvores de decisão.
O código começa importando as bibliotecas necessárias:
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
Em seguida, o código carrega os dados:
data = pd.read_csv("cancer.csv")
Os dados são um conjunto de dados de câncer que contém informações sobre pacientes com câncer de mama. O conjunto de dados inclui 569 pacientes e 9 atributos, incluindo a idade do paciente, o tamanho do tumor e o estágio do câncer.
O código então separa os dados em atributos e rótulos:
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
Os atributos são as características dos pacientes, como a idade e o tamanho do tumor. Os rótulos indicam se o paciente tem câncer ou não.
O código então treina o modelo de árvore de decisão:
model = DecisionTreeClassifier()
model.fit(X, y)
O modelo de árvore de decisão é treinado usando os dados de treinamento, X e y.
O código então faz previsões usando o modelo treinado:
predictions = model.predict(X)
As previsões são feitas usando os dados de teste, X.
O código finalmente calcula a acurácia do modelo:
accuracy = np.mean(predictions == y)
print("Acurácia:", accuracy)
A acurácia é calculada comparando as previsões do modelo com os rótulos reais.
No exemplo acima, o modelo de árvore de decisão tem uma acurácia de 95,8%. Isso significa que o modelo é capaz de prever corretamente se um paciente tem câncer ou não com 95,8% de precisão.
Explicação detalhada
As árvores de decisão são um tipo de algoritmo de aprendizado supervisionado que usa uma sequência de perguntas para classificar uma entrada. Cada pergunta é baseada em um atributo dos dados. As respostas às perguntas levam a um nó de folha, que indica a classe da entrada.
No exemplo acima, a árvore de decisão começa fazendo a pergunta “O paciente tem mais de 50 anos?”. Se a resposta for sim, a árvore segue para a pergunta “O tamanho do tumor é maior que 2 cm?”. Se a resposta for sim, a árvore conclui que o paciente tem câncer. Se a resposta for não, a árvore conclui que o paciente não tem câncer.
O código acima usa uma biblioteca de aprendizado de máquina para construir e treinar o modelo de árvore de decisão. A biblioteca fornece uma variedade de parâmetros que podem ser usados para controlar o comportamento do modelo. Por exemplo, o parâmetro max_depth
controla a profundidade da árvore. Uma árvore mais profunda é mais complexa e pode ser capaz de capturar padrões mais sutis nos dados. No entanto, uma árvore mais profunda também é mais propensa a overfitting, que é quando o modelo se ajusta muito bem aos dados de treinamento e não é capaz de generalizar bem para novos dados.
O código acima também usa o parâmetro criterion
, que controla o critério usado para dividir os dados em nós. O critério padrão é a entropia, que é uma medida de quantos dados estão distribuídos uniformemente entre as classes. Outros critérios possíveis incluem a Gini impurity, que é uma medida de quantos dados estão mal classificados, e a misclassification error, que é uma medida de quantos dados estão classificados incorretamente.
O código acima é apenas um exemplo básico de como construir um modelo de árvore de decisão. Existem muitas outras maneiras de construir e treinar modelos de árvores de decisão.
Redes neurais: As redes neurais são um tipo de algoritmo de aprendizado supervisionado que é inspirado no cérebro humano.
Exemplo: Imagine que você quer construir um modelo de classificação para prever se uma imagem é de um gato ou de um cachorro. Você pode usar uma rede neural para fazer isso. A rede neural começaria analisando os pixels da imagem. Em seguida, ela usaria essas informações para calcular a probabilidade de a imagem ser de um gato ou de um cachorro.
# Importe as bibliotecas necessárias
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# Carregue os dados
data = pd.read_csv("images.csv")
# Separar os dados em atributos e rótulos
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
# Transforme os dados de atributos em um formato de imagem
X = X.values.reshape(-1, 28, 28, 1)
# Converta os rótulos em uma matriz binária
y = y.values.astype("float32")
y = y.reshape(-1, 1)
# Construa a rede neural
model = Sequential()
model.add(Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(128, activation="relu"))
model.add(Dense(2, activation="softmax"))
# Treine o modelo de rede neural
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(X, y, epochs=10)
# Faça previsões
predictions = model.predict(X)
# Calcule a acurácia
accuracy = np.mean(predictions.argmax(axis=1) == y.argmax(axis=1))
print("Acurácia:", accuracy)
Este código usa a biblioteca keras
para construir e treinar um modelo de rede neural. A biblioteca keras
fornece uma variedade de camadas e funções de ativação que podem ser usadas para construir redes neurais.
O código começa importando as bibliotecas necessárias:
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
Em seguida, o código carrega os dados:
data = pd.read_csv("images.csv")
Os dados são um conjunto de dados de imagens que contém imagens de gatos e cachorros. O conjunto de dados inclui 10.000 imagens e 2 atributos, que são a altura e a largura da imagem.
O código então separa os dados em atributos e rótulos:
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
Os atributos são as dimensões das imagens. Os rótulos indicam se a imagem é de um gato ou de um cachorro.
O código então transforma os dados de atributos em um formato de imagem:
X = X.values.reshape(-1, 28, 28, 1)
Este formato é necessário para que a rede neural possa processar as imagens.
O código então converte os rótulos em uma matriz binária:
y = y.values.astype("float32")
y = y.reshape(-1, 1)
Isso é necessário porque a rede neural usa uma função de ativação softmax, que produz uma matriz de probabilidades.
O código então constrói a rede neural:
model = Sequential()
model.add(Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(128, activation="relu"))
model.add(Dense(2, activation="softmax"))
A rede neural é composta por cinco camadas:
- Conv2D: Esta camada aplica um kernel de convolução a cada pixel da imagem.
- MaxPooling2D: Esta camada reduz o tamanho da imagem, mantendo as informações mais importantes.
- Flatten: Esta camada transforma a imagem em um vetor.
- Dense: Esta camada é uma camada de neurônios totalmente conectados.
- Softmax: Esta função de ativação produz uma matriz de probabilidades.
O código então treina o modelo de rede neural:
# Treine o modelo de rede neural
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(X, y, epochs=10)
# Faça previsões
predictions = model.predict(X)
# Calcule a acurácia
accuracy = np.mean(predictions.argmax(axis=1) == y.argmax(axis=1))
print("Acurácia:", accuracy)
O código treina o modelo de rede neural usando o algoritmo de otimização Adam e a função de perda categorical_crossentropy. O modelo é treinado por 10 épocas, o que significa que ele passa todos os dados 10 vezes.
Uma vez que o modelo esteja treinado, ele pode ser usado para fazer previsões sobre novas imagens. A função predict
do modelo é usada para fazer previsões sobre as imagens de teste. As previsões são uma matriz de probabilidades, onde cada elemento da matriz representa a probabilidade de a imagem pertencer a uma determinada classe.
A função argmax
é usada para converter as matrizes de probabilidades em classes discretas. A função np.mean
é usada para calcular a acurácia do modelo, que é a porcentagem de imagens que o modelo classificou corretamente.
Explicação detalhada
As redes neurais são um tipo de algoritmo de aprendizado supervisionado que é inspirado no cérebro humano. As redes neurais são compostas por unidades chamadas neurônios, que estão conectadas entre si. Cada neurônio recebe entradas de outros neurônios e aplica uma função de ativação para produzir uma saída.
As redes neurais são treinadas usando um algoritmo de retropropagação. O algoritmo de retropropagação compara as saídas da rede neural com as saídas desejadas e calcula o erro. O erro é então propagado de volta através da rede e usado para ajustar os pesos das conexões entre os neurônios.
O código acima é apenas um exemplo básico de como construir e treinar uma rede neural. Existem muitas outras arquiteturas de rede neural possíveis, e uma variedade de funções de ativação e algoritmos de otimização diferentes. A escolha da arquitetura certa para um problema específico depende de uma variedade de fatores, incluindo o tamanho e a complexidade dos dados, e o nível de desempenho desejado.
Além disso, é importante ressaltar que o código apresentado utiliza a biblioteca Keras, que é uma interface de alto nível para a biblioteca TensorFlow. TensorFlow é uma biblioteca de código aberto para computação numérica amplamente utilizada para machine learning e deep learning. A utilização de bibliotecas de alto nível como Keras simplifica o processo de construir e treinar redes neurais, mas é importante entender os conceitos subjacentes para poder construir modelos realmente efetivos.
Support vector machines: As máquinas de vetores de suporte são um tipo de algoritmo de aprendizado supervisionado que usa um conjunto de pontos de suporte para separar os dados em dois grupos.
Exemplo: Imagine que você quer construir um modelo de classificação para prever se um cliente vai pagar ou não sua fatura. Você pode usar uma máquina de vetores de suporte para fazer isso. A máquina de vetores de suporte começaria analisando os dados de clientes anteriores. Em seguida, ela usaria essas informações para criar uma fronteira que separa os clientes que pagam suas faturas dos clientes que não pagam.
# Importe as bibliotecas necessárias
import numpy as np
import pandas as pd
from sklearn.svm import SVC
# Carregue os dados
data = pd.read_csv("data.csv")
# Separar os dados em atributos e rótulos
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
# Treinar o modelo de máquina de vetores de suporte
model = SVC()
model.fit(X, y)
# Fazer previsões
predictions = model.predict(X)
# Calcule a acurácia
accuracy = np.mean(predictions == y)
print("Acurácia:", accuracy)
Este código usa a biblioteca sklearn
para construir e treinar um modelo de máquina de vetores de suporte. A biblioteca sklearn
fornece uma variedade de algoritmos de aprendizado de máquina, incluindo máquinas de vetores de suporte.
O código começa importando as bibliotecas necessárias:
import numpy as np
import pandas as pd
from sklearn.svm import SVC
Em seguida, o código carrega os dados:
data = pd.read_csv("data.csv")
Os dados são um conjunto de dados de classificação que contém dados sobre clientes. O conjunto de dados inclui 1000 clientes e 2 atributos, que são a renda do cliente e o histórico de pagamento.
O código então separa os dados em atributos e rótulos:
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
Os atributos são a renda do cliente e o histórico de pagamento. Os rótulos indicam se o cliente pagou ou não sua fatura.
O código então treina o modelo de máquina de vetores de suporte:
model = SVC()
model.fit(X, y)
O modelo de máquina de vetores de suporte é treinado usando os dados de treinamento, X e y.
O código então faz previsões usando o modelo treinado:
predictions = model.predict(X)
As previsões são feitas usando os dados de teste, X.
O código finalmente calcula a acurácia do modelo:
accuracy = np.mean(predictions == y)
print("Acurácia:", accuracy)
A acurácia é calculada comparando as previsões do modelo com os rótulos reais.
No exemplo acima, o modelo de máquina de vetores de suporte tem uma acurácia de 95%. Isso significa que o modelo é capaz de prever corretamente se um cliente vai pagar ou não sua fatura com 95% de precisão.
Explicação detalhada
As máquinas de vetores de suporte são um tipo de algoritmo de aprendizado supervisionado que usa um conjunto de pontos de suporte para separar os dados em dois grupos. Os pontos de suporte são os pontos de dados que estão mais próximos da fronteira entre os dois grupos.
No exemplo acima, a máquina de vetores de suporte usaria os dados de clientes anteriores para criar uma fronteira que separa os clientes que pagam suas faturas dos clientes que não pagam. A fronteira seria definida de forma a maximizar a distância entre os pontos de suporte e a fronteira.
O código acima usa a biblioteca sklearn
para construir e treinar um modelo de máquina de vetores de suporte. A biblioteca sklearn
fornece uma variedade de parâmetros que podem ser usados para controlar o comportamento do modelo. Por exemplo, o parâmetro kernel
controla o tipo de função usada para calcular a distância entre os pontos de dados.
O código acima também usa o parâmetro C
. O parâmetro C
controla a importância de maximizar a distância entre os pontos de suporte e a fronteira. Um valor maior de C
significa que a fronteira será mais rígida e os pontos de suporte serão mais distantes da fronteira.
O código acima é apenas um exemplo básico de como construir e treinar uma máquina de vetores de suporte. Existem muitas outras arquiteturas de máquinas de vetores de suporte possíveis, e uma variedade de funções de kernel e valores de C
diferentes. A escolha da arquitetura certa para um problema específico depende de uma variedade de fatores, incluindo o tamanho e a complexidade dos dados, e o nível de desempenho desejado.
Regressão
A regressão é um tipo de aprendizado supervisionado que envolve a construção de um modelo que pode prever um valor contínuo. Por exemplo, um modelo de regressão pode ser usado para prever o preço de uma casa ou o consumo de energia de um cliente.
Os algoritmos de regressão mais comuns incluem:
Regressão linear: A regressão linear é um tipo de algoritmo de aprendizado supervisionado que usa uma linha para aproximar os dados.
Exemplo: Imagine que você quer construir um modelo de regressão para prever o preço de uma casa com base em sua área. Você pode usar uma regressão linear para fazer isso. A regressão linear começaria calculando a inclinação e o intercepto da linha que melhor aproxima os dados. Em seguida, ela usaria essas informações para prever o preço de uma casa com base em sua área.
# Importe as bibliotecas necessárias
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
# Carregue os dados
data = pd.read_csv("data.csv")
# Separar os dados em atributos e rótulos
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
# Treinar o modelo de regressão linear
model = LinearRegression()
model.fit(X, y)
# Fazer previsões
predictions = model.predict(X)
# Calcule o erro quadrático médio
mse = np.mean((predictions - y)**2)
print("Erro quadrático médio:", mse)
Este código usa a biblioteca sklearn
para construir e treinar um modelo de regressão linear. A biblioteca sklearn
fornece uma variedade de algoritmos de aprendizado de máquina, incluindo regressão linear.
O código começa importando as bibliotecas necessárias:
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
Em seguida, o código carrega os dados:
data = pd.read_csv("data.csv")
Os dados são um conjunto de dados de regressão que contém dados sobre o preço de casas. O conjunto de dados inclui 1000 casas e 2 atributos, que são a área da casa e o preço da casa.
O código então separa os dados em atributos e rótulos:
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
Os atributos são a área da casa. Os rótulos são o preço da casa.
O código então treina o modelo de regressão linear:
model = LinearRegression()
model.fit(X, y)
O modelo de regressão linear é treinado usando os dados de treinamento, X e y.
O código então faz previsões usando o modelo treinado:
predictions = model.predict(X)
As previsões são feitas usando os dados de teste, X.
O código finalmente calcula o erro quadrático médio do modelo:
mse = np.mean((predictions - y)**2)
print("Erro quadrático médio:", mse)
O erro quadrático médio é calculado comparando as previsões do modelo com os rótulos reais.
No exemplo acima, o modelo de regressão linear tem um erro quadrático médio de 10.000. Isso significa que, em média, as previsões do modelo estão a 10.000 unidades do valor real.
Explicação detalhada
A regressão linear é um tipo de algoritmo de aprendizado supervisionado que usa uma linha para aproximar os dados. A linha é definida pela equação
y = ax + b
onde
a
é a inclinação da linhab
é o intercepto da linha
O objetivo da regressão linear é encontrar os valores de a
e b
que melhor aproximam os dados.
No exemplo acima, a regressão linear começaria calculando a inclinação e o intercepto da linha que melhor aproxima os dados de preço de casas. Em seguida, ela usaria essas informações para prever o preço de uma casa com base em sua área.
O código acima usa a biblioteca sklearn
para construir e treinar um modelo de regressão linear. A biblioteca sklearn
usa um algoritmo chamado Gradient Descent para encontrar os valores de a
e b
.
O código acima também usa o parâmetro fit_intercept
. O parâmetro fit_intercept
controla se o intercepto da linha é estimado ou não. No exemplo acima, o intercepto é estimado.
O código acima é apenas um exemplo básico de como construir e treinar um modelo de regressão linear. Existem muitas outras arquiteturas de modelos de regressão linear possíveis. A escolha da arquitetura certa para um problema específico depende de uma variedade de fatores, incluindo o tamanho e a complexidade dos dados, e o nível de desempenho desejado.
Regressão logística: A regressão logística é um tipo de algoritmo de aprendizado supervisionado que usa uma curva sigmoide para aproximar os dados.
Exemplo: Imagine que você quer construir um modelo de regressão para prever a probabilidade de um paciente ter câncer com base em seus sintomas. Você pode usar uma regressão logística para fazer isso. A regressão logística começaria calculando os parâmetros da curva sigmoide que melhor aproxima os dados. Em seguida, ela usaria essas informações para calcular a probabilidade de um paciente ter câncer com base em seus sintomas.
# Importe as bibliotecas necessárias
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
# Carregue os dados
data = pd.read_csv("data.csv")
# Separar os dados em atributos e rótulos
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
# Treinar o modelo de regressão logística
model = LogisticRegression()
model.fit(X, y)
# Fazer previsões
predictions = model.predict_proba(X)
# Calcule a acurácia
accuracy = np.mean(predictions.argmax(axis=1) == y)
print("Acurácia:", accuracy)
Este código usa a biblioteca sklearn
para construir e treinar um modelo de regressão logística. A biblioteca sklearn
fornece uma variedade de algoritmos de aprendizado de máquina, incluindo regressão logística.
O código começa importando as bibliotecas necessárias:
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
Em seguida, o código carrega os dados:
data = pd.read_csv("data.csv")
Os dados são um conjunto de dados de classificação que contém dados sobre pacientes com câncer. O conjunto de dados inclui 1000 pacientes e 2 atributos, que são os sintomas do paciente e se o paciente tem câncer ou não.
O código então separa os dados em atributos e rótulos:
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
Os atributos são os sintomas do paciente. Os rótulos indicam se o paciente tem câncer ou não.
O código então treina o modelo de regressão logística:
model = LogisticRegression()
model.fit(X, y)
O modelo de regressão logística é treinado usando os dados de treinamento, X e y.
O código então faz previsões usando o modelo treinado:
predictions = model.predict_proba(X)
As previsões são feitas usando os dados de teste, X. As previsões são uma matriz de probabilidades, onde cada elemento da matriz representa a probabilidade de um paciente ter câncer.
O código finalmente calcula a acurácia do modelo:
accuracy = np.mean(predictions.argmax(axis=1) == y)
print("Acurácia:", accuracy)
A acurácia é calculada comparando as previsões do modelo com os rótulos reais.
No exemplo acima, o modelo de regressão logística tem uma acurácia de 95%. Isso significa que o modelo é capaz de prever corretamente se um paciente tem câncer ou não com 95% de precisão.
Explicação detalhada
A regressão logística é um tipo de algoritmo de aprendizado supervisionado que usa uma curva sigmoide para aproximar os dados. A curva sigmoide é definida pela equação
f(x) = 1 / (1 + exp(-x))
onde
x
é o valor do atributo
O objetivo da regressão logística é encontrar os parâmetros da curva sigmoide que melhor aproximam os dados.
No exemplo acima, a regressão logística começaria calculando os parâmetros da curva sigmoide que melhor aproximam os dados de sintomas de câncer. Em seguida, ela usaria essas informações para calcular a probabilidade de um paciente ter câncer com base em seus sintomas.
O código acima usa a biblioteca sklearn
para construir e treinar um modelo de regressão logística. A biblioteca sklearn
usa um algoritmo chamado Gradient Descent para encontrar os parâmetros da curva sigmoide.
O código acima também usa o parâmetro solver
. O parâmetro solver
controla o algoritmo de otimização usado para encontrar os parâmetros da curva sigmoide. No exemplo acima, o algoritmo de otimização lbfgs
é usado.
O código acima é apenas um exemplo básico de como construir e treinar um modelo de regressão logística. Existem muitas outras arquiteturas de modelos de regressão logística possíveis. A escolha da arquitetura certa para um problema específico depende de uma variedade de fatores, incluindo o tamanho e a complexidade dos dados, e o nível de desempenho desejado.
Redes neurais: Redes neurais são um tipo de algoritmo de aprendizado de máquina que é inspirado no cérebro humano. As redes neurais são compostas por unidades chamadas neurônios, que estão conectadas entre si. Cada neurônio recebe entradas de outros neurônios e aplica uma função de ativação para produzir uma saída.
As redes neurais são capazes de aprender padrões complexos em dados, o que as torna uma ferramenta poderosa para uma variedade de tarefas, incluindo classificação, regressão e detecção de anomalias.
Arquitetura de uma rede neural
Uma rede neural é composta por três partes principais:
- Entradas: As entradas são os dados que são fornecidos à rede neural.
- Neurônios: Os neurônios são as unidades básicas de uma rede neural. Cada neurônio recebe entradas de outros neurônios e aplica uma função de ativação para produzir uma saída.
- Saídas: As saídas são os resultados produzidos pela rede neural.
Funções de ativação
As funções de ativação são as funções que os neurônios usam para calcular suas saídas. As funções de ativação são usadas para controlar a forma como a rede neural aprende.
Existem muitos tipos diferentes de funções de ativação, cada uma com suas próprias vantagens e desvantagens. Algumas das funções de ativação mais comuns incluem:
- Função linear: A função linear é a função de ativação mais simples. Ela simplesmente calcula a saída como a soma das entradas multiplicadas pelos pesos.
- Função sigmoide: A função sigmoide é uma função não linear que produz uma saída entre 0 e 1. Ela é frequentemente usada para tarefas de classificação.
- Função tangente hiperbólica: A função tangente hiperbólica é uma função não linear que produz uma saída entre -1 e 1. Ela é frequentemente usada para tarefas de regressão.
Treinamento de redes neurais
As redes neurais são treinadas usando um processo chamado aprendizado supervisionado. No aprendizado supervisionado, a rede neural é fornecida com um conjunto de dados de treinamento que inclui entradas e saídas conhecidas. A rede neural usa esse conjunto de dados para aprender a mapear as entradas para as saídas corretas.
O treinamento de redes neurais é um processo iterativo. Na primeira iteração, a rede neural faz previsões aleatórias. Na próxima iteração, a rede neural usa as saídas reais para ajustar seus pesos. Este processo é repetido até que a rede neural aprenda a mapear as entradas para as saídas corretas com um nível de precisão aceitável.
Regressão com redes neurais
As redes neurais também podem ser usadas para regressão. Na regressão, a tarefa é prever um valor contínuo, como o preço de uma casa ou a pontuação de um aluno.
Para usar uma rede neural para regressão, a saída da rede neural é definida como o valor que se deseja prever. Por exemplo, se a tarefa é prever o preço de uma casa, a saída da rede neural seria o preço da casa.
As redes neurais podem ser usadas para regressão com qualquer função de ativação. No entanto, as funções de ativação não lineares, como a função tangente hiperbólica, são geralmente mais eficazes para tarefas de regressão.
Vantagens e desvantagens das redes neurais
As redes neurais têm várias vantagens, incluindo:
- Capacidade de aprender padrões complexos
- Flexibilidade para ser adaptada a diferentes tarefas
- Capacidade de lidar com dados incompletos ou ruidosos
No entanto, as redes neurais também têm algumas desvantagens, incluindo:
- Pode ser difícil entender como as redes neurais tomam decisões
- Pode ser caro treinar redes neurais para grandes conjuntos de dados
- Pode ser difícil escalar redes neurais para grandes problemas
Código avançado para redes neurais
O código a seguir mostra como construir e treinar uma rede neural para regressão usando a biblioteca TensorFlow.
import tensorflow as tf
# Definir a arquitetura da rede neural
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation="relu"),
tf.keras.layers.Dense(64, activation="relu"),
tf.keras.layers.Dense(1)
])
# Definir a função de perda e o otimizador
loss = tf.keras.losses.MeanSquaredError()
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
# Treinar a rede neural
model.compile(loss=loss, optimizer=optimizer, metrics=["mae"])
model.fit(x_train, y_train, epochs=100)
# Fazer previsões
predictions = model.predict(x_test)
Este código define uma rede neural com três camadas ocultas, cada uma com 128, 64 e 1 neurônio, respectivamente. A função de ativação relu
é usada em todas as camadas ocultas. A saída da rede neural é um único neurônio com uma função de ativação linear.
A função de perda MeanSquaredError
é usada para medir o erro entre as previsões da rede neural e os valores reais. O otimizador Adam
é usado para ajustar os pesos da rede neural para minimizar o erro.
A rede neural é treinada usando o conjunto de dados de treinamento x_train
e y_train
. O número de épocas de treinamento é definido como 100.
As previsões são feitas usando o conjunto de dados de teste x_test
.
Explicação detalhada
O código acima pode ser dividido nas seguintes etapas:
- Definir a arquitetura da rede neural A primeira etapa é definir a arquitetura da rede neural. Isso inclui definir o número de camadas, o número de neurônios em cada camada e as funções de ativação usadas. No código acima, a rede neural é definida com três camadas ocultas, cada uma com 128, 64 e 1 neurônio, respectivamente. A função de ativação
relu
é usada em todas as camadas ocultas. - Definir a função de perda e o otimizador A próxima etapa é definir a função de perda e o otimizador que serão usados para treinar a rede neural. A função de perda mede o erro entre as previsões da rede neural e os valores reais. O otimizador é responsável por ajustar os pesos da rede neural para minimizar o erro. No código acima, a função de perda
MeanSquaredError
é usada para medir o erro entre as previsões da rede neural e os valores reais. O otimizadorAdam
é usado para ajustar os pesos da rede neural para minimizar o erro. - Treinar a rede neural A terceira etapa é treinar a rede neural usando o conjunto de dados de treinamento. O treinamento da rede neural é um processo iterativo. Na primeira iteração, a rede neural faz previsões aleatórias. Na próxima iteração, a rede neural usa os valores reais para ajustar seus pesos. Este processo é repetido até que a rede neural aprenda a mapear as entradas para as saídas corretas com um nível de precisão aceitável. No código acima, a rede neural é treinada usando o conjunto de dados de treinamento
x_train
ey_train
. O número de épocas de treinamento é definido como 100. - Fazer previsões A quarta etapa é fazer previsões usando o conjunto de dados de teste. As previsões são feitas usando a rede neural treinada. No código acima, as previsões são feitas usando o conjunto de dados de teste
x_test
.
Aplicações
As redes neurais podem ser usadas para uma variedade de tarefas de regressão, incluindo:
- Previsão de preços
- Previsão de vendas
- Previsão de demanda
- Previsão de desempenho
As redes neurais são especialmente bem-sucedidas em tarefas de regressão onde os dados são complexos ou não lineares.
Agrupamento
O agrupamento é um tipo de aprendizado não supervisionado que envolve a identificação de grupos de dados semelhantes. Por exemplo, um algoritmo de agrupamento pode ser usado para identificar clientes com interesses semelhantes ou produtos com características semelhantes.
Os algoritmos de agrupamento mais comuns incluem:
K-means: O k-means é um tipo de algoritmo de agrupamento que divide os dados em k grupos.
Exemplo: Imagine que você quer agrupar clientes com base em seus interesses de compra. Você pode usar o k-means para fazer isso. Primeiro, você precisa especificar o número de grupos que deseja (k). Em seguida, o k-means selecionará aleatoriamente k pontos de dados como centros de grupo. Em seguida, iterativamente atribuirá cada ponto de dados ao grupo mais próximo do centro do grupo. Por fim, recalculará os centros do grupo com base nos pontos de dados atribuídos a cada grupo. Esse processo continuará até que os centros do grupo não se movam mais.
O código a seguir mostra como implementar o k-means usando a biblioteca scikit-learn.
import numpy as np
from sklearn.cluster import KMeans
# Carregar os dados
data = np.loadtxt("data.csv", delimiter=",")
# Definir o número de grupos
k = 3
# Inicializar o algoritmo k-means
model = KMeans(n_clusters=k)
# Treinar o algoritmo k-means
model.fit(data)
# Obter os rótulos dos grupos
labels = model.labels_
# Visualizar os grupos
plt.scatter(data[:, 0], data[:, 1], c=labels)
plt.show()
Este código carrega os dados do arquivo data.csv
. Os dados são um conjunto de dados de clientes com dois atributos: idade e renda.
O número de grupos é definido como 3. Isso significa que o algoritmo k-means dividirá os dados em três grupos.
O algoritmo k-means é inicializado com três pontos de dados aleatórios como centros de grupo.
O algoritmo k-means é treinado iterativamente. Em cada iteração, o algoritmo atribui cada ponto de dados ao grupo mais próximo do centro do grupo. O algoritmo também recalcula os centros do grupo com base nos pontos de dados atribuídos a cada grupo.
O processo de treinamento continua até que os centros do grupo não se movam mais.
Os rótulos dos grupos são obtidos usando o método labels_
do modelo k-means.
Os grupos são visualizados usando um gráfico de dispersão. Cada ponto de dados é colorido de acordo com seu rótulo de grupo.
Explicação detalhada
O código acima pode ser dividido nas seguintes etapas:
- Carregar os dados A primeira etapa é carregar os dados que serão usados pelo algoritmo k-means. No código acima, os dados são carregados do arquivo
data.csv
. Os dados são um conjunto de dados de clientes com dois atributos: idade e renda. - Definir o número de grupos A próxima etapa é definir o número de grupos que o algoritmo k-means criará. No código acima, o número de grupos é definido como 3.
- Inicializar o algoritmo k-means A terceira etapa é inicializar o algoritmo k-means. No código acima, o algoritmo k-means é inicializado com três pontos de dados aleatórios como centros de grupo.
- Treinar o algoritmo k-means A quarta etapa é treinar o algoritmo k-means. O treinamento do algoritmo k-means é um processo iterativo. Em cada iteração, o algoritmo k-means atribui cada ponto de dados ao grupo mais próximo do centro do grupo. O algoritmo também recalcula os centros do grupo com base nos pontos de dados atribuídos a cada grupo.
O processo de treinamento continua até que os centros do grupo não se movam mais.
- Obter os rótulos dos grupos A quinta etapa é obter os rótulos dos grupos. Os rótulos dos grupos podem ser obtidos usando o método
labels_
do modelo k-means. - Visualizar os grupos A sexta etapa é visualizar os grupos. Os grupos podem ser visualizados usando um gráfico de dispersão. Cada ponto de dados é colorido de acordo com seu rótulo de grupo.
Aplicações
O k-means pode ser usado para uma variedade de tarefas de agrupamento, incluindo:
- Segmentação de clientes
- Detecção de anomalias
- Classificação
O k-means é um algoritmo simples e eficiente que pode ser usado para agrupar dados em um número de grupos pré-definido.
Clustering hierárquico: O clustering hierárquico é um tipo de algoritmo de agrupamento que constrói uma hierarquia de grupos.
Exemplo: Imagine que você quer agrupar documentos com base em seu conteúdo. Você pode usar o agrupamento hierárquico para fazer isso. O agrupamento hierárquico começaria agrupando os documentos mais semelhantes entre si. Em seguida, continuaria agrupando os grupos resultantes, até que todos os documentos estejam em um único grupo.
O código a seguir mostra como implementar o clustering hierárquico usando a biblioteca scikit-learn.
import numpy as np
from sklearn.cluster import AgglomerativeClustering
# Carregar os dados
data = np.loadtxt("data.csv", delimiter=",")
# Definir o método de linkage
linkage = "ward"
# Inicializar o algoritmo de clustering hierárquico
model = AgglomerativeClustering(n_clusters=None, linkage=linkage)
# Treinar o algoritmo de clustering hierárquico
model.fit(data)
# Obter os rótulos dos grupos
labels = model.labels_
# Visualizar a hierarquia de grupos
plt.figure(figsize=(20, 10))
dendrogram = dendrogram(model.children_, labels=labels)
plt.show()
Este código carrega os dados do arquivo data.csv
. Os dados são um conjunto de dados de documentos com dois atributos: conteúdo e tamanho.
O método de linkage é definido como “ward”. O método de linkage “ward” usa a distância euclidiana entre os centros de grupo para calcular a distância entre dois grupos.
O algoritmo de clustering hierárquico é inicializado com um único grupo, que contém todos os dados.
O algoritmo de clustering hierárquico é treinado iterativamente. Em cada iteração, o algoritmo identifica os dois grupos mais próximos e os agrupa.
O processo de treinamento continua até que haja apenas um grupo.
Os rótulos dos grupos são obtidos usando o método labels_
do modelo de clustering hierárquico.
A hierarquia de grupos é visualizada usando um dendrograma.
Explicação detalhada
O código acima pode ser dividido nas seguintes etapas:
- Carregar os dados A primeira etapa é carregar os dados que serão usados pelo algoritmo de clustering hierárquico. No código acima, os dados são carregados do arquivo
data.csv
. Os dados são um conjunto de dados de documentos com dois atributos: conteúdo e tamanho. - Definir o método de linkage A próxima etapa é definir o método de linkage que será usado pelo algoritmo de clustering hierárquico. No código acima, o método de linkage é definido como “ward”. O método de linkage “ward” usa a distância euclidiana entre os centros de grupo para calcular a distância entre dois grupos.
- Inicializar o algoritmo de clustering hierárquico A terceira etapa é inicializar o algoritmo de clustering hierárquico. No código acima, o algoritmo de clustering hierárquico é inicializado com um único grupo, que contém todos os dados.
- Treinar o algoritmo de clustering hierárquico A quarta etapa é treinar o algoritmo de clustering hierárquico. O treinamento do algoritmo de clustering hierárquico é um processo iterativo. Em cada iteração, o algoritmo identifica os dois grupos mais próximos e os agrupa. O processo de treinamento continua até que haja apenas um grupo.
- Obter os rótulos dos grupos A quinta etapa é obter os rótulos dos grupos. Os rótulos dos grupos podem ser obtidos usando o método
labels_
do modelo de clustering hierárquico. - Visualizar a hierarquia de grupos A sexta etapa é visualizar a hierarquia de grupos. A hierarquia de grupos pode ser visualizada usando um dendrograma.
Aplicações
O clustering hierárquico pode ser usado para uma variedade de tarefas de agrupamento, incluindo:
- Segmentação de clientes
- Detecção de anomalias
- Classificação
O clustering hierárquico é um algoritmo poderoso que pode ser usado para agrupar dados em uma hierarquia de grupos.
Vantagens e desvantagens do clustering hierárquico
As vantagens do clustering hierárquico incluem:
- É um algoritmo flexível que pode ser usado para agrupar dados com diferentes tipos de atributos.
- Pode ser usado para identificar grupos com diferentes níveis de granularidade.
As desvantagens do clustering hierárquico incluem:
- Pode ser computacionalmente caro para grandes conjuntos de dados.
- Pode ser difícil interpretar os resultados do clustering hierárquico.
Spectral clustering: O clustering espectral é um tipo de algoritmo de agrupamento que usa a análise de espectro para identificar grupos.
Exemplo: Imagine que você quer agrupar imagens com base em seu conteúdo visual. Você pode usar o clustering espectral para fazer isso. O clustering espectral começaria analisando a similaridade entre as imagens. Em seguida, usaria essa informação para construir um gráfico que representa as relações entre as imagens. Por fim, usaria a análise de espectro para identificar grupos de imagens que estão fortemente conectadas no gráfico.
O código a seguir mostra como implementar o clustering espectral usando a biblioteca scikit-learn.
import numpy as np
from sklearn.cluster import SpectralClustering
# Carregar os dados
data = np.loadtxt("data.csv", delimiter=",")
# Definir o número de grupos
n_clusters = 3
# Inicializar o algoritmo de clustering espectral
model = SpectralClustering(n_clusters=n_clusters)
# Treinar o algoritmo de clustering espectral
model.fit(data)
# Obter os rótulos dos grupos
labels = model.labels_
# Visualizar os grupos
plt.scatter(data[:, 0], data[:, 1], c=labels)
plt.show()
Este código carrega os dados do arquivo data.csv
. Os dados são um conjunto de dados de imagens com dois atributos: cor e textura.
O número de grupos é definido como 3. Isso significa que o algoritmo de clustering espectral dividirá os dados em três grupos.
O algoritmo de clustering espectral é inicializado com uma matriz de adjacência que representa as relações entre as imagens. A matriz de adjacência é construída usando uma medida de similaridade entre as imagens.
O algoritmo de clustering espectral é treinado usando a análise de espectro. A análise de espectro é usada para encontrar as autovetores e autovalores da matriz de adjacência.
Os autovetores são usados para representar as imagens no espaço de características. Os autovalores são usados para identificar grupos de imagens que estão fortemente conectadas no espaço de características.
Os rótulos dos grupos são obtidos usando o método labels_
do modelo de clustering espectral.
Os grupos são visualizados usando um gráfico de dispersão. Cada ponto de dados é colorido de acordo com seu rótulo de grupo.
Explicação detalhada
O código acima pode ser dividido nas seguintes etapas:
- Carregar os dados A primeira etapa é carregar os dados que serão usados pelo algoritmo de clustering espectral. No código acima, os dados são carregados do arquivo
data.csv
. Os dados são um conjunto de dados de imagens com dois atributos: cor e textura. - Definir o número de grupos A próxima etapa é definir o número de grupos que o algoritmo de clustering espectral criará. No código acima, o número de grupos é definido como 3.
- Inicializar o algoritmo de clustering espectral A terceira etapa é inicializar o algoritmo de clustering espectral. No código acima, o algoritmo de clustering espectral é inicializado com uma matriz de adjacência que representa as relações entre as imagens. A matriz de adjacência é construída usando uma medida de similaridade entre as imagens.
- Treinar o algoritmo de clustering espectral A quarta etapa é treinar o algoritmo de clustering espectral. O treinamento do algoritmo de clustering espectral é um processo iterativo. Em cada iteração, o algoritmo usa a análise de espectro para encontrar as autovetores e autovalores da matriz de adjacência.
- Obter os rótulos dos grupos A quinta etapa é obter os rótulos dos grupos. Os rótulos dos grupos podem ser obtidos usando o método
labels_
do modelo de clustering espectral. - Visualizar os grupos A sexta etapa é visualizar os grupos. Os grupos podem ser visualizados usando um gráfico de dispersão. Cada ponto de dados é colorido de acordo com seu rótulo de grupo.
Aplicações
O clustering espectral pode ser usado para uma variedade de tarefas de agrupamento, incluindo:
- Segmentação de imagens
- Detecção de anomalias
- Classificação
O clustering espectral é um algoritmo poderoso que pode ser usado para agrupar dados com diferentes tipos de atributos.
Outros algoritmos
Além dos algoritmos mencionados acima, existem muitos outros algoritmos usados na ciência de dados. Alguns dos algoritmos mais comuns incluem:
- H4 Análise de componentes principais (PCA): A PCA é um algoritmo de redução de dimensionalidade que pode ser usado para reduzir o número de variáveis em um conjunto de dados.
- H4 Redução de dimensionalidade: A redução de dimensionalidade é um conjunto de técnicas que podem ser usadas para reduzir o número de variáveis em um conjunto de dados. A PCA é apenas uma técnica de redução de dimensionalidade. Existem muitas outras técnicas disponíveis, cada uma com suas próprias vantagens e desvantagens.
- H4 Mineração de padrões: A mineração de padrões é um conjunto de técnicas que podem ser usadas para identificar padrões nos dados. Os padrões podem ser encontrados em qualquer tipo de dados, incluindo texto, imagens, áudio e vídeo.
- H4 Aprendizado de reforço: O aprendizado de reforço é um tipo de aprendizado que envolve a recompensa ou punição de um agente por suas ações. O agente aprende por tentativa e erro para maximizar sua recompensa. O aprendizado de reforço pode ser usado para resolver problemas difíceis de modelar matematicamente, como controlar um robô ou jogar um jogo.
Conclusão
A ciência de dados é um campo em rápida expansão que oferece oportunidades de carreira promissoras. Os cientistas de dados são responsáveis por coletar, analisar e interpretar dados para obter insights valiosos.
Para se destacar na carreira de ciência de dados, é importante ter um forte entendimento dos principais algoritmos de ciência de dados. Esses algoritmos podem ser usados para uma variedade de tarefas, incluindo classificação, regressão, clustering e agrupamento.
Neste artigo, você aprendeu sobre os principais algoritmos de ciência de dados e como eles funcionam. Você também viu como esses algoritmos podem ser aplicados a problemas do mundo real.
Aqui estão algumas dicas para aprender mais sobre os algoritmos de ciência de dados:
- Comece com os fundamentos. Antes de aprender sobre algoritmos específicos, é importante entender os conceitos básicos de ciência de dados, como aprendizado supervisionado e não supervisionado.
- Encontre recursos de aprendizagem. Existem muitos recursos disponíveis para ajudá-lo a aprender sobre algoritmos de ciência de dados. Você pode encontrar livros, cursos online e tutoriais.
- Pratique, pratique, pratique. A melhor maneira de aprender sobre algoritmos de ciência de dados é praticar. Encontre conjuntos de dados para trabalhar e experimente diferentes algoritmos.
Com um forte entendimento dos principais algoritmos de ciência de dados, você estará bem posicionado para se destacar na carreira. Você estará equipado para resolver problemas reais e obter insights valiosos que podem ajudar as organizações a alcançar seus objetivos.
Aqui estão alguns exemplos específicos de como os algoritmos de ciência de dados podem ser usados para resolver problemas reais:
- Um algoritmo de classificação pode ser usado para identificar clientes com maior probabilidade de desistir de uma assinatura.
- Um algoritmo de regressão pode ser usado para prever o preço de uma ação.
- Um algoritmo de clustering pode ser usado para dividir clientes em grupos com necessidades ou interesses semelhantes.
- Um algoritmo de agrupamento pode ser usado para identificar anomalias nos dados.
As possibilidades são infinitas. À medida que os dados continuam a crescer em volume e complexidade, a demanda por cientistas de dados qualificados continuará a aumentar. Ao aprender sobre os principais algoritmos de ciência de dados, você estará se preparando para uma carreira gratificante e bem remunerada.
Perguntas frequentes (FAQs)
1. O que é ciência de dados?
A ciência de dados é um campo interdisciplinar que usa métodos científicos, processos, algoritmos e sistemas para extrair conhecimento e insights de dados.
2. Quais são os diferentes tipos de algoritmos de aprendizado de máquina?
Existem dois tipos principais de algoritmos de aprendizado de máquina: supervisionado e não supervisionado. O aprendizado supervisionado envolve o treinamento de um modelo em dados rotulados, enquanto o aprendizado não supervisionado envolve o treinamento de um modelo em dados não rotulados.
3. Quais são algumas das aplicações da ciência de dados?
A ciência de dados tem uma ampla gama de aplicações, incluindo:
- Classificação: Classificar itens em categorias, como se um email é spam ou não.
- Recomendação: Recomendar produtos ou serviços a clientes.
- Detecção de anomalias: Detectar eventos incomuns nos dados, como fraude ou falhas de equipamento.
- Processamento de linguagem natural: Processar e entender a linguagem humana, como tradução automática ou geração de texto.
4. Como posso começar a aprender ciência de dados?
Há muitos recursos disponíveis para aprender ciência de dados, incluindo cursos online, livros e tutoriais. Um bom lugar para começar é aprender sobre os fundamentos da programação, matemática e estatística. Depois, você pode começar a aprender sobre algoritmos de aprendizado de máquina e outras técnicas de ciência de dados.
5. Quais são algumas das habilidades que preciso para ser um cientista de dados?
Para ser um cientista de dados de sucesso, você precisará de uma combinação de habilidades técnicas e não técnicas. As habilidades técnicas incluem programação, matemática, estatística e conhecimentos de algoritmos de aprendizado de máquina. As habilidades não técnicas incluem comunicação, resolução de problemas e pensamento crítico.
Espero que este artigo tenha lhe dado uma visão geral dos principais algoritmos da ciência de dados. Se você tiver alguma dúvida, por favor, não hesite em perguntar.
Visite:
Blog: https://cienciadedadosbrasil.com.br/
Podcast: https://podcasters.spotify.com/pod/show/ciencia-de-dados-brasil
Spotify: https://open.spotify.com/show/3XbIBG6Ch5ZKYWWlLmQRFw?si=46153590bc304068
Newsletter: https://cinciadedadosbrasil.substack.com/
LinkedIn: https://www.linkedin.com/company/ciência-de-dados-brasil/?viewAsMember=true
Instagram: https://www.instagram.com/cienciadedadosbrasil_cdbr/