Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos
Dígoche por experiencia persoal o que foi útil onde e cando. É unha visión xeral e unha tese, para que quede claro que e onde podes cavar máis, pero aquí teño unha experiencia persoal exclusivamente subxectiva, quizais todo sexa completamente diferente para ti.

Por que é importante coñecer e ser capaz de usar linguaxes de consulta? Na súa esencia, Data Science ten varias etapas importantes de traballo, e a primeira e máis importante (sen ela, certamente nada funcionará!) é a obtención ou extracción de datos. Na maioría das veces, os datos están asentados nalgún lugar e hai que "recuperlos" desde alí. 

Os idiomas de consulta permítenche extraer estes datos. E hoxe falareivos deses linguaxes de consulta que me resultaron útiles e vouvos dicir e mostrarvos onde e como exactamente - por que é necesario estudar.

Haberá tres bloques principais de tipos de consulta de datos, que trataremos neste artigo:

  • As linguaxes de consulta "estándar" son o que se entende habitualmente cando se fala dunha linguaxe de consulta, como álxebra relacional ou SQL.
  • Linguaxes de consulta de scripts: por exemplo, Python things pandas, numpy ou shell scripting.
  • Linguaxes de consulta para gráficos de coñecemento e bases de datos de gráficos.

Todo o escrito aquí é só unha experiencia persoal, o que foi útil, cunha descrición das situacións e "por que foi necesario": todo o mundo pode probar como se poden presentar situacións similares e tentar prepararse para elas con antelación entendendo estas linguas. antes tes que solicitar (urxentemente) un proxecto ou mesmo chegar a un proxecto onde sexan necesarios.

Linguaxes de consulta "estándar".

As linguaxes de consulta estándar son precisamente no sentido en que adoitamos pensar nelas cando falamos de consultas.

Álxebra relacional

Por que é necesaria a álxebra relacional hoxe? Para comprender ben por que as linguaxes de consulta están estruturadas dunha determinada maneira e usalas conscientemente, cómpre comprender o núcleo que as subxace.

Que é álxebra relacional?

A definición formal é a seguinte: a álxebra relacional é un sistema pechado de operacións sobre relacións nun modelo de datos relacional. Para dicilo un pouco máis humano, este é un sistema de operacións sobre táboas de tal xeito que o resultado é sempre unha táboa.

Consulta todas as operacións relacionais en isto artigo de Habr: aquí describimos por que necesitas saber e onde é útil.

Por que?

Comezar a comprender de que se tratan as linguaxes de consulta e cales son as operacións que hai detrás das expresións en linguaxes de consulta específicas moitas veces dá unha comprensión máis profunda do que funciona e como funciona nas linguaxes de consulta.

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos
Tomado de isto artigos. Un exemplo de operación: join, que une táboas.

Materiais para o estudo:

Bo curso de iniciación de Stanford. En xeral, hai moitos materiais sobre álxebra relacional e teoría: Coursera, Udacity. Tamén hai unha gran cantidade de material en liña, incluído o bo cursos académicos. O meu consello persoal: cómpre comprender moi ben a álxebra relacional: esta é a base dos conceptos básicos.

SQL

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos
Tomado de isto artigos.

SQL é esencialmente unha implementación de álxebra relacional; cunha advertencia importante, SQL é declarativo. É dicir, ao escribir unha consulta na linguaxe de álxebra relacional, en realidade dis como calcular, pero con SQL especificas o que queres extraer e, a continuación, o DBMS xa xera expresións (eficaces) na linguaxe de álxebra relacional (a súa a equivalencia é coñecida por nós como Teorema de Codd).

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos
Tomado de isto artigos.

Por que?

DBMS relacionais: Oracle, Postgres, SQL Server, etc. aínda están practicamente en todas partes e hai unha probabilidade incrible de que teñas que interactuar con eles, o que significa que terás que ler SQL (o que é moi probable) ou escribilo ( tampouco improbable).

