diff --git a/module2/exo4/stat_activity.html b/module2/exo4/stat_activity.html index 5e166f20e77cd3de91e4ed294912b1dca2525be3..76b7ed142801be3e693ca279159daa1016af4d40 100644 --- a/module2/exo4/stat_activity.html +++ b/module2/exo4/stat_activity.html @@ -3,23 +3,30 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ + +
Mon journal est stocké dans /home/alegrand/org/journal.org
. Les
@@ -187,12 +296,11 @@ Je vais donc chercher à extraire les lignes comportant trois *
en
début de ligne et celles commençant par une *
et terminant par des
mots-clés (des :
suivis éventuellement d'un espace). L'expression
régulière n'est pas forcément parfaite mais ça me donne une première
-idée de ce que j'aurais besoin de faire en terme de remise en forme.
+idée de ce que j'aurai besoin de faire en terme de remise en forme.
grep -e '^\*\*\* ' -e '^\*.*:.*: *$' ~/org/journal.org | tail -n 20 +grep -e '^\*\*\* ' -e '^\*.*:.*: *$' ~/org/journal.org | tail -n 20
OK, je suis sur la bonne voie. Je vois qu'il y a pas mal d'entrées -sans annotations. Tant pis. Il y a aussi souvent plusieurs mots-clés +sans annotation. Tant pis. Il y a aussi souvent plusieurs mots-clés pour une même date et pour pouvoir bien rajouter la date du jour en -face de chaque mots-clés, je vais essayer un vrai langage plutôt que +face de chaque mot-clé, je vais essayer un vrai langage plutôt que d'essayer de faire ça à coup de commandes shell. Je suis de l'ancienne -génération donc j'ai plus l'habitude de perl que de python pour ce +génération donc j'ai plus l'habitude de Perl que de Python pour ce genre de choses. Curieusement, ça s'écrit bien plus facilement (ça m'a pris 5 minutes) que ça ne se relit… ☺
open INPUT, "/home/alegrand/org/journal.org" or die $_; -open OUTPUT, "> ./org_keywords.csv" or die; -$date=""; -print OUTPUT "Date,Keyword\n"; -%skip = my %params = map { $_ => 1 } ("", "ATTACH", "Alvin", "Fred", "Mt", "Henri", "HenriRaf"); - -while(defined($line=<INPUT>)) { - chomp($line); - if($line =~ '^\*\*\* (20[\d\-]*)') { - $date=$1; +open INPUT, "/home/alegrand/org/journal.org" or die $_; +open OUTPUT, "> ./org_keywords.csv" or die; +$date=""; +print OUTPUT "Date,Keyword\n"; +%skip = my %params = map { $_ => 1 } ("", "ATTACH", "Alvin", "Fred", "Mt", "Henri", "HenriRaf"); + +while(defined($line=<INPUT>)) { + chomp($line); + if($line =~ '^\*\*\* (20[\d\-]*)') { + $date=$1; } - if($line =~ '^\*.*(:\w*:)\s*$') { - @kw=split(/:/,$1); - if($date eq "") { next;} - foreach $k (@kw) { - if(exists($skip{$k})) { next;} - print OUTPUT "$date,$k\n"; - } + if($line =~ '^\*.*(:\w*:)\s*$') { + @kw=split(/:/,$1); + if($date eq "") { next;} + foreach $k (@kw) { + if(exists($skip{$k})) { next;} + print OUTPUT "$date,$k\n"; + } } }
-Vérifions à quoi ressemble le résultat: +Vérifions à quoi ressemble le résultat :
head org_keywords.csv -echo "..." +echo "..." tail org_keywords.csv
-C'est parfait! +C'est parfait !
-Je suis bien plus à l'aise avec R qu'avec python. J'utiliserai les +Je suis bien plus à l'aise avec R qu'avec Python. J'utiliserai les package du tidyverse dès que le besoin s'en fera sentir. Commençons -par lire ces données: +par lire ces données :
library(lubridate) # à installer via install.package("tidyverse") -library(dplyr) -df=read.csv("./org_keywords.csv",header=T) +library(lubridate) # à installer via install.package("tidyverse") +library(dplyr) +df=read.csv("./org_keywords.csv",header=T) df$Year=year(date(df$Date))
+ Attachement du package : ‘lubridate’ The following object is masked from ‘package:base’: @@ -336,10 +442,9 @@ The following objects are masked from ‘package:base’:
-Alors, à quoi ressemblent ces données: +Alors, à quoi ressemblent ces données :
str(df) summary(df)@@ -361,12 +466,11 @@ summary(df)
-Les types ont l'air correct, 568 entrées, tout va bien. +Les types ont l'air corrects, 568 entrées, tout va bien.
df %>% group_by(Keyword, Year) %>% summarize(Count=n()) %>% - ungroup() %>% arrange(Keyword,Year) -> df_summarized +df %>% group_by(Keyword, Year) %>% summarize(Count=n()) %>% + ungroup() %>% arrange(Keyword,Year) -> df_summarized df_summarized
-Commençons par compter combien d'annotation je fais par an. +Commençons par compter combien d'annotations je fais par an.
df_summarized_total_year = df_summarized %>% group_by(Year) %>% summarize(Cout=sum(Count)) +df_summarized_total_year = df_summarized %>% group_by(Year) %>% summarize(Cout=sum(Count)) df_summarized_total_year
df_summarized %>% group_by(Keyword) %>% summarize(Count=sum(Count)) %>% arrange(Count) %>% as.data.frame() +df_summarized %>% group_by(Keyword) %>% summarize(Count=sum(Count)) %>% arrange(Count) %>% as.data.frame()
-OK, par la suite, je me restraindrai probablement ceux qui +OK, par la suite, je me restraindrai probablement à ceux qui apparaissent au moins trois fois.
Pour bien faire, il faudrait que je mette une sémantique et une hiérarchie sur ces mots-clés mais je manque de temps là. Comme j'enlève les mots-clés peu fréquents, je vais quand même aussi -rajouter le nombre total de mots-clé pour avoir une idée de ce que -j'ai perdu. Tentons une première représentation graphique: +rajouter le nombre total de mots-clés pour avoir une idée de ce que +j'ai perdu. Tentons une première représentation graphique :
library(ggplot2) -df_summarized %>% filter(Count > 3) %>% +library(ggplot2) +df_summarized %>% filter(Count > 3) %>% ggplot(aes(x=Year, y=Count)) + - geom_bar(aes(fill=Keyword),stat="identity") + - geom_point(data=df_summarized %>% group_by(Year) %>% summarize(Count=sum(Count))) + + geom_bar(aes(fill=Keyword),stat="identity") + + geom_point(data=df_summarized %>% group_by(Year) %>% summarize(Count=sum(Count))) + theme_bw()
Aouch. C'est illisible avec une telle palette de couleurs mais vu -qu'il y a beaucoup de valeurs différences, difficile d'utiliser une +qu'il y a beaucoup de valeurs différentes, difficile d'utiliser une palette plus discriminante. Je vais quand même essayer rapidement histoire de dire… Pour ça, j'utiliserai une palette de couleur ("Set1") où les couleurs sont toutes bien différentes mais elle n'a @@ -512,17 +613,16 @@ mots-clés les plus fréquents.
library(ggplot2) +frequent_keywords = df_summarized %>% group_by(Keyword) %>% + summarize(Count=sum(Count)) %>% arrange(Count) %>% + as.data.frame() %>% tail(n=9) -library(ggplot2) -frequent_keywords = df_summarized %>% group_by(Keyword) %>% - summarize(Count=sum(Count)) %>% arrange(Count) %>% - as.data.frame() %>% tail(n=9) - -df_summarized %>% filter(Keyword %in% frequent_keywords$Keyword) %>% +df_summarized %>% filter(Keyword %in% frequent_keywords$Keyword) %>% ggplot(aes(x=Year, y=Count)) + - geom_bar(aes(fill=Keyword),stat="identity") + - geom_point(data=df_summarized %>% group_by(Year) %>% summarize(Count=sum(Count))) + - theme_bw() + scale_fill_brewer(palette="Set1") + geom_bar(aes(fill=Keyword),stat="identity") + + geom_point(data=df_summarized %>% group_by(Year) %>% summarize(Count=sum(Count))) + + theme_bw() + scale_fill_brewer(palette="Set1")
Seminar
ne signifie pas grand
chose car ce n'est que récemment que j'ai commencé à étiqueter
systématiquement les notes que je prenais quand j'assiste à un
exposé. Les étiquettes sur WP
ont trait à la terminologie d'un ancien
-projet ANR que j'ai continuer à utiliser (WP4
= prédiction de
+projet ANR que j'ai continué à utiliser (WP4
= prédiction de
performance HPC, WP7
= analyse et visualisation, WP8
= plans
-d'expérience et moteurs d'expérimentation, …). Le fait que WP4
+d'expérience et moteurs d'expérimentation…). Le fait que WP4
diminue est plutôt le fait que les informations à ce sujet sont
maintenant plutôt les journaux de mes doctorants qui réalisent
vraiment les choses que je ne fais que superviser.
@@ -551,18 +651,17 @@ vraiment les choses que je ne fais que superviser.
Bon, une analyse de ce genre ne serait pas digne de ce nom sans un wordcloud (souvent illisible, mais tellement sexy! ☺). Pour ça, je -m'inspire librement de ce post: +m'inspire librement de ce post : http://onertipaday.blogspot.com/2011/07/word-cloud-in-r.html
library(wordcloud) # à installer via install.package("wordcloud") -library(RColorBrewer) -pal2 <- brewer.pal(8,"Dark2") -df_summarized %>% group_by(Keyword) %>% summarize(Count=sum(Count)) -> df_summarized_keyword +library(wordcloud) # à installer via install.package("wordcloud") +library(RColorBrewer) +pal2 <- brewer.pal(8,"Dark2") +df_summarized %>% group_by(Keyword) %>% summarize(Count=sum(Count)) -> df_summarized_keyword wordcloud(df_summarized_keyword$Keyword, df_summarized_keyword$Count, - random.order=FALSE, rot.per=.15, colors=pal2, vfont=c("sans serif","plain")) + random.order=FALSE, rot.per=.15, colors=pal2, vfont=c("sans serif","plain"))