Data Analysis with BARIS and Word Cloud rendering

BARIS is finally on CRAN !!! To celebrate, let’s make another tutorial. We’ll randomly pick up a dataframe and work on it.

First of all, we list the datasets displayed within the home page of data.gouv.fr :

We use the knitr package to print out the data into an markdown format instead of R code :

library(BARIS)
library(tidyverse)
library(knitr)

BARIS_home() %>% 
  kable(format = "markdown")
id title organization page views frequency temporal_cov_start temporal_cov_end created_at last_modified last_update archived deleted
5eebbc067a14b6fecc9c9976 Répertoire National des Certifications Professionnelles et Répertoire Spécifique France compétences https://www.data.gouv.fr/fr/datasets/repertoire-national-des-certifications-professionnelles-et-repertoire-specifique/ 0 weekly NA NA 2020-06-18T21:09:58.337000 2020-07-24T22:10:10.095000 2020-07-24T22:06:46 NA NA
5efa23afd85990251fc9a197 Municipales 2020 - Résultats 2nd tour Ministère de l’Intérieur https://www.data.gouv.fr/fr/datasets/municipales-2020-resultats-2nd-tour/ 1 punctual NA NA 2020-06-29T19:23:59.373000 2020-06-30T19:17:56.247000 2020-06-30T19:17:36 NA NA
5eda3b6f52f4c2bf118dbdc8 Elections municipales 2020 - Liste des candidats élus au T1 et liste des communes entièrement pourvues Ministère de l’Intérieur https://www.data.gouv.fr/fr/datasets/elections-municipales-2020-liste-des-candidats-elus-au-t1-et-liste-des-communes-entierement-pourvues/ 1 unknown NA NA 2020-06-05T14:32:47.233000 2020-06-17T16:08:52.350000 2020-06-17T16:08:46 NA NA
5ee9df5003284f565d561278 Indicateurs de suivi de l’épidémie de COVID-19 Ministère des Solidarités et de la Santé https://www.data.gouv.fr/fr/datasets/indicateurs-de-suivi-de-lepidemie-de-covid-19/ 1 weekly NA NA 2020-06-17T11:16:00.320000 2020-07-22T17:43:51.304000 2020-06-17T14:53:22 NA NA
5e7e104ace2080d9162b61d8 Données hospitalières relatives à l’épidémie de COVID-19 Santé publique France https://www.data.gouv.fr/fr/datasets/donnees-hospitalieres-relatives-a-lepidemie-de-covid-19/ 120 daily NA NA 2020-03-27T15:40:10.048000 2020-07-24T19:00:15.636000 2020-04-08T18:19:01 NA NA
5eb2c639949dda18c97e9677 Sites de prélèvements pour les tests COVID Ministère des Solidarités et de la Santé https://www.data.gouv.fr/fr/datasets/sites-de-prelevements-pour-les-tests-covid/ 1 hourly NA NA 2020-05-06T16:14:17.717000 2020-07-26T19:46:45.852000 2020-05-06T16:19:05 NA NA
5ecf5df0eb87ae4934709e30 Base carbone® - v18.0 ADEME https://www.data.gouv.fr/fr/datasets/base-carbone-r-v18-0/ 0 unknown NA NA 2020-05-28T08:45:04.275000 2020-06-09T09:08:58.755000 2020-06-09T09:08:58.767000 NA NA
5ee2391763c79811ddfbc86a Diagnostics de performance énergétique pour les logements par habitation ADEME https://www.data.gouv.fr/fr/datasets/diagnostics-de-performance-energetique-pour-les-logements-par-habitation/ 0 unknown NA NA 2020-06-11T16:00:55.511000 2020-07-01T11:37:20.882000 2020-07-01T11:37:20.890000 NA NA
5e9dc6fb50e78562fdf2d2a5 SINOE ® - Tonnage déchèteries par type de déchet et département ADEME https://www.data.gouv.fr/fr/datasets/sinoe-r-tonnage-decheteries-par-type-de-dechet-et-departement/ 0 unknown NA NA 2020-04-20T17:59:55.179000 2020-06-09T12:07:01.557000 2020-06-09T12:07:01.565000 NA NA
5ee4173084de55b24f179ef2 Aide exceptionnelle « CPSTI RCI COVID-19 » Unions de Recouvrement des cotisations de Sécurité Sociale et d’Allocations Familiales https://www.data.gouv.fr/fr/datasets/aide-exceptionnelle-cpsti-rci-covid-19/ 0 unknown NA NA 2020-06-13T02:00:48.315000 2020-06-13T02:00:48.315000 2020-06-13T02:00:48.325000 NA NA
5ec32381c9c7034314233919 Mesures exceptionnelles Covid-19 : reports de cotisations Urssaf (employeurs), par département x grand secteur Unions de Recouvrement des cotisations de Sécurité Sociale et d’Allocations Familiales https://www.data.gouv.fr/fr/datasets/mesures-exceptionnelles-covid-19-reports-de-cotisations-urssaf-employeurs-par-departement-x-grand-secteur/ 0 unknown NA NA 2020-05-19T02:08:33.527000 2020-05-19T02:08:33.527000 2020-05-19T02:08:33.542000 NA NA
5e9dbdbe71589194c8f7b42f Données relatives au fonds de solidarité mis en place dans le cadre de l’épidémie de COVID-19 Etalab https://www.data.gouv.fr/fr/datasets/donnees-relatives-au-fonds-de-solidarite-mis-en-place-dans-le-cadre-de-lepidemie-de-covid-19/ 1 daily 2020-12-31 2020-03-01 2020-04-20T17:20:30.636000 2020-06-25T19:00:28.500000 2020-06-25T19:00:28.460000 NA NA

