(En consultation web, la navigation est possible par un menu latéral ou une icône )
Développer les capacités suivantes:
Cette étude s’inscrit dans un projet collectif de création à l’INSA d’un petit guide Interactions Savoureuses: du Jardin à l’Assiette qui contiendra des fiches de recettes culinaires associées à des recommandations pour faciliter la culture des espèces végétales utilisées.
Pour le moment, nous nous concentrons sur les garnitures de crêpes et des galettes selon le déroulement proposé suivant:
Le principe de cette disposition est très simple: si l’on passe d’une parcelle à l’autre, en tournant autour du tas de compost (en sens inverse du sens trigonométrique), chaque parcelle favorise l’espèce cultivée sur la parcelle suivante.
Les données décrivant les interactions entre espèces sont fournies. Elles proviennent du site monpotagerorg.
D’autres données à utiliser de façon optionnelle sont fournies. Elles proviennent du site bioindication (version éducation) et décrivent les conditions de culture favorables de certaines des espèces.
A la fin de l’étude, avant de sortir la bêche et la brouette … la recette et le jardin seront proposés aux collègues sur l’intranet. Pour mettre à disposition votre contribution vous devrez vous positionner au choix dans une des trois catégories suivantes: (1) esthétique et gourmandise, (2) algorithmes et codage, (3) écosystème et interactions.
La programmation s’effectuera en python, en tirant parti des cours sur les graphes et les fichiers.
Cette ensemble n’est pas quelconque. Il a été choisi afin que pour tout sommet de l’ensemble et pour tout sommet , on puisse toujours aller de à en utilisant une séquence d’arcs favorise (on parle de chemin allant de à ).
Ainsi, en choisissant et comme deux des ingrédients principaux de la recette dans cet ensemble, nous sommes sûr qu’il existe un chemin de à et aussi de à , ces deux chemins étant formés d’arcs favorise. Ces deux chemins vont constituer un circuit tels que ceux que nous cherchons pour concevoir notre jardin.
Un des objectifs pédagogiques principaux étant la manipulation de graphes, pour ces extensions privilégier la réalisation de nouveaux programmes parcourant les arcs et les sommets. Il est bien sûr possible d’utiliser directement les sites monpotagerorg et bioindication pour alimenter les réflexions ou vérifier des résultats obtenus par les programmes (attention toutefois à la correspondance entre les noms vernaculaires[1] des espèces qui n’est pas de 100% entre les sites).
Enfin, noter que ces pistes d’extensions ne sont que quelques propositions, ne pas hésiter à essayer d’autres investigations à partir des données fournies ou en utilisant d’autres sources d’informations.
Les données sont fournies sous la forme de fichiers texte au format CSV. Ces données sont des versions nettoyées et homogénéisées, elles ont été préparées à partir des données disponibles sur les sites monpotagerorg et bioindication. Dans les fichiers les lettres majuscules ont été remplacées par des minuscules, et les accents[2] ont été supprimés pour simplifier les traitements ultérieurs. Enfin, dans le fichier data_sommets_bioindicateurs.csv, obtenu par prétraitement du site bioindication, les noms des espèces ont été uniformisés pour correspondre aux noms provenant du site monpotagerorg.
Provenance des données: Par prétraitement sur les données de monpotagerorg.
Ce fichier contient 845 interactions. Chaque interaction est décrite par une espèce source, le type d’interaction et une espèce cible. Il y a 4 types d’interactions: favorise, defavorise, attire et repousse.
Exemples d’interactions présentes dans ce fichier:
source | type | cible |
---|---|---|
ail | favorise | pecher |
ail | favorise | pommier |
amarante | attire | carabe |
amarante | defavorise | mache |
aneth | defavorise | carotte |
aneth | repousse | puceron |
Provenance des données: Par prétraitement sur les données de monpotagerorg.
Il contient les noms des 156 espèces utilisées dans data_arcs.csv et pour chaque espèce sa catégorie, parmi 8 catégories possibles:
auxiliaire (espèces plutôt favorables aux plantes), nuisible (espèces en général plutôt défavorables), arbre, aromate, cereale, fleur, fruit, legume.
Remarque: Le terme nuisible est employé ici au sens de pouvant nuire aux cultures. C’est une notion discutable et subjective.
Exemples d’espèces décrites dans le format du fichier:
espèce | catégorie |
---|---|
abeille | auxiliaire |
absinthe | aromate |
achillee millefeuille | fleur |
agrume | fruit |
ail | legume |
altise du colza | nuisible |
Provenance des données: Fichier obtenu à partir du fichier data_arcs.csv complété avec des poids aléatoires pour les arcs favorise. Ces poids ne sont pas réalistes.
Ce fichier contient les mêmes interactions que le fichier data_arcs.csv avec en plus un poids pour chaque arc. Les arcs de type defavorise, attire et repousse ont un poids de 0. Le poids des arcs de type favorise représente la quantité de compost nécessaire lorsque l’on souhaite ajouter la parcelle de l’espèce cible à coté de la parcelle contenant l’espèce source.
Remarque: Pour des raisons de temps, nous simplifions le problème en considérant qu’il s’agit d’ajouts de parcelles de tailles standards pour les espèces cibles, sans prendre en compte les rendements attendus ni les quantités réelles d’ingrédients que l’on souhaite obtenir.
Exemples d’interactions et de poids dans le format du fichier:
source | type | cible | poids |
---|---|---|---|
ail | favorise | pecher | 1 |
ail | favorise | pommier | 10 |
amarante | attire | carabe | 0 |
amarante | defavorise | mache | 0 |
aneth | defavorise | carotte | 0 |
aneth | repousse | puceron | 0 |
Provenance des données: Par prétraitement sur les données de bioindication.
Ce fichier contient des indicateurs concernant les environnements propices au développement de certaines espèces. Ces indicateurs ont tous été normalisés sur une échelle de 1 et 9, sauf pour l’indicateur correspondant à l’humidité du sol qui varie ici de 1 à 12.
Remarque: Ce fichier est incomplet. Les indicateurs sont présents pour environ la moitié des espèces du fichier data_arcs.csv.
Les différents indicateurs sont:
Le détail de ces échelles de valeurs est fourni en annexe.
Exemples de bioindicateurs dans le format du fichier:
espece | lumiere | temperature | humidite | pH | niveau trophique | texture | matiere organique |
---|---|---|---|---|---|---|---|
cassis | 4.0 | 5.0 | 9.0 | 6.0 | 5.0 | 1.0 | 9.0 |
celeri | 7.0 | 5.0 | 8.0 | 6.0 | 5.0 | 2.0 | 8.0 |
fenouil | 7.0 | 7.0 | 4.0 | 8.0 | 8.0 | 3.0 | 2.0 |
kiwi | 5.0 | 8.0 | 7.0 | 8.0 | 5.0 | 1.0 | 8.0 |
moutarde | 8.0 | 6.0 | 7.0 | 7.0 | 8.0 | 1.0 | 3.0 |
import csv
with open("./data_arcs.csv", newline="") as csvfile:
reader = csv.reader(csvfile, delimiter=";")
adjacents = {} # Dictionnaire contenant comme clefs les sommets et
# comme valeurs la liste des sommets pouvant etre rejoints
# depuis le sommet designe par la clef.
# Seuls les arcs de type "favorise" sont retenus ici.
for ligne in reader:
source, interaction, cible = ligne
if interaction == "favorise":
if source not in adjacents: # si la clef n'existe pas encore
adjacents[source] = [cible] # on cree l'entree
else: # sinon on ajoute l'element a la liste des sommets adjacents
adjacents[source].append(cible)
Tester l’existence d’un chemin entre deux sommets dans un graphe orienté par un algorithme de type Breadth-First Search (BFS).
def existe_chemin_BFS(adjacents, depart, arrivee):
a_explorer = [depart]
deja_collectes = [depart]
while len(a_explorer) != 0:
courant = a_explorer.pop(0)
if courant == arrivee:
return(True)
if courant in adjacents:
for sommet in adjacents[courant]:
if sommet not in deja_collectes:
a_explorer.append(sommet)
deja_collectes.append(sommet)
return(False)
Déterminer un des plus courts chemins entre deux sommets dans un graphe orienté en utilisant un algorithme de type Breadth-First Search (BFS). Le programme renvoie None si il n’y a pas de chemin entre le sommet de départ et le sommet d’arrivée.
def calcul_chemin_BFS(adjacents, depart, arrivee):
a_explorer = [depart]
deja_collectes = [depart]
chemins = {depart: [depart]}
while len(a_explorer) != 0:
courant = a_explorer.pop(0)
if courant == arrivee:
return(chemins[arrivee])
if courant in adjacents:
for sommet in adjacents[courant]:
if sommet not in deja_collectes:
a_explorer.append(sommet)
deja_collectes.append(sommet)
chemins[sommet] = chemins[courant] + [sommet]
return(None)
Il existe différents outils pour dessiner des graphes (logiciels, papier/crayons, modules de fonctions python, …) et le choix est libre pour cette étude.
Nous suggérons ici une façon simple d’obtenir des tracés raisonnablement lisibles de graphes, notamment pour des graphes calculés par programme. Elle consiste à décrire le graphe à l’aide du langage DOT et à utiliser ensuite un logiciel pour en obtenir le tracé (tel que la suite graphviz). Un dessin du graphe donné en introduction peut être obtenu par sa description en langage DOT suivante:
digraph {
layout="circo"
"thym d'hiver" -> granolle
granolle -> tomate
tomate -> zoumdaf
zoumdaf -> millepertuis
millepertuis -> "thym d'hiver"
}
Le mot digraph spécifie qu’il s’agît d’un graphe orienté. L’instruction layout=“circo” indique que les sommets doivent être préférentiellement placés en cercle. Ensuite, chaque ligne décrit un arc, en utilisant des délimiteurs guillemets pour encadrer les noms de sommets contenant des espaces. Enfin, la description se termine par une accolade, comme elle avait commencé.
Cette description est à écrire dans un fichier texte ou sur un site web de dessin de graphes en langage DOT. Nous allons illustrer ces deux possibilités, mais nous préconisons l’utilisation de la première telle que décrite dans la section suivante.
Sur le système Linux du bureau virtuel INSA un utilitaire est déjà installé et permet de produire le dessin d’un graphe (à partir de sa description DOT) en réalisant les étapes suivantes:
dot -Tpng description_graphe_01.dot -o dessin_graphe_01.png
Le nom de fichier description_graphe_01.dot désigne le fichier d’entrée. L’option -o indique le nom du fichier de sortie. L’option -Tpng indique le format de dessin souhaité (ici png, parmi les autres formats pdf est aussi possible). Pour les fichiers d’entrée, l’extension .dot est conseillée, mais ce sont de simples fichiers texte et d’autres extensions, telle que .txt sont aussi utilisables.
Il suffit dans ce cas de copier tout le texte de la description DOT du graphe sur un site offrant ce service de rendu graphique. Par exemple, copier ce texte dans la fenêtre d’édition sur le site https://edotor.net, qui fournit alors une visualisation du graphe. Sur ce site l’onglet Download permet ensuite d’obtenir une version png du dessin, et l’onglet Load sample permet d’accéder à différents exemples écrits dans le langage DOT.
Ce site est complètement indépendant de l’INSA, mais il nous a semblé pouvoir être utilisé pour des petits graphes sans caractère confidentiel. La préconisation reste cependant d’utiliser préférentiellement la commande dot dans la console Linux du bureau virtuel INSA tel que décrit dans la section précédente.
Dans ce langage on peut placer des commentaires en débutant une ligne par #. Ceci permet ainsi de désactiver une instruction. Par exemple, un # devant l’instruction layout=“circo” va permettre de désactiver la présentation en cercle des sommets.
De nombreuse commandes sont disponibles. On notera en particulier qu’en début de description il est possible de spécifier une couleur par défaut pour tous les arcs:
# Par défaut tous les arcs seront bleus:
edge [color=Blue]
ou encore d’indiquer une étiquette par défaut sur tous les arcs:
# Par défaut tous les arcs porteront l'étiquette "favorise":
edge [label="favorise"]
Chaque arc pouvant ensuite avoir des caractéristiques de présentation qui lui sont propres. Ainsi un arc rouge avec une étiquette défavorise entre une espèce limace et zoumdaf peut être créé en ajoutant:
limace -> zoumdaf [color=Red, label="defavorise"]
Voici le dessin obtenu avec ces différents ajouts (en désactivant également l’option layout=“circo”):
Voici un exemple de court programme générant dans la console (à l’aide d’instructions print) la description DOT d’un graphe aléatoire:
import random
random.seed(14)
print("digraph {")
for i in range(38):
print(random.randint(1,24), "->", random.randint(1,24))
print("}")
Après l’avoir exécuté, on peut alors directement faire un copier/coller manuel de sa sortie. Il est aussi possible de remplacer les print par des écritures vers un fichier texte pour obtenir à l’aide du programme le fichier DOT lui-même.
A la fin des deux premières heures, envoyer à l’enseignant une proposition préliminaire de jardin, incluant le graphe des constituants et les arcs favorise les reliant. Envoyer le document au format pdf (ce peut être un scan d’un schéma réalisé à main levée).
A la fin de l’étude, déposer sur l’intranet un document présentant votre recette et le jardin final. Le document sera au format pdf et comportera au plus trois pages (la taille recommandée est de deux pages en comptant les schémas et images éventuelles). Ce document inclura:
Le nom du fichier pdf indiquera le numéro de votre groupe de TD et les noms des participants à l’étude.
Enfin, déposer également sur l’intranet par l’intermédiaire d’un autre lien un fichier .zip contenant les codes sources python des traitements que vous avez réalisés. Comme pour le nom du pdf, le nom de l’archive zip indiquera le numero de votre groupe de TD et les noms des participants.
Attention … Les ajouts dans le jardin ne s’effectueront pas avec les boutons:
En effet, ce site est un site participatif pour collecter des données et ces boutons permettent d’ajouter des éléments dans la base de données (en prenant soin de bien les vérifier évidemment) et ne sont pas à utiliser pour réaliser des ajouts dans le jardin.
Une petite séquence de manipulations pour tester la construction d’un jardin:
Chercher pommier:
Cliquer pommier, dans la liste proposée, pour l’ajouter au jardin:
Automatiquement apparaissent des pucerons, une espèce défavorable au pommier.
Ajouter framboisier qui n’a pas d’interaction avec les deux espèces précédentes.
Dans le graphe, sélectionner le sommet pommier pour faire apparaître sa fiche descriptive à gauche. Sur la fiche cliquer +8 dans l’inventaire:
La liste des espèces favorisées par le pommier apparaît à droite. Sélectionner trèfle blanc pour l’ajouter au jardin. Il repousse les pucerons.
Commandes divers:
Ouvrir la page bioindication et choisir un nom d’espace de travail. Cet espace sera sauvegarder automatiquement sur le site.
Un espace peu contenir plusieurs inventaires. Un inventaire va contenir les espèces observées sur une zone. Pour notre étude un inventaire pourra décrire un jardin (toutes les parcelles)[3]. Créer un inventaire en cliquant sur la bouton AJOUTER à gauche.
Ensuite cliquer sur le bouton AJOUTER du milieu pour ajouter des espèces dans l’inventaire. Ajouter par exemple le pommier (Malus domestica), le framboisier (Rubus idaeus) et le trèfle blanc (Trifolium repens). Lors de ces ajouts il n’est pas nécessaire d’indiquer la quantité observée (il s’agit d’une unité abstraite qui a pour objet simplement de permettre d’indiquer des abondances relatives entre espèces selon la quantité observée).
Cliquer sur l’onglet Bioindication pour voir le profil moyen favorable aux espèces contenues dans l’inventaire. Pour chaque indicateur sa valeur moyenne au sein de l’inventaire est indiquée, ainsi que son écart type (entre crochets). Moyennes et écarts types sont également indiqués sous forme graphique en rose (lignes et pastilles)[4] [5].
Dans l’onglet Observation les liens Voir fiche permettent d’obtenir les descriptifs des espèces et leurs indicateurs propres. Remarque: les indicateurs ne sont pas renseignés pour toutes les espèces. C’est le cas par exemple pour le framboisier de l’espèce Rubus sachalinensis si c’est celui-ci qui est ajouté dans l’inventaire (au lieu de Rubus idaeus).
L’onglet Biodiversité donne un score abstrait de biodiversité entre les espèces de l’inventaire. Ce score reflète l’éloignement de ces espèces dans l’arbre du vivant lifemap (présentation lifemap). Le bouton ACCEDER Lifemap permet de voir dans cette arbre les positions des espèces de l’inventaire.
La suppression et le renommage d’un inventaire sont possibles en passant par l’onglet Paramètres.
L’onglet Suggestion n’est pas fonctionnel dans cette version du site pour l’enseignement.
Si l’un des sites indiqués dans le document n’est pas accessible ou dysfonctionne prévenir l’enseignant qui fera remonter l’information pour intervention.
Site monpotagerorg: http://monpotagerorg.herokuapp.com/
Site bioindication: https://educ.bioindication.com/
Le site bioindication contient des liens permettant d’explorer l’arbre du vivant sur lifemap:
Listes données sur bioindication:
Les noms d’usages. ↩︎
Accents, trémas, cédilles, etc. ↩︎
Pour une utilisation plus fine en bioindication, un inventaire correspondra à un carré de 1 à 2 mètres de coté, dans lequel on recensera de 10 à 20 espèces poussant spontanément dans cette zone. Les valeurs des bioindicateurs obtenues permettant alors de suggérer de nouvelles espèces pour lesquelles ces conditions seraient favorables. ↩︎
Si plusieurs inventaires ont été saisis au sein d’un même espace, dans ce cas les moyennes et écarts types des indicateurs sur l’ensemble de ces inventaires sont indiqués également (lignes et pastilles blanches). ↩︎
Si des quantités observées ont été indiquées dans un inventaire, les moyennes et écarts types sont alors calculés de façon pondérées à partir des abondances relatives. ↩︎