# Sol:
import numpy as np
a = np.zeros(20, dtype=int)
a

"""
Explanation: Ejercicios 7
1 Ejercicio

Crear un array de tamaño 20 donde todos los elementos estén inicializados a cero. Por favor llámalo a.
End of explanation
"""


# Sol:
a[:5] = 10
a

"""
Explanation: Escribe una expresión Python para cambiar el valor de  los primeros 5 elementos; el nuevo valor es 10.
End of explanation
"""


# Sol:
a[5:15] = np.arange(12,32,2)
a

"""
Explanation: Modifica los siguientes 10 valores. Los nuevos valores serán el resultado de la secuencia de números pares comenzando por el 12. Utiliza la función arange.
End of explanation
"""


# Sol:
a[-5:] = 30
a

"""
Explanation: Modifica el valor de los últimos 5 elementos. Su nuevo valor es 30.
End of explanation
"""


import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

x = np.arange(20)    # eje x
y = a                # eje y
plt.plot(x,y)
plt.ylim(5,35)       # rango del eje y

"""
Explanation: Ahora ejecuta las siguientes líneas de código. Vamos a dibujar el array a que has creado ...
End of explanation
"""


x = np.arange(20)    # eje x
y = a                # eje y
plt.plot(x,y)
plt.ylim(5,35)       # rango dele eje y
plt.plot([4,4],[0,40], 'k--')

"""
Explanation: Ahora vamos a añadir una línea adicional desde el punto (4,0) al punto (4,40)
End of explanation
"""


# Sol:
a = np.loadtxt('../datos/holland_temperature.dat', dtype=str('float'))
media = np.sum(a)/len(a)
media

"""
Explanation: 2 Ejercicio
El archivo de texto holland_temperature.dat recoge datos de las diferentes temperaturas registradas en Holanda en los últimos 12 meses.


Calcula la media de las temperaturas.
Descarga el fichero holland_temperature.dat en tu directorio de trabajo.
Carga los datos en un array llamado temperatura mediante la función loadtxt.



Nota: La media es 10.125.
End of explanation
"""


# Sol:


"""
Explanation: Nos interesa conocer los meses del año donde la temperatura ha sido superior a la media.
Crear un array de meses [1,...,12]. Usa la función arange. 
Escribir la expresión que devuelve los meses donde la temperatura ha sido superior a la media usando como máscara un array de booleanos.



Nota: La solución es: [5,  6,  7,  8,  9, 10]
End of explanation
"""


# Sol:


"""
Explanation: Queremos saber qué mes ha estado más cerca de la media. Para ello calcula el array de diferencias con respecto a la media. Luego utiliza la función argmin de Numpy para calcular el índice del array que contiene el mínimo valor.

Nota: la solución es: 'El mes más cercano a los 10.12 grados es el mes 9'
End of explanation
"""


media = temperatura.mean()

x = np.arange(12)
y = temperatura
plt.plot(x , y)    # curva de temperaturas
plt.plot(x , np.ones(12)* media, 'k--')     # recta par la media

plt.ylim(0,temperatura.max() + 2)

plt.xticks(np.arange(12),['E','F','M','A','M','J','J','A','S','O','N','D'])
plt.xlim(-0.5,11.5)

plt.legend(['Temperatura','Media'],loc='best');

"""
Explanation: Ahora ejecuta las siguientes líneas de código.
End of explanation
"""


#Sol: 

"""
Explanation: 3 Ejercicio
El archivo WordPhones 
recoge información acerca del número de teléfonos en varias regiones del mundo (en miles).
Se trata de un array multidimensional de tamaño $7$ x $7$.
- Cada columna se corresponde con una región del mundo. Las regiones son:
["N.Amer","Europe","Asia","S.Amer","Oceania","Africa","Mid.Amer"]

Cada fila se corresponde con un año. Los años son: 
[1951, 1956, 1957, 1958, 1959, 1960, 1961]



Escribir la expresión Python que recoja los datos del año 1960
Primero descarga el archivo WordPhones en tu directorio de trabajo.
Carga los datos en una variable llamada datos mediante la función loadtxt.
Crea un array de tamaño 7 con los distintos años llamado years
Escribe la expresión Python para seleccionar la fila que se corresponde con el año 1960 (Utiliza como filtro un array de booleanos).
End of explanation
"""


# Sol:
regiones = np.array(["N.Amer","Europe","Asia","S.Amer","Oceania","Africa","Mid.Amer"])


"""
Explanation: Escribir la expresión Python que recoja los datos de la región 'Europe'
Primero crea un array de tamaño 7 con las distintas regiones llamado regiones.
Calcula la transpuesta de la matriz donde se encuentran almacenados los datos.
Escribe la expresión Python para almacenar en la variable datos_europa  la fila que se corresponde con el la región "Europe".
End of explanation
"""


import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

plt.plot(years,datos_europa[0])
plt.xlabel('Meses')
plt.ylabel('Cantidad de telefonos')
plt.title('Datos Europe')

"""
Explanation: Ahora representa en una gráfica la evolución que ha tenido "Europe" entre los años 1951 y 1961. Ejecuta el siguiente bloque de código.
End of explanation
"""


# Sol: 


"""
Explanation: Nos interesa conocer la región con menos cantidad de móviles y el año.
Calcular el mínimo por filas en el array minimo_filas
Calcular el mínimo por columnas en el array minimo_columnas
Calcular la posición f__del mínimo valor en  el array __minimo_filas. Utiliza la función argmin.
Calcular la posición c__del mínimo valor en  el array __minimo_columnas. Utiliza la función argmin.
End of explanation
"""


x = np.arange(1,8)
europa = datos.T[regiones == "Europe" ]
africa = datos.T[regiones == "Africa" ]
plt.plot( x, europa[0] )
plt.plot( x, africa[0] )
plt.xticks(np.arange(1,8), years)
plt.xlabel('Years')
plt.ylabel('Cantidad de telefonos')
plt.xlim(0.5,7.5)
plt.title('Comparativa Europa - Africa')

plt.legend(['Europa','Africa'],loc='best');

"""
Explanation: Ahora representa en una gráfica la evolución que ha tenido "Europe"  y "Africa" entre los años 1956 y 1960. Ejecuta el siguiente bloque de código.
End of explanation
"""



x = np.arange(1,8)
for i in regiones:
    reg = datos.T[regiones == i ]
    plt.plot( x, reg[0] )
    
plt.xticks(np.arange(1,8), years)    

plt.xlabel('Years')
plt.ylabel('Cantidad de telefonos')
plt.xlim(0.5,7.5)
plt.ylim(datos.min() - 1000, datos.max() + 1000)
plt.title('Comparativa todas las regiones')

plt.legend(regiones,loc='best');

"""
Explanation: Podemos representar todos los países. Ejecuta el siguiente bloque de código.
End of explanation
"""


