Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2021-01-05T09:05:39+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Django - Nodes & Edges, message #2300382021-01-05T09:05:39+01:00leir/@leirhttps://zestedesavoir.com/forums/sujet/14913/django-nodes-edges/?page=1#p230038<p>Hello, merci de ta réponse !</p>
<p>Alors oui effectivement, c’est une possibilité. J’ai fait une tentative dans ce sens, voilà ce que ça donne :</p>
<ol>
<li>Je fais une requête qui charge les UniqueValue dont j’ai besoin.</li>
<li>Je fais une boucle, et pour chaque UniqueValue, je charge les UniqueValue qui sont en relation avec celle-ci, au moyen d’une requête avec un COUNT. C’est là que le calcul de la force du lien se fait.</li>
<li>J’attends depuis 30 minutes et c’est pas fini, un graph assez lourd. Ce n’est pas utilisable directement pour mes utilisateurs.</li>
</ol>
<p>Merci encore de ton aide. Je pense que je dois calculer cette "force" au moment de l’import des fichiers xls. Par exemple, si un lien entre deux UniqueValue existe déjà (dans un sens ou dans l’autre, ça dépend ce que je veux), j’incrémente un score que je stocke ailleurs. A moins que tu ou quelqu’un d’autre voie une autre solution.</p>Django - Nodes & Edges, message #2300292021-01-04T14:39:05+01:00Rowin/@Rowinhttps://zestedesavoir.com/forums/sujet/14913/django-nodes-edges/?page=1#p230029<p>Salut,</p>
<p>Est-ce que tu ne pourrais pas compter les instances de DataRelation, pour définir ta force ? </p>
<p>Parce que ce si tu as 3 liens node1->node2, tu auras 3 instances de DataRelation. Après j’ai pas assez d’expérience avec Django pour être tout à fait sûr, mais j’imagine que tu peux accéder aux données de ta classe associative.</p>Django - Nodes & Edges, message #2299752021-01-02T19:48:48+01:00leir/@leirhttps://zestedesavoir.com/forums/sujet/14913/django-nodes-edges/?page=1#p229975<p>Bonjour,</p>
<p>je travaille actuellement sur un projet dont une partie de la structure est la suivante :</p>
<p>J’ai extrait plusieurs (nombre indéterminé à l’avance) "UniqueValue" (valeurs qui match avec un pattern donné) d’un objet "DataRow" (ligne, soit ensemble de cellules, dans un fichier Excel, de longueur variable). Ces "UniqueValue" ont des relations ManyToMany entre elles, de sorte à pouvoir générer un schéma relationnel. Pour cela, j’ai une table intermédiaire "DataRelation" qui fait office de table pivot. Voilà les modélisations simplifiée Django :</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span></div><pre><code class="hljs language-py"><span class="hljs-keyword">from</span> django.contrib.postgres.fields <span class="hljs-keyword">import</span> ArrayField
<span class="hljs-keyword">from</span> django.db <span class="hljs-keyword">import</span> models
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DataRow</span>(<span class="hljs-params">models.Model</span>):</span>
content = ArrayField(models.TextField(), blank=<span class="hljs-literal">True</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">UniqueValue</span>(<span class="hljs-params">models.Model</span>):</span>
raw_content = models.TextField(blank=<span class="hljs-literal">True</span>)
modified_content = models.TextField(blank=<span class="hljs-literal">True</span>)
linked_values = models.ManyToManyField(<span class="hljs-string">"self"</span>, through=<span class="hljs-string">"DataRelation"</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DataRelation</span>(<span class="hljs-params">models.Model</span>):</span>
source = models.ForeignKey(UniqueValue,
on_delete=models.CASCADE,
related_name=<span class="hljs-string">'sources'</span>)
target = models.ForeignKey(UniqueValue,
on_delete=models.CASCADE,
related_name=<span class="hljs-string">'targets'</span>)
data_row = models.ForeignKey(DataRow,
on_delete=models.CASCADE,
related_name=<span class="hljs-string">'relations'</span>)
</code></pre></div>
<p>La "force" d’un lien serait calculée en fonction du nombre de fois qu’il apparait (par exemple node1->node1 apparait avec data_row1, data_row2, data_row3 etc…).</p>
<p>J’ai ainsi dans ma base de donnée quelques centaines de milliers de "DataRow", avec environ 200k UniqueValue et un paquet de liens bien sûr. J’arrive à dessiner un graph relationnel basique (au moyen de Sigma JS), afin de déterminer quelles "UniqueValue" sont en relation. Ce que je voudrais, c’est pouvoir ajouter une "force" aux liens, comme sur l’image suivante :</p>
<p><a href="https://imgur.com/a/gHtQd2v">Graph</a></p>
<p>La méthode que j’utilise actuellement est de parcourir chaque "UniqueValue", puis toutes ses "linked_values". Je dessine à chaque fois un node s’il n’est pas déjà dessiné, puis j’ajoute les edges correspondantes. Je ne vois pas comment calculer la "force" d’un lien directement. Ca donne à peu près ça :</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span></div><pre><code class="hljs language-py">unique_values = UniqueValue.objects.all()
<span class="hljs-keyword">for</span> unique_value <span class="hljs-keyword">in</span> unique_values:
linked_values = UniqueValue.linked_values.all()
<span class="hljs-keyword">for</span> linked_value <span class="hljs-keyword">in</span> linked_values:
<span class="hljs-comment"># draw node if not exists</span>
<span class="hljs-comment"># draw edge if not exists</span>
...
</code></pre></div>
<p>Je débute en visualisation de données et j’aimerais trouver un moyen plus efficace pour effectuer cela. Pouvez-vous m’aiguiller ?</p>cherche meilleur façon de "Prologuer" à partir de python3, message #1747142018-03-02T01:07:37+01:00cepus/@cepushttps://zestedesavoir.com/forums/sujet/10354/cherche-meilleur-facon-de-prologuer-a-partir-de-python3/?page=1#p174714<figure>
<blockquote>
<p><a href="https://github.com/logpy/logpy">https://github.com/logpy/logpy</a></p>
</blockquote>
<figcaption><a href="https://zestedesavoir.com/forums/sujet/10354/cherche-meilleur-facon-de-prologuer-a-partir-de-python3/?page=1#p174695">Davidbrcz</a></figcaption>
</figure>
<p>Oui ! Tout ce qui est (mini/micro)kanren est pertinent ici. </p>cherche meilleur façon de "Prologuer" à partir de python3, message #1746972018-03-01T21:51:49+01:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/10354/cherche-meilleur-facon-de-prologuer-a-partir-de-python3/?page=1#p174697<p>waow vous avez été super rapide !</p>
<p>oui pydatalog a l’ air interessant, faut que je creuse par là</p>
<p>FOSDEM 2014 avec pydatalog : <a href="https://www.youtube.com/watch?v=JNMR18Ldbcw">https://www.youtube.com/watch?v=JNMR18Ldbcw</a></p>
<p>un peu aussi à l’ EUROpython 2017: <a href="https://www.youtube.com/watch?v=3QtAlB3NZII">https://www.youtube.com/watch?v=3QtAlB3NZII</a></p>
<p>un slide : <a href="https://fr.slideshare.net/PierreCarbonnelle/logic-programming-in-python">https://fr.slideshare.net/PierreCarbonnelle/logic-programming-in-python</a></p>
<p>logpy peut etre aussi tres bon, faut que je compare les deux.</p>cherche meilleur façon de "Prologuer" à partir de python3, message #1746952018-03-01T21:40:57+01:00Davidbrcz/@Davidbrczhttps://zestedesavoir.com/forums/sujet/10354/cherche-meilleur-facon-de-prologuer-a-partir-de-python3/?page=1#p174695<p><a href="https://github.com/logpy/logpy">https://github.com/logpy/logpy</a></p>cherche meilleur façon de "Prologuer" à partir de python3, message #1746942018-03-01T21:40:08+01:00sgble/@sgblehttps://zestedesavoir.com/forums/sujet/10354/cherche-meilleur-facon-de-prologuer-a-partir-de-python3/?page=1#p174694<p>Que penses-tu de pyDatalog ? </p>
<blockquote>
<p>A pure-python implementation of Datalog, a truly declarative language derived from Prolog.<br>
…<br>
pyDatalog adds the logic programming paradigm to Python’s toolbox, in a pythonic way. You can now run logic queries on databases or Python objects, and use logic clauses to define python classes. In particular, pyDatalog can be used as a query language</p>
</blockquote>
<p><a href="https://pypi.python.org/pypi/pyDatalog">https://pypi.python.org/pypi/pyDatalog</a></p>cherche meilleur façon de "Prologuer" à partir de python3, message #1746932018-03-01T21:04:18+01:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/10354/cherche-meilleur-facon-de-prologuer-a-partir-de-python3/?page=1#p174693<p>Salut,
je cherche la meilleure alternative pour faire de la logique à la Prolog à partir de python3 : etre pythonique tout en ayant la profondeur de Prolog.</p>
<p>Si c’est écris en 100% python, c’est mieux, pour l’ accelerer via pypy ou nuitka.</p>
<p>Que me conseillez vous ?</p>
<p>y’a swi-prolog sur lequel je bidouille en ce moment pour ceux qui veulent tester.</p>
<p>pour alimenter le sujet:
<a href="https://github.com/baojie/pydatalog/blob/master/pyDatalog/examples/SQLAlchemy.py">https://github.com/baojie/pydatalog/blob/master/pyDatalog/examples/SQLAlchemy.py</a></p>
<p><a href="https://sites.google.com/site/pydatalog/3---datalog-and-data-integration">https://sites.google.com/site/pydatalog/3---datalog-and-data-integration</a></p>