Ir al contenido principal

Diagrama de temas

    • 4.4 Preprocesar datos para IA y AA


      • Preprocesamiento de datos


        El preprocesamiento de datos es la tarea de aplicar varias técnicas de transformación y codificación a los datos para que un algoritmo de aprendizaje automático los pueda interpretar y analizar. La parte "previa" del preprocesamiento implica que los datos se están preparando, de manera similar a como ETL prepara los datos en las primeras etapas. La diferencia es que, en el preprocesamiento, gran parte de la transformación preliminar ya está hecha y en realidad solo se enfoca en prepararse para el aprendizaje automático. El preprocesamiento es importante porque todos los algoritmos de aprendizaje automático tienen diferentes conjuntos de desafíos y requisitos, por lo que debe asegurarse de que los datos puedan adaptarse a ellos. Si piensa que su proyecto de IA avanza hacia la creación de un modelo de aprendizaje automático, el preprocesamiento es el último paso.

        Hay muchas técnicas que se definen como de preprocesamiento, entre las que se encuentran las siguientes:
        Identificación y control de valores faltantes.
        Escalado de variables mediante normalización y estandarización.
        Eliminación de características innecesarias o inservibles.
        Diseño de nuevas características.
        Nota: Algunos profesionales optan por controlar los valores faltantes al principio del proceso de ETL.
        Información adicional

        Para obtener más información sobre el preprocesamiento de datos, consulte este sitio.

      • Identificación de valores faltantes

        En un conjunto relacional de datos, los datos que faltan, también llamados datos nulos, normalmente se refieren a cualquier valor de datos que no exista para una intersección determinada entre una fila y una columna. Por ejemplo:

        ID del estudiante Apellido Nombre Resultado de la prueba
        0001 Ferard Catherine 98.5
        0002 Murphy Jeremy
        0003 Haverson Maria 75.5

        Falta el resultado de la prueba de Jeremy Murphy en el conjunto de datos. Si tuviera que intentar tomar la media de Test Score, puede producir un error debido a ese valor faltante. Cada herramienta de análisis de datos y de lenguaje de programación controla los valores faltantes de manera diferente, pero muchos de ellos al menos le indicarán que faltan valores y dónde se produce la faltante. Sin embargo, tenga en cuenta que algunos valores considerados "faltantes" en realidad se completarán y no será tan fácil detectarlos. Si hubiera un signo de interrogación en la celda de puntuación de la prueba de Jeremy Murphy en lugar de estar completamente vacía, entonces tendría que buscar específicamente signos de interrogación en lugar de valores sin completar. Por lo tanto, debe prestar atención a cómo las fuentes de datos indican que faltan datos, ya que pueden hacerlo de maneras inusuales o no estándares.

        Nota: Las filas y columnas enteras que faltan no se pueden identificar fácilmente mediante una herramienta automatizada y, en su lugar, requieren más análisis e investigación.

      • Imputación de valores faltantes

        Aunque las herramientas de datos pueden controlar los valores que faltan por sí solas, es mejor si decide exactamente cómo tratar los datos que faltan. Si simplemente no lo tiene en cuenta, el algoritmo puede hacer frente a los datos que faltan, pero el modelo resultante puede no funcionar también. Al preparar los datos, puede quitar registros con valores que faltan, pero eso también puede ser una mala opción, dependiendo de cuántos registros tenga que eliminar y qué otros datos contengan. Demasiados registros eliminados pueden limitar la eficacia del modelo, especialmente si los datos que faltan solo constituyen un pequeño porcentaje de las características generales.

        En algunos casos, el mejor enfoque puede ser imputar los valores faltantes. Imputación significa proporcionar su mejor estimación para completar los valores que faltan. Hay numerosas estrategias para hacer esto. Algunos ejemplos se describen aquí.

        Método de imputación Descripción
        Imputación de media o modo Calcule la media o el modo de todos los elementos que no faltan en esa columna y, a continuación, utilice el resultado para rellenar los valores que faltan. Por ejemplo, para completar la calificación de estudiante que falta, solo tomaría la media de todas las calificaciones de los estudiantes menos los valores que faltan. Este enfoque es simple, ya que conserva el valor de la media/modo y el tamaño de la muestra. Sin embargo, puede que no sea tan bueno como otros métodos enumerados aquí.
        Sustitución Utilizar datos a partir de un nuevo registro que aún no está en la muestra. Por ejemplo, es posible que encuentre otra fuente de calificaciones de estudiantes con la que puede sustituir la que falta.
        Imputación Hot Deck Busque registros en el ejemplo que tengan valores similares en todos los demás elementos de datos que el que falta y copie el valor que falta de uno de los registros similares. Si hay más de un registro similar, seleccione aleatoriamente el que copia. Por ejemplo, si faltaba la calificación de un estudiante para una sola asignatura (por ejemplo, clase de Historia), podría encontrar a otro estudiante con calificaciones similares en las asignaturas restantes y, a continuación, reutilizar la puntuación de Historia de ese alumno como la puntuación de Historia para el alumno con el valor que falta.
        Imputación Cold Deck Similar a la imputación de hot deck, pero en lugar de extraer de la misma muestra en la que se encuentra el valor que falta, se extrae de una muestra externa. Por ejemplo, es posible que se haya registrado una muestra diferente de estudiantes en el pasado reciente, por lo que intentará encontrar un estudiante similar en esa muestra.


        Información adicional

        Para obtener más información acerca de la imputación de valores faltantes, consulte este sitio.


      • Escalado de las características

        Los algoritmos del aprendizaje automático descubren patrones en los datos a través de diferentes enfoques. En algunos casos, la distribución de los datos es un factor primario y la magnitud real de los valores es secundaria, irrelevante o activamente perjudicial para el proceso. Por lo tanto, es posible que deba aplicar funciones de escalado a las variables numéricas para enfatizar su distribución, restando énfasis a las diferencias en las escalas. De lo contrario, una característica podría ejercer más influencia que otra simplemente porque trata con números a mayor escala. El escalado es especialmente importante cuando se utilizan algoritmos basados en la distancia mientras que los algoritmos basados en el árbol no requieren que se escalen las características.

        Imagine que tiene un conjunto de datos de vehículos con dos características numéricas: miles_driven y years_old. El problema es que el primero tiene números que probablemente se extienden a cientos de miles mientras que el segundo tendrá un valor máximo en las decenas. Ambas características podrían ser igualmente útiles para realizar una tarea de aprendizaje automático, por ejemplo, estimar el valor de un automóvil en el mercado. Pero, teniendo en cuenta que las características pertenecen a escalas muy diferentes, los algoritmos basados en la distancia podrían tratar a miles_driven como mucho más importante. Por lo tanto, debe asegurarse de que el algoritmo considere cada característica en términos de distribución de los valores. Los dos enfoques principales para ello son la normalización y la estandarización.

      • Normalización y estandarización

        La normalización implica transformar una característica de forma que el valor más bajo sea un 0 y el valor más alto sea un 1. Por lo tanto, cualquier vehículo que tenga menos millas recorridas tendrá un 0 en lugar de cualquiera que sea el verdadero valor. Y, el vehículo con más millas recorridas tendrá un 1 en lugar del valor real. El mismo principio exacto se aplica también a la edad del vehículo y a cualquier otra característica numérica que usted crea que necesita ser escalada. Ahora el algoritmo de aprendizaje automático verá la distribución de estas características en lugar de los valores absolutos.

        La estandarización también proporciona escalado, pero lo hace de una manera diferente. Calcula la puntuación z de un valor (también llamada puntuación estándar) como el número de desviaciones estándar en que la muestra está por encima o por debajo de la media de todos sus valores. Puede obtener la puntuación z de las millas recorridas de cualquier vehículo, la antigüedad, etc. Estas puntuaciones se estandarizan para que cada característica tenga un valor medio de cero y una desviación estándar tenga un valor medio de 1. Una vez más, esto enfatiza la distribución de la característica en lugar de su escala absoluta.

        Un enfoque no es necesariamente mejor que el otro en todos los casos. La normalización tiende a ser útil cuando los datos sin procesar no siguen una distribución normal y usted desea usar los datos con un algoritmo que no suponga ningún tipo particular de distribución. Además es bueno para minimizar el efecto de los valores atípicos. Dado que la estandarización no tiene límites superiores o inferiores, no minimiza los valores atípicos de la misma manera. A menudo es útil para cuando los datos sin procesar ya están distribuidos normalmente y solo desea asegurarse de que dos características estén en la misma escala. Aun así, por lo general es mejor experimentar con ambos para determinar qué es lo mejor para una situación determinada.

        Información adicional 

        Para obtener más información sobre la normalización en contraposición a la estandarización, consulte este sitio.

      • Diseño de las características


        El diseño de las características es la técnica que permite generar y extraer características de los datos para mejorar la capacidad de un modelo de aprendizaje automático para realizar estimaciones. Las características que tiene actualmente no son necesariamente las mejores características posibles para el problema que está tratando de resolver. Al crear características nuevas y de mayor utilidad, puede elaborar un modelo superior para una tarea determinada.

        El diseño de las características es realmente un término general para varios tipos de tareas que pueden lograr este objetivo. Varias de estas tareas se discutirán en breve, incluyendo:


        - Codificación de datos categóricos.
        - Agrupamiento de variables continuas.
        - División de las características.
        - Selección y extracción de características para reducir la dimensionalidad.

        Antes de empezar a diseñar nuevas características, debe asegurarse de haber completado algunas de las tareas de preprocesamiento antes mencionadas, especialmente el control de los datos faltantes y la eliminación de los valores duplicados. Debe determinar qué características se pueden eliminar directamente del conjunto de datos porque son redundantes o no tienen poder predictivo. Por ejemplo, user_id podría crear una buena clave principal en una tabla relacional, pero un modelo de aprendizaje automático probablemente no va a aprender mucho de ella. Una vez completadas estas tareas preliminares, puede pasar al diseño de las características.

        Información adicional

        Para obtener más información sobre el diseño de características, consulte este sitio.

      • Codificación de datos

        La codificación de datos es el proceso de conversión de datos de un tipo determinado en un valor codificado de un tipo diferente. Esto normalmente significa tomar letras y palabras y convertirlas en números. El número resultante se convierte en una nueva característica dentro del conjunto de datos y la característica original se elimina o se deja de lado cuando se crea un modelo.

        La codificación de datos es importante porque muchos algoritmos de aprendizaje automático simplemente no pueden controlar los datos categóricos que se representan como texto. Por ejemplo, supongamos que tiene una city característica que tiene los valores posibles 'Berlin''London' y 'Rochester'. Se trata de una variable categórica y el algoritmo debe tratarla como tal. Pero en lugar de alimentar esos nombres directamente al algoritmo, es probable que deba convertirlos en números primero. Sin embargo, tenga en cuenta que la codificación de una variable categórica no significa que se convierta en una característica numérica. La característica sigue siendo categórica, aunque se esté representando mediante un número.

        Hay muchos métodos para codificar variables categóricas. Uno de los más frecuentes se conoce como codificación one-hot. Mediante este método, crea una columna ficticia para cada valor único de una característica categórica. Por ejemplo, puede crear tres columnas denominadas isBerlinisLondon e isRochester. La presencia de cada categoría está representada por 1 y su ausencia se representa mediante 0. Esto garantiza que el algoritmo de aprendizaje automático no asignará a ninguna categoría (Berlín, Londres o Rochester, en este caso) más valor que a las demás. Un método de codificación relacionado es la codificación ficticia, que crea n #LioxSpecialChar8722# 1 columnas, mientras que la codificación one-hot crea n columnas, donde n es el número de valores únicos en la variable categórica.

        Otro esquema de codificación que puede encontrar es la codificación de etiquetas. La codificación de etiquetas traduce cada valor único de una etiqueta en números independientes. Entonces, city_encoded tendría [0, 1, 2] como valores posibles, dónde 0 es Berlín, 1 es Londres y 2 es Rochester. Sin embargo, esto implica cierto rango, donde un modelo de aprendizaje automático podría percibir que Rochester es el mejor clasificado, lo que podría no ser la intención del proceso.

        Información adicional

        Para obtener más información sobre la codificación de datos, consulte este sitio.

      • Agrupamiento de datos

        Recuerde que la diferencia entre una variable continua y una variable discreta es que una variable continua es incontable porque no tiene espacios bien definidos entre los valores, mientras que una variable discreta tiene espacios claros. Algunos algoritmos, como los árboles de decisión, tienen dificultades para trabajar con variables continuas porque el árbol puede seguir dividiéndose una y otra vez hasta que se vuelve demasiado grande e ineficiente. Si identificó características útiles en el conjunto de datos que tengan variables continuas, es posible que deba diseñar características discretas a partir de ellas antes de introducir los datos en un algoritmo.

        Convertir una variable continua en una variable discreta puede simplificar y mejorar en gran medida el rendimiento de los modelos. El método principal para hacer esto es tomar una variable continua y colocar sus valores dentro de intervalos específicos e independientes; un proceso también llamado agrupamiento de datos.

        En un conjunto de datos de personas que corrieron un maratón, cambiar la característica Time a Time in Hours es un ejemplo de agrupamiento de una variable continua. Si supone que el corredor más rápido terminó la carrera en alrededor de 2 horas y al más lento le tomó alrededor de 10 horas, podría colocar un tiempo en uno de los 8 intervalos de horas diferentes. Una buena regla general es no usar más de 20 contenedores totales. Ahora que la variable es discreta, los algoritmos de aprendizaje automático como los árboles de decisión podrán controlarla.

        Información adicional
        Para obtener más información sobre el agrupamiento de datos, consulte este sitio.


      • División de las características

        En algunos casos, una característica del conjunto de datos podría beneficiarse de la división en dos o más características. Por ejemplo, supongamos que tiene una característica llamada name que contiene nombres y apellidos. Por lo tanto, uno de los valores podría ser 'Emily Williams'. Si las variaciones en los nombres presentan un impacto en cualquier problema que su modelo esté tratando de resolver (por ejemplo, determinar la ascendencia), entonces estos datos podrían ser más útiles si los nombres y apellidos se dividieran de acuerdo con sus propias características por separado. De esta manera, el modelo puede aprender de estos dos tipos de nombres de forma independiente en lugar de considerarlos como una porción única de información.

        La división de las características es común con datos en texto como los nombres, las ubicaciones, los identificadores y los títulos. La decisión de dividir o no una cadena de este tipo se informará principalmente conociendo el dominio. Tal vez location = 'Rochester, NY, US' dividir en city = 'Rochester' state = 'NY'country = 'US' arrojará mejores estimados, o tal vez no. Debe considerar la posibilidad de experimentar con el análisis y el modelado para observar cómo las diferentes divisiones producen resultados diferentes.

        La división de las características también es común con los valores de fecha y hora. Por ejemplo, es posible que desee tomarlo date = 2021-02-25 y convertirlo en características independientes para year month y day.

      • Reducción de dimensionalidad

        Agregar a las características totales de un conjunto de datos (también llamada dimensionalidad), como cuando se divide una única variable en varias variables, puede hacer que un modelo sea más efectivo. Después de todo, al modelo se le dan características más potencialmente útiles de las que aprender. Por desgracia, no siempre es así. Algunas características pueden ser redundantes o hacer que el proceso de aprendizaje sea demasiado ruidoso, lo que puede complicar los procesos de análisis y creación de modelos y tener un impacto negativo en el rendimiento. Si el número de ejemplos de datos permanece constante, en algún momento, agregar a la dimensionalidad de un conjunto de datos realmente comenzará a reducir la capacidad del modelo para aprender patrones útiles de los datos. Esto se llama la maldición de la dimensionalidad.

        La reducción de dimensionalidad es el proceso de simplificar un conjunto de datos mediante la eliminación de características redundantes o irrelevantes. La reducción de dimensionalidad puede ayudar a reducir el problema de ajustar un modelo tan estrechamente a los datos de entrada que el modelo tiene un rendimiento deficiente en las nuevas muestras de datos (un problema denominado "sobreajuste"). La reducción de dimensionalidad también puede disminuir el tiempo de cálculo y aliviar los problemas de espacio de almacenamiento.

        Dos categorías de reducción de dimensionalidad son la selección de entidades y la extracción de características.

        En la selección de características, se selecciona un subconjunto de las características originales. Este subconjunto incluye características relevantes o únicas, y excluye las características consideradas redundantes o irrelevantes para el problema. El modelo aprende de este subconjunto en lugar de aprender de todo el conjunto de datos. La selección de características es especialmente útil en los conjuntos de datos que tienen un número desproporcionadamente grande de entidades en comparación con los ejemplos de datos reales.

        En la extracción de características, se derivan nuevas características de las originales. Esto se hace normalmente mediante la combinación de varias características correlacionadas en una sola. Por ejemplo, si está tratando de predecir cuándo un avión de carga necesitará reparaciones, la característica years_in_service probablemente se correlaciona en gran medida con las características miles_traveled y flight_time, por lo que las tres pueden combinarse en una característica derivada que representa el uso general del avión. La extracción de características es particularmente útil en aplicaciones de visión artificial como el procesamiento de imágenes.

        Si bien el objetivo es minimizar la pérdida de datos útiles tanto como sea posible, todavía existe el riesgo de que esto suceda. Sin embargo, la reducción de dimensionalidad casi siempre vale la pena, especialmente con conjuntos de datos complicados y ricos en características.

        Análisis de componentes principales

        El análisis de componentes principales (PCA) es uno de los métodos de reducción de dimensionalidad más comunes. Realiza un tipo de extracción de características tomando datos que están en dimensiones altas (es decir, tiene muchas columnas) y proyectando esos datos en un espacio de dimensiones iguales o inferiores (es decir, menos columnas). Por lo tanto, reduce eficazmente la dimensionalidad del conjunto de datos al tiempo que conserva información significativa.

        Información adicional

        Para obtener más información sobre la reducción de dimensionalidad, consulte este sitio.

      • Preprocesamiento de datos para IA y AA


        Antes de empezar

        Analyzing Data.ipynb está abierto en Jupyter Notebook.
        Nota: Si cerró Jupyter Notebook desde que completó la actividad anterior, deberá reiniciar Jupyter Notebook y volver a abrir el archivo. Para asegurarse de que todos los objetos y la salida de Python están en el estado correcto para comenzar esta actividad:

        1. Seleccione Kernel→Reiniciar & y Borrar salida.

        2. Seleccione Reiniciar y borrar todas las salidas.

        3. Desplácese hacia abajo y seleccione la celda con la etiqueta Identificar los valores faltantes.

        4. Seleccione Celda→ Ejecutar todo lo anterior.

        Escenario

        El conjunto de datos de viviendas ya está en muy buena forma, pero notó un par de problemas que debe abordar. Faltan algunos datos que debe controlar antes que el conjunto de datos pueda usarse para crear un modelo de aprendizaje automático. En lugar de eliminar todos los datos que faltan en conjunto, deberá utilizar un enfoque más preciso y aplicar diferentes métodos a diferentes instancias.

        Dado que desea introducir estos datos en algoritmos de aprendizaje automático, también debe asegurarse de que los datos están realmente en una forma que esos algoritmos puedan leer. Muchos algoritmos de aprendizaje automático no pueden abordar características categóricas que usan valores de cadena, por lo que esos valores deben codificarse como números. Convertirá la característica roof_type mediante la codificación one-hot.


        -------------------------------------------------------------------------------------------------------------------------------------------------------------

        1. Identifique los valores faltantes.
        1. Desplácese hacia abajo y vea la celda titulada Identificar valores faltantes y examine la lista de código debajo de ella.

        Esto mostrará el número total de valores faltantes para cada columna.

        2. Ejecute la celda de código.

        3. Examine el resultado.

        Parece que solo dos columnas contienen valores faltantes: price y bathrooms.

        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        2. Identifique el porcentaje de valores faltantes para cada característica.
        1. Desplácese hacia abajo y vea la celda titulada Identificar el porcentaje de valores faltantes para cada característica y examine la lista de código debajo de ella.

        Otra forma de examinar los valores faltantes es ver qué porcentaje de los datos de esa columna faltan.

        2. Ejecute la celda de código.

        3. Examine el resultado.

        El porcentaje de valores faltantes para ambas entidades es muy bajo. Estos no tendrán un gran impacto, pero los abordará de todos modos.

        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        3. Asignar valores faltantes para price.
        1. Desplácese hacia abajo y vea la celda titulada Asignar valores de datos faltantes para price y examine la lista de código debajo de ella.

        Este código recuperará una única muestra de una casa con un valor faltante de price.

        2. Ejecute la celda de código.

        3. Examine el resultado.

        Nota: Dado que sample() toma una muestra aleatoria del conjunto de datos, es probable que la muestra sea diferente de lo que se muestra en la captura de pantalla.

        4. En la siguiente celda de código, examine el código. 

        Hay muchas maneras de asignar los valores numéricos que faltan, pero la media es un método común. Por lo tanto, en este código, los valores faltantes para price se completaran con la media de todos los valores que no faltan.
        5. Ejecute la celda de código.

        6. Examine el resultado.

        La media utilizada para completar los valores faltantes es $540.173,46.
        7. En la siguiente celda de código, examine el código.


        8. Ejecute la celda de código.

        9. Examine el resultado.

        La casa de muestra de antes ahora tiene $540.173,46 como su valor de price, como se esperaba.

        Nota: El número de registro de la muestra debe coincidir con la muestra aleatoria que recuperó anteriormente, que probablemente diferirá de esta captura de pantalla.

        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        4.Quite todas las filas donde bathrooms sea nulo (faltante).
        1. Desplácese hacia abajo y vea la celda titulada Quitar la fila donde bathrooms sea nulo y examine la lista de código debajo de ella.


        Se esperaría que todas las casas tuvieran al menos un baño, por lo que la presencia de valores faltantes podría indicar daños en los datos. Para estar seguro, deberá eliminar las filas que tengan baños faltantes.

        2. Ejecute la celda de código.

        3. Examine el resultado.

        Solo a una casa le faltan datos sobre sus baños.

        4. En la siguiente celda de código, examine el código.

        Este código quitará la fila dañada.

        5. Ejecute la celda de código.

        6. En la siguiente celda de código, examine el código.

        Este código comprobará si hay casas con un valor nulo para los baños para comprobar que eliminó correctamente esa fila.

        7. Ejecute la celda de código.

        8. Examine el resultado.
        Se quitaron todas las filas dañadas.

        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        5. Realice una última búsqueda de valores faltantes.
        1. Desplácese hacia abajo y vea la celda titulada Buscar más valores faltantes y examine la lista de código debajo de ella.

        Solo para estar seguro, deberá realizar una última búsqueda de valores faltantes.

        2. Ejecute la celda de código.

        3. Examine el resultado.

        No hay más valores faltantes en el conjunto de datos.


        ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

        6. Identifique las características categóricas que deben codificarse.
        1. Desplácese hacia abajo y vea la celda titulada Identificar características categóricas que deben codificarse y examine la lista de código debajo de ella.

        Este código identificará y mostrará las características categóricas de tipo objeto de cadena y su cantidad. Dado que las cadenas contienen texto, no funcionarán bien con los algoritmos de aprendizaje automático, por lo que primero se deben convertir a un tipo de datos numérico.


        2. Ejecute la celda de código.

        3. Examine el resultado.

        Solo hay una característica categórica que es actualmente un objeto de cadena: roof_type. Hay otras características categóricas en el conjunto de datos, pero ya se codificaron como valores numéricos.

        -------------------------------------------------------------------------------------------------------------------------------------------------------------
        7.  Codificación one-hot para roof_type.
        1. Desplácese hacia abajo y vea la celda titulada Codificación one-hot para roof_type y examine la lista de código debajo de ella.

        Este código le proporcionará un recordatorio del número de valores de la característica roof_type.

        2. Ejecute la celda de código.

        3. Examine el resultado.

        Hay 3 tipos de techo en total.
        4. En la siguiente celda de código, examine el código.

        La característica roof_type no tiene un orden natural, por lo que es un buen candidato para la codificación one-hot. Cada valor se asignará a su propia característica, donde 0 indica ausencia y 1 indica presencia.

        5. Ejecute la celda de código.

        6. En la siguiente celda de código, examine el código.

        Este código realizará la transformación en sí.

        7. Ejecute la celda de código.

        8. Examine el resultado.

        Puede ver varias columnas nuevas en el conjunto de datos, denominadas roof_type_x donde x es uno de los tres valores. Cada fila tiene un 0 en cada columna roof_type_x excepto una, la cual tiene un valor de 1. Por ejemplo, la primera casa en el conjunto de datos tiene un techo de asfalto y la segunda tiene un techo de arcilla.

        9. En la siguiente celda de código, examine el código.
        Este código mostrará las diferentes características del conjunto de datos.

        10. Ejecute la celda de código.

        11. Examine el resultado.

        Aquí hay otra vista de todas las nuevas características.

        12. En la siguiente celda de código, examine el código.


        13. Ejecute la celda de código.

        14. Examine el resultado.

        Como se esperaba, se agregaron 3 nuevas columnas. (La columna roof_type original se eliminó, lo que llevó a una ganancia neta de dos columnas).

        -------------------------------------------------------------------------------------------------------------------------------------------------------------
        8. Escriba el DataFrame como un archivo pickle.
        1. Desplácese hacia abajo y vea la celda titulada Guardar el DataFrame como un archivo pickle y examine la lista de código debajo de ella.

        Este código guardará los datos de houses_data_encoded en el archivo houses_data_encoded.pickle para que pueda usar este DataFrame de nuevo más adelante en este curso.

        2.Ejecute la celda de código.

        -------------------------------------------------------------------------------------------------------------------------------------------------------------
        9. Cierre este kernel de Jupyter Notebook y la máquina virtual.
        1. En Firefox, seleccione la pestaña Analyzing Data.ipynb.
        2. En el menú, seleccione Kernel→Cerrar.
        3. En el cuadro de diálogo ¿Cerrar kernel?, seleccione Cerrar.
        4. Cierre Firefox.
        5. Cierre la ventana Terminal que ejecuta el programa Jupyter Notebook.
        6. En el menú VirtualBox VM en la parte superior de la pantalla, seleccione Equipo→Apagar ACPI y, si es necesario, seleccione Apagar. Compruebe que la ventana de la VM se cierre.
        7. Cierre la ventana Oracle VM VirtualBox Manager.