Let us have a look at the Consultation citoyenne en ligne sur les retraites. We can read the description of this dataset using BARIS_explain():

BARIS_explain(datasetId = "5e00c0766f444173066f7e48")
## [1] "Lancée le 3 octobre par le président de la République et pilotée par Jean-Paul Delevoye, haut-commissaire aux Retraites, la « consultation citoyenne en ligne sur les retraites » a permis à chacun de s’informer et d’exprimer ses interrogations, ses espoirs et ses inquiétudes concernant le futur système universel de retraites jusqu'au 8 décembre 2019.  Cette consultation s'articulait autour de trois modules :     • un questionnaire rapide pour s’exprimer en quelques minutes sur les priorités et les solutions proposées pour le futur système universel ;     • un module présentant les principales préconisations du haut-commissaire et permettant à tous de donner un avis ;     • un module de questions/réponses pour permettre chaque semaine à Jean-Paul Delevoye de répondre aux 5 questions les plus soutenues."

Now, let’s list all the resources contained within this dataset:

BARIS_resources(datasetId = "5e00c0766f444173066f7e48") %>% 
  kable(format = "markdown")
id title format published url description
1b33488b-3bf7-4054-947b-d3f301b2ee84 Priorités et solutions proposées par les participants pour le futur système universel csv 2019-12-24T11:43:41 https://static.data.gouv.fr/resources/consultation-citoyenne-en-ligne-sur-les-retraites-1/20191224-114330/completez-le-questionnaire-en-quelques-minutes.csv Contributions déposées sur l’espace de participation “Complétez le questionnaire en quelques minutes” de la plateforme de consultation citoyenne sur les retraites
4074e140-b64e-4617-b232-1ed5430b114d Avis des participants sur les principales préconisations du haut-commissaire csv 2019-12-23T14:52:45 https://static.data.gouv.fr/resources/consultation-citoyenne-en-ligne-sur-les-retraites-1/20191223-145244/exprimez-vous-sur-les-preconisations.csv Contributions déposées sur l’espace de participation “Exprimez-vous sur les préconisations” de la plateforme de consultation citoyenne sur les retraites
93aed7ce-db2f-4982-8127-340562061e4b Questions posées à M. Jean-Paul Delevoye csv 2019-12-23T14:37:16 https://static.data.gouv.fr/resources/consultation-citoyenne-en-ligne-sur-les-retraites-1/20191223-143716/posez-une-question-a-jean-paul-delevoye.csv Contributions déposées sur l’espace de participation “Posez une question à Jean-Paul Delevoye” de la plateforme de consultation citoyenne sur les retraites

Let’s choose the Questions posées à M. Jean-Paul Delevoye dataframe. I’m not French so I’m not really aware of what’s hapenning in terms of reforms but the file contains a set of questions related the universal pension system that the government intended to implement recently.

library(BARIS)
Questions_Delevoye <- BARIS_extract(resourceId = "93aed7ce-db2f-4982-8127-340562061e4b", format = "csv")

Important: When you encounter txt files, just put “csv” whithin the format argument.

Questions_Delevoye %>% glimpse()
## Rows: 4,509
## Columns: 11
## $ id             <chr> "UHJvcG9zYWw6NTU3N2U2ZjgtZTYwYS0xMWU5LWE0ODUtZmExNjN...
## $ reference      <chr> "2-8", "2-9", "2-10", "2-11", "2-12", "2-13", "2-14"...
## $ title          <chr> "cotisation des robots", "Âge de mis œuvre de la réf...
## $ body           <chr> "<p>je propose que pour tout emploi physique remplac...
## $ created_at     <chr> "2019-10-03 20:19:26", "2019-10-03 20:33:53", "2019-...
## $ published_at   <chr> "2019-10-03 20:19:26", "2019-10-03 20:33:53", "2019-...
## $ updated_at     <chr> "", "", "", "", "", "", "", "", "2019-11-20 10:15:34...
## $ trashed        <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FAL...
## $ trashed_status <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
## $ author_id      <chr> "VXNlcjoxMmI1YmIxNC02NGZlLTExZTgtOTljNy0wMjQyYWMxMTA...
## $ author_type    <chr> "Citoyen", "Citoyen", "Citoyen", "Citoyen", "Citoyen...

