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.

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


Out[6]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  • Escribe una expresión Python para cambiar el valor de los primeros 5 elementos; el nuevo valor es 10.

In [7]:
# Sol:
a[:5] = 10
a


Out[7]:
array([10, 10, 10, 10, 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
        0,  0,  0])
  • 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.

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


Out[20]:
array([10, 10, 10, 10, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,  0,  0,
        0,  0,  0])
  • Modifica el valor de los últimos 5 elementos. Su nuevo valor es 30.

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


Out[21]:
array([10, 10, 10, 10, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 30, 30,
       30, 30, 30])
  • Ahora ejecuta las siguientes líneas de código. Vamos a dibujar el array a que has creado ...

In [27]:
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


Out[27]:
(5, 35)
  • Ahora vamos a añadir una línea adicional desde el punto (4,0) al punto (4,40)

In [29]:
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--')


Out[29]:
[<matplotlib.lines.Line2D at 0x1f4eb3fd8d0>]

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.


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


Out[72]:
10.125

  • 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]


In [ ]:
# Sol:

  • 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'


In [ ]:
# Sol:
  • Ahora ejecuta las siguientes líneas de código.

In [ ]:
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');

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).

In [3]:
#Sol:

  • 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".

In [ ]:
# Sol:
regiones = np.array(["N.Amer","Europe","Asia","S.Amer","Oceania","Africa","Mid.Amer"])
  • 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.

In [ ]:
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')

  • 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 fdel mínimo valor en el array minimo_filas. Utiliza la función argmin.
    • Calcular la posición cdel mínimo valor en el array minimo_columnas. Utiliza la función argmin.

In [ ]:
# Sol:
  • 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.

In [ ]:
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');
  • Podemos representar todos los países. Ejecuta el siguiente bloque de código.

In [ ]:
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');

References