In [36]:
import pandas as pd
from datetime import timedelta
In [37]:
#Importando información histórica de las acciones que componen el IGPA
FP = pd.read_csv("Stocks_punto.csv", sep='\t', encoding='utf-8')
FP['Date'] = pd.to_datetime(FP['Date'])
In [38]:
FP = FP[['Date', 'Ticker', 'Close']]
In [39]:
data1 =  FP[['Ticker','Date', 'Close']]
data2 =  FP[['Ticker','Date', 'Close']]
data3 =  FP[['Ticker','Date', 'Close']]
data4 =  FP[['Ticker','Date', 'Close']]

#Agregando la columna semana en cada dataset
data1.insert(3, "Week", data1['Date'].dt.year.astype(str) + data1['Date'].dt.week.astype(str))
data2.insert(3, "Week", (data2['Date']+ timedelta(days=-365) ).dt.year.astype(str) + (data2['Date']+ timedelta(days=-365) ).dt.week.astype(str))

data3.insert(3, "Week", (data3['Date']+ timedelta(days=-730) ).dt.year.astype(str) + (data3['Date']+ timedelta(days=-730) ).dt.week.astype(str))
data4.insert(3, "Week", (data3['Date']+ timedelta(days=-365*3) ).dt.year.astype(str) + (data3['Date']+ timedelta(days=-365*3) ).dt.week.astype(str))
In [40]:
#Obteniendo precio promedio para cada semana
data1 = data1.groupby(['Ticker','Week']).mean().reset_index()
data2 = data2.groupby(['Ticker','Week']).mean().reset_index()
data3 = data3.groupby(['Ticker','Week']).mean().reset_index()
data4 = data4.groupby(['Ticker','Week']).mean().reset_index()
In [41]:
#Uniendo los data sets para formar un solo conjunto de datos con las respectivos precios para cada año
s1 = pd.merge(data2, data1, how='left', on=['Ticker', 'Week'])
s1.rename(columns={'Close_y':'Close_y1',
                   'Close_x':'Close_y2'},  inplace=True)                     #y1: Year 1
s2 = pd.merge(data3, s1, how='left', on=['Ticker', 'Week'])
s2.rename(columns={'Close':'Close_y3'},  inplace=True)
stock_comparison = pd.merge(data4, s2, how='left', on=['Ticker', 'Week'])
stock_comparison.rename(columns={'Close':'Close_y4'},  inplace=True)
In [42]:
stock_comparison.tail(4)
Out[42]:
Ticker Week Close_y4 Close_y3 Close_y2 Close_y1
95464 ZOFRI 20176 599.47 731.06 666.000 524.60
95465 ZOFRI 20177 598.65 727.30 666.400 524.00
95466 ZOFRI 20178 598.00 727.30 687.434 524.00
95467 ZOFRI 20179 584.98 727.30 700.988 534.22
In [43]:
#Añadir columna correspondiente a la variación porcentual
stock_comparison.insert(5, "yearly_var", (stock_comparison['Close_y2']/stock_comparison['Close_y1'] ) - 1)
stock_comparison.insert(6, "yearly_var2", (stock_comparison['Close_y3']/stock_comparison['Close_y2'] ) - 1)
stock_comparison.insert(7, "yearly_var3", (stock_comparison['Close_y4']/stock_comparison['Close_y3'] ) - 1)

stock_comparison.insert(8, "yearly_var_avg", (stock_comparison['yearly_var']+stock_comparison['yearly_var2'] ) )
In [44]:
stock_comparison.tail(4)
Out[44]:
Ticker Week Close_y4 Close_y3 Close_y2 yearly_var yearly_var2 yearly_var3 yearly_var_avg Close_y1
95464 ZOFRI 20176 599.47 731.06 666.000 0.269539 0.097688 -0.179999 0.367226 524.60
95465 ZOFRI 20177 598.65 727.30 666.400 0.271756 0.091387 -0.176887 0.363142 524.00
95466 ZOFRI 20178 598.00 727.30 687.434 0.311897 0.057992 -0.177781 0.369889 524.00
95467 ZOFRI 20179 584.98 727.30 700.988 0.312171 0.037536 -0.195683 0.349707 534.22
In [45]:
#Filtrar rango de valores para el eje X 
stock_comparison = stock_comparison[stock_comparison['yearly_var'] < 4]
stock_comparison = stock_comparison[stock_comparison['yearly_var'] > -4]

