Notes du Data Scientist : Un examen personnalisé des langages de requête de données

Notes du Data Scientist : Un examen personnalisé des langages de requête de données
Je vous raconte par expérience personnelle ce qui a été utile, où et quand. Il s'agit d'un aperçu et d'une thèse, pour qu'il soit clair quoi et où vous pouvez creuser davantage - mais ici, j'ai une expérience personnelle exclusivement subjective, peut-être que tout est complètement différent pour vous.

Pourquoi est-il important de connaître et de pouvoir utiliser les langages de requête ? À la base, la science des données comporte plusieurs étapes de travail importantes, et la toute première et la plus importante (sans elle, rien ne fonctionnera certainement !) est l'obtention ou l'extraction de données. Le plus souvent, les données se trouvent quelque part sous une forme et doivent être « récupérées » à partir de là. 

Les langages de requête vous permettent d'extraire ces mêmes données ! Et aujourd'hui, je vais vous parler de ces langages de requête qui m'ont été utiles et je vais vous dire et vous montrer où et comment exactement - pourquoi il est nécessaire d'étudier.

Il y aura trois blocs principaux de types de requêtes de données, dont nous parlerons dans cet article :

  • Les langages de requête « standard » sont ce que l'on entend communément lorsqu'on parle d'un langage de requête, comme l'algèbre relationnelle ou SQL.
  • Langages de requête de script : par exemple, les choses Python, les pandas, les scripts numpy ou shell.
  • Langages de requête pour les graphes de connaissances et les bases de données graphiques.

Tout ce qui est écrit ici n'est qu'une expérience personnelle, ce qui a été utile, avec une description des situations et « pourquoi c'était nécessaire » - chacun peut essayer de voir comment des situations similaires peuvent se présenter et essayer de s'y préparer à l'avance en comprenant ces langues ​​avant de devoir postuler (en urgence) sur un projet ou même de vous rendre sur un projet où ils sont nécessaires.

Langages de requête "standards"

Les langages de requête standards sont précisément dans le sens où nous y pensons habituellement lorsque nous parlons de requêtes.

Algèbre relationnelle

Pourquoi l’algèbre relationnelle est-elle nécessaire aujourd’hui ? Afin de bien comprendre pourquoi les langages de requête sont structurés d'une certaine manière et de les utiliser consciemment, vous devez comprendre le noyau qui les sous-tend.

Qu’est-ce que l’algèbre relationnelle ?

La définition formelle est la suivante : l'algèbre relationnelle est un système fermé d'opérations sur les relations dans un modèle de données relationnel. Pour le dire un peu plus humainement, il s'agit d'un système d'opérations sur des tables tel que le résultat soit toujours une table.

Voir toutes les opérations relationnelles dans cette article de Habr - nous décrivons ici pourquoi vous devez savoir et où cela est utile.

Pourquoi?

Commencer à comprendre ce que sont les langages de requête et quelles opérations se cachent derrière les expressions dans des langages de requête spécifiques permet souvent de mieux comprendre ce qui fonctionne dans les langages de requête et comment.

Notes du Data Scientist : Un examen personnalisé des langages de requête de données
Extrait de cette des articles. Un exemple d'opération : join, qui joint les tables.

Matériel d'étude :

Bon cours d'introduction de Stanford. En général, il existe de nombreux documents sur l'algèbre relationnelle et la théorie - Coursera, Udacity. Il existe également une énorme quantité de matériel en ligne, notamment de bons cours académiques. Mon conseil personnel : il faut très bien comprendre l'algèbre relationnelle - c'est la base des bases.

SQL

Notes du Data Scientist : Un examen personnalisé des langages de requête de données
Extrait de cette articles.

SQL est essentiellement une implémentation de l'algèbre relationnelle - avec une mise en garde importante, SQL est déclaratif ! Autrement dit, lorsque vous écrivez une requête dans le langage de l'algèbre relationnelle, vous dites en fait comment calculer - mais avec SQL, vous spécifiez ce que vous souhaitez extraire, puis le SGBD génère déjà des expressions (efficaces) dans le langage de l'algèbre relationnelle (leurs l'équivalence nous est connue sous le nom de Théorème de Codd).

Notes du Data Scientist : Un examen personnalisé des langages de requête de données
Extrait de cette articles.

Pourquoi?

SGBD relationnels : Oracle, Postgres, SQL Server, etc. sont encore pratiquement partout et il y a de fortes chances que vous deviez interagir avec eux, ce qui signifie que vous devrez soit lire SQL (ce qui est très probable), soit l'écrire ( ce n'est pas improbable non plus).

Que lire et étudier

D'après les mêmes liens ci-dessus (sur l'algèbre relationnelle), il existe une quantité incroyable de matériel, par exemple, cette.

