Está en la página 1de 1

Maestría en Finanzas | MFin UCEMA

Fecha: 02/05/2022

Profesor: Mariano Kruskevich

Estudiante: Emiliano Iparraguirre

Python Introducción para Estadísticas


Trabajo Práctico N° 1
¡Practiquemos 1!
In [1]: # Ejercicio 1
# Las variables sirven para guardar valores que después podemos usar y manipular

# Primero guarde el valor de ventas anuales de tres compañías en las variables ventas_1, ventas_2, y ventas_3.
# Los valores son, respectivamente, 229.23, 177.86, y 89.95.

# Calcule la suma total de ventas y el promedio de ventas de estas tres compañías.

In [12]: ventas_1=229.23
ventas_2=177.86
ventas_3=89.95
suma_ventas_totales=ventas_1+ventas_2+ventas_3
print('suma de ventas: ')
print(suma_ventas_totales)
print('--------------')
print('promedio de ventas: ')
print(suma_ventas_totales/3)
print('--------------')

suma de ventas:
497.04
--------------
promedio de ventas:
165.68
--------------

In [13]: # Ejercicio 2
# Las variables guardan un valor que puede ser de diferente tipo. Los nombres de variables pueden contener letr
# guiones bajos.

# Creemos tres variables de utilidad en finanzas.

# Asigne el string "Apple" a la variable compañía_1


# Asigne el entero 2017 a la variable año_1
# Asigne el float 229.23 a la variable ventas_1
# Imprima los tipos de datos asociados con cada variable

In [16]: compañía_1='Apple'
print(type(compañía_1))
print('--------------')
año_1=2017
print(type(año_1))
print('--------------')
ventas_1=229.23
print(type(ventas_1))
print('--------------')

<class 'str'>
--------------
<class 'int'>
--------------
<class 'float'>
--------------

In [17]: # Ejercicio 3
# Cargue en la variable test_compañía el string "apple"
# Determine si la variable test_compañía es igual a la variable compañía_1

# Determinar si ventas_1 es mayor a ventas_2

In [21]: print('test_compañía==compañía_1')
test_compañía="apple"
print(test_compañía==compañía_1)
print('--------------')
print('ventas_1>ventas_2')
print(ventas_1>ventas_2)
print('--------------')

test_compañía==compañía_1
False
--------------
ventas_1>ventas_2
True
--------------

In [22]: # Ejercicio 4
# Diferentes tipos de datos tienen distintas propiedades.

# Por ejemplo, los strings y floats no se pueden combinar matemáticamente.

# Para convertir una variable x a un entero, se puede usar la función int(x).


# Para convertir una variable y a un string, se puede usar la función str(y).

# Convierta año_1 y ventas_1 a strings.


# Use esos datos para expresar "Las ventas de Apple en 2017 fueron de $229.23 billones"

In [24]: print('año_1_str')
año_1_str=str(año_1)
print(año_1_str)
print(type(año_1_str))
print('--------------')
print('ventas_1_str')
ventas_1_str=str(ventas_1)
print(ventas_1_str)
print(type(ventas_1_str))
print('--------------')

año_1_str
2017
<class 'str'>
--------------
ventas_1_str
229.23
<class 'str'>
--------------

¡Practiquemos 2!
In [25]: # Ejercicio 5

# Creá una lista llamada "nombres" que contenga los strings "Apple Inc", "Coca-Cola" y "Walmart", en este orden
# Imprimila
# Creá una lista llamada "precios" que contenga las siguientes valuaciones $159.54, $37.13, y $71.17, en este o
# Imprimila

In [65]: nombres=["Apple Inc", "Coca-Cola","Walmart"]


print('nombres: ',nombres)
precios=[159.54,37.13,71.17]
print('precios: ',precios)

nombres: ['Apple Inc', 'Coca-Cola', 'Walmart']


precios: [159.54, 37.13, 71.17]

