You are on page 1of 19

Codigo a analizar:

!pip install --upgrade xlrd -q

#!pip install --upgrade pandas -q

import pandas as pd

from functools import reduce

import numpy as np

%matplotlib inline

import matplotlib.pyplot as plt

import matplotlib

from matplotlib.pyplot import figure

import seaborn as sns

import matplotlib.dates as mdates

from matplotlib.ticker import FormatStrFormatter

import warnings

warnings.filterwarnings('ignore')

!wget "https://www.imf.org/-/media/Files/Research/CommodityPrices/Monthly/external-
dataapril.ashx" -O data.xls

import pandas as pd

pd.set_option('display.max_columns', None)

data = pd.read_excel('/content/data.xls')

data.head(5)

data.drop(data.index[0:3], axis=0, inplace=True)

data

print(data['Commodity'].iloc[0])

print(data['Commodity'].iloc[-1])

data=data[['PALLFNF', 'PFOOD', 'PINDU', 'PRAWM', 'PALLMETA','PNRG']]

data
data.columns = ['Total','Alimentos','Industrial','Agro','Metales','Energia']

data

data.dtypes

data = data.apply(pd.to_numeric)

data.dtypes

data

data['date']=pd.date_range(start='1990/1/1', end='2023/4/1', freq='MS')

data['date']=data['date'].dt.strftime('%Y-%m')

data

col = data.pop("date")

data.insert(0, col.name, col)

data

data=data.dropna()

data

data=data.reset_index(drop=True)

data

data.to_csv('Indices_Commodities.csv')

data.plot.line(x='date', y=['Alimentos', 'Industrial', 'Agro', 'Metales', 'Energia'] , figsize=(10,8))

data.plot.line(x='date', y='Total', figsize=(10,8))

data.describe()

variables1 = ['Energia', 'Industrial',

'Agro','Alimentos','Metales']

fig, axes = plt.subplots(1, len(variables1), figsize=(18,8))

for ax, variable1 in zip(axes, variables1):


ax = sns.histplot(data[variable1],bins=15,ax=ax, palette='plasma')

plt.tight_layout()

variables1 = ['Energia', 'Industrial',

'Agro','Alimentos','Metales']

fig, axes = plt.subplots(1, len(variables1), figsize=(18,8))

for ax, variable1 in zip(axes, variables1):

ax = sns.kdeplot(data[variable1],ax=ax,shade=True, palette='plasma')

plt.tight_layout()

variables1 = ['Energia', 'Industrial',

'Agro','Alimentos','Metales']

fig, axes = plt.subplots(1, len(variables1), figsize=(18,8))

for ax, variable1 in zip(axes, variables1):

ax = sns.violinplot( y=variable1, data=data, ax=ax, palette='plasma')

plt.tight_layout()

fig = plt.figure(figsize=(20,10))

sns.histplot(data['Alimentos'], kde=False, bins=15, label='Alimentos', color='red')

sns.histplot(data['Industrial'], kde=False, bins=15, label='Industrial', color='blue')

sns.histplot(data['Agro'], kde=False, bins=15, label='Agro', color='green')

sns.histplot(data['Energia'], kde=False, bins=15, label='Energia',color='yellow')

sns.histplot(data['Metales'], kde=False, bins=15, label='Metales',color='orange')

#sns.histplot(data['Total'], kde=False, bins=15, label='total')

fig.legend()

plt.xlabel('Distribucion', fontsize=12)
plt.ylabel('Densidad', fontsize=12)

plt.title('Distribución de Todos los Índices', fontsize=16)

plt.show()

fig, ax = plt.subplots(figsize=(20,10))

sns.kdeplot(data.Alimentos, label='Alimentos', shade=True, color='red', )

sns.kdeplot(data.Industrial, label='Industrial', shade=True, color='blue')

sns.kdeplot(data.Agro, label='Agro', shade=True, color='green')

sns.kdeplot(data.Energia, label='Energia', shade=True, color='yellow')

sns.kdeplot(data.Metales, label='Metals', shade=True, color='orange')

plt.legend()

plt.title('Distribucion del valor de todos los Índices', fontsize=18)

plt.xlabel('Price ($USD)', fontsize=14)

