Python para Análise de Sentimentos em Redes Sociais
Essas opiniões refletem sentimentos — positivos, negativos ou neutros — que podem ser extraídos e analisados com técnicas de Processamento de Linguagem Natural (NLP) e Machine Learning.
Neste artigo, vamos aprender como realizar análise de sentimentos em redes sociais com Python, passando por coleta de dados, pré-processamento, modelagem e visualização de resultados.
1. O que é Análise de Sentimentos?
A análise de sentimentos é uma técnica de NLP que busca identificar a opinião ou emoção expressa em um texto.
Exemplo:
Positivo: “Amei o novo celular, a câmera é fantástica!”
Negativo: “O atendimento foi horrível, não recomendo.”
Neutro: “O produto chegou ontem e ainda não testei.”
Aplicações práticas:
Medir sentimentos sobre política, economia ou eventos.
Apoiar decisões de negócios em tempo real.
2. Coleta de Dados de Redes Sociais
2.1 Coletando tweets com Tweepy
import tweepy
# Autenticação na API do Twitter (X)
api_key = "SUA_API_KEY"
api_key_secret = "SUA_API_SECRET"
access_token = "SEU_ACCESS_TOKEN"
access_token_secret = "SEU_ACCESS_SECRET"
auth = tweepy.OAuthHandler(api_key, api_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
# Coleta de tweets sobre um tema
query = "inteligência artificial -filter:retweets"
tweets = tweepy.Cursor(api.search_tweets, q=query, lang="pt", tweet_mode="extended").items(100)
dados = [[tweet.full_text, tweet.created_at] for tweet in tweets]
import pandas as pd
df = pd.DataFrame(dados, columns=["texto", "data"])
print(df.head())
3. Pré-processamento dos Textos
Dados de redes sociais são ruidosos (cheios de emojis, hashtags, links e gírias). Precisamos limpar o texto.
import re
import nltk
from nltk.corpus import stopwords
nltk.download("stopwords")
stopwords_pt = stopwords.words("portuguese")
def limpar_texto(texto):
texto = texto.lower() # minúsculas
texto = re.sub(r"http\S+|www\S+", "", texto) # remove links
texto = re.sub(r"@\w+", "", texto) # remove menções
texto = re.sub(r"#", "", texto) # remove hashtag
texto = re.sub(r"[^a-zA-Zá-úÁ-Ú0-9\s]", "", texto) # remove caracteres especiais
palavras = [p for p in texto.split() if p not in stopwords_pt]
return " ".join(palavras)
df["texto_limpo"] = df["texto"].apply(limpar_texto)
4. Análise de Sentimentos com VADER
O VADER (Valence Aware Dictionary for sEntiment Reasoning) é ótimo para redes sociais porque entende gírias, emojis e intensificadores.
from nltk.sentiment.vader import SentimentIntensityAnalyzer
nltk.download("vader_lexicon")
analisador = SentimentIntensityAnalyzer()
df["sentimento"] = df["texto_limpo"].apply(lambda x: analisador.polarity_scores(x)["compound"])
# Classificação
df["polaridade"] = df["sentimento"].apply(lambda x: "positivo" if x > 0.05 else ("negativo" if x < -0.05 else "neutro"))
print(df.head())
5. Visualização dos Resultados
5.1 Distribuição dos sentimentos
import matplotlib.pyplot as plt
df["polaridade"].value_counts().plot(kind="bar", color=["green","red","gray"])
plt.title("Distribuição de Sentimentos")
plt.show()
5.2 Nuvem de palavras
from wordcloud import WordCloud
texto_total = " ".join(df["texto_limpo"])
nuvem = WordCloud(width=800, height=400, background_color="white").generate(texto_total)
plt.imshow(nuvem, interpolation="bilinear")
plt.axis("off")
plt.show()
6. Modelos de Machine Learning para Sentimentos
Além do VADER, podemos treinar nossos próprios classificadores.
6.1 Vetorização de texto
from sklearn.feature_extraction.text import TfidfVectorizer
vetor = TfidfVectorizer(max_features=500)
X = vetor.fit_transform(df["texto_limpo"])
y = df["polaridade"]
6.2 Treinando um modelo (Naive Bayes)
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
modelo = MultinomialNB()
modelo.fit(X_train, y_train)
y_pred = modelo.predict(X_test)
print(classification_report(y_test, y_pred))
7. Análise de Sentimentos com Deep Learning (Bônus)
Usando redes neurais e embeddings pré-treinados, como BERT ou Transformers, é possível atingir resultados ainda melhores.
from transformers import pipeline
analisador = pipeline("sentiment-analysis", model="nlptown/bert-base-multilingual-uncased-sentiment")
print(analisador("Esse filme foi incrível, amei!"))
8. Desafios e Limitações
Ironia e sarcasmo: “Adorei esperar 3 horas na fila 😒” → difícil para modelos entenderem.
Contexto cultural: palavras mudam de significado em diferentes regiões.
Ambiguidade: “O celular é pequeno” pode ser bom ou ruim.
Necessidade de atualização constante: novas gírias e expressões surgem rapidamente.
9. Boas Práticas
Sempre combine métodos: dicionários (VADER), ML clássico (Naive Bayes, SVM) e deep learning.
Faça validação cruzada para evitar overfitting.
Atualize dicionários com gírias locais.
Visualize os resultados com dashboards interativos (Dash, Streamlit, Plotly).
10. Conclusão
A análise de sentimentos em redes sociais com Python é uma ferramenta poderosa para empresas, pesquisadores e analistas de dados. Com ela, podemos monitorar tendências, entender clientes e antecipar crises de imagem.
Bibliotecas como NLTK, Scikit-learn e Transformers tornam possível construir desde soluções rápidas até sistemas robustos baseados em inteligência artificial.
No futuro, veremos cada vez mais aplicações que combinam NLP + análise em tempo real + visualização interativa, permitindo decisões mais inteligentes e rápidas.

Comentários
Postar um comentário