Twitter Analytics : Migration des données vers MariaDB pour une utilisation dans Grafana

Les prérequis :

  • Python : Je fais du python3.
  • MariaDB
  • Grafana : J’utilise la version 5.0.0.
  • Linux : J’utilise Ubuntu 18

Voici donc ce que j’ai fait pour avoir mes données sous Grafana.

Etape 1 :

Je vais sur Twitter Analytics : https://analytics.twitter.com/about et je télécharge les fichiers CSV (By Tweet, et non By Day). Normalement j’ai un fichier CSV par mois.

Etape 2 :

Je concatène tous les fichiers CSV dans un seul fichier en supprimant les entetes :

cat tweet_activity_metrics_CYBERNEURONES_20* | grep -v "Identifiant du" > input.csv

Etape 3 :

Je lance le programme en Python pour mettre les données sous MariaDB. A noter que j’ai fait une base et un login pour Twitter avant :

-> create database TWITTERS;
-> CREATE USER 'twitter'@'localhost' IDENTIFIED BY 'twitter';
-> GRANT ALL PRIVILEGES ON TWITTERS.* TO 'twitter'@'localhost';
-> FLUSH PRIVILEGES;

Le programme en Python :

#! /usr/bin/env python3
# ~*~ utf-8 ~*~

import csv
from datetime import datetime
import mysql.connector
from mysql.connector import errorcode
from mysql.connector import (connection)

cnx = connection.MySQLConnection(user='twitter', password='twitter',
                                 host='127.0.0.1',
                                 database='TWITTERS')
cursor = cnx.cursor();
now = datetime.now().date();

#cursor.execute("DROP TABLE TWITTER;");
#cursor.execute("CREATE TABLE TWITTER (IDENTIFIANT varchar(30) UNIQUE,PERMALIEN varchar(200),TEXTE varchar(500),DATE datetime,IMPRESSION float,ENGAGEMENT float,TAUX_ENGAGEMENT float, RETWEET float,REPONSE float, JAIME float, CLIC_PROFIL float, CLIC_URL float, CLIC_HASTAG float, OUVERTURE_DETAIL float, CLIC_PERMALIEN float, OUVERTURE_APP int, INSTALL_APP int, ABONNEMENT int, EMAIL_TWEET int, COMPOSER_NUMERO int, VUE_MEDIA int, ENGAGEMENT_MEDIA int);");
cursor.execute("DELETE FROM TWITTER");

with open('input.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, quotechar='"')
    for row in reader:
        MyDate=row[3].replace(" +0000", ":00")
        MyTexte=row[2].replace("'", " ")
        MyTexte=MyTexte.replace(",", " ")
        MyC4=row[4].replace("Infinity", "0")
        MyC5=row[5].replace("Infinity", "0")
        MyC6=row[6].replace("Infinity", "0")
        MyC6=MyC6.replace("NaN", "0")
        MyC7=row[7].replace("Infinity", "0")
        try :
            cursor.execute("INSERT INTO TWITTER (IDENTIFIANT,PERMALIEN,TEXTE,DATE,IMPRESSION,ENGAGEMENT,TAUX_ENGAGEMENT,RETWEET,REPONSE, JAIME, CLIC_PROFIL, CLIC_URL, CLIC_HASTAG, OUVERTURE_DETAIL, CLIC_PERMALIEN, OUVERTURE_APP, INSTALL_APP, ABONNEMENT, EMAIL_TWEET, COMPOSER_NUMERO, VUE_MEDIA, ENGAGEMENT_MEDIA) VALUES ('"+row[0]+"', '"+row[1]+"', '"+MyTexte+"','"+MyDate+"', "+MyC4+", "+MyC5+", "+MyC6+", "+MyC7+", "+row[8]+","+row[9]+", "+row[10]+", "+row[11]+","+row[12]+","+row[13]+","+row[14]+","+row[15]+","+row[16]+","+row[17]+","+row[18]+","+row[19]+","+row[20]+","+row[21]+");");
        except mysql.connector.Error as err:
            print("Something went wrong: {}".format(err))
            if err.errno == errorcode.ER_BAD_TABLE_ERROR:
                print("Creating table TWITTER")
            else:
                None

cnx.commit();
cursor.close();
cnx.close();

# END 

Etape 4 :

Je configure Grafana pour avoir accès à MariaDB :

Etape 5 :

Faire les graphiques :

– Pour le nombre d’impression par jour :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  SUM(IMPRESSION) as value
FROM TWITTER
WHERE $__timeFilter(date)
GROUP BY DAY(date),MONTH(date),YEAR(date)
ORDER BY date ASC


– Pour le nombre de « J’aime » par jour :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  SUM(JAIME) as value
FROM TWITTER
WHERE $__timeFilter(date)
GROUP BY DAY(date),MONTH(date),YEAR(date)
ORDER BY date ASC


– Pour le nombre de « Clic sur profil » par jour :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  SUM(CLIC_PROFIL) as value
FROM TWITTER
WHERE $__timeFilter(date)
GROUP BY DAY(date),MONTH(date),YEAR(date)
ORDER BY date ASC

– Pour le nombre d’Abonnement par jour :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  SUM(ABONNEMENT) as value
FROM TWITTER
WHERE $__timeFilter(date)
GROUP BY DAY(date),MONTH(date),YEAR(date)
ORDER BY date ASC

Il est aussi possible de mettre plusieurs courbes sur le même graphe:

Municipales 2020 à Biot : Statistique des candidats sur Twitter

Le comPte @GUILAINE_DEBRAS :

Des RT de la VilleBiot …

Le compte @JPDERMIT :

Très actif pendant les élections …

Le compte @sofdeschaintres :

Bien actif depuis 2018.

BREF :

Les trois comptes ne sont pas très actifs … Twitter fait plus sérieux que Facebook, et il y a moins de publicité. A noter aussi que Twitter interdit la publicité politique sur son réseau :

« Nous avons pris la décision de mettre fin à toute publicité politique sur Twitter dans le monde entier. Nous pensons que la portée d’un message politique doit se mériter pas s’acheter ».

Sondage :

Municipales 2020 : Quel est le méilleur réseaux de communication ?

View Results

Chargement ... Chargement ...

Mon compte CYBERNEURONES :

 

 

Test d’intégration de Twitter sur WordPress : Gilets Jaunes .

Je pense avoir compris le problème, je vais donc refaire un test d’intégration de Twitter dans WordPress en supprimant la dernière ligne.

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Sauf pour le dernier Tweet.

C’est la suite de ces posts :

C’est parti :

1-

 

2-

3-

4-

5-

6-

7-

8-

9-

10-

11-

12-

13-

14-

15-

16-

17-

18-

20-

21-

22-

<
23-

24-

25-

26-

27-

28-

29-

30-

31-

32-

33-

34-


35-

36-

37-

38-


39-


40-

41-

42-

43-

44-

45-

46-

47-

48-

49-

50-


51-


52-


53-


55-

Test d’intégration de Twitter sur WordPress : Gilets Jaunes (Résultat)

Résultat de l’affichage de la page : https://www.cyber-neurones.org/2018/11/test-dintegration-de-twitter-sur-wordpress-gilets-jaunes/  . 7 secondes pour afficher 57 Tweets, c’est pas top.