Python Data Analysis-Packt (2021) - Español
Python Data Analysis-Packt (2021) - Español
Prefacio 1
constructores dtype 47
atributos dtype 47
Manipulación de formas de matrices El 48
apilamiento de matrices NumPy 50
Partición de matrices NumPy 53
Cambiar el tipo de datos de matrices 55
NumPy Crear vistas y copias NumPy 56
Cortar matrices NumPy 58
Matrices de difusión de indexación 60
booleana y sofisticada 61
Creación de pandas DataFrames Comprensión 63
de pandas Series Lectura y consulta de los sesenta y cinco
[ii]
Tabla de contenido
[iii]
Tabla de contenido
[iv]
Tabla de contenido
[v]
Tabla de contenido
[vi]
Tabla de contenido
[vii]
Tabla de contenido
[viii]
Prefacio
El análisis de datos le permite generar valor a partir de datos pequeños y grandes al descubrir nuevos
patrones y tendencias, y Python es una de las herramientas más populares para analizar una amplia
variedad de datos. Con este libro, comenzará a usar Python para el análisis de datos mediante la
exploración de las diferentes fases y metodologías utilizadas en el análisis de datos, y aprenderá a usar
bibliotecas modernas del ecosistema de Python para crear canales de datos eficientes.
Comenzando con los fundamentos esenciales de análisis estadístico y de datos usando Python, realizará
análisis y modelado de datos complejos, manipulación de datos, limpieza de datos y visualización de datos
usando ejemplos fáciles de seguir. Luego, aprenderá a realizar análisis de series de tiempo y
procesamiento de señales utilizando modelos ARMA. A medida que avanza, se familiarizará con el
procesamiento inteligente y el análisis de datos mediante algoritmos de aprendizaje automático como
regresión, clasificación,Análisis de componentes principales (PCA) y agrupación. En los capítulos finales,
trabajará en ejemplos del mundo real para analizar datos de texto e imágenes utilizandoprocesamiento
natural del lenguaje (PNL) y técnicas de análisis de imágenes, respectivamente. Finalmente, el libro
demostrará la computación paralela usando Dask.
Al final de este libro de análisis de datos, estará equipado con las habilidades que necesita para preparar datos
para el análisis y crear visualizaciones de datos significativas con el fin de pronosticar valores a partir de los datos.
Capitulo 2, NumPy y Pandas, presenta NumPy y Pandas. Este capítulo proporciona una descripción
general básica de las matrices NumPy, Pandas DataFrames y sus funciones asociadas.
Capítulo 3, Estadísticas, ofrece una descripción general rápida de las estadísticas descriptivas e inferenciales.
Capítulo 4, Álgebra lineal, ofrece una descripción general rápida del álgebra lineal y sus funciones
asociadas NumPy y SciPy.
Capítulo 5, Visualización de datos, nos presenta las bibliotecas de visualización matplotlib, seaborn,
Pandas plotting y bokeh.
Capítulo 6, Recuperar,
procesar y almacenar datos, explica cómo leer y escribir varios formatos
de datos, como CSV, Excel, JSON, HTML y Parquet. Además, discutiremos cómo adquirir datos
de bases de datos relacionales y NoSQL.
Capítulo 7, Limpieza de datos desordenados, explica cómo preprocesar datos sin procesar y realizar ingeniería de
funciones.
Capítulo 8, Procesamiento de señales y series de tiempo, contiene series de tiempo y ejemplos de procesamiento de señales
que utilizan ventas, producción de cerveza y conjuntos de datos del ciclo de las manchas solares. En este capítulo, usaremos
principalmente los modelos NumPy, SciPy y stats.
Capítulo 10, Aprendizaje supervisado: técnicas de clasificación, explica varias técnicas de clasificación, como
Bayes ingenuo, árbol de decisión, K vecinos más cercanos y SVM. Además, discutiremos las medidas de
evaluación del desempeño del modelo.
Capítulo 11, Aprendizaje no supervisado: PCA y agrupación en clústeres, ofrece una discusión detallada sobre la
reducción de dimensionalidad y técnicas de agrupamiento. Además, evaluaremos el rendimiento de la agrupación en
clústeres.
Capítulo 12, Analizar datos textuales, ofrece una descripción general rápida del preprocesamiento de texto, la
ingeniería de funciones, el análisis de opiniones y la similitud de texto. Este capítulo utiliza principalmente las
bibliotecas NLTK, SpaCy y scikit-learn.
Capítulo 13, Analizar datos de imagen, ofrece una descripción general rápida de las operaciones de procesamiento de imágenes
[2]
Prefacio
También podemos instalar cualquier biblioteca o paquete que desee explorar utilizando el pepita
mando. Necesitamos ejecutar el siguiente comando con privilegios de administrador:
También podemos instalarlo desde nuestro Jupyter Notebook con! (signo de exclamación) antes delpepita
mando:
Para desinstalar una biblioteca de Python o un paquete instalado con pepita, use el siguiente comando:
Si está utilizando la versión digital de este libro, le recomendamos que escriba el código usted mismo o
acceda al código a través del repositorio de GitHub (enlace disponible en la siguiente sección). Hacerlo le
ayudará a evitar posibles errores relacionados con la copia y pegado de código.
También tenemos otros paquetes de códigos de nuestro amplio catálogo de libros y videos disponibles.
a https: / / github. com / PacktPublishing /. ¡Échales un vistazo!
[3]
Prefacio
Convenciones utilizadas
En este libro, encontrará varios estilos de texto y convenciones que se utilizan a lo largo de este libro. A continuación,
mostramos algunos ejemplos de estos estilos. Las palabras de código en el texto, los nombres de las tablas de la base de
datos, los nombres de las carpetas, los nombres de los archivos, las extensiones de archivos, las rutas, las URL ficticias, la
entrada del usuario y los identificadores de Twitter se muestran a continuación: "La otra convención lapandas El proyecto
insiste en que es el importar pandas como pd declaración de importación ".
a = np.array ([2,4,6,8,10])
imprimir (a)
$ mkdir
$ cd css
Negrita: Indica un término nuevo, una palabra importante o palabras que ve en la pantalla. Por ejemplo, las palabras en
menús o cuadros de diálogo aparecen en el texto de esta manera. A continuación, se muestra un ejemplo: "Seleccionar
Información del sistema desde el Administración panel."
[4]
Prefacio
Ponerse en contacto
Los comentarios de nuestros lectores es siempre bienvenido.
Retroalimentación general: Si tiene preguntas sobre cualquier aspecto de este libro, mencione el título del
libro en el asunto de su mensaje y envíenos un correo electrónico a [email protected].
Errata: Aunque hemos tomado todas las precauciones para garantizar la precisión de nuestro contenido,
se producen errores. Si ha encontrado un error en este libro, le agradeceríamos que nos lo informara.
Por favor visitawww.packtpub.com/support/errata, seleccionando su libro, haciendo clic en el enlace
Formulario de envío de erratas e ingresando los detalles.
Reseñas
Por favor, deje una reseña. Una vez que haya leído y utilizado este libro, ¿por qué no dejar una reseña en
el sitio donde lo compró? Los lectores potenciales pueden ver y utilizar su opinión imparcial para tomar
decisiones de compra, nosotros en Packt podemos entender lo que piensa sobre nuestros productos y
nuestros autores pueden ver sus comentarios sobre su libro. ¡Gracias!
[5]
Sección 1: Fundación para los datos
-
Análisis
El objetivo principal de esta sección es desarrollar habilidades fundamentales de análisis de datos para el alumno.
Estas habilidades involucran el Jupyter Notebook y bibliotecas básicas de Python como NumPy, Pandas, Scipy y
statsmodels. Además, esta sección se centra en el conocimiento subjetivo de la estadística y el álgebra lineal para
desarrollar capacidades matemáticas.
En este capítulo, nos centraremos en varios procesos de análisis de datos, como KDD, SEMMA y CRISP-DM.
Después de esto, proporcionaremos una comparación entre el análisis de datos y la ciencia de datos, así como
los roles y diferentes conjuntos de habilidades para analistas de datos y científicos de datos. Finalmente,
cambiaremos nuestro enfoque y comenzaremos a instalar varias bibliotecas de Python, IPython, Jupyter Lab y
Jupyter Notebook. También veremos varias funciones avanzadas de Jupyter Notebooks.
¡Empecemos!
En el mundo inteligente de hoy, el análisis de datos ofrece un proceso de toma de decisiones eficaz para las
operaciones comerciales y gubernamentales. El análisis de datos es la actividad de inspeccionar, preprocesar,
explorar, describir y visualizar el conjunto de datos dado. El principal objetivo del proceso de análisis de datos es
descubrir la información necesaria para la toma de decisiones. El análisis de datos ofrece múltiples enfoques,
herramientas y técnicas, todos los cuales se pueden aplicar a diversos dominios, como los negocios, las ciencias
sociales y las ciencias fundamentales.
Veamos algunas de las bibliotecas de análisis de datos fundamentales del ecosistema Python:
NumPy: Esta es una forma corta de Python numérico. Es la biblioteca científica más
poderosa disponible en Python para manejar arreglos, matrices y métodos
multidimensionales con el fin de calcular matemáticas de manera eficiente.
Ciencia: Esta es también una poderosa biblioteca de computación científica para
realizar operaciones científicas, matemáticas y de ingeniería.
Pandas: Esta es una biblioteca de exploración y manipulación de datos que ofrece
estructuras de datos tabulares como DataFrames y varios métodos para el análisis y la
manipulación de datos.
Scikit-aprender: Significa "Kit de herramientas científicas para el aprendizaje automático". Es una
biblioteca de aprendizaje automático que ofrece una variedad de algoritmos supervisados y no
supervisados, como regresión, clasificación, reducción de dimensionalidad, análisis de conglomerados
y detección de anomalías.
[8]
Introducción a las bibliotecas de Python Capítulo 1
Matplotlib: Esta es una biblioteca de visualización de datos central y es la biblioteca base para
todas las demás bibliotecas de visualización en Python. Ofrece diagramas, gráficos, tablas y figuras
en 2D y 3D para la exploración de datos. Se ejecuta sobre NumPy y SciPy.
Seaborn: Se basa en Matplotlib y ofrece gráficos fáciles de dibujar, de alto
nivel, interactivos y más organizados.
Plotly: Plotly es una biblioteca de visualización de datos. Ofrece gráficos interactivos y de alta calidad,
como gráficos de dispersión, gráficos de líneas, gráficos de barras, histogramas, diagramas de caja,
mapas de calor y subtramas.
[9]
Introducción a las bibliotecas de Python Capítulo 1
Podemos resumir estos pasos del proceso de análisis de datos a través del siguiente diagrama de
proceso:
En esta sección, hemos cubierto el proceso estándar de análisis de datos, que enfatiza la búsqueda de
información interpretable y su conversión en una historia de usuario. En la siguiente sección,
discutiremos el proceso KDD.
El proceso KDD
los KDD acrónimo significa descubrimiento de conocimiento a partir de datos o Descubrimiento de
conocimiento en bases de datos. Mucha gente trata a KDD como un sinónimo de minería de datos. La minería
de datos se conoce como el proceso de descubrimiento de conocimientos de patrones interesantes. El objetivo
principal de KDD es extraer o descubrir patrones interesantes ocultos de grandes bases de datos, almacenes de
datos y otros repositorios web y de información. El proceso KDD tiene siete fases principales:
1. Limpieza de datos: En esta primera fase, los datos se preprocesan. Aquí, se elimina el ruido, se
manejan los valores faltantes y se detectan los valores atípicos.
2. Integración de datos: En esta fase, los datos de diferentes fuentes se combinan e
integran mediante la migración de datos y las herramientas ETL.
3. Selección de datos: En esta fase se recogen datos relevantes para la tarea de análisis.
[10]
Introducción a las bibliotecas de Python Capítulo 1
KDD es un proceso iterativo para mejorar la calidad, la integración y la transformación de los datos para
obtener un sistema más mejorado. Ahora, analicemos el proceso SEMMA.
SEMMA
los SEMMA la forma completa del acrónimo es Muestra, Explorar, Modificar, Modelo, y Evaluar. Este
proceso de minería de datos secuencial es desarrollado por SAS. El proceso SEMMA tiene cinco fases
principales:
1. Muestra: En esta fase, identificamos diferentes bases de datos y las fusionamos. Después de
esto, seleccionamos la muestra de datos que es suficiente para el proceso de modelado.
2. Explorar: En esta fase, entendemos los datos, descubrimos las relaciones entre las variables,
visualizamos los datos y obtenemos interpretaciones iniciales.
3. Modificar: En esta fase, los datos se preparan para modelar. Esta fase implica lidiar con
los valores perdidos, detectar valores atípicos, transformar características y crear
nuevas características adicionales.
4. Modelo: En esta fase, la principal preocupación es seleccionar y aplicar diferentes
técnicas de modelado, como regresión lineal y logística, redes de retropropagación,
KNN, máquinas de vectores de soporte, árboles de decisión y Random Forest.
5. Evaluar: En esta última fase, los modelos predictivos que se han desarrollado se evalúan
utilizando medidas de evaluación del desempeño.
[11]
Introducción a las bibliotecas de Python Capítulo 1
El diagrama anterior muestra los pasos involucrados en el proceso SEMMA. SEMMA enfatiza la
construcción y evaluación de modelos. Ahora, analicemos el proceso CRISP-DM.
CRISP-DM
CRISP-DMLa forma completa es Proceso CRoss-InduStry para minería de datos. CRISP-DM es un
proceso bien definido, bien estructurado y probado para proyectos de aprendizaje automático, minería de
datos e inteligencia empresarial. Es un enfoque sólido, flexible, cíclico, útil y práctico para resolver
problemas comerciales. El proceso descubre información valiosa oculta o patrones de varias bases de
datos. El proceso CRISP-DM tiene seis fases principales:
[12]
Introducción a las bibliotecas de Python Capítulo 1
El proceso estándar se enfoca en descubrir ideas y hacer interpretaciones en forma de historia, mientras
que KDD se enfoca en el descubrimiento de patrones basados en datos y en visualizarlos. SEMMA se
enfoca principalmente en tareas de construcción de modelos, mientras que CRISP-DM se enfoca en la
comprensión e implementación del negocio. Ahora que conocemos algunos de los procesos que rodean
el análisis de datos, comparemos el análisis de datos y la ciencia de datos para descubrir cómo se
relacionan, así como qué los hace diferentes entre sí.
[13]
Introducción a las bibliotecas de Python Capítulo 1
Por otro lado, la ciencia de datos es un área interdisciplinaria que utiliza un enfoque científico para extraer conocimientos
de datos estructurados y no estructurados. La ciencia de datos es una unión de todos los términos, incluido el análisis de
datos, la minería de datos, el aprendizaje automático y otros dominios relacionados. La ciencia de datos no solo se limita
al análisis de datos exploratorios y se utiliza para desarrollar modelos y algoritmos de predicción, como el precio de las
acciones, el clima, las enfermedades, los pronósticos de fraude y las recomendaciones, como las recomendaciones de
películas, libros y música.
Los científicos de datos son más técnicos y matemáticos que los analistas de datos. Los científicos de datos están orientados a
la investigación y al mundo académico, mientras que los analistas de datos están más orientados a las aplicaciones. Se espera
que los científicos de datos predigan un evento futuro, mientras que los analistas de datos extraen información significativa de
los datos. Los científicos de datos desarrollan sus propias preguntas, mientras que los analistas de datos encuentran
respuestas a preguntas determinadas. Finalmente, los científicos de datos se enfocan enQue es lo que va a pasar, mientras
que los analistas de datos se centran en Qué ha pasado hasta ahora. Podemos resumir estos dos roles usando la siguiente
tabla:
[14]
Introducción a las bibliotecas de Python Capítulo 1
Ahora que sabemos qué define a un analista de datos y a un científico de datos, así como en qué se
diferencian entre sí, echemos un vistazo a las diversas habilidades que necesitaría para convertirse en
uno de ellos.
Análisis de datos exploratorios (EDA): EDA es una habilidad esencial para los analistas de datos.
Ayuda a inspeccionar datos para descubrir patrones, probar hipótesis y asegurar suposiciones.
Base de datos relacional: El conocimiento de al menos una de las herramientas de bases de datos
relacionales, como MySQL o Postgre, es obligatorio. SQL es imprescindible para trabajar en bases de datos
relacionales.
Herramientas de visualización y BI: Una imagen habla más que las palabras. Las imágenes
tienen un mayor impacto en los humanos y las imágenes son una opción clara y fácil para
representar los conocimientos. Las herramientas de visualización y BI como Tableau, QlikView, MS
Power BI e IBM Cognos pueden ayudar a los analistas a visualizar y preparar informes.
Hoja de cálculo: El conocimiento de MS Excel, WPS, Libra o Google Sheets es
obligatorio para almacenar y administrar datos en forma tabular.
Habilidades de narración y presentación: El arte de contar historias es otra habilidad necesaria.
Un analista de datos debe ser un experto en conectar hechos de datos con una idea o un incidente
y convertirlos en una historia.
[ 15 ]
Introducción a las bibliotecas de Python Capítulo 1
Por otro lado, el trabajo principal de un científico de datos es resolver problemas utilizando datos. Para hacer
esto, necesitan comprender los requisitos del cliente, su dominio, su espacio de problemas y asegurarse de
que obtienen exactamente lo que realmente quieren. Las tareas que realizan los científicos de datos varían de
una empresa a otra. Algunas empresas utilizan analistas de datos y ofrecen el título de científico de datos solo
para glorificar la designación del puesto. Algunos combinan tareas de analista de datos con ingenieros de
datos y ofrecen la designación de científicos de datos; otros los asignan a tareas intensivas en aprendizaje
automático con visualizaciones de datos.
La tarea del científico de datos varía según la empresa. Algunos emplean a científicos de datos
como analistas de datos reconocidos y combinan sus responsabilidades con los ingenieros de
datos. Otros les dan la tarea de realizar una visualización intensiva de datos en las máquinas.
Un científico de datos tiene que ser un experto en todos los oficios y desempeñar múltiples funciones, incluidas las de
analista de datos, estadístico, matemático, programador, ML o ingeniero de PNL. La mayoría de las personas no son lo
suficientemente capacitadas o no son expertas en todos estos oficios. Además, adquirir las habilidades necesarias
requiere mucho esfuerzo y paciencia. Es por eso que la ciencia de datos no se puede aprender en 3 o 6 meses.
Aprender ciencia de datos es un viaje. Un científico de datos debe tener una amplia variedad de habilidades, como las
siguientes:
Bases de datos: El conocimiento de SQL permite a los científicos de datos interactuar con la base de datos
y recopilar los datos para realizar predicciones y recomendaciones.
Aprendizaje automático: Conocimiento de técnicas de aprendizaje automático supervisado, como
análisis de regresión, técnicas de clasificación y técnicas de aprendizaje automático no supervisado,
como análisis de conglomerados, detección de valores atípicos y reducción de dimensionalidad.
[ dieciséis ]
Introducción a las bibliotecas de Python Capítulo 1
Ahora que hemos cubierto los conceptos básicos del análisis de datos y la ciencia de datos, profundicemos en la
configuración básica necesaria para comenzar con el análisis de datos. En la siguiente sección, aprenderemos cómo
instalar Python.
Instalación de Python 3
El archivo de instalación para instalar Python 3 se puede descargar fácilmente desde el sitio web oficial
(https: / / www. python. org / downloads /) para Windows, Linux y Mac de 32 o 64 bits
sistemas. El instalador se puede instalar haciendo doble clic en él. Este instalador también tiene un IDE
llamado "IDLE" que se puede utilizar para el desarrollo. Profundizaremos en cada uno de los sistemas
operativos en las próximas secciones.
Puede descargar Python 3.9.x desde el sitio web oficial de Python: https: //
www.python.org/downloads/. Aquí puede encontrar archivos de instalación para
Windows, Linux, Mac OS X y otras plataformas de SO. Puede encontrar
instrucciones para instalar y usar Python para varios sistemas operativos
a https: / / docs. python. org / 3. 7 / using / index. html.
Necesita tener Python 3.5.xo superior instalado en su sistema. La fecha de finalización de Python
2.7 se trasladó de 2015 a 2020, pero en el momento de escribir este artículo, la comunidad de
Python no admitirá ni mantendrá Python 2.7.
En el momento de escribir este libro, teníamos Python 3.8.3 instalado como requisito previo en nuestro
Máquina virtual de Windows 10: https: / / www. python. org / ftp / python / 3. 8. 3 / python- 3. 8. 3. exe.
[17]
Introducción a las bibliotecas de Python Capítulo 1
Puede ser esencial ejecutar el sudo comando antes del comando anterior si no tiene
suficientes derechos en la máquina que está utilizando.
Para instalar la versión más reciente de Python, debe ejecutar el siguiente comando en una
Terminal:
[18]
Introducción a las bibliotecas de Python Capítulo 1
$ python3 --versión
Python 3.7.4
También puede abrir Python Shell desde la línea de comando ejecutando el siguiente
comando:
$ python3
Ahora que sabemos cómo instalar Python en nuestro sistema, profundicemos en las herramientas reales que
necesitaremos para comenzar el análisis de datos.
Un programa de Python puede ejecutarse fácilmente en cualquier sistema que lo tenga instalado. Podemos
escribir un programa en un Bloc de notas y ejecutarlo en el símbolo del sistema. También podemos escribir y
ejecutar programas Python en diferentes IDE, como Jupyter Notebook, Spyder y PyCharm. Anaconda es un
paquete de código abierto disponible gratuitamente que contiene varios IDE de manipulación de datos y varios
paquetes como NumPy, SciPy, Pandas, Scikit-learn, etc. para fines de análisis de datos. Anaconda se puede
descargar e instalar fácilmente, de la siguiente manera:
[19]
Introducción a las bibliotecas de Python Capítulo 1
Anaconda también tiene un Anaconda Navigator, que es una aplicación GUI de escritorio que se
puede usar para iniciar aplicaciones como Jupyter Notebook, Spyder, Rstudio, Visual Studio Code y
JupyterLab:
Ahora, echemos un vistazo a IPython, un entorno informático basado en shell para el análisis de datos.
[20]
Introducción a las bibliotecas de Python Capítulo 1
Ahora, ejecutemos algunos comandos en IPython. Para iniciar IPython, use el siguiente
comando en la línea de comando:
$ ipython3
Comandos de historial: los historia comando utilizado para comprobar la lista de comandos
utilizados anteriormente. La siguiente captura de pantalla muestra cómo utilizarhistoriacomando
en IPython:
[21]
Introducción a las bibliotecas de Python Capítulo 1
Comandos del sistema: También podemos ejecutar comandos del sistema desde IPython
usando el signo de exclamación (!). Aquí, el comando de entrada después del signo de
exclamación se considera un comando del sistema. Por ejemplo, !fecha mostrará la fecha
actual del sistema, mientras que!pwd mostrará el directorio de trabajo actual:
Salga de Ipython Shell: Puede salir o salir del shell de IPython usando dejar() o
Salida() o CTRL + D:
[22]
Introducción a las bibliotecas de Python Capítulo 1
En esta subsección, hemos visto algunos comandos básicos que podemos usar en el shell de IPython.
Ahora, analicemos cómo podemos usar elayuda comando en el shell de IPython.
Utilice la función de ayuda: Vamos a escribir ayuda y escriba algunos caracteres iniciales de la función.
Después de eso, presione elpestaña , seleccione una función con las teclas de flecha y presione la tecla
Ingresar llave:
Utilice un signo de interrogación: También podemos usar un signo de interrogación después del nombre
de la función. La siguiente captura de pantalla muestra un ejemplo de esto:
En esta subsección, analizamos la ayuda y la compatibilidad con el signo de interrogación que se proporciona para las
funciones del módulo. También podemos obtener ayuda de la documentación de la biblioteca. Analicemos cómo obtener
documentación para el análisis de datos en las bibliotecas de Python.
[23]
Introducción a las bibliotecas de Python Capítulo 1
También puede encontrar respuestas a varias preguntas de programación de Python relacionadas con NumPy,
SciPy, Pandas, Matplotlib, Seaborn y Scikit-learn en la plataforma StackOverflow. También puede plantear problemas
relacionados con las bibliotecas mencionadas anteriormente en GitHub.
Usando JupyterLab
JupyterLab es una interfaz de usuario basada en web de próxima generación. Ofrece una combinación de análisis de datos y
herramientas de desarrollo de productos de aprendizaje automático, como un editor de texto, portátiles, consolas de código y
terminales. Es una herramienta flexible y poderosa que debería formar parte del conjunto de herramientas de cualquier analista
de datos:
[24]
Introducción a las bibliotecas de Python Capítulo 1
En esta sección, hemos aprendido cómo instalar Jupyter Lab. En la siguiente sección, nos centraremos en los
cuadernos de Jupyter.
[25]
Introducción a las bibliotecas de Python Capítulo 1
https: / / github. com / jupyter / jupyter / wiki / Una- galería- de- interesantes-Jupyter-
Cuadernos
https: / / nbviewer. jupyter. org /
A menudo, estos cuadernos se utilizan como herramientas educativas o para demostrar el software Python.
Podemos importar o exportar cuadernos desde código simple de Python o desde el formato de cuaderno
especial. Los portátiles se pueden ejecutar localmente o podemos ponerlos a disposición en línea ejecutando
un servidor de portátiles dedicado. Ciertas soluciones de computación en la nube, como Wakari, PiCloud y
Google Colaboratory, le permiten ejecutar cuadernos en la nube.
[26]
Introducción a las bibliotecas de Python Capítulo 1
Ahora que conocemos varias herramientas y bibliotecas y también hemos instalado Python,
pasemos a algunas de las funciones avanzadas de la herramienta más utilizada, Jupyter
Notebooks.
[27]
Introducción a las bibliotecas de Python Capítulo 1
Atajos de teclado
Los usuarios pueden encontrar todos los comandos de acceso directo que se pueden utilizar dentro de Jupyter
Notebook seleccionando el Atajos de teclado opción en el Ayudar menú o usando el Cmd + Mayús + P tecla de
acceso directo. Esto hará que aparezca la barra de selección rápida, que contiene todos los comandos de atajos,
junto con una breve descripción de cada uno. Es fácil de usar la barra y los usuarios pueden usarla cuando
olvidan algo:
[28]
Introducción a las bibliotecas de Python Capítulo 1
[29]
Introducción a las bibliotecas de Python Capítulo 1
[30]
Introducción a las bibliotecas de Python Capítulo 1
Todas las nbextensiones configurables se mostrarán en una pestaña diferente, como se muestra en la
siguiente captura de pantalla:
Retaguardia: Esto proporciona un menú de autocompletado para cada pulsación de tecla que se
realiza en las celdas y se comporta como PyCharm:
[31]
Introducción a las bibliotecas de Python Capítulo 1
Tabla de contenido: Esta extensión muestra todos los títulos en la barra lateral o en el
menú de navegación. Es redimensionable, arrastrable, plegable y acoplable:
Tiempo de ejecución: Esta extensión muestra cuándo se ejecutaron las celdas y cuánto
tiempo tomará completar el código de la celda:
[32]
Introducción a las bibliotecas de Python Capítulo 1
Selector de variables: Esta extensión realiza un seguimiento del espacio de trabajo del usuario.
Muestra los nombres de todas las variables que creó el usuario, junto con su tipo, tamaño, forma
y valor.
Diapositivas: Los resultados del cuaderno se pueden comunicar a través de Presentación de diapositivas. Esta es una gran
herramienta para contar historias. Los usuarios pueden convertir fácilmente Jupyter Notebooks en diapositivas sin el uso de
PowerPoint. Como se muestra en la siguiente captura de pantalla, la presentación de diapositivas se puede iniciar usando el
Diapositivas opción en la barra de herramientas de la celda del menú Ver:
[33]
Introducción a las bibliotecas de Python Capítulo 1
Jupyter Notebook también le permite mostrar u ocultar cualquier celda en Presentación de diapositivas. Después de agregar el
Diapositivas opción a la barra de herramientas de la celda del menú de vista, puede utilizar una Tipo de diapositiva lista
desplegable en cada celda y seleccione varias opciones, como se muestra en la siguiente captura de pantalla:
Incrustar documentos PDF: Los usuarios de Jupyter Notebook pueden agregar fácilmente
documentos PDF. Se debe ejecutar la siguiente sintaxis para documentos PDf:
[34]
Introducción a las bibliotecas de Python Capítulo 1
Incorporación de videos de Youtube: Los usuarios de Jupyter Notebook pueden agregar fácilmente
videos de YouTube. Se debe ejecutar la siguiente sintaxis para agregar videos de YouTube:
[35]
Introducción a las bibliotecas de Python Capítulo 1
Con eso, ahora comprende el análisis de datos, el proceso que lleva a cabo y las funciones
que conlleva. También ha aprendido a instalar Python y a utilizar Jupyter Lab y Jupyter
Notebook. Aprenderá más sobre varias bibliotecas de Python y técnicas de análisis de datos
en los próximos capítulos.
Resumen
En este capítulo, hemos discutido varios procesos de análisis de datos, incluidos KDD, SEMMA y
CRISP-DM. Luego discutimos los roles y habilidades de los analistas de datos y científicos de datos.
Después de eso, instalamos NumPy, SciPy, Pandas, Matplotlib, IPython, Jupyter Notebook, Anaconda
y Jupyter Lab, todos los cuales usaremos en este libro. En lugar de instalar todos esos módulos,
puede instalar Anaconda o Jupyter Lab, que tiene incorporados NumPy, Pandas, SciPy y Scikit-learn.
Luego, hicimos funcionar un programa de adición de vectores y aprendimos cómo NumPy ofrece un
rendimiento superior en comparación con las otras bibliotecas. Exploramos la documentación disponible y
los recursos en línea. Además, hablamos de Jupyter Lab, Jupyter Notebook y sus características.
En el próximo capítulo, Capítulo 2, NumPy y Pandas, echaremos un vistazo a NumPy y Pandas bajo
el capó y exploraremos algunos de los conceptos fundamentales que rodean las matrices y
DataFrames.
[36]
NumPy y pandas
-
Ahora que hemos entendido el análisis de datos, su proceso y su instalación en diferentes
plataformas, es hora de aprender sobre las matrices NumPy y pandas DataFrames. Este capítulo
lo familiariza con los fundamentos de las matrices NumPy ypandas DataFrames. Al final de este
capítulo, tendrá un conocimiento básico de las matrices NumPy ypandasDataFrames y sus
funciones relacionadas.
pandas lleva el nombre de datos de panel (un término econométrico) y análisis de datos de Python y es una
popular biblioteca de Python de código abierto. Aprenderemos sobre básicopandas funcionalidades,
estructuras de datos y operaciones en este capítulo. El oficialpandas la documentación insiste en nombrar
el proyecto pandas en todas las letras minúsculas. La otra convención lapandas El proyecto insiste en que es
el importar pandas como pd declaración de importación.
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
Producción:
[2 4 6 8 10]
[38]
NumPy y pandas Capitulo 2
Otra forma de crear una matriz NumPy es con arange (). Crea una matriz NumPy espaciada
uniformemente. Se pueden pasar tres valores (inicio, parada y paso) alarange (iniciar, [detener],
paso) función. El inicio es el valor inicial del rango, la parada es el último valor del rango y el paso es
el incremento en ese rango. El parámetro de parada es obligatorio. En el siguiente ejemplo, hemos
utilizado1 como el comienzo y 11 como parámetro de parada. losnaranja (1,11) La función devolverá
de 1 a 10 valores con un paso porque el paso es, por defecto, 1. El arreglar() La función genera un
valor que es uno menos que el valor del parámetro de parada. Entendamos esto a través del
siguiente ejemplo:
Producción:
[1 2 3 4 5 6 7 8 9 10]
Aparte de la formación() y arange () funciones, hay otras opciones, comoceros (), unos (), completo (),
ojo (), y aleatorio(), que también se puede usar para crear una matriz NumPy, ya que estas
funciones son marcadores de posición iniciales. Aquí hay una descripción detallada de cada
función:
ceros (): los ceros ()La función crea una matriz para una dimensión determinada con todos los
ceros.
unos(): los unos() La función crea una matriz para una dimensión dada con todos.
llenos (): los lleno() La función genera una matriz con valores constantes.ojos(): los
ojo() La función crea una matriz de identidad.aleatorio(): los aleatorio() La función
crea una matriz con cualquier dimensión dada.
[39]
NumPy y pandas Capitulo 2
imprimir (r)
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
[[1. 1.]
[1. 1.]]
[[4 4]
[4 4]]
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
En el código anterior, hemos visto algunas funciones integradas para crear matrices con valores todos
cero, valores todos uno y valores todos constantes. Después de eso, hemos creado la matriz de identidad
usando elojo() función y una matriz aleatoria utilizando la random.random ()función. Veamos algunas otras
características de la matriz en la siguiente sección.
[40]
NumPy y pandas Capitulo 2
Características de la matriz
En general, las matrices NumPy son un tipo homogéneo de estructura de datos que tiene los mismos tipos de
elementos. El principal beneficio de una matriz es la certeza del tamaño de almacenamiento debido al mismo tipo
de elementos. Una lista de Python usa un bucle para iterar los elementos y realizar operaciones en ellos. Otro
beneficio de las matrices NumPy es ofrecer operaciones vectorizadas en lugar de iterar cada elemento y realizar
operaciones en él. Las matrices NumPy se indexan como una lista de Python y comienzan desde 0. NumPy utiliza
una API C optimizada para el procesamiento rápido de las operaciones de la matriz.
Hagamos una matriz usando el arange () función, como hicimos en la sección anterior, y
verifiquemos su tipo de datos:
Producción:
<clase 'numpy.ndarray'> int64
Cuando usas escribe(), vuelve numpy.ndarray. Esto significa que el escribe() La función devuelve el
tipo de contenedor. Cuando usasdtype (), volverá int64, ya que es el tipo de los elementos.
También puede obtener la salida comoint32 si está utilizando Python de 32 bits. Ambos casos
usan números enteros (32 y 64 bits). Las matrices NumPy unidimensionales también se conocen
como vectores.
Como puede ver, el vector tiene 10 elementos con valores que van del 1 al 10. El formala propiedad
de la matriz es una tupla; en este caso, es una tupla de un elemento, que contiene la longitud en
cada dimensión.
[41]
NumPy y pandas Capitulo 2
Producción:
[[5 6]
[7 8]]
En el ejemplo anterior, la matriz se crea utilizando el formación() función con la lista de entrada de
listas.
Seleccionar elementos de matriz es bastante simple. Solo necesitamos especificar el índice de la matriz comoa
[m, n]. Aquí, metro es el índice de fila y norte es el índice de columna de la matriz. Ahora seleccionaremos cada
elemento de la matriz uno por uno como se muestra en el siguiente código:
imprimir (a [0,0])
Producción: 5
imprimir (a [0,1])
Producción: 6
printa ([1,0])
Producción: 7
printa ([1,1])
Producción: 8
En el ejemplo de código anterior, hemos intentado acceder a cada elemento de una matriz utilizando índices de matriz.
También puede comprender esto mediante el diagrama que se menciona aquí:
[42]
NumPy y pandas Capitulo 2
En el diagrama anterior, podemos ver que tiene cuatro bloques y cada bloque representa el
elemento de una matriz. Los valores escritos en cada bloque muestran sus índices.
En esta sección, hemos entendido los fundamentos de las matrices. Ahora, pasemos a las matrices de tipos
de datos numéricos.
[43]
NumPy y pandas Capitulo 2
Muchas funciones tienen un argumento de tipo de datos, que con frecuencia es opcional:
Producción:
[1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[44]
NumPy y pandas Capitulo 2
Pero puede convertir valores flotantes en números complejos configurando piezas individuales.
También puede extraer las piezas con elverdadero y imag atributos. Veamos eso usando el
siguiente ejemplo:
C= complejo (42, 1)
imprimir (c)
objetos dtype
Hemos visto en secciones anteriores del capítulo que dtype nos dice el tipo de elementos individuales de
una matriz. Los elementos de la matriz NumPy tienen el mismo tipo de datos, lo que significa que todos
los elementos tienen el mismodtype. dtypeLos objetos son instancias del numpy.dtype clase:
dtype Los objetos también nos dicen el tamaño del tipo de datos en bytes usando el tamaño del artículo propiedad:
imprimir (a.dtype.itemsize)
Producción:8
[45]
NumPy y pandas Capitulo 2
Entero I
Entero sin signo tu
Flotador de precisión simple F
Flotador de doble precisión D
Bool B
Complejo D
Cuerda S
Unicode U
Vacío V
Echemos un vistazo al siguiente código para producir una matriz de flotantes de precisión simple:
Producción:
[1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]
Producción:
[1. + 0.j, 2. + 0.j, 3. + 0.j, 4. + 0.j, 5. + 0.j]
[46]
NumPy y pandas Capitulo 2
constructores dtype
Hay muchas formas de crear tipos de datos utilizando constructores. Los constructores se utilizan para
crear instancias o asignar un valor a un objeto. En esta sección, entenderemos la creación de tipos de datos
con la ayuda de un ejemplo de datos de punto flotante:
Para probar un flotante de precisión simple con un código de carácter, use lo siguiente:
Para probar un flotante de doble precisión con un código de carácter, use lo siguiente:
Para probar un dtype constructor con un código de dos caracteres, utilice lo siguiente:
atributos dtype
los dtype class ofrece varios atributos útiles. Por ejemplo, podemos obtener información sobre el
código de carácter de un tipo de datos usando eldtype atributo:
imprimir (var2.dtype.char)
Producción: 'D'
imprimir (var2.dtype.type)
[47]
NumPy y pandas Capitulo 2
Ahora que sabemos todo sobre los distintos tipos de datos utilizados en las matrices NumPy,
comencemos a manipularlos en la siguiente sección.
Producción: [ 0 1 2 3 4 5 6 7 8 9 10 11]
imprimir (new_arr)
Producción: [[ 0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[9, 10, 11]]
imprimir (new_arr2)
Producción:
matriz ([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]])
Producción:
[48]
NumPy y pandas Capitulo 2
[[1 2 3]
[4 5 6]
[7 8 9]]
Producción:
[1 2 3 4 5 6 7 8 9]
Producción:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
# Transponer la matriz
imprimir (arr.transpose ())
Producción:
[[1 4 7]
[2 5 8]
[3 6 9]]
Producción:[[1 2 3 4 5 6 7 8 9]]
En todo el código de esta sección, hemos visto funciones integradas como reshape (), aplanar (), ravel (),
transpose (), y redimensionar () para manipular el tamaño. Ahora es el momento de aprender sobre el
apilamiento de matrices NumPy.
[49]
NumPy y pandas Capitulo 2
Producción:
[[1 2 3]
[4 5 6]
[7 8 9]]
arr2 = 2 * arr1
imprimir (arr2)
Producción:
[[2 4 6]
[8 10 12]
[14 16 18]]
# Apilamiento horizontal
arr3 = np.hstack ((arr1, arr2)) print
(arr3)
Producción:
[[1 2 3 2 4 6]
[4 5 6 8 10 12] [7 8 9 14
16 18]]
[50]
NumPy y pandas Capitulo 2
Producción:
[[1 2 3 2 4 6]
[4 5 6 8 10 12] [7 8 9 14
16 18]]
# Apilado vertical
arr5 = np.vstack ((arr1, arr2)) print
(arr5)
Producción:
[[1 2 3]
[4 5 6]
[7 8 9]
[2 4 6]
[8 10 12]
[14 16 18]]
Producción:
[[1 2 3]
[4 5 6]
[7 8 9]
[2 4 6]
[8 10 12]
[14 16 18]]
[51]
NumPy y pandas Capitulo 2
Producción:
[[[1 2]
[2 4]
[3 6]]
[[4 8]
[5 10]
[6 12]]
[[7 14]
[8 16]
[9 18]]]
En el código anterior, dos matrices se apilan en profundidad junto con un tercer eje
(profundidad).
Producción: [4, 5, 6]
[52]
NumPy y pandas Capitulo 2
Producción:
[[4 8]
[5 10]
[6 12]]
En el código anterior, hemos creado dos matrices unidimensionales y las hemos apilado
en columnas.
Producción:
[[4 5 6]
[8 10 12]]
Producción:
[[1 2 3]
[4 5 6]
[7 8 9]]
[53]
NumPy y pandas Capitulo 2
imprimir (arr_hor_split)
Producción:
[matriz ([[1],
[4],
[7]]), matriz ([[2],
[5],
[8]]), matriz ([[3],
[6],
[9]])]
# división vertical
arr_ver_split = np.vsplit (arr, 3)
imprimir (arr_ver_split)
Producción:
[matriz ([[1, 2, 3]]), matriz ([[4, 5, 6]]), matriz ([[7, 8, 9]])]
imprimir (arr_split)
Producción:
[matriz ([[1, 2, 3]]), matriz ([[4, 5, 6]]), matriz ([[7, 8, 9]])]
Producción:
[matriz ([[1],
[4],
[7]]), matriz ([[2],
[54]
NumPy y pandas Capitulo 2
[5],
[8]]), matriz ([[3],
[6],
[9]])]
# matriz de impresión
print ("Float Array:", arr)
En el código anterior, creamos una matriz NumPy y verificamos su tipo de datos usando
el dtype atributo.
Producción:
float64
[55]
NumPy y pandas Capitulo 2
En el código anterior, hemos cambiado el tipo de datos de la columna de entero a flotante usando
astype ().
los Listar() La función convierte una matriz NumPy en una lista de Python. Veamos un ejemplo
delListar() función:
Producción:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
En el código anterior, hemos convertido una matriz en un objeto de lista de Python usando el
Listar() función.
Las modificaciones en una vista afectan los datos originales, mientras que las modificaciones en una
copia no afectan la matriz original.
Las vistas utilizan el concepto de memoria compartida. Las copias
Producción:
[[1, 2],
[3, 4]]
[56]
NumPy y pandas Capitulo 2
Producción:
Matriz original: 140426327484256
Asignación: 140426327484256
Copia profunda: 140426327483856
Copia superficial (vista): 140426327484496
En el ejemplo anterior, puede ver que la matriz original y la matriz asignada tienen el mismo ID de
objeto, lo que significa que ambos apuntan al mismo objeto. Tanto las copias como las vistas tienen
diferentes ID de objeto; ambos tendrán objetos diferentes, pero los objetos de vista harán referencia a la
misma matriz original y una copia tendrá una réplica diferente del objeto.
Continuemos con este ejemplo y actualicemos los valores de la matriz original y verifiquemos su
impacto en las vistas y copias:
Producción:
Ver matriz:
[[1 2]
[99 89]]
Matriz copiada:
[[1 2]
[3 4]]
[57]
NumPy y pandas Capitulo 2
En el ejemplo anterior, podemos concluir de los resultados que la vista es la matriz original. Los
valores cambiaron cuando actualizamos la matriz original y la copia es un objeto separado porque
sus valores siguen siendo los mismos.
Las matrices NumPy también admiten la indexación y el corte negativos. Aquí, el signo negativo
indica la dirección opuesta y la indexación comienza desde el lado derecho con un valor inicial de
- 1:
Producción: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
En la operación de corte, usamos el símbolo de dos puntos para seleccionar la colección de valores. El corte
toma tres valores: inicio, parada y paso:
[58]
NumPy y pandas Capitulo 2
En el ejemplo anterior, hemos utilizado 3 como índice inicial y 6 como índice de detención:
En el ejemplo anterior, solo se proporciona el índice inicial. 3 es el índice inicial. Esta operación de
corte seleccionará los valores desde el índice inicial hasta el final de la matriz:
En el ejemplo anterior, la operación de división seleccionará valores desde el tercer valor desde el lado
derecho de la matriz hasta el final de la matriz:
[59]
NumPy y pandas Capitulo 2
# Indexación booleana
print ("Después de la condición booleana:", arr [arr> 30])
Producción:
Matriz original:
[21 23 25 27 29 31 33 35 37 39]
Después de la condición booleana: [31 33 35 37 39]
La indexación elegante es un tipo especial de indexación en el que los elementos de una matriz se seleccionan mediante
una matriz de índices. Esto significa que pasamos la matriz de índices entre paréntesis. La indexación elegante también
admite matrices multidimensionales. Esto nos ayudará a seleccionar y modificar fácilmente un conjunto complejo de
matrices multidimensionales. Veamos un ejemplo de la siguiente manera para comprender la indexación elegante:
# Seleccionando 3ª y 4ª fila
índices = [2,3]
print ("Tercera y cuarta fila seleccionadas: \ n", arr [índices])
Producción:
Matriz original:
[[1 2 3 4]
[5 6 7 8]
[9 10 11 12]
[13 14 15 16]
[17 18 19 20]]
Primera y segunda fila
seleccionadas: [[5 6 7 8]
[60]
NumPy y pandas Capitulo 2
[9 10 11 12]]
3.ª y 4.ª filas seleccionadas: [[9 10
11 12]
[13 14 15 16]]
En el código anterior, creamos una matriz de 5 * 4 y seleccionamos las filas usando índices
enteros. También puede visualizar o internalizar esta salida en el siguiente diagrama:
Producción:
Subarreglo seleccionado: [7 12]
El ejemplo anterior da como resultado el primer valor, [1,2], y segundo valor, [2,3], como índice
de fila y columna. La matriz seleccionará el valor en el primer y segundo valor de índice, que
son 7 y 12.
Arreglos de radiodifusión
Las listas de Python no admiten operaciones aritméticas de vectorización directa. NumPy ofrece una operación
de matriz vectorizada más rápida en comparación con las operaciones basadas en bucles de lista de Python.
Aquí, todas las operaciones de bucle se realizan en C en lugar de Python, lo que lo hace más rápido. La
funcionalidad de transmisión verifica un conjunto de reglas para aplicar funciones binarias, como suma, resta y
multiplicación, en diferentes formas de una matriz.
[61]
NumPy y pandas Capitulo 2
Producción:
[[1 2]
[3 4]]
Producción:
[[5 6]
[7 8]]
Producción:
[[6 8]
[10 12]]
En los tres ejemplos anteriores, podemos ver la adición de dos matrices del mismo tamaño. Este concepto
se conoce como radiodifusión:
Producción:
[[5 12]
[21 32]]
Producción:
[[4 5]
[6 7]]
[62]
NumPy y pandas Capitulo 2
Producción:
[[3 6]
[9 12]]
En los dos ejemplos anteriores, la matriz se suma y se multiplica por un valor escalar.
Producción:
_
Producción:
Nombre Edad
0 Vijay 23
[63]
NumPy y pandas Capitulo 2
1 Sundar 45
2 Satyam 46
3 Indira 52
En el código anterior, hemos utilizado un diccionario de la lista para crear un DataFrame. Aquí, las
claves del diccionario son equivalentes a columnas y los valores se representan como una lista que
es equivalente a las filas del DataFrame. Creemos un DataFrame usando la lista de diccionarios:
# Crea DataFrame.
df = pd.DataFrame (datos, columnas = ['Nombre', 'Edad'])
En el código anterior, el DataFrame se crea usando una lista de diccionarios. En la lista, cada elemento es
un diccionario. Cada clave es el nombre de la columna y el valor es el valor de celda de una fila. Creemos
un DataFrame usando una lista de tuplas:
Producción:
Nombre Edad
0 Vijay 23
1 Sundar 25
2 Shankar 26
[64]
NumPy y pandas Capitulo 2
En el código anterior, el DataFrame se crea usando una lista de tuplas. En la lista, cada elemento es
una tupla y cada tupla es equivalente a la fila de columnas.
# Mostrar series
serie
Producción:
0 Ajay
1 Arrendajo
2 Vijay
dtype: objeto
Usando una matriz NumPy: Cree un objeto de matriz NumPy y páselo al objeto
Series. Veamos el siguiente ejemplo:
Producción:
[ sesenta y cinco ]
NumPy y pandas Capitulo 2
0 51
1 sesenta y cinco
2 48
3 59
4 68
dtype: int64
Usando un solo valor escalar: Para crear un pandas Series con un valor escalar, pase el
valor escalar y la lista de índices a un objeto Series:
Producción:
0 10
1 10
2 10
3 10
4 10
5 10
dtype: int64
También podemos crear una serie seleccionando una columna, como país, que es la
primera columna del archivo de datos. Luego, muestre el tipo de objeto actualmente
en el ámbito local:
# Importar pandas
importar pandas como pd
[66]
NumPy y pandas Capitulo 2
Producción:
pandas.core.series.Series
los pandas La estructura de datos en serie comparte algunos de los atributos comunes de DataFrames y
también tiene un nombre atributo. Explore estas propiedades de la siguiente manera:
Producción:
Forma: (202, 9)
[67]
NumPy y pandas Capitulo 2
Producción:
Tipos de datos: País
objeto
CountryID
int64
Continente
int64
Tasa de fecundidad adolescente (%)
float64
Tasa de alfabetización de adultos (%)
float64
Ingreso nacional bruto per cápita (PPA en dólares internacionales)
float64
Tasa neta de matriculación en la escuela primaria de mujeres (%)
float64
Tasa neta de matriculación en la escuela primaria de hombres (%)
float64
Población (en miles) total
float64
dtype: objeto
Producción:
197 Vietnam
198 Cisjordania y Gaza
199 Yemen
200 Zambia
201 Zimbabue
Nombre: País, dtipo: objeto
Ahora que sabemos cómo usar pandas Series, pasemos a usar Quandl para trabajar en bases de
datos.
[68]
NumPy y pandas Capitulo 2
En esta sección, recuperaremos el conjunto de datos Sunspot de Quandl. Podemos usar una API o
descargar los datos manualmente en formato CSV.
Si desea instalar la API, puede hacerlo descargando instaladores de https: / / pypi. python.
org / pypi / Quandlo ejecutando el comando anterior.
El uso de la API es gratuito, pero está limitado a 50 llamadas a la API por día. Si
necesita más llamadas a la API, deberá solicitar una clave de autenticación. El código
de este tutorial no usa una clave. Debería ser sencillo cambiar el código para usar una
clave o leer un archivo CSV descargado. Si tiene dificultades, consulte elDónde
encontrar ayuda y referencias sección en Capítulo 1, Introducción a las bibliotecas de
Pythono busque en los documentos de Python en https: /
/docs. python. org / 2 /.
1. Como primer paso, obviamente tenemos que descargar los datos. Después de importar la API de Quandl,
obtenga los datos de la siguiente manera:
importar quandl
manchas solares = quandl.get ("SIDC / MANCHAS SOLARES_A")
2. El cabeza() y cola() Los métodos tienen un propósito similar al de los comandos de Unix
con el mismo nombre. Seleccione el primeronorte y última norte registros de un
DataFrame, donde norte es un parámetro entero:
sunspots.head ()
[69]
NumPy y pandas Capitulo 2
los cabeza() y cola() Los métodos nos dan la primera y las últimas cinco filas de los datos de las
manchas solares, respectivamente.
# Seleccionar columnas
sunspots_filtered = sunspots [['Número total medio anual de manchas
solares', 'Indicador definitivo / provisional']]
[70]
NumPy y pandas Capitulo 2
[71]
NumPy y pandas Capitulo 2
5. Filtrado booleano: Podemos consultar datos usando condiciones booleanas similares a las
DÓNDE condición de cláusula de SQL. Filtremos los datos mayores que la media aritmética:
# Filtro booleano
manchas solares [manchas solares ['Número total medio anual de manchas solares']>
manchas solares ['Número total medio anual de manchas solares']. mean ()]
Método Descripción
describe Este método devuelve una pequeña tabla con estadísticas descriptivas.
contar Este método devuelve el número de elementos que no son NaN.
Este método calcula la desviación absoluta media, que es una medida robusta similar
enojado
a la desviación estándar.
Este método devuelve la mediana. Esto es equivalente al valor en el 50th
mediana
percentil.
min Este método devuelve el valor mínimo.
[72]
NumPy y pandas Capitulo 2
Utilizando los mismos datos utilizados en la sección anterior, demostraremos estos métodos
estadísticos:
los describir() El método mostrará la mayoría de las medidas estadísticas descriptivas para todas las
columnas:
[73]
NumPy y pandas Capitulo 2
los contar() El método cuenta el número de observaciones en cada columna. Nos ayuda a verificar los valores que
faltan en el conjunto de datos. A excepción de las tres columnas iniciales, todas las columnas tienen valores
perdidos. De manera similar, puede calcular la mediana, la desviación estándar, la desviación media absoluta, la
varianza, la asimetría y la curtosis:
[74]
NumPy y pandas Capitulo 2
El ejemplo de código anterior calcula la desviación estándar para cada columna numérica.
[75]
NumPy y pandas Capitulo 2
# Agrupar por DataFrame sobre la base del continente y seleccionar alfabetización de adultos
índice(%)
df.groupby ('Continente'). mean () ['Tasa de alfabetización de adultos (%)']
Join es una especie de operación de fusión para bases de datos tabulares. El concepto de unión se toma de la
base de datos relacional. En las bases de datos relacionales, las tablas se normalizaron o desglosaron para
reducir la redundancia y la inconsistencia, y la combinación se utiliza para seleccionar la información de varias
tablas. Un analista de datos necesita combinar datos de múltiples fuentes.pandas también ofrece la
funcionalidad de unir para unir múltiples DataFrames usando el unir() función.
Para entender cómo unirse, tomaremos un caso de uso de una empresa de taxis. Estamos usando dos archivos:
dest.csv y tips.csv. Cada vez que un conductor deja a un pasajero en su destino, insertaremos un registro
(número de empleado y destino) en el dest.csv expediente. Siempre que los conductores reciben una propina,
insertamos el registro (número de empleado y monto de la propina) en eltips.csv expediente. Puede descargar
ambos archivos desde el siguiente enlace de GitHub:https: / /
github. com / PacktPublishing / Python- Data- Analysis- Third- Edition / tree / master / Python- Data-
Analysis- Third- Edition / Ch2:
# Importar pandas
importar pandas como pd
# Mostrar DataFrame
dest.head ()
[76]
NumPy y pandas Capitulo 2
# Mostrar DataFrame
tips.head ()
En el bloque de código anterior, hemos leído el tips.csv archivo usando el read_csv ()método.
Ahora veremos los distintos tipos de combinaciones de la siguiente manera:
[77]
NumPy y pandas Capitulo 2
Unión externa completa: La unión externa equivale a una operación de unión del conjunto.
Fusiona los DataFrames derecho e izquierdo. Tendrá todos los registros de ambos DataFrames y
rellena los NaN donde no se encontrará la coincidencia:
Unión exterior derecha: En la combinación externa derecha, se seleccionarán todos los registros del
lado derecho del DataFrame. Si los registros coincidentes no se pueden encontrar en el DataFrame
izquierdo, entonces se rellena con NaN:
[78]
NumPy y pandas Capitulo 2
Izquierda combinación externa: En la combinación externa izquierda, se seleccionarán todos los registros del
lado izquierdo del DataFrame. Si los registros coincidentes no se pueden encontrar en el DataFrame correcto,
entonces se rellena con NaN:
[79]
NumPy y pandas Capitulo 2
Eliminar los valores perdidos: Un enfoque muy ingenuo para lidiar con los valores
perdidos es descartarlos con fines de análisis. pandas tiene el dropna () función para
eliminar o eliminar dichas observaciones del DataFrame. Aquí elinplace = True atributo
realiza los cambios en el DataFrame original:
df.info ()
Completa los valores faltantes: Otro enfoque consiste en completar los valores faltantes con valores
cero, medios, medianos o constantes:
df.info ()
[80]
NumPy y pandas Capitulo 2
Aquí, hemos llenado los valores perdidos con 0. Se trata de manejar los valores
perdidos.
# Importar pandas
importar pandas como pd
[81]
NumPy y pandas Capitulo 2
[82]
NumPy y pandas Capitulo 2
Cree un rango de fechas a partir del 1 de enero de 2020, con una duración de 45 días, de la siguiente manera:
Producción:
DatetimeIndex (['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04',
'2000-01-05', '2000-01-06', '2000-01-07', '2000-01-08', '2000-01-09',
'2000-01-10', '2000 -01-11 ',' 2000-01-12 ',' 2000-01-13 ',' 2000-01-14 ','
2000-01-15 ',' 2000-01-16 ',' 2000-01 -17 ',' 2000-01-18 ',' 2000-01-19 ','
2000-01-20 ',' 2000-01-21 ',' 2000-01-22 ',' 2000-01-23 ',' 2000-01-24 ','
2000-01-25 ',' 2000-01-26 ',' 2000-01-27 ',' 2000-01-28 ',' 2000-01-29 ',
'2000-01-30', '2000-01-31', '2000-02-01', '2000-02-02', '2000-02-03',
'2000-02-04', '2000 -02-05 ',' 2000-02-06 ',' 2000-02-07 ',' 2000-02-08 ','
2000-02-09 ',' 2000-02-10 ',' 2000-02 -11 ',' 2000-02-12 ','2000-02-13',
'2000-02-14'],
Enero tiene menos de 45 días, por lo que la fecha de finalización cae en febrero, como puede comprobarlo usted
mismo.
rango de fechas() Los parámetros de frecuencia pueden tomar valores como B para la frecuencia de los días hábiles, W
para frecuencia semanal, H para frecuencia horaria, METRO para frecuencia de minutos, S para la segunda frecuencia,L
para frecuencia de milisegundos, y U para frecuencia de microsegundos. Para obtener más detalles, puede
consulte la documentación oficial en https: / / pandas. pydata. org / pandas-docs / stable / user_
guide / timeseries. html.
rango de fechas de los pandas: los rango de fechas() La función genera secuencias de fecha y
hora con un intervalo de frecuencia fijo:
[83]
NumPy y pandas Capitulo 2
to_datetime (): to_datetime () convierte una cadena de marca de tiempo en fecha y hora:
Podemos convertir una cadena de marca de tiempo en un objeto de fecha y hora en el formato especificado:
Producción:
DatetimeIndex (['2020-01-01', '2020-01-02'], dtype = 'datetime64 [ns]', freq = None)
Manejo de una cadena de formato desconocido: El formato de entrada desconocido puede provocar
errores de valor. Podemos manejar esto usando un parámetro de errores conobligar. obligarestablecerá
cadenas no válidas en NaT:
# Error de valor
pd.to_datetime (['20200101', 'no es una fecha'])
Producción:
ValueError: ('Formato de cadena desconocido:', 'no es una fecha')
Producción:
DatetimeIndex (['2020-01-01', 'NaT'], dtype = 'datetime64 [ns]', freq = None)
[84]
NumPy y pandas Capitulo 2
En el ejemplo anterior, la segunda fecha aún no es válida y no se puede convertir en un objeto de fecha
y hora. El parámetro de errores nos ayudó a manejar tales errores ingresando el valorNaT (no es un
momento).
Resumen
En este capítulo, hemos explorado las bibliotecas NumPy y pandas. Ambas bibliotecas ayudan a lidiar con
matrices y DataFrames. Las matrices NumPy tienen la capacidad de trabajar con matrices n-dimensionales.
Hemos aprendido sobre varias propiedades y operaciones de la matriz. Nuestro enfoque principal está en los
tipos de datos, el tipo de datos como un objeto, remodelación, apilamiento, división, corte e indexación.
También nos enfocamos en el pandas biblioteca para el análisis de datos de Python. Vimos comopandas
imita la funcionalidad de la tabla de la base de datos relacional. Ofrece funcionalidad para consultar,
agregar, manipular y unir datos de manera eficiente.
NumPy y pandas funcionan bien juntos como herramienta y permiten realizar análisis de datos básicos. En
este punto, es posible que tenga la tentación de pensar quepandas es todo lo que necesitamos para el análisis
de datos. Sin embargo, hay más en el análisis de datos de lo que parece.
Habiendo aprendido los fundamentos, es hora de proceder al análisis de datos con las
funciones estadísticas de uso común en Capítulo 3, Estadísticas. Esto incluye el uso de
conceptos estadísticos.
Referencias
Ivan Idris, Libro de cocina de NumPy - Segunda edición, Packt Publishing, 2015. Ivan Idris,
Aprendizaje de NumPy Array, Packt Publishing, 2014. Ivan Idris, NumPy: Guía para
principiantes - Tercera edición, Packt Publishing, 2015.
L. (L.-H.) Chin y T. Dutta, NumPy: imprescindibles, Packt Publishing, 2016.
T. Petrou, Libro de cocina de Pandas, Packt Publishing, 2017.
F. Anthony, Dominando pandas, Packt Publishing, 2015.
M. Heydt, Dominando pandas para las finanzas, Packt Publishing, 2015.
T. Hauck, Aplicaciones con uso intensivo de datos con pandas instructivo, Packt Publishing, 2013.
[85]
Estadísticas
-
Análisis exploratorio de datos (EDA) es el primer paso hacia el análisis de datos y la construcción de un modelo de
aprendizaje automático. Las estadísticas proporcionan conocimientos fundamentales y un conjunto de herramientas
para el análisis de datos exploratorio o descriptivo. Este capítulo está diseñado para que esté listo para los datos. Para
cualquier tipo de función profesional de datos, debe comprender los datos del mundo real que generalmente son
ruidosos, tienen valores perdidos y se recopilan de varias fuentes.
Antes de realizar cualquier tipo de preprocesamiento y análisis, debe familiarizarse con los datos
presentes, y las estadísticas son la única herramienta que lo ayudará aquí. Esto hace que la
estadística sea una habilidad primaria y muy necesaria para los profesionales de datos, ayudándoles
a obtener conocimientos iniciales y una comprensión de los datos. Por ejemplo, la media aritmética
de las horas de trabajo mensuales de un empleado puede ayudarnos a comprender la carga de un
empleado en una organización. De manera similar, la desviación estándar de las horas de trabajo
mensuales puede ayudarnos a inferir el rango de horas de trabajo. La correlación entre dos variables
como la presión arterial y la edad de los pacientes puede ayudarnos a comprender la relación entre
la presión arterial y la edad. Los métodos de muestreo pueden resultar útiles en cualquier tipo de
recopilación de datos primarios.
Requerimientos técnicos
Para este capítulo, está disponible la siguiente información técnica:
Tipos de atributos
El tipo de datos de los atributos es más crucial para el análisis de datos porque ciertas situaciones
requieren ciertos tipos de datos. El tipo de datos de los atributos ayuda a los analistas a seleccionar el
método correcto para el análisis de datos y los gráficos de visualización. La siguiente lista muestra los
distintos atributos:
[87]
Estadísticas Capítulo 3
3: neutral
4: Satisfecho
5: Muy satisfecho
Otro ejemplo podría ser el tamaño de una bebida: pequeña, mediana o grande. Los atributos
ordinales solo se pueden medir a través de la moda y la mediana. La media no se puede calcular
para atributos ordinales debido a su naturaleza cualitativa. Los atributos ordinales también se
pueden volver a crear mediante la discretización de una variable cuantitativa dividiendo sus valores
en un rango de números finitos.
3. Atributos numéricos: Un atributo numérico se presenta cuantitativamente como valores enteros o reales.
Los atributos numéricos pueden ser de dos tipos: escalados por intervalos o escalados por razones.
Los atributos de escala de intervalo se miden en una escala ordenada de unidades de igual
tamaño. Se puede calcular la diferencia significativa entre los dos valores de un atributo de
escala de intervalo, y esto permite una comparación entre los dos valores, por ejemplo, el año
de nacimiento y la temperatura en°C. El principal problema con los valores de atributo en escala
de intervalo es que no tienen un "cero verdadero", por ejemplo, si la temperatura en °C es 0,
entonces no significa que la temperatura no exista. Los datos en escala de intervalo pueden
sumar y restar, pero no pueden multiplicar y dividir porque no hay un cero verdadero. También
podemos calcular el valor medio de un atributo de escala de intervalo, además de la mediana y
la moda.
Los atributos de escala de relación se miden en una escala ordenada de unidades de igual tamaño,
similar a una escala de intervalo con un punto cero inherente. Algunos ejemplos de atributos de
escala proporcional son la altura, el peso, la latitud, la longitud, los años de experiencia y el número
de palabras de un documento. Podemos realizar multiplicaciones y divisiones, y calcular la diferencia
entre valores en escala de razón. También podemos calcular medidas de tendencia central como la
media, la mediana y la moda. Las escalas de temperatura Celsius y Fahrenheit se miden en una
escala de intervalo, mientras que la escala de temperatura Kelvin se mide en una escala de relación
porque tiene un verdadero punto cero.
[88]
Estadísticas Capítulo 3
Una variable discreta acepta valores integrales, mientras que una variable continua acepta valores reales.
En otras palabras, podemos decir que una variable discreta acepta valores cuya fracción no tiene sentido,
mientras que una variable continua acepta valores cuya fracción tiene sentido. Un atributo discreto usa un
número limitado de valores, mientras que un atributo continuo usa un número ilimitado de valores.
Después de comprender los atributos y sus tipos, es hora de centrarse en las descripciones
estadísticas básicas, como las medidas de tendencia central.
Significar
El valor medio es la media aritmética o promedio, que se calcula mediante la suma de observaciones
dividida por el número de observaciones. Es sensible a los valores atípicos y al ruido, con el
resultado de que siempre que se agregan valores poco comunes o inusuales a un grupo, su media
se desvía del valor central típico. Suponga x1, X ,. . . , Xnorte es norte observaciones. los
2
[89]
Estadísticas Capítulo 3
data = pd.
Producción:
37,2
En el bloque de código anterior, hemos creado un DataFrame llamado datos que tiene cuatro
columnasname, gender, communication_skill_score, y
puntuación_cualitativa_cuantitativa) y calculó la media usando el media (eje = 0)
función. Aquí,eje = 0 representa la media a lo largo de las filas.
Modo
La moda es el elemento de mayor ocurrencia en un grupo de observaciones. El valor de la moda aparece
con frecuencia en los datos y se utiliza principalmente para valores categóricos. Si todos los valores de un
grupo son únicos o no se repiten, no hay modo. También es posible que más de un valor tenga la misma
frecuencia de aparición. En tales casos, puede haber múltiples modos.
Calculemos el valor del modo de la columna de puntuación de habilidad de comunicación usando el pandasbiblioteca, de la
siguiente manera:
Producción:
39
[90]
Estadísticas Capítulo 3
Mediana
La mediana es el punto medio o el valor medio en un grupo de observaciones. También se le llama el 50th
percentil. La mediana se ve menos afectada por los valores atípicos y el ruido que la media, y es por eso que se
considera una medida estadística más adecuada para informar. Está muy cerca de un valor central típico.
Calculemos el valor mediano de la columna de puntuación de habilidad de comunicación usando elpandas
biblioteca, de la siguiente manera:
Producción:
39,0
Medición de la dispersión
Como hemos visto, la tendencia central presenta el valor medio de un grupo de observaciones pero no
proporciona la imagen general de una observación. Las métricas de dispersión miden la desviación en las
observaciones. Las métricas de dispersión más populares son el rango,rango intercuartil (IQR), varianza
y desviación estándar. Estas métricas de dispersión valoran la variabilidad en las observaciones o la
extensión de las observaciones. Veamos cada medida de dispersión en detalle, de la siguiente manera:
[91]
Estadísticas Capítulo 3
Producción:
22
# Primer cuartil
q1 = datos ['communcation_skill_score']. quantile (.25)
# Tercer cuartil
q3 = datos ['communcation_skill_score']. quantile (.75)
Producción:
1.0
[92]
Estadísticas Capítulo 3
# Varianza de communication_skill_score
datos ['communcation_skill_score']. var ()
Producción:
69,2
Desviación Estándar: Esta es la raíz cuadrada de la varianza. Su unidad es la misma que para
las observaciones originales. Esto hace que sea más fácil para un analista evaluar la desviación
exacta de la media. El valor más bajo de la desviación estándar representa la menor distancia
de observaciones de la media; esto significa que las observaciones están menos difundidas. El
valor más alto de la desviación estándar representa una gran distancia de observaciones de la
media, es decir, las observaciones están muy dispersas. La desviación estándar está
representada matemáticamente por la letra griega sigma(Σ). Suponga x1, X ,. . . , Xnorte están 2
[93]
Estadísticas Capítulo 3
Calculemos la desviación estándar de las puntuaciones de las habilidades de comunicación de la siguiente manera:
Producción:
8.318653737234168
También podemos intentar describir la función para obtener todas las estadísticas de
resumen en un solo comando. losdescribir() La función devuelve el recuento, la media, la
desviación estándar, el primer cuartil, la mediana, el tercer cuartil y los valores mínimo y
máximo para cada columna numérica en el DataFrame, y se ilustra en el siguiente bloque
de código:
Producción:
communcation_skill_score puntuación_cuantitativa_skill
contar 5.000000 5.000000
significar 37.200000 40.200000
std 8.318654 5.848077
min 23.000000 32.000000
25% 39.000000 38.000000
50% 39.000000 41.000000
75% 40.000000 42.000000
max 45.000000 48.000000
En el bloque de código anterior, hemos generado un resumen estadístico descriptivo de los datos
utilizando el describir() método.
[94]
Estadísticas Capítulo 3
Asimetría y curtosis
La asimetría mide la simetría de una distribución. Muestra cuánto se desvía la distribución de una
distribución normal. Sus valores pueden ser cero, positivos y negativos. Un valor cero representa una
forma perfectamente normal de una distribución. La asimetría positiva se muestra con las colas que
apuntan hacia la derecha, es decir, los valores atípicos están sesgados hacia la derecha y los datos apilados
a la izquierda. La asimetría negativa se muestra con las colas que apuntan hacia la izquierda, es decir, los
valores atípicos están sesgados a la izquierda y los datos se apilan a la derecha. La asimetría positiva
ocurre cuando la media es mayor que la mediana y la moda. La asimetría negativa ocurre cuando la media
es menor que la mediana y la moda. Calculemos la asimetría en el siguiente bloque de código:
Producción:
- 1.704679180800373
La curtosis mide el tamaño de la cola (grosor de la cola) en comparación con una distribución normal. La curtosis
alta es de cola pesada, lo que significa que hay más valores atípicos presentes en las observaciones y los valores
bajos de curtosis son de cola ligera, lo que significa que hay menos valores atípicos presentes en las
observaciones. Hay tres tipos de formas de curtosis: mesocúrtica, platicúrtica y leptocurtica. Vamos a definirlos
uno por uno, de la siguiente manera:
Una distribución normal que tiene cero curtosis se conoce como distribución
mesocúrtica.
Una distribución platicúrtica tiene un valor de curtosis negativo y es de cola fina en
comparación con una distribución normal.
Una distribución leptocúrtica tiene un valor de curtosis superior a 3 y tiene una cola grasa en
comparación con una distribución normal.
[95]
Estadísticas Capítulo 3
Un histograma es un medio eficaz para presentar asimetría y curtosis. Calculemos la curtosis de la columna
de puntuación de habilidad de comunicación, de la siguiente manera:
Producción:
3.6010641852384015
[96]
Estadísticas Capítulo 3
Los 'método' El parámetro puede tomar uno de los siguientes tres parámetros:
[97]
Estadísticas Capítulo 3
Hasta ahora, hemos visto temas de estadística descriptiva como medidas centrales, medidas de
dispersión, medidas de distribución y medidas de relación variable. Es hora de pasar a los temas de la
estadística inferencial, como el teorema del límite central, las técnicas de muestreo y las pruebas
paramétricas y no paramétricas.
[98]
Estadísticas Capítulo 3
¿Proporciona respuestas a preguntas como qué tamaño de muestra debe tomarse o qué
tamaño de muestra es una representación precisa de la población? Puede comprender esto
con la ayuda del siguiente diagrama:
En el diagrama anterior, puede ver cuatro histogramas para diferentes tamaños de muestra
50, 100, 200 y 500. Si observa aquí, a medida que aumenta el tamaño de la muestra, el histograma se
aproxima a una curva normal. Aprendamos técnicas de muestreo en la siguiente sección.
[99]
Estadísticas Capítulo 3
Recolectando muestras
Una muestra es un pequeño conjunto de la población que se utiliza con fines de análisis de datos. El
muestreo es un método o proceso de recopilación de datos de muestra de diversas fuentes. Es la parte
más crucial de la recopilación de datos. El éxito de un experimento depende de qué tan bien se recopilen
los datos. Si algo sale mal con el muestreo, afectará enormemente las interpretaciones finales. Además, es
imposible recopilar datos para toda la población. El muestreo ayuda a los investigadores a inferir la
población de la muestra y reduce el costo de la encuesta y la carga de trabajo para recopilar y administrar
datos. Hay muchas técnicas de muestreo disponibles para diversos fines. Estas técnicas se pueden
clasificar en dos categorías: muestreo probabilístico y muestreo no probabilístico, que se describen con
más detalle aquí:
Muestreo de probabilidad: Con esta técnica, se realiza una selección aleatoria de todos
los encuestados de la población, con igual probabilidad de la muestra seleccionada.
Estos tipos de técnicas de muestreo requieren más tiempo y son más costosos e
incluyen lo siguiente:
Muestreo aleatorio simple: Con esta técnica, cada encuestado se
selecciona al azar, lo que significa que cada encuestado tiene las mismas
posibilidades de ser seleccionado. Es un método simple y directo; por
ejemplo, se seleccionan al azar 20 productos de 500 productos para
realizar pruebas de calidad.
Muestreo estratificado: Con esta técnica, toda la población se divide en
pequeños grupos conocidos como estratos que se basan en algunos
criterios de similitud. Estos estratos pueden tener un tamaño desigual. Esta
técnica mejora la precisión al reducir el sesgo de selección.
Muestreo sistemático: Con esta técnica, los encuestados se seleccionan
a intervalos regulares. En otras palabras, podemos decir que los
encuestados se seleccionan en orden sistemático de la población
objetivo, como cadanortea encuestado de la población.
Muestreo por conglomerados: Con esta técnica de muestreo, toda la
población se divide en grupos o secciones. Los grupos se forman en función
del género, la ubicación, la ocupación, etc. Estos grupos completos se utilizan
para el muestreo en lugar del encuestado individual.
[100]
Estadísticas Capítulo 3
En esta sección, hemos visto los métodos de muestreo y sus tipos: muestreo probabilístico y muestreo
no probabilístico. Ahora es el momento de pasar a las técnicas de prueba de hipótesis. En las próximas
secciones, nos centraremos en las pruebas de hipótesis paramétricas y no paramétricas.
[101]
Estadísticas Capítulo 3
Una prueba t es una especie de prueba paramétrica que se utiliza para verificar si existe una
diferencia significativa entre las medias de los dos grupos en cuestión. Es la estadística inferencial
más utilizada que sigue la distribución normal. Una prueba t tiene dos tipos: una prueba t de una
muestra y una prueba t de dos muestras. Se utiliza una prueba t de una muestra para verificar si
hay una diferencia significativa entre una muestra y las medias de la población hipotética.
Tomemos a 10 estudiantes y verifiquemos si su peso promedio es de 68 kg o no utilizando una
prueba t, de la siguiente manera:
# Crear datos
datos = np.array ([63, 75, 84, 58, 52, 96, 63, 55, 76, 83])
# Encontrar media
mean_value = np.mean (datos)
Producción:
Media: 70,5
demás:
print ("Hipótesis aceptada")
Producción:
Valor P: 0.5986851106160134
[102]
Estadísticas Capítulo 3
En el bloque de código anterior, hemos probado la hipótesis nula (el peso promedio de 10
estudiantes es 68 kg) usando ttest_1samp (). Los resultados de salida han demostrado que se
acepta la hipótesis nula con un intervalo de confianza del 95%, lo que significa que el peso
promedio de 10 estudiantes es de 68 kg.
Se utiliza una prueba t de dos muestras para comparar la diferencia significativa entre dos grupos
independientes. Esta prueba también se conoce como prueba t de muestras independientes. Comparemos
el peso promedio de dos grupos de estudiantes independientes, de la siguiente manera:
Hipótesis alternativa Ha: Las medias de la muestra no son iguales — μ 1 > μ 2 o μ 2 > μ 1
data2 = np.array ([53, 43, 31, 113, 33, 57, 27, 23, 24, 43])
En el bloque de código anterior, hemos creado dos matrices de pesos de 10 estudiantes. Realicemos una
# Comparar muestras
si p <0,05:
demás:
[103]
Estadísticas Capítulo 3
Producción:
Valores p: 0.015170931362451255
Prueba t: 2.6835879913819185 Hipótesis
rechazada
Una prueba t de muestras pareadas es una prueba t de muestras dependientes, que se utiliza para
decidir si la diferencia media entre dos observaciones del mismo grupo es cero; por ejemplo, para
comparar la diferencia en el nivel de presión arterial de un grupo de pacientes antes y después de
algún tratamiento farmacológico. Esto es equivalente a una prueba t de una muestra y también se
conoce como prueba t de muestra dependiente. Realicemos una prueba t pareada para evaluar el
impacto del tratamiento de pérdida de peso. Hemos recopilado el peso de los pacientes antes y
después del tratamiento. Esto se puede representar mediante la siguiente hipótesis:
Hipótesis nula H0: La diferencia media entre las dos muestras dependientes es 0.
# prueba emparejada
de scipy.stats importar ttest_rel
En el bloque de código anterior, hemos creado dos matrices de pesos de 10 pacientes antes y después
del tratamiento. Realicemos una prueba t de muestra pareada, de la siguiente manera:
# Comparar pesos
[104]
Estadísticas Capítulo 3
si p <0,05:
print ("Hipótesis rechazada")
demás:
Producción:
Valores p: 0.013685575312467715
Prueba t: 3.0548295044306903 Hipótesis
rechazada
En el bloque de código anterior, hemos probado la hipótesis del peso promedio de dos grupos
antes y después del tratamiento usando el ttest_rel () método. Los resultados muestran que la
hipótesis nula se rechaza con un intervalo de confianza del 95%, lo que significa que el
tratamiento para adelgazar tiene un impacto significativo en el peso del paciente.
ANOVA: Una prueba t solo se ocupa de dos grupos, pero a veces tenemos más de dos
grupos o varios grupos al mismo tiempo para comparar. ANOVA (Análisis de variación)
es una prueba de inferencia estadística que se utiliza para comparar varios grupos.
Analiza la varianza entre y dentro de varios grupos y prueba varias hipótesis nulas al
mismo tiempo. Por lo general, compara más de dos conjuntos de datos y verifica la
significación estadística. Podemos utilizar ANOVA de tres formas: ANOVA de una vía,
ANOVA de dos vías y ANOVA multivariante de N vías.
Con el método ANOVA unidireccional, comparamos varios grupos en función de una sola
variable independiente; por ejemplo, una empresa de TI desea comparar la productividad de
varios grupos o equipos de empleados en función de la puntuación de rendimiento. En nuestro
ejemplo, comparamos el desempeño de los empleados en una empresa de TI con sede en tres
ubicaciones: Mumbai, Chicago y Londres. Aquí, realizaremos una prueba ANOVA unidireccional
y comprobaremos una diferencia significativa en el rendimiento. Definamos las hipótesis nula
y alternativa, de la siguiente manera:
[105]
Estadísticas Capítulo 3
En el bloque de código anterior, hemos creado tres listas de puntuaciones de desempeño de los
empleados para tres ubicaciones: Mumbai, Chicago y Londres.
si p <0,05:
print ("Hipótesis rechazada")
demás:
Producción:
valores p: 0,27667556390705783
ANOVA: 1,3480446381965452 Hipótesis
aceptada
En el bloque de código anterior, hemos probado la hipótesis de que no hay diferencia entre la
puntuación media de rendimiento de varias ubicaciones utilizando elf_oneway () método. Los
resultados anteriores muestran que la hipótesis nula se acepta con un intervalo de confianza
del 95%, lo que significa que no hay una diferencia significativa entre la puntuación media de
rendimiento de todas las ubicaciones.
[106]
Estadísticas Capítulo 3
Con el método ANOVA bidireccional, comparamos varios grupos en función de dos variables
independientes, por ejemplo, si una empresa de TI desea comparar la productividad de
varios grupos o equipos de empleados en función de las horas de trabajo y la complejidad
del proyecto.
En ANOVA de N vías, comparamos múltiples grupos basados en norte Variables independientes: por
ejemplo, si una empresa de TI desea comparar la productividad de varios grupos o equipos de
empleados en función de las horas de trabajo, la complejidad del proyecto, la capacitación de los
empleados y otros beneficios e instalaciones de los empleados.
En esta sección, hemos explorado las pruebas paramétricas como la prueba t y las pruebas ANOVA en
detalle. Pasemos a la prueba de hipótesis no paramétrica.
A Prueba de chi-cuadrado está determinada por una diferencia significativa o una relación entre
dos variables categóricas de una sola población. En general, esta prueba evalúa si las distribuciones
de variables categóricas difieren entre sí. También se conoce como prueba de bondad de ajuste de
chi-cuadrado o prueba de chi-cuadrado para la independencia. Un valor pequeño del estadístico Chi-
Cuadrado significa que los datos observados se ajustan a los datos esperados, y un valor mayor del
estadístico Chi-Cuadrado significa que los datos observados no se ajustan a los datos esperados. Por
ejemplo, el impacto del género en la preferencia de voto o el impacto del tamaño de la empresa en
la cobertura del seguro de salud se puede evaluar mediante una prueba de Chi-Cuadrado:
[107]
Estadísticas Capítulo 3
Hipótesis nula H0: Las dos variables categóricas son independientes, es decir, el
desempeño de los empleados es independiente del nivel de calificación más alto.
# mesa de contingencia
contingency_table = [promedio, sobresaliente]
# Aplicar prueba
stat, p, dof, esperado = chi2_contingency (contingency_table)
si p <0,05:
print ("Hipótesis rechazada")
[108]
Estadísticas Capítulo 3
demás:
Producción:
valores p: 0.059155602774381234
Hipótesis aceptada
Hipótesis alternativa Ha: Existe una diferencia entre las dos distribuciones de
muestra.
# Sample1
datos1 = [7,8,4,9,8]
# Sample2
datos2 = [3,4,2,1,1]
# Aplicar prueba
[109]
Estadísticas Capítulo 3
si p <0,01:
demás:
print ("Hipótesis aceptada")
Producción:
valores p: 0,007666581056801412
Hipótesis rechazada
los Prueba de rango con signo de Wilcoxon compara dos muestras pareadas. Es una
versión no paramétrica equivalente de la prueba t pareada. Prueba la hipótesis nula de si las
dos muestras emparejadas pertenecen a la misma distribución o no, por ejemplo, para
comparar la diferencia entre dos observaciones de tratamiento para múltiples grupos.
Comparemos la diferencia entre dos observaciones de tratamiento utilizando los siguientes
criterios:
# Muestra-1
datos1 = [1, 3, 5, 7, 9]
[110]
Estadísticas Capítulo 3
# Solicitar
stat, p = wilcoxon (datos1, datos2)
si p <0,01:
demás:
print ("Hipótesis aceptada")
Producción:
valores p: 0.025347318677468252
Hipótesis aceptada
los Kruskal-Wallis test es la versión no paramétrica de ANOVA de una vía, para evaluar
si las muestras pertenecen a la misma distribución o no. Compara dos o más muestras
independientes. Extiende el límite de la prueba U de Mann-Whitney, que compara solo
dos grupos. Comparemos tres grupos de muestra usando el siguiente código:
# Muestra de datos-1
x = [38, 18, 39, 83, 15, 38, 63, 1, 34, 50]
# Muestra de datos-2
y = [78, 32, 58, 59, 74, 77, 29, 77, 54, 59]
# Muestra de datos-3
z = [117, 92, 42, 79, 58, 117, 46, 114, 86, 26]
[111]
Estadísticas Capítulo 3
En el bloque de código anterior, hemos creado tres listas de datos. Realicemos una prueba de Kruskal-Wallis,
de la siguiente manera:
si p <0,01:
demás:
print ("Hipótesis aceptada")
Producción:
valores p: 0.01997922369138151
Hipótesis aceptada
[112]
Estadísticas Capítulo 3
Resumen
Los fundamentos básicos de las estadísticas proporcionarán la base para el análisis de datos, facilitando
cómo se describen y comprenden los datos. En este capítulo, ha aprendido los conceptos básicos de las
estadísticas, como los atributos y sus diferentes tipos, como nominal, ordinal y numérico. También ha
aprendido sobre la media, la mediana y la moda para medir la tendencia central. Las medidas de rango,
IQR, varianza y desviación estándar se utilizan para estimar la variabilidad en los datos; la asimetría y la
curtosis se utilizan para comprender la distribución de datos; La covarianza y la correlación se utilizan para
comprender la relación entre las variables. También ha visto temas de estadística inferencial como el
teorema del límite central, la recopilación de muestras y las pruebas paramétricas y no paramétricas.
También ha realizado una codificación práctica sobre conceptos estadísticos utilizando elpandas y
scipy.stats Bibliotecas.
El próximo capítulo, Capítulo 4, Álgebra lineal, nos ayudará a aprender cómo resolver el sistema lineal de
ecuaciones, encontrar valores propios y vectores propios, y aprender sobre distribución binomial y normal,
pruebas de normalidad y matrices enmascaradas utilizando los paquetes de Python NumPy y SciPy.
[113]
Álgebra lineal
-
Tanto el álgebra lineal como la estadística son la base de cualquier tipo de actividad de análisis de datos.
Las estadísticas nos ayudan a obtener una comprensión descriptiva inicial y a hacer inferencias a partir de
los datos. En el capítulo anterior, hemos entendido las medidas estadísticas descriptivas e inferenciales
para el análisis de datos. Por otro lado, el álgebra lineal es una de las materias matemáticas fundamentales
que es la base central para cualquier profesional de datos. El álgebra lineal es útil para trabajar con
vectores y matrices. La mayoría de los datos están disponibles en forma de vector o matriz. El
conocimiento profundo del álgebra lineal ayuda a los analistas de datos y a los científicos de datos a
comprender el flujo de trabajo del aprendizaje automático y los algoritmos de aprendizaje profundo, lo
que les brinda la flexibilidad de diseñar y modificar los algoritmos según las necesidades de su negocio.
Por ejemplo, si quiere trabajar conanálisis de componentes principales (PCA) debe conocer los
conceptos básicos de Autovalores y Autovectores, o si desea desarrollar un sistema de recomendación
debe conocer valor singular de descomposición (SVD). Una sólida formación en matemáticas y
estadística facilitará una transición más fluida al mundo del análisis de datos.
Este capítulo se centra principalmente en los conceptos centrales del álgebra lineal, como polinomios,
determinante, matriz inversa; resolver ecuaciones lineales; Valores propios y vectores propios; SVD;
números al azar; distribuciones binomiales y normales; pruebas de normalidad; y matrices
enmascaradas. También podemos realizar estas operaciones en Python usando los paquetes NumPy y
SciPy. NumPy y SciPy ofrecenlinalg paquete para operaciones de álgebra lineal.
Generación de números
aleatorios Distribución binomial
Distribución normal
Probando la normalidad de los datos usando SciPy Creando una matriz
enmascarada usando el numpy.ma subpaquete
Requerimientos técnicos
Para este capítulo, está disponible la siguiente información técnica:
NumPy también ofrece polyval () para evaluar el polinomio en valores dados. Esta función toma
coeficientes de polinomios y matrices de puntos y devuelve valores resultantes de polinomios.
Otra función eslinspace (), que genera una secuencia de valores igualmente separados. Toma el
inicio, la parada y el número de valores entre el rango de inicio y parada y devuelve valores
igualmente separados en el intervalo cerrado.
Veamos un ejemplo para generar y evaluar polinomios usando NumPy, de la siguiente manera:
[115]
Álgebra lineal Capítulo 4
v2 = np.random.rand (10)
# Ajustar los datos a los datos de ajuste polinomial con 4 grados del polinomio
coefs = np.polyfit (v1, v2, 3)
# Mostrar trama
plt.show ()
El gráfico que se muestra en la captura de pantalla anterior cambiará en cada iteración utilizando el programa
escrito anteriormente. La razón de esta fluctuación es la generación de valores aleatorios de vectores.
[116]
Álgebra lineal Capítulo 4
Determinante
El determinante es el concepto más esencial del álgebra lineal. Es un valor escalar que se calcula a partir
de una matriz cuadrada. El determinante es una operación fundamental que nos ayuda en la matriz
inversa y en la resolución de ecuaciones lineales. Los determinantes solo se calculan para matrices
cuadradas. Una matriz cuadrada tiene el mismo número de filas y columnas. losnumpy.linalg El
subpaquete proporciona el det () función para calcular el determinante de una matriz de entrada dada.
Calculemos el determinante en el siguiente bloque de código:
# Importar numpy
importar numpy como np
# Calcular determinante
print ("Determinante:", np.linalg.det (mat))
Matriz:
[[2 4]
[5 7]]
Determinante: -5.999999999999998
En el bloque de código anterior, hemos calculado el determinante de una matriz dada usando
elnp.linalg.det () método. Entendamos un concepto más de álgebra lineal, que es el rango, y
calculémoslo usando elnumpy.linalg subpaquete.
[117]
Álgebra lineal Capítulo 4
Matriz:
[[5 3 1]
[5 3 1]
[1 0 5]]
Rango: 2
los numpy.linalg El subpaquete proporciona una función para una operación inversa: el inv ()
función. Invirtamos una matriz usando elnumpy.linalg subpaquete. Primero, creamos una matriz
usando elestera() función y luego encontrar la inversa de la matriz usando la inv ()función, como
se ilustra en el siguiente bloque de código:
# Importar numpy
importar numpy como np
[118]
Álgebra lineal Capítulo 4
Matriz de entrada:
[[2 4]
[5 7]]
Inverso:
[[-1.16666667 0.66666667]
[0.83333333 -0.33333333]]
En el bloque de código anterior, hemos calculado la inversa de una matriz usando la inv ()
función de la numpy.linalg subpaquete.
x1 + x2 = 200
3x1 + 2x2 = 450
[119]
Álgebra lineal Capítulo 4
Matriz A:
[[1 1]
[3 2]]
Vector B: [200 450]
# Comprueba la solución
print ("Resultado:", np.dot (A, solución))
En el bloque de código anterior, hemos evaluado la solución usando el punto() función. Puede ver el
producto escalar de A y la solución es equivalente a B. Hasta ahora, hemos visto el determinante, el
rango, el inverso y cómo resolver ecuaciones lineales. Pasemos a SVD para la descomposición
matricial.
[120]
Álgebra lineal Capítulo 4
El autoanálisis descompone una matriz en vectores y valores. SVD descompone una matriz en las siguientes
partes: vectores singulares y valores singulares. SVD se usa ampliamente en procesamiento de señales, visión
por computadora,procesamiento natural del lenguaje (PNL) y aprendizaje automático, por ejemplo, sistemas
de recomendación y modelado de temas en los que la SVD es ampliamente aceptada e implementada en
soluciones comerciales de la vida real. Eche un vistazo a lo siguiente:
Aquí, A es un metro X norte matriz singular izquierda, Σ es una nxn matriz diagonal, V es un mxn matriz
singular derecha, y VT es la transposición de la V. numpy.linalg subpaquete ofrece elsvd () función para
descomponer una matriz. Veamos un ejemplo de SVD, de la siguiente manera:
En el bloque de código anterior, hemos descompuesto la matriz dada en tres partes: Izquierda
Matriz singular, Matriz diagonal, y Matriz singular derecha utilizando el svd ()
función de la scipy.linalg subpaquete.
[121]
Álgebra lineal Capítulo 4
Los autovectores y autovalores son los fundamentos centrales del álgebra lineal. Los autovectores y
autovalores se utilizan en SVD, agrupamiento espectral y PCA.
# Importar numpy
importar numpy como np
Matriz: [[2 4]
[5 7]]
[122]
Álgebra lineal Capítulo 4
En los dos bloques anteriores, hemos creado una matriz 2 * 2 y hemos calculado los
autovectores y los autovalores usando el eig () función de la numpy.linalgsubpaquete.
En el fragmento de código anterior, hemos calculado los valores propios utilizando el eigvals ()
función de la numpy.linalg subpaquete. Después de realizar la descomposición propia, veremos
cómo generar números aleatorios y una matriz.
# Importar numpy
importar numpy como np
[123]
Álgebra lineal Capítulo 4
Distribución binomial
La distribución binomial modela el número de ensayos repetidos con la misma probabilidad en
cada ensayo. Aquí, cada ensayo es independiente y tiene dos resultados posibles, éxito y fracaso,
que pueden ocurrir en cada cliente. La siguiente fórmula representa la distribución binomial:
Consideremos una casa de juego del siglo XVII en la que se puede apostar a lanzar ocho piezas y lanzar
nueve monedas. Si obtienes cinco o más caras, entonces ganas; de lo contrario, perderás. Escribamos el
código para esta simulación para 1000 monedas usando elbinomio() función, de la siguiente manera:
[124]
Álgebra lineal Capítulo 4
En el bloque de código anterior, primero creamos el saldo en efectivo matriz de tamaño 500 con valores
cero y actualizamos el primer valor con 500. Luego, generamos valores entre 0 y 9 usando el binomio()
función. Después de esto, actualizamos elsaldo en efectivo matriz basada en los resultados de los
lanzamientos de monedas y trazó el saldo de efectivo utilizando la biblioteca Matplotlib.
En cada ejecución, el código generará diferentes resultados o recorridos aleatorios. Si desea que la
caminata sea constante, debe usar el valor de semilla en elbinomio() función. Probemos otra forma
de distribución para el generador de números aleatorios: distribución normal.
[125]
Álgebra lineal Capítulo 4
Distribución normal
Las distribuciones normales ocurren con frecuencia en escenarios de la vida real. Una distribución
normal también se conoce como curva de campana debido a su forma característica. La función de
densidad de probabilidad modela la distribución continua. losnumpy.random El subpaquete ofrece
muchas distribuciones continuas como beta, gamma, logística, exponencial, multivariante normal y
distribución normal. losnormal() las funciones encuentran muestras de distribución gaussiana o normal.
Escribamos código para visualizar la distribución normal usando el normal() función, de la siguiente
manera:
tamaño_muestra = 225000
# Crear histograma
n, bins, patch_list = plt.hist (sample, int (np.sqrt (sample_size)), densidad = True)
# Establecer parámetros
mu, sigma = 0,1
x = contenedores
[126]
Álgebra lineal Capítulo 4
Aquí, hemos generado valores aleatorios usando el normal() función de la numpy. aleatoriosubpaquete y
muestra los valores utilizando un histograma y un diagrama de línea o curva de campana o teórico
función de densidad de probabilidad (PDF) con media 0 y desviación estándar de 1.
En esta sección, aprenderemos cómo aplicar pruebas de normalidad en datos. Estamos usando tres muestras
de datos aleatorios de tamaño pequeño, mediano y grande. Generemos las muestras de datos para las tres
muestras usando elnormal() función, de la siguiente manera:
[127]
Álgebra lineal Capítulo 4
sns.distplot (muestra_pequeña)
plt.show ()
[128]
Álgebra lineal Capítulo 4
Veamos un ejemplo del histograma para una muestra media, como sigue:
plt.show ()
Veamos un ejemplo del histograma para una muestra grande, como sigue:
plt.show ()
[129]
Álgebra lineal Capítulo 4
En las tres gráficas anteriores, podemos observar que a medida que aumenta el tamaño de la muestra, la curva se
convierte en una curva normal. Los histogramas pueden ser una buena herramienta para probar la normalidad de los
datos.
2. Prueba de Shapiro-Wilk: Esta prueba se utiliza para evaluar la normalidad de los datos. En
Python, elshapiro () función de la scipy.stats El subpaquete se puede utilizar para evaluar la
normalidad. losshapiro () La función devolverá tuplas de dos valores: estadísticas de prueba y
valor p. Veamos el siguiente ejemplo:
[130]
Álgebra lineal Capítulo 4
En el bloque de código anterior, puede ver que los conjuntos de datos pequeños y grandes tienen valores
p mayores que 0.05, por lo que como la hipótesis nula no la rechazó, esto significa que la muestra parece
una distribución Gaussiana o normal; mientras que para el conjunto de datos medio, el valor p es menor
que 0.05, por lo que la hipótesis nula lo ha rechazado, lo que significa que la muestra no parece una
distribución Gaussiana o normal.
face_image = face ()
mask_random_array = np.random.randint (0, 3, size = face_image.shape)
[131]
Álgebra lineal Capítulo 4
[132]
Álgebra lineal Capítulo 4
En el bloque de código anterior, primero cargamos la imagen de la cara desde el scipy.miscsubpaquete y creó
una máscara aleatoria utilizando el randint () función. Luego, aplicamos la máscara aleatoria en la imagen de la
cara. Después de esto, aplicamos la operación de registro en la imagen de la cara original y la imagen de la cara
enmascarada. Finalmente, mostramos todas las imágenes en 2 * 2 subtramas. También puede probar una serie
de operaciones de máscara en la imagen desde elnumpy.ma subpaquete. Aquí, solo nos enfocamos en la
operación de registro de la matriz enmascarada. Se trata de conceptos básicos de álgebra lineal. Es hora de
pasar a los conceptos de visualización de datos en el próximo capítulo.
Resumen
Finalmente, podemos concluir que materias matemáticas como el álgebra lineal son la columna vertebral de
todos los algoritmos de aprendizaje automático. A lo largo del capítulo, nos hemos centrado en conceptos
esenciales de álgebra lineal para mejorarlo como profesional de datos. En este capítulo, aprendió mucho sobre
conceptos de álgebra lineal usando los subpaquetes NumPy y SciPy. Nuestro enfoque principal fue en
polinomios, determinante, matriz inversa; resolver ecuaciones lineales; Valores propios y vectores propios; SVD;
números al azar; distribuciones binomiales y normales; pruebas de normalidad; y matrices enmascaradas.
El próximo capítulo, Capítulo 5, Visualización de datos, trata sobre el tema importante de visualizar datos con
Python. La visualización es algo que hacemos a menudo cuando comenzamos a analizar datos. Ayuda a
mostrar relaciones entre variables en los datos. Al visualizar los datos, también podemos hacernos una
idea de sus propiedades estadísticas.
[133]
Sección 2: Análisis de datos
-
exploratorios y limpieza de datos
El principal objetivo de esta sección es desarrollar Análisis exploratorio de datos (EDA) y habilidades de
limpieza de datos para el alumno. Estas habilidades comprenden visualización de datos, extracción de datos y
preprocesamiento. Esta sección utilizará principalmente matplotlib, seaborn, Bokeh, pandas, scikitlearn, NumPy
y SciPy. También se centra en el procesamiento de señales y el análisis de series de tiempo.
Python ofrece varias bibliotecas para la visualización de datos, como Matplotlib, Seaborn y Bokeh. En este
capítulo, primero nos centraremos en Matplotlib, que es la biblioteca básica de Python para la
visualización. Después de Matplotlib, exploraremos Seaborn, que usa Matplotlib y ofrece gráficos
estadísticos avanzados y de alto nivel. Al final, trabajaremos en la visualización interactiva de datos
utilizando Bokeh. También exploraremospandas Graficado. La siguiente es una lista de temas que se
tratarán en este capítulo:
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
Puede encontrar el código y los conjuntos de datos en el siguiente enlace de GitHub: https: / /
github. com / PacktPublishing / Python- Data- Analysis- Third- Edition / tree / master /
Chapter05.
Todos los bloques de código están disponibles en el ch5.ipynb expediente. Este capítulo utiliza solo
un archivo CSV (HR_comma_sep.csv) con fines de práctica.
En este capítulo, usaremos Matplotlib, pandas Bibliotecas Seaborn y Bokeh
Python.
Visualización de datos Capítulo 5
Matplotlib es el módulo de Python más popular para la visualización de datos. Es una biblioteca base para
la mayoría de los módulos de visualización avanzados de Python, como Seaborn. Ofrece funciones
integradas flexibles y fáciles de usar para crear figuras y gráficos.
En Anaconda, Matplotlib ya está instalado. Si aún encuentra un error, puede instalarlo de las
siguientes maneras.
También puede simplemente instalar Matplotlib desde su terminal o símbolo del sistema usando el
siguiente comando:
Para crear una trama muy básica en Matplotlib, necesitamos invocar el trama() función en
elmatplotlib.pyplot subpaquete. Esta función produce un gráfico bidimensional para una
sola lista o varias listas de puntos con conocidosX y y coordenadas.
El siguiente código de demostración está en el ch5.ipynb archivo en el paquete de código de este libro, que
puede encontrar en el siguiente enlace de GitHub: https: / / github. com / PacktPublishing /
Python-Data- Analysis- Third- Edition / blob / master / Chapter05 / Ch5. ipynb.
# Dibuja la trama
plt.plot (a, a + 0.5, label = 'lineal')
[136]
Visualización de datos Capítulo 5
# Mostrar el gráfico
plt.show ()
En el bloque de código anterior, primero estamos importando los módulos Matplotlib y NumPy.
Después de esto, estamos creando los datos usando elespacio de línea () función de NumPy y
graficando estos datos usando el trama() función de Matplotlib. Finalmente, estamos mostrando la
figura usando elshow() función.
Hay dos componentes básicos de una gráfica: la figura y los ejes. La figura es un recipiente en el
que se dibuja todo. Contiene componentes como gráficos, subparcelas, ejes, títulos y una leyenda.
En la siguiente sección, nos centraremos en estos componentes, que actúan como accesorios para
gráficos.
[137]
Visualización de datos Capítulo 5
Múltiples gráficos significan múltiples objetos, como líneas, barras y dispersión. Los puntos de diferentes series
se pueden mostrar en un solo gráfico. Las leyendas o series de gráficos reflejan lay eje. Una leyenda es un cuadro
que aparece en el lado derecho o izquierdo de un gráfico y muestra lo que representa cada elemento del gráfico.
Veamos un ejemplo donde vemos cómo usar estos accesorios en nuestras tablas:
# Mostrar la trama
plt.show ()
[138]
Visualización de datos Capítulo 5
En el gráfico anterior, se muestran dos líneas en un solo gráfico. Hemos utilizado dos parámetros
adicionales:etiqueta y color - en el trama() función. losetiqueta parámetro define el nombre de la serie
y color define el color del gráfico de líneas. En las próximas secciones, nos centraremos en
diferentes tipos de parcelas. Exploraremos un diagrama de dispersión en la siguiente sección.
Gráfico de dispersión
Los diagramas de dispersión dibujan puntos de datos utilizando coordenadas cartesianas para mostrar los valores de
los valores numéricos. También representan la relación entre dos valores numéricos. Podemos crear un diagrama de
dispersión en Matplotlib usando eldispersión() función, de la siguiente manera:
[139]
Visualización de datos Capítulo 5
# Mostrar el gráfico
plt.show ()
En el diagrama de dispersión anterior, el dispersión() La función toma valores del eje xy del eje y. En nuestro
ejemplo, estamos trazando dos listas:X y y. También podemos utilizar parámetros opcionales como Cpor el color,
alfa para la transparencia de los marcadores, que oscilan entre 0 y 1, y marcadorpara la forma de los puntos en
el diagrama de dispersión, como *, o, o cualquier otro símbolo. En la siguiente sección, nos centraremos en la
gráfica lineal.
Gráfico de línea
Un gráfico de líneas es un gráfico que muestra una línea entre dos variables. Tiene una secuencia de puntos de
datos unidos por un segmento:
[140]
Visualización de datos Capítulo 5
# Mostrar el gráfico
plt.show ()
En el programa de trazado de líneas anterior, el trama() La función toma valores del eje xy del eje y. En la
siguiente sección, aprenderemos a trazar un gráfico circular.
[141]
Visualización de datos Capítulo 5
Gráfico circular
Un gráfico circular es un gráfico circular que se divide en piezas en forma de cuña. Cada
pieza es proporcional al valor que representa. El valor total del pastel es 100 por ciento:
# Dibuja el gráfico
plt.show ()
[142]
Visualización de datos Capítulo 5
En el código anterior del gráfico circular, especificamos valores, etiquetas, colores, ángulo de sobresalto, sombra,
explosión, y autopct. En nuestro ejemplo, valores son las puntuaciones del alumno en cuatro materias y etiquetas
es la lista de nombres de materias. También podemos especificar la lista de colores para las puntuaciones de las
materias individuales. losángulo inicial parámetro especifica el primer valor del ángulo, que es de 90 grados; esto
significa que la primera línea es vertical.
Opcionalmente, también podemos utilizar el sombra parámetro para especificar la sombra del sector circular y el
explotar parámetro para extraer una lista de sectores del valor binario. Si queremos sacar una segunda porción
de pastel, entonces una tupla de valores sería (0, 0.1, 0, 0). Pasemos ahora al gráfico de barras.
Gráfico de barras
Un diagrama de barras es una herramienta visual para comparar los valores de varios grupos. Se puede
dibujar horizontal o verticalmente. Podemos crear un gráfico de barras usando elbar() función:
# Muestra la trama
plt.show ()
[143]
Visualización de datos Capítulo 5
En el programa de gráfico de barras anterior, el bar() la función toma X-valores del eje, y-valores del eje y un
color. En nuestro ejemplo, estamos trazando clasificaciones de películas y su frecuencia. Las clasificaciones de
películas están en elX eje y la frecuencia nominal está en el y eje. También podemos especificar el color de las
barras en el gráfico de barras usando elcolor parámetro. Veamos otra variante del diagrama de barras en la
siguiente subsección.
Gráfico de histograma
Un histograma muestra la distribución de una variable numérica. Creamos un histograma usando elhist ()
método. Muestra la distribución de probabilidad de una variable continua. Un histograma solo funciona con una
sola variable, mientras que un gráfico de barras funciona con dos variables:
# Trazar el histograma
[144]
Visualización de datos Capítulo 5
# Muestra la trama
plt.show ()
En el histograma anterior, el hist () la función toma valores, contenedores, y rwidth. En nuestro ejemplo, graficamos la
edad del empleado y usamos un contenedor de 10 años. Estamos comenzando nuestro contenedor de 20 a 60 con un
tamaño de contenedor de 10 años. Estamos usando un ancho de barra relativo de 0.6, pero puede elegir cualquier
tamaño para un ancho más grueso o más delgado. Ahora es el momento de saltar al gráfico de burbujas, que puede
manejar múltiples variables en un gráfico bidimensional.
[145]
Visualización de datos Capítulo 5
Gráfico de burbujas
Un diagrama de burbujas es un tipo de diagrama de dispersión. No solo dibuja puntos de datos utilizando coordenadas
cartesianas, sino que también crea burbujas en los puntos de datos. Bubble muestra la tercera dimensión de una
trama. Muestra tres valores numéricos: dos valores están en elX y y ejes y el tercero es el tamaño de los puntos de
datos (o burbujas):
poblaciones = [2781682,
604245,5757499,428963,4818690,5337962,9630959,4137312]
gdp_per_capita = [130475, 106705, 100345, 79530, 78785, 74356,69382, 67000]
# escale el ingreso per cápita del PIB para disparar las burbujas en el gráfico
scaled_gdp_per_capita = np.divide (gdp_per_capita, 80)
# Muestra la trama
plt.show ()
[146]
Visualización de datos Capítulo 5
[147]
Visualización de datos Capítulo 5
pandas tramando
los pandas la biblioteca ofrece la trama() método como envoltorio de la biblioteca Matplotlib. lostrama() El
método nos permite crear parcelas directamente en pandas DataFrames. El seguimientotrama() Los
parámetros del método se utilizan para crear los gráficos:
amable: Un parámetro de cadena para el tipo de gráfico, como línea, barra, barra, hist, cuadro,
KDE, circular, área o dispersión.
figsize: Esto define el tamaño de una figura en una tupla de (ancho, alto).
título: Esto define el título del gráfico.red: Parámetro booleano para la
línea de cuadrícula del eje.leyenda: Esto define la leyenda.xticks: Esto
define la secuencia de tics del eje x.yticks: Esto define la secuencia de tics
del eje y.
# Mostrar figura
plt.show ()
[148]
Visualización de datos Capítulo 5
En la trama anterior, el trama() la función toma tipo, x, y, color, y título valores. En nuestro
ejemplo, estamos trazando el diagrama de dispersión entre edad e ingresos usando el
amableparámetro como 'dispersión'. los la edad y ingreso las columnas se asignan a la X y y
parámetros. El color del punto de dispersión y el título del gráfico se asignan alcolor ytítulo
parámetros:
# Mostrar figura
plt.show ()
[149]
Visualización de datos Capítulo 5
En la trama anterior, el trama() la función toma tipo, x, y, color, y título valores. En nuestro ejemplo,
estamos trazando la gráfica de barras entre la edad y los ingresos usando elamableparámetro
como 'bar'. los nombre y la edad las columnas se asignan a la X y y parámetros. El color del punto
de dispersin se asigna alcolor parámetro. Esto se trata depandasGraficado. Ahora, a partir de la
siguiente sección, veremos cómo visualizar los datos usando la biblioteca Seaborn.
[150]
Visualización de datos Capítulo 5
Simplemente puede instalar Seaborn desde su terminal o símbolo del sistema usando lo
siguiente:
Si lo está instalando en el Jupyter Notebook, debe colocar el! firmar antes delpepita
mando. Aquí hay un ejemplo:
lm parcelas
los lm plot traza la dispersión y ajusta el modelo de regresión en ella. Un diagrama de dispersión es la
mejor manera de comprender la relación entre dos variables. Su visualización de salida es una distribución
conjunta de dos variables.lmplot () toma dos nombres de columna - X y y - como una cadena y variable
DataFrame. Veamos el siguiente ejemplo:
# Crear DataFrame
df = pd.DataFrame ({'x': [1,3,5,7,9,11], 'y': [10,25,35,33,41,59]})
# Crear lmplot
sns.lmplot (x = 'x', y = 'y', datos = df)
# Mostrar figura
plt.show ()
[151]
Visualización de datos Capítulo 5
Por defecto, lmplot () se ajusta a la línea de regresión. También podemos eliminar esto
configurando elfit_reg parámetro como Falso:
# Crear lmplot
sns.lmplot (x = 'x', y = 'y', data = df, fit_reg = False)
# Mostrar figura
plt.show ()
[152]
Visualización de datos Capítulo 5
# Crear lmplot
sns.lmplot (x = 'nivel_de_saatisfacción', y = 'última_evaluación', datos = gl, ajuste_reg =
Falso, tono = 'izquierda')
# Mostrar figura
plt.show ()
[153]
Visualización de datos Capítulo 5
Parcelas de barras
gráfico de barras () ofrece la relación entre una variable categórica y una continua. Utiliza barras
rectangulares con longitudes variables:
[154]
Visualización de datos Capítulo 5
# Crear DataFrame
df = pd.DataFrame ({'x': ['P', 'Q', 'R', 'S', 'T', 'U'], 'y': [10,25,35,33, 41,59]})
# Crear lmplot
sns.barplot (x = 'x', y = 'y', datos = df)
# Mostrar figura
plt.show ()
En el ejemplo anterior, el diagrama de barras se crea utilizando el bar() función. Se necesitan dos columnas:
X y y - y un DataFrame como entrada. En la siguiente sección, veremos cómo trazar una gráfica de
distribución.
Parcelas de distribución
Esto traza una distribución univariante de variables. Es una combinación de un histograma con el tamaño del
contenedor predeterminado y unEstimación de la densidad del kernel (KDE) trama. En nuestro ejemplo,distplot
()tomará el nivel_de_saatisfacción columna de entrada y trazar la distribución de la misma. Aquí, la distribución
denivel_de_saatisfacción tiene dos picos:
# Mostrar figura
plt.show ()
[155]
Visualización de datos Capítulo 5
En el bloque de código anterior, hemos creado la gráfica de distribución usando distplot (). Es
hora de pasar al diagrama de caja.
Diagramas de caja
El diagrama de caja, también conocido como diagrama de caja-bigotes, es uno de los mejores diagramas para
comprender la distribución de cada variable con sus cuartiles. Puede ser horizontal o vertical. Muestra distribución
de cuartiles en una caja, que se conoce como bigote. También muestra el mínimo, el máximo y los valores atípicos
en los datos. Podemos crear fácilmente un diagrama de caja usando Seaborn:
# Mostrar figura
plt.show ()
[156]
Visualización de datos Capítulo 5
En el ejemplo anterior, hemos utilizado dos variables para el diagrama de caja. Aquí, el diagrama
de caja indica que el rango denivel_de_saatisfacción es más alto que last_evaluation(rendimiento).
Pasemos a la trama de KDE en Seaborn.
Gráficos de KDE
los kde () La función traza la estimación de la densidad de probabilidad de una variable continua
dada. Es un estimador de tipo no paramétrico. En nuestro ejemplo, elkde () la función toma un
parámetro, nivel_de_saatisfacción, y traza el KDE:
# Mostrar figura
plt.show ()
[157]
Visualización de datos Capítulo 5
En el bloque de código anterior, hemos creado una gráfica de densidad usando kdeplot (). En la siguiente sección,
veremos otro diagrama de distribución, que es una combinación de un diagrama de caja y de densidad, conocido
como diagrama de violín.
Tramas de violín
Los diagramas de violín son una forma combinada de diagramas de caja y KDE, que ofrecen un análisis fácil
de entender de la distribución:
# Mostrar figura
plt.show ()
[158]
Visualización de datos Capítulo 5
En el ejemplo anterior, hemos utilizado dos variables para la trama del violín. Aquí, podemos concluir que
el rango denivel_de_saatisfacción es más alto que last_evaluation(rendimiento) y ambas variables tienen
dos picos en la distribución. Después de trabajar en las parcelas de distribución, veremos cómo podemos
combinar lasagrupar por operación y diagrama de caja en un solo diagrama usando un diagrama de
recuento.
Contar parcelas
countplot () es un tipo especial de diagrama de barras. Muestra la frecuencia de cada variable categórica. También se
conoce como histograma para variables categóricas. Hace que las operaciones sean muy simples en comparación con
Matplotlib. En Matplotlib, para crear un gráfico de recuento, primero debemos agrupar por la columna de categoría y
contar la frecuencia de cada clase. Después de eso, este recuento es consumido por el gráfico de barras de Matplotlib.
Pero el gráfico de recuento de Seaborn ofrece una sola línea de código para trazar la distribución:
# Mostrar figura
plt.show ()
[159]
Visualización de datos Capítulo 5
En el ejemplo anterior, contamos el salario variable. loscontar() La función toma una sola columna y
DataFrame. Entonces, podemos concluir fácilmente del gráfico que la mayoría de los empleados
tienen salarios bajos y medios. También podemos usarmatiz como segunda variable. Veamos el
siguiente ejemplo:
# Mostrar figura
plt.show ()
[160]
Visualización de datos Capítulo 5
En el ejemplo anterior, podemos ver que izquierda se utiliza como tono o tono de color. Esto
indica que la mayoría de los empleados con el salario más bajo abandonaron la empresa.
Veamos otra gráfica importante para visualizar la relación y distribución de dos variables.
Parcelas conjuntas
La trama conjunta es una visualización de varios paneles; muestra la relación bivariada y la distribución
de variables individuales en un solo gráfico. También podemos trazar un KDE usando elamable
parámetro de jointplot (). Al establecer el amable parámetro como "kde ", podemos dibujar el diagrama
de KDE. Veamos el siguiente ejemplo:
# Mostrar figura
plt.show ()
[161]
Visualización de datos Capítulo 5
En la gráfica anterior, hemos creado la gráfica conjunta usando jointplot () y también agregó el kde
trazar usando un amable parámetro como "kde ". Pasemos a mapas de calor para una visualización más
diversa.
Mapas de calor
Heatmap ofrece una representación de cuadrícula bidimensional. La celda individual de la cuadrícula
contiene un valor de la matriz. La función de mapa de calor también ofrece anotaciones en cada celda:
# Encuentra correlación
[162]
Visualización de datos Capítulo 5
cor_matrix = data.corr ()
# Mostrar figura
plt.show ()
En el ejemplo anterior, el conjunto de datos Iris se carga usando load_dataset () y la correlación se calcula
utilizando el corr () función. loscorr () La función devuelve la matriz de correlación. Esta matriz de
correlación se traza utilizando elmapa de calor() función para la vista de cuadrícula de la matriz de
correlación. Toma dos parámetros: la matriz de correlación yannot. los anotar el parámetro se pasa como
Verdadero. En la gráfica, podemos ver una matriz simétrica, y todos los valores en la diagonal son unos, lo
que indica una correlación perfecta de una variable consigo misma. También podemos establecer un
nuevo mapa de color usando elcmap parámetro para diferentes colores:
# Mostrar figura
plt.show ()
[163]
Visualización de datos Capítulo 5
En el mapa de calor anterior, hemos cambiado el mapa de color usando el cmap parámetro para
diferentes colores. Aquí, estamos usando elYlGnBu (amarillo, verde y azul) paracmap. Ahora,
pasaremos a la gráfica de pares para un análisis exploratorio más rápido.
Par parcelas
Seaborn ofrece un análisis de datos exploratorio rápido con relaciones y distribución individual utilizando un diagrama de pares.
Un diagrama de pares ofrece una distribución única mediante un histograma y una distribución conjunta mediante un diagrama
de dispersión:
# Mostrar figura
plt.show ()
[164]
Visualización de datos Capítulo 5
En el ejemplo anterior, el conjunto de datos Iris se carga usando load_dataset () y ese conjunto de datos
se pasa al parplot () función. En la trama, crea unnorte por norte matriz o una cuadrícula de gráficos. La
diagonal muestra la distribución de las columnas y los elementos no diagonales de la cuadrícula
muestran el diagrama de dispersión para comprender la relación entre todas las variables.
[165]
Visualización de datos Capítulo 5
En las secciones anteriores, hemos visto cómo utilizar los gráficos de Seaborn. Ahora, saltaremos a
otra biblioteca de visualización importante, que es Bokeh. En las próximas secciones, dibujaremos
gráficos interactivos y versátiles utilizando la biblioteca Bokeh.
Tanto las bibliotecas Matplotlib como Bokeh tienen intenciones diferentes. Matplotlib se enfoca en la
visualización estática, simple y rápida, mientras que Bokeh se enfoca en una visualización altamente
interactiva, dinámica, basada en la web y de calidad. Matplotlib se usa generalmente para publicar imágenes,
mientras que Bokeh es para una audiencia web. En las secciones restantes de este capítulo, aprenderemos el
trazado básico con Bokeh. Podemos crear imágenes más interactivas para la exploración de datos usando
Bokeh.
La forma más sencilla de instalar la biblioteca Bokeh es con el paquete de distribución de Anaconda. Para
instalar Bokeh, use el siguiente comando:
También podemos instalarlo usando pepita. Para instalar Bokeh usando pepita, use el siguiente comando:
[166]
Visualización de datos Capítulo 5
x = [1,3,5,7,9,11]
y = [10,25,35,33,41,59]
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (fig)
[167]
Visualización de datos Capítulo 5
Después de configurar el figura objeto, crearemos un diagrama de marcadores de círculo de dispersión utilizando
una función de círculo. loscirculo() la función tomará X y y valores. También toma parámetros de tamaño, color y
alfa. losshow() La función finalmente trazará la salida una vez que se agreguen todas las características y datos al
gráfico.
Glifos
Bokeh usa un glifo visual, que se refiere a los círculos, líneas, triángulos, cuadrados, barras, diamantes
y otros gráficos de formas. El glifo es un símbolo único que se utiliza para transmitir información en
forma pictórica. Creemos un diagrama de línea usando ellínea() función:
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (p)
[168]
Visualización de datos Capítulo 5
En el ejemplo anterior, el línea() la función toma el X- y y-valores del eje. También se necesitaancho
de línea y color valores de la línea. En la siguiente sección, nos centraremos en los diseños para
múltiples parcelas.
Diseños
Bokeh ofrece diseños para organizar gráficos y widgets. Los diseños organizan más de un gráfico en un solo
panel para visualizaciones interactivas. También permiten configurar los modos de tamaño para cambiar el
tamaño de los gráficos y los widgets según el tamaño del panel. El diseño puede ser de los siguientes tipos:
Disposición de filas: Organiza todas las parcelas en una fila o en forma horizontal.Diseño de
columna: Organiza todas las parcelas en columna o en vertical.Diseño anidado: Esta es una
combinación de diseños de filas y columnas.Diseño de cuadrícula: Esto le ofrece una cuadrícula
de matrices para organizar los gráficos en formato.
[169]
Visualización de datos Capítulo 5
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (row_layout)
[170]
Visualización de datos Capítulo 5
En este diagrama de diseño, hemos importado los diseños de filas y columnas, hemos cargado los datos de Iris
de los datos de muestra de Bokeh y hemos creado una instancia de los tres figura objetos con ancho y alto de
parcela, creó los tres marcadores de círculo de dispersión en cada objeto de figura y creó el diseño de fila. Este
diseño de fila tomará elfigura objetos como entrada y se dibuja utilizando el show()función. También podemos
crear un diseño de columna creando un diseño de columna en lugar de un diseño de fila, como se muestra:
# Muestra la trama
mostrar (col_layout)
[171]
Visualización de datos Capítulo 5
[172]
Visualización de datos Capítulo 5
En el gráfico anterior, hemos creado el diseño de columnas de tres gráficos. Pasemos a los diseños
anidados para obtener visualizaciones más potentes.
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (nasted_layout)
[173]
Visualización de datos Capítulo 5
Aquí, puede ver que el diseño de la fila tiene dos filas. En el primero,Figura 1 se asigna y la segunda fila tiene el
diseño de columna de Figura 2 y Fig. 3. Entonces, este diseño se convierte en un diseño de 2 * 2, en el que la
primera columna tiene solo un componente y la segunda columna tiene dos componentes.
[174]
Visualización de datos Capítulo 5
Varias parcelas
También se pueden crear múltiples gráficos y objetos usando un diseño de cuadrícula. Un diseño de cuadrícula organiza los
gráficos y los objetos del widget en forma de matriz de filas y columnas. Toma una lista de objetos de figura para cada fila.
También podemos usarNinguno como marcador de posición:
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (grid_layout)
[175]
Visualización de datos Capítulo 5
El diseño anterior es similar al diseño anidado. Aquí hemos importadogrillaplot ().Organiza los componentes en
filas y columnas. El gráfico de cuadrícula ha tomado una lista de figuras de filas. Los primeros elementos de la
lista sonFigura 1 y Figura 2. Los segundos elementos son Ninguno y Fig. 3.Cada elemento es una fila en la matriz
de la cuadrícula. losNinguno El marcador de posición se utiliza para dejar la celda vacía o sin componentes.
[176]
Visualización de datos Capítulo 5
Los modos de dimensionamiento pueden ayudarnos a configurar figuras con opciones de cambio de tamaño. Bokeh ofrece los
siguientes modos de tamaño:
Después de aprender sobre diseños y gráficos múltiples, es hora de aprender sobre interacciones para
visualizaciones interactivas.
Interacciones
Bokeh ofrece leyendas interactivas para gráficos procesables en tiempo de ejecución. Las leyendas se pueden
ocultar o silenciar haciendo clic en los gráficos de glifos. Podemos activar estos modos activando elclick_policy
propiedad y haciendo clic en la entrada de la leyenda.
[177]
Visualización de datos Capítulo 5
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (fig)
[178]
Visualización de datos Capítulo 5
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (fig)
[179]
Visualización de datos Capítulo 5
Aquí, podemos establecer la política de clic mudo con el legend.click_policy parámetro para silenciar objetos
de figura. Además, necesitamos ejecutar elpor bucle de cada tipo de glifo o elemento de leyenda en el que
hace clic. En nuestro ejemplo, estamos ejecutando unpor bucle para tipos de especies y colores. Al hacer
clic en cualquier especie de la leyenda, filtrará los datos y ocultará ese glifo. Además de eso, necesitamos
agregar unmuted_color y muted_alpha parámetro al marcador de círculo de dispersión.
Anotaciones
Bokeh ofrece varias anotaciones para obtener información complementaria para las visualizaciones.
Ayuda al espectador agregando la siguiente información:
[180]
Visualización de datos Capítulo 5
Leyendas: Esta anotación representa la tercera variable a través del color o la forma y nos ayuda a
vincular características para facilitar la interpretación.
Barras de color: Las barras de color se crean usando ColorMapper con la paleta de colores.
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (p)
[181]
Visualización de datos Capítulo 5
[182]
Visualización de datos Capítulo 5
Herramienta de desplazamiento
La herramienta de desplazamiento muestra la información relacionada siempre que el puntero del mouse se coloca
sobre un área en particular. Veamos ejemplos para comprender las gráficas flotantes:
# Salida a cuaderno
output_notebook ()
# Muestra la trama
mostrar (p)
[183]
Visualización de datos Capítulo 5
Widgets
Los widgets ofrecen interacción en tiempo real en la interfaz. Los widgets tienen la capacidad de modificar
y actualizar gráficos en tiempo de ejecución. Pueden ejecutar un servidor Bokeh o una aplicación HTML
independiente. Para usar widgets, debe especificar la funcionalidad. Se puede anidar dentro del diseño.
Hay dos enfoques para agregar la funcionalidad de los widgets al programa:
Con el servidor Bokeh y el controlador de eventos de configuración, como al hacer clic o onchange
evento
[184]
Visualización de datos Capítulo 5
Panel de pestañas
Los paneles de pestañas nos permiten crear múltiples gráficos y diseños en una sola ventana. Veamos un ejemplo
de un panel de pestañas:
# Salida a cuaderno
output_notebook ()
# Crear paneles
tab1 = Panel (child = fig1, title = 'tab1') tab2 = Panel
(child = fig2, title = 'tab2')
# Muestra la trama
mostrar (tab_layout)
[185]
Visualización de datos Capítulo 5
En el código anterior, hemos creado los dos paneles pasando figura objetos a un parámetro hijo y
título a un título parámetro a Panel. Ambos paneles se combinan en una lista y se pasan al Pestañas
objeto de diseño. EstaPestañas El objeto es mostrado por el show() función. Puede cambiar la
pestaña simplemente haciendo clic en ella.
Deslizador
Un control deslizante es una barra de seguimiento gráfica que controla el valor moviéndolo en una escala
horizontal. Podemos cambiar los valores del gráfico sin afectar su formato. Veamos un ejemplo de un control
deslizante:
[186]
Visualización de datos Capítulo 5
output_notebook ()
# Crear un DataFrame
df = ColumnDataSource (datos = {"x_values": x, "y_values": y})
slider_widget = Slider (start = 0.0, end = 10, value = 1, step = .1, title = "Display power of x")
# Crear diseño
slider_widget_layout = columna (figura, slider_widget)
# Mostrar el diseño
mostrar (slider_widget_layout)
[187]
Visualización de datos Capítulo 5
En el código anterior, el Bokeh deslizador () la función toma inicio, fin, valor, paso, título, y devolución de llamada
CustomJS como entrada. En nuestro ejemplo, estamos creando un gráfico de líneas y cambiando suy variable
por el poder de la X variable usando la barra deslizante. Podemos crear el control deslizante pasandoinicio, fin,
valor, paso, título, y una devolución de llamada de CustomJS al Deslizadorobjeto. Necesitamos centrarnos en la
devolución de llamada de CustomJS. Toma el DataFrame de origen, obtiene el valor del control deslizante
usandocb_obj.value, y actualiza sus valores usando el change.emit ()función. Estamos actualizandoy_value en el
por bucle encontrando su potencia usando el valor del control deslizante.
[188]
Visualización de datos Capítulo 5
Resumen
En este capítulo, discutimos la visualización de datos mediante el trazado con Matplotlib, pandasSeaborn y Bokeh.
Cubrimos varios gráficos, como gráficos de líneas, gráficos circulares, gráficos de barras, histogramas, gráficos de
dispersión, gráficos de caja, gráficos de burbujas, mapas de calor, gráficos KDE, gráficos de violín, gráficos de recuento,
gráficos conjuntos y gráficos de pares. Nos enfocamos en accesorios para gráficos, como títulos, etiquetas, leyendas,
diseños, subtramas y anotaciones. Además, aprendimos acerca de la visualización interactiva utilizando diseños,
interacciones, herramientas flotantes y widgets de Bokeh.
El próximo capítulo, Capítulo 6, Recuperar, procesar y almacenar datos, nos enseñará habilidades de lectura
y escritura de datos de diversas fuentes, como archivos, objetos y bases de datos relacionales y NoSQL.
Aunque algunas personas no consideran estas habilidades para el análisis de datos, un analista de datos
independiente o asistente debe saber cómo pueden obtener datos de varios formatos de archivo y bases
de datos con fines de análisis.
[189]
Recuperación, procesamiento y
-
Almacenamiento de datos
Los datos se pueden encontrar en todas partes, en todas las formas y formas. Podemos obtenerlo de la web, sensores de
IoT, correos electrónicos, FTP y bases de datos. También podemos recopilarlo nosotros mismos en un experimento de
laboratorio, encuestas electorales, encuestas de marketing y encuestas sociales. Como profesional de datos, debe saber
cómo manejar una variedad de conjuntos de datos, ya que es una habilidad muy importante. Discutiremos la
recuperación, el procesamiento y el almacenamiento de varios tipos de datos en este capítulo. Este capítulo ofrece una
descripción general de cómo adquirir datos en varios formatos, como CSV, Excel, JSON, HDF5, Parquet ypepinillo.
A veces, necesitamos almacenar o guardar los datos antes o después del análisis de datos. También
aprenderemos cómo acceder a datos de relacionales yNoSQL (No solo SQL) bases de datos comosqlite3,
MySQL, MongoDB, Cassandra y Redis. En el mundo de la web del siglo XXI, las bases de datos NoSQL
están experimentando un crecimiento sustancial en big data y aplicaciones web. Proporcionan una base
de datos más flexible, rápida y sin esquemas. Las bases de datos NoSQL pueden almacenar datos en
varios formatos, como estilo de documento, orientado a columnas, objetos, gráficos, tuplas o una
combinación.
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
[191]
Recuperar, procesar y almacenar datos Capítulo 6
# import numpy
importar numpy como np
Veamos cómo podemos leer archivos CSV usando el pandas módulo en la siguiente sección.
# importar pandas
importar pandas como pd
[192]
Recuperar, procesar y almacenar datos Capítulo 6
Ahora podemos guardar el marco de datos como un archivo CSV usando el siguiente código:
En el código de muestra anterior, hemos leído y guardado el archivo CSV usando el read_csv ()y
to_csv (0) métodos de la pandas módulo.
filepath_or_buffer: Proporciona una ruta de archivo o URL como una cadena para leer un archivo.
sep: Proporciona un separador en la cadena, por ejemplo, coma como ',' y punto y
coma como ';'. El separador predeterminado es una coma ','.
delim_whitespace: Argumento alternativo para un separador de espacios en blanco. Es una
variable booleana. El valor predeterminado paradelim_whitespace es Falso.
encabezamiento: Se utiliza para identificar los nombres de las columnas. El valor predeterminado es
inferir.
nombres: Puede pasar una lista de nombres de columna. El valor predeterminado paranombres es Ninguno.
En pandas un DataFrame también se puede exportar en un archivo CSV usando el to_csv () método. Los archivos CSV
son archivos de valores separados por comas. Este método puede ejecutarse con un solo argumento (nombre de
archivo como una cadena):
path_or_buf: La ruta del archivo o la ubicación donde se exportará el archivo.sep: Este es un delimitador que
se utiliza para los archivos de salida.encabezamiento: Para incluir nombres de columna o una lista de alias
[193]
Recuperar, procesar y almacenar datos Capítulo 6
Para obtener más parámetros y descripciones detalladas, visite https: / / pandas. pydata. org / pandas-
docs / stable / reference / api / pandas. DataFrame. to_ csv. html. Veamos como podemos leer
Archivos de Excel usando el pandas módulo en la siguiente sección.
Los objetos DataFrame se pueden escribir en hojas de Excel. Podemos usar elpara sobresalir() función para
exportar objetos DataFrame a una hoja de Excel. Sobre todo, elpara sobresalir() los argumentos de la función
son los mismos que to_csv () excepto por el sheet_name argumento:
df.to_excel ('desempeño_empleado.xlsx')
En el ejemplo de código anterior, hemos exportado un solo DataFrame a una hoja de Excel. También
podemos exportar múltiples DataFrames en un solo archivo con diferentes nombres de hoja. También
podemos escribir más de un DataFrame en un solo archivo de Excel (cada DataFrame en diferentes hojas)
usandoExcelWriter, como se muestra:
[194]
Recuperar, procesar y almacenar datos Capítulo 6
En el ejemplo de código anterior, hemos escrito varios DataFrames en un solo archivo de Excel.
Aquí, cada DataFrame almacena en una hoja diferente usando elExcelWriter función. Veamos cómo
podemos leer los archivos JSON usando elpandas módulo en la siguiente sección.
En el ejemplo de código anterior, hemos leído el archivo JSON usando el read_json ()método.
Veamos cómo escribir un archivo JSON:
[195]
Recuperar, procesar y almacenar datos Capítulo 6
En el ejemplo de código anterior, hemos escrito el archivo JSON usando el to_json ()método. En
elto_json () método, el orientar El parámetro se usa para manejar el formato de cadena de
salida. orientar ofrece formatos de registro, columna, índice y valor. Puede explorarlo con más
detalle en la página web oficial, enhttps: / / pandas. pydata. org / pandas-
docs / version / 0. 24. 2 / reference / api / pandas. DataFrame. to_ json. html. Es hora de saltar
en archivos HDF5. En la siguiente sección, veremos cómo leer y escribir archivos HDF5 usando el
pandas módulo.
En el ejemplo de código anterior, hemos escrito el formato de archivo HDF usando el to_hdf ()método. '
mesa' es un parámetro de formato utilizado para el formato de tabla. El formato de tabla puede
funcionar más lento pero ofrece operaciones más flexibles, como buscar y seleccionar. losadjuntar El
parámetro se utiliza para agregar datos de entrada al archivo de datos existente:
[196]
Recuperar, procesar y almacenar datos Capítulo 6
En el ejemplo de código anterior, hemos leído el formato de archivo HDF usando el read_hdf ()
método. Veamos cómo leer y escribir tablas HTML desde un sitio web en la siguiente sección.
Número de DataFrames: 7
En el ejemplo de código anterior, hemos leído la tabla HTML de una página web determinada
usando el read_html () método. read_html () devolverá todas las tablas como una lista de DataFrames.
Revisemos uno de los DataFrames de la lista:
[197]
Recuperar, procesar y almacenar datos Capítulo 6
En el ejemplo de código anterior, mostramos los cinco registros iniciales de la primera tabla disponible
en la página web dada. De manera similar, también podemos escribir objetos DataFrame como tablas
HTML usandoto_html (). to_html ()renderiza el contenido como una tabla HTML:
Con el ejemplo de código anterior, podemos convertir cualquier DataFrame en una página HTML que
contenga el DataFrame como una tabla.
Hay dos motores que se utilizan para leer y escribir archivos Parquet en pandas: pyarrow y el fastparquet
motor. pandasEl motor de parquet predeterminado es pyarrow; si pyarrow no está disponible, entonces
usa fastparquet. En nuestro ejemplo, estamos usando pyarrow. Vamos a instalar
pyarrow utilizando pepita:
También puede instalar el pyarrow motor en el Jupyter Notebook poniendo un! antes depepita
palabra clave. Aquí hay un ejemplo:
[198]
Recuperar, procesar y almacenar datos Capítulo 6
En el ejemplo de código anterior, hemos leído el archivo Parquet usando read_parquet () y el pyarrow
motor. read_parquet () ayuda a leer los formatos de archivo Parquet. Veamos cómo leer y escribir los
datos usandopepinillo archivos en la siguiente sección.
# importar pandas
importar pandas como pd
[199]
Recuperar, procesar y almacenar datos Capítulo 6
Podemos leer y escribir datos en Python desde el sqlite3 módulo. No necesitamos descargar e instalar
sqlite3 ya que ya está disponible en todas las distribuciones estándar de Python. Consqlite3, podemos
almacenar la base de datos en un archivo o mantenerla en la RAM.sqlite3 nos permite escribir cualquier
base de datos usando SQL sin ningún servidor de aplicaciones de terceros. Veamos el siguiente
ejemplo para comprender la conectividad de la base de datos:
# Importar sqlite3
importar sqlite3
# Crear cursor
cur = conn.cursor ()
[200]
Recuperar, procesar y almacenar datos Capítulo 6
# cometer la transacción
con.commit ()
# Obtener registros
imprimir (cur.fetchall ())
Producción:
[(105, 57000)]
Aquí, estamos usando el sqlite3 módulo. Primero, importamos el módulo y creamos una conexión
usando elconectar() método. losconectar() el método tomará el nombre y la ruta de la base de
datos; si la base de datos no existe, creará la base de datos con el nombre dado y en la ruta de
ubicación dada. Una vez que haya establecido una conexión con la base de datos, debe crear el
Cursor objeto y ejecute la consulta SQL usando elejecutar() método. Podemos crear una tabla en el
ejecutar() método, como se indica en el ejemplo emp tabla, que se crea en la base de datos de
empleados. De manera similar, podemos escribir los datos usando elejecutar() método con un
insertar Argumento de consulta y enviar los datos a la base de datos utilizando el cometer()
método. Los datos también se pueden extraer utilizando elejecutar() método pasando el Seleccione
consulta como argumento y se obtiene usandofetchall () y el fetchone () método. fetchone () extrae
un solo registro yfetchall () extrae todos los registros de una tabla de base de datos.
[201]
Recuperar, procesar y almacenar datos Capítulo 6
Puedes usar el pymysql conector como biblioteca cliente y se puede instalar usando pepita:
1. Importe la biblioteca.
2. Cree una conexión a la base de datos.
3. Cree un objeto de cursor.
4. Ejecute la consulta SQL.
5. Obtenga los registros o la respuesta para la actualización o inserte el registro.
6. Cierre la conexión.
Ahora podemos insertar y recuperar los registros de una tabla en MySQL. Veamos el siguiente ejemplo
para comprender la conectividad de la base de datos:
tipo de cursor
tratar:
[202]
Recuperar, procesar y almacenar datos Capítulo 6
Aquí, estamos usando el pymysql módulo. Primero, importamos el módulo y creamos una conexión. los
conectar() La función tomará la dirección del host, que es localhost, en nuestro caso (también podemos usar
la dirección IP de la base de datos remota), nombre de usuario, contraseña, nombre de la base de datos,
juego de caracteres y clase de cursor.
Después de establecer la conexión, podemos leer o escribir los datos. En nuestro ejemplo, estamos
escribiendo los datos usando elinsertar Consulta SQL y recuperándola usando el Seleccione consulta. En la
consulta de inserción, estamos ejecutando la consulta y pasando el argumento que queremos ingresar a la
base de datos, y confirmando los resultados en la base de datos usando elcometer()método. Cuando
leemos los registros usando la consulta de selección, obtendremos una cierta cantidad de registros.
Podemos extraer esos registros usando elfetchone () y fetchall () funciones. losfetchone () El método extrae
solo registros individuales y el fetchall () El método extrae varios registros de una tabla de base de datos.
Una cosa más; aquí, todas las operaciones de lectura y escritura se realizan en untratar bloque y la
conexión se cierra en el bloque final. También podemos probar uno más
módulo mysql.connector para conectividad MySQL y Python. Se puede instalar usando
pepita:
[203]
Recuperar, procesar y almacenar datos Capítulo 6
# Crea un cursor
cur = conexión.cursor ()
# cierra la conexión
connection.close ()
En el ejemplo de código anterior, nos estamos conectando a Python con la base de datos MySQL usando el
mysql.connector módulo y el enfoque y los pasos para recuperar datos son los mismos que con el pymysql
módulo. También estamos escribiendo los registros extraídos en unpandasDataFrame simplemente
pasando los registros obtenidos al objeto DataFrame y asignando nombres de columna de la descripción
del cursor.
[204]
Recuperar, procesar y almacenar datos Capítulo 6
En el ejemplo de código anterior, crearemos un motor para una conexión de base de datos con nombre de
usuario, contraseña y parámetros de base de datos. losto_sql () La función escribe varios registros del
DataFrame en una base de datos SQL. Tomará el nombre de la tabla, elestafaparámetro para el objeto de
motor de conexión, el if_exists parámetro para verificar si los datos se agregarán a una nueva tabla o se
reemplazarán con una nueva tabla, y tamaño de porción para escribir datos en lotes.
Podemos leer y escribir datos en Python desde MongoDB usando el Pymongo conector. Para este
propósito de conectividad, necesitamos instalar MongoDB y elPymongo conector. Puede descargar
MongoDB desde su portal web oficial:https: / / www. mongodb. com / downloadcenter / community.
PyMongo es una biblioteca cliente Python MongoDB pura que se puede instalar usando pepita:
# Importar pymongo
importar pymongo
[205]
Recuperar, procesar y almacenar datos Capítulo 6
Aquí, estamos tratando de extraer datos de la colección de bases de datos en MongoDB creando un
cliente Mongo, insertando datos, extrayendo detalles de la colección y asignándolos al DataFrame.
Veamos cómo crear una conexión de base de datos con la base de datos en columnas Cassandra en
la siguiente sección.
# Importar el clúster
desde el clúster de importación cassandra.cluster
[206]
Recuperar, procesar y almacenar datos Capítulo 6
(% (eid) s,% (ename) s,% (age) s) "" ", {'eid': 101, 'ename':" Steve Smith ", 'age': 42})
Aquí, estamos tratando de extraer datos de la base de datos de Cassandra creando un objeto de clúster,
creando una conexión usando el conectar() , ejecutando una inserción y seleccionando los datos de la
consulta. Después de ejecutar la consulta, estamos imprimiendo los resultados y asignando los registros
extraídos alpandas Marco de datos. Pasemos ahora a otra base de datos NoSQL: Redis.
Podemos leer y escribir datos en Python desde Redis usando el conector de Redis. Para este
propósito de conectividad, necesitamos instalar Redis y el conector Redis. Tú puedes descargar
Redis desde el siguiente enlace: https: / / github. com / rgl / redis / downloads. Redis es un puro
Biblioteca cliente de Python Redis que se puede instalar usando pepita:
# Módulo de importación
importar redis
# Crear conexión
r = redis.Redis (host = 'localhost', puerto = 6379, db = 0)
[207]
Recuperar, procesar y almacenar datos Capítulo 6
# Imprime el valor
imprimir (valor)
Aquí, estamos tratando de extraer datos de la base de datos de valores clave de Redis. Primero, hemos
creado una conexión con la base de datos. Estamos configurando los pares clave-valor en la base de
datos de Redis usando elcolocar() método y también hemos extraído el valor utilizando el obtener()
método con el parámetro clave dado.
Finalmente, es hora de pasar al último tema de este capítulo, que es PonyORM para mapeo
relacional de objetos (ORM).
PonyORM
PonyORM es un poderoso paquete ORM que está escrito en Python puro. Es rápido y fácil de usar y realiza
operaciones con el mínimo esfuerzo. Proporciona optimización automática de consultas y un editor de
esquema de base de datos GUI. También admite la gestión automática de transacciones, el almacenamiento en
caché automático y claves compuestas. PonyORM utiliza expresiones generadoras de Python, que se traducen
en SQL. Podemos instalarlo usandopepita:
# Definir entidades
clase Emp (db.Entity):
eid = PrimaryKey (int, auto = True) salario
= Required (int)
[208]
Recuperar, procesar y almacenar datos Capítulo 6
Producción:
eid | salario
---+------
104 | 43000
104 | 43000
En el ejemplo de código anterior, estamos realizando ORM. Primero, hemos creado unBase de datos
objeto y entidades definidas utilizando un Emp clase. Después de eso, hemos adjuntado las entidades a
la base de datos usandodb.bind (). Podemos vincularlo con cuatro bases de datos: sqlite, mysql,
postgresql, y oráculo. En nuestro ejemplo, usamos MySQL y pasamos los detalles de su credencial, como
el nombre de usuario, la contraseña y el nombre de la base de datos. Podemos realizar el
mapeo de entidades con datos usando generate_mapping (). los create_tables = Verdadero
El argumento crea las tablas si no existe. sql_debug (verdadero) activará el modo de depuración. los
Seleccione() La función traduce un generador de Python en una consulta SQL y devuelve unponi
objeto. Estaponi el objeto se convertirá en una lista de entidades utilizando el operador de división([:])
y el show() La función mostrará todos los registros de forma tabular.
Resumen
En este capítulo, aprendimos sobre la recuperación, el procesamiento y el almacenamiento de datos en
diferentes formatos. Hemos analizado la lectura y escritura de datos de varios formatos de archivo y
fuentes, como CSV, Excel, JSON, HDF5, HTML,pepinillo, table y archivos Parquet. También aprendimos a
leer y escribir desde varias bases de datos relacionales y NoSQL, como SQLite3, MySQL, MongoDB,
Cassandra y Redis.
El próximo capítulo, Capítulo 7, Limpieza de datos desordenados, trata sobre el tema importante del preprocesamiento
de datos y la ingeniería de funciones con Python. El capítulo comienza con un análisis de datos exploratorio y conduce
al filtrado, manejo de valores perdidos y valores atípicos. Después de la limpieza, la atención se centrará en la
transformación de datos, como la codificación, el escalado y la división.
[209]
Limpieza de datos desordenados
-
Los analistas de datos y los científicos pasan la mayor parte de su tiempo limpiando datos y preprocesando conjuntos
de datos desordenados. Si bien se habla menos de esta actividad, es una de las actividades más realizadas y una de las
habilidades más importantes para cualquier profesional de datos. Dominar la habilidad de la limpieza de datos es
necesario para cualquier aspirante a científico de datos. La limpieza y el preprocesamiento de datos es el proceso de
identificación, actualización y eliminación de datos corruptos o incorrectos. La limpieza y el procesamiento previo dan
como resultado datos de alta calidad para un análisis sólido y sin errores. Los datos de calidad pueden superar los
algoritmos complejos y superar a los algoritmos simples y menos complejos. En este contexto, alta calidad significa
datos precisos, completos y consistentes. La limpieza de datos es un conjunto de actividades como el manejo de valores
perdidos, eliminación de valores atípicos, codificación de características, escalado, transformación y división.
Explorando datos
Filtrado de datos para eliminar el ruido
Manejo de valores perdidos
Manejo de valores atípicos
Escalado de características
Transformación de características
División de funciones
¡Empecemos!
Limpieza de datos desordenados Capítulo 7
Requerimientos técnicos
Los siguientes son los requisitos técnicos para este capítulo:
Puede encontrar el código y los conjuntos de datos que se utilizarán en este capítulo en este
repositorio de GitHub del libro en https: / / github. com / PacktPublishing / Python-
Data- Analysis- Third- Edition / tree / master / Chapter07.
Todo el código está disponible en el ch7.ipynb expediente. Este capítulo utiliza solo un
archivo CSV (employee.csv) con fines de práctica.
En este capítulo, usaremos el pandas y scikit-learn Bibliotecas de Python, así
que asegúrese de tenerlas instaladas.
Explorando datos
En esta sección, exploraremos los datos realizando Análisis exploratorio de datos (EDA). EDA es el
componente más crítico e importante del proceso de análisis de datos. EDA ofrece los siguientes
beneficios:
En EDA, el primer paso es leer el conjunto de datos. Podemos leer el conjunto de datos usandopandas.
lospandas la biblioteca ofrece varias opciones para leer datos. Puede leer archivos en varios formatos,
como CSV, Excel, JSON, parquet, HTML y pickle. Todos estos métodos se trataron en el capítulo anterior.
Después de leer los datos, podemos explorar los datos. Esta exploración inicial nos ayudará a
comprender los datos y a obtener información sobre el dominio. Comencemos con el proceso de EDA.
[211]
Limpieza de datos desordenados Capítulo 7
Primero, leeremos el employee.csv archivo (puede encontrar este archivo en el Capítulo 7 carpeta de
el repositorio de GitHub de este libro en https: / / github. com / PacktPublishing / Python- Data-
Analysis- Third- Edition / blob / master / Chapter07 / employee. csv):
# importar pandas
importar pandas como pd
Echemos un vistazo a los primeros cinco registros en el archivo usando el cabeza() método:
De manera similar, veamos los últimos cinco registros usando el cabeza() método:
[212]
Limpieza de datos desordenados Capítulo 7
(9, 7)
Podemos verificar el esquema de la tabla, sus columnas, filas, tipos de datos y valores faltantes en el
DataFrame usando el siguiente código:
En el resultado anterior, puede ver que hay 7 columnas en los datos. De estas 7 columnas, 3
columnas (edad, ingresos y sexo) tienen valores perdidos. De estas 7 columnas, 4 son objetos, 2 son
flotantes y 1 es un número entero.
[213]
Limpieza de datos desordenados Capítulo 7
Ahora, echemos un vistazo a las estadísticas descriptivas de los datos usando el describirfunción. Esta
función describirá objetos numéricos. En nuestro ejemplo, las puntuaciones de edad, ingresos y
rendimiento describirán el recuento, la media, la desviación estándar, el mínimo y el máximo y el
primer, segundo y tercer cuartiles:
En el bloque de código anterior, hemos verificado los valores estadísticos descriptivos de los datos
usando el describir() función. A partir de estos resultados, podemos interpretar que la edad del empleado
oscila entre los 23 y los 54 años. Aquí, la edad media es 40 años y la edad media es 45 años. De manera
similar, podemos sacar conclusiones para los puntajes de ingresos y desempeño. Ahora que hemos
descrito los datos, aprendamos a filtrar el ruido de los datos.
[214]
Limpieza de datos desordenados Capítulo 7
En la sección anterior, aprendimos sobre la exploración de datos, mientras que en esta sección,
aprenderemos sobre el filtrado de datos. Los datos se pueden filtrar por columnas o por filas.
Explorémoslos uno por uno.
# Filtrar columnas
data.filter (['nombre', 'departamento'])
Del mismo modo, también podemos filtrar columnas mediante la división. Al dividir, una sola columna no
necesita una lista, pero cuando estamos filtrando varias columnas, entonces deberían estar en la lista. La salida
de una sola columna es una serie pandas. Si queremos la salida como un DataFrame, entonces necesitamos
poner el nombre de la columna única en una lista. Eche un vistazo al siguiente ejemplo:
0 Allen Smith
1 S Kumar
2 Jack Morgan
3 Ying Chin
4 Dheeraj Patel
[215]
Limpieza de datos desordenados Capítulo 7
5 Satyam Sharma
6 James Authur
7 Josh Wills
8 Pato leo
Nombre: nombre, dtipo: objeto
En el ejemplo anterior, hemos seleccionado una sola columna sin pasarla a la lista y la
salida es una serie pandas.
Como puede ver, se puede seleccionar una sola columna usando una lista de Python. La salida de este filtro es
un DataFrame de pandas con una sola columna.
[216]
Limpieza de datos desordenados Capítulo 7
Como puede ver, hemos filtrado las dos columnas sin usar el filtrar() función.
[217]
Limpieza de datos desordenados Capítulo 7
En la filtración basada en condiciones, tenemos que aprobar algunas condiciones entre corchetes,
[] o corchetes, (). Para un solo valor, usamos la condición == (doble igual a), mientras que para
valores múltiples, usamos laes en() función y pasar la lista de valores. Echemos un vistazo al
siguiente ejemplo:
En el código anterior, filtramos las ventas del departamento en la primera línea de código
usando == (doble igual a) como condición. Ahora, filtremos varias columnas usando eles en()
función:
[218]
Limpieza de datos desordenados Capítulo 7
Ahora, veamos las condiciones> = y <= para variables continuas. Podemos tener condiciones
únicas o múltiples. Echemos un vistazo al siguiente ejemplo:
# Filtrar empleados que tienen más de 500 y menos de 700 puntajes de desempeño
datos [(data.performance_score> = 500) & (data.performance_score <700)]
También podemos probar el consulta() método. Este método consulta las columnas mediante una
expresión booleana. Veamos un ejemplo:
[219]
Limpieza de datos desordenados Capítulo 7
En el ejemplo anterior, filtramos los empleados que tienen puntuaciones de desempeño inferiores a
500. Ahora, aprendamos a manejar los valores perdidos.
Es importante comprender que, en algunos casos, los valores perdidos no afectarán los datos. Por ejemplo, los
números de la licencia de conducir, los números de la seguridad social o cualquier otro número de
identificación único no afectarán los modelos de aprendizaje automático porque no se pueden usar como
funciones en el modelo.
En las siguientes subsecciones, veremos cómo se pueden manejar los valores perdidos con más detalle.
Primero, aprenderemos cómo eliminar los valores perdidos.
[220]
Limpieza de datos desordenados Capítulo 7
# Complete todos los valores que faltan en la columna de edad con la media de la columna de edad
data ['edad'] = data.age.fillna (data.age.mean ()) datos
[221]
Limpieza de datos desordenados Capítulo 7
En el ejemplo anterior, los valores faltantes en la columna de edad se han completado con el valor
medio de la columna de edad. Aprendamos a completar los valores faltantes usando la mediana:
# Complete todos los valores faltantes en la columna de ingresos con una mediana de
columna de ingresos
data ['ingresos'] = data.income.fillna (data.income.median ()) datos
[222]
Limpieza de datos desordenados Capítulo 7
En el ejemplo anterior, los valores faltantes en la columna de ingresos se han completado con el valor
mediano de la columna de ingresos. Aprendamos a completar los valores perdidos usando el modo:
# Complete todos los valores faltantes en la columna de género (columna de categoría) con
el modo de la columna de género data ['gender'] = data ['gender']. fillna (data
['gender']. mode () [0]) data
En el ejemplo de código anterior, los valores faltantes en la columna de género se han completado con el valor de
modo de la columna de género. Como ha visto, la media, la mediana y el modo nos ayudan a manejar los valores
faltantes en pandas DataFrames. En la siguiente sección, nos centraremos en cómo manejar los valores atípicos.
[223]
Limpieza de datos desordenados Capítulo 7
Hay dos tipos de valores atípicos: univariados y multivariados. Los valores atípicos univariados se pueden encontrar
en distribuciones de una sola variable, mientras que los multivariados se pueden encontrar en espacios n-
dimensionales. Podemos detectar y manejar valores atípicos de las siguientes formas:
Diagrama de caja: Podemos usar un diagrama de caja para crear un montón de puntos de datos a través
de cuartiles. Agrupa los puntos de datos entre el primer y tercer cuartil en un cuadro rectangular. El
diagrama de caja también muestra los valores atípicos como puntos individuales utilizando el rango
intercuartílico.
Gráfico de dispersión: Un gráfico de dispersión muestra los puntos (o dos variables) en el
gráfico bidimensional. Una variable se coloca en el eje x, mientras que la otra se coloca en el
eje y.
Puntuación Z: La puntuación Z es una especie de enfoque paramétrico para detectar valores atípicos.
Asume una distribución normal de los datos. El valor atípico se encuentra en la cola de la distribución
de la curva normal y está lejos de la media:
Rango intercuartil (IQR): IQR es una medida estadística sólida de la dispersión de datos. Es la
diferencia entre el tercer y el primer cuartil. Estos cuartiles se pueden visualizar en un
diagrama de caja. Esto también se conoce como propagación media, 50% central o
propagación H:
Percentil: Un percentil es una medida estadística que divide los datos en 100 grupos de igual
tamaño. Su valor indica el porcentaje de población por debajo de ese valor. Por ejemplo, el
percentil 95 significa que el 95% de las personas se incluyen en esta categoría.
[224]
Limpieza de datos desordenados Capítulo 7
[225]
Limpieza de datos desordenados Capítulo 7
En el ejemplo de código anterior, manejamos los valores atípicos usando percentiles. Eliminamos los valores
atípicos usando un percentil de 1 para el límite inferior y un percentil de 99 para el límite superior. Esto nos
ayuda a manejar valores atípicos en pandas DataFrames. En la siguiente sección, nos centraremos en cómo
realizar la codificación de funciones.
Codificación one-hot
La codificación one-hot transforma la columna categórica en etiquetas y divide la columna en varias
columnas. Los números se reemplazan por valores binarios como unos o ceros. Por ejemplo,
digamos que, en elcolor variable, hay tres categorías; es decir,rojo verde,y azul. Estas tres categorías
están etiquetadas y codificadas en columnas binarias, como se muestra en el siguiente diagrama:
[226]
Limpieza de datos desordenados Capítulo 7
Aquí, podemos ver dos columnas adicionales, F y M. Ambas columnas son columnas ficticias que
fueron agregadas por el codificador booleano. También podemos realizar la misma tarea con
OneHotEncoderdesde el scikit-learn módulo. Veamos un ejemplo de usoOneHotEncoder.
# Complete todos los valores faltantes en la columna de ingresos (columna de categoría) con el modo
de columna de edad
datos ['género'] = datos ['género']. fillna (datos ['género']. modo () [0])
[227]
Limpieza de datos desordenados Capítulo 7
Codificación de etiquetas
La codificación de etiquetas también se conoce como codificación de números enteros. La codificación entera
reemplaza los valores categóricos con valores numéricos. Aquí, los valores únicos en las variables se reemplazan
con una secuencia de valores enteros. Por ejemplo, digamos que hay tres categorías: rojo, verde y azul. Estas
tres categorías se codificaron con valores enteros; es decir,rojo es 0, verde es 1, y azul es 2.
# Importar pandas
importar pandas como pd
# Importar LabelEncoder
desde sklearn.preprocessing import LabelEncoder
# Imprime el codificado
imprimir (datos_codificados)
[2 1 0 0 2 1 2 1 0 2]
[228]
Limpieza de datos desordenados Capítulo 7
Codificador ordinal
La codificación ordinal es similar a la codificación de etiquetas, excepto que hay un orden para la codificación. La
codificación de salida comenzará desde 0 y terminará en uno menos que el tamaño de las categorías. Veamos
un ejemplo que contiene calificaciones de empleados como G0, G1, G2, G3 y G4. Estos cinco grados se han
codificado con valores enteros ordinales; es decir,G0 es 0, G1 es 1, G2 es 2, G3 es
3, y G4 es 4. Podemos definir el orden de los valores como una lista y pasarlo al parámetro de
categoría. El codificador ordinal utiliza valores enteros o numéricos para codificar. Aquí, los valores
enteros y numéricos son de naturaleza ordinal. Esta codificación ayuda a los algoritmos de
aprendizaje automático a aprovechar esta relación ordinal.
[229]
Limpieza de datos desordenados Capítulo 7
El ejemplo anterior es similar al LabelEncoder ejemplo, excepto por el orden de los valores que
se pasaron cuando el Codificador ordinal se inicializó el objeto. En este ejemplo, elcategorias los
parámetros se pasaron junto con el calificación orden en el momento de la inicialización.
Escala de características
En la vida real, la mayoría de las funciones tienen diferentes rangos, magnitudes y unidades, como la edad entre 0-200
y el salario entre 0 y miles o millones. Desde el punto de vista de un analista de datos o un científico de datos, ¿cómo
podemos comparar estas características cuando están en diferentes escalas? Las características de gran magnitud
pesarán más en los modelos de aprendizaje automático que las características de menor magnitud. Afortunadamente,
el escalado de funciones o la normalización de funciones pueden resolver estos problemas.
La escala de características trae todas las características al mismo nivel de magnitud. Esto no es obligatorio
para todo tipo de algoritmos; algunos algoritmos claramente necesitan datos escalados, como los que se
basan en medidas de distancia euclidiana, como K-vecino más cercano y el algoritmo de agrupación Kmeans.
[230]
Limpieza de datos desordenados Capítulo 7
Normalización de escala estándar o puntuación Z: Este método calcula los valores escalados de
una característica mediante el uso de la desviación estándar y media de esa característica. Es más
adecuado para datos distribuidos normalmente. Suponga que es la media y es la desviación
estándar de la columna de características. Esto da como resultado la siguiente fórmula:
data.head ()
[231]
Limpieza de datos desordenados Capítulo 7
# Importar MinMaxScaler
desde sklearn.preprocessing import MinMaxScaler
# Inicializar MinMaxScaler
escalador = MinMaxScaler ()
[232]
Limpieza de datos desordenados Capítulo 7
Escalado robusto: Este método es similar al método del escalador mínimo-máximo. En lugar
de mínimo-máximo, este método utiliza un rango intercuartílico. Por eso es resistente a
valores atípicos. Suponga que y son el primer y tercer cuartiles de la columna x. Esta
da como resultado la siguiente fórmula:
# Importar RobustScaler
desde sklearn.preprocessing import RobustScaler
# Inicializar el RobustScaler
escalador = RobustScaler ()
[233]
Limpieza de datos desordenados Capítulo 7
Transformación de características
La transformación de características altera las características para que estén en la forma requerida. También reduce
el efecto de valores atípicos, maneja datos sesgados y hace que el modelo sea más robusto. La siguiente lista
muestra los diferentes tipos de transformación de características:
Si la característica está sesgada a la derecha o positivamente o agrupada en valores más bajos, entonces podemos
aplicar la raíz cuadrada, raíz cúbica y transformaciones logarítmicas, mientras que si la característica está sesgada a la
izquierda o sesgada negativamente o agrupada en valores más altos, entonces puede aplicar el cubo, el cuadrado, etc.
[234]
Limpieza de datos desordenados Capítulo 7
División de funciones
La división de funciones ayuda a los analistas de datos y a los científicos de datos a crear más funciones nuevas para el
modelado. Permite que los algoritmos de aprendizaje automático comprendan características y descubran información
potencial para la toma de decisiones; por ejemplo, dividir las características del nombre en nombre, segundo nombre y
apellido y dividir una dirección en número de casa, localidad, punto de referencia, área, ciudad, país y código postal.
Las características compuestas, como las columnas de cadenas y fechas, violan los principios de los datos ordenados. La
división de características es una buena opción si desea generar más características a partir de una característica
compuesta. Podemos utilizar los componentes de una columna para hacer esto. Por ejemplo, a partir de un objeto de
fecha, podemos obtener fácilmente el año, el mes y el día de la semana. Estas características pueden afectar
directamente al modelo de predicción. No existe una regla general cuando se trata de dividir las funciones en
componentes; esto depende de las características de la función:
[235]
Limpieza de datos desordenados Capítulo 7
Resumen
En este capítulo, exploramos el preprocesamiento de datos y la ingeniería de funciones con Python. Esto le ayudó
a adquirir habilidades importantes para el análisis de datos. El enfoque principal de este capítulo fue limpiar y
filtrar datos sucios. Comenzamos con EDA y discutimos el filtrado de datos, el manejo de valores perdidos y
valores atípicos. Después de esto, nos enfocamos en tareas de ingeniería de características como transformación,
codificación de características, escalado de características y división de características. Luego exploramos varios
métodos y técnicas que podemos usar cuando se trata de ingeniería de funciones.
[236]
Procesamiento de señales y tiempo
-
Serie
El procesamiento de señales es un subdominio de la ingeniería eléctrica y las matemáticas aplicadas.
Cubre el análisis y procesamiento de variables relacionadas con el tiempo o variables que cambian
con el tiempo, como señales analógicas y digitales. Las señales analógicas son señales no
digitalizadas, como señales de radio o teléfono. Las señales digitales son señales digitalizadas,
discretas y muestreadas en el tiempo, como las señales de computadoras y dispositivos digitales. El
análisis de series de tiempo es la categoría de procesamiento de señales que se ocupa de listas de
observaciones ordenadas o secuenciales. Estos datos se pueden ordenar por hora, por día, por
semana, por mes o por año. El componente de tiempo en la serie de tiempo juega un papel muy
importante. Necesitamos extraer todas las relaciones en los datos con respecto al tiempo. Hay
muchos ejemplos relacionados con el análisis de series de tiempo, como la producción y venta de un
producto,
En este capítulo, nuestro enfoque principal es el procesamiento de señales y las operaciones de series de tiempo
utilizando NumPy, SciPy, pandas y statsmodels Bibliotecas. Este capítulo será útil para que los analistas de datos
comprendan las tendencias y patrones y pronostiquen las ventas, los precios de las acciones, la producción, la
población, las precipitaciones y la temperatura del clima.
Modelos ARMA
Generación de señales periódicas
Análisis de Fourier
Filtrado de análisis espectral
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
Este capítulo utiliza dos archivos CSV (beer_production.csv y sales.csv) con fines
de práctica.
En este capítulo, usaremos el pandas y bibliotecas Python de Scikit-learn.
[238]
Procesamiento de señales y series de tiempo Capítulo 8
Medias móviles
Las medias móviles, o medias móviles, son filtros de series de tiempo que filtran las respuestas impulsivas
promediando el conjunto o la ventana de observaciones. Utiliza conceptos de tamaño de ventana y encuentra el
promedio de los deslizamientos de ventana continuos para cada período. La media móvil simple se puede representar
de la siguiente manera:
Hay varios tipos de medias móviles disponibles, como medias móviles centradas, dobles y
ponderadas. Encontremos la media móvil usando ellaminación() , pero antes de eso, primero
cargaremos los datos y los visualizaremos:
# Rotar xlabels
plt.xticks (rotación = 60)
# Agregar leyendas
plt.legend ()
# mostrar el gráfico
plt.show ()
[239]
Procesamiento de señales y series de tiempo Capítulo 8
En el código anterior, hemos leído el conjunto de datos de ventas de 36 meses desde enero de 2017
hasta diciembre de 2019 y lo trazamos usando Matplotlib. Ahora, calcularemos la media móvil
usando la función móvil:
[240]
Procesamiento de señales y series de tiempo Capítulo 8
# Rotar xlabels
plt.xticks (rotación = 60)
# Agregar leyendas
plt.legend ()
# Mostrar la trama
plt.show ()
En el código anterior, calculamos los promedios móviles 3 y 5 usando la media móvil y mostramos el
gráfico de líneas usando Matplotlib. Ahora, veamos diferentes tipos de funciones de ventana para
promedios móviles en la siguiente sección.
[241]
Procesamiento de señales y series de tiempo Capítulo 8
Funciones de ventana
NumPy ofrece varias opciones de ventana que pueden calcular pesos en una ventana móvil como hicimos
en la sección anterior.
La función de ventana utiliza un intervalo para el análisis espectral y el diseño de filtros (para más
información de antecedentes, consulte http: / / en. wikipedia. org / wiki / función Window_). los
La ventana del vagón es una ventana rectangular con la siguiente fórmula:
w (n) = 1
[242]
Procesamiento de señales y series de tiempo Capítulo 8
En el bloque de código anterior, hemos trazado la media móvil para diferentes funciones de ventana,
como la ventana de vagón, triangular, hamming y Blackman, usando elwin_type parámetro en el
laminación() función. Ahora, aprendamos cómo encontrar una correlación entre dos series de tiempo
usando la cointegración.
[243]
Procesamiento de señales y series de tiempo Capítulo 8
Definición de cointegración
La cointegración es como una correlación que puede verse como una métrica superior para definir la relación
de dos series de tiempo. La cointegración es el comportamiento estacionario de la combinación lineal de dos
series de tiempo. De esta forma, la tendencia de la siguiente ecuación debe ser estacionaria:
y (t) - ax (t)
Piense en un hombre borracho y su perro paseando. La correlación nos dice si van en la misma dirección.
La cointegración nos dice algo sobre la distancia en el tiempo entre el hombre y su perro. Mostraremos la
cointegración utilizando series de tiempo generadas aleatoriamente y datos reales. losDickey-Fuller
aumentado (ADF) prueba pruebas para una raíz unitaria en una serie de tiempo y se puede utilizar para
determinar la estacionariedad de series de tiempo.
Puede consultar el código completo para este ejemplo en el siguiente enlace de GitHub: https: / /
github. com / PacktPublishing / Python- Análisis de datos- Tercera edición / blob / master /
Chapter08 / Ch8. ipynb.
[244]
Procesamiento de señales y series de tiempo Capítulo 8
3. Genere una onda sinusoidal y calcule la cointegración del seno consigo mismo:
En los resultados impresos, el primer valor representa la métrica ADF y el segundo valor
representa el valor p. Como puede ver, el valor p es muy alto. Los siguientes valores son el
retraso y el tamaño de la muestra. El diccionario al final proporciona los valores de distribución
t para este tamaño de muestra exacto.
4. Ahora, agregue ruido al seno para demostrar cómo influirá el ruido en la señal:
El valor p se ha reducido considerablemente. La métrica ADF aquí, -7,45, es menor que todos
los valores críticos del diccionario. Todos estos son argumentos sólidos para rechazar la
cointegración.
print ("ADF seno vs coseno con ruido", calc_adf (seno, coseno + ruido))
[245]
Procesamiento de señales y series de tiempo Capítulo 8
Del mismo modo, tenemos sólidos argumentos para rechazar la cointegración. La comprobación
de la cointegración entre el seno y las manchas solares da el siguiente resultado:
Los niveles de confianza son aproximadamente los mismos para los pares utilizados
aquí porque dependen del número de puntos de datos, que no varía mucho. El
resultado se resume en la siguiente tabla:
En la tabla anterior, se resumen los resultados para las cuatro ondas sinusoidales y se discute
su nivel de significancia con rechazo / aceptación. Pasemos ahora a otro tema importante del
capítulo, que es la descomposición STL de cualquier serie temporal.
Descomposición STL
STL representa Descomposición estacional y de tendencias usando LOESS. STL es un método de
descomposición de series de tiempo que puede descomponer una señal observada en una tendencia,
estacionalidad y residual. Puede estimar relaciones no lineales y manejar cualquier tipo de estacionalidad.
los statsmodels.tsa.seasonal subpaquete ofrece el estacional_decomponer método
para dividir una señal de entrada dada en tendencia, estacionalidad y residual.
[246]
Procesamiento de señales y series de tiempo Capítulo 8
# Mostrar la trama
plt.show ()
[247]
Procesamiento de señales y series de tiempo Capítulo 8
Autocorrelación
La autocorrelación, o correlación rezagada, es la correlación entre una serie de tiempo y su serie
rezagada. Indica la tendencia en el conjunto de datos. La fórmula de autocorrelación se puede definir de
la siguiente manera:
# Correlación cruzada
sun_correlated = np.correlate (dy, dy, mode = 'full') / dy_square resultado =
sun_correlated [int (len (sun_correlated) / 2):]
# Muestra el gráfico
plt.plot (resultado)
# Mostrar cuadrícula
plt.grid (verdadero)
[248]
Procesamiento de señales y series de tiempo Capítulo 8
# Agregar etiquetas
plt.xlabel ("Retraso")
plt.ylabel ("Autocorrelación")
# Mostrar el gráfico
plt.show ()
[249]
Procesamiento de señales y series de tiempo Capítulo 8
Modelos autorregresivos
Los modelos autorregresivos son modelos de series de tiempo que se utilizan para predecir incidentes
futuros. La siguiente fórmula muestra esto:
[250]
Procesamiento de señales y series de tiempo Capítulo 8
# imprimir retrasos y
print ("Número de retrasos:", ar_model.k_ar) print ("Coeficientes
del modelo: \ n", ar_model.params)
Número de retrasos: 15
Coeficientes del modelo:
constante 9.382322
L1.SUNACTIVIDAD 1.225684
L2.SUNACTIVIDAD - 0.512193
L3.SUNACTIVIDAD - 0.130695
L4.SUNACTIVIDAD 0.193492
L5.SUNACTIVIDAD - 0.168907
L6.SUNACTIVIDAD 0.054594
L7.SUNACTIVIDAD - 0.056725
L8.SUNACTIVIDAD 0.109404
L9.SUNACTIVIDAD 0.108993
L10.SUNACTIVIDAD -0.117063
[251]
Procesamiento de señales y series de tiempo Capítulo 8
L11.SUNACTIVIDAD 0.200454
L12.SUNACTIVIDAD -0.075111
L13.SUNACTIVIDAD -0.114437
L14.SUNACTIVIDAD 0.177516
L15.SUNACTIVIDAD -0.091978
dtipo: float64
En el código anterior, hemos leído el conjunto de datos de Sunspot y lo hemos dividido en dos partes:
conjuntos de entrenamiento y de prueba. Luego, construimos el modelo autorregresivo creando una
instancia y ajustando un modelo. Hagamos predicciones y evaluemos el rendimiento del modelo.
# hacer predicciones
start_point = len (tren)
punto_final = punto_inicio + len (prueba) -1
pred = ar_model.predict (start = start_point, end = end_point, dynamic =
False)
# Calcular errores
mae = mean_absolute_error (test.SUNACTIVITY, pred) mse =
mean_squared_error (test.SUNACTIVITY, pred) rmse = sqrt (mse)
MAE: 31.17846098350052
MSE: 1776.9463826165913
RMSE: 42.15384184883498
5. Grafiquemos la serie original y la predicha para comprender mejor los resultados del
pronóstico:
[252]
Procesamiento de señales y series de tiempo Capítulo 8
# Plotear predicciones
plt.plot (pred, color = 'red', label = 'Predicted Series')
# Agregar leyendas
plt.legend ()
# Mostrar la trama
plt.show ()
En la gráfica anterior, podemos ver la serie original y la serie predicha usando el modelo
autorregresivo. Después de generar el modelo autorregresivo, necesitamos saltar a un enfoque
más avanzado para la predicción de series de tiempo, que esMedia móvil autorregresiva (ARMA).
[253]
Procesamiento de señales y series de tiempo Capítulo 8
Modelos ARMA
El modelo ARMA combina autorregresión y medias móviles. El modelo ARMA se conoce
comúnmente como ARMA (pag,q), dónde pag es el orden de la parte autorregresiva, y qes el
orden de la media móvil:
En la fórmula anterior, al igual que en la fórmula del modelo autorregresivo, tenemos un componente constante
y uno de ruido blanco; sin embargo, también intentamos ajustar los componentes de ruido retrasados:
[254]
Procesamiento de señales y series de tiempo Capítulo 8
# hacer predicciones
start_point = len (tren)
punto_final = punto_inicio + len (prueba) -1
pred = arma_model.predict (punto_inicio, punto_final)
# Calcular errores
mae = mean_absolute_error (test.SUNACTIVITY, pred) mse =
mean_squared_error (test.SUNACTIVITY, pred) rmse = sqrt (mse)
MAE: 33.95457845540467
MSE: 2041.3857010355755
EMSE: 45.18169652675268
5. Grafiquemos la serie original y la predicha para comprender mejor los resultados del
pronóstico:
# Plotear predicciones
plt.plot (pred, color = 'red', label = 'Predicted Series')
# Agregar leyendas
plt.legend ()
# Mostrar la trama
plt.show ()
[255]
Procesamiento de señales y series de tiempo Capítulo 8
En el código anterior, hemos leído el conjunto de datos de Sunspot y lo hemos dividido en dos partes:
conjuntos de entrenamiento y de prueba. Luego, construimos el modelo ARMA creando una instancia y
ajustando un modelo. Hicimos las predicciones en el conjunto de datos de prueba y evaluamos el rendimiento
del modelo utilizando MAE, MSE y RMSE. Finalmente, vimos el diagrama de líneas para la serie original y la serie
de predicción. Pasemos a un tema más importante, que es la generación de señales periódicas.
[256]
Procesamiento de señales y series de tiempo Capítulo 8
params = leastsq (error, p0, args = (y, t)) [0] return params
[257]
Procesamiento de señales y series de tiempo Capítulo 8
La primera línea muestra los coeficientes del modelo que intentamos. Tenemos un MAE de 44, lo que
significa que, en promedio, estamos fuera de esa cantidad en cualquier dirección. También
queremos que el coeficiente de determinación sea lo más cercano posible a 1 para tener un buen
ajuste. En cambio, obtenemos un valor negativo, que no es deseable. Creemos un gráfico para
comprender los resultados en detalle.
[258]
Procesamiento de señales y series de tiempo Capítulo 8
# Agregar etiquetas
plt.xlabel ("AÑO")
plt.ylabel ("SUNACTIVIDAD")
# Agregar leyenda
plt.legend ()
# Mostrar el gráfico
plt.show ()
Del gráfico anterior, podemos concluir que el modelo no puede capturar el patrón real de la serie. Es
por eso que obtenemos un coeficiente de determinación negativo o R cuadrado. Ahora, veremos
otra técnica importante para el análisis de series de tiempo, el análisis de Fourier.
análisis de Fourier
El análisis de Fourier utiliza el concepto de serie de Fourier ideado por el matemático Joseph Fourier. La
serie de Fourier es un método matemático utilizado para representar funciones como una serie infinita
de términos de seno y coseno. Las funciones en cuestión pueden ser de valor real o complejo:
[259]
Procesamiento de señales y series de tiempo Capítulo 8
Para el análisis de Fourier, el algoritmo más competente es Transformada rápida de Fourier (FFT). FFT
descompone una señal en señales de diferentes frecuencias. Esto significa que produce un espectro de
frecuencia de una señal determinada. Las bibliotecas SciPy y NumPy proporcionan funciones para FFT.
los rfft () La función realiza FFT en datos de valor real. También podríamos haber utilizado elfft ()
función, pero da una advertencia en este conjunto de datos de Sunspot. losfftshift () La función
mueve el componente de frecuencia cero a la mitad del espectro.
# Crear subtramas
fig, axs = plt.subplots (3, figsize = (12,6), sharex = True) fig.suptitle
('Power Specturm')
axs [0] .plot (data.SUNACTIVITY.values, label = "Manchas solares") axs
[0] .plot (sine, lw = 2, label = "Sine")
axs [0] .legend () # Establecer leyendas axs [1] .plot (transformado, etiqueta =
"Manchas solares transformadas")
[260]
Procesamiento de señales y series de tiempo Capítulo 8
axs [1] .legend () # Establecer leyendas axs [2] .plot (sine_fft, lw = 2, label
= "Transformed Sine") axs [2] .legend () # Establecer leyendas
# Mostrar el gráfico
plt.show ()
En el código anterior, primero leemos el conjunto de datos de Sunspot y creamos la onda sinusoidal. Después de
eso, calculamos la FFT para la onda sinusoidal y laSUNACTIVIDAD columna. Finalmente, trazamos los tres gráficos
para la serie original y la onda sinusoidal y las manchas solares y la onda sinusoidal transformadas.
[261]
Procesamiento de señales y series de tiempo Capítulo 8
Veamos el código completo para el espectro de fase y potencia del conjunto de datos Sunspot:
# Calcular FFT
transformado = fftshift (rfft (datos.SUNACTIVIDAD.valores))
# Fase de cálculo
fase = np.angle (transformado)
3. Cree la subtrama:
# Crear subtramas
fig, axs = plt.subplots (3, figsize = (12,6), sharex = True) fig.suptitle
('Power Specturm')
axs [0] .plot (data.SUNACTIVITY.values, label = "Manchas solares") axs
[0] .legend () # Establecer leyendas
axs [1] .plot (power, label = "Power Spectrum") axs
[1] .legend () # Establecer leyendas
[262]
Procesamiento de señales y series de tiempo Capítulo 8
# Mostrar el gráfico
plt.show ()
En el código anterior, primero leemos el conjunto de datos de Sunspot y calculamos la FFT para el
SUNACTIVIDAD columna. Después de esto, calculamos la potencia y el espectro de fase para la FFT
transformada. Finalmente, trazamos las tres gráficas para la serie original y los espectros de fase y
potencia usando subparcelas.
[263]
Procesamiento de señales y series de tiempo Capítulo 8
Resumen
En este capítulo, los ejemplos de series de tiempo que usamos fueron datos de ciclos anuales de manchas
solares, datos de ventas y producción de cerveza. Aprendimos que es común intentar derivar una relación entre
un valor y otro punto de datos o una combinación de puntos de datos con un número fijo de períodos en el
pasado en la misma serie de tiempo. Aprendimos cómo los promedios móviles convierten la tendencia de
variación aleatoria en una tendencia suave usando un tamaño de ventana. Aprendimos como el
DataFrame.rolling () la función proporciona win_type parámetros de cadena para diferentes funciones de ventana.
La cointegración es similar a la correlación y es una métrica para definir la relación de dos series de tiempo.
También nos centramos en la descomposición de STL, la autocorrelación, la autorregresión, el modelo ARMA, el
análisis de Fourier y el filtrado del análisis espectral.
El próximo capítulo, Capítulo 9, Aprendizaje supervisado: análisis de regresión, se centrará en los temas
importantes del análisis de regresión y la regresión logística en Python. El capítulo comienza con
regresión lineal múltiple, multicolinealidad, variables ficticias y medidas de evaluación del modelo. En las
últimas secciones del capítulo, la atención se centrará en la regresión logística.
[264]
Sección 3: Profundización en
-
Aprendizaje automático
El principal objetivo de esta sección es profundizar en los algoritmos de aprendizaje automático y
desarrollar modelos predictivos. Esta sección se centra en los métodos de regresión, clasificación,
PCA y agrupación. Esta sección utilizará principalmente pandas y scikit-learn.
El análisis de regresión identifica cómo la variable dependiente depende de las variables independientes.
Por ejemplo, digamos que, como funcionario de educación, desea identificar el impacto de las actividades
deportivas, las clases inteligentes, la proporción maestro-alumno, las clases adicionales y la capacitación
de los maestros en los resultados de los estudiantes.Mínimo cuadrado ordinario (OLS) minimiza el error
de la suma de cuadrados (o varianza del error) para encontrar la función de mejor ajuste. Predice el
resultado más probable en las condiciones dadas. El principal objetivo de este capítulo es aprender los
fundamentos deRegresión lineal múltiple (MLR), multicolinealidad, variables ficticias, regresión y
medidas de evaluación del modelo como R-cuadrado, Error medio cuadrado (MSE), Error absoluto medio
(MAE), y Error cuadrático medio (RMSE). Otro objetivo es crear un modelo de clasificación de regresión
logística.
Regresión lineal
Comprender las variables ficticias de
multicolinealidad
Desarrollar un modelo de regresión lineal
Evaluar el desempeño del modelo de regresión
Aprendizaje supervisado: análisis de regresión Capítulo 9
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
Puede encontrar el código y los conjuntos de datos en el siguiente enlace de GitHub: https: / /
github. com / PacktPublishing / Python- Análisis de datos- Tercera edición / tree / master /
Chapter09.
Todos los bloques de código están disponibles en el ch9.ipynb expediente.
Regresión lineal
La regresión lineal es una especie de algoritmo de predicción y ajuste de curvas. Se utiliza para descubrir la
asociación lineal entre una columna dependiente (o objetivo) y una o más columnas independientes (o variables
predictoras). Esta relación es determinista, lo que significa que predice la variable dependiente con cierta
cantidad de error. En el análisis de regresión, la variable dependiente es continua y las variables independientes
de cualquier tipo son continuas o discretas. La regresión lineal se ha aplicado a varios tipos de problemas
comerciales y científicos, por ejemplo, el precio de las acciones, el precio del petróleo crudo, las ventas, el precio
de la propiedad y las predicciones de la tasa de crecimiento del PIB. En el siguiente gráfico, podemos ver cómo la
regresión lineal puede ajustar los datos en un espacio bidimensional:
[267]
Aprendizaje supervisado: análisis de regresión Capítulo 9
El objetivo principal es encontrar la línea de mejor ajuste para comprender la relación entre
variables con mínimo error. El error en la regresión es la diferencia entre los valores pronosticados y
reales. Los coeficientes de regresión se estiman mediante el método MCO. MCO intenta minimizar la
suma de cuadrados de los residuos. Veamos la ecuación del modelo de regresión:
Aquí, X es la variable independiente y y es una variable dependiente. coeficiente las X, y (la letrason
deintersecciones griega
las
pronunciada como épsilon) es un término de error que actuará como una variable aleatoria.
Los parámetros de regresión lineal se estiman mediante MCO. MCO es un método que se usa
ampliamente para estimar el intercepto y los coeficientes de regresión. Reduce la suma de
cuadrados de los residuos (o error), que es la diferencia entre lo predicho y lo real.
Después de tener una idea sobre la regresión lineal, ahora es el momento de aprender sobre MLR.
[268]
Aprendizaje supervisado: análisis de regresión Capítulo 9
Comprender la multicolinealidad
La multicolinealidad representa las muy altas intercorrelaciones o inter-asociación entre las
variables independientes (o predictoras).
La multicolinealidad tiene lugar cuando las variables independientes del análisis de regresión múltiple
están altamente asociadas entre sí. Esta asociación se debe a una alta correlación entre variables
independientes. Esta alta correlación provocará un problema en los resultados de la predicción del
modelo de regresión lineal. Es el supuesto básico del análisis de regresión lineal para evitar la
multicolinealidad para obtener mejores resultados:
Causa dificultad para estimar los coeficientes de regresión con precisión y los
coeficientes se vuelven más susceptibles a variaciones menores en el modelo.
También puede provocar un cambio en los signos y magnitudes del coeficiente.
Causa dificultad para evaluar la importancia relativa de las variables independientes.
[269]
Aprendizaje supervisado: análisis de regresión Capítulo 9
Eliminar la multicolinealidad
La multicolinealidad se puede detectar mediante lo siguiente:
Los coeficientes de correlación o matrices de correlación nos ayudarán a identificar una alta correlación
entre variables independientes. Usando el coeficiente de correlación, podemos detectar fácilmente la
multicolinealidad al verificar la magnitud del coeficiente de correlación:
# Importar pandas
importar pandas como pd
En el bloque de código anterior, leemos el bloodpress.txt datos usando el read_csv ()función. También
verificamos los registros iniciales del conjunto de datos. Este conjunto de datos tieneBP, edad, peso, BSA,
Dur, pulso, y Estrés los campos. Comprobemos la multicolinealidad en el conjunto de datos usando la
matriz de correlación:
# Matriz de correlación
[270]
Aprendizaje supervisado: análisis de regresión Capítulo 9
corr = data.corr ()
# mostrar la trama
plt.show ()
Aquí, BP (Presión arterial) es la variable dependiente o objetivo, y el resto de las columnas son variables
o características independientes. Podemos ver esoPeso y BSA (Área superficial del cuerpo) tienen una
alta correlación. Necesitamos eliminar una variable (ya seaPeso o BSA) para eliminar la multicolinealidad.
En nuestro caso, el peso es más fácil de medir en comparación con BSA, por lo que los expertos elegirán
el peso y quitarán el BSA.
[271]
Aprendizaje supervisado: análisis de regresión Capítulo 9
Variables ficticias
Las variables ficticias son variables categóricas independientes que se utilizan en el análisis de regresión.
También se conoce como variable booleana, indicadora, cualitativa, categórica y binaria. Las variables
ficticias convierten una variable categórica connorte valores distintos en norte–1 variables ficticias. Solo
toma los valores binarios 1 y 0, que son equivalentes a existencia e inexistencia.
Género
0 F
1 METRO
2 METRO
3 F
4 METRO
[272]
Aprendizaje supervisado: análisis de regresión Capítulo 9
FM
010
101
201
310
401
Podemos eliminar una columna para evitar la colinealidad usando el drop_first = Verdadero argumento y
soltar primero el norte–1 maniquíes de norte niveles categóricos eliminando el primer nivel:
# Codificación ficticia
encoded_data = pd.get_dummies (data ['Género'], drop_first = True)
METRO
00
11
21
30
41
En el bloque de código anterior, hemos creado las variables ficticias para el Género columna usando
el get_dummies () funcionar con el drop_first = Verdadero parámetro. Esto ha eliminado la primera
columna y dejaNORTE-1 columnas. Aprendamos ahora cómo implementar el modelo de regresión
lineal usando elscikit-learn Biblioteca.
[273]
Aprendizaje supervisado: análisis de regresión Capítulo 9
# Importar pandas
importar pandas como pd
[274]
Aprendizaje supervisado: análisis de regresión Capítulo 9
Después de dividir las columnas en partes variables dependientes e independientes, dividiremos los
datos en conjuntos de prueba y de tren en una proporción de 75:25 usando
train_test_split (). La relación se puede especificar mediante el test_sizeparámetro y
estado_aleatorio se utiliza como valor inicial para reproducir la misma división de datos
cada vez. Siestado_aleatorio es Ninguno, luego dividirá aleatoriamente los registros cada
vez, lo que dará diferentes medidas de rendimiento:
# Distribuya las características (X) y las etiquetas (y) en dos partes de entrenamiento
y conjuntos de prueba
X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0.25,
random_state = 0)
En el bloque de código anterior, hemos dividido los datos en dos partes (conjuntos de entrenamiento y de
prueba) en una proporción de 75:25 o 3: 1.
3. Vamos a importar el Regresión lineal modelar, crear su objeto y ajustarlo al conjunto de datos
de entrenamiento (Tren_X, tren_y). Después de ajustar el modelo, podemos predecir los
valores de los datos de prueba (X_prueba). Podemos ver la intersección y el coeficiente de la
ecuación de regresión usando el interceptar_ y coef_ atributos:
[275]
Aprendizaje supervisado: análisis de regresión Capítulo 9
Intercepción: 2.8925700511511483
Coeficientes: [0.04416235 0.19900368 0.00116268]
R-cuadrado
MSE
MAE
RMSE
R-cuadrado
R cuadrado (o coeficiente de determinación) es una medida de evaluación del modelo estadístico que evalúa la
bondad de un modelo de regresión. Ayuda a los analistas de datos a explicar el rendimiento del modelo en
comparación con el modelo base. Su valor se encuentra entre 0 y 1. Un valor cercano a 0 representa un modelo
deficiente, mientras que un valor cercano a 1 representa un ajuste perfecto. A veces, R-cuadrado da como
resultado un valor negativo. Esto significa que su modelo es peor que el modelo base promedio. Podemos
explicar R cuadrado usando la siguiente fórmula:
[276]
Aprendizaje supervisado: análisis de regresión Capítulo 9
MSE
MSE es una abreviatura de error cuadrático medio. Se explica como el cuadrado de cambio entre los
valores originales y pronosticados y el promedio entre ellos para todos los valores:
MAE
MAE es una abreviatura de error absoluto medio. Se explica como el cambio absoluto entre los
valores originales y pronosticados y el promedio entre ellos para todos los valores:
[277]
Aprendizaje supervisado: análisis de regresión Capítulo 9
RMSE
RMSE es una abreviatura de la raíz del error cuadrático medio. Se explica como la raíz cuadrada de
MSE:
# Evaluar R-cuadrado
print ("R-Cuadrado:", r2_score (y_test, predictions))
[278]
Aprendizaje supervisado: análisis de regresión Capítulo 9
En el ejemplo, hemos evaluado el modelo de regresión lineal utilizando MAE, MSE, RMSE y
R-cuadrado. Aquí, R cuadrado es 0,85, lo que indica que el modelo explica el 85% de
variabilidad de los datos.
, son un coeficiente de X y (la letra griega pronunciada como épsilon) es un término de error que
actuará como una variable aleatoria.
# importar bibliotecas
importar matplotlib.pyplot como plt
importar numpy como np
# Crea listas X e Y
X = [1,2,3,4,5,6,7,8,9,10] y =
[9,10,12,16,22,28,40,58,102,200]
[279]
Aprendizaje supervisado: análisis de regresión Capítulo 9
En el código anterior, mostramos un conjunto de datos que tiene una relación polinomial. Veamos cómo
podemos mapear esta relación en el análisis de regresión:
# importar bibliotecas
importar pandas como pd
de sklearn.preprocessing importar PolynomialFeatures de
sklearn.linear_model importar LinearRegression
[280]
Aprendizaje supervisado: análisis de regresión Capítulo 9
[281]
Aprendizaje supervisado: análisis de regresión Capítulo 9
La clasificación puede ser de dos tipos: clasificación binaria y de clases múltiples. Las variables de
destino de clasificación binaria tienen solo dos valores: 0 y 1 o sí o no. Ejemplos de clasificación
binaria son si un cliente comprará un artículo o no, si el cliente cambiará o abandonará otra marca o
no, detección de spam, predicción de enfermedades y si un solicitante de préstamo incumplirá o no.
La clasificación de clases múltiples tiene más de dos clases, por ejemplo, para categorías de artículos
de noticias, las clases pueden ser deportes, política, negocios y muchas más.
La regresión logística es uno de los métodos de clasificación, aunque su nombre termina con regresión.
Es un método de clasificación de clases binarias de uso común. Es un algoritmo básico de aprendizaje
automático para todo tipo de problemas de clasificación. Encuentra la asociación entre variables
dependientes (o objetivo) y conjuntos de variables independientes (o características). En la siguiente
sección, veremos la regresión logística en detalle.
Regresión logística
La regresión logística es un tipo de algoritmo de aprendizaje automático supervisado que se utiliza para
pronosticar un resultado binario y clasificar las observaciones. Su variable dependiente es una variable
binaria con dos clases: 0 o 1. Por ejemplo, se puede utilizar para detectar si un solicitante de préstamo
incumplirá o no. Es un tipo de regresión único en el que la variable dependiente o objetivo es binaria.
Calcula un logaritmo de la razón de posibilidades de la variable objetivo, que representa la probabilidad de
que ocurra un evento, por ejemplo, la probabilidad de que una persona padezca diabetes.
[282]
Aprendizaje supervisado: análisis de regresión Capítulo 9
La regresión logística es un tipo de regresión lineal simple donde la variable dependiente o objetivo es
categórica. Utiliza la función sigmoidea en el resultado de la predicción de la regresión lineal. También
podemos usar el algoritmo de regresión logística para múltiples clases objetivo. Para problemas de clases
múltiples, se denomina regresión logística multinomial. La regresión logística multinomial es una
modificación de la regresión logística; utiliza la función softmax en lugar de la función de activación
sigmoidea:
La función sigmoidea también se conoce como función logística o curva en forma de S. Traza valores de
entrada entre los rangos 0 y 1, lo que representa la probabilidad de que ocurra un evento. Si la curva se
mueve hacia el infinito positivo, entonces el resultado se convierte en 1 y si la curva se mueve hacia el
infinito negativo, entonces el resultado se convierte en 1. Veamos la fórmula para la función sigmoidea y
la ecuación de regresión logística:
[283]
Aprendizaje supervisado: análisis de regresión Capítulo 9
El término en el Iniciar sesión() La función se conoce como razón de probabilidades o "probabilidades". La razón de
probabilidades es la razón entre la probabilidad de que ocurra un evento y la probabilidad de que no ocurra un evento.
En el siguiente gráfico, puede ver cómo se comporta la salida de la regresión logística:
Podemos ver que la proporción cae aproximadamente alrededor de 0.5 aquí. Exploremos la regresión logística un
poco más en las próximas subsecciones.
[284]
Aprendizaje supervisado: análisis de regresión Capítulo 9
Una gran cantidad de variables independientes aumentará la cantidad de varianza explicada, lo que da como
resultado un sobreajuste del modelo. La regresión logística no puede funcionar con relaciones no lineales.
Tampoco funcionará bien con variables de características altamente correlacionadas (o variables
independientes).
[285]
Aprendizaje supervisado: análisis de regresión Capítulo 9
# Importar bibliotecas
importar pandas como pd
# leer el conjunto de datos
diabetes = pd.read_csv ("diabetes.csv")
En nuestro ejemplo anterior, estamos leyendo el conjunto de datos de diabetes de los indios Pima. Este conjunto de datos
no proporciona los nombres de las columnas, por lo que tenemos que hacerlo.
target = diabetes.label
[286]
Aprendizaje supervisado: análisis de regresión Capítulo 9
Después de cargar el conjunto de datos, necesitamos dividir el conjunto de datos en características de columna
independientes (conjunto de características) y objetivos de columna dependientes (o etiqueta). Después de esto, el
conjunto de datos se dividirá en conjuntos de entrenamiento y prueba. Ahora, tanto la columna dependiente como
la independiente se dividen en conjuntos de prueba y de entrenamiento (feature_train,
feature_test, target_train, y prueba_objetivo) utilizandotrain_test_split ().
train_test_split ()toma dependiente y
DataFrames independientes, test_size y estado_aleatorio. Aquí, test_size decidirá la relación de la
división de prueba de tren (es decir, una test_size valor de 0,3 significa que el 30% del conjunto
de pruebas y el 70% restante será el conjunto de entrenamiento), yestado_aleatorio se utiliza
como valor inicial para reproducir la misma división de datos cada vez. Siestado_aleatorio es
Ninguno, luego dividirá aleatoriamente los registros cada vez, lo que dará diferentes medidas
de rendimiento:
# instanciar el modelo
logreg = LogisticRegression (solver = 'lbfgs')
Ahora, estamos listos para crear un modelo de regresión logística. Primero, importaremos elRegresión
logística class y crear su objeto o modelo. Este modelo encajará en el conjunto de datos de
entrenamiento (X_train y y_train). Después del entrenamiento, el modelo está listo para hacer
predicciones usando el predecir() método. scikit-learn'smétrica La clase ofrece varios métodos para la
evaluación del desempeño, como la precisión. lospuntuación_de_precisión () los métodos tomarán
etiquetas reales (y_prueba) y etiquetas predichas (y_pred).
[287]
Aprendizaje supervisado: análisis de regresión Capítulo 9
Resumen
En este capítulo, descubrimos algoritmos de análisis de regresión. Esto lo beneficiará al adquirir una
habilidad importante para el análisis de datos predictivos. Ha adquirido una comprensión de conceptos
tales como análisis de regresión, multicolinealidad, variables ficticias, medidas de evaluación de
regresión y regresión logística. El capítulo comenzó con regresiones lineales y múltiples simples.
Después de regresiones lineales y múltiples simples, nuestro enfoque principal fue la multicolinealidad,
el desarrollo de modelos y las medidas de evaluación de modelos. En secciones posteriores, nos
enfocamos en la regresión logística, características, tipos de regresión y su implementación.
[288]
Aprendizaje supervisado -
--
Técnicas de clasificación
La mayoría de los problemas de aprendizaje automático del mundo real utilizan el aprendizaje supervisado. En el
aprendizaje supervisado, el modelo aprenderá de un conjunto de datos de entrenamiento etiquetado. Una etiqueta es
una variable objetivo que queremos predecir. Es una información adicional que ayuda a tomar decisiones o predicciones,
por ejemplo, qué solicitud de préstamo es segura o arriesgada, si un paciente padece una enfermedad o no, los precios
de la vivienda y las puntuaciones de elegibilidad crediticia. Estas etiquetas actúan como un supervisor o maestro para el
proceso de aprendizaje. Los algoritmos de aprendizaje supervisado pueden ser de dos tipos: clasificación o regresión. Un
problema de clasificación tiene una variable objetivo categórica, como el estado de una solicitud de préstamo como
seguro o riesgoso, si un paciente sufre de una "enfermedad" o "no enfermedad", o si un cliente es "potencial" o "no
potencial".
Este capítulo se centra en el aprendizaje automático supervisado y cubre específicamente las técnicas de
clasificación. Este capítulo utilizará principalmente scikit-learn. Se profundizará en técnicas básicas de
clasificación, como el ingenuo Bayes,Máquinas de vectores de soporte (SVM), K-vecino más cercano (KNN) y
árboles de decisión. Además, se centra en las estrategias de división de pruebas y en los métodos y parámetros
de evaluación de modelos.
Clasificación
Clasificación de Naive Bayes
Clasificación del árbol de
decisiones Clasificación KNN
Clasificación SVM
Dividir conjuntos de entrenamiento y prueba
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
Puede encontrar el código y los conjuntos de datos en el siguiente enlace de GitHub: https: / /
github. com / PacktPublishing / Python- Análisis de datos- Tercera edición / tree / master /
Chapter10.
Todos los bloques de código están disponibles en el ch10.ipynb expediente. Este
capítulo utiliza solo un archivo CSV (diabetes.csv) con fines de práctica. En este
capítulo, usaremos elpandas y scikit-learn Bibliotecas de Python.
Clasificación
Como analista de datos de atención médica, su trabajo consiste en identificar a los pacientes o
enfermos que tienen una mayor probabilidad de padecer una enfermedad en particular, por
ejemplo, diabetes o cáncer. Estas predicciones le ayudarán a tratar a los pacientes antes de que
ocurra la enfermedad. De manera similar, un gerente de ventas y marketing desea predecir los
clientes potenciales que tienen más posibilidades de comprar un producto. Este es el proceso de
categorizar a los clientes en dos o más categorías conocidas como clasificación. El modelo de
clasificación predice la etiqueta de clase categórica, como si el cliente es potencial o no. En el proceso
de clasificación, el modelo se entrena con los datos disponibles, hace predicciones y evalúa el
rendimiento del modelo. Los modelos desarrollados se denominan clasificadores. Esto significa que
tiene tres etapas: entrenamiento, predicción y evaluación.Área bajo curva (AUC). La clasificación
tiene una variedad de aplicaciones en varios dominios, como banca, finanzas, servicios al ciudadano,
atención médica, análisis de texto, identificación de imágenes y detección de objetos.
Como analista, primero debe definir el problema que desea resolver mediante la clasificación y luego identificar
las características potenciales que predicen las etiquetas con precisión. Las características son las columnas o
atributos responsables de la predicción. En los problemas de predicción de la diabetes, los analistas de salud
recopilarán información del paciente, como la edad, la rutina de ejercicios, los hábitos de comer comida
chatarra, el consumo de alcohol y las características o características del hábito de fumar. Estas características se
utilizarán para predecir si el paciente sufrirá diabetes. Puede ver en el siguiente diagrama cómo se pueden
clasificar los datos en dos clases usando una línea:
[290]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Los procesos de aprendizaje automático y minería de datos tienen varios pasos: recopilación de datos,
preprocesamiento de datos, división de prueba de tren, generación de modelos y evaluación. Hemos visto
modelos de análisis de datos como KDD, SEMMA y CRISP-DM. En clasificación, solo nos enfocamos en la división
de prueba de tren, generación de modelo y evaluación.
El modelo de clasificación tiene tres etapas: división de prueba de tren, generación de modelo y evaluación de modelo.
En la etapa de división de prueba de tren, los datos se dividen en dos partes: conjuntos de entrenamiento y prueba. En
el entrenamiento, el conjunto de entrenamiento se usa para generar el modelo, y las pruebas se usan en la etapa de
evaluación del modelo para evaluar el desempeño del modelo usando métricas de evaluación como exactitud, error,
precisión y recuperación. Puedes ver el proceso de clasificación en el siguiente diagrama:
En el diagrama anterior, se presentan los pasos del proceso de clasificación. Ahora que entendemos el
proceso de clasificación, es hora de aprender las técnicas de clasificación. En la siguiente sección, nos
centraremos en el algoritmo de clasificación de Bayes ingenuo.
[291]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
El clasificador ingenuo de Bayes se llama ingenuo porque asume la independencia condicional de clase. La
independencia condicional de clase significa que cada columna de características es independiente de las demás
características restantes. Por ejemplo, en el caso de determinar si una persona tiene diabetes o no, depende de
sus hábitos alimenticios, su rutina de ejercicios, la naturaleza de su profesión y su estilo de vida. Incluso si las
características están correlacionadas o dependen unas de otras, Bayes ingenuo seguirá asumiendo que son
independientes. Entendamos la fórmula del teorema de Bayes:
Aquí, y es el objetivo y X es el conjunto de características. p (y) y p (X) son las probabilidades previas
independientemente de la evidencia. Esto significa la probabilidad de que ocurran eventos antes de que se vea
la evidencia.p (y | X)es la probabilidad posterior del evento X después de que se ve la evidencia. Es la
probabilidad dey evidencia dada X. p (X | y) es la probabilidad posterior del evento y después de que se ve la
evidencia. Es la probabilidad deX evidencia dada y. Tomemos un ejemplo de la ecuación anterior:
Aquí, estamos encontrando la probabilidad de que un paciente sufra de diabetes según su frecuencia
de tabaquismo utilizando el teorema de Bayes.
Veamos el funcionamiento del ingenuo algoritmo de clasificación de Bayes. Asume ese conjunto de datosD tieneX
características y etiqueta y. Las características pueden ser n-dimensionales,X=X1, X2, X3 ... Xn. Etiquetay puede tener
metro clases C1, C2, C3 ...Cm. Funcionará de la siguiente manera:
[292]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
7. Encuentre la clase con la probabilidad máxima para el conjunto de características de entrada dado. Esta
clase será nuestra predicción final.
1. Cargue el conjunto de datos de diabetes de los indios Pima (https: / / github. com /
PacktPublishing / Python- Análisis de datos- Tercera edición / blob / master /
Capítulo 09 / diabetes. Csv) usando las siguientes líneas de código:
# Importar bibliotecas
importar pandas como pd
# leer el conjunto de datos
diabetes = pd.read_csv ("diabetes.csv")
[293]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Por lo tanto, hemos importado pandas y leer el conjunto de datos. En el ejemplo anterior, estamos
leyendo el conjunto de datos de diabetes de los indios Pima.
[294]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Precisión: 0,7748917748917749
Precisión: 0,7391304347826086
Recuperación: 0,6
Puntuación F1: 0,6623376623376623
scikit-learn's métrica La clase ofrece varios métodos para la evaluación del desempeño, por ejemplo,
exactitud, precisión, recuperación y métricas de puntuación F1. Estos métodos tomarán etiquetas de
destino reales (prueba_objetivo) y etiquetas predichas (predicciones). Entenderemos estas métricas en
detalle en el Evaluación del desempeño del modelo de clasificación sección.
[295]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Naive Bayes es un método de predicción simple, rápido, preciso y fácil de entender. Tiene un costo de cálculo
más bajo y puede funcionar con grandes conjuntos de datos. Naive Bayes también se puede emplear en
problemas de clasificación de clases múltiples. El clasificador ingenuo de Bayes funciona mejor en comparación
con la regresión logística cuando los datos tienen un supuesto de independencia de clase.
El ingenuo Bayes sufre de la problema de frecuencia cero. Frecuencia cero significa que si falta alguna categoría
en la función, tendrá un recuento de frecuencia cero. Este problema se resuelve mediante la corrección
laplaciana. La corrección laplaciana (o transformación de Laplace) es un tipo de técnica de suavizado que
agregará un registro para cada clase de modo que el recuento de frecuencia de la clase faltante se convierta en 1,
por lo que las probabilidades del teorema de Bayes no se verán afectadas. Otro problema con el ingenuo Bayes
es su suposición de independencia condicional de clase, ya que es prácticamente imposible que todos los
predictores sean completamente independientes. En esta sección, hemos aprendido acerca de la clasificación
ingenua de Bayes. Ahora es el momento de aprender sobre el algoritmo de clasificación del árbol de decisiones.
El árbol de decisiones tiene tres componentes básicos: el nodo interno, la rama y los nodos hoja.
Aquí, cada nodo terminal representa una característica, el enlace representa la regla de decisión o la
regla de división y la hoja proporciona el resultado de la predicción. El primer nodo inicial o maestro
del árbol es el nodo raíz. Divide los datos en función de características o valores de atributos. Aquí,
dividimos los datos y nuevamente dividimos los datos restantes de forma recursiva hasta que todos
los elementos se refieren a la misma clase o no quedan más columnas. Los árboles de decisión se
pueden emplear en ambos tipos de problemas: clasificación y regresión. Hay muchos algoritmos de
árbol de decisión disponibles, por ejemplo, CART, ID3, C4.5 y CHAID. Pero aquí, nos centramos
principalmente en CART e ID3 porque en scikit-learn, estos son los dos que están disponibles. Dejar'
[296]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
CARRO representa Árbol de clasificación y regresión. CART utiliza el índice de Gini para seleccionar la
mejor columna. El índice de Gini es la diferencia entre la suma de las probabilidades cuadradas de cada
clase de 1. La característica o columna con el valor mínimo del índice de Gini se selecciona como
característica de división o partición. El valor del índice de Gini se encuentra en el rango de 0 y 1. Si el valor
del índice de Gini es 0, indica que todos los elementos pertenecen a una clase, y si el valor del índice de
Gini es exactamente 1, indica que todos los elementos son distribuidos aleatoriamente. Un valor de 0,5 del
índice de Gini indica la distribución equitativa de elementos en algunas clases:
ID3 representa Dicotomizador iterativo 3. Utiliza la ganancia de información o la entropía como medida
de selección de atributos. La entropía fue inventada por Shannon y mide la cantidad de impureza o
aleatoriedad en un conjunto de datos. La ganancia de información mide las variaciones entre la entropía
antes de la partición y la entropía media después de la partición del conjunto de datos para una columna
específica. La característica o atributo con el mayor valor de ganancia de información se seleccionará
como característica o atributo de división. Si la entropía es 0, indica que existe una sola clase, y si la
entropía es 1, indica que los elementos están distribuidos por igual:
[297]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
El árbol de decisiones es muy intuitivo y fácil de entender, interpretar y explicar a las partes interesadas. No es
necesario normalizar funciones y algoritmos sin distribución. Los árboles de decisión también se utilizan para
predecir los valores perdidos. Tienen la capacidad de capturar patrones no lineales. Los árboles de decisión
pueden sobreajustarse y son sensibles a datos ruidosos. Los árboles de decisión están sesgados con datos
desequilibrados, por lo que antes de aplicar árboles de decisión, debemos equilibrar el conjunto de datos. Los
árboles de decisión son más costosos en términos de tiempo y complejidad.
Trabajemos en un árbol de decisiones usando scikit-learn y realicemos un conjunto de datos de predicción. Después de esto,
estaremos listos para la construcción del modelo:
2. Después de esto, necesitamos dividir el conjunto de datos en conjuntos de datos de entrenamiento y prueba
similares a lo que realizamos en la sección anterior.
[298]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Precisión: 0,7229437229437229
Precisión: 0,6438356164383562
Recordatorio: 0,5529411764705883
Puntuación F1: 0,5949367088607594
En el ejemplo anterior, el rendimiento del modelo se evalúa mediante exactitud, precisión, recuperación y
puntuación F1.
Después de obtener una comprensión completa de los árboles de decisión, pasemos a la clasificación KNN.
Clasificación KNN
KNN es un algoritmo de clasificación simple, fácil de comprender y de implementar. También se puede
utilizar para problemas de regresión. KNN se puede emplear en muchos casos de uso, como
recomendaciones de artículos y problemas de clasificación. Específicamente, puede sugerir películas en
Netflix, artículos en Medium, candidatos en naukari.com, productos en eBay y videos en YouTube. En
clasificación, se puede utilizar para clasificar instancias como, por ejemplo, institutos bancarios que
pueden clasificar el préstamo de candidatos riesgosos, o científicos políticos pueden clasificar votantes
potenciales.
KNN tiene tres propiedades básicas, que son aprendizaje no paramétrico, aprendizaje perezoso y aprendizaje
basado en instancias. No paramétrico significa que el algoritmo no tiene distribución y no se necesitan
parámetros como la media y la desviación estándar. Aprendiz perezoso significa que KNN no entrena el modelo;
es decir, el modelo se entrena en la fase de prueba. Esto hace que el entrenamiento sea más rápido pero las
pruebas más lentas. También consume más tiempo y memoria. El aprendizaje basado en instancias significa que
el resultado previsto se basa en la similitud con sus vecinos más cercanos. No crea ecuaciones abstractas o reglas
de predicción; en su lugar, almacena todos los datos y consulta cada registro.
[299]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
El algoritmo de clasificación KNN encuentra el k instancias más similares del conjunto de datos de
entrenamiento y la mayoría decide la etiqueta predicha de las características de entrada dadas. El
clasificador KNN realizará los siguientes pasos para hacer predicciones:
1. Calcule la distancia para una observación de entrada con todas las observaciones en el conjunto de datos de
entrenamiento.
2. Encuentra el K vecinos más cercanos superiores ordenando la distancia con todas las instancias en orden
ascendente.
3. Realizar votaciones sobre el K vecinos más cercanos y predecir la etiqueta con la
mayoría de votos.
Trabajemos en un clasificador KNN usando scikit-learn y realicemos una predicción en un conjunto de datos:
Después de esto, debemos dividir el conjunto de datos en dos conjuntos, un conjunto de entrenamiento y
otro de prueba, como hicimos en el Clasificación ingenua de Bayes sección.
[300]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Precisión: 0,7532467532467533
Precisión: 0,7058823529411765
Recuperación: 0,5647058823529412
Puntuación F1: 0,6274509803921569
[301]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
En el ejemplo anterior, el rendimiento del modelo se evalúa mediante exactitud, precisión, recuperación y
puntuación F1.
Clasificación SVM
Los SVM son los algoritmos de aprendizaje automático más preferidos y favoritos por muchos científicos de
datos debido a su precisión con menos potencia de cálculo. Se emplean tanto para problemas de regresión como
de clasificación. También ofrecen un truco del kernel para modelar relaciones no lineales. SVM tiene una
variedad de casos de uso, como detección de intrusiones, clasificación de texto, detección de rostros y
reconocimiento de escritura a mano.
SVM es un modelo discriminativo que genera hiperplanos óptimos con un gran margen en el
espacio n-dimensional para separar puntos de datos. La idea básica es descubrir elHiperplano
marginal máximo (MMH) que separa perfectamente los datos en clases determinadas. El margen
máximo significa la distancia máxima entre los puntos de datos de ambas clases.
Terminología
Ahora exploraremos parte de la terminología que entra en la clasificación de SVM:
Hiperplano: Hyperplane es un límite de decisión que se utiliza para distinguir entre dos clases. La
dimensionalidad del hiperplano se decide por el número de características. También se conoce
como plano de decisión.
Vectores de apoyo: Los vectores de soporte son los puntos más cercanos al
hiperplano y ayudan en la orientación del hiperplano maximizando el margen.
Margen: El margen es la brecha máxima entre los puntos más cercanos. Cuanto mayor sea
el margen, mejor se considerará la clasificación. El margen se puede calcular por la distancia
perpendicular desde la línea del vector de soporte.
El objetivo principal de una SVM es elegir el hiperplano con el límite más grande posible entre
los vectores de soporte. El SVM encuentra el MMH en las siguientes dos etapas:
1. Cree hiperplanos que separen los puntos de datos de la mejor manera posible.
2. Seleccione el hiperplano con el hiperplano de margen máximo:
[302]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
El algoritmo SVM es un clasificador más rápido y preciso en comparación con Bayes ingenuo. Funciona
mejor con un mayor margen de separación. SVM no es favorable para grandes conjuntos de datos. Su
rendimiento también depende del tipo de kernel utilizado. Funciona mal con clases superpuestas.
Trabajemos en clasificadores de vectores de soporte usando scikit-learn y realizar un conjunto de datos de predicción.
Después de esto, dividiremos el conjunto de datos en dos conjuntos de entrenamiento y pruebas como hicimos en el
Clasificación ingenua de Bayes sección. Después de esto, estamos listos con la construcción del modelo:
Después de esto, necesitamos dividir el conjunto de datos en dos conjuntos, un conjunto de entrenamiento y
prueba, como hicimos en el clasificación ingenua de Bayes sección.
[303]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Precisión: 0,7835497835497836
Precisión: 0,7868852459016393
Recuperación: 0,5647058823529412
Puntuación F1: 0,6575342465753424
En el ejemplo anterior, el rendimiento del modelo se evaluará mediante métricas como exactitud, precisión,
recuperación y puntuación F1. Después de comprender todos estos clasificadores, es hora de ver las estrategias
de división del conjunto de entrenamiento y prueba.
[304]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Método de espera
Método Bootstrap de
validación cruzada de K-fold
Holdout
En este método, el conjunto de datos se divide aleatoriamente en dos partes: un conjunto de entrenamiento y
prueba. Generalmente, esta relación es 2: 1, lo que significa 2/3 para entrenamiento y 1/3 para pruebas. También
podemos dividirlo en diferentes proporciones, como 6: 4, 7: 3 y 8: 2:
En el ejemplo anterior, test_size = 0.3 representa el 30% para el conjunto de prueba y el 70% para el conjunto de
entrenamiento. train_test_split () divide el conjunto de datos en 7: 3.
[305]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Método Bootstrap
Bootstrap es una técnica de remuestreo. Realiza un muestreo de forma iterativa a partir del conjunto de datos
con reemplazo. El muestreo con reemplazo hará selecciones aleatorias. Requiere el tamaño de la muestra y el
número de iteraciones. En cada iteración, selecciona los registros de manera uniforme. Cada registro tiene las
mismas posibilidades de ser seleccionado nuevamente. Las muestras que no se seleccionan se conocen como
muestras "fuera de bolsa". Entendamos el bootstrap usando el siguiente diagrama:
[306]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
En el diagrama anterior, podemos ver que cada elemento tiene la misma posibilidad de selección en cada
muestra de arranque. Pasemos a otro tema importante de la clasificación, que es la evaluación del
modelo de clasificación. El siguiente tema nos ayuda a evaluar el desempeño del modelo de clasificación.
scikit-learn ofrece varias métricas, como una matriz de confusión, exactitud, precisión, recuperación y
puntuación F1, para evaluar el rendimiento de un modelo.
Matriz de confusión
Una matriz de confusión es un enfoque que proporciona una breve declaración de los resultados de la
predicción en un problema de clasificación binario y de clases múltiples. Supongamos que tenemos que
averiguar si una persona tiene diabetes o no. El concepto detrás de la matriz de confusión es encontrar
el número de pronósticos correctos y erróneos, que se resumen y separan en cada clase. Aclara toda la
confusión relacionada con el desempeño de nuestro modelo de clasificación. Esta matriz de 2x2 no solo
muestra el error que está cometiendo nuestro clasificador, sino que también representa qué tipo de
errores se están cometiendo. Se utiliza una matriz de confusión para hacer un análisis completo de los
datos estadísticos más rápido y también hacer que los resultados sean más legibles y comprensibles a
través de una visualización clara de los datos. Contiene dos filas y columnas, como se muestra en la
siguiente lista. Dejar'
Verdadero Positivo (TP): Esto representa los casos que se pronostican como sí y en
realidad, los casos son Sí; por ejemplo, los hemos pronosticado como casos fraudulentos
y en realidad son fraudulentos.
Verdadero negativo (Tennesse): Esto representa los casos que se pronostican como No y en
realidad, los casos son No; por ejemplo, los hemos pronosticado como casos no fraudulentos
y, en realidad, no son fraudulentos.
[307]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Falso positivo (FP): Esto representa los casos que se pronostican como sí y en realidad, los
casos son No; por ejemplo, los hemos pronosticado como casos fraudulentos y en realidad no
son fraudulentos. Este tipo de clase de incidente representa un error de Tipo I.
Falso negativo (FN): Esto representa los casos que se pronostican como No y en realidad, los
casos son No; por ejemplo, los hemos pronosticado como casos no fraudulentos y, en
realidad, son fraudulentos. Este tipo de clase de incidente representa un error de Tipo II.
En el ejemplo anterior, hemos tomado dos clases de fraude: sí y No. sí indica actividad fraudulenta y
No indica actividad no fraudulenta. El número total de registros previstos es825, lo que significa que
se probaron 825 transacciones. En todos estos 825 casos, el modelo o clasificador pronosticó 550
vecessí y 275 veces No. En realidad, los casos fraudulentos reales son 525 y los casos no
fraudulentos son 300.
[308]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
# Importar bibliotecas
importar pandas como pd
target = diabetes.label
# instanciar el modelo
logreg = LogisticRegression (solver = 'lbfgs')
[309]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
En el ejemplo anterior, hemos cargado los datos y los hemos dividido en dos partes: conjuntos de
entrenamiento y prueba. Después de esto, realizamos el entrenamiento del modelo usando regresión logística
como hicimos en el capítulo anterior. Aquí, para trazar la matriz de confusión, hemos utilizado la
plot_confusion_matrix () método con el objeto de modelo, el conjunto de características de prueba, el conjunto
de etiquetas de prueba y valores_formato parámetros.
Precisión
Ahora, encontraremos la precisión del modelo calculada a partir de la matriz de confusión. Nos dice qué
tan preciso es nuestro modelo predictivo:
[310]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Precisión
Cuando el modelo predijo Sí, ¿con qué frecuencia fue correcto? Este es el porcentaje de casos positivos del total
de casos previstos en el conjunto de datos. En términos simples, podemos entender la precisión como "Hasta
qué nivel nuestro modelo es correcto cuando dice que es correcto":
Recordar
Cuando es en realidad Sí, con qué frecuencia predijo el modelo ¿Sí? Esto también se conoce como sensibilidad.
Este es el porcentaje de casos positivos de todos los casos reales totales presentes en el conjunto de datos:
Medida F
La medida F se considera una de las mejores formas de evaluar el modelo. En muchas áreas de la ciencia de
datos, el rendimiento del modelo de competencia se evalúa mediante la medida F. Es un medio armónico de
precisión y recuerdo. Cuanto mayor sea el valor de la puntuación F1, mejor se considerará el modelo. La
puntuación F1 proporciona el mismo peso que la precisión y la recuperación, lo que significa que indica un
equilibrio entre ambos:
[311]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
En las secciones anteriores, hemos visto algoritmos de clasificación como Bayes ingenuo, árboles de
decisión, KNN y SVM. Hemos evaluado el rendimiento del modelo utilizando scikitlearn's
puntuación_de_precisión () para la precisión del modelo, precisión_score () para la precisión del modelo,
recall_score () para recuperar el modelo, y f1_score () para el modelo F1-score.
También podemos imprimir el informe de clasificación para profundizar en los detalles y comprender el
modelo de clasificación. Creemos el informe de confusión:
En el código anterior, hemos impreso el informe de la matriz de confusión utilizando elconfusión_report () método con
etiquetas de conjunto de prueba, conjunto de predicción o etiquetas predichas y parámetros de lista de valores
objetivo.
[312]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
[313]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
En el ejemplo anterior, hemos dibujado la gráfica ROC plot_roc_curve () método con el objeto de modelo, el conjunto de
características de prueba y los parámetros del conjunto de etiquetas de prueba.
En la curva ROC, el AUC es una medida de divisibilidad. Nos informa sobre la capacidad de
distinción de clases del modelo. Cuanto mayor sea el valor AUC, mejor será el modelo para
distinguir entre "fraude" y "no fraude". Para un clasificador ideal, el AUC es igual a 1:
scikit-learn's métrica clase ofrece una medida de evaluación del desempeño AUC.roc_auc_score ()
los métodos tomarán etiquetas reales (y_prueba) y probabilidad predicha
(y_pred_prob).
[314]
Aprendizaje supervisado: técnicas de clasificación Capítulo 10
Resumen
En este capítulo, descubrimos la clasificación, sus técnicas, la estrategia de división del tren y la prueba y las
medidas de evaluación del desempeño. Esto lo beneficiará al adquirir una habilidad importante para el análisis de
datos predictivos. Ha visto cómo desarrollar clasificadores lineales y no lineales para análisis predictivo usando
scikit-learn. En los temas anteriores del capítulo, comprendió los conceptos básicos de la clasificación y los
algoritmos de aprendizaje automático, como la clasificación ingenua de Bayes, la clasificación del árbol de
decisiones, KNN y SVM. En secciones posteriores, vio enfoques de división de datos y medidas de evaluación del
rendimiento del modelo, como puntaje de precisión, puntaje de precisión, puntaje de recuperación, puntaje F1,
curva ROC y puntaje AUC.
El próximo capítulo, Capítulo 11, Aprendizaje no supervisado: PCA y agrupación en clústeres, se concentrará en los
temas importantes de las técnicas de aprendizaje automático sin supervisión y las técnicas de reducción de
dimensionalidad en Python. El capítulo comienza con la reducción de dimensiones y el análisis de componentes
principales. En las últimas secciones del capítulo, la atención se centrará en los métodos de agrupación en
clústeres como k-medias, jerárquico, DBSCAN y agrupamiento espectral.
[315]
Aprendizaje no supervisado - PCA
--
y agrupación
El aprendizaje no supervisado es una de las ramas más importantes del aprendizaje automático. Nos permite hacer
predicciones cuando no tenemos etiquetas de destino. En el aprendizaje no supervisado, el modelo aprende solo a
través de características porque el conjunto de datos no tiene una columna de etiqueta de destino. La mayoría de los
problemas de aprendizaje automático comienzan con algo que ayuda a automatizar el proceso. Por ejemplo, cuando
desee desarrollar un modelo de predicción para detectar pacientes con diabetes, necesita un conjunto de etiquetas de
destino para cada paciente en su conjunto de datos. En las etapas iniciales, organizar las etiquetas de destino para
cualquier problema de aprendizaje automático no es una tarea fácil, porque requiere cambiar el proceso comercial para
obtener las etiquetas, ya sea mediante el etiquetado interno manual o la recopilación de datos nuevamente con
etiquetas.
En este capítulo, nuestro enfoque está en aprender sobre técnicas de aprendizaje no supervisadas que pueden manejar
situaciones en las que las etiquetas de destino no están disponibles. Cubriremos especialmente las técnicas de reducción
de dimensionalidad y las técnicas de agrupamiento. La reducción de dimensionalidad se utilizará cuando tengamos una
gran cantidad de características y queremos reducir esa cantidad. Esto reducirá la complejidad del modelo y el costo de
capacitación porque significa que podemos lograr los resultados que queremos con solo algunas características.
Las técnicas de agrupación encuentran grupos en los datos en función de la similitud. Estos grupos representan
esencialmenteclasificación no supervisada. En la agrupación, las clases o etiquetas para las observaciones de
características se encuentran sin supervisión. La agrupación en clústeres es útil para diversas operaciones comerciales,
como la búsqueda cognitiva, las recomendaciones, la segmentación y la agrupación de documentos.
en clústeres DBSCAN
Agrupación espectral
Evaluación del rendimiento de la agrupación en clústeres
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
Puede encontrar el código y los conjuntos de datos en el siguiente enlace de GitHub: https: / /
github. com / PacktPublishing / Python- Análisis de datos- Tercera edición / tree / master /
Chapter11.
Todos los bloques de código están disponibles en el ch11.ipynb expediente. Este
capítulo utiliza solo un archivo CSV (diabetes.csv) con fines de práctica. En este capítulo,
usaremos las bibliotecas de Python pandas y scikit-learn.
El término grupo significa un grupo de elementos similares que están estrechamente relacionados entre sí. La
agrupación en clústeres es un enfoque para generar unidades o grupos de elementos que son similares entre sí. Esta
similitud se calcula en función de ciertas características o características de los artículos. Podemos decir que un clúster
es un conjunto de puntos de datos que son similares a otros en su clúster y diferentes a los puntos de datos de otros
clústeres. La agrupación en clústeres tiene numerosas aplicaciones, como la búsqueda de documentos, inteligencia
empresarial, seguridad de la información y
sistemas de recomendación:
[317]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
En el diagrama anterior, podemos ver cómo la agrupación coloca los registros de datos u observaciones en unos
pocos grupos, y la reducción de la dimensionalidad reduce la cantidad de características o atributos. Veamos
cada uno de estos temas en detalle en las próximas secciones.
La reducción de la dimensionalidad nos ayuda a lidiar con la maldición de la dimensionalidad. Puede transformar
datos de forma lineal y no lineal. Las técnicas para las transformaciones lineales incluyen PCA, análisis
discriminante lineal y análisis factorial. Las transformaciones no lineales incluyen técnicas como t-SNE, mapas
propios de Hesse, incrustación espectral y mapeo de características isométricas. La reducción de dimensionalidad
ofrece los siguientes beneficios:
[318]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
En la siguiente sección, nos centraremos en una de las técnicas de reducción de dimensiones importantes y
populares, PCA.
PCA
En el aprendizaje automático, se considera que tener una gran cantidad de datos significa tener un modelo de
buena calidad para la predicción, pero un gran conjunto de datos también plantea el desafío de una mayor
dimensionalidad (o la maldición de la dimensionalidad). Provoca un aumento de la complejidad de los modelos
de predicción debido a la gran cantidad de atributos. PCA es el método de reducción de dimensionalidad más
utilizado y nos ayuda a identificar patrones y correlaciones en el conjunto de datos original para transformarlo
en un conjunto de datos de menor dimensión sin pérdida de información.
Los componentes principales son una suma ponderada de todos los atributos. Aquí, los
son los
atributos del conjunto de datos original y son los pesos de los atributos.
Pongamos un ejemplo. Consideremos las calles de una ciudad determinada como atributos y
digamos que desea visitar esta ciudad. Ahora la pregunta es, ¿cuántas calles visitarás? Obviamente,
querrás visitar las calles principales o populares de la ciudad, que digamos que son 10 de las 50
calles disponibles. Estas 10 calles te darán la mejor comprensión de esa ciudad. Estas calles son
entonces componentes principales, ya que explican bastante la variación en los datos (las calles de la
ciudad).
[319]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Realización de PCA
Realicemos PCA desde cero en Python:
# Importar numpy
importar numpy como np
# Importar módulo de álgebra lineal
de scipy import linalg as la
# Crear conjunto de datos
datos = np.array ([[7., 4., 3.], [4., 1., 8.],
[320]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Aquí, hemos calculado una matriz de componentes principales desde cero. Primero, centramos los datos y
calculamos la matriz de covarianza. Después de calcular la matriz de covarianza, calculamos los
autovalores y autovectores. Finalmente, elegimos dos componentes principales (el número de
componentes debe ser igual al número de valores propios mayor que 1) y multiplicamos los datos
originales por los vectores propios clasificados y seleccionados. También podemos realizar PCA usando la
biblioteca scikit-learn.
[321]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
componente_principal_1 componente_principal_2
0 2,151423 -0,173119
1-3.804183 -2.887499
2 -0,153213 -0,986886
3 4.706518 1.301536
4 -1.293758 2.279126
5 -4,099313 0,143581
6 1.625821 -2.232083
7 -2.114490 3.251243
8 0,234817 0,373040
9 2.746377 -1.068940
Todo se trataba de PCA. Ahora es el momento de aprender sobre otro concepto de aprendizaje sin supervisión,
la agrupación.
[322]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Agrupación
Agrupar significa agrupar elementos que son similares entre sí. Agrupar productos similares, agrupar
artículos o documentos similares y agrupar clientes similares para la segmentación del mercado son
ejemplos de agrupación. El principio básico de la agrupación en clústeres es minimizar la distancia entre
grupos y maximizar la distancia entre grupos. La distancia intra-grupo es la distancia entre elementos de
datos dentro de un grupo y la distancia entre grupos es la distancia entre diferentes grupos. Los puntos
de datos no están etiquetados, por lo que la agrupación es una especie de problema sin supervisión. Hay
varios métodos para agrupar y cada método utiliza una forma diferente de agrupar los puntos de datos. El
siguiente diagrama muestra cómo se agrupan las observaciones de datos mediante la agrupación en
clústeres:
Como estamos combinando puntos de datos similares, la pregunta que surge aquí es cómo encontrar la
similitud entre dos puntos de datos para poder agrupar objetos de datos similares en el mismo grupo.
Para medir la similitud o disimilitud entre los puntos de datos, podemos usar medidas de distancia como
la distancia euclidiana, de Manhattan y de Minkowski:
[323]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Ahora sabemos qué es la agrupación en clústeres, pero la pregunta más importante es, ¿cuántos
grupos se deben considerar al agrupar los datos? Ese es el mayor desafío para la mayoría de los
algoritmos de agrupamiento. Hay muchas formas de decidir el número de clústeres. Analicemos
esos métodos en la siguiente sección.
[324]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Aquí está el centroide del clúster y los puntos de datos en cada clúster:
Como puede ver, en k = 3, el gráfico comienza a aplanarse significativamente, por lo que elegiríamos 3 como
el número de grupos.
[325]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
# importar pandas
importar pandas como pd
# importar matplotlib
importar matplotlib.pyplot como plt
# importar K-medias
de sklearn.cluster importar KMeans
# Crear un DataFrame
data = pd.DataFrame ({"X": [12,15,18,10,8,9,12,20], "Y":
[6,16,17,8,7,6,9,18] })
wcss_list = []
# Mostrar gráfico
plt.show ()
[326]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
En el ejemplo anterior, creamos un DataFrame con dos columnas, X y Y. Generamos los clústeres
usando K-significa y calculó el WCSS. Después de esto, graficamos el número de conglomerados y
la inercia. Como puede ver en k = 2, el gráfico comienza a aplanarse significativamente, por lo que
elegiríamos 2 como el mejor número de grupos.
El método de la silueta
El método de silueta evalúa y valida los datos del clúster. Encuentra qué tan bien se clasifica cada punto de
datos. El gráfico de la puntuación de la silueta nos ayuda a visualizar e interpretar qué tan bien los puntos
de datos están estrechamente agrupados dentro de sus propios grupos y separados de los demás. Nos
ayuda a evaluar la cantidad de clústeres. Su puntuación varía de -1 a +1. Un valor positivo indica un grupo
bien separado y un valor negativo indica puntos de datos asignados incorrectamente. Cuanto más positivo
sea el valor, más puntos de datos proceden de los conglomerados más cercanos; un valor de cero indica
puntos de datos que están en la línea de separación entre dos grupos. Veamos la fórmula para la
puntuación de la silueta:
[327]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
aI es la distancia media del Ith punto de datos de otros puntos dentro del clúster.
BI es la distancia media del Iel punto de datos de otros puntos del clúster.
Esto significa que podemos decir fácilmente que Si) estaría entre [-1, 1]. Entonces, paraSi) estar cerca de 1, aIdebe ser
muy pequeño en comparación con BI, es decir,mi. aI << bI.
# importar pandas
importar pandas como pd
# Crear un DataFrame
data = pd.DataFrame ({"X": [12,15,18,10,8,9,12,20], "Y":
[6,16,17,8,7,6,9,18] })
score_list = []
[328]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
# Mostrar gráfico
plt.show ()
En el ejemplo anterior, creamos un DataFrame con dos columnas, X y Y. Generamos clústeres con
diferentes números de clústeres en el DataFrame creado usando K significa y calculó la puntuación de
silueta. Después de esto, graficamos el número de conglomerados y las puntuaciones de silueta usando
un diagrama de barras. Como puede ver, en k = 2, la puntuación de silueta tiene el valor más alto, por lo
que elegiríamos 2 grupos. Pasemos a la técnica de agrupamiento de k-medias.
[329]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
3. Seleccione el nuevo centro del conglomerado promediando los valores de otros elementos del conglomerado.
k-means es uno de los algoritmos más rápidos y robustos de su tipo. Funciona mejor con un conjunto de datos
con elementos de datos distintos y separados. Genera racimos esféricos. k-means requiere el número de
clústeres como entrada al principio. Si los elementos de datos están muy superpuestos, no funciona bien.
Captura los óptimos locales de la función de error al cuadrado. No funciona bien con datos ruidosos y no
lineales. Tampoco funciona bien con clústeres no esféricos. Creemos un modelo de agrupación en clústeres
utilizando la agrupación en clústeres de k-means:
# importar pandas
importar pandas como pd
# Importar K-medias
de sklearn.cluster importar KMeans
# Crear un DataFrame
data = pd.DataFrame ({"X": [12,15,18,10,8,9,12,20], "Y":
[6,16,17,8,7,6,9,18] })
[330]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
# Mostrar la trama
plt.show ()
En el ejemplo de código anterior, importamos el KMeans class y creó su objeto o modelo. Este modelo se ajustará
al conjunto de datos (sin etiquetas). Después del entrenamiento, el modelo está listo para hacer predicciones
usando elpredecir() método. Después de predecir los resultados, graficamos los resultados del conglomerado
utilizando un diagrama de dispersión. En esta sección, hemos visto cómo funciona k-means y su implementación
usando la biblioteca scikit-learn. En la siguiente sección, veremos la agrupación jerárquica.
[331]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Agrupación jerárquica
La agrupación jerárquica agrupa elementos de datos en función de diferentes niveles de una jerarquía. Combina los
elementos en grupos basados en diferentes niveles de una jerarquía utilizando estrategias de arriba hacia abajo o de
abajo hacia arriba. Según la estrategia utilizada, la agrupación jerárquica puede ser de dos tipos
- aglomerativo o divisivo:
[332]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Para decidir qué conglomerados deben agruparse o dividirse, utilizamos varias distancias y criterios de
vinculación, como vinculación simple, completa, promedio y centroide. Estos criterios deciden la forma
del grupo. Ambos tipos de agrupación jerárquica (agrupación jerárquica aglomerativa y divisiva)
requieren un número predefinido de agrupaciones o un umbral de distancia como entrada para terminar
el proceso recursivo. Es difícil decidir el umbral de distancia, por lo que la opción más fácil es verificar el
número de grupos usando un dendrograma. Los dendrogramas nos ayudan a comprender el proceso de
agrupamiento jerárquico. Veamos cómo crear un dendrograma usando elscipy Biblioteca:
# importar pandas
importar pandas como pd
# Importar dendrograma
desde scipy.cluster.hierarchy importar dendrograma desde
scipy.cluster.hierarchy importar enlace
# Crear un DataFrame
data = pd.DataFrame ({"X": [12,15,18,10,8,9,12,20], "Y":
[6,16,17,8,7,6,9,18] })
# Mostrar la trama
plt.show ()
[333]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
En el ejemplo de código anterior, creamos el conjunto de datos y generamos el dendrograma usando el enlace
de barrio. Para los dendrogramas, usamos elscipy.cluster.hierarchymódulo. Para establecer el título de la gráfica
y las etiquetas del eje, usamosmatplotlib. Para seleccionar el número de conglomerados, necesitamos dibujar
una línea horizontal sin intersecar los conglomerados y contar el número de líneas verticales para encontrar el
número de conglomerados. Creemos un modelo de agrupamiento en clústeres utilizando agrupamiento
aglomerativo:
# importar pandas
importar pandas como pd
# Crear un DataFrame
data = pd.DataFrame ({"X": [12,15,18,10,8,9,12,20], "Y":
[6,16,17,8,7,6,9,18] })
[334]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
# Mostrar la trama
plt.show ()
[335]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
En el ejemplo de código anterior, importamos el Aglomerativo class y creó su objeto o modelo. Este modelo
encajará en el conjunto de datos sin etiquetas. Después del entrenamiento, el modelo está listo para hacer
predicciones usando elpredecir() método. Después de predecir los resultados, graficamos los resultados del
conglomerado utilizando un diagrama de dispersión. En esta sección, hemos visto cómo funciona la agrupación
jerárquica y su implementación utilizando elscipy y bibliotecas scikit-learn. En la siguiente sección, veremos la
agrupación en clústeres basada en densidad.
Intuitivamente, podemos decir que un enfoque de agrupamiento basado en densidad es muy similar a cómo nosotros, como
humanos, podríamos agrupar elementos instintivamente. En todas las figuras anteriores, podemos ver rápidamente el número
de grupos o conglomerados diferentes debido a la densidad de los elementos.
Agrupación espacial basada en densidad de aplicaciones con ruido (DBSCAN) se basa en la idea de grupos y
ruido. La idea principal detrás de esto es que cada elemento de datos de un grupo o conglomerado tiene un
número mínimo de elementos de datos en un radio determinado.
[336]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
El objetivo principal de DBSCAN es descubrir la región densa que se puede calcular utilizando un
número mínimo de objetos (minPoints) y radio dado (eps). DBSCAN tiene la capacidad de generar
formas aleatorias de clústeres y lidiar con el ruido en un conjunto de datos. Además, no es necesario
alimentar el número de clústeres. DBSCAN identifica automáticamente el número de grupos en los
datos.
# importar pandas
importar pandas como pd
# Mostrar la trama
plt.show ()
[337]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Primero, importamos el DBSCAN class y cree el conjunto de datos lunares. Después de esto, creamos el modelo
DBSCAN y lo ajustamos al conjunto de datos. DBSCAN no necesita el número de clústeres. Después del entrenamiento,
el modelo está listo para hacer predicciones usando elpredecir() método. Después de predecir los resultados,
graficamos los resultados del conglomerado utilizando un diagrama de dispersión. En esta sección, hemos visto cómo
funciona la agrupación en clústeres de DBSCAN y su implementación utilizando la biblioteca scikit-learn. En la siguiente
sección, veremos la técnica de agrupamiento espectral.
Agrupación espectral
La agrupación espectral es un método que emplea el espectro de una matriz de similitud. El espectro de
una matriz representa el conjunto de sus valores propios, y una matriz de similitud consta de puntuaciones
de similitud entre cada punto de datos. Reduce la dimensionalidad de los datos antes de la agrupación. En
otras palabras, podemos decir que la agrupación espectral crea un gráfico de puntos de datos, y estos
puntos se asignan a una dimensión inferior y se separan en grupos.
[338]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Una matriz de similitud convierte los datos para vencer la falta de convexidad en la distribución. Para cualquier
conjunto de datos, los puntos de datos pueden sernorte-dimensional, y aquí podría ser metro puntos de datos. A
partir de estosmetro puntos, podemos crear un gráfico donde los puntos son nodos y los bordes se ponderan
con la similitud entre los puntos. Una forma común de definir la similitud es con un kernel gaussiano, que es una
función no lineal de la distancia euclidiana:
La distancia de esta función varía de 0 a 1. El hecho de que esté limitada entre cero y uno es una buena
propiedad. La distancia absoluta (puede ser cualquier cosa) en la distancia euclidiana puede causar
inestabilidad y dificultad en el modelado. Puede pensar en el kernel gaussiano como una función de
normalización para la distancia euclidiana.
Después de obtener el gráfico, cree una matriz de adyacencia y coloque en cada celda de la matriz el
peso del borde. Esta es una matriz simétrica. Llamemos a la matriz de adyacencia A. Nosotros
también puede crear una matriz diagonal D de "grados", que tendrá en cada elemento la suma de
los pesos de todos los bordes vinculados al nodo I. Llamemos a esta matriz D. Para una gráfica dada G connortevértices, su norte
*norte La matriz laplaciana se puede definir de la siguiente manera:
Ahora tenemos la matriz laplaciana del gráfico (G). Podemos calcular el espectro de una matriz de vectores
propios. Si tomamosk vectores propios menos significativos, obtenemos una representación enk
dimensiones. Los autovectores menos significativos son los asociados con los autovalores más pequeños.
Cada vector propio proporciona información sobre la conectividad del gráfico.
La idea de la agrupación espectral es agrupar los puntos utilizando estos k vectores propios como
características. Entonces, toma elk vectores propios menos significativos y tienes tu metro puntos en k
dimensiones. Ejecuta un algoritmo de agrupación en clústeres, como k-means, y luego tiene su resultado. Estak
en agrupamiento espectral está profundamente relacionado con las k-medias del kernel de Gauss. También
puede considerarlo como un método de agrupamiento en el que sus puntos se proyectan en un espacio de
dimensiones infinitas, agrupados allí, y luego utiliza esos resultados como el resultado de agrupar sus puntos.
[339]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
El agrupamiento espectral se usa cuando k-means funciona mal porque los grupos no se pueden distinguir linealmente
en su espacio original. También podemos probar otros métodos de agrupamiento, como el agrupamiento jerárquico o
el agrupamiento basado en densidad, para resolver este problema. Creemos un modelo de agrupamiento usando
agrupamiento espectral en Python:
# importar pandas
importar pandas como pd
# Crear un DataFrame
data = pd.DataFrame ({"X": [12,15,18,10,8,9,12,20], "Y":
[6,16,17,8,7,6,9,18] })
# Mostrar la trama
plt.show ()
[340]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
En el ejemplo de código anterior, importamos el Agrupación espectral class y creó un conjunto de datos ficticio
utilizando pandas. Después de esto, creamos el modelo y lo ajustamos al conjunto de datos. Después del
entrenamiento, el modelo está listo para hacer predicciones usando elpredecir() método. En esta sección, hemos
visto cómo funciona la agrupación espectral y su implementación utilizando la biblioteca scikit-learn. En la
siguiente sección, veremos cómo evaluar el rendimiento de un algoritmo de agrupación en clústeres.
[341]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
La evaluación interna del desempeño nos ayuda a comparar múltiples algoritmos de agrupamiento,
pero no significa que un algoritmo de mejor puntuación generará mejores resultados que otros
algoritmos. Las siguientes medidas de evaluación del desempeño interno se pueden utilizar para estimar
la calidad de los clústeres generados:
El índice de Davies-Bouldin
los Índice de Davies-Bouldin (BDI) es la relación entre la distancia entre grupos y la distancia entre grupos. Un
valor de DBI más bajo significa mejores resultados de agrupación. Esto se puede calcular de la siguiente
manera:
corriente continuaI, Cj): La distancia entre grupos entre dos centroides de grupo cI y Cj
El coeficiente de silueta
El coeficiente de silueta encuentra la similitud de un elemento de un grupo con sus propios elementos de grupo y otros
grupos más cercanos. También se utiliza para encontrar el número de conglomerados, como hemos visto en otra parte
de este capítulo. Un alto coeficiente de silueta significa mejores resultados de agrupamiento. Esto se puede calcular de
la siguiente manera:
[342]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
aI es la distancia media del Ith los datos apuntan a otros puntos dentro del clúster.
BI es la distancia media del Ith los datos apuntan a otros puntos del clúster.
Entonces, podemos decir que Si) estaría entre [-1, 1]. Entonces, paraSi) estar cerca de 1, aI debe ser muy
pequeño en comparación con bI, eso es unI << bI.
La puntuación de Rand
La puntuación Rand muestra qué tan similar es un grupo a la clasificación de referencia y calcula el
porcentaje de decisiones tomadas correctamente. Es preferible un valor más bajo porque representa
grupos distintos. Esto se puede calcular de la siguiente manera:
La puntuación de Jaccard
La puntuación de Jaccard calcula la similitud entre dos conjuntos de datos. Va de 0 a 1. 1 significa que los
conjuntos de datos son idénticos y 0 significa que los conjuntos de datos no tienen elementos comunes. Es
preferible un valor bajo porque indica agrupaciones distintas. Esto se puede calcular de la siguiente manera:
[343]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Medida F o puntuación F1
La medida F es una media armónica de precisión y valores de recuperación. Mide tanto la precisión como la
robustez de los algoritmos de agrupación en clústeres. También intenta igualar la participación de falsos
negativos utilizando el valor de β. Esto se puede calcular de la siguiente manera:
La puntuación de Fowlkes-Mallows
La puntuación de Fowlkes-Mallows es una media geométrica de precisión y recuerdo. Un valor alto
representa grupos similares. Esto se puede calcular de la siguiente manera:
# Importar bibliotecas
importar pandas como pd
[344]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Primero, necesitamos importar pandas y leer el conjunto de datos. En el ejemplo anterior, estamos leyendo
el conjunto de datos Pima Indian Diabetes:
Después de cargar el conjunto de datos, necesitamos dividir el conjunto de datos en columnas dependientes / de etiqueta (objetivo) y
columnas independientes / de características (conjunto de características). Después de esto, el conjunto de datos se dividirá en conjuntos
de prueba y de tren. Ahora tanto las columnas dependientes como las independientes están rotas
en trenes y conjuntos de prueba (feature_train, feature_test, target_train,
y prueba_objetivo) utilizando train_test_split (). Dividamos el conjunto de datos en partes de prueba y tren:
[345]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Primero, importamos el KMeans y métrica módulos. Creamos un objeto o modelo k-means y lo ajustamos
al conjunto de datos de entrenamiento (sin etiquetas). Después del entrenamiento, el modelo hace
predicciones y estas predicciones se evalúan utilizando medidas internas, como el DBI y el coeficiente de
silueta, y medidas de evaluación externas, como la puntuación Rand, la puntuación Jaccard, la F-Measure y
la Fowlkes-Mallows. puntaje.
[346]
Aprendizaje no supervisado: PCA y agrupación en clústeres Capítulo 11
Resumen
En este capítulo, hemos descubierto el aprendizaje no supervisado y sus técnicas, como la reducción de
dimensionalidad y la agrupación. El enfoque principal fue el PCA para la reducción de dimensionalidad y
varios métodos de agrupamiento, como agrupamiento de k-medias, agrupamiento jerárquico, DBSCAN
y agrupamiento espectral. El capítulo comenzó con la reducción de dimensionalidad y PCA. Después de
PCA, nuestro enfoque principal fue en las técnicas de agrupación y cómo identificar el número de
agrupaciones. En secciones posteriores, pasamos a las medidas de evaluación del desempeño del
clúster, como el DBI y el coeficiente de silueta, que son medidas internas. Después de analizar las
medidas internas de agrupamiento, analizamos medidas externas como la puntuación Rand, la
puntuación Jaccard, la medida F y el índice Fowlkes-Mallows.
El próximo capítulo, Capítulo 12, Analizar datos textuales, se centrará en el análisis de texto, cubriendo el
preprocesamiento y la clasificación de texto mediante NLTK, SpaCy y scikit-learn. El capítulo comienza
explorando operaciones básicas sobre datos textuales, como la normalización de texto mediante tokenización,
eliminación de palabras vacías, derivación y lematización, etiquetado de partes del discurso, reconocimiento de
entidades, análisis de dependencias y nubes de palabras. En secciones posteriores, la atención se centrará en
los enfoques de ingeniería de características como Bolsa de palabras, presencia de términos, TF-IDF, análisis de
sentimientos, clasificación de texto y similitud de texto.
[347]
Sección 4: PNL, análisis
-
de imágenes y paralelo
Informática
El objetivo principal de esta sección es obtener una descripción general de la PNL, el análisis de imágenes y la
computación paralela. Las habilidades de PNL comprenden preprocesamiento de texto, análisis de sentimientos y
similitud de texto utilizando NLTK y SpaCy. El análisis de imágenes comprende el procesamiento de imágenes y la
detección de rostros mediante OpenCV. Esta sección también se centra en el cálculo paralelo de DataFrames,
matrices y algoritmos de aprendizaje automático.
En este capítulo, comenzaremos con operaciones básicas de análisis de texto como tokenización, eliminación de
palabras vacías, derivación, lematización, etiquetado de PoS y reconocimiento de entidades. Después de esto,
veremos cómo visualizar su análisis de texto usando WordCloud. Veremos cómo conocer las opiniones de los
clientes sobre un producto en base a reseñas, utilizando análisis de sentimiento. Aquí, realizaremos un análisis
de sentimiento utilizando la clasificación de texto y evaluaremos el rendimiento del modelo utilizando exactitud,
precisión, recuperación y puntuación f1. Finalmente, nos centraremos en la similitud de texto entre dos
oraciones usando Jaccard y la similitud de coseno.
Instalación de la normalización
NLTK y SpaCy Text
Tokenización
Eliminar palabras vacías
Etiquetado POS de derivación y
lematización
Analizar datos textuales Capítulo 12
Reconocer entidades
Análisis de dependencias
Crear una nube de palabras
Bolsa de palabras
TF-IDF
Análisis de sentimientos mediante clasificación de texto
Similitud de texto
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
Puede encontrar el código y los conjuntos de datos en el siguiente enlace de GitHub: https: / /
github. com / PacktPublishing / Python- Análisis de datos- Tercera edición / tree / master /
Chapter12.
Todos los bloques de código están disponibles en el ch12.ipynb expediente. Este capítulo
utiliza solo un archivo TSV (amazon_alexa.tsv) con fines de práctica.
En este capítulo, usaremos las bibliotecas Python NLTK, SpaCy, WordCloud,
matplotlib, seaborn y scikit-learn.
[350]
Analizar datos textuales Capítulo 12
SpaCy es otro paquete de Python esencial y poderoso para PNL. Ofrece un algoritmo de PNL común, así
como funcionalidades avanzadas. Está diseñado para fines de producción y desarrolla aplicaciones para
un gran volumen de datos. La biblioteca SpaCy se puede instalar usando elinstalación de pip comando que
se ejecuta en la línea de comando de la siguiente manera:
Después de instalar spaCy, necesitamos instalar un espacioso Modelo en idioma inglés. Podemos instalarlo
usando el siguiente comando:
Normalización de texto
La normalización de texto convierte el texto en formato estándar o canónico. Asegura la coherencia y
ayuda en el procesamiento y análisis. No existe un enfoque único para el proceso de normalización. El
primer paso en la normalización es la minúscula de todo el texto. Es el método más simple, aplicable y
eficaz para el preprocesamiento de texto. Otro enfoque podría ser el manejo de palabras mal escritas,
acrónimos, formas cortas y el uso de palabras fuera del vocabulario; por ejemplo, "super", "superb" y
"superrrr" se pueden convertir en "super". La normalización de texto maneja el ruido y las perturbaciones
en los datos de prueba y prepara datos sin ruido. También aplicamos derivación y lematización para
normalizar las palabras presentes en el texto.
# Texto de entrada
párrafo = "" "Taj Mahal es uno de los hermosos monumentos. Es una de las maravillas del mundo.
Fue construido por Shah Jahan en 1631 en memoria de su tercera esposa amada Mumtaj Mahal." ""
[351]
Analizar datos textuales Capítulo 12
taj mahal es uno de los hermosos monumentos. es una de las maravillas del mundo. fue
construido por shah jahan en 1631 en memoria de su tercera esposa amada, mumtaj mahal.
En PNL, la normalización de texto se ocupa de la aleatoriedad y convierte el texto en una forma estándar que
mejora el rendimiento general de las soluciones de PNL. También reduce el tamaño de la matriz de términos del
documento al convertir las palabras en su palabra raíz. En las próximas secciones, nos centraremos en las
operaciones básicas de preprocesamiento de texto.
Tokenización
La tokenización es el paso inicial en el análisis de texto. La tokenización se define como dividir párrafos de
texto en partes más pequeñas o tokens, como oraciones o palabras, e ignorar los signos de puntuación.
La tokenización puede ser de dos tipos: tokenización de oraciones y tokenización de palabras. Un
tokenizador de oraciones divide un párrafo en oraciones y el tokenizador de palabras divide un texto en
palabras o tokens.
# descargando punkt
nltk.download ('punkt')
# descargando wordnet
nltk.download ('wordnet')
# downloading average_perception_tagger
nltk.download ('averaged_perceptron_tagger')
[352]
Analizar datos textuales Capítulo 12
# Tokenización de sentencias
desde nltk.tokenize import sent_tokenize
párrafo = "" "Taj Mahal es uno de los hermosos monumentos. Es una de las maravillas del
mundo. Fue construido por Shah Jahan en 1631 en memoria de su tercera esposa amada
Mumtaj Mahal." ""
['El Taj Mahal es uno de los monumentos más hermosos', 'Es una de las maravillas del
mundo', 'Fue construido por Shah Jahan en 1631 en memoria de su tercera esposa
amada, Mumtaj Mahal.']
[353]
Analizar datos textuales Capítulo 12
['El Taj Mahal es uno de los monumentos más hermosos', 'Es una de las maravillas del mundo', 'Fue
construido por Shah Jahan en 1631 en memoria de su tercera esposa amada, Mumtaj Mahal.']
['Taj', 'Mahal', 'es', 'uno', 'de', 'el', 'hermoso', 'monumento', '.', 'Es', 'es', 'uno', ' de ',' el ',' maravillas ',' de
',' el ',' mundo ','. ',' Eso ',' fue ',' construido ',' por ',' Shah ',' Jahan ' , 'en', '1631', 'en', 'memoria', 'de',
'su', 'tercera', 'amada', 'esposa', 'Mumtaj', 'Mahal', '.']
# Importar espacio
importar espacio
párrafo = "" "Taj Mahal es uno de los hermosos monumentos. Es una de las maravillas del mundo.
Fue construido por Shah Jahan en 1631 en memoria de su tercera esposa amada Mumtaj Mahal."
""
[354]
Analizar datos textuales Capítulo 12
tokenized_words.append (token.text)
imprimir (tokenized_words)
['Taj', 'Mahal', 'es', 'uno', 'de', 'el', 'hermoso', 'monumento', '.', 'Es', 'es', 'uno', ' de ',' el ',' maravillas ',' de
',' el ',' mundo ','. ',' Eso ',' fue ',' construido ',' por ',' Shah ',' Jahan ' , 'en', '1631', 'en', 'memoria', 'de',
'su', 'tercera', 'amada', 'esposa', 'Mumtaj', 'Mahal', '.']
[('de', 4), ('el', 3), ('.', 3), ('Mahal', 2), ('es', 2)]
# Importar matplotlib
importar matplotlib.pyplot como plt
[355]
Analizar datos textuales Capítulo 12
[356]
Analizar datos textuales Capítulo 12
lista_palabras_filtradas = []
por palabra en tokenized_words:
# filtrar palabras vacías
si la palabra no está en stopwords_set:
lista_palabras_filtradas.append (palabra)
Lista de palabras tokenizadas: ['Taj', 'Mahal', 'es', 'uno', 'de', 'el', 'hermoso', 'monumentos', '.', 'Eso',
'es', ' uno ',' de ',' el ',' maravillas ',' de ',' el ',' mundo ','. ',' Eso ',' fue ',' construido ',' por ',' Shah ' ,
'Jahan', 'en', '1631', 'en', 'memoria', 'de', 'su', 'tercera', 'amada', 'esposa', 'Mumtaj', 'Mahal', ' . ']
Lista de palabras filtradas: ['Taj', 'Mahal', 'uno', 'hermoso', 'monumentos', '.', 'Eso', 'uno', 'maravillas',
'mundo', '.', ' Ella ',' construyó ',' Shah ',' Jahan ',' 1631 ',' memoria ',' tercera ',' amada ',' esposa ','
Mumtaj ',' Mahal ','. ']
En el ejemplo anterior, primero importamos las palabras vacías y cargamos la lista de palabras en inglés.
Después de esto, iteramos la lista de palabras tokenizada que generamos en la sección anterior usando un
por bucle y filtró las palabras tokenizadas de la lista de palabras de parada utilizando el sicondición.
Guardamos las palabras filtradas en elfltered_word_list objeto de lista.
# Importar espacio
importar espacio
# párrafo de texto
párrafo = "" "Taj Mahal es uno de los hermosos monumentos. Es una de las maravillas del mundo.
Fue construido por Shah Jahan en 1631 en memoria de su tercera esposa amada Mumtaj Mahal."
""
[357]
Analizar datos textuales Capítulo 12
Oración filtrada: [Taj, Mahal, hermoso, monumento,., Maravillas, mundo,., Construido, Shah, Jahan,
1631, memoria, amada, esposa, Mumtaj, Mahal,.]
En el ejemplo anterior, primero importamos las palabras vacías y cargamos la lista de palabras en inglés
en la variable palabras vacías. Después de esto, iteramos el objeto NLP usando unpor bucle y filtró cada
palabra con la propiedad "is_stop " de la lista de palabras vacías usando el sicondición. Agregamos las
palabras filtradas en elfltered_token_list objeto de lista. En esta sección, hemos analizado la eliminación de
palabras vacías. Ahora es el momento de aprender sobre la derivación y la lematización para encontrar la
raíz de la palabra.
Derivado y lematización
La derivación es otro paso en el análisis de texto para la normalización a nivel de idioma. El proceso
de derivación reemplaza una palabra con su raíz. Corta los prefijos y sufijos. Por ejemplo, la palabra
conectar es la raíz de conectar, conectar y conectar. Todas las palabras mencionadas tienen una raíz
común:conectar. Tales diferencias entre la ortografía de las palabras dificultan el análisis de los
datos del texto.
La lematización es otro tipo de normalización del léxico, que convierte una palabra en su raíz. Está
estrechamente relacionado con la derivación. La principal diferencia es que la lematización considera el
contexto de la palabra mientras se realiza la normalización, pero la lematización no considera el
conocimiento contextual de la palabra. La lematización es más sofisticada que una lematización. Por
ejemplo, la palabra "gansos" se lematiza como "ganso". La lematización reduce las palabras a su lema
válido usando un diccionario. La lematización considera la parte del habla cercana a las palabras para la
normalización; por eso es difícil de implementar y más lento, mientras que las levas son más fáciles de
implementar y más rápidas pero con menos precisión.
[358]
Analizar datos textuales Capítulo 12
[359]
Analizar datos textuales Capítulo 12
PoS significa parte del discurso. El principal objetivo del etiquetado POS es descubrir el tipo sintáctico de
palabras, como sustantivos, pronombres, adjetivos, verbos, adverbios y preposiciones. El etiquetado de
PoS encuentra la relación entre palabras dentro de una oración.
# Ejemplo de oración
sentencia = "Taj Mahal es uno de los hermosos monumentos".
# Tokeniza la oración
sent_tokens = word_tokenize (oración)
[('Taj', 'NNP'), ('Mahal', 'NNP'), ('es', 'VBZ'), ('uno', 'CD'), ('de', 'IN') , ('el', 'DT'), ('hermoso', 'JJ'),
('monumento', 'NN'), ('.', '.')]
# Importar espacio
importar espacio
[360]
Analizar datos textuales Capítulo 12
Taj PROPN
Mahal PROPN
es VERBO
uno NUM
de ADP
el DET
hermosa ADJ
monumento sustantivo
. PUNCT
Reconocer entidades
El reconocimiento de entidades significa extraer o detectar entidades en el texto dado. También se conoce como
Reconocimiento de entidad nombrada (NER). Una entidad se puede definir como un objeto, como una ubicación,
personas, una organización o una fecha. El reconocimiento de entidades es uno de los temas avanzados de la PNL. Se
utiliza para extraer información importante del texto.
# Importar espacio
importar espacio
# Párrafo de muestra
párrafo = "" "Taj Mahal es uno de los hermosos monumentos. Es una de las maravillas del mundo.
Fue construido por Shah Jahan en 1631 en memoria de su tercera esposa amada Mumtaj Mahal."
""
[361]
Analizar datos textuales Capítulo 12
[('Taj Mahal', 'PERSON'), ('Shah Jahan', 'PERSON'), ('1631', 'FECHA'), ('tercero', 'ORDINAL'),
('Mumtaj Mahal', ' PERSONA')]
En el ejemplo anterior, primero importamos spaCy y cargamos el modelo de idioma inglés. Después de
esto, creamos el objeto NLP y lo iteramos usando unpor círculo. En el ciclo, obtuvimos el valor de texto y
su valor de tipo de entidad usando eltexto y etiqueta_ propiedades. Visualicemos las entidades en el texto
usando una clase de visualización spaCy:
Análisis de dependencias
El análisis de dependencias encuentra la relación entre palabras: cómo se relacionan las palabras entre sí. Ayuda
a las computadoras a comprender oraciones para su análisis; por ejemplo, "Taj Mahal es uno de los
monumentos más bellos". No podemos entender esta oración simplemente analizando palabras. Necesitamos
profundizar y comprender el orden de las palabras, la estructura de las oraciones y las partes del discurso:
# Importar espacio
importar espacio
[362]
Analizar datos textuales Capítulo 12
O, alternativamente, este:
[363]
Analizar datos textuales Capítulo 12
párrafo = "" "Taj Mahal es uno de los hermosos monumentos. Es una de las maravillas del
mundo. Fue construido por Shah Jahan en 1631 en memoria de su tercera esposa amada
Mumtaj Mahal." ""
# Mostrar imagen
plt.imshow (word_cloud)
# Eliminar eje
plt.axis ("desactivado")
# mostrar trama
plt.show ()
[364]
Analizar datos textuales Capítulo 12
Bolsa de palabras
Bolsa de palabras (Inclinarse) es una de las técnicas de ingeniería de funciones más básicas,
simples y populares para convertir texto en un vector numérico. Funciona en dos pasos: recopilar
palabras de vocabulario y contar su presencia o frecuencia en el texto. No considera la estructura
del documento ni la información contextual. Tomemos los siguientes tres documentos y
comprendamos BoW:
Ahora, crearemos el Matriz de plazos del documento (DTM). Esta matriz consta del documento
en las filas, las palabras en la columna y la frecuencia en los valores de las celdas.
Doc-1 1 1 1 0 0 0 0 0 0 0 0
Doc-2 1 1 0 1 1 1 0 0 0 0 0
Doc-3 0 0 1 0 0 1 1 1 1 1 1
[365]
Analizar datos textuales Capítulo 12
En el ejemplo anterior, generamos el DTM utilizando una sola palabra clave conocida como unigrama.
También podemos utilizar una combinación de dos palabras clave continuas, conocido como modelo
bigrama, y tres palabras clave, conocido como modelo trigrama. La forma generalizada se conoce
como modelo n-grama.
En Python, scikit-learn ofrece CountVectorizer para generar el BoW DTM. Veremos en elAnálisis de
sentimiento mediante clasificación de texto sección cómo generarlo usando scikit-learn.
TF-IDF
TF-IDF representa Término Frecuencia-Frecuencia inversa del documento. Tiene dos segmentos:
Frecuencia de término (TF) y Frecuencia de documento inversa (IDF). TF solo cuenta la ocurrencia
de palabras en cada documento. Es equivalente a BoW. TF no considera el contexto de las palabras y se
inclina hacia documentos más largos.IDF calcula valores que corresponden a la cantidad de
información que guarda una palabra.
TF-IDF es el producto escalar de ambos segmentos: TF e IDF. TF-IDF normaliza los pesos de los
documentos. Un valor más alto de TF-IDF para una palabra representa una ocurrencia más alta en ese
documento. Tomemos los siguientes tres documentos:
Ahora crearemos el DTM. Esta matriz consta del nombre del documento en los encabezados de las filas,
las palabras en los encabezados de las columnas y los valores TF-IDF en las celdas:
[366]
Analizar datos textuales Capítulo 12
La clasificación de texto puede ser uno de los enfoques utilizados para el análisis de sentimientos. Es un método
supervisado que se utiliza para detectar una clase de contenido web, artículos de noticias, blogs, tweets y
sentimientos. La clasificación tiene una gran cantidad de aplicaciones, desde marketing, finanzas, comercio
electrónico y seguridad. Primero, preprocesamos el texto, luego buscamos las características del texto
preprocesado y luego alimentamos las características y las etiquetas al algoritmo de aprendizaje automático
para hacer la clasificación. El siguiente diagrama explica la idea completa del análisis de opiniones mediante la
clasificación de texto:
Clasifiquemos los sentimientos por las reseñas de productos de Amazon Alexa. Podemos obtener datos del
Sitio web de Kaggle (https: / / www. kaggle. com / sid321axn / amazon- alexa- reseñas).
Los datos de reseñas de productos de Alexa son un archivo de valores separados por tabulaciones (archivo TSV). Estos datos
tienen cinco columnas o atributos:clasificación, fecha, variación, verificado, y realimentación.
[367]
Analizar datos textuales Capítulo 12
los clasificación La columna indica las calificaciones de los usuarios de los productos Alexa. La columna
de fecha es la fecha en la que el usuario dio la revisión. losvariación La columna representa el nombre
del modelo del producto. verificado tiene la opinión real del usuario sobre el producto.
La calificación denota la calificación otorgada por cada usuario al producto. La fecha es la fecha de la
revisión y la variación describe el nombre del modelo.verificado contiene la reseña de texto escrita por el
usuario y la columna de comentarios representa la puntuación de sentimiento, donde 1 denota un
sentimiento positivo y 0 denota un sentimiento negativo.
El primer paso para crear un modelo de aprendizaje automático es cargar el conjunto de datos.
Primero leamos los datos usando los pandas.read_csv () función:
# Importar bibliotecas
importar pandas como pd
En el marco de datos de salida anterior, hemos visto que el conjunto de datos de revisión de
Alexa tiene cinco columnas: clasificación, fecha, variación, verificado, y realimentación.
[368]
Analizar datos textuales Capítulo 12
Tracemos el realimentación recuento de columnas para ver cuántas reseñas positivas y negativas
tiene el conjunto de datos:
# Importar seaborn
importar seaborn como sns
importar matplotlib.pyplot como plt
# Parcela de recuento
sns.countplot (x = 'comentarios', datos = df)
[369]
Analizar datos textuales Capítulo 12
Generemos una matriz BoW para las reseñas de los clientes usando scikit-learn's
CountVectorizer:
[370]
Analizar datos textuales Capítulo 12
# Importar train_test_split
de sklearn.model_selection importar train_test_split
[371]
Analizar datos textuales Capítulo 12
En el código anterior, hemos evaluado el rendimiento del modelo usando exactitud, precisión,
recuperación y puntaje f1 usando el métricas de scikit-learn función. Todas las medidas son superiores al
94%, por lo que podemos decir que nuestro modelo está funcionando bien y clasifica ambos niveles de
sentimiento con una buena cantidad de precisión y recuerdo.
[372]
Analizar datos textuales Capítulo 12
# Importar bibliotecas
importar pandas como pd
En el marco de datos de salida anterior, hemos visto que el conjunto de datos de revisión de
Alexa tiene cinco columnas: clasificación, fecha, variación, verificado, y realimentación.
Generemos una matriz TF-IDF para las reseñas de los clientes usando scikit-learn's
TfidfVectorizer:
[373]
Analizar datos textuales Capítulo 12
# Importar train_test_split
de sklearn.model_selection importar train_test_split
[374]
Analizar datos textuales Capítulo 12
En esta sección, crearemos el modelo de regresión logística para clasificar los sentimientos
de revisión utilizando TF-IDF. Creemos el modelo de regresión logística:
# instanciar el modelo
logreg = LogisticRegression (solver = 'lbfgs')
[375]
Analizar datos textuales Capítulo 12
En el código anterior, evaluamos el rendimiento del modelo usando exactitud, precisión, recuperación y
puntaje f1 usando scikit-learn métrica función. Todas las medidas son superiores al 94%, por lo que
podemos decir que nuestro modelo está funcionando bien y clasifica ambos niveles de sentimiento con
una buena cantidad de precisión y recuerdo. En esta sección, hemos analizado el análisis de opiniones
mediante la clasificación de texto. La clasificación de texto se realiza mediante las funciones BoW y TF-IDF.
En la siguiente sección, aprenderemos cómo encontrar similitudes entre dos fragmentos de texto, como
oraciones o párrafos.
Similitud de texto
La similitud de texto es el proceso de determinar los dos textos más cercanos. La similitud de texto es muy útil para
encontrar documentos, preguntas y consultas similares. Por ejemplo, un motor de búsqueda como Google usa la
similitud para encontrar la relevancia del documento, y los sistemas de preguntas y respuestas como StackOverflow o
un sistema de servicio al consumidor usan preguntas similares. Hay dos métricas comunes que se utilizan para la
similitud de texto, a saber, Jaccard y la similitud de coseno.
También podemos utilizar el método de similitud disponible en spaCy. losnlp objetos semejanzaEl
método devuelve una puntuación entre dos oraciones. Veamos el siguiente ejemplo:
# Importar espacio
importar espacio
# Crear documentos
doc1 = nlp (u'Me encantan las mascotas ')
doc2 = nlp (u'Odio las mascotas')
[376]
Analizar datos textuales Capítulo 12
# Encontrar similitud
imprimir (doc1.similarity (doc2))
0,724494176985974
En el bloque de código anterior, hemos encontrado la similitud entre dos oraciones usando spaCy's
semejanza() función. La función de similitud de Spacy no da mejores resultados con modelos pequeños
(como elen_core_web_sm y en modelos); por eso recibirás una advertencia:Advertencia de usuario:
[W007]. Para eliminar esta advertencia, utilice modelos más grandes como
como en_core_web_lg.
Similitud de Jaccard
La similitud de Jaccard calcula la similitud entre dos conjuntos por la proporción de palabras comunes
(intersección) a palabras totalmente únicas (unión) en ambos conjuntos. Se necesita una lista de palabras
únicas en cada oración o documento. Es útil donde la repetición de palabras no importa. La similitud de
Jaccard varía de 0 a 100%; cuanto mayor es el porcentaje, más similares son las dos poblaciones:
[377]
Analizar datos textuales Capítulo 12
0,5
En el ejemplo anterior, hemos creado una función, jaccard_similarity (), que toma dos
argumentos, enviado1 y enviado 2. Encontrará la relación entre la intersección de palabras
clave y la unión de palabras clave entre dos oraciones.
Similitud de coseno
La similitud de coseno calcula el coseno del ángulo entre dos vectores proyectados multidimensionales.
Indica cómo se relacionan dos documentos entre sí. Se pueden hacer dos vectores de la bolsa de palabras
o TF-IDF o cualquier vector equivalente del documento. Es útil cuando importa la duplicación de palabras.
La similitud de coseno puede medir la similitud de texto independientemente del tamaño de los
documentos.
imprimir (cos_sim)
[378]
Analizar datos textuales Capítulo 12
[[1. 0.33609693]
[0.33609693 1.]]
Resumen
En este capítulo, exploramos el análisis de texto utilizando NLTK y spaCy. El enfoque principal fue el
preprocesamiento de texto, el análisis de sentimientos y la similitud de texto. El capítulo comenzó con tareas
de preprocesamiento de texto, como normalización de texto, tokenización, eliminación de palabras vacías,
derivación y lematización. También nos enfocamos en cómo crear una nube de palabras, reconocer entidades
en un texto dado y encontrar dependencias entre tokens. En secciones posteriores, nos enfocamos en BoW,
TFIDF, análisis de sentimientos y clasificación de texto.
El próximo capítulo, Capítulo 13, Analizar datos de imagen, se centra en el procesamiento de imágenes, las operaciones básicas
de procesamiento de imágenes y la detección de rostros mediante OpenCV. El capítulo comienza con modelos de color de
imagen y operaciones de imagen como dibujar en una imagen, cambiar el tamaño de una imagen y voltear y desenfocar una
imagen. En secciones posteriores, la atención se centrará en la detección de rostros en una imagen de entrada determinada.
[379]
Analizar datos de imagen
--
Estamos en la era de la información, donde cada movimiento generará datos en una variedad de
formatos, como texto, imágenes, datos geoespaciales y videos. Los teléfonos inteligentes han
llegado a áreas rurales del mundo y la gente está capturando actividades, especialmente en
imágenes y videos, y compartiéndolas en plataformas de redes sociales. Así es como se generan
grandes cantidades de datos y la mayoría de los datos están en formatos de imagen y video. Los
institutos de investigación y la industria quieren analizar conjuntos de datos de imágenes y videos
para generar valor y crear soluciones automatizadas para reducir costos. El procesamiento de
imágenes y la visión por computadora son campos que exploran y desarrollan soluciones basadas
en imágenes y videos. Hay muchas oportunidades para la investigación, la innovación y la creación
de empresas en el área de la visión por computadora. En este capítulo,
Instalación de OpenCV
Comprensión de los modelos de color de
datos de imagen
Dibujando en imágenes
Escribir en imágenes
Cambiar el tamaño de las imágenes
Voltear imágenes
Analizar datos de imagen Capítulo 13
Cambiar el brillo
Desenfocar una imagen
Detección de rostro
Requerimientos técnicos
Este capítulo tiene los siguientes requisitos técnicos:
Puede encontrar el código, el archivo de clasificador de rostros y los conjuntos de datos en el siguiente Github
Enlace: https://github.com/PacktPublishing/Python-Data-Analysis-Third-Edition / tree /
master / Chapter13.
Todos los bloques de código están disponibles en el ch13.ipynb expediente.
Instalación de OpenCV
OpenCV es una biblioteca de código abierto para operaciones de visión por computadora, como análisis de
imágenes y videos. OpenCV es desarrollado principalmente por Intel en C ++ y ofrece interfaces con Python, Java
y Matlab. OpenCV tiene las siguientes características:
[381]
Analizar datos de imagen Capítulo 13
Usando el comando pip anterior, podemos instalar fácilmente OpenCV. OpenCV es la biblioteca más popular
para tareas de procesamiento de imágenes y visión por computadora. Ofrece varios casos de uso relacionados
con las operaciones de análisis de imágenes, como mejorar la calidad de la imagen, filtrar y transformar
imágenes, dibujar en imágenes, cambiar colores, detectar caras y objetos, identificar acciones humanas,
rastrear objetos, analizar movimiento y encontrar imágenes similares. Después de instalar la biblioteca
OpenCV, es hora de comprender los conceptos básicos del procesamiento de imágenes.
Binario
Escala de grises
Color
Imágenes binarias
Los píxeles de imagen binaria tienen solo dos colores, generalmente blanco y negro. Los píxeles de imagen binaria
solo toman valores binarios 0 o 1.
La imagen anterior es un ejemplo de imagen binaria. Tiene solo dos colores, blanco y
negro. No utiliza tonos de blanco y negro.
[382]
Analizar datos de imagen Capítulo 13
La imagen anterior es una imagen en escala de grises. Es una imagen en blanco y negro donde los tonos pasan
del negro puro al blanco puro.
Imágenes en color
Las imágenes en color son una mezcla de los colores primarios rojo, azul y verde. Estos colores primarios
tienen la capacidad de formar nuevos colores al mezclarlos en ciertas proporciones. Cada color utiliza ocho
bits (valores de intensidad entre 0-255), es decir, 24 bits por píxel. Tomemos un ejemplo de una imagen en
color:
[383]
Analizar datos de imagen Capítulo 13
En el archivo de imagen anterior, podemos ver la mayoría de los tonos de color con diferentes intensidades.
Después de comprender el tipo de imágenes, es hora de comprender los modelos de color como RGB, CMYK,
HSV, HSL y escala de grises. Pasemos a los modelos de color.
Modelos de color
Los modelos de color son una estructura para procesar y medir la combinación de colores primarios. Nos
ayudan a explicar cómo se mostrarán los colores en la pantalla de la computadora o en el papel. Los
modelos de color pueden ser de dos tipos: aditivos o sustractivos. Los modelos aditivos se utilizan para
pantallas de computadora, por ejemplo, el modelo RGB (rojo, verde y azul), y los modelos sustractivos se
utilizan para imprimir imágenes, por ejemplo, el modelo CMYK (cian, magenta, amarillo y negro):
Hay muchos modelos distintos de RGB y CMYK, como HSV, HSL y escala de grises. HSV es un
acrónimo de tono, saturación y valor. Es un modelo de color tridimensional, que es una versión
mejorada del modelo RGB. En el modelo HSV, la parte superior del eje central es blanca, la parte
inferior es negra y los colores restantes se encuentran en el medio. Aquí, el tono es el ángulo, la
saturación es la distancia desde el eje central y el valor es la distancia desde la parte inferior del eje.
[384]
Analizar datos de imagen Capítulo 13
[385]
Analizar datos de imagen Capítulo 13
# Mostrar la imagen
plt.imshow (rgb_image)
plt.show ()
[386]
Analizar datos de imagen Capítulo 13
Producción: Cierto
En el bloque de código anterior, hemos escrito el archivo de imagen en un disco local con el nombre de la
imagen image.jpg. Después de comprender los modelos de color, es hora de aprender a dibujar elementos en
una imagen.
Dibujando en imágenes
Aprendamos a dibujar diferentes formas de figuras, como una línea, un cuadrado o un triángulo, en una
imagen usando OpenCV. Cuando dibujamos cualquier forma en una imagen, debemos cuidar las
coordenadas, el color y el grosor de la forma. Primero creemos una imagen en blanco con un fondo
blanco o negro:
# Muestra la imagen
plt.imshow (imagen_negra)
[387]
Analizar datos de imagen Capítulo 13
En el ejemplo anterior, creamos una imagen en blanco con un fondo negro usando el
ceros () función del módulo NumPy. losceros () La función crea una matriz del tamaño
dado y llena la matriz con ceros.
# Muestra la imagen
plt.imshow (imagen_blanco)
[388]
Analizar datos de imagen Capítulo 13
En el ejemplo anterior, creamos una imagen en blanco con un fondo blanco usando elceros ()
función del módulo NumPy y llenó la imagen con 255 para cada píxel. losceros () La función
crea una matriz del tamaño dado y llena la matriz con ceros. losllenar() La función asigna un
valor dado a todos los elementos de la matriz. Dibujemos una línea usando OpenCV en una
imagen negra:
# Mostrar imagen
plt.imshow (línea)
En el ejemplo anterior, dibujamos la línea verde en la imagen negra usando el línea()función. los
línea() La función toma los siguientes argumentos: archivo de imagen, punto_inicio, punto_final, color
y grosor. En nuestro ejemplo, los puntos inicial y final son (599,0) y (0,599), la tupla de color es
(0,255,0) y el grosor es 4. De manera similar, podemos crear una línea en una imagen blanca.
Veamos el siguiente ejemplo:
[389]
Analizar datos de imagen Capítulo 13
# Muestra la imagen
plt.imshow (círculo)
[390]
Analizar datos de imagen Capítulo 13
# Muestra la imagen
plt.imshow (rectángulo)
En el ejemplo anterior, creamos una imagen negra y dibujamos un rectángulo usando elrectángulo()
función. losrectángulo() La función toma los siguientes argumentos: imagen,punto_inicio,
punto_final, color y grosor. Aquí, el grosor también tiene un argumento:1,los -1 El valor px llenará la
forma del rectángulo con el color especificado. Veamos un ejemplo de un rectángulo relleno:
[391]
Analizar datos de imagen Capítulo 13
# Muestra la imagen
plt.imshow (rectángulo)
En el ejemplo anterior, llenamos el rectángulo pasando valores de grosor como -1 px. En pocas palabras,
podemos decir que la línea toma principalmente los puntos inicial y final como entrada, el rectángulo
toma las coordenadas superior izquierda e inferior derecha, y el círculo toma coordenadas centrales y
valores de radio.
Escribir en imágenes
En la sección anterior, creamos varias formas en imágenes. Ahora, aprenderemos a escribir texto
en imágenes. Escribir texto en una imagen es similar a dibujar formas. Veamos un ejemplo de
escritura en una imagen:
# Mostrar la imagen
plt.imshow (texto)
[392]
Analizar datos de imagen Capítulo 13
En el ejemplo anterior, creamos una imagen en blanco con el color negro. Hemos escrito texto en
una imagen usando elputText () función. losputText () La función tomará los siguientes
argumentos: imagen, texto, coordenadas de la esquina inferior izquierda, fuente, fontScale,color,
grosor y tipo de línea.
Cambiar el tamaño de una imagen significa cambiar la dimensión o la escala de una imagen determinada. La escala o el cambio
de tamaño se realiza desde el ancho, el alto o ambos. Una de las aplicaciones de cambiar el tamaño de las imágenes es entrenar
modelos de aprendizaje profundo donde los tamaños de imagen reducidos pueden acelerar el entrenamiento. El entrenamiento
de un modelo de aprendizaje profundo está fuera del alcance de este libro. Si está interesado, puede consultar cualquier libro de
aprendizaje profundo de Packt Publishing. Veamos un ejemplo de cómo cambiar el tamaño de una imagen:
# leer imagen
imagen = cv2.imread ('tajmahal.jpg')
[393]
Analizar datos de imagen Capítulo 13
# Mostrar la imagen
plt.imshow (rgb_image)
# Mostrar la imagen
plt.imshow (tamaño_imagen)
[394]
Analizar datos de imagen Capítulo 13
En el ejemplo anterior, leemos la imagen, convertimos BGR a color RGB usando elcvtColor () función y
cambiar el tamaño de la imagen con la redimensionar () función. losredimensionar ()La función toma los
siguientes argumentos: imagen, tamaño e interpolación. La interpolación se utiliza para escalar imágenes
sin muaré. La interpolación toma uno de los siguientes indicadores:INTER_NEAREST (para la interpolación
del vecino más cercano), INTER_LINEAR (interpolación bilineal), y INTER_AREA (remuestreo usando la
relación de área de píxeles).
Voltear imágenes
Dar la vuelta a una imagen equivale a un efecto de espejo. Aprendamos a girar una imagen en elX eje
(volteo vertical), y eje (volteo horizontal), o ambos ejes. OpenCV ofrece lavoltear() función para voltear una
imagen. losvoltear() La función tomará dos argumentos: image y flipcode. La imagen es una matriz NumPy
de valores de píxeles y el código de cambio utilizado define el tipo de cambio, como horizontal, vertical o
ambos. Los siguientes valores de flipcode son para diferentes tipos de volteretas:
# Importar NumPy
importar numpy como np
# Leer imagen
imagen = cv2.imread ('messi.png')
# Mostrar la imagen
plt.imshow (rgb_image)
[395]
Analizar datos de imagen Capítulo 13
# Mostrar la imagen
plt.imshow (image_flip)
[396]
Analizar datos de imagen Capítulo 13
# Mostrar la imagen
plt.imshow (image_flip)
Puede ver la imagen volteada verticalmente. Volteemos la imagen original en ambos ejes:
# Mostrar la imagen
plt.imshow (image_flip)
[397]
Analizar datos de imagen Capítulo 13
Cambiar el brillo
El brillo es un término comparativo que está determinado por la percepción visual. A veces es difícil
percibir el brillo. El valor de la intensidad de los píxeles puede ayudarnos a encontrar una imagen más
brillante. Por ejemplo, si dos píxeles tienen los valores de intensidad 110 y 230, entonces el último es
más brillante.
En OpenCV, ajustar el brillo de la imagen es una operación muy básica. El brillo se puede
controlar cambiando la intensidad de cada píxel en una imagen:
# Leer imagen
imagen = cv2.imread ('naturaleza.jpeg')
# Mostrar la imagen
plt.imshow (rgb_image)
[398]
Analizar datos de imagen Capítulo 13
En el ejemplo de código anterior, hemos leído la imagen y convertido la imagen basada en el modelo
de color BGR en una imagen basada en el modelo de color RGB. Cambiemos el brillo de la imagen en el
siguiente bloque de código:
# Mostrar la imagen
plt.imshow (cambio_imagen)
En el ejemplo anterior, sumamos las dos matrices con el peso dado; alfa y beta usando el
addWeighted () función. addWeighted () toma los siguientes argumentos:
first_image, alpha, second_image, gamma, y beta. En nuestro ejemplo, el argumento
primera_imagen imagen de entrada y el argumento segunda_imagen es la matriz nula. Los
valores dealfa y beta son los pesos de ambas matrices y gama es 0.
[399]
Analizar datos de imagen Capítulo 13
# Leer imagen
imagen = cv2.imread ('tajmahal.jpg')
# Mostrar la imagen
plt.imshow (rgb_image)
En el ejemplo de código anterior, leemos la imagen y la convertimos de una imagen basada en BGR a RGB.
Vamos a difuminarlo usando eldifuminar() función. Blur toma dos argumentos: imagen y tamaño de kernel. los
difuminar() La función usa el método de desenfoque promedio:
# Mostrar la imagen
plt.imshow (image_blur)
[400]
Analizar datos de imagen Capítulo 13
En el ejemplo anterior, leemos la imagen, convertimos BGR a color RGB usando elcvtColor ()
función, y muestra la imagen. Aquí, difuminamos la imagen usando eldifuminar() función. los
difuminar() La función aplica el desenfoque promedio, que utiliza un filtro de cuadro normalizado.
losdifuminar() La función toma los siguientes argumentos: imagen y tamaño del núcleo.
Hemos visto una imagen borrosa con un desenfoque medio. Exploremos el desenfoque usando el desenfoque
gaussiano. En este desenfoque, se usa el kernel gaussiano en lugar de un filtro de caja.Desenfoque gaussiano()
tomará la imagen y el tamaño del kernel. El tamaño del kernel será una tupla del ancho y el alto. Tanto el ancho
como el alto deben ser un número positivo e impar:
# leer imagen
imagen = cv2.imread ('tajmahal.jpg')
[401]
Analizar datos de imagen Capítulo 13
# Mostrar la imagen
plt.imshow (image_blur)
# leer imagen
imagen = cv2.imread ('tajmahal.jpg')
# Mostrar la imagen
plt.imshow (image_blur)
[402]
Analizar datos de imagen Capítulo 13
En el bloque de código anterior, desenfocamos la imagen usando el desenfoque medio. Aquí, usamos el
medianBlur () método para el desenfoque medio y podemos observar la imagen desenfocada en la salida.
En esta sección, discutimos las técnicas de desenfoque promedio, desenfoque gaussiano y desenfoque
medio. En la siguiente sección, aprenderemos cómo detectar rostros humanos en imágenes.
Detección de rostro
Hoy en día, todo el mundo está usando Facebook y todos deben haber visto el reconocimiento facial en una imagen en
Facebook. El reconocimiento facial identifica a quién pertenece un rostro y la detección de rostros solo encuentra rostros
en una imagen, es decir, la detección de rostros no determina a quién pertenece el rostro detectado. La detección de
rostros en una imagen de entrada determinada es una funcionalidad bastante popular en muchas aplicaciones; por
ejemplo, contar el número de personas en una imagen. En la detección de rostros, el algoritmo intenta encontrar rostros
humanos en una imagen digital.
La detección de rostros es una especie de problema de clasificación. Podemos clasificar las imágenes en dos clases,
cara o no cara. Necesitamos muchas imágenes para entrenar tal modelo para la clasificación. Afortunadamente,
OpenCV ofrece modelos previamente entrenados como el clasificador en cascada basado en funciones de Haar y el
Patrón binario local (Dolor lumbar) clasificador, entrenado en miles de imágenes. En nuestro ejemplo, usaremos la
extracción de características de Haar para detectar una cara. Veamos cómo capturar una cara en una imagen usando
OpenCV:
[403]
Analizar datos de imagen Capítulo 13
# Leer imagen
imagen = cv2.imread ('messi.png')
[404]
Analizar datos de imagen Capítulo 13
En el ejemplo anterior, convertimos la imagen BGR en una imagen en escala de grises. OpenCV tiene
clasificadores entrenados previamente para la detección de rostros, ojos y sonrisas. Podemos usar un archivo
XML de clasificador en cascada de rostros previamente entrenado (haarcascade_frontalface_default.xml). Puede
obtener el archivo clasificador (haarcascade_frontalface_default.xml) desde el repositorio oficial de Git:
https: / / github. com / opencv / opencv / tree / master / data / haarcascades o puede obtenerlo de
nuestro repositorio de GitHub: https: / / github. com / PacktPublishing / Python- Data- Analysis-
Third- Edition / tree / master / Chapter13.
[405]
Analizar datos de imagen Capítulo 13
Después de esto, podemos pasar la imagen al clasificador en cascada y obtener las coordenadas de la cara
en la imagen. Hemos dibujado rectángulos en estas coordenadas faciales usando elrectángulo()función.
Antes de mostrar la salida, necesitamos convertir la imagen RGB a BGR para mostrarla correctamente.
Probemos este ejemplo en una imagen con varias caras:
# Leer la imagen
imagen = cv2.imread ('barcelona.jpeg')
En el ejemplo anterior, podemos ver que el programa ha detectado todas las caras en la imagen.
[406]
Analizar datos de imagen Capítulo 13
Resumen
En este capítulo, discutimos el procesamiento de imágenes usando OpenCV. El enfoque principal del capítulo fue sobre
las operaciones básicas de procesamiento de imágenes y la detección de rostros. El capítulo comenzó con una
introducción a los tipos de imágenes y modelos de color de imágenes. En secciones posteriores, la atención se centró en
operaciones de imagen como dibujar, cambiar el tamaño, voltear y desenfocar una imagen. En la última sección,
discutimos la detección de rostros en una imagen de entrada dada.
El próximo capítulo, Capítulo 14, Computación en paralelo con Dask, se centrará en el cálculo paralelo en
bibliotecas Python de ciencia de datos básica como Pandas, NumPy y scikitlearn utilizando Dask. El capítulo
comenzará con los tipos de datos de Dask, como marcos de datos, matrices y bolsas. En secciones
posteriores, cambiaremos el enfoque de dataFrames y matrices a algoritmos de aprendizaje automático, de
preprocesamiento y retrasados en paralelo utilizando Dask.
[407]
Computación en paralelo con Dask
--
Dask es una de las formas más sencillas de procesar sus datos de forma paralela. La plataforma es para los
amantes de los pandas que luchan con grandes conjuntos de datos. Dask ofrece escalabilidad de manera similar
a Hadoop y Spark y la misma flexibilidad que brindan Airflow y Luigi. Dask se puede usar para trabajar en pandas
DataFrames y matrices Numpy que no caben en la RAM. Divide estas estructuras de datos y las procesa en
paralelo mientras realiza cambios mínimos en el código. Utiliza la energía de su computadora portátil y tiene la
capacidad de ejecutarse localmente. También podemos implementarlo en grandes sistemas distribuidos a
medida que implementamos aplicaciones Python. Dask puede ejecutar datos en paralelo y procesarlos en menos
tiempo. También escala la potencia de cálculo de su estación de trabajo sin migrar a un entorno más grande o
distribuido.
El objetivo principal de este capítulo es aprender a realizar cálculos paralelos flexibles en grandes conjuntos de
datos utilizando Dask. La plataforma proporciona tres tipos de datos para la ejecución paralela: Dask Arrays,
Dask DataFrames y Dask Bags. La matriz Dask es como una matriz NumPy, mientras que Dask DataFrames son
como pandas DataFrames. Ambos pueden ejecutar datos en paralelo. Un Dask Bag es un contenedor para
objetos Python para que puedan realizar operaciones simultáneamente. Otro concepto que cubriremos en este
capítulo es Dask Delayed, que paraleliza el código. Dask también ofrece preprocesamiento de datos y desarrollo
de modelos de aprendizaje automático en modo paralelo.
¡Empecemos!
Computación en paralelo con Dask Capítulo 14
Dask ofrece conceptos similares a pandas, NumPy y Scikit-learn, lo que facilita el aprendizaje. Es una
biblioteca Python de computación paralela de código abierto que se ejecuta sobre pandas, Numpy y
Scikit-learn en múltiples núcleos de una CPU o múltiples sistemas. Por ejemplo, si una computadora
portátil tiene un procesador de cuatro núcleos, Dask utilizará 4 núcleos para procesar los datos. Si los
datos no caben en la RAM, se dividirán en trozos antes de procesarlos. Dask escala la capacidad de
pandas y NumPy para manejar conjuntos de datos moderadamente grandes. Entendamos cómo Dask
realiza operaciones en paralelo observando el siguiente diagrama:
[409]
Computación en paralelo con Dask Capítulo 14
Dask crea un gráfico de tareas para ejecutar un programa en modo paralelo. En el gráfico de tareas, los
nodos representan la tarea y los bordes entre los nodos representan la dependencia de una tarea sobre
otra.
Instalemos la biblioteca Dask en nuestro sistema local. De forma predeterminada, Anaconda ya tiene
Dask instalado, pero si desea reinstalar o actualizar Dask, puede usar el siguiente comando:
Con eso, hemos aprendido a instalar el dask biblioteca para ejecución rápida y en paralelo. Ahora,
veamos los tipos de datos centrales de la biblioteca Dask.
Los tipos de datos primarios son los tipos de datos básicos como int, float y char, mientras que los tipos de
datos secundarios se desarrollan utilizando tipos de datos primarios como listas, matrices, cadenas y
DataFrames. Dask ofrece tres estructuras de datos para operaciones paralelas: DataFrames, Bags y Arrays.
Estas estructuras de datos dividen los datos en varias particiones y los distribuyen a varios nodos del
clúster. Un Dask DataFrame es una combinación de múltiples pequeños pandas DataFrames y funciona de
manera similar. Las matrices Dask son como matrices NumPy y admiten todas las operaciones de Numpy.
Finalmente, Dask Bags se utilizan para procesar grandes objetos de Python.
Ahora es el momento de explorar estos tipos de datos. Comenzaremos con Dask Arrays.
[410]
Computación en paralelo con Dask Capítulo 14
Matrices Dask
Una matriz Dask es una abstracción de la matriz n-dimensional NumPy, procesada en paralelo y
dividida en múltiples submatrices. Estas pequeñas matrices pueden estar en máquinas remotas
distribuidas o locales. Dask Arrays puede calcular arreglos de gran tamaño utilizando todos los
núcleos disponibles en el sistema. Se pueden aplicar a estadísticas, optimización, bioinformática,
dominios comerciales, ciencias ambientales y muchos más campos. También admiten muchas
operaciones NumPy, como operaciones aritméticas y escalares, operaciones de agregación, matrices
y operaciones de álgebra lineal. Sin embargo, no admiten formas desconocidas. También elListar y
clasificar Las operaciones son difíciles de realizar en paralelo. Entendamos cómo Dask Arrays
descompone los datos en una matriz NumPy y los ejecutamos en paralelo observando el siguiente
diagrama:
Como podemos ver, hay varios bloques de diferentes formas, todos los cuales representan matrices
NumPy. Estas matrices forman una matriz Dask y se pueden ejecutar en varias máquinas. Creemos una
matriz usando Dask:
# Calcule la matriz
a.compute ()
[411]
Computación en paralelo con Dask Capítulo 14
En el ejemplo anterior, usamos el calcular() función para obtener el resultado final. losda.arange () La
función solo creará el gráfico computacional, mientras que la calcular()La función se utiliza para
ejecutar ese gráfico. Hemos generado 18 valores con un tamaño de fragmento de 4 usando el
da.arange () función. También revisemos los fragmentos en cada partición:
((4, 4, 4, 4, 2),)
En el ejemplo anterior, una matriz con 18 valores se particionó en cinco partes con un tamaño de
fragmento de 4, donde estos fragmentos iniciales tienen 4 valores cada uno y el último tiene 2 valores.
Dask DataFrames
Dask DataFrames son abstracciones de pandas DataFrames. Se procesan en paralelo y se dividen
en múltiples DataFrames de pandas más pequeños, como se muestra en el siguiente diagrama:
[412]
Computación en paralelo con Dask Capítulo 14
Tiempos de CPU: usuario 17,1 ms, sys: 8,34 ms, total: 25,4 ms
Tiempos de CPU: usuario 18,8 ms, sys: 5,08 ms, total: 23,9 ms
En ambos ejemplos, podemos observar que el tiempo de ejecución para la lectura de datos se reduce
cuando se usa el Dask read_csv () función.
Indexación de DataFrame
Dask DataFrames admite dos tipos de índice: indexación posicional y basada en etiquetas. El principal
problema con Dask Indexing es que no mantiene la información de la partición. Esto significa que es
difícil realizar la indexación de filas; solo es posible la indexación de columnas.DataFrame.iloc solo admite
la indexación basada en números enteros, mientras que DataFrame.loc admite la indexación basada en
etiquetas. DataFrame.iloc solo selecciona columnas.
[413]
Computación en paralelo con Dask Capítulo 14
PQ
pág. 10 40
q 20 50
r 30 60
nparticiones = 1
p int64
r ...
Nombre: P, dtype: int64
Dask Name: getitem, 2 tareas
[414]
Computación en paralelo con Dask Capítulo 14
QP
nparticiones = 1
p int64 int64
r ... ...
XY
0 11 41
1 12 51
2 13 61
[415]
Computación en paralelo con Dask Capítulo 14
YX
0 41 11
1 51 12
2 61 13
6. Si intentamos seleccionar todas las filas, obtendremos un NotImplementedError, como se muestra aquí:
En el bloque de código anterior, podemos ver que el DataFrame.iloc solo admite la selección de
columnas.
Filtrar datos
Podemos filtrar los datos de un Dask DataFrame de manera similar a como lo haríamos para un
Pandas DataFrame. Echemos un vistazo al siguiente ejemplo:
[416]
Computación en paralelo con Dask Capítulo 14
En el código anterior, leemos el archivo CSV de recursos humanos usando el read_csv ()función en
el Dask DataFrame. Esta salida solo muestra algunas de las columnas. Sin embargo, cuando
ejecute el cuaderno usted mismo, podrá ver todas las columnas disponibles. Filtremos los
empleados con salarios bajos en el conjunto de datos:
En el código anterior, filtramos a los empleados con salarios bajos a través de la condición entre
paréntesis.
Agrupar por
los agrupar por La operación se utiliza para agregar elementos similares. Primero, divide los datos en función de
los valores, encuentra un agregado de valores similares y combina los resultados agregados. Esto se puede ver
en el siguiente código:
# Encuentre los valores promedio de todas las columnas para el empleado que se fue o se quedó
ddf.groupby ('izquierda'). mean (). compute ()
[417]
Computación en paralelo con Dask Capítulo 14
tipo (ddf)
dask.dataframe.core.DataFrame
tipo (pd_df)
[418]
Computación en paralelo con Dask Capítulo 14
pandas.core.frame.DataFrame
Bolsas Dask
Un Dask Bag es una abstracción sobre objetos genéricos de Python. Realizamapa, filtro, plegado,y agrupar por
operaciones en la interfaz paralela de objetos Python más pequeños usando un iterador Python. Esta ejecución
es similar a PyToolz o PySpark RDD. Dask Bags es más adecuado para conjuntos de datos semiestructurados y
no estructurados, como archivos de texto, JSON y de registro. Realizan multiprocesamiento para la computación
para un procesamiento más rápido, pero no funcionan bien con la comunicación entre trabajadores. Las bolsas
son tipos inmutables de estructuras que no se pueden cambiar y son más lentas en comparación con Dask
Arrays y DataFrames. Las bolsas también funcionan lentamente en elagrupar por operación, por lo que se
recomienda que utilice doblarse en lugar de
agrupar por.
(1, 2)
[419]
Computación en paralelo con Dask Capítulo 14
[1, 3, 5, 7, 9]
En el código anterior, filtramos los números impares de la bolsa de listas usando elfiltrar()
método. Ahora, cuadremos cada elemento de la bolsa usando elmapa función:
En el código anterior, usamos el mapa() función para mapear los artículos de la bolsa. Asignamos estos
elementos a su valor cuadrado.
En el código anterior, leemos un archivo de texto en un bolsa dask objeto utilizando el Lea el texto()método.
Esto nos permitió mostrar los dos elementos iniciales en el Dask Bag.
[420]
Computación en paralelo con Dask Capítulo 14
['/path/to/data/0.text.gz']
[421]
Computación en paralelo con Dask Capítulo 14
Dask retrasado
Dask Delayed es un enfoque que podemos utilizar para paralelizar el código. Puede retrasar las llamadas a
funciones dependientes en los gráficos de tareas y proporciona al usuario un control completo sobre los procesos
paralelos al tiempo que mejora el rendimiento. Su cálculo lento nos ayuda a controlar la ejecución de funciones. Sin
embargo, esto difiere de los tiempos de ejecución de las funciones para la ejecución en paralelo.
33,0
En el ejemplo anterior, dos métodos, cubo y promedio, fueron anotados con@ dask.delayed. Se creó
una lista de tres números y se calculó un cubo que contiene cada valor. Después de calcular el cubo
de valores de lista, calculamos el promedio de todos los valores. Todas estas operaciones son de
naturaleza perezosa y se calculan más tarde cuando se espera la salida del programador y el flujo
de ejecución se almacena en un gráfico computacional. Ejecutamos esto usando elcalcular()
método. Aquí, todas las operaciones del cubo se ejecutarán de forma paralela.
[422]
Computación en paralelo con Dask Capítulo 14
Ahora, visualizaremos el gráfico computacional. Sin embargo, antes de que podamos hacer esto,
necesitamos instalar el editor Graphviz.
En Windows, podemos instalar Graphviz usando pepita. También debemos establecer la ruta en una
variable de entorno:
[423]
Computación en paralelo con Dask Capítulo 14
Escalador Descripción
MinMaxScaler Transforma las características al escalar cada característica a un rango dado Escala
Escalador robusto las características usando estadísticas que son robustas a valores atípicos
Escalador estándar Estandariza las características eliminando la media y escalando a la varianza de la unidad
[424]
Computación en paralelo con Dask Capítulo 14
En el código anterior, leemos el archivo CSV de recursos humanos usando el read_csv ()función en
un Dask DataFrame. El resultado anterior solo muestra algunas de las columnas que están
disponibles. Sin embargo, cuando ejecute el cuaderno usted mismo, podrá ver todas las columnas
del conjunto de datos. Ahora, escalemos ellast_evalaution columna (última puntuación de
rendimiento evaluada):
# Importar MinMaxScaler
desde sklearn.preprocessing import MinMaxScaler
matriz ([[26.5625],
[78.125],
[81.25],
...,
[26.5625],
[93,75],
[25. ]])
[425]
Computación en paralelo con Dask Capítulo 14
Codificador Descripción
Codifica etiquetas con un valor entre 0 y 1 que es menor que el número de
LabelEncoder
clases disponibles.
OneHotEncoder Codifica características enteras categóricas como una codificación one-
Codificador ordinal hot. Codifica una columna categórica como variable ordinal.
[426]
Computación en paralelo con Dask Capítulo 14
En el código anterior, leemos el archivo CSV de recursos humanos usando el read_csv ()función en
un Dask DataFrame. El resultado anterior solo muestra algunas de las columnas que están
disponibles. Sin embargo, cuando ejecute el cuaderno usted mismo, podrá ver todas las columnas
del conjunto de datos. Ahora, escalemos ellast_evalaution columna (última puntuación de
rendimiento evaluada):
Del mismo modo, también podemos codificar la columna Salario utilizando el codificador ordinal. Echemos un vistazo a
un ejemplo:
[427]
Computación en paralelo con Dask Capítulo 14
salario
00
11
21
30
40
Podemos escalar scikit-learn de tres formas diferentes: paralelizar scikit-learn usando joblib mediante
el uso de bosque aleatorio y SVC; Reimplementar algoritmos usando Dask Arrays usando modelos
lineales generalizados, preprocesamiento y agrupamiento; y asócielo con bibliotecas distribuidas como
XGBoost y Tensorflow.
[428]
Computación en paralelo con Dask Capítulo 14
1. Primero, necesitamos leer el conjunto de datos. Podemos cargar el conjunto de datos usando un
DataFrame de pandas, así:
2. A continuación, debemos seleccionar las columnas dependientes e independientes. Para hacer esto,
seleccione las columnas y divida los datos en variables dependientes e independientes, de la siguiente
manera:
label = df ['izquierda']
[429]
Computación en paralelo con Dask Capítulo 14
# Importar cliente
desde dask.distributed import Client
# import dask_ml.joblib
de sklearn.externals.joblib importar paralelo_backend
estado_aleatorio = 0)
# Instanciar modelo RandomForest
modelo = RandomForestClassifier ()
# Encajar el modelo
model.fit (X_train, y_train)
Precisión: 0,92
El modelo de bosque aleatorio generado en paralelo anterior nos ha dado un 92% de precisión, lo cual es muy
bueno.
[430]
Computación en paralelo con Dask Capítulo 14
Regresión logística
Construyamos un clasificador usando regresión logística:
[431]
Computación en paralelo con Dask Capítulo 14
4. Cree una instancia del modelo y ajústelo a un conjunto de datos de entrenamiento. Ahora, puede predecir los datos
de prueba y calcular la precisión del modelo, de la siguiente manera:
# Encajar el modelo
model.fit (X_train, y_train)
Precisión: 0,7753333333333333
Como podemos ver, el modelo ofrece una precisión del 77,5%, lo que se considera
bueno.
[432]
Computación en paralelo con Dask Capítulo 14
Agrupación
Los desarrolladores de Dask también han vuelto a implementar varios algoritmos de agrupación de k-means.
Realicemos la agrupación en clústeres usando Dask:
2. A continuación, seleccione la columna requerida para la agrupación en clústeres de k-medias. Hemos seleccionado el
nivel_de_saatisfacción y last_evaluation columnas aquí:
3. Ahora, creemos un modelo de agrupación en clústeres de k-medias. Primero, importe k-means. Una vez que
haya importado las bibliotecas necesarias, colóquelas en el conjunto de datos y obtenga las etiquetas
necesarias. Podemos encontrar estas etiquetas usando elcalcular() método:
[433]
Computación en paralelo con Dask Capítulo 14
# Encajar el modelo
model.fit (datos)
# Importar matplotlib.pyplot
importar matplotlib.pyplot como plt
# Prepare x, y y cluster_labels
x = datos [:, 0] .compute ()
y = datos [:, 1] .compute ()
cluster_labels = label.compute ()
# Muestra la trama
plt.show ()
[434]
Computación en paralelo con Dask Capítulo 14
Resumen
En este capítulo, nos enfocamos en cómo realizar cálculos paralelos en bibliotecas Python de ciencia de
datos básica como pandas, Numpy y scikit-learn. Dask proporciona una abstracción completa para
DataFrames y Arrays para procesar conjuntos de datos moderadamente grandes en máquinas de
núcleo único / múltiple o múltiples nodos en un clúster.
Comenzamos este capítulo analizando los tipos de datos de Dask como DataFrames, Arrays y Bags.
Después de eso, nos enfocamos en Dask Delayed, preprocesamiento y algoritmos de aprendizaje
automático en un entorno paralelo.
[435]
Computación en paralelo con Dask Capítulo 14
Este fue el último capítulo de este libro, lo que significa que nuestro viaje de aprendizaje termina aquí.
Nos hemos centrado en las bibliotecas centrales de Python para el análisis de datos y el aprendizaje
automático, como pandas, Numpy, Scipy y scikit-learn. También nos hemos centrado en las bibliotecas de
Python que se pueden utilizar para análisis de texto, análisis de imágenes y cálculo paralelo como NLTK,
spaCy, OpenCV y Dask. Por supuesto, su proceso de aprendizaje no necesita detenerse aquí; siga
aprendiendo cosas nuevas y sobre los últimos cambios. Intente explorar y cambiar el código según las
necesidades de su negocio o cliente. También puede iniciar proyectos privados o personales con fines de
aprendizaje. Si no puede decidir qué tipo de proyecto desea iniciar, puede participar en los concursos de
Kaggle enhttp: / / www. kaggle. com / ¡y más!
[436]