Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

Una introducción amigable al análisis de datos en Python

1 TBSV23ud8tae3E4szI5EDA 1
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

A lo largo de los años, el uso de Python para la ciencia de datos ha crecido increíblemente y sigue creciendo a diario.

Ciencia de los datos es un vasto campo de estudio con una gran cantidad de subcampos, de los cuales el análisis de datos es indiscutiblemente uno de los más importantes de todos estos campos, e independientemente del nivel de habilidad en la ciencia de datos, se ha vuelto cada vez más importante comprender o tener en al menos un conocimiento básico de la misma.

¿Qué es el análisis de datos?

El análisis de datos es la limpieza y transformación de una gran cantidad de datos no estructurados o desorganizados, con el objetivo de generar conocimientos e información clave sobre estos datos que ayudarían a tomar decisiones informadas.

Hay varios herramientas utilizadas para el análisis de datos, Python, Microsoft Excel, Tableau, SaS, etc., pero en este artículo nos centraremos en cómo se realiza el análisis de datos en Python. Más específicamente, cómo se hace con una biblioteca de Python llamada pandas.

¿Qué es Pandas?

Pandas es una biblioteca de Python de código abierto que se utiliza para la manipulación y el forcejeo de datos. Es rápido y altamente eficiente y tiene herramientas para cargar varios tipos de datos en la memoria. Se puede utilizar para remodelar, etiquetar segmentos, indexar o incluso agrupar varias formas de datos.

Estructuras de datos en Pandas

Hay 3 estructuras de datos en Pandas, a saber;

  • Serie
  • Marco de datos
  • Panel

La mejor manera de diferenciar los tres es ver que uno contiene varias pilas del otro. Entonces, un DataFrame es una pila de series y un Panel es una pila de DataFrames.

Una serie es una matriz unidimensional

Una pila de varias series crea un DataFrame bidimensional

Una pila de varios DataFrames crea un panel tridimensional

La estructura de datos con la que trabajaríamos más es el DataFrame bidimensional, que también puede ser el medio de representación predeterminado para algunos conjuntos de datos con los que nos podamos encontrar.

Análisis de datos en pandas

Para este artículo, no se necesita instalación. Estaríamos usando una herramienta llamada colaboratorio creado por Google. Es un entorno de Python en línea para análisis de datos, aprendizaje automático e inteligencia artificial. Es simplemente una nube  Cuaderno Jupyter que viene preinstalado con casi todos los paquetes de Python que necesitaría como científico de datos.

Ahora, dirígete a https://colab.research.google.com/notebooks/intro.ipynb. Debería ver lo siguiente.

En la navegación superior izquierda, haga clic en la opción de archivo y haga clic en la opción "nuevo cuaderno". Verías una nueva Cuaderno Jupyter página cargada en su navegador. Lo primero que debemos hacer es importar pandas a nuestro entorno de trabajo. Podemos hacerlo ejecutando el siguiente código;

import pandas as pd

Para este artículo, estaríamos usando un conjunto de datos de precios de la vivienda para nuestro análisis de datos. El conjunto de datos que estaríamos usando se puede encontrar aquí. Lo primero que nos gustaría hacer es cargar este conjunto de datos en nuestro entorno.

Podemos hacer eso con el siguiente código en una nueva celda;

df =  pd.read_csv('https://firebasestorage.googleapis.com/v0/b/ai6-portfolio-abeokuta.appspot.com/o/kc_house_data.csv?alt=media &token=6a5ab32c-3cac-42b3-b534-4dbd0e4bdbc0 ', sep=',')

El .read_csv se usa cuando queremos leer un archivo CSV y pasamos una propiedad sep para mostrar que el archivo CSV está delimitado por comas.

También debemos tener en cuenta que nuestro archivo CSV cargado se almacena en una variable df .

No necesitamos usar el print() función en Jupyter Notebook. Simplemente podemos escribir el nombre de una variable en nuestra celda y Jupyter Notebook lo imprimirá.

Podemos probar eso escribiendo df  en una nueva celda y ejecutándolo, imprimirá todos los datos en nuestro conjunto de datos como un DataFrame para nosotros.

Pero no siempre queremos ver todos los datos, a veces solo queremos ver los primeros datos y los nombres de sus columnas.  Podemos usar el df.head() función para imprimir las primeras cinco columnas y df.tail() para imprimir los últimos cinco. La salida de cualquiera de los dos se vería así;

Querríamos verificar las relaciones entre estas varias filas y columnas de datos. los .describe() La función hace exactamente esto por nosotros.

 Ejecutar df.describe () da la siguiente salida;

Inmediatamente podemos ver que el .describe() da la media, la desviación estándar, los valores mínimos y máximos y los percentiles de todas y cada una de las columnas del DataFrame. Esto es particularmente útil.

También podemos verificar la forma de nuestro DataFrame 2D para saber cuántas filas y columnas tiene. Podemos hacer eso usando df.shape que devuelve una tupla en el formato (filas, columnas).

También podemos verificar los nombres de todas las columnas en nuestro DataFrame usando df.columns.

¿Qué pasa si queremos seleccionar solo una columna y devolver todos los datos en ella? Esto se hace de una manera similar a rebanar un diccionario. Escriba el siguiente código en una nueva celda y ejecútelo

df['price ']

El código anterior devuelve la columna de precio, podemos ir más allá guardándolo en una nueva variable como tal