In [ ]: # Ejercicio 6

# Imprimir el primer elemento en nombres


# Imprimir el segundo elemento en nombres
# Imprimir el último elemento en precios, usando un índice negativo

# Usá "slicing" para obtener un subconjunto con los dos últimos elementos de nombres.

# Usá el "extended slicing" para obtener un subconjunto con los dos primeros elementos de precios.

In [44]: print('primer elemento en nombres')


print(nombres[0])
print('--------------')
print('segundo elemento en nombres')
print(nombres[1])
print('--------------')
print('último elemento en precios')
print(precios[-1])
print('--------------')
print('dos últimos elementos de nombres')
print(nombres[1:])
print('--------------')
print('dos primeros elementos de precios')
print(precios[0:2])
print('--------------')

primer elemento en nombres


Apple Inc
--------------
segundo elemento en nombres
Coca-Cola
--------------
último elemento en precios
71.17
--------------
dos últimos elementos de nombres
['Coca-Cola', 'Walmart']
--------------
dos primeros elementos de precios
[159.54, 37.13]
--------------

In [ ]: # Ejercicio 7

# Creá e imprimí una lista anidada que se llame "acciones" y que consista en "nombres" y "precios".
# Usá indexing para obtener la lista de precios.

# Obtené en la lista de acciones el nombre de "Coca-Cola" y luego, por separado, el precio de Walmart, o sea $7

In [50]: print('acciones')
acciones=[nombres,precios]
print(acciones)
print('--------------')
print('acciones_nombre')
print(acciones[0][1])
print('--------------')
print('acciones_precio')
print(acciones[1][2])
print('--------------')

acciones
[['Apple Inc', 'Coca-Cola', 'Walmart'], [159.54, 37.13, 71.17]]
--------------
acciones_nombre
Coca-Cola
--------------
acciones_precio
71.17
--------------

In [ ]: # Ejercicio 8

# Usando el método sort(), ordená e imprimí los precios en la lista de precios.

# Identificá el máximo precio en "precios" usando la función max()

# Agregá el nombre "Amazon.com" a la lista de nombres.||b


# Agregá la lista mas_elementos, que consiste de "DowDuPont" y "Alphabet Inc" a nombres.

In [66]: print('precios ordenados')


precios.sort()
print(precios)
print('--------------')
print('máximo precio')
precio_max=max(precios)
print(precio_max)
print('--------------')
print('nombres_append')
nombres.append("Amazon.com")
print(nombres)
print('--------------')
print('nombres_extend')
nombres.extend(["DowDuPont","Alphabet Inc"])
print(nombres)
print('--------------')

precios ordenados
[37.13, 71.17, 159.54]
--------------
máximo precio
159.54
--------------
nombres_append
['Apple Inc', 'Coca-Cola', 'Walmart', 'Amazon.com']
--------------
nombres_extend
['Apple Inc', 'Coca-Cola', 'Walmart', 'Amazon.com', 'DowDuPont', 'Alphabet Inc']
--------------

¡Practiquemos 3!
In [ ]: # Ejercicio 9

# Importá numpy as np

# Creá un precios_array y un ganancias_array de las siguientes listas. Imprimilos.


precios = [170.12, 93.29, 55.28, 145.30, 171.81, 59.50, 100.50]
ganancias = [9.2, 5.31, 2.41, 5.91, 15.42, 2.51, 6.79]

# Creá un PER_array dividiendo precios / ganancias. Imprimilo. ¿Qué compañía luce más cara? (solo imprimí esto)

# Hacer un subset de los 3 primeros elementos de precios_array

In [1]: import numpy as np

print('precios_array')
precios_array = np.array([170.12, 93.29, 55.28, 145.30, 171.81, 59.50, 100.50])
print(precios_array)
print('--------------')