Au fait, qu’est-ce que NoSQL ?

"Il convient de souligner une fois de plus que le terme "NoSQL" a une origine absolument spontanée et ne repose sur aucune définition généralement acceptée ni institution scientifique." Correspondant article sur Habr.

En fait, les gens ont réalisé qu'un modèle relationnel complet n'est pas nécessaire pour résoudre de nombreux problèmes, en particulier pour ceux où, par exemple, les performances sont critiques et où certaines requêtes simples avec agrégation dominent - où il est essentiel de calculer rapidement des métriques et de les écrire dans le base de données, et la plupart des fonctionnalités relationnelles se sont avérées non seulement inutiles, mais également nuisibles - pourquoi normaliser quelque chose si cela gâche la chose la plus importante pour nous (pour une tâche spécifique) - la productivité ?

En outre, des schémas flexibles sont souvent nécessaires à la place des schémas mathématiques fixes du modèle relationnel classique - ce qui simplifie considérablement le développement d'applications lorsqu'il est essentiel de déployer le système et de commencer à travailler rapidement en traitant les résultats - ou le schéma et les types de données stockées. ne sont pas si importants.

Par exemple, nous créons un système expert et souhaitons stocker des informations sur un domaine spécifique ainsi que des méta-informations - nous ne connaissons peut-être pas tous les champs et stockons simplement JSON pour chaque enregistrement - cela nous donne un environnement très flexible pour étendre les données. modèle et itération rapide - donc dans ce cas, NoSQL sera encore préférable et plus lisible. Exemple d'entrée (d'un de mes projets où NoSQL était là où il était nécessaire).

{"en_wikipedia_url":"https://en.wikipedia.org/wiki/Johnny_Cash",
"ru_wikipedia_url":"https://ru.wikipedia.org/wiki/?curid=301643",
"ru_wiki_pagecount":149616,
"entity":[42775,"Джонни Кэш","ru"],
"en_wiki_pagecount":2338861}

Plus de détails peuvent être lus ici à propos de NoSQL.

Que étudier ?

Ici, il vous suffit d'analyser en profondeur votre tâche, ses propriétés et les systèmes NoSQL disponibles qui correspondent à cette description - puis de commencer à étudier ce système.

Langages de requête de script

Au début, il semble que Python ait à voir avec cela en général - c'est un langage de programmation, et pas du tout une question de requêtes.

Notes du Data Scientist : Un examen personnalisé des langages de requête de données

  • Pandas est littéralement un couteau suisse de la science des données ; une énorme quantité de transformation, d'agrégation, etc.
  • Numpy - calculs vectoriels, matrices et algèbre linéaire.
  • Scipy - il y a beaucoup de mathématiques dans ce package, en particulier des statistiques.
  • Laboratoire Jupyter - de nombreuses analyses de données exploratoires s'intègrent bien dans les ordinateurs portables - utiles à savoir.
  • Requêtes - travailler avec le réseau.
  • Pyspark est très populaire parmi les ingénieurs de données, vous devrez probablement interagir avec celui-ci ou avec Spark, simplement en raison de leur popularité.
  • *Selenium - très utile pour collecter des données à partir de sites et de ressources, parfois il n'y a tout simplement aucun autre moyen d'obtenir les données.

Mon principal conseil : apprenez Python !

Pandas

Prenons comme exemple le code suivant :

