Skip to content

Commit b19b23e

Browse files
committed
Adding file management exercises
1 parent 64e2675 commit b19b23e

File tree

7 files changed

+264
-6
lines changed

7 files changed

+264
-6
lines changed

Exercises/05.md

Lines changed: 73 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ numero2, raíz de número2
106106
```
107107
#### Solucion
108108
```python
109-
109+
import math, csv
110+
with open('raices.csv', 'w') as f:
111+
for i in range(1, 101):
112+
f.write(str(i) + ', ' + str(math.sqrt(i)))
113+
f.write('\n')
110114
```
111115
### Ejercicio 2
112116
#### Descripcion
@@ -121,6 +125,62 @@ Realizar:
121125
5. Crear un archivo, llamado 'palmeras.txt' que contenga todas las informaciones de los árboles de este tipo.
122126
#### Solucion
123127
```python
128+
import csv
129+
with open('./Data/arbolado-en-espacios-verdes.csv', 'r', encoding='UTF8') as f:
130+
filas = csv.reader(f) # interpreta cada línea como una lista de valores
131+
headers = next(filas)
132+
lineas = []
133+
for fila in filas:
134+
lineas.append(fila)
135+
136+
# 1. Alturas segun especie
137+
especie = input('Especie: ')
138+
alturas = []
139+
for linea in lineas:
140+
if(linea[7]==especie):
141+
h = int(linea[3])
142+
if (h not in alturas):
143+
alturas.append(h)
144+
print(sorted(alturas))
145+
146+
# 2. Arbol más alto en CABA y en donde
147+
maxH = 0
148+
espacioVerde = ''
149+
arbol = ''
150+
for linea in lineas:
151+
h = int(linea[3])
152+
if(h > maxH):
153+
maxH = h
154+
espacioVerde = linea[10]
155+
arbol = linea[7]
156+
print(f'El arbol mas alto es {arbol} con {maxH} metros en el espacio verde {espacioVerde}')
157+
158+
# 3. Cantidad espacios verdes
159+
cant = 0
160+
espacios_verdes = []
161+
for linea in lineas:
162+
if(linea[10] not in espacios_verdes):
163+
espacios_verdes.append(linea[10])
164+
cant+=1
165+
print(f'Hay {cant} espacios verdes')
166+
167+
#4. Guardar info palmeras
168+
with open('palmeras.txt', 'w', encoding='UTF8') as file:
169+
file.writelines(headers)
170+
for linea in lineas:
171+
if(linea[9]=='Palmera'):
172+
file.writelines(linea)
173+
file.write('\n')
174+
175+
176+
with open('palmeras.txt', 'r', encoding='UTF8') as file:
177+
filas = csv.reader(file) # interpreta cada línea como una lista de valores
178+
headers = next(filas)
179+
lineas = []
180+
for fila in filas:
181+
lineas.append(fila)
182+
print(lineas[0])
183+
print(lineas[1])
124184

125185
```
126186
### Ejercicio 3
@@ -154,16 +214,23 @@ Si no encontrás ninguna que sea perfecta o que no se ajuste en forma ideal a lo
154214
* Cuál es el principal municipio productor de Ajo en la Provincia? y cuál fue el año de mayor superficie sembrada? Y el año de mayor rendimiento?
155215
* Repetí el punto ii para todos los cultivos. Cuáles son los mejores años en la Provincia? Coinciden para todos los cultivos?
156216
#### Solucion
157-
```python
217+
[Abrir solución](../Semanas/Week%2005/3_acciones_uva.py)
158218