plt.ylabel('Density', fontsize=14)

plt.show()

CorrelacionP = data.corr()

CorrelacionP

import pandas as pd

import numpy as np

corr = data.corr()

corr.style.background_gradient(cmap='coolwarm')

g = sns.PairGrid(data, x_vars=['Agro','Alimentos','Industrial','Metales','Energia'], y_vars='Total',


height=5, palette='plasma')

g.map(sns.scatterplot)
--------------------------------------------------------------

###Actividad propuesta 3

periods = [

('2003-01', '2007-12'),

('2008-01', '2014-12'),

('2015-01', '2018-12'),

('2019-01', data['date'].max())

columns_to_process = [col for col in data.columns if col != 'date']

means = {}

stds = {}

for start, end in periods:

means_period = {}

stds_period = {}

for col in columns_to_process:

period_data = data.loc[(data['date'] >= start) & (data['date'] <= end), col]

mean = period_data.mean()

std = period_data.std()
means_period[col] = mean

stds_period[col] = std

means[f'{start} to {end}'] = means_period

stds[f'{start} to {end}'] = stds_period

means_df = pd.DataFrame(means).T

stds_df = pd.DataFrame(stds).T

print('Means:')

means_df

print('\nStandard deviations:')

stds_df

from scipy.stats import ttest_ind

periods = [

('2003-01', '2007-12'),

('2008-01', '2014-12'),

('2015-01', '2018-12'),

('2019-01', data['date'].max())

columns_to_process = [col for col in data.columns if col != 'date']

means = {}

stds = {}

for start, end in periods:

means_period = {}
stds_period = {}

for col in columns_to_process:

period_data = data.loc[(data['date'] >= start) & (data['date'] <= end), col]

mean = period_data.mean()

std = period_data.std()

means_period[col] = mean

stds_period[col] = std

means[f'{start} to {end}'] = means_period

stds[f'{start} to {end}'] = stds_period

means_df = pd.DataFrame(means).T

stds_df = pd.DataFrame(stds).T

print('Means:')

print(means_df)

print('\nStandard deviations:')

print(stds_df)

for col in columns_to_process:

print(f'\nT-tests for {col}:')

for i in range(len(periods) - 1):

for j in range(i+1, len(periods)):

period1 = f'{periods[i][0]} to {periods[i][1]}'

period2 = f'{periods[j][0]} to {periods[j][1]}'

data1 = data.loc[(data['date'] >= periods[i][0]) & (data['date'] <= periods[i][1]), col]

data2 = data.loc[(data['date'] >= periods[j][0]) & (data['date'] <= periods[j][1]), col]


t, p = ttest_ind(data1, data2, equal_var=False)

print(f'{period1} vs {period2}: t={t:.2f}, p={p:.5f}')

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

ACT PRO 4

# Calcular el índice promedio de las columnas 'Alimentos', 'Industrial', 'Agro', 'Metales' y 'Energia'

data['Indice_promedio'] = data[['Alimentos', 'Industrial', 'Agro', 'Metales', 'Energia']].mean(axis=1)

# Calcular la media del índice total y el índice promedio

media_total = data['Total'].mean()

media_promedio = data['Indice_promedio'].mean()

# Realizar prueba de hipótesis para comparar las medias

from scipy.stats import ttest_ind

t, p = ttest_ind(data['Total'], data['Indice_promedio'], equal_var=False)

# Comentar sobre los resultados

print(f"Media del índice total: {media_total:.2f}")

print(f"Media del índice promedio: {media_promedio:.2f}")

print(f"Resultado de la prueba de hipótesis:")

print(f" - Estadístico t: {t:.2f}")

print(f" - Valor p: {p:.5f}")

if p < 0.05:

print("La diferencia entre las medias es estadísticamente significativa.")


else:

print("No se encontró una diferencia estadísticamente significativa entre las medias.")

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

####Actividad Propuesta 5

!pip install --upgrade xlrd -q

#!pip install --upgrade pandas -q

import pandas as pd

from functools import reduce

import numpy as np

%matplotlib inline

import matplotlib.pyplot as plt

import matplotlib

from matplotlib.pyplot import figure

import seaborn as sns

import matplotlib.dates as mdates

from matplotlib.ticker import FormatStrFormatter

import warnings

warnings.filterwarnings('ignore')

!wget "https://www.imf.org/-/media/Files/Research/CommodityPrices/Monthly/external-
dataapril.ashx" -O data.xls

import pandas as pd

pd.set_option('display.max_columns', None)

data = pd.read_excel('/content/data.xls')

data.head(5)
data.drop(data.index[0:3], axis=0, inplace=True)

data

print(data['Commodity'].iloc[0])

print(data['Commodity'].iloc[-1])

data=data[['PALLFNF', 'PFOOD', 'PINDU', 'PRAWM', 'PALLMETA','PNRG','PFERT']]

data

data.columns = ['Total','Alimentos','Industrial','Agro','Metales','Energia','Fertilizantes']

data

data.dtypes

data = data.apply(pd.to_numeric)

data.dtypes

data

data['date']=pd.date_range(start='1990/1/1', end='2023/4/1', freq='MS')

data['date']=data['date'].dt.strftime('%Y-%m')

data

col = data.pop("date")

data.insert(0, col.name, col)

data

data=data.dropna()

data

data=data.reset_index(drop=True)

data

data.to_csv('Indices_Commodities.csv')

data.plot.line(x='date', y=['Alimentos', 'Industrial', 'Agro', 'Metales', 'Energia','Fertilizantes'] ,


figsize=(10,8))
data.plot.line(x='date', y='Total', figsize=(10,8))

data.describe()

variables1 = ['Energia', 'Industrial',

'Agro','Alimentos','Metales','Fertilizantes']

fig, axes = plt.subplots(1, len(variables1), figsize=(18,8))

for ax, variable1 in zip(axes, variables1):

ax = sns.histplot(data[variable1],bins=15,ax=ax, palette='plasma')

plt.tight_layout()

variables1 = ['Energia', 'Industrial',

'Agro','Alimentos','Metales','Fertilizantes']

fig, axes = plt.subplots(1, len(variables1), figsize=(18,8))

for ax, variable1 in zip(axes, variables1):

ax = sns.kdeplot(data[variable1],ax=ax,shade=True, palette='plasma')

plt.tight_layout()

variables1 = ['Energia', 'Industrial',

'Agro','Alimentos','Metales','Fertilizantes']

fig, axes = plt.subplots(1, len(variables1), figsize=(18,8))

for ax, variable1 in zip(axes, variables1):

ax = sns.violinplot( y=variable1, data=data, ax=ax, palette='plasma')

plt.tight_layout()

fig = plt.figure(figsize=(20,10))

sns.histplot(data['Alimentos'], kde=False, bins=15, label='Alimentos', color='red')

sns.histplot(data['Industrial'], kde=False, bins=15, label='Industrial', color='blue')


sns.histplot(data['Agro'], kde=False, bins=15, label='Agro', color='green')

sns.histplot(data['Energia'], kde=False, bins=15, label='Energia',color='yellow')

sns.histplot(data['Metales'], kde=False, bins=15, label='Metales',color='orange')

sns.histplot(data['Fertilizantes'], kde=False, bins=15, label='Fertilizantes',color='pink')

#sns.histplot(data['Total'], kde=False, bins=15, label='total')

fig.legend()

plt.xlabel('Distribucion', fontsize=12)

plt.ylabel('Densidad', fontsize=12)

plt.title('Distribución de Todos los Índices', fontsize=16)

plt.show()

fig, ax = plt.subplots(figsize=(20,10))

sns.kdeplot(data.Alimentos, label='Alimentos', shade=True, color='red', )

sns.kdeplot(data.Industrial, label='Industrial', shade=True, color='blue')

sns.kdeplot(data.Agro, label='Agro', shade=True, color='green')

sns.kdeplot(data.Energia, label='Energia', shade=True, color='yellow')

sns.kdeplot(data.Metales, label='Metals', shade=True, color='orange')

sns.kdeplot(data.Fertilizantes, label='fertilizers', shade=True, color='pink')

plt.legend()

plt.title('Distribucion del valor de todos los Índices', fontsize=18)

plt.xlabel('Price ($USD)', fontsize=14)

plt.ylabel('Density', fontsize=14)

plt.show()

CorrelacionP = data.corr()

CorrelacionP

import pandas as pd

import numpy as np
corr = data.corr()

corr.style.background_gradient(cmap='coolwarm')

g = sns.PairGrid(data, x_vars=['Agro','Alimentos','Industrial','Metales','Energia','Fertilizantes'],
y_vars='Total', height=5, palette='plasma')

g.map(sns.scatterplot)

###Actividad propuesta 3 para la Actividad propuesta 5

import pandas as pd

from scipy.stats import ttest_ind

periods = [

('2003-01', '2007-12'),

('2008-01', '2014-12'),

('2015-01', '2018-12'),

('2019-01', data['date'].max())

columns_to_process = [col for col in data.columns if col != 'date']

means = {}

stds = {}

for start, end in periods:

means_period = {}

stds_period = {}

for col in columns_to_process:


period_data = data.loc[(data['date'] >= start) & (data['date'] <= end), col]

mean = period_data.mean()

std = period_data.std()

means_period[col] = mean

stds_period[col] = std

means[f'{start} to {end}'] = means_period

stds[f'{start} to {end}'] = stds_period

means_df = pd.DataFrame(means).T

stds_df = pd.DataFrame(stds).T

print('Means:')

print(means_df)

print('\nStandard deviations:')

print(stds_df)

for col in columns_to_process:

print(f'\nT-tests for {col}:')

for i in range(len(periods) - 1):

for j in range(i + 1, len(periods)):

period1 = f'{periods[i][0]} to {periods[i][1]}'

period2 = f'{periods[j][0]} to {periods[j][1]}'

data1 = data.loc[(data['date'] >= periods[i][0]) & (data['date'] <= periods[i][1]), col]

data2 = data.loc[(data['date'] >= periods[j][0]) & (data['date'] <= periods[j][1]), col]

t, p = ttest_ind(data1, data2, equal_var=False)

print(f'{period1} vs {period2}: t={t:.2f}, p={p:.5f}')


###Act propuesta 4 para la act propuesta 5

# Calcular el índice promedio de las columnas 'Alimentos', 'Industrial', 'Agro', 'Metales' ,'Energia'
'Fertilizantes'

data['Indice_promedio'] = data[['Alimentos', 'Industrial', 'Agro', 'Metales',


'Energia','Fertilizantes']].mean(axis=1)

# Calcular la media del índice total y el índice promedio

media_total = data['Total'].mean()

media_promedio = data['Indice_promedio'].mean()

# Realizar prueba de hipótesis para comparar las medias

from scipy.stats import ttest_ind

t, p = ttest_ind(data['Total'], data['Indice_promedio'], equal_var=False)

# Comentar sobre los resultados

print(f"Media del índice total: {media_total:.2f}")

print(f"Media del índice promedio: {media_promedio:.2f}")

print(f"Resultado de la prueba de hipótesis:")

print(f" - Estadístico t: {t:.2f}")

print(f" - Valor p: {p:.5f}")

if p < 0.05:

print("La diferencia entre las medias es estadísticamente significativa.")

else:

print("No se encontró una diferencia estadísticamente significativa entre las medias.")


EXPLICACION DEL CODIGO:

El código proporcionado realiza varias operaciones relacionadas con el análisis de datos de precios
de productos básicos (commodities). A continuación, se proporciona una explicación detallada de
las diferentes partes del código:

Instalación de bibliotecas:

Se realiza la instalación de las bibliotecas 'xlrd' y 'pandas' utilizando el comando !pip install en
silencio (-q).

Importación de bibliotecas:

Se importan las siguientes bibliotecas necesarias para el análisis de datos: pandas, reduce de la
biblioteca functools, numpy, matplotlib.pyplot y seaborn.

También se importan algunos módulos específicos de las bibliotecas, como matplotlib.dates,


FormatStrFormatter y warnings.

Descarga de datos:

Se utiliza el comando wget para descargar un archivo de datos de precios de productos básicos
desde una URL específica. El archivo se guarda con el nombre 'data.xls'.

Lectura y preprocesamiento de datos:

Se utiliza la biblioteca pandas para leer el archivo 'data.xls' y cargar los datos en un DataFrame
llamado 'data'.

Se eliminan las primeras tres filas del DataFrame, ya que contienen información irrelevante.

Se seleccionan columnas específicas del DataFrame y se renombran para mayor claridad.

Se convierten los datos en columnas numéricas para asegurar que se puedan realizar cálculos
numéricos en ellos.

Se crea una nueva columna llamada 'date' que representa la fecha en formato de año y mes.

Se eliminan las filas que contienen valores faltantes (NaN) en el DataFrame.

Se restablecen los índices del DataFrame.

Visualización de datos:
Se utiliza el método plot.line de pandas para trazar varias líneas en función de las columnas
seleccionadas del DataFrame.

Se generan gráficos de histogramas, gráficos de densidad y gráficos de violín utilizando las


bibliotecas seaborn y matplotlib.pyplot.

Análisis de correlación:

Se calcula la matriz de correlación utilizando el método corr de pandas.

Se utiliza la función style.background_gradient de pandas para aplicar un esquema de color a la


matriz de correlación y resaltar las relaciones de correlación.

Prueba de hipótesis:

Se definen varios períodos de tiempo utilizando tuplas que representan los rangos de fechas.

Se calculan las medias y desviaciones estándar de las columnas seleccionadas del DataFrame para
cada período de tiempo.

Se realiza una prueba de hipótesis utilizando el método ttest_ind de la biblioteca scipy.stats para
comparar las medias de dos períodos diferentes.

Los resultados de las pruebas de hipótesis se imprimen en la consola.

Cálculo de índices promedio:

Se calcula un índice promedio a partir de las columnas 'Alimentos', 'Industrial', 'Agro', 'Metales' y
'Energia' y se agrega como una nueva columna llamada 'Indice_promedio' al DataFrame.

Se calcula la media del índice total y el índice promedio utilizando el método mean de pandas.
INFORMACION COMPLEMENTARIA:

El código proporcionado realiza varias tareas relacionadas con el análisis y visualización de datos
de commodities. A continuación se explica paso a paso lo que hace:

Instalación y actualización de paquetes: La primera línea de código instala y actualiza el paquete


"xlrd" silenciosamente utilizando pip.

Importación de bibliotecas: El código importa varias bibliotecas necesarias para el análisis y


visualización de datos, como pandas, numpy, matplotlib, seaborn, entre otras.

Descarga y lectura de datos: El código utiliza el comando wget para descargar un archivo de datos
en formato Excel desde una URL específica. Luego, utiliza la biblioteca pandas para leer el archivo
Excel en un DataFrame llamado "data".

Preprocesamiento de datos: El código realiza varias operaciones de preprocesamiento en el


DataFrame "data". Elimina las primeras tres filas del DataFrame, selecciona columnas específicas,
renombra las columnas, convierte los tipos de datos a numéricos y agrega una columna de fechas.

Análisis y visualización de datos: A continuación, el código realiza varias operaciones de análisis y


visualización de datos utilizando las bibliotecas matplotlib y seaborn. Genera gráficos de líneas,
histogramas, gráficos de densidad, gráficos de violín y gráficos de correlación.

Pruebas de hipótesis: El código realiza pruebas de hipótesis utilizando el estadístico t para


comparar las medias de diferentes períodos de tiempo en las columnas de datos. Calcula las
medias y desviaciones estándar para cada período y realiza las pruebas de hipótesis utilizando el
comando ttest_ind de la biblioteca scipy.stats.

Cálculo de índices y comparación de medias: El código realiza cálculos adicionales en el DataFrame


"data" para calcular un índice promedio de ciertas columnas. Luego, calcula las medias del índice
total y el índice promedio y realiza una prueba de hipótesis para comparar las medias.

Más análisis y visualización de datos: El código realiza análisis y visualización adicionales en el


DataFrame "data", incluyendo gráficos de líneas, histogramas, gráficos de densidad y gráficos de
correlación.
En resumen, el código realiza una variedad de tareas relacionadas con el análisis y visualización de
datos de commodities, incluyendo la descarga y lectura de datos, preprocesamiento de datos,
análisis estadístico y generación de gráficos. Cada sección del código se enfoca en una tarea
específica y utiliza las bibliotecas adecuadas para realizar las operaciones necesarias.

You might also like