Que ler e estudar

Segundo as mesmas ligazóns anteriores (sobre álxebra relacional), hai unha cantidade incrible de material, por exemplo, isto.

Por certo, que é NoSQL?

"Paga a pena subliñar unha vez máis que o termo "NoSQL" ten unha orixe absolutamente espontánea e non ten unha definición xeralmente aceptada nin unha institución científica detrás". Correspondente artigo en Habr.

De feito, a xente decatouse de que non se necesita un modelo relacional completo para resolver moitos problemas, especialmente para aqueles nos que, por exemplo, o rendemento é crítico e dominan certas consultas sinxelas con agregación, onde é fundamental calcular métricas rapidamente e escribirlas no base de datos, e a maioría das funcións son relacionais resultaron non só innecesarias, senón tamén prexudiciais - por que normalizar algo se estropeará o máis importante para nós (para algunha tarefa específica) - a produtividade?

Ademais, moitas veces son necesarios esquemas flexibles en lugar dos esquemas matemáticos fixos do modelo relacional clásico - e isto simplifica incriblemente o desenvolvemento de aplicacións cando é fundamental implementar o sistema e comezar a traballar rapidamente, procesando os resultados - ou o esquema e os tipos de datos almacenados. non son tan importantes.

Por exemplo, estamos creando un sistema experto e queremos almacenar información sobre un dominio específico xunto con algunha metainformación. É posible que non coñezamos todos os campos e simplemente almacenemos JSON para cada rexistro; isto dános un ambiente moi flexible para expandir os datos. modelo e iteración rápida, polo que neste caso, NoSQL será aínda preferible e máis lexible. Exemplo de entrada (dun dos meus proxectos onde NoSQL estaba xusto onde era necesario).

