Cómo visualizar series temporales de opinión usando Python
Puntos débiles
Usted es el gerente regional de una cadena de tiendas de hot pot y está muy preocupado por las opiniones de los clientes sobre su restaurante. Érase una vez, le preocupaba que a los clientes no les gustara escribir reseñas. Recientemente, debido a que los restaurantes de ollas calientes se han vuelto populares, hay cada vez más sucursales y cada vez más clientes escriben reseñas, así que aquí viene su nuevo problema: hay demasiadas reseñas para leer.
De mi parte, conociste la gran herramienta de automatización del análisis de sentimientos e inmediatamente sentiste que habías visto la luz del día.
Encuentras una página para una de tus tiendas en un sitio de reseñas conocido y le pides a tu asistente que obtenga datos sobre el tiempo de revisión y publicación. Como el asistente no sabe cómo utilizar el rastreador, debe copiar y pegar los comentarios de la página uno por uno en Excel. Al final, recibí 27 comentarios. (Tenga en cuenta que estamos utilizando datos de reseñas reales. Para evitar perturbar el negocio que se reseña, el nombre del restaurante se reemplazará por "Restaurante A". Lo siento, no sé si puedo hacer esto).
Por suerte solo querías hacer un experimento, así que continuemos. Utilizó la herramienta de análisis de sentimiento de información china que presenté antes y obtuvo el valor de sentimiento de cada comentario por turno. Cuando obtienes los resultados por primera vez, te emocionas y piensas que has encontrado la herramienta definitiva para el análisis de la opinión pública.
Pero los buenos tiempos no duraron mucho. Pronto se dará cuenta de que en realidad no es tan fácil ejecutar un programa una vez para cada comentario y hacer que una máquina haga el análisis como leer los comentarios usted mismo.
¿Qué hacer?
Secuencia
Por supuesto que hay una manera. Podemos utilizar el artículo "Préstamo o no préstamo: ¿Cómo pueden ayudarle Python y el aprendizaje automático a decidir?" (Préstamo o no préstamo: ¿Cómo pueden ayudarle Python y el aprendizaje automático a decidir?
Pero si Eso no es suficiente, también podemos visualizar los resultados del análisis de sentimiento en una serie temporal. De esta manera, puede ver la tendencia de un vistazo: ¿la gente está cada vez más satisfecha con el restaurante últimamente o está cada vez menos satisfecha? p>
Lo que los humanos hacen mejor es procesar imágenes. Debido a que nuestra larga historia evolutiva nos ha obligado a mejorar continuamente nuestra capacidad para procesar imágenes de manera rápida y precisa, de lo contrario seremos eliminados por el medio ambiente. Una imagen vale más que mil palabras.
Preparación
Primero, debe instalar el paquete Anaconda. Para conocer los pasos detallados del proceso, consulte el artículo "Cómo usar Python"
.El archivo Excel restaurant-comments.xlsx preparado por el asistente se puede descargar desde aquí
Ábrelo en Excel, si todo va bien, mueve el archivo a nuestro directorio de trabajo de demostración. p >
Dado que en este ejemplo necesitamos analizar los comentarios chinos, el paquete de software utilizado es SnowNLP. Para la aplicación básica del análisis de sentimientos, consulte "¿Cómo utilizar Python para el análisis de sentimientos?" >Ingrese a la terminal del sistema (macOS, Linux) o al símbolo del sistema (Windows), vaya a nuestro directorio de trabajo de demostración y luego ejecute el siguiente comando
pip install snownlp
pip install ggplot
El entorno de ejecución está configurado
Escriba en la terminal o en el símbolo del sistema:
jupyter notebook
Si Jupyter Notebook se está ejecutando. Normalmente, podemos empezar a escribir. Aquí está el código.
Código
Creamos un nuevo cuaderno de Python 2 en Jupyter Notebook y lo llamamos serie temporal.
Primero, presentamos la herramienta de análisis de marcos de datos Pandas, que se abrevia como pd para facilitar la llamada.
importar pandas como pd
A continuación, lea en el archivo de datos de Excel:
df = pd.read_excel("restaurant-comments.xlsx") p> p>
Veamos si la lectura está completa:
df.head ()
Los resultados son los siguientes:
Anota el tiempo columna aquí. Si el formato de hora en su archivo de Excel es el mismo que aquí, con fecha y hora, entonces Pandas será muy inteligente al reconocerlo como su formato de hora y continuar con el siguiente paso.
Por el contrario, si la hora obtenida solo es precisa hasta la fecha, como "2017-04-20", Pandas solo la tratará como una cadena y el análisis de series de tiempo posteriores no será capaz de utilizar caracteres Cadena de datos. La solución es agregar las siguientes dos líneas de código aquí:
from dateutil import parser
df["date"] = df.date.apply(parser.parse) p >
Esto le dará los datos de tiempo correctos.
Después de confirmar que los datos están completos y correctos, realizaremos un análisis de sentimiento. Comencemos con un pequeño experimento con la primera línea de comentarios.
text = df.comments.iloc[0]
Luego llamamos a la herramienta de análisis de sentimiento SnowNLP.
from snownlp import SnowNLP
s = SnowNLP(text)
Muestra los resultados del análisis de SnowNLP:
s.sentiments p >
Los resultados son los siguientes. 0.6331975099099649
Los valores del análisis de sentimiento se pueden calcular correctamente. Sobre esta base, necesitamos definir una función para procesar por lotes toda la información de los comentarios.
def get_sentiment_cn(text):
s = SnowNLP(text) return s.sentiments
Luego, usamos la poderosa declaración apply dentro de Python para procesarlo. todos los comentarios a la vez y guarde los valores de sentimiento resultantes en un marco de datos como una columna separada llamada sentimiento.
df["sentiment"] = df.comments.apply(get_sentiment_cn)
Echemos un vistazo a los resultados del análisis de sentimiento:
df.head ( )
Se ha generado una nueva columna denominada SENTIMIENTO. Como describimos anteriormente, los resultados de SnowNLP tienen valores entre 0 y 1, lo que representa la probabilidad de que el resultado del análisis de sentimiento sea positivo. Al observar los primeros datos, descubrimos que en los sitios web de reseñas, las reseñas de los clientes sobre esta rama son generalmente positivas y algunas de ellas son muy positivas.
Sin embargo, las observaciones de pequeñas cantidades de datos pueden sesgar nuestras conclusiones. Promedimos todos los valores de los resultados del análisis de sentimiento. Simplemente use la función media().
df.sentiment.mean()
El resultado es:
0.7114015318571119
El valor del resultado es mayor que 0,7 en general. Los clientes son La actitud de esta tienda es positiva.
Veamos de nuevo la mediana usando la función mediana().
df.sentiment.median()
El resultado es:
0.9563139038622388
Encontramos un fenómeno interesante: el valor medio No solo por encima del promedio, pero casi cerca de 1 (completamente positivo).
Esto significa que la mayoría de las reseñas en paralelo indican que los usuarios están muy satisfechos. Pero hay algunos valores atípicos que pueden reducir significativamente el promedio.
A continuación, utilizaremos las capacidades de visualización de series temporales de sentimiento para visualizar cuándo ocurren estos valores atípicos y qué tan bajos son realmente sus valores.
Necesitamos utilizar el kit de herramientas de trazado ggplot. Inicialmente, el conjunto de herramientas solo estaba disponible en R, lo que era la envidia de los usuarios de otras herramientas de análisis de datos. Afortunadamente, se transfirió rápidamente a la plataforma Python.
Introdujimos funciones de trazado desde ggplot y habilitamos Jupyter Notebook para mostrar imágenes directamente.
pylab inlinefrom ggplot import *
Aquí se pueden informar algunos mensajes de advertencia. Está bien, simplemente ignórales.
A continuación dibujamos el gráfico. Aquí puede ingresar la siguiente línea.
ggplot(aes(x="fecha", y="sentimento"), data=df) geom_point() geom_line(color = 'azul') scale_x_date(labels = date_format("Y-m-d" ))
Puedes ver cuán concisa y amigable es la sintaxis de trazado de ggplot. Simplemente dígale a Python qué marco de datos desea usar, elija qué columna para el eje horizontal y qué columna para el eje vertical, dibuje los puntos primero y luego conecte las líneas, y también puede especificar el color de las líneas de conexión. Luego debes indicarle a Python el formato en el que se deben mostrar las fechas en el eje X. Todas las configuraciones de parámetros son muy similares al lenguaje natural y son intuitivas y fáciles de entender.
Después de la ejecución, podrá ver el gráfico generado.
En el gráfico encontramos muchas reseñas positivas de análisis de sentimiento con valores extremadamente altos. Al mismo tiempo, también encontramos claramente varios puntos con valores extremadamente bajos. El valor del análisis de sentimiento de la revisión correspondiente es cercano a 0. Python determinó que estos comentarios carecían en gran medida de sentimientos positivos.
Desde una perspectiva temporal, últimamente aparecen comentarios negativos graves casi cada pocos días.
Como gerente, es posible que esté nervioso. Quiere conocer la situación lo antes posible. En lugar de hurgar en un marco de datos o un archivo de Excel para encontrar la reseña con el valor de sentimiento más bajo, el marco de datos de Python Pandas le brinda excelentes capacidades de clasificación. Supongamos que desea encontrar la reseña con el valor de sentimiento más bajo entre todas las reseñas. Puede hacer esto:
df.sort(['sentiment'])[:1]
El El resultado es:
El resultado es:
¡El resultado del análisis de sentimiento es casi cero! Pero aquí, el marco de datos muestra información de revisión incompleta. Necesitamos imprimir el comentario completo.
print(df.sort(['sentiment']).iloc[0].comments)
La información completa del comentario es la siguiente:
Este Cuando pasó el día de San Valentín, nunca antes había salido el día de San Valentín, no es porque no tenga novio, sino porque pensé que había mucha gente por todas partes, así que esta vez me lo perdí deliberadamente. Tenía muchas ganas de ir al restaurante A, así que salí ese mismo día alrededor de las 4 de la tarde y vi que el número en la cola era más de 100. Si conducía hasta allí desde casa y me quedaba atrapado en el tráfico. Una hora, busqué en línea con dos horas de anticipación y vi que el número en la primera fila similar al nuestro era seis y medio. En ese momento, vi que solo había más de 30 números frente a mí, pensé. No debe haber ningún problema. Después de esperar un rato, se sirvió la comida. Inesperadamente, ocurrió la tragedia. Inesperadamente sucedió la tragedia. Desde el momento en que llegamos y nos sentamos en la sala de espera, llamaron a nuestro número durante unos diez o veinte minutos. Quise irme muchas veces durante el proceso. Jaja, oye, no comí hasta después de las nueve. de la mañana me sentí como el camarero. No estoy tan atento y pausado como antes, pero debo ser responsable de varias mesas por una sola persona con tanta gente celebrando el festival hoy, debo estar muy cansado. la mayor parte del tiempo simplemente hago recados y pongo los camarones sin pedirle al camarero que haga demasiado. Le pedí que bajara y luego sentí que la higiene ambiental era buena, pero hacía demasiado ruido. , y el sabor seguía siendo el mismo que antes. Sin embargo, lo más fácil de usar del Restaurante A fue que después de vernos esperando por más de dos horas, nos sirvieron de inmediato. Tenemos una tarjeta de descuento y podemos usarla cuando llegue. Llega el momento. Este es bastante bueno. Es digno de ser el Restaurante A, pero es más fácil de usar que los comunes, ¡pero eso es todo esta vez! Si eliges la fecha equivocada, tendrás que hacer una reserva con antelación. Es mejor no ir durante las vacaciones, ¡es muy popular!
Al leer el artículo completo, descubrirá que la experiencia de este cliente no fue buena: el tiempo de espera fue tan largo que se utilizó la palabra "miserable", y también se abordaron problemas como el mal servicio y el ambiente ruidoso. mencionado. Precisamente por la presencia de estas palabras, el valor de los resultados del análisis es muy bajo.
Afortunadamente, los clientes fueron muy comprensivos y hicieron comentarios positivos sobre los servicios humanizados de la sucursal.
En este ejemplo, puedes ver que, si bien el análisis de sentimientos puede ayudarte a automatizar una gran cantidad de contenido, no puedes confiar completamente en él.
A la hora de analizar el lenguaje natural, no sólo debemos prestar atención a las palabras clave que expresan emociones fuertes, sino que también debemos considerar una serie de factores como la expresión y el contexto. Estos factores se encuentran actualmente en la vanguardia de la investigación en el campo del procesamiento del lenguaje natural. Esperamos con interés la aplicación temprana de los resultados de la investigación de los científicos para mejorar la precisión del análisis de sentimientos.
Sin embargo, incluso si el procesamiento automatizado actual del análisis de opiniones no es muy preciso, aún puede ayudarle a localizar rápidamente anomalías que pueden ser problemáticas. En términos de eficiencia, es mucho más eficiente que el procesamiento manual.
Después de leer este comentario, respiraste profundamente. Después de aprender de tu experiencia, decides agregar un toque humano a tu servicio. Piensa en recopilar datos sobre los tiempos de espera de los usuarios y utilizar el análisis de datos para proporcionar expectativas de tiempo de espera más razonables para los clientes que esperan para cenar. Esto evitará que los clientes esperen hasta tarde.
¡Enhorabuena, manager! En la era de la inteligencia de datos, ya estás en el camino correcto.
Ahora, deberías leer atentamente el siguiente comentario negativo:...
Discusión
Además del análisis de sentimientos y la visualización de series de tiempo, ¿de qué otra manera ¿Crees que puedes extraer información de reseñas chinas? Además de los sitios web de reseñas, ¿qué otras fuentes de datos conoce para el análisis de la opinión pública? Bienvenido a dejar un mensaje para compartir con nosotros, comunicarnos y discutir juntos.
Si estás interesado en mi artículo, dale me gusta, sigue y fija mi cuenta pública "Yushu Zhilan".
Si tiene amigos que participan en análisis e investigaciones de la opinión pública, puede reenviarles este artículo, ****, y aprender y mejorar juntos.