import numpy as np
#Normal random devuelve una distribución gausiana normal.
'''En normal el primer parámetro es la media de los valores, el segundo es la desviación
estandar o ancho de la distribución, y el tercero es el tamaño del vector.'''
vector = np.random.normal(0.0,1.0,100)
print(vector)
#Cargamos los vectores Et que contienen los valores aleatorios
vectEt1 = np.random.normal(0.0,1.0,100)
vectEt2 = np.random.normal(0.0,1.0,100)
#Creamos los vectores, en este caso, vacios
vectorX1= np.zeros([100,1])
vectorX2= np.zeros([100,1])
#Solo el primer valor de cada vector es cero
vectorX1[0],vectorX2[0] = 0,0
#Se realiza la fórmula
for i in range(1,100):
vectorX1[i] = 0.5 * vectorX1[i-1] + vectEt1[i]
vectorX2[i] = 0.8 * vectorX2[i-1] + vectEt2[i]
#Se procede a imprimir los vectores para verificar que hayan salido bien
print("Vector X1")
print(vectorX1)
print("Vector X2")
print(vectorX2)
#De manera semejante al anterior, se hace el mismo procedimiento
vectVt = np.random.normal(0.0,1.0,100)
vectorY= np.zeros([100,1])
for i in range(0,100):
vectorY[i] = 2 * vectorX1[i] + 3 * vectorX2[i] + vectVt[i]
print(vectorY)
#Concatenamos los 2 vectores en una matriz de 100x2
xtrain = np.concatenate((vectorX1,vectorX2),axis=1)
ytrain= vectorY
def ols_estimator(X, y):
#Se añade a la matriz xtrain una columna con numero uno.
X = np.c_[X,np.ones(X.shape[0])]
#Se realiza la multiplicación de matrices
#Debido a la forma de xtrain, no es necesario sacar su matriz transversal
w = np.linalg.lstsq(X,y,rcond=None)[0]
#retorna un vector con los valores del intercepto y coeficientes b de la ecuación
return w
b = ols_estimator(xtrain,ytrain)
print(f"Los coeficientes b de la ecuacion 'y = Xb + v' son {b[0]} y {b[1]}")
from sklearn.model_selection import train_test_split
#Se dividen en datos de entrenamiento y prueba, solo el 20% de la información será de prueba
X_train, X_test, y_train, y_test = train_test_split(xtrain, ytrain, test_size=0.2)
import sklearn.linear_model
#Se realiza el modelo de regresión
regresion = sklearn.linear_model.LinearRegression()
regresion.fit(X_train, y_train)
#Se realiza la predicción, aunque en este caso es más relevante los coeficientes
Y_pred_multiple = regresion.predict(X_test)
#Se imprimen los coeficientes de la ecuación de cada variable X
print(f"Los coeficientes b de la ecuacion 'y = Xb + v' son {regresion.coef_}")
import pandas as pd
import os
#Se procede a extraer los nombres de cada archivo dataset.
file = [f for f in os.listdir('./content/')]
file
#Se revisa desde donde empiezan los dataset
file[1]
#En la variable frame, se guardan los dataset usando sus nombres
#frame = pd.read_csv('./content/'+file[1],sep=',')
#frame['YEAR'] = int(file[1][-8:-4])
#En este bucle se guardan los dataset en uno solo, en este caso dentro de frame
#for i in file[2:8]:
# aux = pd.read_table('./content/'+i,sep=',')
#aux['YEAR'] = i[-8:-4]
#frame = frame.append(aux)
#print(frame)
#En la variable frame, se guardan la dataset del primer archivo usando sus nombres
frame = pd.read_csv('./content/'+file[0],sep=',')
# Se agrega una nueva columna AÑO, que contiene el año en string
frame['YEAR'] = int(file[0][-8:-4])
#En este bucle se guardan los dataset en del segundo a ultimo valor, en este caso dentro de frame
for i in file[1:7]:
aux = pd.read_table('./content/'+i,sep=',')
aux['YEAR'] = i[-8:-4]
#Añade al dataframe
frame = frame.append(aux)
#Imprime el frame
print(frame)
#Se repara en la variable dat, los atributos del dataset que se van a usar
dat = frame[['RESIDENCIA','SEXO','YEAR','CANTIDAD']]
#Se usa un filtro para tener solo las personas de residencia extranjera
dat = dat[dat['RESIDENCIA']=='Extranjero']
#filtro para tener solo varones
dat_masc = dat[dat['SEXO']=='Hombre']
#filtro para los años 2018 y 2019
dat_masc_2018 = dat_masc[dat_masc['YEAR']== 2018]
dat_masc_2019 = dat_masc[dat_masc['YEAR']== 2019]
#Se concatenan los dos filtros en uno solo
dat_masc_2018_2019 = pd.concat([dat_masc_2018,dat_masc_2019])
#Se cambia el tipo de dato, debido a que su dataset origen era de puros caracteres.
dat_masc_2018_2019['CANTIDAD'] = dat_masc_2018_2019['CANTIDAD'].astype(int)
sum(dat_masc_2018_2019['CANTIDAD'])
#Se cambian los datos a enteros, como se explicó anteriormente
frame['YEAR'] = frame['YEAR'].astype(int)
frame['EDAD'] = frame['EDAD'].astype(int)
frame['CANTIDAD'] = frame['CANTIDAD'].astype(int)
#Se escogen los atributos a utilizar
data2 = frame[['DEPARTAMENTO','SEXO','YEAR','EDAD','CANTIDAD']]
#Se realizan los filtros
data_areq = data2[data2['DEPARTAMENTO']=='Arequipa']
data_areq_women = data_areq[data_areq['SEXO']=='Mujer']
data_areq_women = data_areq_women[data_areq_women['YEAR'] <= 2018]
data_areq_women = data_areq_women[data_areq_women['YEAR'] >= 2016]
data_areq_young_women = data_areq_women[data_areq_women['EDAD']>=10]
data_areq_young_women = data_areq_women[data_areq_women['EDAD']<=19]
#Se suman la cantidad de mujeres de arequipa
women_areq = sum(data_areq_women['CANTIDAD'])
#Se suman la cant. de mujeres jóvenes de arequipa
teenagers_areq = sum(data_areq_young_women['CANTIDAD'])
print(f"% de adolecentes mujeres en arequipa en relacion a cant. de mujeres: {teenagers_areq/women_areq*100}%")
data_adults = frame[['YEAR','EDAD','CANTIDAD']]
data_major_adults = data_adults[data_adults['EDAD'] >= 60]
#se crea un nuevo atributo multiplicando los atributos edad y cantidad
data_major_adults['EDAD_POR_CANTIDAD'] = data_major_adults['EDAD']*data_major_adults['CANTIDAD']
#Se agrupa la info por año.
adults_group = data_major_adults.groupby(['YEAR'],as_index=False).sum()
#se crea un nuevo atributo dividiento edad por cantidad, entre cantidad
adults_group['PROM_EDAD'] = adults_group['EDAD_POR_CANTIDAD']/adults_group['CANTIDAD']
#Se ordena de acuerdo al mayor promedio de edad
adults_group.sort_values(by=['PROM_EDAD'],inplace=True, ascending=False)
print(adults_group[['YEAR','PROM_EDAD']])
print("El mayor promedio de edad de personas adultas mayores a 65 años es del 2018")
#Se reutiliza el procedimiento anterior, usando los siguientes datos
data4 = frame[['SEXO','EDAD','CANTIDAD','PROVINCIA']]
males = data4[data4['SEXO'] == 'Hombre']
males['EDAD_POR_CANTIDAD'] = males['EDAD']*males['CANTIDAD']
males_group = males.groupby(['PROVINCIA'],as_index=False).sum()
males_group['PROM_EDAD'] = males_group['EDAD_POR_CANTIDAD']/males_group['CANTIDAD']
males_group.sort_values(by=['PROM_EDAD'],inplace=True, ascending=False)
males_group[['PROVINCIA','PROM_EDAD']].head()
#Se reutiliza el procedimiento anterior, usando los siguientes datos
females = data4[data4['SEXO'] == 'Mujer']
females['EDAD_POR_CANTIDAD'] = females['EDAD']*females['CANTIDAD']
females_group = females.groupby(['PROVINCIA'],as_index=False).sum()
females_group['PROM_EDAD'] = females_group['EDAD_POR_CANTIDAD']/females_group['CANTIDAD']
females_group.sort_values(by=['PROM_EDAD'],inplace=True, ascending=False)
females_group[['PROVINCIA','PROM_EDAD']].head()
import seaborn as sns
import matplotlib.pyplot as plt
#En una variable se agrupan por sexo y se ordenan de acuerdo a promedios.
data_adults = frame[['SEXO','EDAD']]
groups_adults = data_adults.groupby(['SEXO'],as_index=False).mean()
groups_adults.sort_values(by=['EDAD'],inplace=True, ascending=False)
groups_adults
plt.figure(figsize=(13, 13))
sns.boxplot(x='SEXO',y='EDAD',data=frame,palette='flare')
#Histograma filtrando el sexo como Mujer
framefemale = frame[frame['SEXO']=='Mujer']
framefemale['EDAD'].hist(color='plum',bins=30,figsize=(10,5))
#Histograma filtrando el sexo como Hombre
framemale = frame[frame['SEXO']=='Hombre']
framemale['EDAD'].hist(color='sandybrown',bins=30,figsize=(10,5))
from scipy import stats
adults = frame[['SEXO','EDAD']]
group_adult = adults.groupby('SEXO')
anova = stats.f_oneway(group_adult.get_group('Hombre')['EDAD'],group_adult.get_group('Mujer')['EDAD'])
anova