Análise de dados e Machine Learning Simplificados com Python
1. Tomando decisões baseadas em evidências com Python
A área da informação, surgida a partir da disseminação exponencial de dados pela grande rede de computadores, mudou totalmente o paradigma da análise de dados. Antes, coleta e análise de grandes massas de dados demandavam um esforço hercúleo. A obtenção de informações de grandes massas de dados acontecia a custa de muita programação e processamento extenuantes de diversas entidades em paralelo, que exigiam grandes quantidades de recursos em termos de maquinário, pessoas e tempo. E muitas vezes chegavam a resultados que não casavam com os momentos críticos de decisão, servindo somente para atenuar os impactos e entender os processos acontecidos.
Recentemente, com a pandemia global de Covid, tivemos um exemplo de como a análise de dados na era da informação vive um novo paradigma. Enquanto em pandemias anteriores, como a gripe espanhola, a doença se espalhava e produzia vítimas em velocidades superiores até à da identificação do antígeno assassino, dizimando populações antes da identificação de sua causa, vimos na pandemia da Covid um acompanhamento em tempo real tanto da evolução da doença, quanto das várias iniciativas de tratamento e de imunização da população, Com isso, foi possível salvaguardar, apesar da possibilidade infinitamente maior de contágio atual, um percentual considerável da população mundial, que poderia ter sido dizimada sem as autoridades sequer tivessem conhecimento da causa da morte em outra era.
O Python é um grande catalisador dessa mudança: a aplicação de seus modelos e bibliotecas na análise de dados representou uma revolução, assim como a própria linguagem. Tim Peters, o pai do Python, escreveu em 1999 o poema Zen de Python que apresenta um conjunto de princípios que guiam a linguagem e explicam muito desse sucesso. É interessante ressaltar os seguintes versos:
“Simples é melhor que complexo.
Complexo é melhor que complicado.”
Ou seja, em sua essência o Python abole códigos extensos e com rebuscamentos que nada agregam ao resultado final. Com isso, o processamento tende a ser sempre otimizado.
Essa vocação à simplicidade é aderente à era do Big Data, pois lidar com grandes volumes de dados – formados por milhões ou bilhões de registros – exige soluções simples e descomplicadas, evitando onerar o processamento e reduzir o tempo de obtenção de resultados.
No entanto, simples não significa que o Python abandone a complexidade. Ao otimizar o processamento de grandes massas de dados, com milhões ou bilhões de registros computados simultaneamente, abre-se margem para incluir um número maior de variáveis e de relações entre elas, permitindo análises cada vez mais complexas, precisas e rápidas.
E isso gerou a criação de diversas bibliotecas, que foram desenvolvidas para, a partir dos dados, gerar informação e possibilitar que a decisão seja tomada em tempo real, baseada em evidências e não em suposições.
2. Usando Bibliotecas Python na Análise de Dados
A linguagem Python foi criada por Guido van Rossum, mas a sua aplicação para análise de dados ganhou maior destaque graças aos esforços de vários pioneiros na área de computação científica, que utilizaram a linguagem como base para criar módulos avançados de coleta, processamento, análise, modelagem, interpretação e apresentação de dados.
Dentre eles, inicialmente é importante citar Travis Oliphant, que criou a biblioteca NumPy para corrigir uma deficiência original do Python para trabalhar com a computação numérica. Ele resolveu a questão através do processamento de arranjos multidimensionais e matrizes, o que facilitou sobremaneira a manipulação de grandes massas de dados.
Wes McKinney, ao criar a biblioteca Pandas contribui para a popularização do uso do Python na análise de dados, automatizando em poucas linhas de código o que antes era um trabalho hercúleo e muito oneroso em termos de tempo e processamento para manipulação, limpeza e análise de grandes conjuntos de dados. Outra contribuição importante do autor foi o livro Python for Data Analysis, que disseminou o conhecimento necessário para que a linguagem se tornasse onipresente na análise de dados.
Avançando na análise de dados, nas etapas de exploração, visualização, análise, interpretação e comunicação de resultados, várias bibliotecas permitiram a criação de tabelas e gráficos que possibilitaram informar de uma maneira muito mais eficiente e prática os resultados alcançados. Dentre, elas, a biblioteca Matplotlib permite criar estatísticas e visualizações de dados animadas e interativas. E a biblioteca seaborn complementou a anterior com visualizações de mais alto nível.
Mais recentemente os estudos de IA e aprendizado de máquina têm recebido grandes avanços. Por exemplo, a biblioteca scikit-learn tem se destacado para análises preditivas de dados. Baseada em NumPy, SciPy e Matplotlib ela tem sido amplamente empregada nos estudos de Aprendizado de Máquina (Machine Learning).
Para ilustrar como é simples todo o percurso da análise até a visualização de dados utilizando bibliotecas Python, segue um exemplo de como seria o percurso desde a coleta até a demonstração de resultados.
Inicialmente, é necessário importar as bibliotecas que serão utilizadas:
import pandas as pd # Biblioteca para manipulação de dados em DataFrames
import numpy as np # Biblioteca para operações numéricas
import matplotlib.pyplot as plt # Biblioteca para criação de gráficos
import seaborn as sns # Biblioteca para visualizações estatísticas aprimoradas
O Python permite trabalhar com uma diversidade de formatos de dados. O mais comum é o arquivo .csv, que separa os valores das colunas por vírgula. A biblioteca Pandas é utilizada para coletar esses dados, transformando o arquivo .csv em uma estrutura chamada dataframe, que organiza os dados em colunas, permitindo sua manipulação e análise de maneira tabular.
df = pd.read_csv('seu_arquivo.csv')
Para a realização da descrição dos dados, o pandas possui diversos métodos que trazem de maneira rápida as primeiras linhas do dataframe (head); os tipos de dados, números de entradas e possíveis valores nulos (info); e estatísticas resumidas dos dados como média, desvio padrão, valores mínimo e máximo (describe). Com isso, é possível conhecer a estrutura e a composição dos dados coletados.
# Exibe as primeiras 5 linhas do DataFrame
print(df.head())
# Mostra informações gerais sobre as colunas, tipos de dados e valores não nulos
print(df.info())
# Apresenta estatísticas descritivas para colunas numéricas
print(df.describe())
Conhecidos os dados, podemos empregar alguns métodos do Pandas para tratar valores nulos, ausentes ou duplicados, de modo a ter um dataframe limpo para as análises posteriores.
# Verifica a quantidade de valores ausentes em cada coluna
print(df.isnull().sum())
# Se houver linhas duplicadas, remova-as
df = df.drop_duplicates()
# Preencher valores ausentes com a média da coluna
df['coluna_exemplo'] = df['coluna_exemplo'].fillna(df['coluna_exemplo'].mean())
Com os dados limpos, podem ser realizadas operações como contagem de valores, agrupamentos e agregações para explorar os dados e encontrar possíveis relações entre variáveis.
# Contagem de valores únicos em uma coluna (por exemplo, 'categoria')
print(df['categoria'].value_counts())
# Agrupamento dos dados por uma coluna e cálculo da média de outra coluna
media_por_grupo = df.groupby('categoria')['valor'].mean() print(media_por_grupo)
Após analisar os dados, podem ser criadas diversas formas de visualização como:
- Histograma: demonstra a distribuição dos valores, permitindo identificar outliers e a forma de distribuição (normal, enviesada etc.).
plt.figure(figsize=(8, 6))
plt.hist(df['valor'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribuição da Coluna "valor"')
plt.xlabel('Valor')
plt.ylabel('Frequência')
plt.show()
- Gráfico de barras: mostra frequências de categorias.
plt.figure(figsize=(10, 6))
sns.countplot(x='categoria', data=df, palette='viridis')
plt.title('Contagem por Categoria')
plt.xlabel('Categoria')
plt.ylabel('Contagem')
plt.xticks(rotation=45)
plt.show()
Todas as análises e gráficos criados podem ser empregados na criação de relatórios, dashboards e outros formatos que irão municiar o processo decisório baseado em dados. Com uma grande vantagem: além da possibilidade de reaproveitamento e melhoria contínua facilitada, pois o processo de codificação é extremamente simplificado, os responsáveis por contar a história dos dados poderão empregar a maior parte dos seus esforços para entender as relações entre variáveis e comunicá-las, em vez de suar e se exaurir no processo para extrair, limpar e explorar os dados.
Essa celeridade e eficiência do processo de análise e comunicação de dados pode ser novamente exemplificada com o que aconteceu na citada pandemia de Covid: com a possibilidade de um processo otimizado de análise de grandes conjuntos de dados, englobando informações de milhões ou até bilhões de pessoas praticamente em tempo real, as decisões puderam ser mais contingentes e otimizadas, pois tanto eram baseadas em fatos que acabaram de acontecer, quanto os resultados de cada intervenção podiam ser avaliados de maneira totalmente contingente.
3. Machine Learning e Python
Os princípios trazidos no início do texto, em especial no que tange à busca constante dos criadores do Python pela simplicidade sem abrir mão da complexidade, foram potencializados e mais evidenciados na criação de bibliotecas para o aprendizado de máquina (Machine Learning).
Como citada, uma das mais famosas é a Scikit-learn. No artigo descritivo da biblioteca publicado no Journal of Machine Learning Research, 12 (2011) 2825-2830, os autores descrevem-na como um “módulo Python que integra uma ampla gama de algoritmos de aprendizado de máquina de última geração para problemas supervisionados e não supervisionados de média escala. Este pacote se concentra em levar o aprendizado de máquina para não especialistas usando uma linguagem de alto nível de propósito geral. A ênfase é colocada na facilidade de uso, desempenho, documentação e consistência de API.”.
A título de exemplo, extraímos abaixo um trecho de código da documentação do Scikit-learn que demonstra a criação de um modelo de classificação com Random Forest:
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=0)
X = [[ 1, 2, 3], # 2 samples, 3 features
[11, 12, 13]]
y = [0, 1] # classes of each sample
clf.fit(X, y)
RandomForestClassifier(random_state=0)
Essas bibliotecas buscam justamente aproveitar ao máximo a vocação do Python de linguagem de propósito geral calcada na simplicidade, para implementar algoritmos de aprendizado de máquina avançados, mas que são disponibilizados através de interfaces totalmente amigáveis a não especialistas em programação.
Essa revolução permitiu que modelos de aprendizado de máquina supervisionados e não supervisionados pudessem alcançar um avanço exponencial em suas aplicações. Ademais, passaram a estar disponíveis aos especialistas de diferentes áreas de conhecimento para aplicação em seus objetos de pesquisa, sem exigir que estes tenham conhecimento avançado em programação e codificação.
Inclusive é crescente o movimento pela oferta por comunidade de desenvolvedores de conjuntos de dados (datasets) e modelos pré-treinados para uma infinidade de problemas e aplicações, que facilitam sobremaneira o trabalho de pesquisadores e estudiosos do tema. Por exemplo, a comunidade Hugging Face oferece acesso a modelos, datasets e aplicações criados pelos membros da comunidade.
4. Conclusão
Podemos ver que o Python atualmente perpassa todas as etapas de análise de dados e tem sido amplamente utilizado na era do Big Data. Isso acontece pois ele permite que mesmo face a uma massa com crescimento exponencial de dados, esses dados possam ser tratados, analisados e empregados para o processo decisório, seja através de medidas estatísticas clássicas, seja através dos mais recentes e avançados modelos preditivos.
Mas, podemos ressaltar que ele na verdade mais do que simplificar, otimizar e permitir esses processos, deu acesso ao mundo da informação a uma gama crescente de não programadores. Esses puderam se beneficiar e empregar modelos complexos de uma maneira totalmente amigável e simplificada, focando no que realmente importa: desvendar relações de causa e efeito sólidas e tomar decisões baseadas em evidências de maneira segura e em tempo real.
E um fator que se soma a isso é a força da comunidade: o Python por ser um software livre em sua essência, potencializa o espírito comunitário de colaboração e de criação colaborativa, criando um ambiente totalmente profícuo à inovação e ao aprendizado. Então, para aprender Python e sua aplicação na análise de dados e no aprendizado de máquina é necessário somente vontade, pois as fontes de consulta são inúmeras e estão a um clique de distância.