price = df['price']

Ahora podemos realizar todas las demás acciones que se pueden realizar en un DataFrame en nuestra variable de precio, ya que es solo un subconjunto de un DataFrame real. Podemos hacer cosas como df.head(), df.shape etc ..

También podríamos seleccionar varias columnas pasando una lista de nombres de columnas a df como tal

data = df[['price ', 'bedrooms']]

Lo anterior selecciona columnas con los nombres 'precio' y 'dormitorios', si escribimos data.head() en una nueva celda, tendríamos lo siguiente

La forma anterior de dividir columnas devuelve todos los elementos de fila en esa columna, ¿qué pasa si queremos devolver un subconjunto de filas y un subconjunto de columnas de nuestro conjunto de datos? Esto se puede hacer usando .iloc y está indexado de una manera similar a las listas de Python. Entonces podemos hacer algo como

df.iloc[50: , 3]

Lo que devuelve la tercera columna desde la fila 3 hasta el final. Es bastante ordenado y es lo mismo que cortar listas en Python.

Ahora hagamos algunas cosas realmente interesantes, nuestro conjunto de datos de precios de vivienda tiene una columna que nos dice el precio de una casa y otra columna nos dice la cantidad de habitaciones que tiene esa casa en particular. El precio de la vivienda es un valor continuo, por lo que es posible que no tengamos dos casas que tengan el mismo precio. Pero el número de dormitorios es algo discreto, por lo que podemos tener varias viviendas de dos, tres, cuatro dormitorios, etc.

¿Qué pasa si queremos obtener todas las casas con el mismo número de dormitorios y encontrar el precio medio de cada dormitorio discreto? Es relativamente fácil hacer eso en pandas, se puede hacer como tal;

df.groupby('bedrooms ')['price '].mean()

Lo anterior primero agrupa el DataFrame por los conjuntos de datos con un número de dormitorio idéntico usando df.groupby() función, luego le decimos que nos dé solo la columna del dormitorio y use la .mean() función para encontrar la media de cada casa en el conjunto de datos.

¿Y si queremos visualizar lo anterior? ¿Nos gustaría poder comprobar cómo varía el precio medio de cada número de dormitorio distinto? Solo necesitamos encadenar el código anterior a un .plot() funcionar como tal;

df.groupby('bedrooms ')['price '].mean().plot()

Tendremos una salida que se ve como tal;

Lo anterior nos muestra algunas tendencias en los datos. En el eje horizontal, tenemos un número distinto de dormitorios (tenga en cuenta que más de una casa puede tener X número de dormitorios). En el eje vertical, tenemos la media de los precios con respecto al número correspondiente de dormitorios en el horizontal. eje. Ahora podemos notar inmediatamente que las casas que tienen entre 5 y 10 dormitorios cuestan mucho más que las casas con 3 dormitorios. También resultará obvio que las casas que tienen alrededor de 7 u 8 habitaciones cuestan mucho más que aquellas con 15, 20 o incluso 30 habitaciones.

La información como la anterior es la razón por la que el análisis de datos es muy importante, podemos extraer información útil de los datos que no es inmediatamente o imposible de notar sin un análisis.

Datos perdidos

Supongamos que estoy realizando una encuesta que consta de una serie de preguntas. Comparto un enlace a la encuesta con miles de personas para que puedan dar sus comentarios. Mi objetivo final es ejecutar un análisis de datos sobre estos datos para poder obtener información clave de los datos.

Ahora, muchas cosas podrían salir mal, algunos topógrafos pueden sentirse incómodos al responder algunas de mis preguntas y dejarlo en blanco. Mucha gente podría hacer lo mismo con varias partes de las preguntas de mi encuesta. Es posible que esto no se considere un problema, pero imagínese si estuviera recopilando datos numéricos en mi encuesta y una parte del análisis requiriera que obtuviera la suma, la media o alguna otra operación aritmética. Varios valores faltantes darían lugar a muchas inexactitudes en mi análisis, tengo que encontrar una manera de encontrar y reemplazar estos valores faltantes con algunos valores que podrían ser un sustituto cercano de ellos.

Pandas nos proporciona una función para encontrar valores faltantes en un DataFrame llamado isnull().

El isnull() la función se puede utilizar como tal;

df.isnull()

Esto devuelve un DataFrame de valores booleanos que nos dice si los datos originalmente presentes allí estaban Verdaderamente faltantes o Falsamente. La salida se vería así;


Necesitamos una forma de poder reemplazar todos estos valores perdidos; la mayoría de las veces, la elección de los valores perdidos se puede tomar como cero. En ocasiones, podría tomarse como la media de todos los demás datos o quizás la media de los datos que lo rodean, según el científico de datos y el caso de uso de los datos que se analizan.

Para completar todos los valores faltantes en un DataFrame, usamos el .fillna() función utilizada como tal;

df.fillna(0)

En lo anterior, estamos completando todos los datos vacíos con valor cero. También podría ser cualquier otro número que especifiquemos.

La importancia de los datos no se puede exagerar, ¡nos ayuda a obtener respuestas directamente de nuestros propios datos !. El análisis de datos, dicen, es el nuevo petróleo para las economías digitales.

Todos los ejemplos de este artículo se pueden encontrar aquí.

Para obtener más información en profundidad, consulte Curso online de Análisis de datos con Python y Pandas.

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder