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
5eaaf07f5abc47e306c5c258 Indicateurs d’activité épidémique COVID-19 par département Ministère des Solidarités et de la Santé https://www.data.gouv.fr/fr/datasets/indicateurs-dactivite-epidemique-covid-19-par-departement/ 15 unknown NA NA 2020-04-30T17:36:31.546000 2020-05-13T19:58:40.633000 2020-05-07T16:21:40.303000 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/ 0 hourly NA NA 2020-05-06T16:14:17.717000 2020-05-25T12:16:36.052000 2020-05-06T16:19:05 NA NA
5e7de8cf4663c08d4f74ba01 Données relatives aux tests de dépistage de COVID-19 réalisés en laboratoire de ville Santé publique France https://www.data.gouv.fr/fr/datasets/donnees-relatives-aux-tests-de-depistage-de-covid-19-realises-en-laboratoire-de-ville/ 9 unknown NA NA 2020-03-27T12:51:43.505000 2020-05-24T19:00:22.665000 2020-04-03T18:00:49 NA NA
5e74ecf52eb7514f2d3b8845 Données des urgences hospitalières et de SOS médecins relatives à l’épidémie de COVID-19 Santé publique France https://www.data.gouv.fr/fr/datasets/donnees-des-urgences-hospitalieres-et-de-sos-medecins-relatives-a-lepidemie-de-covid-19/ 42 unknown NA NA 2020-03-20T17:19:01.201000 2020-05-24T19:00:22.031000 2020-03-27T18:56:34 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/ 108 daily NA NA 2020-03-27T15:40:10.048000 2020-05-24T19:00:24.358000 2020-04-08T18:19:01 NA NA
5ea7eaf11739179063ca0847 Niveaux d’excès de mortalité standardisé durant l’épidémie de COVID-19 Santé publique France https://www.data.gouv.fr/fr/datasets/niveaux-dexces-de-mortalite-standardise-durant-lepidemie-de-covid-19/ 3 daily NA NA 2020-04-28T10:36:01.449000 2020-04-28T10:52:02.491000 2020-04-28T10:51:56 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-05-18T18:19:36.522000 2020-05-18T18:19:32 NA NA
5ebc1ab7e5d3010d32ca8260 Données relatives aux prêts garantis par l’Etat dans le cadre de l’épidémie de COVID-19 Etalab https://www.data.gouv.fr/fr/datasets/donnees-relatives-aux-prets-garantis-par-letat-dans-le-cadre-de-lepidemie-de-covid-19/ 0 unknown NA NA 2020-05-13T18:05:11.864000 2020-05-14T12:27:15.205000 2020-05-14T12:26:42 NA NA
5ac4f20fc751df5567500c0a Annuaire santé de la Cnam Caisse nationale de l’assurance maladie https://www.data.gouv.fr/fr/datasets/annuaire-sante-de-la-cnam/ 1 monthly 2019-05-01 2019-04-01 2018-04-04T17:41:03.136000 2020-05-01T01:19:12.803000 2019-01-07T18:17:29 NA NA
5ebc257e4694940a16d181d3 Données relatives aux reports d’échéances fiscales accordés dans le cadre de l’épidémie de COVID-19 Etalab https://www.data.gouv.fr/fr/datasets/donnees-relatives-aux-reports-decheances-fiscales-accordes-dans-le-cadre-de-lepidemie-de-covid-19/ 0 weekly NA NA 2020-05-13T18:51:10.882000 2020-05-14T12:25:48.800000 2020-05-13T22:11:18 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-04-20T18:00:37.143000 2020-04-20T18:00:37.174000 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