0% encontró este documento útil (0 votos)
64 vistas17 páginas

Analítica de Datos y Clustering

1. Se presenta la práctica No. 2 de análisis de datos de la Facultad de Ingeniería Industrial y de Sistemas de la Universidad Nacional de Ingeniería. 2. Se calcula la matriz de similitud entre productos usando el índice Jaccard, y se identifican los productos con una similitud mayor al 80%. 3. Se grafican series temporales de índices bursátiles usando subplots para mejor visualización, y se realiza un análisis de clustering jerárquico utilizando la distancia dinámica del
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
64 vistas17 páginas

Analítica de Datos y Clustering

1. Se presenta la práctica No. 2 de análisis de datos de la Facultad de Ingeniería Industrial y de Sistemas de la Universidad Nacional de Ingeniería. 2. Se calcula la matriz de similitud entre productos usando el índice Jaccard, y se identifican los productos con una similitud mayor al 80%. 3. Se grafican series temporales de índices bursátiles usando subplots para mejor visualización, y se realiza un análisis de clustering jerárquico utilizando la distancia dinámica del
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL DE INGENIERÍA

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS

ANALÍTICA DE DATOS

Práctica Nº2

Integrantes:
Lescano Avalos Miguel Angel 20161212D
Pazce Alama Patricia Elena 20162612F
Timana Mendoza Abelardo 20152582G
Obregon Zavaleta Harold André 20161081G

Docente:

ARADIEL CASTAÑEDA, HILARIO

2020
1. Descripción General

