Commit 67cec455c8d6793e6fed327fb621ce2cc5762d11

Authored by Louis-Claude Canon
1 parent 678e756d8e
Exists in master

Cleaner build

Showing 5 changed files with 86 additions and 80 deletions Inline Diff

all: 1 1 FORMATION=besançon2_CMI besançon2 besançon bordeaux dijon_EI dijon_MI grenoble lyon nancy rennes
./script.sh 2 2 DATA=$(addsuffix .csv, $(addprefix data/, ${FORMATION}))
3 CAT=$(addsuffix .cat, ${DATA})
4
5 all: www/programme.html
6 %.cat: %
7 ./parse.sh $<
8 www/programme.html: www/programme.template ${CAT}
9 ./build.sh
deploy: 3 10 deploy:
scp -r www/* lccanon@lifc-home.univ-fcomte.fr:public_html/ 4 11 scp -r www/* lccanon@lifc-home.univ-fcomte.fr:public_html/
clean: 5 12 clean:
-rm data/*.cat data/*.theme data/theme.txt www/programme.html 2> /dev/null 6 13 -rm ${CAT} data/*.theme data/csv.cat data/csv.theme data/theme.txt www/programme.html 2> /dev/null
7 14
File was created 1 #! /bin/bash
2
3 # Generate web page with graphical results
4
5 cp www/programme.template www/programme.html
6
7 IFS=$'\n'
8 for FILE in $(ls -1 data)
9 do
10 if [ $(grep "\[$FILE\]" www/programme.html | tr -d '\n') ]
11 then
File was created 1 #! /bin/bash
2
3 cut -d ";" -f 4 data/*.csv | sort | uniq > data/theme.txt
4
5 THEMES=$(cat data/theme.txt | tr "\n" ",")
6 CATEGORIES=$(grep -o -E "^[^(]*" categorie.txt | sed "s/ $//" | tr "\n" ",")
7 THEMES=$(echo $THEMES | sed "s/,/\",\"/g" | sed "s/^/\"/" | sed "s/,\"$//")
8 CATEGORIES=$(echo $CATEGORIES | sed "s/,/\",\"/g" | sed "s/^/\"/" | sed "s/,\"$//")
9
10 echo $THEMES > data/csv.theme
11 echo $CATEGORIES > data/csv.cat
12
13 FORMATION=$1
14 echo -n $FORMATION
15
16 echo -n -e " ("
17 echo -n $(cut -d ";" -f 3 $FORMATION | paste -sd+ | bc)
18 echo " ECTS)"
19
20 > $FORMATION.theme
21 > $FORMATION.cat
22
23 echo -e "\tPar thème"
24
25 IFS=''
26 cat data/theme.txt |
27 while read THEME
28 do
29 echo -n -e "\t\t$THEME "
30 ECTS=$(grep $THEME$ $FORMATION | cut -d ";" -f 3)
31 if [[ -z "$ECTS" ]]
32 then
33 ECTS=0
34 fi
35 ECTS=$(echo $ECTS | tr ' ' '\n' | paste -sd+ | bc)
36 THEMES_ECTS=$THEMES_ECTS,$ECTS
37 echo -n "$ECTS," >> $FORMATION.theme
38 echo $ECTS
39 done
40 sed -i "s/,$/\n/" $FORMATION.theme
41
42 echo -e "\tPar catégorie"
43
44 IFS=''
45 cat categorie.txt |
#! /bin/bash 1 File was deleted
2
cut -d ";" -f 4 data/*.csv | sort | uniq > data/theme.txt 3
4
THEMES=$(cat data/theme.txt | tr "\n" ",") 5
CATEGORIES=$(grep -o -E "^[^(]*" categorie.txt | sed "s/ $//" | tr "\n" ",") 6
THEMES=$(echo $THEMES | sed "s/,/\",\"/g" | sed "s/^/\"/" | sed "s/,\"$//") 7
CATEGORIES=$(echo $CATEGORIES | sed "s/,/\",\"/g" | sed "s/^/\"/" | sed "s/,\"$//") 8
9
echo $THEMES > data/csv.theme 10
echo $CATEGORIES > data/csv.cat 11
12
for FORMATION in $(ls data/*.csv) 13
do 14
echo -n $FORMATION 15
16
echo -n -e " (" 17
echo -n $(cut -d ";" -f 3 $FORMATION | paste -sd+ | bc) 18
echo " ECTS)" 19
20
> $FORMATION.theme 21
> $FORMATION.cat 22
23
echo -e "\tPar thème" 24
25
IFS='' 26
cat data/theme.txt | 27
while read THEME 28
do 29
echo -n -e "\t\t$THEME " 30
ECTS=$(grep $THEME$ $FORMATION | cut -d ";" -f 3) 31
if [[ -z "$ECTS" ]] 32
then 33
ECTS=0 34
fi 35
ECTS=$(echo $ECTS | tr ' ' '\n' | paste -sd+ | bc) 36
THEMES_ECTS=$THEMES_ECTS,$ECTS 37
echo -n "$ECTS," >> $FORMATION.theme 38
echo $ECTS 39
done 40
sed -i "s/,$/\n/" $FORMATION.theme 41
42
echo -e "\tPar catégorie" 43
44
IFS='' 45
cat categorie.txt | 46
while read CAT 47
do 48
CATEGORIE=$(echo $CAT | grep -o -E "^[^(]*") 49
PATT=$(echo $CAT | grep -o "(.*)") 50
echo -n -e "\t\t$CATEGORIE" 51
ECTS=$(grep -E $PATT$ $FORMATION | cut -d ";" -f 3 | paste -sd+ | bc) 52
echo -n "$ECTS," >> $FORMATION.cat 53
echo $ECTS 54
done 55
sed -i "s/,$/\n/" $FORMATION.cat 56
done 57
www/programme.template View file @ 67cec45
<?xml version="1.0" encoding="utf-8"?> 1 1 <?xml version="1.0" encoding="utf-8"?>
<!doctype html> 2 2 <!doctype html>
<html> 3 3 <html>
<head> 4 4 <head>
<title>Programme de la licence Informatique</title> 5 5 <title>Programme de la licence Informatique</title>
<script src="Chart.js"></script> 6 6 <script src="Chart.js"></script>
<meta name = "viewport" content = "initial-scale = 1, user-scalable = no"> 7 7 <meta name = "viewport" content = "initial-scale = 1, user-scalable = no">
<meta charset="utf-8"> 8 8 <meta charset="utf-8">
</head> 9 9 </head>
<body> 10 10 <body>
<h1>Objectifs</h1> 11 11 <h1>Comparaison des licences informatiques</h1>
12 <h2>Objectifs</h2>
<p>L'analyse suivante compare le programme de plusieurs licences d'informatique. Il s'agit d'une approche quantitative qui mérite d'être améliorée (n'hésitez pas à me transmettre vos suggestions). L'objectif est d'identifier les lacunes que pourraient avoir nos étudiants qui intègrent d'autres masters qui correspondent mieux à leur projet, mais aussi les lacunes des étudiants extérieurs intégrant le M1.</p> 12 13 <p>L'analyse suivante compare le programme de plusieurs licences d'informatique. Il s'agit d'une approche quantitative qui mérite d'être améliorée (n'hésitez pas à me transmettre vos suggestions). L'objectif est d'identifier les lacunes que pourraient avoir nos étudiants qui intègrent d'autres masters qui correspondent mieux à leur projet, mais aussi les lacunes des étudiants extérieurs intégrant le M1.</p>
13 14
<h1>Protocole</h1> 14 15 <h2>Protocole</h2>
<p>Pour chaque formation, un thème a été associé à chaque enseignement ("compilation" par exemple), puis ces thèmes ont été regroupés dans des catégories plus larges de la façon suivante (chaque ligne correspond à une catégorie, les thèmes sont entre parenthèse) : 15 16 <p>Pour chaque formation, un thème a été associé à chaque enseignement ("compilation" par exemple), puis ces thèmes ont été regroupés dans des catégories plus larges de la façon suivante (chaque ligne correspond à une catégorie, les thèmes sont entre parenthèse) :
<ul> 16 17 <ul>
<li>Algorithmique (algorithmique)</li> 17 18 <li>Algorithmique (algorithmique)</li>
<li>Machine (architecture|système|réseau)</li> 18 19 <li>Machine (architecture|système|réseau)</li>
<li>Programmation (programmation|programmation fonctionnelle|programmation OO|web|outils de développement)</li> 19 20 <li>Programmation (programmation|programmation fonctionnelle|programmation OO|web|outils de développement)</li>
<li>Informatique fondamentale (calculabilité|compilation|langage|logique)</li> 20 21 <li>Informatique fondamentale (calculabilité|compilation|langage|logique)</li>
<li>Information (base de données|xml|modélisation)</li> 21 22 <li>Information (base de données|xml|modélisation)</li>
<li>Mathématiques (mathématiques)</li> 22 23 <li>Mathématiques (mathématiques)</li>
<li>Science (science)</li> 23 24 <li>Science (science)</li>
<li>Connexe (anglais|projet|stage)</li> 24 25 <li>Connexe (anglais|projet|stage)</li>
<li>Autre (autre|sécurité|graphique)</li> 25 26 <li>Autre (autre|sécurité|graphique)</li>
</ul> 26 27 </ul>
<p>Cette classification s'inspire de celle de Dowek (Algorithmique, Machine, Langage, Information).</p> 27 28 <p>Cette classification s'inspire de celle de Dowek (Algorithmique, Machine, Langage, Information).</p>
<p>Le nombre total d'ECTS attribué à chaque thème et à chaque catégorie a ensuite été calculé pour chaque formation.</p> 28 29 <p>Le nombre total d'ECTS attribué à chaque thème et à chaque catégorie a ensuite été calculé pour chaque formation.</p>
29 30
<h1>Limites de l'approche</h1> 30 31 <h2>Limites de l'approche</h2>
<p>Cette approche est limitée par la présence des options, le manque d'information (nombre d'ECTS ou contenu exact), l'orientation pluri-disciplinaire de certaines licences (mathématiques, électronique, ...), une catégorisation imparfaite (pour sécurité et graphique notamment) et une comparaison uniquement quantitative.</p> 31 32 <p>Cette approche est limitée par la présence des options, le manque d'information (nombre d'ECTS ou contenu exact), l'orientation pluri-disciplinaire de certaines licences (mathématiques, électronique, ...), une catégorisation imparfaite (pour sécurité et graphique notamment) et une comparaison uniquement quantitative.</p>
32 33
<h1>Résultats</h1> 33 34 <h2>Résultats</h2>
<p>Les formations considérées (dans le même ordre que sur les figures) : Besançon (181), Bordeaux 1 (180), Dijon EI (180), Dijon MI (180), Grenoble 1 (180), Lyon 1 (186), Nancy 1 (180) et Rennes 1 (177). Le nombre en parenthèse correspond au nombre d'ECTS total de la formation.</p> 34 35 <p>Les formations considérées (dans le même ordre que sur les figures) : Besançon (181), Bordeaux 1 (180), Dijon EI (180), Dijon MI (180), Grenoble 1 (180), Lyon 1 (186), Nancy 1 (180) et Rennes 1 (177). Le nombre en parenthèse correspond au nombre d'ECTS total de la formation.</p>
35 36
<canvas id="canvas1" height="600" width="1200"></canvas> 36 37 <canvas id="canvas1" height="600" width="1200"></canvas>
37 38
<p>On constate une forte hétérogénéité sur certains thèmes (du simple au double pour les mathématiques).</p> 38 39 <p>On constate une forte hétérogénéité sur certains thèmes (du simple au double pour les mathématiques).</p>
<p>Sur les thèmes qui dépassent 7,5 ECTS, la licence de Besançon se distingue en étant celle qui a le moins : d'algorithmique, de mathématiques et de programmation impérative. C'est également celle qui a le plus : de base de données (égalité avec Lyon et Nancy), de modélisation (égalité avec Dijon et Lyon), de science et de stage.</p> 39 40 <p>Sur les thèmes qui dépassent 7,5 ECTS, la licence de Besançon se distingue en étant celle qui a le moins : d'algorithmique, de mathématiques et de programmation impérative. C'est également celle qui a le plus : de base de données (égalité avec Lyon et Nancy), de modélisation (égalité avec Dijon et Lyon), de science et de stage.</p>
40 41
<canvas id="canvas2" height="600" width="1200"></canvas> 41 42 <canvas id="canvas2" height="600" width="1200"></canvas>
42 43
<p>L'hétérogénéité précédente est lissé avec les catégories plus larges. Les constats sont les mêmes : moins d'algorithmique et de mathématiques et plus d'information et de science que toutes les autres licences.</p> 43 44 <p>L'hétérogénéité précédente est lissé avec les catégories plus larges. Les constats sont les mêmes : moins d'algorithmique et de mathématiques et plus d'information et de science que toutes les autres licences.</p>
44 45
<h1>Évolution avec le CMI</h1> 45 46 <h2>Évolution avec le CMI</h2>
46 47
<p>Pour faciliter la lecture, voici un focus sur les formations les plus comparables (c'est-à-dire avec le moins de mathématiques) : Bordeaux 1, Nancy 1 et Rennes 1. La nouvelle licence non-CMI est rajoutée à droite (la licence actuelle étant toujours à gauche).</p> 47 48 <p>Pour faciliter la lecture, voici un focus sur les formations les plus comparables (c'est-à-dire avec le moins de mathématiques) : Bordeaux 1, Nancy 1 et Rennes 1. La nouvelle licence non-CMI est rajoutée à droite (la licence actuelle étant toujours à gauche).</p>
48 49
<canvas id="canvas4" height="600" width="1200"></canvas> 49 50 <canvas id="canvas4" height="600" width="1200"></canvas>
50 51
<p>Le nouveau programme rajoute des ECTS en Information au détriment de la Programmation.</p> 51 52 <p>Le nouveau programme rajoute des ECTS en Information au détriment de la Programmation.</p>
52 53
<h1>Perspectives</h1> 53 54 <h2>Perspectives</h2>
54 55
<p>Ces données suggèrent qu'il serait pertinent de rajouter 3 à 6 ECTS pour de l'algorithmique (le sujet est vaste) et autant pour les mathématiques (des choses spécifiques à la sécurité ou au graphisme par exemple) en prenant si besoin sur les catégories Information et Science.</p> 55 56 <p>Ces données suggèrent qu'il serait pertinent de rajouter 3 à 6 ECTS pour de l'algorithmique (le sujet est vaste) et autant pour les mathématiques (des choses spécifiques à la sécurité ou au graphisme par exemple) en prenant si besoin sur les catégories Information et Science.</p>
56 57
<script> 57 58 <script>
58 59
var barChartData1 = { 59 60 var barChartData1 = {
labels : [csv.theme], 60 61 labels : [csv.theme],
datasets : [ 61 62 datasets : [
{ 62 63 {
fillColor : "rgba(220,220,220,0.5)", 63 64 fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)", 64 65 strokeColor : "rgba(220,220,220,1)",
data : [besançon.csv.theme] 65 66 data : [besançon.csv.theme]
}, 66 67 },
{ 67 68 {
fillColor : "rgba(205,151,187,0.5)", 68 69 fillColor : "rgba(205,151,187,0.5)",
strokeColor : "rgba(205,151,187,1)", 69 70 strokeColor : "rgba(205,151,187,1)",
data : [bordeaux.csv.theme] 70 71 data : [bordeaux.csv.theme]
}, 71 72 },
{ 72 73 {
fillColor : "rgba(187,205,151,0.5)", 73 74 fillColor : "rgba(187,205,151,0.5)",
strokeColor : "rgba(187,205,151,1)", 74 75 strokeColor : "rgba(187,205,151,1)",
data : [dijon_EI.csv.theme] 75 76 data : [dijon_EI.csv.theme]
}, 76 77 },
{ 77 78 {
fillColor : "rgba(151,187,205,0.5)", 78 79 fillColor : "rgba(151,187,205,0.5)",
strokeColor : "rgba(151,187,205,1)", 79 80 strokeColor : "rgba(151,187,205,1)",
data : [dijon_MI.csv.theme] 80 81 data : [dijon_MI.csv.theme]
}, 81 82 },
{ 82 83 {
fillColor : "rgba(187,151,205,0.5)", 83 84 fillColor : "rgba(187,151,205,0.5)",
strokeColor : "rgba(187,151,205,1)", 84 85 strokeColor : "rgba(187,151,205,1)",
data : [grenoble.csv.theme] 85 86 data : [grenoble.csv.theme]
}, 86 87 },
{ 87 88 {
fillColor : "rgba(151,205,187,0.5)", 88 89 fillColor : "rgba(151,205,187,0.5)",
strokeColor : "rgba(151,205,187,1)", 89 90 strokeColor : "rgba(151,205,187,1)",
data : [lyon.csv.theme] 90 91 data : [lyon.csv.theme]
}, 91 92 },
{ 92 93 {
fillColor : "rgba(205,187,151,0.5)", 93 94 fillColor : "rgba(205,187,151,0.5)",
strokeColor : "rgba(205,187,151,1)", 94 95 strokeColor : "rgba(205,187,151,1)",
data : [nancy.csv.theme] 95 96 data : [nancy.csv.theme]
}, 96 97 },
{ 97 98 {
fillColor : "rgba(151,151,151,0.5)", 98 99 fillColor : "rgba(151,151,151,0.5)",
strokeColor : "rgba(151,151,151,1)", 99 100 strokeColor : "rgba(151,151,151,1)",
data : [rennes.csv.theme] 100 101 data : [rennes.csv.theme]
} 101 102 }
] 102 103 ]
103 104
} 104 105 }
105 106
var barChartData2 = { 106 107 var barChartData2 = {
labels : [csv.cat], 107 108 labels : [csv.cat],
datasets : [ 108 109 datasets : [
{ 109 110 {
fillColor : "rgba(220,220,220,0.5)", 110 111 fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)", 111 112 strokeColor : "rgba(220,220,220,1)",
data : [besançon.csv.cat] 112 113 data : [besançon.csv.cat]
}, 113 114 },
{ 114 115 {
fillColor : "rgba(205,151,187,0.5)", 115 116 fillColor : "rgba(205,151,187,0.5)",
strokeColor : "rgba(205,151,187,1)", 116 117 strokeColor : "rgba(205,151,187,1)",
data : [bordeaux.csv.cat] 117 118 data : [bordeaux.csv.cat]
}, 118 119 },
{ 119 120 {
fillColor : "rgba(187,205,151,0.5)", 120 121 fillColor : "rgba(187,205,151,0.5)",
strokeColor : "rgba(187,205,151,1)", 121 122 strokeColor : "rgba(187,205,151,1)",
data : [dijon_EI.csv.cat] 122 123 data : [dijon_EI.csv.cat]
}, 123 124 },
{ 124 125 {
fillColor : "rgba(151,187,205,0.5)", 125 126 fillColor : "rgba(151,187,205,0.5)",
strokeColor : "rgba(151,187,205,1)", 126 127 strokeColor : "rgba(151,187,205,1)",
data : [dijon_MI.csv.cat] 127 128 data : [dijon_MI.csv.cat]
}, 128 129 },
{ 129 130 {
fillColor : "rgba(187,151,205,0.5)", 130 131 fillColor : "rgba(187,151,205,0.5)",
strokeColor : "rgba(187,151,205,1)", 131 132 strokeColor : "rgba(187,151,205,1)",
data : [grenoble.csv.cat] 132 133 data : [grenoble.csv.cat]
}, 133 134 },
{ 134 135 {
fillColor : "rgba(151,205,187,0.5)", 135 136 fillColor : "rgba(151,205,187,0.5)",
strokeColor : "rgba(151,205,187,1)", 136 137 strokeColor : "rgba(151,205,187,1)",
data : [lyon.csv.cat] 137 138 data : [lyon.csv.cat]
}, 138 139 },
{ 139 140 {
fillColor : "rgba(205,187,151,0.5)", 140 141 fillColor : "rgba(205,187,151,0.5)",
strokeColor : "rgba(205,187,151,1)", 141 142 strokeColor : "rgba(205,187,151,1)",
data : [nancy.csv.cat] 142 143 data : [nancy.csv.cat]
}, 143 144 },
{ 144 145 {
fillColor : "rgba(151,151,151,0.5)", 145 146 fillColor : "rgba(151,151,151,0.5)",
strokeColor : "rgba(151,151,151,1)", 146 147 strokeColor : "rgba(151,151,151,1)",
data : [rennes.csv.cat] 147 148 data : [rennes.csv.cat]
} 148 149 }
] 149 150 ]
150 151
} 151 152 }
152 153
var barChartData3 = { 153 154 var barChartData3 = {
labels : [csv.theme], 154 155 labels : [csv.theme],
datasets : [ 155 156 datasets : [
{ 156 157 {
fillColor : "rgba(220,220,220,0.5)", 157 158 fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)", 158 159 strokeColor : "rgba(220,220,220,1)",
data : [besançon.csv.theme] 159 160 data : [besançon.csv.theme]
}, 160 161 },
{ 161 162 {
fillColor : "rgba(205,151,187,0.5)", 162 163 fillColor : "rgba(205,151,187,0.5)",
strokeColor : "rgba(205,151,187,1)", 163 164 strokeColor : "rgba(205,151,187,1)",
data : [bordeaux.csv.theme] 164 165 data : [bordeaux.csv.theme]
}, 165 166 },
{ 166 167 {
fillColor : "rgba(205,187,151,0.5)", 167 168 fillColor : "rgba(205,187,151,0.5)",
strokeColor : "rgba(205,187,151,1)", 168 169 strokeColor : "rgba(205,187,151,1)",
data : [nancy.csv.theme] 169 170 data : [nancy.csv.theme]
}, 170 171 },
{ 171 172 {
fillColor : "rgba(151,151,151,0.5)", 172 173 fillColor : "rgba(151,151,151,0.5)",
strokeColor : "rgba(151,151,151,1)", 173 174 strokeColor : "rgba(151,151,151,1)",
data : [rennes.csv.theme] 174 175 data : [rennes.csv.theme]
}, 175 176 },
{ 176 177 {
fillColor : "rgba(205,205,205,0.5)", 177 178 fillColor : "rgba(205,205,205,0.5)",
strokeColor : "rgba(205,205,205,1)", 178 179 strokeColor : "rgba(205,205,205,1)",
data : [besançon2.csv.theme] 179 180 data : [besançon2.csv.theme]
} 180 181 }
] 181 182 ]
182 183
} 183 184 }
184 185
var barChartData4 = { 185 186 var barChartData4 = {
labels : [csv.cat], 186 187 labels : [csv.cat],
datasets : [ 187 188 datasets : [
{ 188 189 {
fillColor : "rgba(220,220,220,0.5)", 189 190 fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)", 190 191 strokeColor : "rgba(220,220,220,1)",
data : [besançon.csv.cat] 191 192 data : [besançon.csv.cat]
}, 192 193 },
{ 193 194 {
fillColor : "rgba(205,151,187,0.5)", 194 195 fillColor : "rgba(205,151,187,0.5)",
strokeColor : "rgba(205,151,187,1)", 195 196 strokeColor : "rgba(205,151,187,1)",
data : [bordeaux.csv.cat] 196 197 data : [bordeaux.csv.cat]
}, 197 198 },
{ 198 199 {
fillColor : "rgba(205,187,151,0.5)", 199 200 fillColor : "rgba(205,187,151,0.5)",
strokeColor : "rgba(205,187,151,1)", 200 201 strokeColor : "rgba(205,187,151,1)",
data : [nancy.csv.cat] 201 202 data : [nancy.csv.cat]
}, 202 203 },
{ 203 204 {
fillColor : "rgba(151,151,151,0.5)", 204 205 fillColor : "rgba(151,151,151,0.5)",
strokeColor : "rgba(151,151,151,1)", 205 206 strokeColor : "rgba(151,151,151,1)",
data : [rennes.csv.cat] 206 207 data : [rennes.csv.cat]