Partage
  • Partager sur Facebook
  • Partager sur Twitter

Projet : Requête sur des séries temporelles.

    7 février 2019 à 23:00:09

    Bonjour,

    Je me suis lancé il y a peu je me suis lancé dans un projet sur les séries temporelles avec un interpréteur qui traduit une requête de série temporelle.

    En fait j'arrive plutôt bien a cerner le sujet mais pour la partie développement je suis encore dans le flou.

    Le premier objectif c'est de stocker les données qu'on nous donne sous cette forme (C'est en fait des actions d'entreprise à l'ouverture et fermeture d'une journée) :  

    Actions : 

    sid

    Siège Sociale

    Industrie

    colonnes sequentielles


    Date position

    opening

    closing

     

    1

    San Francisco

    Technologie


    date

    12/01/2011

    ...

    12/01/2019

    opening

    90

    ...

    10

    closing

    20

    ...

    80

       

    ...

    0%

    J'ai trouvé la solution de stocker ces infos en 5 tableaux comme ci-dessous. ça va me permettre de pouvoir jouer avec les futurs demande de l'utilisateur.

    Sièges sociales

    SEQ_ID: 1

    2

    ...

    99

    100

    “San Francisco”

    “Paris”

    ...

    “New York”

    “San Francisco”

    Industries

    SEQ_ID: 1

    2

    ...

    99

    100

    “Technologie”

    “Fashion”

    ...

    “Nourriture”

    “Nourriture”

    En ce qui concerne les colonnes séquentielles, nous construisons d'abord une table d'association position-séquence, où chaque cellule contient une paire de valeurs (SEQ_ID, Position) :

    POS_LOC: 1

    2

    ...

    99

    10000

    (0, 1/10/2018)

    (0,2/10/2018)

    ...

    (100, 30/12/2018)

    (100, 31/12/2018)

    Ensuite, pour chaque colonne séquentielle, nous construisons un tableau, où l'emplacement code l'emplacement dans la table POSITION-SEQUENCE-ASSOCIATION.

    Opening

    POS_LOC: 1

    2

    ...

    99

    10000

    10

    391

    ...

    837

    123

    Closing

    POS_LOC: 1

    2

    ...

    99

    10000

    12

    240

    ...

    850

    128

    Le but du projet est de créer un programme qui demande à l'utilisateur de notifier une requête qui pourra être par exemple : 
    SELECT Opening
    FROM Actions 
    La requête ci-dessus requête devra afficher toutes les valeurs contenues dans le tableau "Opening" de la catégorie Actions.
    J'ai pour ça commencer à créer un AST grâce à boost.spirit, qui va me permettre de vérifier la validité de la grammaire de l'utilisateur, voilà ce que ça donne :  

    <select_stmt> ::= "SELECT" <project_list> "FROM" <from_stmt>

    <project_list> ::= <col_projection>

    <col_projection> ::= <col_reference>

    <col_reference> ::= <col_name>

    <col_name> ::= string

    Et ce que j'aimerai au final c'est que mon programme récupère les valeurs sollicitées et me les affichent. Et c'est là où je bloque ... 

    Merci d'avance pour votre aide, si j'avance d'ici là je ferai des updates.





    -
    Edité par Lord Petrus 7 février 2019 à 23:01:30

    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2019 à 18:22:24

      Heu, tous ses salamalecs pour une simple application qui peut être faites avec 4 pauvres tables SQL, un moteur de base de données avec le midleware ad hoc et un contrôles d'affichage de grille ?

      Le genre d'application qui sert d'exemple de tutoriel d'initiation à une technologie d'ORM ou DataAccess de base.

      Pourquoi faire si compliqué ???

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        20 février 2019 à 21:25:23

        Salut, 

        Désolé du temps de réponse mais je suis enfin de retour sur le projet. Du coup j'en ai profité pour expliquer un peu mieux le concept de l'application (parce que c'est vrai que ma 1er explication est très vague).

        En fait l'application aura cette forme :

         

        Dans le petit encadrer il devra rentrer un requête du style : 

        Requête 1 :

        TS-SQL

        SELECT Ouverture

        FROM Actions

        Langage Naturel

        Pour toutes les séries dans Actions, apporter toutes les valeurs de Ouverture

        Cette requête doit aller chercher les valeurs qui seront stockées dans un base de données local (Dans le programme lui même). 
        Donc pour reprendre ton message, je ne pense pas que cela soit possible en SQL "pur" ou alors je me trompe peut être (ce qui n'est pas impossible du tout). Et c'est pour ça que je voulais passer par du C++ pour créer cette interface. Pour l'instant j'ai commencé à écrire la grammaire du programme, qui était pas forcement difficile. Mais j'ai du mal à comprendre comment je peut mélanger du C++ avec du SQL pour faire fonctionner le programme ...
        Merci d'avance les gars :)
        • Partager sur Facebook
        • Partager sur Twitter
          21 février 2019 à 19:17:59

          Ok, la problématique est bien plus claire, mais vous n'avez vraiment rien fait pour simplifier le bidule.

          Quand on fait l'expression du besoin, on cherche à se raccrocher à des problématiques connues/classiques et ainsi à les outils classiques de résolution de ces problématiques.

          Vous raisonnez en terme de "Table", ce qui est foncièrement lié à de la base de données relationnelle.

          Et votre syntaxe est furieusement inspirée de SQL.

          Donc, pourquoi réinventer une roue carrée quand les outils de requêtage SQL pullulent ?

          S'il y a besoin d'un langage d'interrogation, c'est que c'est le métier qui en a besoin.

          C'est le genre de truc qu'on n'impose pas aux utilisateurs finaux.

          Si les utilisateurs finaux vous ont sortis une syntaxe à la SQL, c'est que, peu ou prou, ils maitrisent le bidule.

          Il est donc essentiel de concevoir en amont le modèle de données relationnel correspondant aux données de votre problème.

          Votre exposition des différentes tables manquent beaucoup de clarté et, je pense, serait plus claire en terme de table de de relation "à la SQL/ base de données relationnelles".

          Vous devez spécifier clairement la cardinalité de chaque relation entre les différentes Tables dans ce modèle.

          Tout cela, ce fait avant même de pisser la moindre ligne de code.

          Votre modèle de données doit être cohérent avant même de commencer le développement.

          Il peut changer durant le développement mais il doit être cohérent dès le départ.

          J'ai du mal à voir le cohérence du modèle que vous nous présenté.

          Un "Siège Social" peut travailler sur plusieurs "Industrie" ?

          Une "Industrie" peut regrouper plusieurs "Siège Social" ?

          C'est quoi ce "0%" qui se balade dans la colonne "12/01/2019" de votre IHM ???

          Posez clairement le modèle.

          Le langage doit être simple à utiliser sur le modèle, et pas faire un truc compliqué parce qu'on n'a pas réfléchi au modèle en amont.

          Le modèle me semble tellement basique que je ne comprends pas l'intérêt d'un langage pour l'IHM.

          - une dropdownlist avec la liste des "Industrie"

          - une dropdownlist avec la liste des "Siège Social" travaillant dans l'Industrie sélectionnée

          - deux contrôles "DateTimePicker" pour donner les dates de début et de fin de la période

          - un bouton de recherche

          - une grille de visualisation des résultats

          Et voilà, une interface compréhensible par les utilisateurs finaux les plus réfractaires et ergonomique et aussi très facile à mettre en place.

          Qu'il y ait une basse de données au cul de l'application ou pas, c'est pas le problème. C'est la lisibilité de l'IHM.

          Pour le filtrage des colonnes, entre le mot clé "SELECT" et le mot clé "FROM", c'est le genre de truc que fait sans aucun problème un composant grille qui laisse à l'utilisateur la main sur les réglages des colonnes.

          Pour le choix de "Action", c'est le nom d'une table/vue de votre modèle. C'est donc une liste finie (voir récupérable depuis la base, si vous faites les choses flexibles), donc facilement sélectionnable dans une simple dropdownlist.

          Pour la partie "Langage Naturel", à moins de sortie l'artillerie de l'IA, c'est pas jouable.

          C'est une syntaxe que vous devriez créer et elle soit avoir un sens dans ce contexte. Les expressions régulières peuvent souvent suffire.

          Mais, en fin de compte : Concevez le modèle de données de votre problème avant même tout développement.

          Ce que vous nous montrez simple indiquer que ce modèle n'est pas encore prêt.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            23 février 2019 à 11:56:23

            Je rejoins bien entendu bacelar, tu te complique la vie pour pas grand chose.

            Pour le stockage de tes données, ne te casses pas la tête avec un stockage interne, utilise un SGBD. Si tu veux un SGBD très léger, tu as SQLite qui est gratuit et qui marche très bien pour des bases de données locales monoposte. Tu peux même aller plus loin avec des SGBD bureautiques (MS Office, Star Office, Open Office ...), tout est intégré, je ne pense même pas que tu ai a écrire quoi que ce soit (sauf peut être quelques requêtes SQL plus faciles à écrire à la main, qu'à composer dans les assistants de requêtes de ces outils).

            Je me demande même si ce n'est pas encore plus facile à faire avec un tableur (Là, tu as en plus toutes les possibilité de faire des graphiques, histogrammes, tableaux de bord... tout ces trucs dont raffolent les utilisateurs de ce genre de programme) ...

            -
            Edité par int21h 23 février 2019 à 12:01:24

            • Partager sur Facebook
            • Partager sur Twitter
            Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

            Projet : Requête sur des séries temporelles.

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown