Redirection de données

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Dans le cadre de mon projet MPF, j'ai besoin de manipuler des données et de procéder, me semble-t-il de cette manière.

Je me demandais s'il existait une bibliothèque Python pour faire cela, si ça portait un nom particulier, correspondait à un pattern

Merci. ^^

+0 -0

En Python, la stack d'outils scientifique classique est :

  • Numpy pour le type de base, les array, et les fonctions de base s'y rapportant.
  • Scipy qui rajoute quelques fonctions supplémentaires de plus souvent pratique (ex: optimisation, regression, etc.)
  • Pillow si tu manipule des images
  • Pandas pour le coté gestion de données pur et dur. Ça permet de manipuler tes données et de faire des traitements plus facilement, un mélange entre les array de numpy et une base de données. Tu peux grouper tes données, nommer et indexer chaque colonnes/lignes, etc.
  • Scikit-learn/sklearn pour tout ce qui est machine learning et prédiction.
  • matplotlib pour les graph.
  • IPython (projet Jupiter je crois maintenant) pour te faire des rapports de résultats reproductibles qui s'integre très bien avec tous les modules du dessus.

Après je ne suis pas surs de bien comprendre ce que tu veux faire précisément, ton lien n'est pas très clair.

Comment feriez-vous pour récupérer les données à la fin du dernier noeud Stats sachant que vous avez celles d'entrée (les Cow X, lact Y) et les fonctions de calcul pour chaque noeud ? Faire un truc comme ça me semble un peu crade :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
data_end = stats(
    merge(
        stats(
            merge(
                linreg(
                    identity(
                        cow1lact1
                    )
                ),
                linreg(
                    identity(
                        cow1lact2
                    )
                )
            )
        ),
        linreg(
            identity(
                cow2lact2
            )
        )
    )
)

ma = MA(cow1lact1)

Et inefficace dans le cas de traitements asynchrones.

+0 -0

Pardon, j'avais mal compris. Replaçons le contexte. ^^

Je possède une base de données remplie de cette sorte. Pour un jour et une vache donnés, je connais la production, la consommation, le numéro de la lactation et le numéro du jour dans la lactation.

Mon objectif est, à partir de ces données, de prévoir la production laitière. Cela se traduit par une suite d'opérations pour analyser les données :

  • Dessins de graphes
  • Moyennes mobiles
  • Régression linéaires
  • Modèle ARMA

Mon but ici est d'organiser mon code pour pouvoir facilement effectuer cette suite d'opérations, représentée par ce graphe :

Image utilisateur

(*)

Partons avec des données sous cette forme :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
cow1_lact1 = {
    "days": [1,2,3,...,350],
    "prods": [11,10,15,...,20]
}

cow1_lact2 = {
    "days": [1,2,3,...,343],
    "prods": [8,13,24,...,30]
}

cow2_lact1 = {
    "days": [1,2,3,...,385],
    "prods": [7,13,21,...,35]
}

Chaque analyse va modifier les données. Par exemple, une régression linéaire ajoutera une clé "error", contenant les données d'origine et celles calculées à partir de la régression. Puis le résultat sera passé aux analyses suivantes, qui elles-mêmes vont modifier les données, etc.

Ma question était : comment proprement implémenter cet espèce de système de pipe ?

Pour vous donner une idée de ce qu'il me semble devoir faire, j'ai commencé à coder cela. Après, peut-être que je pars mal dès (*). D'où la question plus générale : comment mener proprement ces multiples calculs, sachant que d'autres peuvent venir se rajouter ?

Merci !

+0 -0

Bon, j'ai essayé de clarifier tout cela ici.

De plus, j'ai commencé à développer Facteur, ne sachant pas vers quoi me tourner. L'objectif étant de pouvoir faire des trucs comme ça, ce qui donne cela dans le cadre de mon projet.

Bien sûr, créer pleins de noeuds identiques (id_node_lact1 et id_node_lact2 par exemple) n'est pas très intelligent et je vais corriger cela. Mais n'existe-t-il pas déjà un outil pour ça ? pandas me semble très intéressant, mais j'ignore s'il conviendrait.

+0 -0

Comme à mon habitude, j'ai géré le projet comme une bouse. Bref, je suis parti complètement du mauvais sens et ai compliqué inutilement les choses. En réfléchissant, ça va quand même mieux.

Par contre, il me semble intéressant de le mentionner, on m'a conseillé DoIt.

+0 -0

Je crois que je me suis inventé un problème. En fait, il me semble avoir inconsciemment voulu faire un truc comme ça. Mais ce n'était clairement pas nécessaire. J'ai écrit cela pour illustrer ce que je voulais faire, mais j'avoue que j'ignore si ça peut servir à quelque chose (d'où le maigre contenu du README).

+0 -0

Ha donc en fait tu voulais faire une sorte de pipeline générique de traitement.

J'avoue que la question est pertinente, je l'ai encore eu récemment au boulot. Mais j'ai jamais vraiment rien trouvé de très utile car une chaine de traitement a souvent des caractéristiques spécifique difficile à généraliser. A chaque fois je me retrouve à recoder un truc, mi-généraliste (pour étendre la chaine facilement) et mi-spécialiser (pour éviter des tonnes de codes utilitaire et coller au mieux à mes besoins).

Avec le duck-typing, c'est en général assez facile et rapide de faire un truc dédié.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte