Muchas veces, las actividades relacionadas con la computaci
ón est
án orientadas al manejo de grandes vol
úmenes de informaci
ón estructurada, particularmente, en las organizaciones de gran tama
ño. Wolfram Language cuenta con una forma muy eficaz de manejar informaci
ón estructurada, mediante lo que se llama
conjuntos de datos.
Un ejemplo simple de conjunto de datos se forma a partir de una asociaci
ón de asociaciones.
Cree un conjunto de datos simple, que contenga 2 filas y 3 columnas:
Casi siempre, Wolfram Language muestra los conjuntos de datos en forma tabular. Se pueden extraer partes de un conjunto de datos de la misma manera que se har
ía con una asociaci
ón.
Extraiga el elemento en la
“fila b
” y la
“columna z
”:
O podría extraerse primero la “fila b” completa y, de ahí, extraer el elemento “z”:
También podría extraerse la “fila b” completa del conjunto de datos. El resultado es un nuevo conjunto de datos, que en este caso se muestra en forma de columna para facilitar su lectura.
Genere un nuevo conjunto de datos a partir de la “fila b” del conjunto de datos original:
Aquí se muestra el conjunto de datos correspondiente a la “columna z” para todos las “filas”.
Genere un conjunto de datos que conste de la “columna z” para todas las filas:
La extracci
ón de partes de un conjunto de datos es apenas el comienzo. Dondequiera que se pueda extraer una parte, puede pensarse en una funci
ón que se aplique a todas las partes en ese nivel.
Obtenga los totales de cada fila aplicando
Total a todas las columnas en cada una de las filas:
Si se usara
f en vez de
Total, puede verse de inmediato lo que sucede: dicha funci
ón se est
á aplicando a cada una de las asociaciones
“fila
”.
Aplique la función f a cada fila:
Aplique una función que efectúe la suma de los elementos x y z que estén en cada una de las asociaciones:
Puede usarse cualquier funci
ón; aqu
í se usar
á PieChart:
Puede también pensarse en una función que se aplique a todos las filas.
Aquí se extrae el valor de cada “columna z” y, luego, se aplica f a la asociación de los resultados:
Se aplica f a los totales de cada una de las columnas:
Encuentre el mayor de esos totales:
Siempre se pueden
“encadenar
” consultas: por ejemplo, se encuentran primero los totales para cada fila, y luego se elige el resultado de la
“fila b
”.
Encuentre los totales para cada fila, y luego elegir el total de la “fila b”:
Lo anterior es equivalente a:
Especialmente cuando se trata de grandes conjuntos de datos, es usual que se quiera escoger partes de acuerdo con alg
ún criterio. La
forma de operador para
Select facilita notablemente este prop
ósito.
Escoja los n
úmeros mayores que 5 de una lista:
Ahora se muestra una forma diferente de hacer lo mismo, usando
Select en su forma de operador:
La forma de operador de
Select es una funci
ón que puede aplicarse para ejecutar efectivamente la operaci
ón de
Select.
Forme un conjunto de datos seleccionando únicamente las filas cuya “columna z” sea mayor que 5:
Para cada fila, seleccione las columnas cuyos valores sean mayores que 5, lo que dejará una estructura irregular:
Normal convierte el conjunto de datos en una asociaci
ón com
ún y corriente de asociaciones:
Muchas de las funciones de Wolfram Language admiten formas de operador.
Ordene de acuerdo con los valores de alguna funci
ón aplicada a cada elemento:
SortBy tiene una forma de operador:
Ordene las filas de acuerdo con el valor de la diferencia entre las columnas x e y:
Ordene las filas y, luego, encuentre el total de cada columna:
En ocasiones, se desea aplicar alguna función a cada uno de los elementos del conjunto de datos.
Aplique f a cada uno de los elementos del conjunto de datos:
Ordene las filas antes de totalizar los cuadrados de sus elementos :
Los conjuntos de datos pueden contener mezclas arbitrarias de listas y asociaciones. Aqu
í se ve uno, que puede verse como si fuera una
lista de registros con
campos denominados.
Un conjunto de datos formado a partir de una lista de asociaciones:
No hay problema si faltan algunas entradas:
Despu
és de estos sencillos ejemplos, puede pasarse a algo ligeramente m
ás realista. Se importa un conjunto de datos que contiene propiedades de planetas y lunas. El conjunto de datos tiene una estructura jer
árquica, donde cada planeta tiene una masa y un radio propios, as
í como tambi
én una colecci
ón de lunas, cada una de las cuales tiene, a su vez, sus propiedades particulares. En la pr
áctica es muy com
ún esta estructura general (ej., alumnos y calificaciones, clientes y pedidos, etc.).
Se trae de la nube un conjunto de datos jer
árquico, sobre planetas y lunas:
Obtenga el radio de cada uno de los planetas:
Haga un diagrama de barras con los radios de los planetas:
Si se piden las lunas de Marte se obtiene un conjunto de datos, al que se pueden hacer consultas ulteriores.
Obtenga un conjunto de datos de las lunas de Marte:
Se “escarba más” para hacer una tabla con los radios de las lunas de Marte:
Se pueden efectuar c
ómputos relativos a las lunas de todos los planetas. Para empezar, se ve cu
ántas lunas aparecen en la lista para cada planeta.
Haga un conjunto de datos para el número de lunas listadas para cada planeta:
Obtenga la masa total de todas las lunas de cada planeta:
Obtenga el mismo resultado, pero solamente para aquellos planetas con más de 10 lunas:
Haga el diagrama circular del resultado anterior:
Haga un conjunto de datos con las lunas que tengan más del 1% de la masa de la Tierra.
Para cada una de las lunas, seleccione aquellas cuya masa sea mayor que 0.01 veces la masa de la Tierra:
Obtenga la lista de claves (esto es, los nombres de las lunas) en la asociación que resulta para cada planeta:
Obtenga la asociaci
ón subyacente:
Junte, o
“concatene
”, las listas para todas las claves:
Aquí aparece, en una sola fila, el cómputo completo:
Un ejemplo m
ás: se encuentra el logaritmo de la masa de cada luna y se hace, para cada planeta, una gr
áfica de recta num
érica para dichos valores.
Haga las gráficas de recta numérica para los logaritmos de las masas de las lunas de cada planeta:
Como otro ejemplo, se hace la nube de palabras con los nombres de las lunas, con los tamaños dependiendo de las masas respectivas. Para este fin, se requiere una sola asociación que asocie el nombre de cada luna con su masa.
Cuando se da una asociaci
ón,
WordCloud determina los tama
ños de acuerdo con los valores en la asociaci
ón:
Genere la nube de palabras de las masas de las lunas:
Considerando todo lo que hace, el c
ódigo usado es sorprendentemente sencillo. Puede mejorarse a
ún m
ás si se usa
@* o
/*.
Se vio anteriormente que es posible escribir algo tipo
f[g[x]] como
f@g@x o
x//g//f. Puede tambi
én escribirse
f[g[#]]&[x]. Pero,
¿y qu
é hay con
f[g[#]]&?
¿Hay alguna forma abreviada de escribirlo? S
í, la hay, en t
érminos de los
operadores de composición de funciones @* y
/*.
f@*g@*h representa una composici
ón de funciones que se aplica de derecha-a-izquierda:
h/*g/*f representa una composici
ón de funciones que se aplican de izquierda-a-derecha:
Aqu
í se presenta el c
ódigo anterior reescrito en t
érminos de la composici
ón
@*:
O bien, usando la composici
ón por la derecha
/*:
Como
último ejemplo, se considera otro conjunto de datos, que ahora procede directamente del
Wolfram Data Repository. Aqu
í aparece una p
ágina web (sobre meteoros grandes) del repositorio:
Para traer el conjunto de datos principal que se menciona aqu
í, se usa simplemente
ResourceData.
Obtenga el conjunto de datos, simplemente dando su nombre a
ResourceData:
Extraiga el campo de las coordenadas de cada fila, y grafique los resultados:
Haga un histograma de las altitudes:
Dataset[data] | | un conjunto de datos |
Normal[dataset] | | convierte un conjunto de datos en listas y asociaciones normales |
Catenate[{assoc1, ...}] | | concatena asociaciones, combinando sus elementos |
f@*g | | composición de funciones (f[g[x]] al aplicarla a x) |
f/*g | | composición por la derecha (g[f[x]] al aplicarla a x) |
Nota: Estos ejercicios usan el conjunto de datos
planets=CloudGet["http://wolfr.am/7FxLgPm5"].
45.1Haga una nube de palabras de los planetas, con los pesos determinados por el n
úmero de lunas que tienen.
»
45.2Haga un diagrama de barras del n
úmero de lunas de cada planeta.
»
45.3Construya un conjunto de datos con las masas de los planetas, ordenados por el n
úmero de sus lunas.
»
45.4Forme un conjunto de datos de cada planeta y la masa de su luna m
ás masiva.
»
45.5Genere un conjunto de datos con las masas de los planetas, ordenados de acuerdo con la masa de la mayor de sus lunas.
»
45.6Forme un conjunto de datos con las medianas de las masas de las lunas de cada planeta.
»
45.7Para cada uno de los planetas, construya una lista de las lunas cuyas masas sean mayores que 0.0001 veces la masa de la Tierra.
»
45.8Haga una nube de palabras de los pa
íses centroamericanos, con los nombres proporcionales a las longitudes de sus respectivos art
ículos en Wikipedia.
»
45.9Encuentre la altitud m
áxima observada en el conjunto de datos Fireballs & Bolides.
»
45.10Encuentre el conjunto de datos de las 5 mayores altitudes observadas en el conjunto de datos Fireballs & Bolides.
»
45.11Haga un histograma con las diferencias entre tiempos sucesivos del brillo pico en el conjunto de datos Fireballs & Bolides.
»
45.12Grafique las ciudades m
ás pr
óximas para los 10 primeros casos en el conjunto de datos Fireballs & Bolides, con etiquetas para cada ciudad.
»
45.13Presente gr
áficamente las ciudades m
ás pr
óximas para los 10 casos con mayores altitudes en el conjunto de datos Fireballs & Bolides, con etiquetas para cada ciudad.
»
¿Qué tipo de información pueden contener los conjuntos de datos?
Cualquier tipo. No solo números y texto, sino también imágenes, gráficos, y muchas otras cosas. Además, no es necesario que todos los elementos de una fila o columna dada sean del mismo tipo.
¿Se pueden convertir hojas de c
álculo a conjuntos de datos?
¿Qu
é son las bases de datos y c
ómo se relacionan con
Dataset?
Las bases de datos son la forma tradicional de guardar informaci
ón estructurada en un sistema de c
ómputo y, por lo general, est
án dise
ñadas para permitir tanto la lectura como la escritura de informaci
ón.
Dataset es una forma de representar la informaci
ón guardada en una base de datos de modo tal que pueda manipularse con Wolfram Language.
¿C
ómo se compara la informaci
ón en
Dataset con la existente en una base de datos SQL relacional?
Las bases de datos SQL se basan estrictamente en tablas de datos acomodados en filas y columnas de tipos determinados, con datos adicionales vinculados mediante
”claves externas
”.
Dataset puede tener una mezcla cualquiera de tipos de informaci
ón, con cualquier n
úmero de niveles de anidaci
ón y cualquier estructura jer
árquica, que tiene un poco m
ás de analog
ía con una base de datos NoSQL, pero con operaciones adicionales que se posibilitan debido a la naturaleza simb
ólica del lenguaje.
¿Pueden usarse conjuntos de datos para armar entidades y valores asociados con ellas?
S
í. Si se tiene un conjunto de datos que sea una asociaci
ón de asociaciones, cuyas claves exteriores sean entidades y cuyas interiores sean propiedades, entonces es suficiente con poner esto dentro de
EntityStore, y con esto se tiene pr
ácticamente todo armado.
- Dataset maneja un nuevo tipo de estructura simbólica de base de datos, que generaliza tanto las bases de datos relacionales como las jerárquicas.
- Dataset tiene muchos otros mecanismos y capacidades adicionales que no se vieron en esta sección.
- Todo lo que pueda hacerse con consultas a conjuntos de datos puede hacerse también usando funciones tales como Map y Apply en las listas y asociación subyacentes; pero, por lo general, es más simple hacerlo mediante consultas al conjunto de datos.
- Wolfram Language puede conectarse directamente con bases de datos SQL, y hacer consultas con la sintaxis de SQL, usando DatabaseLink.