print('ganancias_array')
ganancias_array = np.array([9.2, 5.31, 2.41, 5.91, 15.42, 2.51, 6.79])
print(precios_array)
print('--------------')
print('precios / ganancias')
PER_array=precios_array/ganancias_array
print(PER_array)
print('--------------')
print('compañía más cara')
PER_array_cara=max(PER_array)
print(PER_array_cara)
print('--------------')
print('subset array')
indexing_array = np.array([0,1,2])
precios_array_subset=precios_array[indexing_array]
print(precios_array_subset)
print('--------------')

precios_array
[170.12 93.29 55.28 145.3 171.81 59.5 100.5 ]
--------------
ganancias_array
[170.12 93.29 55.28 145.3 171.81 59.5 100.5 ]
--------------
precios / ganancias
[18.49130435 17.56873823 22.93775934 24.58544839 11.14202335 23.70517928
14.8011782 ]
--------------
compañía más cara
24.585448392554994
--------------
subset array
[170.12 93.29 55.28]
--------------

In [95]: # Ejercicio 10

# Creá un array de 2 dimensiones con precios y ganancias, en ese orden, y guardalo en acciones_array
# Imprimí el shape y el size de acciones_array

# Imprimé acciones_array_transpuesta
# Extraé la primera columna de acciones_array_transpuesta y asignala a precios_1. Imprimilo.
# Extraé la segunda columna de acciones_array_transpuesta y asignala a ganancias_1. Imprimilo.

# Seleccioná un subset de precios y ganancias de la primera compañía (fila 0) desde acciones_array_transpuesta


# Asignalo a empresa_1

In [9]: print('acciones_array')
acciones_array = np.array([precios_array, ganancias_array])
print(acciones_array)
print('--------------')
print('shape acciones_array')
print(acciones_array.shape)
print('--------------')
print('size acciones_array')
print(acciones_array.size)
print('--------------')
print('transpose acciones_array')
acciones_array_transpuesta=np.transpose(acciones_array)
print(acciones_array_transpuesta)
print('--------------')
print('precios_1')
precios_1 = acciones_array_transpuesta[:,0]
print(precios_1)
print('ganancias_1')
ganancias_1 = acciones_array_transpuesta[:,1]
print(ganancias_1)
print('--------------')
print('subset empresa_1')
empresa_1 = acciones_array_transpuesta[0,:]
print(empresa_1)
print('--------------')

#precios_1 = acciones_array_transpuesta[indexing_array]
#print(precios_1)

acciones_array
[[170.12 93.29 55.28 145.3 171.81 59.5 100.5 ]
[ 9.2 5.31 2.41 5.91 15.42 2.51 6.79]]
--------------
shape acciones_array
(2, 7)
--------------
size acciones_array
14
--------------
transpose acciones_array
[[170.12 9.2 ]
[ 93.29 5.31]
[ 55.28 2.41]
[145.3 5.91]
[171.81 15.42]
[ 59.5 2.51]
[100.5 6.79]]
--------------
precios_1
[170.12 93.29 55.28 145.3 171.81 59.5 100.5 ]
ganancias_1
[ 9.2 5.31 2.41 5.91 15.42 2.51 6.79]
--------------
subset empresa_1
[170.12 9.2 ]
--------------

In [10]: # Ejercicio 11

# Calculá el promedio de precios y asignalo a precios_prom. Imprimilo.


# Calculá el desvío estándar de precios y asignalo a precios_std. Imprimilo.

# Creá un vector de números secuenciales del 1 al 7 para identificar a las empresas y asignalo a numeros. Impri
# Creá otro vector de números secuenciales impares entre el 1 y 7 inclusive y asignalo a numeros_imp. Imprimilo

In [22]: print('SIN REDONDEO')


precios_prom = precios_1.mean()
print(f"el promedio de precios es ${precios_prom}")
print('--------------')

SIN REDONDEO
el promedio de precios es $113.6857142857143
--------------

In [24]: print('CON REDONDEO')


