Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Evidencia 3 Theta
Evidencia 3 Theta
Mounted at /content/drive
[5]: df
1
1612 1613 1 3 2018-11-18 2018-11-18
1613 1614 135 3 2018-11-28 2018-11-28
1614 1615 136 3 2018-12-28 2018-12-28
##Ejercicios
###Ejercicio 1 Obtener cuales son los 5 clientes con mas ordenes en la base de datos.
Empezamos organizando las ordenes confomre a los clientes que lo solicitaron para tener un mejor
estetica.
Despues realziamos lo que es un ordenamiento del DataFrame por la columna ‘customer_id’: donde
se ordeno el DataFrame df según la columna ‘customer_id’ en orden ascendente (de menor a mayor),
y el resultado se guardo en un nuevo DataFrame llamado df_sorted.
continuamos con la obtención de los 5 clientes con más órdenes:Donde se cuentan las ocurren-
cias de cada valor de ‘customer_id’ en el DataFrame ordenado df_sorted, utilizando el método
value_counts(). Luego, se seleccionan los primeros 5 valores (los clientes con más órdenes) y se
almacenan en la variable top_5_customers.
Seguimos con la obtención de los índices de los 5 clientes con más órdenes: Donde se obtienen
los índices (es decir, los valores de ‘customer_id’) de los 5 clientes con más órdenes, utilizando
el atributo index del objeto top_5_customers, y se convierten en una lista utilizando el método
tolist(). Estos índices se almacenan en la variable top_5_customer_indices.
Casi terminando hacemos lo que es un filtrado de los datos para obtener los 5 clientes con más
órdenes: En donde se filtran las filas del DataFrame df_sorted para incluir solo aquellas que
tienen ‘customer_id’ en la lista de los 5 clientes con más órdenes (top_5_customer_indices). El
resultado se guarda en un nuevo DataFrame llamado top_5_customers_. Acabamos imprimiendo
los 5 clientes con más órdenes
[6]: #comenzamos organizando los clientes junto con los pedidos que reañizaron, para␣
↪asi tener un mejor arreglo de los clientes que cuentan con más ordenes.
df.sort_values(by=['customer_id'], ascending=True)
2
[6]: order_id customer_id order_status order_date required_date \
1612 1613 1 3 2018-11-18 2018-11-18
598 599 1 4 2016-12-09 2016-12-10
1554 1555 1 1 2018-04-18 2018-04-18
691 692 2 3 2017-02-05 2017-02-05
1508 1509 2 1 2018-04-09 2018-04-09
… … … … … …
1365 1366 1441 4 2018-01-26 2018-01-27
1035 1036 1442 4 2017-07-30 2017-08-01
557 558 1443 4 2016-11-15 2016-11-16
615 616 1444 4 2016-12-20 2016-12-23
1423 1424 1445 4 2018-03-07 2018-03-10
3
1554 1555 1 1 2018-04-18 2018-04-18
1176 1177 21 3 2017-10-12 2017-10-12
1408 1409 21 4 2018-02-26 2018-02-28
1595 1596 21 2 2018-04-28 2018-04-28
443 444 30 4 2016-09-19 2016-09-20
1552 1553 30 2 2018-04-18 2018-04-18
348 349 30 3 2016-08-03 2016-08-03
1496 1497 31 2 2018-04-06 2018-04-06
349 350 31 3 2016-08-03 2016-08-03
161 162 31 4 2016-04-06 2016-04-08
581 582 32 3 2016-12-04 2016-12-04
158 159 32 4 2016-04-04 2016-04-06
1512 1513 32 2 2018-04-10 2018-04-10
df['order_status'].value_counts()
[8]: order_status
4 1445
2 63
1 62
3 45
Name: count, dtype: int64
###Ejercicio 3 Filtrar por años y ver cuantas ordenes hay en cada uno.
se crea una nueva columna llamada ‘order_year’ que contiene solo el año de cada fecha en la
4
columna ‘order_date’. La propiedad .dt.year accede al componente del año de cada fecha en la
serie ‘order_date’. Esta operación se basa en la propiedad de objetos de fecha y hora en pandas
que permite acceder a varios componentes de la fecha y hora, como el año, el mes, el día, etc. y
por ultimo con el comando .value_counts() se cuenta el número de ocurrencias de cada año en la
columna ‘order_year’ y devuelve un objeto de serie que contiene estos recuentos, ordenados de el
que tiene mayor cantidad al que tiene menos.
[9]: df['order_date'] = pd.to_datetime(df['order_date'])
df['order_year'] = df['order_date'].dt.year
df['order_year'].value_counts()
[9]: order_year
2017 688
2016 635
2018 292
Name: count, dtype: int64
Para organizar los años de menor a mayor se hizo uso del comando .value_counts().sort_index()
[10]: df['order_year'].value_counts().sort_index()
[10]: order_year
2016 635
2017 688
2018 292
Name: count, dtype: int64
###Ejercicio 4 Cuantas ordenes hay para cada una de las sucursales de las bicicleterias.
[11]: # Se hace uso del comando .value_counts() en la columna de store_id para saber␣
↪cuantas ordenes hay para cada una de las sucursales de las bicicleterias.
df['store_id'].value_counts()
[11]: store_id
2 1093
1 348
3 174
Name: count, dtype: int64
###Ejercicio 5 En el año 2018 cual sucursal fue la que tuvo mas ordenes.
utilizamos el método value_counts() para contar la frecuencia de cada valor único en la columna
‘store_id’, pero solo para el subconjunto de datos correspondiente al año 2018. Después, utilizamos
el método idxmax() para obtener el índice (es decir, el valor del ‘store_id’) con la frecuencia más
alta en ese subconjunto de datos, es decir, la tienda con más órdenes en 2018.
[12]: df_2018 = df[df['order_year'] == 2018]
most_orders_store = df_2018['store_id'].value_counts().idxmax()
5
print(f"La sucursal con más órdenes en 2018 fue: {most_orders_store}")
[13]: staff_id
6 553
7 540
3 184
2 164
8 88
9 86
Name: count, dtype: int64
[14]: # Creamos un diccionario para almacenar los conteos de pedidos para cada␣
↪empleado
order_counts = {}
Empleado ID: 2
6
Store ID: 1, Order Count: 164
Empleado ID: 6
Store ID: 2, Order Count: 553
Empleado ID: 7
Store ID: 2, Order Count: 540
Empleado ID: 3
Store ID: 1, Order Count: 184
Empleado ID: 8
Store ID: 3, Order Count: 88
Empleado ID: 9
Store ID: 3, Order Count: 86
###Ejercicio 7 En el año 2018 cual fue el empleado que realizo mas ordenes.
Seleccionnamos lo que son todas las filas del DataFrame df donde el valor en la columna ‘or-
der_year’ es igual a 2018 y lo asigna a un nuevo DataFrame llamado df_2018. despues usamos
most_orders_staff = df_2018[‘staff_id’].value_counts().idxmax(): para calcular el número de ór-
denes para cada empleado en el DataFrame df_2018, encuentra el identificador del empleado con
el mayor número de órdenes y lo asigna a la variable most_orders_staff.
[15]: df_2018 = df[df['order_year'] == 2018]
most_orders_staff = df_2018['staff_id'].value_counts().idxmax()
print(f"El empleado con más órdenes en 2018 fue: {most_orders_staff}")
df['order_date'] = pd.to_datetime(df['order_date'])
df['shipped_date'] = pd.to_datetime(df['shipped_date'])
7
store_id staff_id order_year preparing_time
0 1 2 2016 2 days
1 2 6 2016 2 days
2 2 7 2016 1 days
3 1 3 2016 2 days
4 2 6 2016 3 days
###Ejercicio 9 Usando la columna que crearon anteriormente llamada ‘preparing_time’, calcu-
lar el tiempo promedio de procesamiento de ordenes de cada una de las sucursales. En un mensaje
imprimir cual fue la que tenia mejores tiempos de procesamiento de una orden.
Se creo primero lo que es un diccionario vacío llamado average_preparing_time para almacenar los
tiempos promedio de preparación para cada sucursal. Despues se hace un bucle para cada identi-
ficador de sucursal único, el cual se itera sobre cada identificador de sucursal único en la columna
‘store_id’ del DataFrame df. Se cálcula el tiempo promedio de preparación para cada sucursal:
donde se calcula el tiempo promedio de preparación de estas órdenes y se guarda en el diccionario
average_preparing_time, utilizando el identificador de la sucursal como clave. Finalizamos con
la identificación de la sucursal con el mejor tiempo de procesamiento: donde se utilizo la función
min() junto con el parámetro key para encontrar la clave (es decir, el identificador de la sucursal)
en el diccionario average_preparing_time que tiene el valor mínimo, es decir, el tiempo promedio
de preparación más bajo. El identificador de esta sucursal se asigna a la variable best_store_id.
[17]: # Calculamos el tiempo promedio de procesamiento de ordenes de cada una de las␣
↪sucursales
average_preparing_time = {}
for store_id in df['store_id'].unique():
store_df = df[df['store_id'] == store_id]
average_preparing_time[store_id] = store_df['preparing_time'].mean()