Introducción a Pandas – Lección 3

Compartir esta publicación

Introducción

Comenzamos con el tercer post de nuestra saga de formación en ciencia de datos con Pandas. En este artículo vamos a hacer un resumen de las diferentes funciones que se utilizan en Pandas para realizar Iteración, Mapas, Agrupación y Ordenación. Estas funciones nos permiten realizar transformaciones de los datos dándonos información y conocimientos útiles.

Iteración, mapas, agrupación y clasificación

El conjunto de datos de 2009 ‘Wine Quality Dataset‘ realizado por Cortez et al. disponible en UCI Machine Learning , es un conocido conjunto de datos que contiene información sobre la calidad del vino. Incluye datos sobre las propiedades fisicoquímicas del vino tinto y blanco y una puntuación de calidad. 

Antes de empezar, vamos a visualizar una cabeza de nuestro conjunto de datos didácticos que vamos a seguir para mostrar los ejemplos utilizando la función pandas head. 

DMnGnN8fXlizhiIx5pyQ1GiyU5nf wnrHL31tWGy07sPB0O3UOezZ7whwcQNwRhrlVR3gH0SLk0M1ex4rr3ikZpNzwec5ogzex6XeMMRa

Iteración

Comenzamos con las funciones relacionadas con la iteración a través de un conjunto de datos. Es posible que queramos utilizar esta función cuando queramos iterar fila por fila.

El comportamiento de la iteración básica sobre objetos Pandas depende del tipo. Cuando se itera sobre una Serie, se considera como un array, y la iteración básica produce los valores. Otras estructuras de datos, como DataFrame y Panel, siguen la convención de iterar sobre las claves de los objetos.

Si iteramos sobre un DataFrame, obtenemos los nombres de las columnas.

for element in df:
    print(element)


fixed acidity           
volatile acidity       
citric acid              
residual sugar       
chlorides               
free sulfur dioxide     
total sulfur dioxide    
density    
pH           
sulphates
alcohol
quality

Para iterar sobre las filas del DataFrame, podemos utilizar las siguientes funciones:

Item

En consonancia con la interfaz tipo dictado, items() e iteritems() iteran a través de pares clave-valor:

  Entrevista sobre machine learning con Gema Parreño - Científica Principal de Datos en Apiumhub

+ Series: (índice, valor escalar) pares

+ DataFrame: (columna, Serie) pares

for key, value in wines.items():
    print(key)
    print(value)
    
    
    fixed acidity
0        7.4
1        7.8
2        7.8
3       11.2
4        7.4
        ... 
1594     6.2
1595     5.9
1596     6.3
1597     5.9
1598     6.0
Name: fixed acidity, Length: 1599, dtype: float64
volatile acidity
0       0.700
1       0.880
2       0.760
3       0.280
4       0.700
        ...

Iterrows

Permite iterar a través de las filas de un DataFrame como objetos Series. Devuelve un iterador que produce cada valor de índice junto con una Serie que contiene los datos de cada fila:

for row_index, row in wines.iterrows():
    print(row_index, row, sep="\n")
    
    0
fixed acidity            7.4000
volatile acidity         0.7000
citric acid              0.0000
residual sugar           1.9000
chlorides                0.0760
free sulfur dioxide     11.0000
total sulfur dioxide    34.0000
density                  0.9978
pH                       3.5100
sulphates                0.5600
alcohol                  9.4000
quality                  5.0000
Name: 0, dtype: float64
1
fixed acidity            7.8000
volatile acidity         0.8800
citric acid              0.0000
residual sugar           2.6000
chlorides                0.0980
free sulfur dioxide     25.0000
total sulfur dioxide    67.0000
density                  0.9968
pH                       3.2000
sulphates                0.6800
alcohol                  9.8000
quality                  5.0000
Name: 1, dtype: float64
2
fixed acidity            7.800
volatile acidity         0.760
citric acid              0.040
residual sugar           2.300
...

Itertuples

El método itertuples() devolverá un iterador con una tupla con nombre para cada fila del DataFrame. El primer elemento de la tupla será el valor de índice correspondiente a la fila, mientras que los valores restantes son los valores de la fila.

for row in wines.itertuples():
    print(row)    

Pandas(Index=0, _1=7.4, _2=0.7, _3=0.0, _4=1.9, chlorides=0.076, _6=11.0, _7=34.0, density=0.9978, pH=3.51, sulphates=0.56, alcohol=9.4, quality=5)
Pandas(Index=1, _1=7.8, _2=0.88, _3=0.0, _4=2.6, chlorides=0.098, _6=25.0, _7=67.0, density=0.9968, pH=3.2, sulphates=0.68, alcohol=9.8, quality=5)
...

Conclusión

La biblioteca Pandas nos ha proporcionado 3 funciones diferentes que facilitan relativamente la iteración sobre los conjuntos de datos dados. Son:

iteritems(): Esta función de la librería Pandas ayuda al usuario a iterar sobre todos y cada uno de los elementos presentes en el conjunto, por columnas. Esta función será útil en el caso de que queramos buscar algo fila por fila pero columna por columna. De esta manera no hay que iterar sobre todas las columnas.

  Simula tus pruebas de UI con Wiremock

iterrows(): Esta función de la librería Pandas ayuda al usuario a iterar sobre todos y cada uno de los elementos presentes en el conjunto, fila a fila. Esta función será útil en caso de que queramos iterar fila por fila para poder buscar un valor de fila específico sin iterar todo el conjunto de datos. 

