Nuage de mots Ğ1 + la suite à venir

Bonjour à tous,

Voici ma première petite contribution au développement autour de la data sur la Ğ1.
Un nuage de mots basé sur les commentaires des transactions.
https://gexplore.analysons.com/commentaires/

L’image est mise à jour automatiquement tous les matins sur les 6 derniers mois glissants, elle change légèrement tous les jours.
C’est un script en Python qui utilise la db sqlite des transactions du noeud duniter (pour l’instant, mais je pourrai le passer sur l’API BMA), et la librairie wordcloud.
Certains mots sont exclus pour une lisibilité plus intéressante : [‹ Merci ›, ‹ Gracias ›, ‹ Bienvenue ›, ‹ Bienvenu ›, ‹ Bienvenida ›, ‹ June ›, ‹ G1 ›, ‹ Juna ›, ‹ Junas ›, ‹ Bienvenido ›] ainsi que les stop words communs en français et en espagnol.

=> Par contre je viens de me rendre compte qu’il existe déjà un outil appelé Ğexplore :rofl:

Je ne me suis pas encore trop occupé de voir où je vais déposer le code source.
Peut-être que tools · GitLab serait un bon endroit pour commencer, ou alors un repo dédié à ce que je vais aussi faire pour la suite.

Pour l’instant j’ai en tête de faire un outil de visualisation de données en Python, qui utiliserait l’API BMA.
J’utiliserais par exemple streamlit qui permet de facilement construire des belles webapps intéractives.
Cet outil serait fondé sur une base de données indexées des transactions (soit que je construirais moi même, soit reprendre une base existante comme celle de Datajune, mais je crois que Datajune n’a pas les transactions vu que c’est focalisé sur la toile de confiance, de plus je vais plutôt utiliser Python comme langage et non Julia).

L’une des premières choses que j’aimerais faire, c’est de reconstituer les transactions incluant les DU (si j’y arrive… d’ailleurs je suis preneur si vous avez les règles qui permettent d’identifier les « débuts de droit au DU » et « fin de droit au DU » en scannant la blockchain, vu qu’apparemment les DU n’y sont pas stockés de façon nominative).
Ca me servira pour le premier indicateur que je souhaite faire sur les transactions, et peut-être que ça pourrait aussi rassurer certains utilisateurs en mettant à dispo une page qui afficherait toutes les transactions avec l’ensemble des DU.

Ce ne sont que des premières idées, et j’ai aussi noté que Gérard je crois va développer des nouvelles fonctions autour de la data sur wotwizard, donc ça pourrait être intéressant de nous coordonner, en tous cas de s’assurer qu’on ne fait pas des choses en double.

A bientôt

5 « J'aime »

A noter que j’ai fait la page html vite fait :slight_smile:
Je voulais que l’image occupe toute la hauteur de l’écran, ce qui semble fonctionner sur téléphone mais pas sur PC, ça déborde un peu

@francoislibre