import pandas as pd
df = pd.read_csv(“data/dataset.csv”)
# Calculate and rename aggregations
all_together = (df[df[‘trip_type’] == “return”]
    .groupby(['start_station_name','end_station_name'])
                  	    .agg({'trip_duration_seconds': [np.size, np.mean, np.min, np.max]})
                           .rename(columns={'size': 'num_trips', 
           'mean': 'avg_duration_seconds',    
           'amin': min_duration_seconds', 
           ‘amax': 'max_duration_seconds'}))

Essentiellement, nous voyons que le code s’inscrit dans le modèle SQL classique.

SELECT start_station_name, end_station_name, count(trip_duration_seconds) as size, …..
FROM dataset
WHERE trip_type = ‘return’
GROUPBY start_station_name, end_station_name

Mais le plus important est que ce code fait partie du script et du pipeline ; en fait, nous intégrons des requêtes dans le pipeline Python. Dans cette situation, le langage de requête nous vient de bibliothèques telles que Pandas ou pySpark.

En général, dans pySpark, nous voyons un type similaire de transformation de données via un langage de requête dans l'esprit de :

df.filter(df.trip_type = “return”)
  .groupby(“day”)
  .agg({duration: 'mean'})
  .sort()

Où et quoi lire

Sur Python lui-même en général pas de problème trouver du matériel à étudier. Il existe un grand nombre de tutoriels en ligne pandas, pySpark et des cours sur Spark (et aussi par lui-même DS). Dans l’ensemble, le contenu ici est idéal pour rechercher sur Google, et si je devais choisir un package sur lequel me concentrer, ce serait bien sûr les pandas. Concernant la combinaison des matériaux DS+Python également beaucoup.

Shell comme langage de requête

De nombreux projets de traitement et d'analyse de données avec lesquels j'ai travaillé sont, en fait, des scripts shell qui appellent du code en Python, Java et les commandes shell elles-mêmes. Par conséquent, en général, vous pouvez considérer les pipelines dans bash/zsh/etc comme une sorte de requête de haut niveau (vous pouvez, bien sûr, y insérer des boucles, mais ce n'est pas typique du code DS dans les langages shell), donnons un exemple simple - j'avais besoin de faire un mappage QID des données wiki et des liens complets vers les wikis russe et anglais, pour cela j'ai écrit une simple requête à partir des commandes dans le bash et pour la sortie j'ai écrit un script simple en Python, que j'ai mis ensemble comme ceci :

pv “data/latest-all.json.gz” | 
unpigz -c  | 
jq --stream $JQ_QUERY | 
python3 scripts/post_process.py "output.csv"

JQ_QUERY = 'select((.[0][1] == "sitelinks" and (.[0][2]=="enwiki" or .[0][2] =="ruwiki") and .[0][3] =="title") or .[0][1] == "id")' 

C'est en fait l'intégralité du pipeline qui a créé le mappage requis ; comme nous le voyons, tout a fonctionné en mode flux :

  • pv filepath - donne une barre de progression basée sur la taille du fichier et transmet son contenu
  • unpigz -c lit une partie de l'archive et la donne à jq
  • jq avec le key - stream a immédiatement produit le résultat et l'a transmis au postprocesseur (comme dans le tout premier exemple) en Python
  • en interne, le postprocesseur était une simple machine à états qui formatait la sortie 

Au total, un pipeline complexe fonctionnant en mode flux sur des données volumineuses (0.5 To), sans ressources importantes et constitué d'un simple pipeline et de quelques outils.

Autre conseil important : être capable de travailler correctement et efficacement dans le terminal et d'écrire bash/zsh/etc.

Où sera-t-il utile ? Oui, presque partout - encore une fois, il existe BEAUCOUP de matériel à étudier sur Internet. En particulier, ici ceci mon article précédent.

Scripts R

Encore une fois, le lecteur peut s'exclamer : eh bien, c'est tout un langage de programmation ! Et bien sûr, il aura raison. Cependant, je rencontrais généralement R dans un contexte tel qu’il ressemblait en fait à un langage de requête.

R est un environnement informatique statistique et un langage pour le calcul statique et la visualisation (selon cette).

Notes du Data Scientist : Un examen personnalisé des langages de requête de données
Pris par conséquent,. D'ailleurs je le recommande, bon matériel.

Pourquoi un data scientist a-t-il besoin de connaître R ? Au moins, parce qu'il existe une énorme couche de non-informaticiens qui analysent les données dans R. Je l'ai rencontré aux endroits suivants :

  • Secteur pharmaceutique.
  • Biologistes.
  • Secteur financier.
  • Des personnes ayant une formation purement mathématique et qui s'occupent de statistiques.
  • Modèles statistiques spécialisés et modèles d'apprentissage automatique (qui ne peuvent souvent être trouvés que dans la version de l'auteur sous forme de package R).

Pourquoi s’agit-il en fait d’un langage de requête ? Sous la forme sous laquelle on le trouve souvent, il s'agit en fait d'une demande de création d'un modèle, comprenant la lecture de données et la correction des paramètres de requête (modèle), ainsi que la visualisation de données dans des packages tels que ggplot2 - c'est aussi une forme d'écriture de requêtes. .

Exemples de requêtes pour la visualisation

ggplot(data = beav, 
       aes(x = id, y = temp, 
           group = activ, color = activ)) +
  geom_line() + 
  geom_point() +
  scale_color_manual(values = c("red", "blue"))

En général, de nombreuses idées de R ont migré vers des packages python tels que pandas, numpy ou scipy, comme les dataframes et la vectorisation des données - donc en général, beaucoup de choses dans R vous sembleront familières et pratiques.

Il existe de nombreuses sources à étudier, par exemple, cette.

Graphiques de connaissances

Ici, j'ai une expérience un peu inhabituelle, car je dois assez souvent travailler avec des graphes de connaissances et des langages de requête pour les graphiques. Par conséquent, revenons brièvement sur les bases, car cette partie est un peu plus exotique.

Dans les bases de données relationnelles classiques nous avons un schéma fixe, mais ici le schéma est flexible, chaque prédicat est en fait une « colonne » et même plus.

Imaginez que vous modélisiez une personne et que vous vouliez décrire des éléments clés, par exemple, prenons une personne spécifique, Douglas Adams, et utilisons cette description comme base.

Notes du Data Scientist : Un examen personnalisé des langages de requête de données
www.wikidata.org/wiki/Q42

Si nous utilisions une base de données relationnelle, nous devrions créer une ou plusieurs tables énormes avec un grand nombre de colonnes, dont la plupart seraient NULL ou remplies d'une valeur False par défaut. Par exemple, il est peu probable que beaucoup d'entre nous aient une entrée dans la bibliothèque nationale coréenne - bien sûr, nous pourrions les mettre dans des tableaux séparés, mais cela reviendrait en fin de compte à une tentative de modéliser un circuit logique flexible avec des prédicats en utilisant un circuit relationnel fixe.

Notes du Data Scientist : Un examen personnalisé des langages de requête de données
Imaginez donc que toutes les données soient stockées sous forme de graphique ou d'expressions booléennes binaires et unaires.

Où pouvez-vous même rencontrer cela ? Premièrement, travailler avec wiki de données, et avec toutes les bases de données graphiques ou données connectées.

Voici les principaux langages de requête que j'ai utilisés et avec lesquels j'ai travaillé.

SPARQL

Wiki:
SPARQL (acronyme récursif à partir de Ing. Protocole SPARQL et langage de requête RDF) - langage de requête de données, représenté par le modèle RDFet protocole pour transmettre ces demandes et y répondre. SPARQL est une recommandation Consortium W3C et l'une des technologies Web sémantique.

Mais en réalité, il s’agit d’un langage de requête pour les prédicats logiques unaires et binaires. Vous spécifiez simplement de manière conditionnelle ce qui est corrigé dans une expression booléenne et ce qui ne l'est pas (très simplifié).

La base RDF (Resource Description Framework) elle-même, sur laquelle les requêtes SPARQL sont exécutées, est une triple object, predicate, subject - et la requête sélectionne les triplets requis selon les restrictions spécifiées dans l'esprit : trouver un X tel que p_55(X, q_33) soit vrai - où, bien sûr, p_55 est une sorte de relation avec l'ID 55, et q_33 est un objet avec l'ID 33 (ici et toute l'histoire, en omettant encore une fois toutes sortes de détails).

Exemple de présentation des données :

Notes du Data Scientist : Un examen personnalisé des langages de requête de données
Photos et exemple avec des pays ici par conséquent,.

Exemple de requête de base

Notes du Data Scientist : Un examen personnalisé des langages de requête de données

En fait, nous voulons trouver la valeur de la variable ?country telle que pour le prédicat
member_of, il est vrai que member_of(?country,q458) et q458 sont l'ID de l'Union européenne.

Un exemple de requête SPARQL réelle dans le moteur Python :

Notes du Data Scientist : Un examen personnalisé des langages de requête de données

En règle générale, j'ai dû lire SPARQL plutôt que de l'écrire. Dans cette situation, il serait probablement utile de comprendre le langage au moins à un niveau de base pour comprendre exactement comment les données sont récupérées. 

Il y a beaucoup de matériel pour étudier en ligne : par exemple, ici cette и cette. Je recherche généralement des conceptions et des exemples spécifiques sur Google et c'est suffisant pour l'instant.

Langages de requête logique

Vous pouvez en savoir plus sur le sujet dans mon article ici. Et ici, nous examinerons seulement brièvement pourquoi les langages logiques sont bien adaptés à l'écriture de requêtes. Essentiellement, RDF n'est qu'un ensemble d'instructions logiques de la forme p(X) et h(X,Y), et une requête logique a la forme suivante :

output(X) :- country(X), member_of(X,“EU”).

Nous parlons ici de la création d'un nouveau prédicat output/1 (/1 signifie unaire), à ​​condition que pour X, il soit vrai que country(X) - c'est-à-dire que X est un pays et également member_of(X,"EU ").

Autrement dit, dans ce cas, les données et les règles sont présentées de la même manière, ce qui permet de modéliser les problèmes très facilement et correctement.

Où vous êtes-vous rencontrés dans l’industrie ?: tout un grand projet avec une entreprise qui écrit des requêtes dans un tel langage, ainsi que sur le projet en cours au cœur du système - il semblerait que ce soit une chose plutôt exotique, mais cela arrive parfois.

Un exemple de fragment de code dans un langage logique traitant des données wiki :

Notes du Data Scientist : Un examen personnalisé des langages de requête de données

Matériel : Je vais donner ici quelques liens vers le langage de programmation logique moderne Answer Set Programming - je recommande de l'étudier :

Notes du Data Scientist : Un examen personnalisé des langages de requête de données

Source: habr.com

Ajouter un commentaire