itertuple(): Esta función de la librería Pandas ayuda al usuario a iterar sobre cada fila presente en el conjunto de datos mientras se forma una tupla con los datos dados. Esta función será útil cuando necesitemos iterar fila por fila pero la salida tiene que tener formato de tupla.

Mapas

Continuamos con las dos funciones más importantes para mapear una Serie o Conjunto de Datos.

Mapa

La función Pandas map() se utiliza para mapear cada valor de un objeto Serie a otro valor utilizando un diccionario/función/Serie.Es una función de conveniencia para mapear valores de una Serie de un dominio a otro dominio, ya que nos permite realizar una operación de transformación de todas las filas de una columna determinada en un conjunto de datos.

Por ejemplo, podemos transformar la serie obtenida de la columna `densidad` ejecutando una función que multiplique cada uno de sus valores por 100.

data['density'].map(lambda x: x * 100)    

0       99.780
1       99.680
2       99.700
3       99.800
4       99.780
         ...  
1594    99.490
1595    99.512
1596    99.574
1597    99.547
1598    99.549
Name: density, Length: 1599, dtype: float64...

Aplica

Se pueden aplicar funciones arbitrarias a lo largo de los ejes de un DataFrame utilizando el método aplicar(), que, al igual que los métodos de estadística descriptiva, toma un argumento de eje opcional:

Por ejemplo, podemos restaurar los valores de la columna `densidad` ejecutando una función que divida cada uno de sus valores por 100, sin tener que extraer las Series del Dataframe ya que la función maps trabaja con Dataframes.

def divide_by_100(x):
    x.density = x.density / 100
    return x

data.apply(divide_by_100, axis='columns')

S7BP zBf ZHVKdSeaGDJuWiiVI tZ4Tvj2md nAspc1s8m6F3zW12T7C wrpbpZsXrnz3h7jpD1TFr5m3o3Ooyqx0ou gOG9NZKAxT03uawAK vHkNSsD8Gg4SqVOmzKvgpdg25f=s0

Agrupación

La definición abstracta de agrupación es proporcionar un mapeo de etiquetas a nombres de grupos. Para crear un objeto GroupBy agrupando por `calidad` se puede hacer lo siguiente:

wines.groupby(["quality"]).quality.count()

quality
3     10
4     53
5    681
6    638
7    199
8     18
Name: quality, dtype: int64

También puedes crear el objeto GroupBy y aplicar una función personalizada, por ejemplo en este caso vamos a agrupar por `calidad` y `alcohol` y obtener la mayor densidad de cada uno:

wines.groupby(['quality', 'alcohol']).apply(lambda df: df.loc[df.density.idxmax()])

0vXl9g0fFcD oH dPoMbdik9opotd7x3cHoF3UHd eK iosmSn1f3VqQvjdzMJxmb0HPLS0

Por último, dentro del apartado de agrupación, una de las funciones más útiles en el análisis de datos es la función de agregación.

  Pinia como alternativa a Vuex

En este caso vamos a agrupar por `calidad` y vamos a obtener el valor máximo y mínimo de `alcohol` para cada grupo.

wines.groupby(['quality']).alcohol.agg([min, max])

lrwbfT H6MM6v jb8cHFeilj CYua90yG6r9 jCGyjnGtd j876Ey11aERP9ftXy92gQ1YPL ZSU7f0kNSaUM74fXIOeknRV EvzyKe K0WvJLotwCE0CKZK4TWsU2T1dNKqp0Q=s0

Clasificación

En este caso vamos a utilizar un conjunto de datos diferente para explicar claramente toda la funcionalidad de ordenación dentro de Pandas. Para ello vamos a observar primero el pequeño conjunto de datos de ejemplo que vamos a manipular al que llamaremos `unsorted_df`:

nGTN6DveDXKuA8hAgKew4FvlH17gg kkexiDhP

+ Ordenar por índice

unsorted_df.sort_index()

llQLVBys4nN1x1kCyaY o6zt0x42KDGG8suFS qYeCMClP10kLlEiXRXKm BtXoUMptrdbsyFKiGd334O1n6RIUeCg

+ Ordenar por índice de forma descendente

unsorted_df.sort_index(ascending=False)

zTnUOge3yx1NXj9mhSKTg2h1Ij oc4ECrJysD3SqURZ1SdpcslVcq1M YBbhI7JOJwhwancyq8k5yDIm6TwOWBwSGZ2BCN4duduXx ijoaCvj16I2MGfpXcB QzUIbqBSm6RCSUL=s0

+ Ordenar por columnas

unsorted_df.sort_index(axis=1)

rzWy8T567k3uelJM4j7lHgUo1 KUaJtFr1kUeHU BKrxqajjKNAqj0MpSmTuffBQ95Gy2SPnv744G

+ Ordenar por valores

unsorted_df.sort_values(by="two")

11s11ew3gPhPXYcXKqbDYwmbvcrkoAWoTCqmK0YmXxjBhO3K6E8CpWSvcJGea9iGIS4FzNZsBvp4kUWzlWbPA3bZhrdPDP3QEKLPfU3YEACLHI2avNkipbj szh29ffopg4XeFeH=s0

Entrenando tus habilidades

Si quieres incrementar tus habilidades aún más en Ciencia de Datos, hemos creado un curso que puedes descargar gratuitamente aquí.

En el próximo capítulo, profundizaremos en las funciones que utilizamos para el tratamiento de los datos que faltan.

Author

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Suscríbete a nuestro boletín de noticias

Recibe actualizaciones de los últimos descubrimientos tecnológicos

¿Tienes un proyecto desafiante?

Podemos trabajar juntos

apiumhub software development projects barcelona
Secured By miniOrange