-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvisualization.py
89 lines (81 loc) · 2.9 KB
/
visualization.py
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import dash_html_components as html
import plotly.graph_objects as go
import dash_core_components as dcc
from tslearn.preprocessing import TimeSeriesResampler
from utils.normalize import Standard
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np
def pca_show(origin_data, labels, num_cluster):
#시계열 셋 길이 통일
min=origin_data.dropna(axis='columns')
min_len=len(min.columns)
#시계열셋 최소 길이 리스트형태로 담음
# min_lens=[]
# data_len=len(data)
# for i in range(0,data_len):
# min=len(data[i][0])
# for j in range(0,len(data[i])):
# if len(data[i][j]) < min:
# min = len(data[i][j])
# min_lens.append(min)
#시계열 셋 길이 통일
# result_re=[]
# for i in range(0,data_len):
# result_ = TimeSeriesResampler(sz=min_lens[i]).fit_transform(data[i])
# result_=result_.reshape(len(data[i]),min_lens[i])
# result_re.append(result_)
result_ = TimeSeriesResampler(sz=min_len).fit_transform(origin_data)
result_
result_=result_.reshape(result_.shape[0], min_len)
result_norm = Standard(pd.DataFrame(result_))
#수치형 변수 정규화
# result_norm=[]
# for i in range(0, data_len):
# norm = StandardScaler().fit_transform(result_re[i])
# result_norm.append(norm)
#주성분 분석 실시하기
pca = PCA(n_components=2) #PCA 객체 생성 (주성분 갯수 2개 생성)
result_pca = pca.fit_transform(result_norm)
#주성분 분석 실시하기
#PCA 객체 생성 (주성분 갯수 2개 생성)
# pca = PCA(n_components=2)
# result_pca=[]
# for i in range(0,data_len):
# pca_ = pca.fit_transform(result_norm[i])
# result_pca.append(pca_)
data = []
data_outlier = [[]]
for i in range(num_cluster):
data.append([])
list_value = result_pca.tolist()
for i in range(len(labels)):
if labels[i] != -1:
data[labels[i]].append(list_value[i])
else:
data_outlier[0].append(list_value[i])
#그래프 그리기
fig = go.Figure()
data_np = np.array(data, dtype=object)
data_outlier_np = np.array(data_outlier, dtype=object)
for i in range(0,num_cluster):
fig.add_trace(go.Scatter(
x=[dt[0] for dt in data_np[i]], y= [dt[1] for dt in data_np[i]],
mode='markers', name='Cluster'+str(i+1)
)
)
if data_outlier_np[0].shape[0] > 0 :
fig.add_trace(go.Scatter(
x=[dt[0] for dt in data_outlier_np[0]], y= [dt[1] for dt in data_outlier_np[0]],
mode='markers', name='Outlier'
)
)
graph = html.Div(style={}, children=[
html.Div(["2-DIM VISUALIZATION"], className='subtitle'),
html.Div(
[html.Div(
dcc.Graph(id='pca_show', figure=fig))
]
)
])
return graph