2. Índice Jaccard
2.1. Porcentaje de Similitud entre Productos
#Leyendo el archivo
df_ingprod=pd.read_csv("Listado de Ingredientes por
[Link]",sep=',', encoding='latin-1')

#Funcion Jaccard
def jaccard_sim(str1, str2):
a = str1
b = str2
interseccion = (a&b).sum()
union = (a|b).sum()
return round((interseccion/union)*100)

#Formar la tabla de frecuencias de producto por ingredientes


MatrizIXP =
[Link](index=df_ingprod['Ingrediente'],columns=df_ingpr
od['Producto'],margins=False)
ArrProductos= [Link]
ArrIngredientes= [Link]
MatrizJaccard.to_csv('[Link]',sep=',',
encoding='latin-1')
print(MatrizIXP)

#Generar Dataframe vacío de productos


zero_data =
[Link](shape=([Link][1],[Link][1]))
MatrizJaccard =
[Link](zero_data,index=ArrProductos,columns=ArrProduct
os)

#Recorrer matriz producto por ingredientes


for i in range(0,[Link][1]):
for j in range(0,[Link][1]):

coefJaccard=jaccard_sim(MatrizIXP[ArrProductos[i]],MatrizIXP
[ArrProductos[j]])

MatrizJaccard[[Link][i]].values[j]=coefJaccard

MatrizJaccard[[Link][j]].values[i]=coefJaccard

MatrizJaccard.to_csv('[Link]',sep=',', encoding='latin-
1')
print(MatrizJaccard)

Resultados:
1. Matriz frecuencias de ingredientes por producto

2. Matriz de porcentaje de similitud entre productos con el índice Jaccard.

Conclusiones:
Los productos con un porcentaje de similitud mayor al 80% son: (19,16,88%)
(18,17,89%) (7,8,83%) (7,6,94%) (7,9,82%) (9,5,88%).

3.

3. Análisis de Componentes Principales (ACP)


3.1. Clustering Jerárquico
4. Clustering Jerárquico de Series Temporales
4.1. Carga de Archivos y gráfica de datos

Cargamos el archivo csv:


from [Link] import files
import pandas as pd
import numpy as np
cargar=[Link]
IB=pd.read_csv("/content/indices bursatiles retornos
[Link]",sep=',', encoding='latin-1')
#Mostrar primeros elementos
[Link]()

#Graficamos las variaciones que han tenido los índices


bursátiles a través de las 73 semanas...
[Link]()
#Como se puede observar, matplotlib arroja todo en una sola
gráfica, lo que hace difícil su visualización

# Para solucionar ello, podemos utilizar los "subplots" o


subtramas
import [Link] as plt
[Link](subplots=True)
[Link]()
# El inconveniente con este método es el limitado rango de
cada una de las gráficas.

#Por ello, debemos establecer un orden de cada subgráfico a


manera de matriz.
# Crearemos un conjunto de gráficos, ordenados en 3 filas y
2 columnas:
fig, axes = [Link](nrows=3, ncols=2, figsize=(10,8));
axes
#Hacemos un cambio de variable de cada subgráfico}
ax11 = axes[0][0]
ax12 = axes[0][1]
ax21 = axes[1][0]
ax22 = axes[1][1]
ax31 = axes[2][0]
ax32 = axes[2][1]

#Indicamos el grosor de la línea de las gráficas


line_width = 1.5

#Graficamos cada columna en un subgráfico


[Link](ax=ax11, c='blue', lw=line_width, ylim=[-15,
15])
[Link](ax=ax12, c='orange', lw=line_width, ylim=[-
15, 15])
[Link](ax=ax21, c='green', lw=line_width, ylim=[-
15, 15])
[Link](ax=ax22, c='brown', lw=line_width, ylim=[-15,
15])
[Link](ax=ax31, c='green', lw=line_width, ylim=[-
15, 15])
[Link](ax=ax32, c='brown', lw=line_width, ylim=[-15,
15])
#Graficamos
fig
#Podemos añadir mas características al gráfico anterior,
como poner cuadrículas o establecer etiquetas:
line_width = 1.5

# Aumentamos "Grid=True" para ver cuadrículas


[Link](ax=ax11, c='blue', lw=line_width, ylim=[-15,
15], grid=True)
[Link](ax=ax12, c='orange', lw=line_width, ylim=[-
15, 15], grid=True)
[Link](ax=ax21, c='green', lw=line_width, ylim=[-
15, 15], grid=True)
[Link](ax=ax22, c='brown', lw=line_width, ylim=[-15,
15], grid=True)
[Link](ax=ax31, c='green', lw=line_width, ylim=[-
15, 15], grid=True)
[Link](ax=ax32, c='brown', lw=line_width, ylim=[-15,
15], grid=True)
#
# Colocamos título a la figura
[Link]('Evolución de Indices')
# Nombrando las axisas y ordenadas
ax31.set_xlabel('Tiempo (Días)')
ax32.set_xlabel('Tiempo (Días)')
ax11.set_ylabel('FCHI')
ax12.set_ylabel('GDAXI')
ax21.set_ylabel('IBEX')
ax22.set_ylabel('NDX')
ax31.set_ylabel('N225')
ax32.set_ylabel('STI')

# Graficamos
fig

4.2. Clustering Jerárquico de Series Temporales


¿Qué son los Clusters Jerárquicos?
Es una representación mediante un método de clasificación
automática de datos. Es muy útil en algoritmos de aprendizaje no
supervisado.

Los Clusters jerarquicos sirven para la agrupación de individuos u


objetos que tienen similares características. La gráfica de los clusters
son los llamados "Dendrogramas".

Existen diversos métodos para hallar las similitudes entre los


individuos, el más utilizado es el método de la "Distancia
Euclidiana",que aplica dicha fórmula a cada columna de cada dos
individuos, estableciendo la distancia entre ellos.
No obstante, para series de tiempo el algoritmo euclidiano no es el
más óptimo. El Dynamic Time Warping(DTW) es un método que
considera las frecuencias de la misma serie, a comparación de la
euclidiana que lo hace punto por punto de las dos series. La gran
desventaja de la DTW es el amplio tiempo de procesamiento en
grandes bases de datos.

#Hallando el Cluster Jerarquico utilizando el método DTW


# Para ello, primero transponemos la matriz de los
datos,pues hallaremos las similitudes de cada Bolsa de
valores
IBTranspuesto=[Link]()

#Para poder utilizar el dtw, debemos instalarlo


previamente...
!pip install dtw-python
#Hacemos lo mismo para la librería dtaidistance, que sirve
para las gráficas de dendrogramas especiales
!pip install dtaidistance[numpy]
#Calculamos las distancias DTW de cada índice bursátil...
IB2=pd.read_csv("/content/indices bursatiles retornos
[Link]",sep=',', encoding='latin-1',index_col=0)
IBTranspuesto2=[Link]()
# calculate series cost
results = dtw.distance_matrix_fast(IBTranspuesto2,
compact=True)
results

array('d', [5.533002271527661, 8.634772506216766,


16.55046612413815, 15.809303264515696, 15.745447986305104,
9.370125074875622, 16.610876823871727, 16.08453492183169,
15.63766660730683, 16.212678730338315, 16.67685145617768,
15.51778666892907, 19.12250581857366, 18.812911522837595,
12.12313466558908])

#Mostramos el dendrograma
import [Link] as shc
[Link](figsize=(10, 7))
[Link]("Dendrograms")
#dend = [Link]([Link](results,
method='weighted'))
#dend = [Link]([Link](results, method='ward'))
#dend = [Link]([Link](results,
method='centroid'))
#dend = [Link]([Link](results,
method='median'))
#dend = [Link]([Link](results,
method='average'))
dend = [Link]([Link](results,
method='complete'))
Como se pudo observar, existen métodos de clasificación de cada
cluster, como el "ward", "weighted","centroid","median", "average" y
"complete".