{"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}

Pódense ler máis detalles aquí sobre NoSQL.

Que estudar?

Aquí, máis ben, só precisa analizar a fondo a súa tarefa, que propiedades ten e que sistemas NoSQL están dispoñibles que se axusten a esta descrición, e despois comezar a estudar este sistema.

Linguaxes de consulta de scripts

Ao principio, parece, que ten que ver Python con iso en xeral: é unha linguaxe de programación, e non sobre consultas en absoluto.

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos

  • Pandas é literalmente unha navalla suíza de Data Science; nel ocorre unha gran cantidade de transformación de datos, agregación, etc.
  • Numpy - cálculos vectoriais, matrices e álxebra lineal alí.
  • Scipy: hai moitas matemáticas neste paquete, especialmente estatísticas.
  • Laboratorio Jupyter: moitas análises de datos exploratorios encaixan ben nos portátiles, é útil saber.
  • Solicitudes: traballo coa rede.
  • Pyspark é moi popular entre os enxeñeiros de datos, o máis probable é que teñas que interactuar con este ou Spark, simplemente pola súa popularidade.
  • *Selenio: moi útil para recoller datos de sitios e recursos, ás veces simplemente non hai outro xeito de obter os datos.

O meu principal consello: aprende Python!

pandas

Imos tomar o seguinte código como exemplo:

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'}))

Esencialmente, vemos que o código encaixa no patrón SQL clásico.

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

Pero a parte importante é que este código forma parte do script e da canalización; de feito, estamos incorporando consultas na canalización de Python. Nesta situación, a linguaxe de consulta chéganos de bibliotecas como Pandas ou pySpark.

En xeral, en pySpark vemos un tipo similar de transformación de datos a través dunha linguaxe de consulta co espírito de:

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

Onde e que ler

No propio Python en xeral non é un problema atopar materiais para estudar. Hai un gran número de tutoriais en liña pandas, pySpark e cursos sobre Faísca (e tamén por si só DS). En xeral, o contido aquí é excelente para buscar en Google, e se tivese que escoller un paquete no que centrarse, serían os pandas, por suposto. Respecto á combinación de materiais DS+Python tamén moito.

Shell como linguaxe de consulta

Moitos proxectos de procesamento e análise de datos cos que traballei son, de feito, scripts de shell que chaman código en Python, Java e os propios comandos shell. Polo tanto, en xeral, podes considerar as canalizacións en bash/zsh/etc como algún tipo de consulta de alto nivel (pode, por suposto, facer bucles alí, pero isto non é típico para o código de DS en linguaxes de shell), imos dar un exemplo sinxelo: necesitaba facer un mapeo QID de wikidata e ligazóns completas ás wikis en ruso e inglés, para iso escribín unha solicitude sinxela dos comandos do bash e para a saída escribín un script sinxelo en Python, que xuntos así:

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

onde

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

Esta foi, de feito, toda a canalización que creou a asignación necesaria; como vemos, todo funcionaba no modo de fluxo:

  • pv ruta do ficheiro: dá unha barra de progreso baseada no tamaño do ficheiro e pasa o seu contido adiante
  • unpigz -c leu parte do arquivo e deulle a jq
  • jq coa chave - o fluxo inmediatamente produciu o resultado e pasouno ao postprocesador (igual que co primeiro exemplo) en Python
  • internamente, o postprocesador era unha máquina de estado simple que formateaba a saída 

En total, unha canalización complexa que traballa en modo fluxo en grandes datos (0.5 TB), sen recursos significativos e feita a partir dunha canalización sinxela e un par de ferramentas.

Outro consello importante: poder traballar ben e eficazmente no terminal e escribir bash/zsh/etc.

Onde será útil? Si, case en todas partes, de novo, hai MOITOS materiais para estudar en Internet. En particular, aquí эта meu artigo anterior.

R scripting

De novo, o lector pode exclamar: ben, esta é toda unha linguaxe de programación! E por suposto, terá razón. Non obstante, adoitaba atoparme con R nun contexto tal que, de feito, era moi semellante a unha linguaxe de consulta.

R é un contorno e linguaxe de computación estatística para a computación estática e a visualización (segundo este).

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos
tomada por iso. Por certo, recoméndoo, bo material.

Por que un científico de datos necesita coñecer R? Polo menos, porque hai unha enorme capa de persoas non informáticas que analizan datos en R. Atopei con el nos seguintes lugares:

  • Sector farmacéutico.
  • Biólogos.
  • Sector financeiro.
  • Persoas cunha formación puramente matemática que se ocupan das estatísticas.
  • Modelos estatísticos especializados e modelos de aprendizaxe automática (que moitas veces só se poden atopar na versión do autor como paquete R).

Por que é realmente unha linguaxe de consulta? Na forma na que se atopa a miúdo, en realidade é unha solicitude para crear un modelo, incluíndo a lectura de datos e a fixación de parámetros de consulta (modelo), así como a visualización de datos en paquetes como ggplot2; esta tamén é unha forma de escribir consultas. .

Consultas de exemplo para a visualización

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

En xeral, moitas ideas de R migraron a paquetes de Python como pandas, numpy ou scipy, como dataframes e vectorización de datos, polo que, en xeral, moitas cousas en R pareceránche familiares e convenientes.

Hai moitas fontes para estudar, por exemplo, isto.

Gráficas de coñecemento

Aquí teño unha experiencia un pouco inusual, porque moitas veces teño que traballar con gráficos de coñecemento e linguaxes de consulta para gráficos. Polo tanto, repasemos brevemente o básico, xa que esta parte é un pouco máis exótica.

Nas bases de datos relacionais clásicas temos un esquema fixo, pero aquí o esquema é flexible, cada predicado é en realidade unha "columna" e aínda máis.

Imaxina que estabas modelando unha persoa e querías describir cousas clave, por exemplo, tomamos unha persoa específica, Douglas Adams, e usemos esta descrición como base.

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos
www.wikidata.org/wiki/Q42

Se usamos unha base de datos relacional, teriamos que crear unha táboa ou táboas enormes cunha gran cantidade de columnas, a maioría das cales serían NULL ou cubertas con algún valor Falso predeterminado, por exemplo, é improbable que moitos de nós teñamos un entrada na biblioteca nacional de Corea - por suposto, poderiamos poñelas en táboas separadas, pero isto sería finalmente un intento de modelar un circuíto lóxico flexible con predicados usando un relacional fixo.

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos
Entón, imaxine que todos os datos se almacenan como un gráfico ou como expresións booleanas binarias e unarias.

Onde podes atopar isto? En primeiro lugar, traballar con wiki de datos, e con calquera base de datos gráfica ou datos conectados.

Os seguintes son os principais idiomas de consulta que usei e cos que traballei.

SPARQL

Wiki:
SPARQL (acrónimo recursivo de inglés Protocolo SPARQL e linguaxe de consulta RDF) - linguaxe de consulta de datos, representado polo modelo R.F.D.E protocolo transmitir estas solicitudes e responder a elas. SPARQL é unha recomendación Consorcio W3C e unha das tecnoloxías web semántica.

Pero en realidade é unha linguaxe de consulta para predicados lóxicos unarios e binarios. Simplemente estás especificando condicionalmente o que está fixado nunha expresión booleana e o que non (moi simplificado).

A propia base RDF (Resource Description Framework), sobre a que se executan consultas SPARQL, é un triplo object, predicate, subject - e a consulta selecciona as triplas necesarias de acordo coas restricións especificadas no espírito: atopar unha X tal que p_55(X, q_33) sexa verdadeira - onde, por suposto, p_55 é algún tipo de relación co ID 55 e q_33 é un obxecto con ID 33 (aquí e toda a historia, omitindo de novo todo tipo de detalles).

Exemplo de presentación de datos:

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos
Imaxes e exemplos con países aquí por iso.

Exemplo de consulta básica

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos

De feito, queremos atopar o valor da variable ?país tal que para o predicado
member_of, é certo que member_of(?country,q458) e q458 é o ID da Unión Europea.

Un exemplo dunha consulta SPARQL real dentro do motor Python:

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos

Normalmente, tiven que ler SPARQL en lugar de escribilo; nesa situación, probablemente sería unha habilidade útil comprender a linguaxe polo menos nun nivel básico para comprender exactamente como se recuperan os datos. 

Hai moito material para estudar en liña: por exemplo, aquí isto и isto. Normalmente busco en google deseños e exemplos específicos e de momento é suficiente.

Linguaxes de consulta lóxica

Podes ler máis sobre o tema no meu artigo aquí. E aquí, só examinaremos brevemente por que as linguaxes lóxicas son moi adecuadas para escribir consultas. Esencialmente, RDF é só un conxunto de instrucións lóxicas da forma p(X) e h(X,Y), e unha consulta lóxica ten a seguinte forma:

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

Aquí estamos a falar de crear un novo predicado output/1 (/1 significa unario), sempre que para X sexa certo que country(X) - é dicir, X é un país e tamén member_of(X,"EU ").

É dicir, neste caso, tanto os datos como as regras preséntanse do mesmo xeito, o que permite modelar problemas de xeito moi sinxelo e ben.

Onde coñeceu na industria?: todo un proxecto grande cunha empresa que escribe consultas nun idioma deste tipo, así como sobre o proxecto actual no núcleo do sistema; parece que isto é algo bastante exótico, pero ás veces ocorre.

Un exemplo de fragmento de código nunha linguaxe lóxica que procesa wikidata:

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos

Materiais: Vou dar aquí un par de ligazóns á linguaxe de programación lóxica moderna Answer Set Programming - Recomendo estudalo:

Notas do científico de datos: unha revisión personalizada das linguaxes de consulta de datos

Fonte: www.habr.com

Engadir un comentario