Twitter Analytics : Migration des données vers MariaDB pour une utilisation dans Grafana (Version 2)

174 x served & 18 x viewed

J’ai fait une version 2 qui permet de voir l’intéraction avec les utilisateurs : les sources sont disponibles ici : https://github.com/farias06/Grafana/blob/master/Twitter_CSV_insert_v2.py )

import csv
from datetime import datetime
import mysql.connector
import re
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("CREATE TABLE TWITTER_USER (USER varchar(20),IDENTIFIANT varchar(30), DATE datetime, PRIMARY KEY (USER,IDENTIFIANT));");
cursor.execute("DELETE FROM TWITTER_USER")
cursor.execute("DELETE FROM TWITTER");
cnx.commit();

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")
        User = re.findall(r'(?<=\W)[@]\S*', MyTexte)
        for MyUser in User:
            try :
                cursor.execute("INSERT INTO TWITTER_USER (IDENTIFIANT,USER,DATE) VALUES ('"+row[0]+"','"+MyUser+"','"+MyDate+"');");
            except mysql.connector.Error as err:
                print("Something went wrong: {}".format(err))
                if err.errno == errorcode.ER_BAD_TABLE_ERROR:
                    print("Creating table TWITTER_USER")
                else:
                    None
        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();

Il faut donc faire la requête suivante :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  COUNT(*) as value,
  USER as metric
FROM TWITTER_USER
WHERE $__timeFilter(date)
GROUP BY MONTH(date),YEAR(date), USER
ORDER BY date ASC

J’ai ceci , il suffit ensuite de cliquer sur un utilisateur :
Pour avoir la liste des users et le nombre d’intéraction :

 

SELECT USER, count(*) as value FROM TWITTER_USER GROUP BY USER ORDER BY value DESC;

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

186 x served & 23 x viewed

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

107 x served & 42 x viewed

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

Loading ... Loading ...

Mon compte CYBERNEURONES :

 

 

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

198 x served & 58 x viewed

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-