#Filtrar rango de valores para el eje Y
stock_comparison = stock_comparison[stock_comparison['yearly_var2'] < 3]
stock_comparison = stock_comparison[stock_comparison['yearly_var2'] > -0.5]
In [46]:
#Plot1
import matplotlib.pyplot as plt
#plt.figure(figsize=(30,30))
#s2.plot( 'monthly_var', 'monthly_var2',  linestyle='', marker='o', markersize=0.7)

#s2.plot

fig, ax = plt.subplots()
stock_comparison.plot(kind='scatter', x='yearly_var', y='yearly_var2', ax=ax,  figsize=(15,7) )

# Turn on the grid
ax.grid()
'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'.  Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.
In [54]:
#Plot2
import seaborn as sns
stock_comparison.plot(figsize=(10,10))

# Custom the inside plot: options are: “scatter” | “reg” | “resid” | “kde” | “hex”
#s2.plot(kind='scatter', x='monthly_var', y='monthly_var2', ax=ax,  figsize=(20,30) )
sns.jointplot(x=stock_comparison["yearly_var"], y=stock_comparison["yearly_var2"], kind='hex')
plt.subplots_adjust(left=2, right=4, top=3, bottom=1.5)
In [47]:
#Filtrar rango de valores para el eje X 
stock_comparison = stock_comparison[stock_comparison['yearly_var'] < 0.75]
stock_comparison = stock_comparison[stock_comparison['yearly_var'] > -0.75]

#Filtrar rango de valores para el eje Y
stock_comparison = stock_comparison[stock_comparison['yearly_var2'] < 0.75]
stock_comparison = stock_comparison[stock_comparison['yearly_var2'] > -1]

stock_comparison = stock_comparison[stock_comparison['yearly_var3'] < 0.75]
stock_comparison = stock_comparison[stock_comparison['yearly_var3'] > -1]
#s3 = s2.copy(deep=True)
In [48]:
#Plot3
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(context="notebook", style="whitegrid",  rc={"axes.axisbelow": False})
stock_comparison.plot(figsize=(10,10))

sns.jointplot(x=stock_comparison["yearly_var"], y=stock_comparison["yearly_var2"], kind='kde')
plt.subplots_adjust(left=2, right=4, top=3, bottom=1.5)
In [49]:
stock_comparison.head(4)
Out[49]:
Ticker Week Close_y4 Close_y3 Close_y2 yearly_var yearly_var2 yearly_var3 yearly_var_avg Close_y1
148 AESGENER 199932 53.3425 135.960 98.2375 -0.252663 0.383993 -0.607660 0.131330 131.450
149 AESGENER 199933 47.9325 138.206 97.6600 -0.245904 0.415175 -0.653181 0.169271 129.506
150 AESGENER 199934 49.9900 143.715 97.4340 -0.264216 0.474998 -0.652159 0.210783 132.422
151 AESGENER 199935 49.0620 145.450 98.1200 -0.240792 0.482369 -0.662688 0.241576 129.240
In [50]:
stock_comparison2 = stock_comparison.loc[(stock_comparison['yearly_var'] >= 0.3) | (stock_comparison['yearly_var'] <= -0.35)]
In [51]:
# library & dataset
import seaborn as sns
sns.set(context="notebook", style="whitegrid",  rc={"axes.axisbelow": False})
stock_comparison2.plot(figsize=(10,10))

sns.jointplot(x=stock_comparison2["yearly_var"], y=stock_comparison2["yearly_var2"], kind='kde')
plt.subplots_adjust(left=2, right=4, top=3, bottom=1.5)
In [52]:
stock_comparison2 = stock_comparison[stock_comparison['yearly_var2'] > stock_comparison['yearly_var']]

stock_comparison2 = stock_comparison[stock_comparison['yearly_var_avg'] > 0.3]
In [53]:
# library & dataset
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(context="notebook", style="whitegrid",  rc={"axes.axisbelow": False})
stock_comparison2.plot(figsize=(10,10))

sns.jointplot(x=stock_comparison2["yearly_var_avg"], y=stock_comparison2["yearly_var3"], kind='kde')
plt.subplots_adjust(left=2, right=4, top=3, bottom=1.5)
In [ ]: