Mensajes: 5
Temas: 1
Registro en: Aug 2022
Reputación:
0
23-08-2022, 05:34 PM
(Última modificación: 25-08-2022, 02:55 AM por Francisco.)
Hola, soy muy nueva en Python (2 meses aprendiendo) y debo realizar esta tarea:
Tengo dos columnas:
Fecha: Estado
1 10 (inicio)
2 12
3 11
4 13
5 14
6 18
7 20 (pico)
8 16
9 14
10 12 (fin e inicio del siguiente pico)
11 13
12 14
13 15
La consigna es que debo escribir el código en Pyhton y que este identifique los ciclos con las siguientes consideraciones:
- la duración aproximada del ciclo total (inicio-pico-fin) es de 10 días, que pueden variar.
- después del inicio del ciclo los estados que le siguen deben ser más grandes que el inicio.
- si el valor actual es mas grande que todos los anteriores entonces ese valor es el pico
- pasados 5 días si el valor actual es el más pequeño ese es el fin del ciclo.
Entiendo que primero debo definir las variables y luego trabajar con excepciones...pero no sé bien cómo empezar a escribir el código. He visto varios tutoriales, etc, pero para este caso en específico me cuesta identificar cómo empezar!! POR FAVOR, si alguien puede darme unas ideas de cómo debería verse el código lo agradecería muchísimo!!
Mensajes: 1.298
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola, bienvenida.
Para empezar, ¿en qué formato tenés esas dos columnas? ¿Son listas de Python, DataFrames de pandas? ¿Escribiste algún código hasta el momento? Más que variables y excepciones, pienso que es algo que se puede resolver usando bucles para recorrer los valores y condicionales para chequear si es el inicio, el pico o el fin del ciclo.
Saludos
Mensajes: 5
Temas: 1
Registro en: Aug 2022
Reputación:
0
24-08-2022, 02:13 PM
(24-08-2022, 01:50 AM)Francisco escribió: Hola, bienvenida.
Para empezar, ¿en qué formato tenés esas dos columnas? ¿Son listas de Python, DataFrames de pandas? ¿Escribiste algún código hasta el momento? Más que variables y excepciones, pienso que es algo que se puede resolver usando bucles para recorrer los valores y condicionales para chequear si es el inicio, el pico o el fin del ciclo.
Saludos
Francisco, muchas gracias por tu respuesta! Hasta ahora tengo esto, pero no sé si voy bien..
d = np.array(([10,12,13,14,18,20,16,14,12,13,14,15))]
for idx in range(len(data)-1):
if data["event"][idx+1] > data["event"] [idx]:
data["date"][idx]="S"
Tengo dudas de como seguir con el código, en mi cabeza lo siguiente que me imagino es algo como esto:
def cycleSort(array):
for cycleStart in range(0, len(array) - 1):
item = array[cycleStart]
Pero me entran muchas dudas y no sé cómo seguir, voy a buscar ejemplos de como crear bucles y condicionales . Lo que me cuesta identificar es cómo poner las indicaciones en el código. Me alucina ver en los ejemplos lo fácil que parece, pero cuando me toca hacerlo a mí me quedo en blanco!
Gracias por responderme! Cualquier otra sugerencia es bienvenida!
Saludos.
Mensajes: 1.298
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola!
Si estás usando NumPy, creo que sería mejor guardar la información como un array de dos dimensiones:
Código: import numpy as np
data = np.array([
[1, 10], # (inicio)
[2, 12],
[3, 11],
[4, 13],
[5, 14],
[6, 18],
[7, 20], # (pico)
[8, 16],
[9, 14],
[10, 12], # (fin e inicio del siguiente pico)
[11, 13],
[12, 14],
[13, 15],
])
Luego, si querés buscar "manualmente" el número máximo en la segunda columna, podrías hacer (siguiendo tu lógica):
Código: for i in range(len(data)):
# Chequear si es el mayor entre los estados anteriores.
mayor_anteriores = True
for j in range(i):
if data[i][1] < data[j][1]:
mayor_anteriores = False
break
# Chequear si es el mayor entre los estados siguientes.
mayor_siguientes = True
for j in range(i, len(data)):
if data[i][1] < data[j][1]:
mayor_siguientes = False
break
if mayor_anteriores and mayor_siguientes:
print("El pico es:", data[i])
# Dejar de buscar una vez encontrado el pico.
break
Seguramente haya una forma más eficiente y sintética usando funciones propias de NumPy (también está la función incorporada max() de Python).
Para detectar todos los ciclos (cuántos hay, sus respectivos inicio, pico y fin, etc.) habría que hacer condiciones más complejas. ¿Tenés bien en claro el funcionamiento de los condicionales (if) y los bucles (for) en Python? Sin esos conceptos fundamentales va a resultar muy difícil avanzar con el ejercicio.
Saludos
Mensajes: 5
Temas: 1
Registro en: Aug 2022
Reputación:
0
(25-08-2022, 03:07 AM)Francisco escribió: Hola!
Si estás usando NumPy, creo que sería mejor guardar la información como un array de dos dimensiones:
Código: import numpy as np
data = np.array([
[1, 10], # (inicio)
[2, 12],
[3, 11],
[4, 13],
[5, 14],
[6, 18],
[7, 20], # (pico)
[8, 16],
[9, 14],
[10, 12], # (fin e inicio del siguiente pico)
[11, 13],
[12, 14],
[13, 15],
])
Luego, si querés buscar "manualmente" el número máximo en la segunda columna, podrías hacer (siguiendo tu lógica):
Código: for i in range(len(data)):
# Chequear si es el mayor entre los estados anteriores.
mayor_anteriores = True
for j in range(i):
if data[i][1] < data[j][1]:
mayor_anteriores = False
break
# Chequear si es el mayor entre los estados siguientes.
mayor_siguientes = True
for j in range(i, len(data)):
if data[i][1] < data[j][1]:
mayor_siguientes = False
break
if mayor_anteriores and mayor_siguientes:
print("El pico es:", data[i])
# Dejar de buscar una vez encontrado el pico.
break
Seguramente haya una forma más eficiente y sintética usando funciones propias de NumPy (también está la función incorporada max() de Python).
Para detectar todos los ciclos (cuántos hay, sus respectivos inicio, pico y fin, etc.) habría que hacer condiciones más complejas. ¿Tenés bien en claro el funcionamiento de los condicionales (if) y los bucles (for) en Python? Sin esos conceptos fundamentales va a resultar muy difícil avanzar con el ejercicio.
Saludos
Hola Francisco, te agradezco mil tu respuesta, me ayuda a entender mejor este ejercicio! Respondiendo a tu última pregunta con respecto a los condicionales y bucles, tengo idea con base en lo que he visto en videos pero es la primera vez que tengo que escribir código, por eso tantas dudas y que no sé bien para donde ir!!! Cualquier otra recomendación es bienvenida!!!!!
Saludos
Mensajes: 1.298
Temas: 3
Registro en: Feb 2016
Reputación:
71
¡Es un ejercicio muy complicado si es la primera vez que escribís un condicional o un bucle! Te recomiendo que busques ejercicios básicos específicos de condicionales y bucle for antes de encarar algo de esta complejidad.
(24-08-2022, 02:13 PM)Imja escribió: Lo que me cuesta identificar es cómo poner las indicaciones en el código. Me alucina ver en los ejemplos lo fácil que parece, pero cuando me toca hacerlo a mí me quedo en blanco!
Esto es falta de práctica en la escritura de código. Aprender a programar es como aprender un nuevo idioma: solo escuchando, sin hablar ni escribir, es imposible incorporar las reglas del lenguaje.
Saludos
Mensajes: 5
Temas: 1
Registro en: Aug 2022
Reputación:
0
(26-08-2022, 12:00 AM)Francisco escribió: ¡Es un ejercicio muy complicado si es la primera vez que escribís un condicional o un bucle! Te recomiendo que busques ejercicios básicos específicos de condicionales y bucle for antes de encarar algo de esta complejidad.
(24-08-2022, 02:13 PM)Imja escribió: Lo que me cuesta identificar es cómo poner las indicaciones en el código. Me alucina ver en los ejemplos lo fácil que parece, pero cuando me toca hacerlo a mí me quedo en blanco!
Esto es falta de práctica en la escritura de código. Aprender a programar es como aprender un nuevo idioma: solo escuchando, sin hablar ni escribir, es imposible incorporar las reglas del lenguaje.
Saludos
Hola Francisco, tenés razón, no lo había pensado de esa forma! Ya encontré algunos canales con ejercicios. Dedos cruzados!!
Muchas gracias!
Imja
Mensajes: 1.298
Temas: 3
Registro en: Feb 2016
Reputación:
71
26-08-2022, 06:20 PM
(Última modificación: 26-08-2022, 06:20 PM por Francisco.)
¡De nada! Cualquier cosa nos volvés a preguntar.
Saludos
Mensajes: 5
Temas: 1
Registro en: Aug 2022
Reputación:
0
04-09-2022, 02:54 PM
(Última modificación: 05-09-2022, 02:16 PM por Francisco.)
(26-08-2022, 06:20 PM)Francisco escribió: ¡De nada! Cualquier cosa nos volvés a preguntar.
Saludos
Hola, pensé que te había respondido de forma pública y veo que no. Adjunto mi respuesta a tu último mensaje aquí:
Hola!! gracias por tu respuesta Francisco!
Entonces sería algo parecido a esto?
# identificar el fin del ciclo: pasados 5 días si el valor actual es el más pequeño ese es el fin del ciclo.
Código: dias = 5
for i in range(len(data)):
fin_ciclo = True
for j in range(5, dias +1):
if data[i][0] and data[j][1] < dias(days=i)
fin_ciclo = False
break
if data[i][0] and data[j][1] and dias(days=i)
print("El fin del ciclo es:", data[i]
break
Mensajes: 1.298
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola. Más bien algo así:
Código: for i in range(len(data)):
# Al menos debe haber 5 valores antes.
if i < 5:
continue
fin_ciclo = True
for j in range(i - 5, i):
# Si en los cinco días anteriores hay algún valor
# menor, no es el fin del ciclo.
if data[i][1] > data[j][1]:
fin_ciclo = False
break
if fin_ciclo:
print("El fin del ciclo es:", data[i])
break
Saludos
|