Etude InSavour - Interactions Savoureuses - v02.8

Sommaire

(En consultation web, la navigation est possible par un menu latéral ou une icône )


Objectif pédagogique

Développer les capacités suivantes:

  1. Manipuler des liens d’interactions entre espèces dans un écosystème.
  2. Lire des données provenant de fichiers texte de type CSV.
  3. Stocker et manipuler des graphes dans des structures de données.
  4. Parcourir ces graphes pour calculer des chemins.

Objectif de l’étude et déroulement

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:







graph_favorise_simple



thym d'hiver

thym d'hiver



granolle

granolle



thym d'hiver->granolle


favorise



tomate

tomate



granolle->tomate


favorise



zoumdaf

zoumdaf



tomate->zoumdaf


favorise



millepertuis

millepertuis



zoumdaf->millepertuis


favorise



millepertuis->thym d'hiver


favorise




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.


Quelques détails


Etapes de l’étude

  1. Constituer les binômes/trinômes.
  2. Passer en revue, au moins rapidement, l’ensemble des informations et indices fournis dans la suite du document. S’organiser par rapport à la durée globale de l’étude qui inclut 6h de séances encadrées. Prévoir les rendus, dont l’esquisse de jardin à envoyer après les deux premières heures (cette pré-version pourra évoluer fortement ensuite).
  3. Explorer un peu les deux sites monpotagerorg et bioindication à partir de la prise en main rapide de monpotagerorg et de celle du site bioindication. Ceci pourra se poursuivre en dehors des séances encadrées.
  4. Choisir X et Y deux ingrédients principaux pour la recette parmi l’ensemble de sommets suivant:
    genet, topinambour, pissenlit, cassis, lin, carotte sauvage, cumin, cerfeuil commun, melisse citronnelle, groseillier, sauge, moutarde, morelle de balbis, ciboulette chinoise, anis, panais, courgette, cornichon, bourrache officinale, sarriette, feve, melon, tournesol, echalote, thym, romarin, achillee millefeuille, prunier, framboisier, cerisier, rue fetide, navet, roquette, chicoree, epinard, artichaut, persil, agrume, lavande, rosier, tanaisie commune, courge, origan, vigne, poirier commun, trefle blanc, mache, potiron, mais, haricot, pasteque, cosmos, tomate, basilic, fenouil, celeri, betterave, coriandre, pois, camomille allemande, kiwi, pomme de terre, asperge, concombre, aneth, chou, laitue, oignon, fraisier des bois, souci, phacelie, pommier, ciboulette, pecher, ail, carotte, poireau, cresson, radis

Cette ensemble n’est pas quelconque. Il a été choisi afin que pour tout sommet A de l’ensemble et pour tout sommet B, on puisse toujours aller de A à B en utilisant une séquence d’arcs favorise (on parle de chemin allant de A à B).
Ainsi, en choisissant X et Y comme deux des ingrédients principaux de la recette dans cet ensemble, nous sommes sûr qu’il existe un chemin de X à Y et aussi de Y à X, 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.

  1. Pour le couple (X,Y) choisi, utiliser/adapter les données et les codes fournis pour calculer des chemins parmi les plus courts de X à Y et de Y à X. Les sommets situés sur ces chemins vont fournir un canevas de base pour choisir et placer les parcelles.
  2. Envisager différentes recettes en essayant d’autres paires d’ingrédients principaux.
  3. Une fois qu’un premier jardin et une première recette ont été conçus, poursuivre l’étude en développant un ou plusieurs autres programmes. Quelques pistes d’extension sont proposées ci-dessous:
    • Evaluer combien d’auxiliaires sont attirés par les plantes du jardin. Choisir entre plusieurs recettes celle ayant un jardin qui attire le plus d’auxiliaires.
    • Agrandir le jardin en essayant d’inclure plus d’ingrédients de la recette et en tirant avantage des arcs favorise partant des ingrédients déjà présents pour ajouter de nouvelles parcelles adjacentes (mais pas forcément placées autour du tas de compost).
    • Utiliser les données de bioindication fournies pour certaines espèces et évaluer si les conditions de culture favorables sont homogènes entre les différentes parcelles prévues, par exemple pour la lumière ou l’humidité.
    • Utiliser des données permettant de pondérer les arcs, comme par exemple les données fournies de coût en compost, et implémenter des traitements tels que l’algorithme de Djikstra pour calculer des chemins de poids minimal.

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.


Données fournies

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.

Fichier nécessaire data_arcs.csv

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
ailfavorisepecher
ailfavorisepommier
amaranteattirecarabe
amarantedefavorisemache
anethdefavorisecarotte
anethrepoussepuceron

Fichier optionnel data_sommets_categories.csv

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
abeilleauxiliaire
absinthearomate
achillee millefeuillefleur
agrumefruit
aillegume
altise du colzanuisible

Fichier optionnel data_arcs_poids.csv

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
ailfavorisepecher 1
ailfavorisepommier 10
amaranteattirecarabe 0
amarantedefavorisemache 0
anethdefavorisecarotte 0
anethrepoussepuceron 0

Fichier optionnel data_sommets_bioindicateurs.csv

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:

  1. lumière: 1 très sombre à 9 très ensoleillé.
  2. température: 1 très froide à 9 très chaude.
  3. humidité: humidité du sol de 1 très sec à 12 très humide.
  4. pH du milieu: 1 très acide à 9 très basique (ce n’est pas l’échelle classique de pH).
  5. niveau trophique: 1 pauvre en nutriments à 9 riche en nutriments.
  6. texture: texture du sol allant de 1 texture très fine (argile) à 9 texture très grossière (dalle).
  7. matière organique: 1 pauvre en matière organique à 9 riche en matière organique.

Le détail de ces échelles de valeurs est fourni en annexe.

Exemples de bioindicateurs dans le format du fichier:

especelumieretemperaturehumiditepHniveau trophique texture matiere organique
cassis4.05.09.06.05.01.09.0
celeri7.05.08.06.05.02.08.0
fenouil7.07.04.08.08.03.02.0
kiwi5.08.07.08.05.01.08.0
moutarde8.06.07.07.08.01.03.0

Exemples de codes pouvant être utiles

Lecture du fichier des arcs

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)

BFS - Test d’existence d’un chemin

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)

BFS - Calcul d’un plus court chemin

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)

Dessiner un graphe avec le langage DOT

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.

Obtention du dessin sur Linux

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:

  1. Copier la description dans un fichier texte, par exemple description_graphe_01.dot
  2. Ouvrir une console de commande dans le dossier où se trouve ce fichier et exécuter la commande:
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.

Obtention du dessin par un service en ligne

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.

Autres instructions DOT très utiles

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”):







%0



thym d'hiver

thym d'hiver



granolle

granolle



thym d'hiver->granolle


favorise



tomate

tomate



granolle->tomate


favorise



zoumdaf

zoumdaf



tomate->zoumdaf


favorise



millepertuis

millepertuis



zoumdaf->millepertuis


favorise



millepertuis->thym d'hiver


favorise



limace

limace



limace->zoumdaf


defavorise



Génération par programme d’une description DOT

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 rendre


Annexes


Visite rapide du site monpotagerorg

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.


Visite rapide du site bioindication


Accessibilité des sites et URL

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:


Légendes complètes des bioindicateurs

Listes données sur bioindication:




Notes de bas de page


  1. Les noms d’usages. ↩︎

  2. Accents, trémas, cédilles, etc. ↩︎

  3. 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. ↩︎

  4. 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). ↩︎

  5. 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. ↩︎