159-
```
160219
### Ejercicio
161220
#### Descripcion
221+
La página de datos abiertos de la Provincia de Buenos Aires lista varios datasets de interés en diversas áreas.
222+
En particular, uno de estos datasets contiene datos históricos con detalles de los cultivos en la provincia por campaña y municipio (ver [Estimaciones agrícolas](../Data/estimaciones-agricolas-PBA-1969-2022.csv)).
223+
<br> a. <t> Escribí código que te permita leer este archivo y explorarlo
224+
<br> b. <t> Escribí código que te permita leer todos los datos (filas) de la planilla, almacenando los valores (columnas) en alguna estructura de datos de Python (dict, lista, tupla, set) que te parezca la más apropiada para responder las consultas que vienen a continuación. Explicá y fundamentá tu elección.
225+
Si no encontrás ninguna que sea perfecta o que no se ajuste en forma ideal a lo que necesitás, discutilo y sugerí que cambios harias (en los datos) para poder operar más facilmente con la estructura de Python que elegiste.
226+
<br>Consultas:
227+
<br> i. <t> Cuántos tipos de cultivos diferentes hay registrados en la Provincia de Buenos Aires?
228+
<br> ii. <t> Cuál es el principal municipio productor de Ajo en la Provincia? y cuál fue el año de mayor superficie sembrada? Y el año de mayor rendimiento?
229+
<br> iii. <t> Repetí el punto ii para todos los cultivos. Cuáles son los mejores años en la Provincia? Coinciden para todos los cultivos?
162230

163231
#### Solucion
164-
```python
165-
166-
```
232+
[Solución 1](./Week%2005/4_cultivos.py)
233+
[Solución 2](./Weeks/Week%2005/4_cultivos_forma2.py)
167234
### Ejercicio
168235
#### Descripcion
169236

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import csv
2+
3+
with open('../../../Data/portafolio_juan.csv', 'r', encoding='UTF8') as f:
4+
filas = csv.reader(f)
5+
keys = next(filas) # headers
6+
acciones = []
7+
for fila in filas:
8+
# a. lista de diccionarios
9+
acciones.append(dict(zip(keys, fila)))
10+
print(acciones)
11+
12+
# b. precio y cantidad acciones
13+
costo_compra = 0
14+
valor_actual = 0
15+
for accion in acciones:
16+
valor_actual += int(accion['cantidad']) * float(accion['precio_actual'])
17+
costo_compra += int(accion['cantidad']) * float(accion['precio_compra'])
18+
resumen = valor_actual - costo_compra
19+
if (resumen > 0):
20+
print(f'Juan tiene una ganancia de ${round(resumen, 2)}')
21+
else:
22+
print(f'Juan tiene una perdida de ${round(resumen, 2)}')
23+
24+
# c. diccionario con los valores diarios de las UVA
25+
with open('../../../Data/cer-uva-uvi-diarios.csv', 'r', encoding='UTF8') as f:
26+
filas = csv.reader(f)
27+
encabezados = next(filas)
28+
valores_uva = {}
29+
index_fecha = encabezados.index("indice_tiempo")
30+
index_uva = encabezados.index("uva_diario")
31+
for fila in filas:
32+
print(fila)
33+
valores_uva[fila[index_fecha]] = fila[
34+
index_uva] # Al diccionario valores_uva le agrego un la fecha como clave (key) y el valor de la UVA correrspondiente como valor (value)
35+
print(valores_uva)
36+
37+
# d. Calculá cuantas UVAs podría haber adquirido Juan gastando el mismo dinero que usó en las acciones
38+
cantidad_uvas = 0
39+
valor_actual_uvas = 0
40+
for accion in acciones:
41+
cantidad_uvas_dia = float(accion["precio_compra"]) * float(accion["cantidad"]) / float(
42+
valores_uva[accion["fecha"]])
43+
cantidad_uvas += cantidad_uvas_dia
44+
valor_actual_uvas += 208.99 * cantidad_uvas_dia
45+
46+
diferencia_portafolios = valor_actual_uvas - valor_actual
47+
48+
print(
49+
f"Si hubiera comprado {int(cantidad_uvas)} UVAs hubiera obtenido un portafolio de {round(valor_actual_uvas, 2)}, mientras que el portafolio de acciones fue de {round(valor_actual_acciones, 2)}.")
50+
51+
if diferencia_portafolios > 0:
52+
print(f"La opción que más rindió fue invertir en UVAs por {round(diferencia_portafolios, 2)}")
53+
elif diferencia_portafolios < 0:
54+
print(f"La opción que más rindió fue invertir en acciones por {round(-diferencia_portafolios, 2)}")

Exercises/Weeks/Week 05/4_cultivos.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import csv
2+
3+
with open("../../../Data/estimaciones-agricolas-PBA-1969-2022.csv") as f:
4+
filas = csv.reader(f)
5+
encabezados = next(filas)
6+
datos = []
7+
for fila in filas:
8+
datos.append(fila)
9+
10+
print(encabezados)
11+
print(datos[0])
12+
print(len(datos))
13+
14+
# i. Cuántos tipos de cultivos diferentes hay registrados en la Provincia de Buenos Aires?
15+
cultivos = []
16+
for fila in datos:
17+
cultivos.append(fila[1])
18+
19+
cultivos_unicos = set(cultivos) # Convertir lista en conjunto para obtener cultivos únicos
20+
21+
num_cultivos = len(cultivos_unicos) # Calcular longitud para obtener número de cultivos diferentes
22+
print(f'Hay {num_cultivos} tipos de cultivos diferentes registrados en la Provincia de Buenos Aires.')
23+
24+
25+
# ii. Cuál es el principal municipio productor de Ajo en la Provincia?
26+
# y cuál fue el año de mayor superficie sembrada? Y el año de mayor rendimiento?
27+
mayor_superficie_sembrada = None
28+
mayor_rendimiento = None
29+
30+
for fila in datos:
31+
if fila[1] == 'Ajo':
32+
# Encontrar la fila con la mayor superficie sembrada
33+
if mayor_superficie_sembrada is None or float(fila[6]) > float(mayor_superficie_sembrada[6]):
34+
mayor_superficie_sembrada = fila
35+
# Encontrar la fila con el mayor rendimiento
36+
if mayor_rendimiento is None or float(fila[9]) > float(mayor_rendimiento[9]):
37+
mayor_rendimiento = fila
38+
39+
print(mayor_superficie_sembrada,mayor_rendimiento)
40+
municipio = mayor_superficie_sembrada[5] # municipio de mayor superficie sembrada
41+
anio_superficie = mayor_superficie_sembrada[3] # campaña de mayor superficie sembrada
42+
anio_rendimiento = mayor_rendimiento[3] # campaña del mayor rendimiento
43+
44+
print(f'El principal municipio productor de Ajo en la Provincia es {municipio} y el año de mayor superficie sembrada fue en {anio_superficie}.')
45+
print(f'El año de mayor rendimiento para el cultivo de Ajo fue en {anio_rendimiento}.')
46+
47+
# iii. Repetí el punto ii para todos los cultivos.
48+
# Cuáles son los mejores años en la Provincia? Coinciden para todos los cultivos?
49+
# Para repetir la consulta ii para todos los cultivos, podemos utilizar un bucle
50+
# que recorra todos los cultivos y luego dentro de ese bucle aplicar la misma lógica que en la consulta ii.
51+
52+
mejor_superficie_sembrada = {}
53+
mejor_rendimiento = {}
54+
55+
for cultivo in cultivos_unicos:
56+
mayor_superficie_sembrada = None
57+
mayor_rendimiento_cultivo = None
58+
59+
for fila in datos:
60+
if fila[1] == cultivo:
61+
# Encontrar la fila con la mayor superficie sembrada
62+
if mayor_superficie_sembrada is None or float(fila[6]) > float(mayor_superficie_sembrada[6]):
63+
mayor_superficie_sembrada = fila
64+
# Encontrar la fila con el mayor rendimiento
65+
if mayor_rendimiento_cultivo is None or float(fila[9]) > float(mayor_rendimiento_cultivo[9]):
66+
mayor_rendimiento_cultivo = fila
67+
# Guardar la información del mejor año para este cultivo
68+
mejor_superficie_sembrada[cultivo] = mayor_superficie_sembrada[3]
69+
mejor_rendimiento[cultivo] = mayor_rendimiento_cultivo[3]
70+
71+
print('Los mejores años para cada cultivo son:')
72+
for cultivo in cultivos_unicos:
73+
print(f'{cultivo:<20} Superficie sembrada - {mejor_superficie_sembrada[cultivo]:<20} Rendimiento - {mejor_rendimiento[cultivo]}')
74+
75+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Otra forma de resolverlo podria ser crear un diccionario por cultivo y guardar todas las informaciones relevantes
2+
# en una lista de diccionarios. De esta forma, podemos acceder a las informaciones por el nombre de las columnas
3+
# y no necesitamos conocer los indices.
4+
# Nota: este ejercicio se puede resolver con Pandas, en la semana 8 veremos Pandas!
5+
import csv
6+
7+
with open("../../../Data/estimaciones-agricolas-PBA-1969-2022.csv") as f:
8+
filas = csv.reader(f)
9+
encabezados = next(filas)
10+
datos = []
11+
for fila in filas:
12+
datos.append(fila)
13+
# Crear un diccionario con los datos agrupados por tipo de cultivo
14+
datos_por_cultivo = {}
15+
for fila in datos:
16+
cultivo = fila[1]
17+
if cultivo not in datos_por_cultivo:
18+
datos_por_cultivo[cultivo] = []
19+
datos_por_cultivo[cultivo].append(dict(zip(encabezados[2:10],fila[2:10])))
20+
print(datos_por_cultivo['Ajo'])
21+
22+
# i: contar los tipos de cultivos diferentes
23+
num_cultivos = len(datos_por_cultivo)
24+
print(f'Hay {num_cultivos} tipos de cultivos diferentes registrados en la Provincia de Buenos Aires.')
25+
26+
#ii: encontrar el principal municipio productor de Ajo y los años de mayor superficie sembrada y rendimiento
27+
cultivo_ajo = 'Ajo'
28+
mayor_superficie_sembrada_ajo = None
29+
mayor_rendimiento_ajo = None
30+
municipio_productor_ajo = None
31+
32+
for fila in datos_por_cultivo[cultivo_ajo]:
33+
# ATENCION: Por como está construido el archivo, cuando hacemos en encabezado superficie_sembrada queda con
34+
# espacio a mas, y por eso no funciona... hay que llamarla así: 'superficie_sembrada ' y no 'superficie_sembrada'
35+
# porque no es la misma cadena.
36+
if mayor_superficie_sembrada_ajo is None or float(fila['superficie_sembrada ']) > float(mayor_superficie_sembrada_ajo['superficie_sembrada ']):
37+
mayor_superficie_sembrada_ajo = fila
38+
municipio_productor_ajo = fila['municipio_nombre']
39+
if mayor_rendimiento_ajo is None or float(fila['rendimiento']) > float(mayor_rendimiento_ajo['rendimiento']):
40+
mayor_rendimiento_ajo = fila
41+
print(f'El principal municipio productor de {cultivo_ajo} en la Provincia es {municipio_productor_ajo}.')
42+
print(f'El año de mayor superficie sembrada fue {mayor_superficie_sembrada_ajo["campania_nombre"]}.')
43+
print(f'El año de mayor rendimiento fue {mayor_rendimiento_ajo["campania_nombre"]}.')
44+
45+
46+
# Consulta iii: encontrar los mejores años para cada cultivo
47+
mejor_superficie_sembrada = {}
48+
mejor_rendimiento = {}
49+
for cultivo in datos_por_cultivo:
50+
mayor_superficie_sembrada = None
51+
mayor_rendimiento_cultivo = None
52+
for fila in datos_por_cultivo[cultivo]:
53+
if mayor_superficie_sembrada is None or float(fila['superficie_sembrada ']) > float(mayor_superficie_sembrada['superficie_sembrada ']):
54+
mayor_superficie_sembrada = fila
55+
if mayor_rendimiento_cultivo is None or float(fila['rendimiento']) > float(mayor_rendimiento_cultivo['rendimiento']):
56+
mayor_rendimiento_cultivo = fila
57+
mejor_superficie_sembrada[cultivo] = mayor_superficie_sembrada['campania_nombre']
58+
mejor_rendimiento[cultivo] = mayor_rendimiento_cultivo['campania_nombre']
59+
print('Los mejores años para cada cultivo son:')
60+
for cultivo in mejor_superficie_sembrada:
61+
print(f'{cultivo:<20} Superficie sembrada - {mejor_superficie_sembrada[cultivo]:<20} Rendimiento - {mejor_rendimiento[cultivo]}')
62+

Exercises/img/tabla_arbolados.PNG

43 KB
Loading

Exercises/img/tabla_historica.PNG

133 KB
Loading

Exercises/img/tabla_portafolio.PNG

16.4 KB
Loading

0 commit comments

Comments
 (0)