# Ahora, para el gráfico del dendrograma, es necesario


establecer a los índices bursátiles como índices de la
tabla:
IBTranspuesto3=[Link]()
[Link]()
from dtaidistance import dtw, clustering
# Añadiendo los valores de matriz DTW, hallada
anteriormente:
model1 = [Link](dtw.distance_matrix_fast,
{})
cluster_idx = [Link](IBTranspuesto2)
# Ingresamos el modelo1 a otro para poder graficarlo:
model2 = [Link](model1)
cluster_idx = [Link](IBTranspuesto2)
model2 =
[Link](dists_fun=dtw.distance_matrix_fa
st, dists_options={})
cluster_idx = [Link](IBTranspuesto2)
# Utilizamos el metodo LinkageTree para poder ingresasr
etiquetas y valores al dendrograma:
model3 = [Link](dtw.distance_matrix_fast,
{})
cluster_idx = [Link](IBTranspuesto2)
#Establecemos las etiquetas al modelo3
fig, ax = [Link](nrows=1, ncols=2, figsize=(10, 10))
show_ts_label = lambda idx: "ts-" + str(idx)
[Link](axes=ax, show_ts_label=[Link],
show_tr_label=True, ts_label_margin=-10,
ts_left_margin=10, ts_sample_length=1)

#Si bien el gráfico anterior es muy detallado, no permite


identificar subgrupos similares, por ello utilizazremos el
metodo dendrogram:
dend = [Link]([Link](results,
method='complete'))
#Establecemos el valor (t=10) donde se hará el corte para
la clasificación de Clusters:
from [Link] import fcluster
clusters= fcluster([Link](results,
method='complete'),t=10,criterion='distance')
clusters

Se pudo comprobar gráficamente el resultado del último array: Se


formaron 4 grupos de acuerdo al criterio de distancia=10.
# Añadiendo una columna que indica al grupo al que pertenece
cada indice bursátil
IBTranspuesto3['Clustering Jerarquico']=clusters
[Link]()
#Guardando el dataframe con la clasificación hallada:
#Para Jupyter: IBTranspuesto3.to_csv('C:/User/...')
from [Link] import drive

[Link]('/drive2')

IBTranspuesto3.to_csv('/drive2/My Drive/Indices Clustering


[Link]')

4.3. dasdasd
5. Mapa Temático

También podría gustarte