precios_prom = round(precios_1.mean(),2)
print(f"el promedio de precios es ${precios_prom}")
print('--------------')

CON REDONDEO
el promedio de precios es $113.69
--------------

In [29]: # Ejercicio 12

# Encontrá los elementos de precios que superan a la media. Asignalos a bool_array. Imprimilo.
# Hacé un subset de precios usando bool_array y asigná el resultado a sobre_la_media

In [53]: print('precios que superan a la media')


bool_array = np.array(precios_1 > precios_prom)
print(f"bool_array {bool_array}")
print('--------------')
sobre_la_media = precios_1[bool_array]
print("precios que superan la media")
for i in sobre_la_media:
print(F"${i}")
print('--------------')

precios que superan a la media


bool_array [ True False False True True False False]
--------------
precios que superan la media
$170.12
$145.3
$171.81
--------------

In [6]: # Ejercicio 13

# Vamos a trabajar con estas dos listas


dias = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
cotizacion = [78.72, 78.31, 75.98, 78.21, 78.21, 76.34, 75.75, 75.71, 79.11, 78.09, 76.95, 80.51, 88.09, 87.25,

# Importá el módulo pyplot de la librería matplotlib bajo el alias plt


# Graficá los días en el eje x y los precios en el eje y como una línea a rayitas en rojo. Mostrá el gráfico co

# Solo después de mostrar el gráfico, agregá las etiquetas "Días" en el eje x y "Cotizaciones, $" en el eje y.
# Poné de título "Cotizaciones a través del tiempo".
# Mostrá el gráfico.

In [63]: import matplotlib.pyplot as plt

xs, ys = zip(*sorted(zip(dias, cotizacion)))

plt.plot(xs, ys,color = "red")


plt.xlabel('Días')
plt.ylabel('Cotizaciones, $')
plt.title(label="Cotizaciones a través del tiempo",fontsize=20,color="green")
plt.show()

In [64]: # Ejercicio 14

# En lo que sigue vas a usar la siguiente serie


dias_nuevos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 2
cotizacion_1 = [78.72, 78.31, 75.98, 78.21, 78.21, 76.34, 75.75, 75.71, 79.11, 78.09, 76.95, 80.51, 88.09, 87.2
cotizacion_2 = [62.957142000000005, 62.185715, 62.971428, 64.279999, 64.998573, 65.10714, 65.43, 66.38428499999

# Graficá cotizacion_1 con rojo y cotizacion_2 con verde manteniendo las etiquetas y títulos. No definas linest

# Scatterplot
# Dibujá un scatterplot con días en el eje x y cotizaciones en el eje y, con marcadores cyan. Agregá el argumen
# Este argumento s controla el tamaño del marcador
# Mostrá el gráfico. ¿Tiene sentido el gráfico que dibujaste? Explicalo

In [74]: xs, ys, zs = zip(*sorted(zip(dias_nuevos, cotizacion_1,cotizacion_2)))

plt.plot(xs, ys, color ="red")

plt.plot(xs, zs, color ="green")

plt.xlabel('Días')
plt.ylabel('Cotizaciones, $')
plt.title(label="Cotizaciones a través del tiempo",fontsize=20,color="green")

plt.show()
print('--------------------------------------------------------------')

plt.scatter(dias,cotizacion, \
color = "cyan",s=0.10)
plt.xlabel('Días')
plt.ylabel('Cotizaciones, $')
plt.title(label="Cotizaciones a través del tiempo",fontsize=20,color="green")
plt.show()

print("Este Scatter Plot no tiene mucho sentido visto de esta manera, \


ya que este tipo de grá ficos se utiliza para mostrar y comparar dos \
series de datos cuantitativos, de manera de poder identificar si se \
observa una correlación entre ellos y cómo se comporta una variable \
en función de la otra. En este caso no tiene sentido verificar esto \
con un scatter plot, ya que el dato de días es una serie de tiempo \
y es conveniente utilizar un gráfico de líneas en presencia de \
este tipo de datos. Se verifica que el resultado es el mismo \
que el que se hubiese obtenido utilizando un gráfico de líneas.")

--------------------------------------------------------------

Este Scatter Plot no tiene mucho sentido visto de esta manera, ya que este tipo de grá ficos se utiliza para mo
strar y comparar dos series de datos cuantitativos, de manera de poder identificar si se observa una correlació
n entre ellos y cómo se comporta una variable en función de la otra. En este caso no tiene sentido verificar es
to con un scatter plot, ya que el dato de días es una serie de tiempo y es conveniente utilizar un gráfico de l
íneas en presencia de este tipo de datos. Se verifica que el resultado es el mismo que el que se hubiese obteni
do utilizando un gráfico de líneas.

In [75]: # Ejercicio 15

# Importamos numpy as np

# Vamos a trabajar con la siguiente serie


precios = np.array([[1.55839539e+02], [8.66514953e+01], [1.75256365e+02], [3.10293484e+02],[7.79553576e+01], [7

# Dibujá un histograma con esta serie y 100 bins. Mostralo. ¿Es una distribución nomral? Describí la forma.

# Ahora vamos a usar estas series de datos


accion_1 = np.array([19.14369397, 39.97345447, 32.82978498, 14.93705286, 24.21399748, 46.51436537, 5.73320757,
accion_2 = np.array([27.63211784, 25.24374262, 24.07094031, 28.25354564, 29.41287444, 29.68108839, 21.53403859,

# Graficá el histograma de accion_1 y accion_2, juntos, con 100 bins y transparencia de 0.4
# Agregá las etiquetas accion_1 y accion_2. No te olvides de mostrar las etiquetas y el gráfico.
# Sacá conclusiones

In [76]: import numpy as np

In [118… plt.hist(precios, bins = 100, density = 0.5)


plt.xlabel('Precios')
plt.ylabel('Frecuencia')
plt.title(label="Histograma: serie de precios",fontsize=20,color="green")
plt.show()

print("No se observa una distribución normal, más bien \


las observaciones se acumulan a la izquierda del gráfico \
cerca del 0 y van disminuyendo en cantidad a medida que \
nos alejamos del cero con mayores precios.")
print('--------------------------------------------------------------')

plt.hist(accion_1, bins = 100, density = 0.4,


alpha=0.04

, label="accion_1")

plt.hist(accion_2, color="red", bins = 100, density = 0.4,


alpha=0.4
, label="accion_2")
plt.xlabel('Precios')
plt.ylabel('Frecuencia')
plt.title(label="Histograma: comparación de precios de acciones",fontsize=14,color="green")
plt.legend()
plt.show()

print("\n")
print("Se observan que los precios de la accion_2 presentan una \
mayor concentración en torno a su media, mientras que los \
precios de la accion_1 muestran una mayor dispersión \
(se comprueba con los cálculos debajo)")

print("\n")
print(F"precio promedio accion_1 ${round(accion_1.mean(),2)}")
print(F"desvío std promedio accion_1 ${round(accion_1.std(),2)}")
print('----------')
print(F"precio promedio accion_2 ${round(accion_2.mean(),2)}")
print(F"desvío std promedio accion_2 ${round(accion_2.std(),2)}")

No se observa una distribución normal, más bien las observaciones se acumulan a la izquierda del gráfico cerca
del 0 y van disminuyendo en cantidad a medida que nos alejamos del cero con mayores precios.
--------------------------------------------------------------

Se observan que los precios de la accion_2 presentan una mayor concentración en torno a su media, mientras que
los precios de la accion_1 muestran una mayor dispersión (se comprueba con los cálculos debajo)

precio promedio accion_1 $29.61


desvío std promedio accion_1 $10.03
----------
precio promedio accion_2 $24.86
desvío std promedio accion_2 $3.49

FIN Trabajo Práctico N° 1

También podría gustarte