diff --git a/ConnectorES.ipynb b/ConnectorES.ipynb index a5244829c683d7c2b98c2052d1309790d1f90e79..e155e7dc17d4601d496803a9a93e79c037ccd44d 100644 --- a/ConnectorES.ipynb +++ b/ConnectorES.ipynb @@ -1015,11 +1015,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "id": "35e308b8", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_453872/2817808240.py:3: DeprecationWarning: The 'body' parameter is deprecated and will be removed in a future version. Instead use individual parameters.\n", + " client.search(index='tweets',\n" + ] + }, + { + "data": { + "text/plain": [ + "ObjectApiResponse({'took': 0, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 4875, 'relation': 'eq'}, 'max_score': None, 'hits': [{'_index': 'tweets', '_id': '1615995289839538176', '_score': None, '_source': {'userId': 962990947, '_doc': '\"Mince, j\\'ai perdu le train\". En pleine grève, elle rate son train pendant qu\\'elle répond en direct à BFMTV 🚆😅 https://t.co/TObulhi7v0', 'date': '2023-01-19T08:51:15+00:00', 'location': 'Paris', 'coordinates': None, 'place': None, 'like': 49901, 'followersCount': 542}, 'sort': [49901]}, {'_index': 'tweets', '_id': '1616679739980128257', '_score': None, '_ignored': ['_doc.keyword'], '_source': {'userId': 801822323825410049, '_doc': '\"Si tu vires Bolloré, Arnault, on est mort !\" \\nPourtant c\\'est Mouloud et ses collègues caristes qui chargeaient les camions de papier toilette en plein Covid. \\n \\nDepuis, Bolloré a gagné 4 milliards sans rien faire. \\nMouloud ? 4% d\\'augmentation de son SMIC après un mois de grève.', 'date': '2023-01-21T06:11:01+00:00', 'location': 'Amiens, France', 'coordinates': None, 'place': None, 'like': 7783, 'followersCount': 371234}, 'sort': [7783]}, {'_index': 'tweets', '_id': '1617517060841668608', '_score': None, '_ignored': ['_doc.keyword'], '_source': {'userId': 474073938, '_doc': 'Les éditorialistes de BFM, du Monde, du Figaro, de RTL, de France TV, de France Inter et des Échos sont invités à déjeuner à l’Elysée par Macron avant la grève contre la réforme des retraites pour noter les éléments de langages\\n\\nDevinez qui l’Elysée accuse de propagande ? https://t.co/1yEyKBKpyl', 'date': '2023-01-23T13:38:13+00:00', 'location': 'Paris, France', 'coordinates': None, 'place': None, 'like': 6836, 'followersCount': 195911}, 'sort': [6836]}]}})" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Réchauffons-nous en complétant les todos\n", + "client.search(index='TODO',\n", + " body={\n", + " \"query\" : {\n", + " \"match_all\" : {}\n", + " },\n", + " \"sort\": [{\n", + " \"TODO\": {\n", + " \"order\": \"TODO\"\n", + " }\n", + " }],\n", + " \"size\": TODO\n", + " }) \n", + " " + ] }, { "attachments": {}, @@ -1032,11 +1066,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "id": "14fbed1f", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_453872/2699639755.py:1: DeprecationWarning: The 'body' parameter is deprecated and will be removed in a future version. Instead use individual parameters.\n", + " client.search(index='tweets',\n" + ] + }, + { + "data": { + "text/plain": [ + "ObjectApiResponse({'took': 0, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 4875, 'relation': 'eq'}, 'max_score': None, 'hits': [{'_index': 'tweets', '_id': '1618363847504535562', '_score': None, '_source': {'userId': 24744541, '_doc': '« Les factures s’envolent, et avec ce genre de salaire, Amazon nous pousse vers le seuil de pauvreté » : première grève de l’histoire d’Amazon au Royaume-Uni, à l’entrepôt de Coventry | par @IciLondres lemonde.fr/economie/artic…', 'date': '2023-01-25T21:43:03+00:00', 'location': 'Paris', 'coordinates': None, 'place': None, 'like': 33, 'followersCount': 10561323}, 'sort': [10561323]}, {'_index': 'tweets', '_id': '1618226895828525056', '_score': None, '_source': {'userId': 24744541, '_doc': 'Une grève du personnel à l’aéroport de Berlin provoque l’annulation des vols de 35 000 passagers lemonde.fr/international/…', 'date': '2023-01-25T12:38:51+00:00', 'location': 'Paris', 'coordinates': None, 'place': None, 'like': 27, 'followersCount': 10561323}, 'sort': [10561323]}, {'_index': 'tweets', '_id': '1617936536774770721', '_score': None, '_source': {'userId': 24744541, '_doc': '#Retraites | La CGT-Cheminots et SUD-Rail envisagent une grève reconductible à la SNCF « dès la mi-février » lemonde.fr/politique/arti…', 'date': '2023-01-24T17:25:04+00:00', 'location': 'Paris', 'coordinates': None, 'place': None, 'like': 17, 'followersCount': 10561323}, 'sort': [10561323]}]}})" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client.search(index='TODO',\n", + " body={TODO}) " + ] }, { "attachments": {}, @@ -1044,16 +1100,54 @@ "id": "03b1813d", "metadata": {}, "source": [ - "#### Q3 : Trouver les tweets postés par les influenceurs/euses (follower > 10000)" + "#### Q3 : Calculer le nombre de twitteurs (les personnes qui ont publié du tweet) par ville (utiliser aggregation & term)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 76, "id": "4ae90861", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_453872/1569446638.py:1: DeprecationWarning: The 'body' parameter is deprecated and will be removed in a future version. Instead use individual parameters.\n", + " client.search(index='tweets',\n" + ] + }, + { + "data": { + "text/plain": [ + "ObjectApiResponse({'took': 18, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 4875, 'relation': 'eq'}, 'max_score': None, 'hits': []}, 'aggregations': {'nb_tweets': {'doc_count_error_upper_bound': 0, 'sum_other_doc_count': 1825, 'buckets': [{'key': 'Paris, France', 'doc_count': 1427, 'sum_nb_tweets': {'value': 1427}}, {'key': 'Paris', 'doc_count': 736, 'sum_nb_tweets': {'value': 736}}, {'key': 'Ile-de-France, France', 'doc_count': 342, 'sum_nb_tweets': {'value': 342}}, {'key': 'Lille, France', 'doc_count': 191, 'sum_nb_tweets': {'value': 191}}, {'key': 'Paris, Ile-de-France', 'doc_count': 82, 'sum_nb_tweets': {'value': 82}}, {'key': 'paris', 'doc_count': 77, 'sum_nb_tweets': {'value': 77}}, {'key': '', 'doc_count': 57, 'sum_nb_tweets': {'value': 57}}, {'key': 'PARIS', 'doc_count': 53, 'sum_nb_tweets': {'value': 53}}, {'key': 'Lille ', 'doc_count': 45, 'sum_nb_tweets': {'value': 45}}, {'key': 'Montreuil, France', 'doc_count': 40, 'sum_nb_tweets': {'value': 40}}]}}})" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client.search(index='tweets',\n", + " body={\n", + " \"size\":TODO,\n", + " \"aggs\": {\n", + " \"TODO\":{\n", + " \"terms\" : {\n", + " \"TODO\" : \"location.keyword\"\n", + " },\n", + " \"aggs\":{\n", + " \"TODO\":{\n", + " \"TODO\":{\n", + " \"TODO\":\"TODO\"\n", + " }\n", + " }\n", + " }\n", + " }\n", + " }\n", + " }) " + ] } ], "metadata": { diff --git a/README.md b/README.md index 2f624e7d1bdcd412b53b0f3cdcacba88991f2c39..11923ccf60598270044a8acc3be06381196e3950 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ Si vous êtes sur Ubuntu et vous rencontrez des problèmes, ne vous inquiétez p ``` -## Partie 1 : CRUD opérations d'Elastic Search avec Kibana +## Partie 1 : CRUD opérations, Query et Aggregation dans ES Aller dans Kibana, dans la section "Management" de la page d'acceuil, cliquer Dev Tools>Console, nous allons répondre aux questions suivantes dans le terminal Kibana en utilisant les requêtes qu'on a vu en cours. @@ -237,29 +237,27 @@ Résultat attendu $~~~~~~~~~~~~~$} } -#### Q9. Calculer la proportion de personnes dont le solde est strictement inférieur à 1000 -(pas sur pour cette question) +On va faire maintenant des agrégations plus avancé, pour le faire, vous allez importer le fichier **account.json** dans kibana. Vous pouvez suivre les étape suivantes. -Vous allez importer le fichier **account.json** dans kibana. Vous suivez les étape suivantes. -Vous cherchez **Integrations** dans le cosole et puis **Upload a file**. +Chercher **Integrations** dans la barre latérale et puis cliquez sur **Upload a file**.  -Vous ajoutez le fichier **account.json**. +Ajouter le fichier **account.json**.  -Une fois vous avez finit l'importer, vous cliquez sur le boutton **import** en bas à gauche. Vous donnez un nom au champs **index name**. Attention, vous utilizerez ce nom pour le tp suivant. +Une fois l'importation terminée, vous cliquez sur le boutton **import** en bas à gauche. Vous donnez un nom au champs **index name**. Attention, vous utilizerez ce nom pour les questions suivantes.  -#### Q1. Grouper par l'âge de 20 à 30 ans, l'âge de 30 à 40 ans et l'âge plus de 40 ans et calculer l'âge moyenne -**Note** On utilise **ranges** aggregation pour grouper par l'âge +#### Q9. Grouper par l'âge de 20 à 30 ans, l'âge de 30 à 40 ans et l'âge plus de 40 ans et calculer l'âge moyenne +**Note** On utilise **ranges** aggregation pour grouper l'âge -#### Q2. Grouper par l'âge de 20 à 30 ans, l'âge de 30 à 40 ans et l'âge plus de 40 ans et calculer le salaire moyenne pour chaque groupe +#### Q10. Grouper par l'âge de 20 à 30 ans, l'âge de 30 à 40 ans et l'âge plus de 40 ans et calculer le salaire moyenne pour chaque groupe -#### Q3. Grouper la ville et le sexe et calculer le salaire moyenne pour chaque groupe. +#### Q11. Grouper la ville et le sexe et calculer le salaire moyenne pour chaque groupe. -#### Q4. Filter les villes Rennes et Paris, grouper par la ville et le sexe, calculer le salaire moyenne pour chaque groupe. +#### Q12. Filter les villes Rennes et Paris, grouper par la ville et le sexe, calculer le salaire moyenne pour chaque groupe. ## Partie 2 : Elasticsearch Client sur Python @@ -301,12 +299,10 @@ client.search(index='customer',body={"query": {"match_all": {}}}) ``` #### 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. +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. Essayez à répondre les questions suivantes. -#### 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) - -## Partie 3 : Agrégation de données et visualisation dans Kibana \ No newline at end of file +#### Q4. Trouvez les tweets avec le plus de likes +#### Q5. Trouver l'ID user qui a plus de followers +#### Q6. Trouver le nombre de twitteurs (les personnes qui ont publié du tweet) par ville (utiliser aggregation & term)