Le droit au DU d’une identité démarre lorsqu’elle devient membre de la toile de confiance et s’arrête lorsqu’elle ne l’est plus. Ces transitions sont directement documentées dans WotWizard, que tu peux interroger à travers son serveur graphQL par des requêtes (à l’adresse https://wwgql.coinduf.eu). Pour l’utilisation du serveur, voir Help/Manual.en.pdf · master · gerard94 / WotWizard · GitLab, notamment la page 3. C’est le type HistoryEvent, décrit dans Help/TypeSystem.txt · master · gerard94 / WotWizard · GitLab, qui donnera la réponse à ta question.
Sinon, si tu préfères fouiller directement dans la bdd de Duniter, je pourrai te donner plus d’informations.
En tous cas, n’hésite pas à me poser des questions.

Exemple de requête correspondant, partiellement, à ta question :

{"query":"{idSearch(with:{hint:\"GE\"status_list:[MEMBER]}){ids{uid pubkey history{in block{number}}}}}"}

1 « J'aime »

Merci pour cette première contribution ! On voit ressortir le mot « putain ». Peut-être faudrait-il pondérer la taille du mot par le nombre de comptes membre source qui l’ont utilisé plutôt que le nombre d’apparition pour limiter la possibilité de spam et obtenir un résultat représentatif.

Quelqu’un t’a-t-il déjà créé un compte sur notre GitLab ? Si non envoie-moi un message en MP avec l’adresse mail de ton choix à utiliser.

C’est un ajout souhaité, mais je ne pense pas travailler dessus pour l’instant parce qu’il me reste trop de questions sur la wot qui constitue la vraie force de Duniter d’après moi.

Il me semble que l’interopérabilité est assez poussée et simple à mettre en place. Je crois me souvenir avoir fait pip install julia puis import julia pour utiliser Julia depuis Python et add PyCall puis using PyCall pour utiliser Python depuis Julia. Pour de la prod c’est peut-être pas idéal mais pour du prototypage et de l’analyse de données ça me semble adapté.

DataJune vise à étudier des séries temporelles avec un échantillonnage périodique (réglable, mais actuellement quotidien), donc pour des données précises, mieux vaut utiliser l’API GraphQL de wotwizard (ça vaut vraiment le coup d’apprendre GraphQL, ça te sera également utile dans l’écosystème v2).

1 « J'aime »

Merci @gerard94 pour ces premiers éléments, parce qu’avec mes connaissances actuelles je n’aurais pas su construire la requête. Je vais essayer de potasser un peu GraphQL puisque @HugoTrentesaux tu me dis que ça va être utile.

J’ai essayé cette requête :
{query:
idSearch(with:
{status_list:[MEMBER]}){ids{uid pubkey history{in block{number utc0}}}}}

ça a l’air de correspondre à mon besoin.
Si je rajoute à cette requête l’ensemble des status, à savoir :`[REVOKED, MISSING, MEMBER, NEWCOMER], est-ce que ça répond à mon besoin d’avoir toutes les entrées et sorties de la toile de confiance, afin de pouvoir reconstituer les DU ?

1 « J'aime »

Dans ce cas particulier ma première réaction c’est que ce mot est une information sur la vie de la blockchain : je trouve que c’est bien de l’afficher et de l’avoir vu, après on peut creuser ce qui s’est passé.

Pour lutter contre le spam : peut-être un jour vérifier explicitement qu’un même commentaire ne se répète pas à l’identique ou presque. Mais ça pourrait fausser d’autres résultats (une personne qui a vendu 200 confitures et 6 oeufs, c’est pas pareil que 1 confiture et 1 oeuf).
Je crois que l’application de frais dans les transactions de Duniter v2s dissuadera ces spams en amont.

Les NEWCOMER(s) ne sont pas utiles, car ils n’ont pas encore créé de DU, par contre, les REVOKEDs et les MISSINGs en ont créés et il faut les inclure.

Je ne crois pas que tu aies besoin explicitement du temps des blocs, leurs numéros devraient suffire. Et si tu veux utiliser un temps, prends plutôt le « temps blockchain » (bct) que le « temps réel » (utc0), car toutes les références temporelles dans la blockchain sont en bct.

Pour affiner ta proposition, je suggère donc cette requête :
{"query":"{idSearch(with:{status_list:[REVOKED MISSING MEMBER]}){ids{uid pubkey history{in block{number}}}}}"}

Remarque : Ce que j’appelle requête ici est en fait un objet JSON englobant une requête graphQL :

{
  "query":
    "<requête graphQL sur une seule ligne>"
}

avec la requête graphQL :

{
	idSearch(with: {status_list: [REVOKED, MISSING, MEMBER]}) {
		ids {
			uid
			pubkey
			history {
				in
				block {
					number
				}
			}
		}
	}
}

Il me semble également que Duniter V2s chiffrera les commentaires, les rendant illisible pour toute autre personne que l’émetteur et le destinataire.

Je te déconseille de te lancer sur BMA qui sera abandonné une fois migré sur Duniver2s. Bien sûr, il n’y a pas encore de données intéressantes, mais il te faudra faire une migration.


Pareil pour WotWizard, qui est dépendant de Duniter v1.7, je te déconseille son utilisation, à moins qu’il soit prévu de le migrer vers l’usage de Duniter v2s (RPC et de l’indexer).

Il n’y aura simplement plus de commentaires pour les transferts de monnaie avec Duniter v2s. Donc, ce nuage de mots tombe à l’eau dès Ğ1v2.

Il y aura toujours des commentaires de transaction, mais pas onchain. Ils seront stockées offchain par des indexeurs. Quant au chiffrement des commentaires, c’est déjà possible et le sera toujours, ça ne dépend que des clients/ wallet.

1 « J'aime »

C’est le cas. :grinning: Je compte bien continuer.

2 « J'aime »

Il faut prendre ce conseil comme une information de dépréciation. Mais comme la migration aura lieu d’ici 1 à 2 ans, n’hésites pas à te lancer dans des petits projets amusants, surtout s’ils fournissent des supports de communication à propos de la Ǧ1 !

En revanche si tu te lances dans un projet ambitieux ça vaut le coup de vérifier dans quelle mesure il pourra être migré sur la v2.

L’image « nuage de mots » créée par @francoislibre est une magnifique réalisation. Enfin quelque chose à la portée du juniste moyen dans laquelle ressort l’aspect humain et communication où souhaitent s’engager les plus volontaires d’entres nous. Bravo @francoislibre!

2 « J'aime »

Oui je m’en doutais et merci de m’avoir répondu si vite et informé de ce qui est déprécié, ça m’est utile.
Bon après, pour les nouveaux dev j’ai l’impression qu’il n’y a souvent que 2 alternatives : soit attendre Duniter V2, soit utiliser une API obsolète (GVA) ou dépréciée (BMA, ou les fichiers sqlite du noeud Duniter v1). Sauf l’API wordwizard que je vais utiliser au moins pour les entrées/sorties de droit au DU. L’occasion de découvrir GraphQL aussi.

Cette API devait sortir avec Duniter 1.9 mais n’arrivera donc jamais à terme.

En effet, il vaut mieux commencer à apprendre à manier GraphQL puisque l’indexeur de la v2 Duniter-indexeur exposera une API GraphQL et que l’API JSON RPC des noeuds est wrappée dans une librairie native de beaucoup de langages.

Je pourrai te donner accès à la console Hasura de mon indexeur qui permet de composer ses requêtes GraphQL via une interface graphique.

Si tu connais SQL on peut également écrire des requêtes custom et les exposer via l’API GraphQL ce qui est très pratique pour les statistiques par exemple. Mais pour cela il faut savoir quoi requêter alors entraine toi sur les données de la v1 quitte à y accéder de manière un peu crado :smiley:

1 « J'aime »

Hello
J’avais cru pouvoir me passer de wotwizard grâce à l’historique des DU fourni par le noeud Duniter, disponible également en base leveldb :
https://g1.duniter.org/ud/history/9aywHEqDkgTE1iPzjYh6SubD7ziTWQicZPMT1mEF5d9y

Sauf que dans le cas de la clé ci-dessus, l’url renvoie que le DU commence au bloc 544706 alors que wotwizard indique que le DU commence au bloc 508072

J’en déduis que le noeud Duniter ne fournit pas tout l’historique des DU ?
Je vais revenir sur l’option wot wizard :slight_smile:

Cette requête ne renvoie que les DU non consommés. C’est précisé dans la doc.

C’est pour cela que l’on ne peut pas l’utiliser pour un historique, mais que pour lister les DU comme sources disponibles.

2 « J'aime »

Hello,

Voici le code source du wordcloud :

François

Veux-tu que ton dépôt soit dans le groupe tools · GitLab ?

Oui je veux bien