From above, we can see that the most interesting variable is body. It contains the questions/suggestions of many French citizens. Great, we make a wordcloud:

Making a Word Cloud with R

first we isolate our variable in a single object.

text_data <- Questions_Delevoye$body


head(text_data)
## [1] "<p>je propose que pour tout emploi physique remplacé par un robot l'employeur continue de payer les charges retraites employeur, si par ailleurs l'employeur n'a pas crée de nouvel emploi physique et maintenu ses effectifs : qu'en pensez vous ? </p>"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
## [2] "<p>Quel est le fondement social technique financier ou autre qui a conduit à choisir les personnes  nées à compter de 1963 pour basculer dans le nouveau système ?</p>"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
## [3] "<p>Mon épouse est Portugaise et a travaillé 10 au Portugal avant de rejoindre la France. Moi même j'ai été expatrié au Portugal pendant 2 ans en contrat local (cotisations au Portugal pour le régime de base). Que va t'il advenir de nos cotisations vs ancien système (1 trimestre dans l'UE = 1 trimestre en France). Comment va être calculé notre retraite ? Merci</p>"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
## [4] "<p><span class=\"\"ql-size-large\"\"><span class=\"\"ql-cursor\"\"><U+FEFF></span></span></p>"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
## [5] "<p>Bonsoir.</p><p>les français ne veulent pas entendre parler d’âge pivot et d’âge légal.</p><p>cela demeure cohérent de vouloir l’équilibre du régime mais pourquoi ne pas augmenter les cotisations retraite pour maintenir pour 100% des français un âge de départ légal à 62 ans.</p><p>on éviterait aussi de devoir se traîner 2 ans de plus pour toucher une retraite qu’on sait déjà comme étant basse voire insuffisante pour survivre.</p><p>ce serait simplement cela la vraie justice sociale.</p><p>s’il faut devenir tous solidaires alors’ pourquoi ne voulez vous jouer que sur l’âge de départ et pas le montant de la cotisation </p>"                                                                                                                                                                                                                                                                        
## [6] "<p>\"\"Il n y aura pas de perte de droits\"\".... pour autant, pour passer d un systeme à l autre, je retiens que mes cotisations avant 2025 vont ouvrir des droits calculés selon l ancien systeme, et qu a partir de 2025, mes cotisations me donneront des points.</p><p>Pourquoi proceder ainsi et avoit retenu une methode si compliquee?</p><p>En effet, j ai aujoird hui 30 ans et cela fait 8 ans que je travaille. Autrement dit, si je liquiderai mes droits à la retraite aujourd hui, ils seraient tres faibles, pour ne pas dire inexistants. Or, c est pourtant ce qui va etre fait : à partir de donnees incompletes, mes droits à la retraite vont etre calcules pour permettre la conversion dans le nouveau systeme.... pour autant, je suis capable dd vous dire a l euro pres combien j ai cotisé depuis 8 ans pour l assurance retraite. Pourquoi ne pas directement convertir cette somme en points?</p>"

Second, we remove all the html tags with regex and some superfluous words.

text_data <- gsub("<.*?>", "", text_data) # removing html tags


text_data <- gsub("retraites", "", text_data)
text_data <- gsub("retraite", "", text_data)
text_data <- gsub("système", "", text_data)
text_data <- gsub("c'est", "", text_data)
text_data <- gsub("cest", "", text_data)
text_data <- gsub("’", "", text_data)
text_data <- gsub("tous", "", text_data)
text_data <- gsub("tout", "", text_data)
text_data <- gsub("comme", "", text_data)
text_data <- gsub("€", "", text_data)

Next, we use the tm package to transform our text in order to generate the Word Cloud:

library(tm)

docs <- Corpus(VectorSource(text_data))  # mandatory: transforming our raw text data into a corpus

docs <- docs %>%
  tm_map(removeNumbers) %>% 
  tm_map(removePunctuation) %>% 
  tm_map(stripWhitespace)

docs <- tm_map(docs, content_transformer(tolower)) # all the words into lower case
docs <- tm_map(docs, removeWords, stopwords("french")) # removing French Stopwords


dtm <- TermDocumentMatrix(docs) # transforming our corpus into a matrix

matrix <- as.matrix(dtm) 

words <- sort(rowSums(matrix),decreasing=TRUE) 

df <- data.frame(word = names(words),freq=words)

head(df)
##            word freq
## plus       plus 3131
## ans         ans 2838
## réforme réforme 1242
## travail travail  949
## faire     faire  888
## années   années  870

Generating the Word Cloud

Now we’re ready to generate our Word Cloud:

library(wordcloud2)

wordcloud2(data=df, size = 0.7, shape = 'pentagon')
Avatar
Mohamed El Fodil Ihaddaden
Ph.D candidate in Economics.

My research interests include Performance Management, Efficiency Analysis and Experimental Economics.

Related