
En esta demostración, veremos cómo seleccionar filas específicas y usar el comando "subconjunto", que se encuentra interactivamente en el menú "Tablas", para extraer un subconjunto de la tabla de datos. En la sección "Diario del curso", haré clic en "Datos de temperatura de la estación de esquí". Esta tabla de datos es amplia, pero bastante corta. En nuestro caso, tenemos una estación de esquí con una estación meteorológica que registra la temperatura cada hora y la guarda en un archivo. Cada observación del archivo contendrá la fecha y las lecturas de temperatura por hora. Comienza en la mañana, al igual que la temperatura en la mañana. Supongamos que cuando la temperatura baja de -10 °C, planeamos encender las máquinas de nieve artificial, ya que a esa temperatura podría hacer demasiado frío para que nieve. Por lo tanto, queremos revisar nuestro registro de datos históricos para encontrar los días en los que habríamos usado esa máquina de nieve artificial. Quizás estemos intentando justificar la adición de otra máquina o el reemplazo de la existente. Un par de cosas más. Primero, esta temperatura se registró en escala Fahrenheit, no Celsius. Segundo, usamos solo un pequeño subconjunto de los datos. Estos datos están ordenados por día, pero esto representa una de nuestras mejores prácticas al trabajar con un conjunto grande de datos: intentar obtener una muestra representativa de observaciones para desarrollar el script y probarlo con un subconjunto más pequeño. Esperamos que esto represente cualquier problema que se pueda esperar encontrar en los datos. Y luego, se puede probar con el conjunto completo de datos. En este ejemplo, esperamos que sea representativo, ya que solo tomamos una semana de datos. Otro punto es que tenemos temperaturas Fahrenheit registradas, pero nuestro límite es -grados Celsius. Si bien podemos convertir -grados Celsius a Fahrenheit, reiteraremos el concepto de trabajar con operaciones vectorizadas: extraeremos todas las temperaturas Fahrenheit como una matriz y las convertiremos a Celsius. En el diario hay un script preescrito llamado "Aislar días de nieve artificial". Lo ejecutaré paso a paso. En esta demostración, usaré la opción de registro incrustado en lugar de navegar por la ventana de registro. Haré clic derecho en la ventana del editor de scripts y seleccionaré "Mostrar registro incrustado". Ajustaré su tamaño para que podamos ver el script completo en la ventana del editor. Seleccionaré "línea" y lo ejecutaré. Esto obtiene la referencia de la tabla de datos actual (temperatura del albergue de esquí) y la almacena en "dt". Luego, enviaré el mensaje "get as matrix" y lo almacenaré en la variable "tempF". Ejecutaré "línea". Con una matriz más grande, en lugar de mostrarla en el registro, obtenemos sus dimensiones y la indicación de que se ha asignado. Observen que tiene siete filas y columnas. Si vuelvo a la tabla de datos, verá que contiene columnas. ¿Por qué solo extrajimos las columnas? Si observan la columna de fecha, pueden ver que es nominal. Esto sugiere que quizás se trate como datos de caracteres en lugar de numéricos. Puedo confirmarlo aún más; por supuesto, podría ir a la información de la columna, pero también puedo confirmarlo ampliando un poco la columna y observando que los valores están justificados a la izquierda, que es como JMP maneja los datos de caracteres. Así, cuando envié `get as matrix` a la tabla de datos, ignoró esta columna de caracteres y solo extrajo las columnas numéricas. Line tomará cada elemento de la variable `tempF`, la matriz almacenada allí, la convertirá a Celsius y la almacenará en `tempC`. Vuelvo a recibir el mismo mensaje en el registro, pero pueden pasar el cursor sobre `tempf` o `tempc` para ver sus valores. A continuación, quiero contar las filas en `tempC`, y he mencionado esto como una práctica recomendada: contar filas o columnas fuera de un bucle. Así que cuento las filas de la matriz `tempC` y las almaceno en la variable `nr`. Entonces, ejecutaré la línea y, por supuesto, hay siete. La otra cosa que quiero hacer es tener... Voy a crear dos matrices. Una que da la temperatura mínima en un día determinado, que es minTemp, y la otra que indicará si la máquina para hacer nieve debería haberse encendido o no, y que se llama Machine. Y ambas comenzarán con un número de filas, una columna y valores faltantes. Y entonces, en la línea, estamos aplicando en cascada la función de asignación. Utilizo esa función J para crear una matriz con un número de filas, aquí está el número de filas de tempC, esa única columna como mencioné, y el valor faltante. Y si Machine, minTemp y cualquier otra variable van a comenzar con el mismo valor, simplemente podemos asignarlas en esta forma de cascada como se ve en la línea. Así que ejecutaré eso, y en el registro, si pasa el cursor sobre Machine o minTemp, verá esa columna de valores faltantes. Entonces quiero hacer un bucle, y empiezo con un contador. Pruebo r menor o igual que los números almacenados en nr, y luego el cuerpo del bucle for es Voy a tener una variable llamada obs que tomará en este caso, la primera fila y todas las columnas en tempC. Encontraré el valor mínimo en esa fila y lo pondré en el rth, o primer lugar, en minTemp. Luego compararé el valor que acabo de poner en minTemp en esa posición con menos y si esta comparación es verdadera, si el valor es menor que menos obtendré un booleano como resultado y lo pondré en la primera posición en Machine, mientras que si es falso, si es mayor o igual que menos lo pondré en Machine. Luego actualizamos, probamos de nuevo, y ahora obs se sobrescribirá con la siguiente fila en la tabla de datos. Y haremos los mismos pasos hasta que rellenemos minTemp y Machine. Así que ejecutaré líneas a través y podemos pasar el cursor sobre minTemp. Y nuevamente aparece en la ayuda al pasar el mouse, también aparece en la parte inferior de la ventana de entrada del script que puedes ver abajo. Y puedo pasar el mouse sobre Machine y ahí están esos y Ahora, en los últimos pasos podríamos haber puesto en cascada estos mensajes, pero para fines de demostración, los vamos a separar. Entonces voy a enviar un nuevo mensaje de columna a dt. Se llamará minTemp, y los valores serán solo los que acabo de obtener de ese bucle for. Entonces voy a ejecutar líneas a través de Y puedes ver en el fondo que esa nueva columna ha sido creada. Podría haber agregado un argumento de formato a la nueva columna para tener un número fijo de decimales, por ejemplo. Esto también devolvió una referencia de objeto de columna que podría haber almacenado en una variable si planeaba trabajar con esa columna nuevamente. Luego, el siguiente fragmento de código establece un mensaje para las nuevas columnas a dt. Este se llama Make Snow. Y los valores provienen de ese vector de columna de máquina, que tiene y Y aquí mi script va a solicitar que usemos etiquetas de valor donde si hay un para el valor de los datos la etiqueta será no, y si hay un para el valor de los datos la etiqueta será sí. Y luego, por supuesto, usamos el booleano para activar la opción de usar etiquetas de valor. Entonces, ejecutaré líneas a través de Nuevamente, estamos creando una instancia de un objeto de columna. Y quiero volver a la tabla y desplazarme. Entonces, en la columna ahora mismo lo que estamos mostrando es no y sí. Sin embargo, en el panel de columnas, si me desplazo hacia abajo, aún puede ver que Make Snow es continuo, lo que significa que son datos numéricos para los valores de datos reales. Y otra cosa con las etiquetas de valor cuando las estoy usando, y ese asterisco en el panel de columnas también indica que hay una propiedad, y si hace clic en eso verá esta, cuando estoy usando etiquetas de valor, si paso el cursor sobre una celda en la tabla de datos me muestra el valor de datos real. Pero si fuera a crear un gráfico ahora mismo o cualquier tipo de análisis, usaría estas etiquetas siempre que estén activadas. Y luego, de vuelta en el script, podríamos enviar estos mensajes en cascada a la tabla de datos, pero para fines de demostración, lo haremos en estos pasos. Envío "select where" a la tabla de datos y busco las filas donde el valor de la columna "Make Snow" sea igual a. Así que ejecutaré "line". Y pueden ver que en el fondo hay cuatro filas seleccionadas. Y finalmente, envío el comando "subsect" a la tabla de datos. Proporciono un nombre de tabla de salida y especifico las columnas. Y como tengo cuatro filas seleccionadas, no tengo que decir cuáles quiero. Esas serán automáticamente las que se extraigan a la tabla de subconjuntos. Así que ejecutaré "lines" a través de. Y ahora tenemos esa tabla de subconjuntos. De nuevo, en este punto, podríamos elegir formatear los datos de temperatura mínima. El script de origen refleja el subconjunto. Y echemos un vistazo rápido a eso: hago clic derecho en "source" y selecciono "edit". Cada vez que creo un nuevo script con un comando del menú Tablas, ya sea de forma interactiva o con un script, obtengo el script fuente. Esto simplemente muestra que el comando de tabla utilizado fue "subset". La precaución con "subset" es que no sabe por qué se extrajeron estas filas, por lo que las codifica. No hay base para esa selección en el script que escribe JMP. Además, JMP anula esa tendencia predeterminada de extraer solo las filas seleccionadas al usar "a" como argumento para las filas seleccionadas. Por lo tanto, si quisiera capturar el script y adaptarlo a otro script que estuviera escribiendo, debería eliminar las dos filas que he mostrado y, antes de enviar el mensaje "subset", realizar las selecciones lógicas que requiera su script. Cancelaré ese script. Este ha sido un ejemplo del uso de un comando del menú Tabla, pero también del trabajo con los datos como matrices.