Table des matières
Recherches de requête de graphique (partie 3)
Écriture de requêtes GSQL à l’aide de TigerGragh Cloud
- Modélisation des données de publication dans un graphique
- Que sont les requêtes graphiques
- Écriture de requêtes graphiques
- Conclusion
Il s’agit de la partie 3 d’une série explorant l’extraction et la modélisation de données. Si vous avez suivi la série jusqu’à présent, bienvenue à nouveau!. Si vous êtes nouveau, je donnerai un bref aperçu de ce que nous avons fait jusqu’à présent. Dans la partie 1, nous avons exploré l’utilisation de la PNL et de l’extraction d’entités dans la littérature biomédicale relative à Covid-19. Dans la partie 2, nous avons appris à prendre nos données et à les modéliser à l’aide de TigerGraph Cloud. Consultez ces articles pour avoir un aperçu en profondeur de la façon dont nous avons tout fait jusqu’à présent.
Maintenant, dans la partie 3, nous allons examiner l’écriture de requêtes de recherche de graphique pour analyser facilement les données de notre graphique. Vous aurez besoin d’un graphique entièrement formé pour écrire des requêtes. Vous pouvez suivre les étapes de la partie 2 pour créer un graphique à partir de zéro, ou vous pouvez importer le graphique que nous avons créé dans TigerGraph Cloud. Le graphique, ainsi que toutes les données que nous avons utilisées, peuvent être trouvés ici.
Pour importer le graphique, créez une solution vierge après ces étapes. Une fois sur la page d’accueil de votre solution, cliquez sur Importer une solution existante.
Malheureusement, vous devez toujours mapper et charger les données manuellement. Mais, je vous explique exactement comment procéder dans la partie 2 sous les points 4 et 5 de l’ordre du jour.
Avant de commencer à écrire des requêtes, nous devons probablement comprendre de quoi il s’agit. Les requêtes de graphique sont essentiellement des commandes qui parcourent un graphique et effectuent certaines opérations. Les requêtes peuvent être utilisées pour trouver certains sommets ou arêtes, effectuer des calculs ou même mettre à jour le graphique. Étant donné que les graphiques ont également des représentations visuelles, tout cela peut également être fait avec une interface utilisateur, comme celle fournie par TigerGraph Cloud. Mais, lorsque vous travaillez avec de grandes quantités de données ou lorsque vous essayez de créer des recherches de graphiques affinées, l’utilisation d’une interface visuelle est très inefficace. Par conséquent, nous pouvons écrire des requêtes pour parcourir rapidement un graphique et extraire ou insérer toutes les données que nous voulons.
GSQL propose de nombreuses méthodes d’interrogation différentes. Nous nous concentrerons sur les recherches. Au cœur des recherches de graphes se trouve quelque chose appelé SÉLECTIONNER déclaration. Comme son nom l’indique, l’instruction select est utilisée pour sélectionner un ensemble de sommets ou d’arêtes. le SÉLECTIONNER L’instruction est fournie avec plusieurs paramètres pour affiner l’objectif de votre recherche.
le DE La clause spécifie le type d’arête ou de sommet que vous choisissez.
le OÙ La clause vous permet de déclarer des conditions spécifiques pour les sommets ou les arêtes.
le ACCUM et POST-ACCUM les clauses vous permettent de gérer Accumulateurs, qui sont des variables GSQL spéciales qui recueillent des informations lors de votre recherche (les informations peuvent être des nombres, des ensembles de sommets ou d’arêtes, etc.).
le AYANT clause, similaire à la OÙ clause, vous permet de fournir des conditions supplémentaires; cependant, ceux-ci seront appliqués après les clauses précédentes.
le COMMANDÉ PAR La clause vous permet de classer les arêtes ou les sommets rassemblés par une valeur d’attribut.
Finalement, le LIMITE clause limite le nombre de résultats de votre recherche.
Vous pouvez trouver tous ces détails, ainsi que d’autres paramètres et méthodes de requête, sur le Page de documentation TigerGraph.
Presque toutes les recherches auxquelles vous pourriez penser pour un graphique peuvent être gérées avec le SÉLECTIONNER et ses clauses correspondantes. Pour prouver ce fait, entraînons-nous à écrire quelques requêtes.
Toutes les requêtes suivantes peuvent être trouvées sur mon Page GitHub.
Ces requêtes sont classées du plus simple au plus complexe.
Publications avec une licence donnée
Objectif: Trouver toutes les publications qui relèvent d’un type de licence donné.
Code:
Explication: Décomposons ce que fait notre code. Nous voulons sélectionner tous les sommets de publication qui se connectent à un sommet de licence spécifique. Donc, nous traversons de tous LICENCE vertices à tous PUBLICATION sommets à la condition que la licence id est tout ce que nous spécifions (c.-à-d. cc0, no-cc, etc.). Ensuite, nous imprimons simplement nos résultats. Il y a deux choses à noter dans notre déclaration imprimée.
- Si nous écrivons simplement
PRINT Pubs
, notre sortie imprimera les publications avec toutes leurs données associées (titre, résumé, etc.). Ainsi, pour filtrer les données de sortie, nous pouvons spécifier les attributs que nous voulons en utilisant des crochets. Dans notre exemple, nous n’imprimons les identifiants qu’en écrivantPRINT Pubs[Pubs.id]
. - L’utilisation du COMME est purement cosmétique et ne fait que modifier le nom de la liste résultante qui est imprimée. Ceci est utile lorsque vous extrayez des données à utiliser dans d’autres contextes, mais n’est pas nécessaire pour écrire des requêtes.
Maintenant, enregistrons et installons notre code. Lorsque nous l’exécutons, nous obtenons une zone de saisie qui ressemble à ceci:
Par exemple, j’ai entré «cc0» comme code de licence. Lorsque je clique sur Exécuter la requête, j’obtiens une image qui ressemble à ceci:
Cela montre chaque sommet de publication qui a la licence que nous avons spécifiée. Mais, cette vue est assez désordonnée. Nous pouvons à la place afficher la sortie JSON en cliquant sur le <…> icône sur le côté gauche. La sortie JSON devrait ressembler à ceci.
Cela semble beaucoup plus propre! Nous pouvons également voir les effets de nos ajustements de relevé d’impression. Le nom de la liste résultante est «Publications» et le seul attribut de sommet imprimé est l’identifiant.
Pour les requêtes suivantes, je n’afficherai que la sortie JSON.
Auteur avec la plupart des publications
Objectif: Trouvez l’auteur qui a écrit le plus de publications.
Code:
Explication: Nous commençons par sélectionner AUTEUR sommets. Notez que le SÉLECTIONNER La déclaration est différente ici. C’est parce que nous n’avons pas spécifié le bord ou le sommet cible. Puisque nous connaissons AUTEUR sommet se connecte uniquement à la PUBLICATION sommet, nous pouvons utiliser cette syntaxe «paresseuse» pour nous éviter d’avoir à spécifier le nom de l’arête et le sommet cible.
Nous obtenons également notre premier aperçu des accumulateurs (référence la documentation ici). Dans ce cas, nous utilisons un accumulateur local appelé pubNum. Un accumulateur local agit comme une variable unique pour chaque sommet, et un SumAccum est un type d’accumulateur qui stocke des sommes cumulées.
Alors, comment fonctionne cet accumulateur? Eh bien, alors que nous traversons chaque AUTEUR sommet à son connecté PUBLICATION sommets, nous ajoutons à notre accumulateur. Donc, pendant la ACCUM , l’accumulateur stocke le nombre de connexions (qui est également le nombre de publications) en tant que variable dans chaque AUTEUR sommet.
L’étape suivante utilise le COMMANDÉ PAR clause. Nous l’utilisons pour placer les auteurs résultants dans l’ordre décroissant de leur valeur cumulée. Ainsi, l’auteur avec le plus de publications sera en tête de liste
Enfin, nous utilisons le LIMITE pour limiter la sortie à 1 auteur (le premier auteur de la liste).
Lorsque nous exécutons la fonction, notre sortie ressemble à ceci:
Remarquez l’auteur id est « nan ». C’est le id utilisé lorsqu’une publication n’a pas d’auteur. Ainsi, nous pouvons voir que 2437 articles n’ont pas d’auteur répertorié. Ce sont de bonnes informations, mais pas exactement ce que nous recherchons. Pour afficher plus de résultats, modifiez la limite. Par exemple, je vais changer la limite à 5.
Maintenant, nous pouvons voir que l’auteur le plus publié a 173 publications (wow c’est beaucoup!)
Journal avec la plupart des publications
Nous pouvons exécuter une requête similaire à la recherche d’auteur, mais rechercher à la place la revue avec le plus de publications.
Objectif: Trouvez la ou les revues avec le plus de publications
Code:
Explication: Le code est essentiellement le même qu’avant, mais nous recherchons plutôt des revues au lieu d’auteurs. Nous utilisons également les filtres d’impression décrits précédemment pour rendre notre sortie plus agréable.
Nous voyons que «Arch Virol», avec 205 publications, est le premier journal de notre recherche.
Publications avec la plupart des références à un type de classe
Objectif: Étant donné un type de classe, recherchez les publications avec les termes les plus médicaux de cette classe.
Exemples de types de classe: ADN, MALADIE, CANCER, ORGANISME, TAXON.
La liste complète se trouve ici.
Code:
Explication: Ceci est notre premier aperçu d’une recherche à 2 sauts. Le premier saut sélectionne toutes les entités, ou mots-clés, connectés à un type de classe donné, et le deuxième saut recherche toutes les publications avec ces entités et les classe. Par exemple, donnons à notre requête la classe CANCER et sélectionnez le haut 5. Notre sortie ressemble à ceci.
Nous pouvons maintenant voir quelles publications ont le plus de références au cancer ainsi que le nombre de références pour chaque publication.
Publications similaires
Objectif: Étant donné un article, trouvez des articles similaires en fonction de leurs mots-clés partagés.
Nous utiliserons la similitude Jaccard pour déterminer à quel point 2 articles sont étroitement liés. Cet algorithme calcule essentiellement le nombre de mots-clés en commun entre deux articles sur le nombre total de mots-clés. Vous pouvez en savoir plus sur l’algorithme ici. Vous pouvez voir un exemple de cette formule en action, ainsi que de nombreuses autres formules graphiques intéressantes, sur le TigerGraph GitHub.
Code:
Explication: Nous commençons par créer 4 accumulateurs. Chacun représente une valeur utilisée dans la formule Jaccard. Pour notre premier SÉLECTIONNER déclaration, nous sélectionnons la publication correspondant à l’entrée est ce que je et collecter tous les bords connectés à ce sommet dans un accumulateur. Pour notre deuxième déclaration, nous sélectionnons toutes les entités de cette publication. Pour notre troisième déclaration, nous trouvons toutes les publications avec un nombre quelconque d’entités que nous venons de rassembler et trouvons la taille de l’intersection (le nombre d’entités en commun avec le document original). Enfin, nous calculons notre index Jaccard et trions les publications présentant les similitudes les plus élevées pour être en haut de notre liste de sortie.
Voyons un exemple. j’ai utilisé est ce que je= 10.1186 / s40413–016–0096–1 et Haut= 5.
Nous pouvons voir notre publication de départ ainsi que les 5 premières publications similaires, chacune avec leur score de similitude respectif.
Si vous avez suivi cet article, je vous félicite! Ce matériel n’est pas facile, et l’apprentissage d’une nouvelle langue comme GSQL peut être délicat. J’espère que vous avez trouvé cette procédure pas à pas de requêtes GSQL intéressante. Je recommande fortement de lire mes autres articles pour obtenir un meilleur contexte pour tout ce que nous avons couvert aujourd’hui. Si vous souhaitez découvrir plus d’algorithmes et de structures de requête, consultez le Documentation TigerGraph pour GSQL. Si vous recherchez plus de contenu, restez à l’écoute! Je publierai la partie 4 sous peu. Dans cette dernière partie de la série, je vais vous expliquer comment utiliser notre base de données de graphiques et nos requêtes pour produire des informations que nous pouvons représenter visuellement à l’aide du Plateforme d’interface utilisateur Dash de Plotly. Avec cela, si vous avez suivi les quatre parties, vous terminerez une application complète de bout en bout!
Si vous avez aimé cet article, assurez-vous de consulter mes autres articles et suivez-moi pour plus de contenu comme celui-ci!
- https://towardsdatascience.com/using-scispacy-for-named-entity-recognition-785389e7918d
- https://towardsdatascience.com/linking-documents-in-a-semantic-graph-732ab511a01e
- https://gofile.io/d/fyijVS
- https://www.youtube.com/watch?v=JARd9ULRP_I
- https://docs.tigergraph.com/dev/gsql-ref/querying/accumulators
- https://docs.tigergraph.com/dev/gsql-ref/querying/select-statement#select-statement-data-flow
- https://github.com/akash-kaul/GSQL-Query-Searches.git
- https://allenai.github.io/scispacy/
- https://github.com/tigergraph/gsql-graph-algorithms/blob/master/algorithms/schema-free/jaccard_nbor_ap_json.gsql
- https://docs.tigergraph.com/
- https://plotly.com/dash/