Introdução à Biblioteca Pandas para Manipulação de Dados
Tarefas Futuras
Realizar atividade prática com Pandas e preparar-se para a próxima aula que abordará Regressão Logística e categorização de textos.
Atividade Prática com Pandas
Carregar o arquivo News_sentiment_analysis.csv
usando Pandas. Criar um novo DataFrame contendo apenas as colunas 'title', 'description' e 'sentiment'. Exibir as 15 primeiras e as 15 últimas linhas deste novo DataFrame. (A ser feita durante o intervalo).
Preparação para Próxima Aula
A próxima aula cobrirá Regressão Logística (conteúdo pendente da Aula 5) e como aplicá-la para análise de sentimento e categorização de texto no dataset News_sentiment_analysis.csv
. Revisar os conceitos de Pandas apresentados.
Próximos Tópicos a Serem Abordados (Aulas Futuras)
Algoritmo de Descida do Gradiente (Gradient Descent) para otimização de modelos. Implementação de Regressão Logística para classificação. Categorização de texto.
Datas Futuras Mencionadas
15/08/2025 09:45
Retorno do intervalo e verificação da atividade prática com Pandas.
Próxima Aula
Continuação com Regressão Logística e Categorização de Texto.
Resumo da Aula
Revisão da Aula Anterior (Aula 06)
- Recapitulação dos tópicos abordados na aula anterior, que foi interrompida.
- Menção ao uso de
pytest
,matplotlib
e operações com arrays NumPy (multiplicação, concatenação,reshape
,ravel
). - Confirmação de que a biblioteca Pandas não foi introduzida na aula passada.
Introdução ao Pandas
- O que é: Apresentação do Pandas como uma poderosa biblioteca Python para análise e manipulação de dados.
- Vantagens: Facilidade em carregar, manipular e transformar dados, incluindo operações como adicionar/remover colunas, transpor dados. Suporte a múltiplos tipos de dados em uma mesma estrutura, diferentemente do NumPy que geralmente trabalha com um tipo único por array.
- Relevância em PLN: Explicação sobre a importância do Pandas para lidar com grandes volumes de texto, dados estruturados e não estruturados, comuns em Processamento de Linguagem Natural (PLN), como na alimentação de chatbots ou análise de sentimentos.
- Instalação e Importação:
- Pandas é uma biblioteca externa e pode precisar ser instalada:
pip install pandas
. - Verificação se já está presente em ambientes como Anaconda ou Google Colab.
- Convenção de importação:
import pandas as pd
.
- Pandas é uma biblioteca externa e pode precisar ser instalada:
Estruturas de Dados do Pandas
- Series:
- Estrutura unidimensional, similar a um array NumPy ou uma coluna de planilha.
- Contém dados de um único tipo.
- Possui um índice (label) para cada elemento (padrão numérico 0, 1, 2..., mas pode ser customizado).
- Possui um nome associado à série (representando o nome da coluna).
- DataFrame:
- Estrutura bidimensional, tabular, semelhante a uma planilha ou matriz.
- Composto por múltiplas Series (colunas).
- Pode conter colunas com diferentes tipos de dados.
- Possui índices para linhas e nomes para colunas, ambos customizáveis.
- Indexação Customizada: Tanto Series quanto DataFrames permitem a definição de índices personalizados (ex: rótulos como 'A', 'B', 'C' em vez de números).
Criação e Manipulação de DataFrames
- Criação a partir de Dicionário: Demonstração da criação de um DataFrame usando um dicionário Python, onde as chaves se tornam nomes de colunas e os valores (listas) se tornam os dados das colunas.
df = pd.DataFrame({'coluna1': [dados], 'coluna2': [dados]})
- Criação com
from_dict
e Orientação:- Uso de
pd.DataFrame.from_dict(dicionario, orient='index')
para fazer com que as chaves do dicionário se tornem índices das linhas. - Parâmetro
columns
para definir nomes das colunas explicitamente.
- Uso de
- Carregamento de Dados CSV:
- Introdução da função
pd.read_csv()
para carregar dados de arquivos.csv
. - Parâmetros importantes: caminho do arquivo,
encoding
(ex:'utf-8'
),index_col
(para definir uma coluna do CSV como índice do DataFrame).
- Introdução da função
- Inspeção de DataFrames:
.head(n)
: Visualiza as primeirasn
linhas (padrão 5)..tail(n)
: Visualiza as últimasn
linhas (padrão 5)..info()
: Mostra informações sobre as colunas (nomes, contagem de não nulos, tipos de dados) e uso de memória..shape
: Atributo que retorna uma tupla(linhas, colunas)
..describe()
: Gera estatísticas descritivas (varia conforme o tipo de dado das colunas).
- Modificação de DataFrames:
.append()
(mencionado como problemático) epd.concat()
: Para juntar DataFrames..drop_duplicates()
: Remove linhas duplicadas. O parâmetroinplace=True
modifica o DataFrame original.- Adição de Colunas:
df['nova_coluna'] = [lista_ou_series]
(requer compatibilidade de tamanho). - Deleção de Colunas:
del df['nome_coluna']
oudf.pop('nome_coluna')
.
- Seleção e Fatiamento (Slicing):
- Seleção de colunas:
df['nome_coluna']
(retorna uma Series) oudf[['col1', 'col2']]
(retorna um DataFrame). - Seleção de linhas por índice numérico:
df[inicio:fim]
. - Seleção de linhas e colunas por rótulo (índice customizado):
df.loc['rotulo_linha', 'rotulo_coluna']
. - Seleção de linhas e colunas por posição numérica:
df.iloc[posicao_linha, posicao_coluna]
. - Seleção de célula específica:
df['nome_coluna'][indice_linha]
.
- Seleção de colunas:
Regressão Linear (Introdução)
- Apresentação do conceito de Regressão Linear como uma técnica para prever valores contínuos.
- Analogia com a equação da reta (
y = ax + b
ouy = Wx + b
na notação da aula). - Variáveis:
- Independente (X): A entrada, o valor conhecido (ex: nota da primeira prova, metragem da casa).
- Dependente (Y): A saída, o valor a ser previsto (ex: média final, preço da casa).
- Parâmetros da Reta:
- Inclinação (a ou W - Weight/Peso): Controla o ângulo da reta.
- Intercepto (b ou B - Bias/Viés): Controla onde a reta cruza o eixo Y (deslocamento).
- Objetivo: Encontrar a reta (valores de W e B) que melhor se ajusta aos dados existentes, minimizando o erro (custo).
- Função de Custo: Mede a diferença entre o valor previsto pela reta (
y_hat
ouy_head
) e o valor real (y
). O objetivo do treinamento é minimizar essa função.- Cálculo do erro para um ponto:
(y_hat - y)
. - Custo quadrático médio: Soma dos erros ao quadrado, dividida pelo número de amostras (ou 2*M), para penalizar erros maiores e manter o custo positivo.
- Cálculo do erro para um ponto:
Aprendizado de Máquina Supervisionado
- Contextualização da Regressão Linear dentro do aprendizado supervisionado.
- A ideia é aprender a partir de dados onde já conhecemos a entrada (X) e a saída correta (Y).
- O modelo (a reta, no caso da regressão linear) ajusta seus parâmetros (W e B) para minimizar a diferença entre suas previsões e as saídas corretas conhecidas.
Próximos Passos
- Aplicação prática de Regressão Linear e Logística.
- Introdução ao algoritmo de Descida do Gradiente para otimizar os parâmetros (W e B).
- Aplicação em análise de sentimento e categorização de texto.
Atividades Realizadas em Aula
- Importação da biblioteca Pandas:
import pandas as pd
. - Criação de um ambiente de trabalho no Jupyter Notebook: criação de pasta
Aula 07
e notebookPandas Test.ipynb
. - Demonstração da criação de um DataFrame a partir de um dicionário Python:
notebooks = [2, 5, 1, 7, 3] celulares = [6, 10, 7, 8, 9] loja = {'notebooks': notebooks, 'celulares': celulares} df_loja = pd.DataFrame(loja) print(df_loja)
- Acesso a colunas e células do DataFrame:
print(df_loja['notebooks'])
print(df_loja['notebooks'][3])
- Criação de DataFrame com índice customizado:
df_loja = pd.DataFrame(loja, index=['A', 'B', 'C', 'D', 'E']) print(df_loja)
- Acesso com índice customizado:
print(df_loja['celulares']['C'])
- Carregamento de dados de um arquivo CSV:
# Exemplo de caminho relativo path = '../../Git/dados/NLP/News_sentiment_analysis.csv' df_sentimentos = pd.read_csv(path, encoding='utf-8') print(df_sentimentos.head())
- Inspeção básica do DataFrame carregado:
df_sentimentos.head()
df_sentimentos.head(10)
df_sentimentos.tail()
df_sentimentos.tail(7)
df_sentimentos.info()
print(df_sentimentos.shape)
df_sentimentos.describe()
- Concatenação de DataFrames (exemplo juntando o DataFrame com ele mesmo):
novo_df = pd.concat([df_sentimentos, df_sentimentos]) print(novo_df.shape)
- Remoção de duplicatas:
novo_df.drop_duplicates(inplace=True) print(novo_df.shape)
- Adição de uma nova coluna (demonstrando preenchimento com NaN por diferença de tamanho):
# Supondo que 'serie_valores' existe e tem tamanho diferente # novo_df['valores'] = serie_valores # print(novo_df.head()) # Mostraria NaNs
- Seleção de colunas específicas para criar um novo DataFrame:
df_atualizado = df_sentimentos[['title', 'description', 'sentiment']] print(df_atualizado.head())
- Fatiamento de linhas por índice numérico:
print(df_atualizado[0:5])
Discussões Off Topic
- Professor cumprimenta os alunos que entraram na sala (Douglas, Breno, Lucas).
- Professor explica o motivo do atraso/ausência na aula anterior: seu filho passou mal com dor abdominal, suspeita de apendicite.
- Detalhes sobre a ida a dois hospitais (Hospital do Servidor e outro na Barra Funda), exames (tomografia) e o diagnóstico final de gastroenterite.
- Comenta sobre a preocupação com uma possível internação de 3 dias caso fosse apendicite.
- Menciona ter chegado tarde em casa (19h/19h30).
- Informa que o filho está se recuperando bem.
- Professor nota uma extensão do navegador (MetaMask), comenta sobre ter tido Bitcoins no passado e decide remover a extensão.
- Pausa breve para buscar um copo d'água.
- Após o intervalo, comenta que precisou vestir uma blusa por causa do frio.