Este artículo está basado en un artículo anterior donde ya extraje los datos de los tweets y los organice de una manera fácil de gestionar. Recuerda que en el anterior artículo use la cuenta @machinelearnbot para los ejemplos, pero en este artículo la he sustituido por la cuenta @realDonaldTrump para realizar un ejemplo más significativo de cara al análisis de sentimientos que quiero demostrar.
Puedes descargarte el código en
el repositorio GitHub
que he creado para esta publicación.
A partir de ahora, solo añadiré
un código de entrada y la salida justo debajo del código.
Para obtener la media, usando
numpy:
# Sacamos la media de las
longitudes:
mean =
np.mean(data['longitud'])
print("La longitud media de los
tweets: {}".format(mean))
|
La longitud media de los tweets: 126.01
Para calcular el tweet que más ha gustado y el más retuiteado usaremos algunas funcionalidades de pandas:
Para calcular el tweet que más ha gustado y el más retuiteado usaremos algunas funcionalidades de pandas:
# Sacamos el tweet con más "Me
gusta" y el más retuiteado:
fav_max = np.max(data['Likes'])
rt_max = np.max(data['RTs'])
fav = data[data.Likes ==
fav_max].index[0]
rt = data[data.RTs == rt_max].index[0]
# Tweet que más ha gustado:
print("El tweet con más <Me gusta> es: \n{}".format(data['Tweets'][fav]))
print("Número de <Me gusta>: {}".format(fav_max))
print("{} caracteres.\n".format(data['longitud'][fav]))
# Tweet más retuiteado:
print("El tweet más retuiteado es: \n{}".format(data['Tweets'][rt]))
print("Número de retweets: {}".format(rt_max))
print("{} caracteres.\n".format(data['longitud'][rt]))
|
El tweet con más <Me gusta> es:
Crazy Joe Biden is trying to act like a tough guy. Actually, he is weak, both mentally and physically, and yet he t… https://t.co/4e33ZxnAw7
Número de <Me gusta>: 257953
140 caracteres.
El tweet más retuiteado es:
Crazy Joe Biden is trying to act like a tough guy. Actually, he is weak, both mentally and physically, and yet he t… https://t.co/4e33ZxnAw7
Número de retweets: 75540
140 caracteres.
Es común que el tweet con más “me
gusta” sea el tweet más retuiteado, pero no tiene que cumplirse esto necesariamente.
Lo que estoy haciendo es encontrar la cantidad máxima de “me gusta” en la
columna "Likes" y la cantidad máxima de retweets en la columna
"RTs" usando la función max
de numpy. Con esto buscamos el índice de cada una de las dos columnas que
satisfaga ser el máximo. Como más de uno puede tener la misma cantidad de me
gusta/retweets (el máximo) solo necesitamos coger el primero encontrado, y es
por eso que usamos .index [0] para
asignar el índice a las variables fav
y rt. Para imprimir el tweet que
satisface, accedemos a los datos de la misma forma que accederíamos a una
matriz o cualquier objeto indexado.
Ahora ya podemos visualizar algunas cosas. :)
Ahora ya podemos visualizar algunas cosas. :)
Pandas tiene su propio objeto
para series temporales. Como tenemos un vector completo con fechas de creación,
podemos construir series temporales con respecto a las longitudes de tweets, “me
gusta” y retweets.
Lo hacemos de la siguiente forma:
#
Creamos las series temporales de datos de los tweets:
tlen
= pd.Series(data=data['longitud'].values,
index=data['Fecha'])
tfav
= pd.Series(data=data['Likes'].values,
index=data['Fecha'])
tret
= pd.Series(data=data['RTs'].values,
index=data['Fecha'])
|
Y si queremos visualizar las
series temporales, pandas ya dispone de su propio método. Podemos representar
una serie temporal de la siguiente manera:
#
Variación de las longitudes de tweets con el tiempo:
tlen.plot(figsize=(16,4),
color='r');
|
Esto crea la salida siguiente:
Y para visualizar los “Me gusta” versus los retweets en el
mismo gráfico:
# Visualización de
Me gusta vs Retuits:
tfav.plot(figsize=(16,4),
label="Me gusta", legend=True)
tret.plot(figsize=(16,4),
label="Retuits", legend=True);
|
Esto crea la salida siguiente:
Ahora voy a visualizar las
fuentes en un gráfico de tarta, ya que me he dado cuenta de que lo normal es
que no todos los tweets sean tuiteados desde la misma fuente (😱🤔).
Primero limpio todas las fuentes:
#
Obtener todas las fuentes posibles:
fuentes
= []
for fuente in data['Fuente']:
if fuente not in
fuentes:
fuentes.append(fuente)
#
Imprimir la lista de fuentes:
print("Creación de fuentes de
contenido:")
for fuente in fuentes:
print("* {}".format(fuente))
|
Con el siguiente resultado, nos
damos cuenta de que, básicamente, esta cuenta de Twitter tiene cuatro fuentes:
Creación de fuentes de contenido:
* Twitter for iPhone
* Media Studio
* Twitter Web Client
* Twitter for iPad
Ahora contamos el número de cada fuente y creamos un gráfico de tarta. Observa que esta celda de código no es la más optimizada ... Ten en cuenta que eran las 2 de la mañana cuando estaba diseñando este programa. ¡Un poquito de por favor!! 😅
#
Creamos un vector numpy mapeado a las etiquetas:
percent
= np.zeros(len(fuentes))
for fuente in data['Fuente']:
for indice in range(len(fuentes)):
if fuente ==
fuentes[indice]:
percent[indice] += 1
pass
percent
/= 100
#
Gráfico de tarta:
tarta
= pd.Series(percent, index=fuentes, name='Fuentes')
tarta.plot.pie(fontsize=11,
autopct='%.2f', figsize=(6, 6));
|
Con esto obtenemos un resultado como este:
Y podemos ver el porcentaje de tweets por fuente. Como se
puede ver, en este caso se ha tuiteado a través del iPhone en un 95,5% de los
casos.
En el siguiente post continuaré con este caso de uso y haré
un análisis de sentimiento sobre esta cuenta de Twitter.
¡No te lo pierdas! ;)
0 comentarios:
Publicar un comentario
Gracias por participar en esta página.