"#Importer elasticsearch, n'oubliez pas de l'installer via pip3 install elasticsearch\n",
"import elasticsearch\n",
"from elasticsearch import Elasticsearch\n",
"\n",
"print (elasticsearch.VERSION)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "d8443460",
"metadata": {},
"outputs": [],
"source": [
"#Connexion avec le server elasticsearch lancé sur Docker, il faut bien fournir le bon password, et le bon path vers http_ca.crt\n",
"ELASTIC_PASSWORD = \"À REMPLIR\"\n",
"\n",
"# Create the client instance\n",
"client = Elasticsearch(\n",
" \"https://localhost:9200\",\n",
" ca_certs=\"~/http_ca.crt\",\n",
" basic_auth=(\"elastic\", ELASTIC_PASSWORD)\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "e28dace4",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_453872/3396708810.py:3: DeprecationWarning: The 'body' parameter is deprecated and will be removed in a future version. Instead use individual parameters.\n",
"Nous n'utilisons que les tweets en Français et nous ne voulons pas de doublons. \n",
"Il n'y a que les colonnes: id, userId, date, renderedContent,\tlikeCount, coordinates,\tplace, location et followersCount qui nous servirons pour la suite. \n",
"Renommer le champ id -> tweetID pour distinguer avec l'id user. La table final appele raw_tweets. \n",
"\n",
"N'hésitez pas à appeler la fonction head() pour voir les résultats de chaque étape"
"Dans le dataset, le champ \"user\" est un objet Json, essayons de créér un table à partir de ce champ, et de supprimer des doublons. Nous ne gardons que certaines colonnes utiles. \n",
"On a aussi renommé le champ id -> userID pour distinguer l'id de tweet. La table finale appele users \n",
"\n",
"Hint: Utiliser pandas.json_normalize, il faut importer avant d'utiliser"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "4ad2a607",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>userId</th>\n",
" <th>displayname</th>\n",
" <th>rawDescription</th>\n",
" <th>renderedDescription</th>\n",
" <th>verified</th>\n",
" <th>created</th>\n",
" <th>followersCount</th>\n",
" <th>friendsCount</th>\n",
" <th>statusesCount</th>\n",
" <th>favouritesCount</th>\n",
" <th>...</th>\n",
" <th>mediaCount</th>\n",
" <th>location</th>\n",
" <th>protected</th>\n",
" <th>link</th>\n",
" <th>label</th>\n",
" <th>link._type</th>\n",
" <th>link.text</th>\n",
" <th>link.url</th>\n",
" <th>link.tcourl</th>\n",
" <th>link.indices</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1829274175</td>\n",
" <td>xavier bertrand</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>False</td>\n",
" <td>2013-09-08T13:36:07+00:00</td>\n",
" <td>14</td>\n",
" <td>41</td>\n",
" <td>1634</td>\n",
" <td>1087</td>\n",
" <td>...</td>\n",
" <td>183</td>\n",
" <td>Neuilly-sur-Seine, France</td>\n",
" <td>False</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>104034000</td>\n",
" <td>Cemil Şanlı</td>\n",
" <td>Journaliste, reporter et vidéaste indé 🇨🇵 • ca...</td>\n",
" <td>Journaliste, reporter et vidéaste indé 🇨🇵 • ca...</td>\n",
"Jusqu'à présent, tous les tweets ont été stockés dans l'index \"tweets\" d'elasticsearch, cela peut être vérifié via le terminal Kibana ou en executant la ligne suivante : "
/tmp/ipykernel_453872/3396708810.py:3: DeprecationWarning: The 'body' parameter is deprecated and will be removed in a future version. Instead use individual parameters.
Nous n'utilisons que les tweets en Français et nous ne voulons pas de doublons.
Il n'y a que les colonnes: id, userId, date, renderedContent, likeCount, coordinates, place, location et followersCount qui nous servirons pour la suite.
Renommer le champ id -> tweetID pour distinguer avec l'id user. La table final appele raw_tweets.
N'hésitez pas à appeler la fonction head() pour voir les résultats de chaque étape
Dans le dataset, le champ "user" est un objet Json, essayons de créér un table à partir de ce champ, et de supprimer des doublons. Nous ne gardons que certaines colonnes utiles.
On a aussi renommé le champ id -> userID pour distinguer l'id de tweet. La table finale appele users
Hint: Utiliser pandas.json_normalize, il faut importer avant d'utiliser
Jusqu'à présent, tous les tweets ont été stockés dans l'index "tweets" d'elasticsearch, cela peut être vérifié via le terminal Kibana ou en executant la ligne suivante :
Pour la suite de TP, nous vous donnons un dataset qui est les tweets qui ont hashtag #Farmersprotest. Dans cette question, nous avons besoin de nettoyer les données avant injecter dans Elasticsearch
Nous n'utilisons que les tweets en Anglais et nous ne voulons pas de doublons. En plus, il n'y a que les colonnes : id, date, user, renderedContent qui nous servirons pour la suite. Renommer le champ id -> tweetID pour distinguer. La table résultant appelé raw_tweets
Appeler la fonction head() pour voir les résultats
#### 3.3. Flatten nested champ
Nous voyons que le champ "user" est nested, essayons de créér un table à partir de ce champ. Supprimer de doublons. Nous ne gardons que les colonnes : id, location. Renommer le champ id -> userID pour distinguer. La table résultant appelé users
#### Q3. Traitement les données
Pour la suite de TP, nous vous donnons un dataset rassemble 5 000 tweets contenant "grève" dans un rayon de 800 km autour de Paris, de la pérode 19/01/2023 - 26/01/2023, Dans cette question, nous avons besoin de nettoyer les données avant de les injecter dans Elasticsearch, le code pour la nettoyage est prêt, lancez et observez les données.
Hint: Utiliser pandas.json_normalize, il faut importer avant utiliser
#### 3.4. Créer la table finale
La table finale appelé "tweets" est créé en mergent les 2 tables précédentes.
#### Q3. Trouvez les tweets avec le plus de likes
#### Q4. Trouver l'ID user qui a plus de followers
#### Q5. Trouver les tweets postés par les influenceurs/euses (follower > 10000)
#### Q4. Injection les données dans Elasticsearch
## Partie 3 : Agrégation de données et visualisation dans Kibana