1 import numpy as np
2 from sklearn.manifold import TSNE
3 import matplotlib.pyplot as plt
4 from mpl_toolkits.mplot3d import Axes3D
5
6
7 def read(path: str) -> list:
8 with open(path, "r") as f:
9 text = f.readlines()
10 D = []
11 for row in text:
12 row = str.replace(row, "14:", ",")
13 row = str.replace(row, "13:", ",")
14 row = str.replace(row, "12:", ",")
15 row = str.replace(row, "11:", ",")
16 row = str.replace(row, "10:", ",")
17 row = str.replace(row, "9:", ",")
18 row = str.replace(row, "8:", ",")
19 row = str.replace(row, "7:", ",")
20 row = str.replace(row, "6:", ",")
21 row = str.replace(row, "5:", ",")
22 row = str.replace(row, "4:", ",")
23 row = str.replace(row, "3:", ",")
24 row = str.replace(row, "2:", ",")
25 row = str.replace(row, "1:", ",")
26 row = str.replace(row, ",-1 1,", ",")
27 row = str.replace(row, ",1 1,", ",")
28 substr = str.split(str.split(row, "\n")[0], ",")
29 X = []
30 for a in substr:
31 X.append(float(a))
32 D.append(X)
33 return D
34
35
36 def init(D: list) -> tuple:
37 n, m = len(D), len(D[0])
38 X, Y = [], []
39 for i in range(n):
40 x = []
41 if len(D[i]) != m:
42 n -= 1
43 continue
44 for j in range(1, m, 1):
45 x.append(D[i][j])
46 X.append(x)
47 Y.append(D[i][0])
48 # print(n, m)
49 return X, Y, n, m - 1
50
51
52 if __name__ == '__main__':
53
54 D = read("binary_data.txt")
55 X, Y, n, m = init(D)
56
57 x = np.array(X)
58
59 tsne = TSNE(n_components=3)
60
61 tsne.fit_transform(x)
62
63 one_x, one_y, one_z, zero_x, zero_y, zero_z = [], [], [], [], [], []
64 for i in range(n):
65 _x, _y, _z = tsne.embedding_[i][0], tsne.embedding_[i][1], tsne.embedding_[i][2]
66 if Y[i] > 0:
67 zero_x.append(_x)
68 zero_y.append(_y)
69 zero_z.append(_z)
70 else:
71 one_x.append(_x)
72 one_y.append(_y)
73 one_z.append(_z)
74 '''
75 ax = plt.axes(projection='3d')
76 ax.scatter3D(one_x, one_y, one_z)
77 ax.scatter3D(zero_x, zero_y, zero_z)
78 '''
79 plt.subplot(311)
80 plt.scatter(one_x, one_y)
81 plt.scatter(zero_x, zero_y)
82 plt.subplot(312)
83 plt.scatter(one_x, one_z)
84 plt.scatter(zero_x, zero_z)
85 plt.subplot(313)
86 plt.scatter(one_y, one_z)
87 plt.scatter(zero_y, zero_z)
88 plt.show()