A Análise de Sentimentos é uma técnica utilizada para determinar a polaridade de uma sentença ou palavra, denominando o tom emocional da mensagem de positivo, negativo ou neutro. Nesse trabalho utilizamos alguns frameworks já estabelecidos e validados pela comunidade, com o intuito de identificar padrões, gerar insights e ajudar na absorção e processamento dos feedbacks dos clientes de maneira mais intuitiva.
https://miro.com/app/board/uXjVMn1aoXM=/?share_link_id=909380549987
1 - Conseguirmos identificar os pontos fracos e fortes dos negócios na visão do cliente?
1.1 - A partir dos comentários e dos pontos fracos e fortes as franquias seguem algum padrão?
1.2 - Qual a frequência dos sentimentos? Conseguimos visualizar isso de alguma forma?
Sem sombra de dúvidas, as perguntas poderiam ser ainda mais complexas, aqui vale ressaltar que é apenas uma visualização com base em hipoteses.
Em nossas considerações, percebemos que um produto viavel dessas analises seria um dashboard com gráficos.
Nessa etapa, do Get é a forma como extraímos nosso banco de dados e utilizamos dois principais métodos para a coleta de dados, sendo estes:
1 - scraping via plataforma apify --- forma mais rapida de validar se os dados do google maps respondem ao ask
2 - pipeline do processo de web scraping dos dados > implantação google (bs4 & selenium...)
>>> Seguindo o caminho Model/AnalisesSentimento/dados.csv, você encontrará os dados da Big Query em um arquivo. Para acessar os comentários é necesário extrair do JSON "Review" com o seguinte código:
import pandas as pd
caminho_arquivo = 'Caminho para o arquivo'
dados = pd.read_csv(caminho_arquivo)
def extrair_texto(review):
try:
review_dict = eval(review) # Avaliando a string como dicionário
texto = review_dict.get('text', None)
estrelas = review_dict.get('stars', None)
return pd.Series([texto])
except Exception as e:
return pd.Series([None, None])
dados_reviews = dados['reviews'].dropna().apply(extrair_texto)
dados_reviews.columns = ['texto']
dados_reviews = dados_reviews[dados_reviews['texto'].notna()]
dados_reviews.head()
Armazenamos o conjunto de dados no data_extracted
Durante a fase de explore fizemos diversas modificações e alterações no dataset adquirido após a obtenção dos dados. Tratamos o nosso banco de dados para que o mesmo ficasse da melhor maneira possível para quando aplicarmos nossos modelos. Buscando responder as perguntas do Ask
1 - Conseguirmos identificar os pontos fracos e fortes dos negócios na visão do cliente?
>>> model/AnalisesSentimento/analiseComercial - Com nosso primeiro dataset, sem uso de IA, fizemos alguns agrupamentos para visualizar os melhores bares a partir da nota média dos comentários.
>>>
>>>
>>>
1.1 - A partir dos comentários e dos pontos fracos e fortes as franquias seguem algum padrão?
>>>
>>>
1.2 - Qual a frequência dos sentimentos? Conseguimos visualizar isso de alguma forma?
>>>
>>>
No Model armazenamos nossos modelos utilizados. Durante a modelagem utilizamos dois principais modelos, sendo eles:
Textblob - Framework simples que trás várias funcionalidades para processamento de dados textuais. Um grande desafio foi o idioma do dataset, como estamos fazendo uma prova de conceito, não focamos nos melhores modelos para dados em português, portanto, usamos a biblioteca TextBlob para traduzir todos os comentários.
Tal arquivo se encontra no caminho model/SVC-model/comentarios-traduzidos.csv
https://textblob.readthedocs.io/en/dev/
SVC model - O SVM é um tecnica que analisa e reconhece padrões, usando a classificação e análise de regressão. Como nossos dados são textuais, foi necessário a transformação em vetores. Outro ponto importante é que no treinamento do modelo, precisavamos de dados com anotação. Usamos as avaliações de 1 a 5 dos comentários no google maps para fazer a anotação dos dados.
O modelo treinado se encontra no caminho model/SVC-model/modelo_treinado.pkl
No fim, optamos por utilizar o SVC model, isso pois o nosso dataset e o dataset disponibilizado no projeto FMF eram extremamente similares, tornando o SVC model o modelo ideal para a predição de sentimentos.
>>> bd-extension.json => "Amplitude do nicho de mercado do segmento alimenticio."
>>> bd-revies.json => "Dados segmento bar contendo as rewies de usuarios."
>>> bd-reviews => "Desempacotador das reviws." --remonedado
>>> df-coleta_manual => "Dados anotados manualmente."
>>> df-no_review => "informações mais gerais sobre as lojas do segmento bar" --recomendado caso não precise usar as reviews."