使用熊猫数据框来自TSNE输出的matplotlib散点图上的标记点

时间:2018-08-02 17:28:23

标签: python pandas matplotlib

问题主题有点复杂,因为我需要很多帮助。解释一下,我有一个带标签(名称)和数字数据的csv数据...

name,post_count,follower_count,following_count,anonymous_pic,is_private,...
adam,3,997,435,0,0,1,0,0,0,0 bob,2,723,600,0,0,1,0,0,0,0
jill,11,3193,962,0,0,1,0,0,0,0 sara,0,225,298,0,0,1,0,0,0,0
.
.

,依此类推。此数据从csv加载到pandas数据帧中。现在,我希望仅将此数据的数字部分传递到名为TSNE(t分布随机邻居嵌入)的sklearn.manifold类中,该类将输出与输入数据大小相同的列表,其中新列表的每个元素为是大小为k的列表(其中k是指定为TSNE类的参数的组件数)。在我的情况下,k = 2。

我正在matplotlib的二维散点图上绘制此数据的图形,我希望能够检查数据上的标签。我知道matplotlib具有注释功能,可以标记点,但是如何将这些标记与TSNE的数据分开呢?如果我只是在转换之前分离标签,该如何确保重新标记正确的点?

我希望能够检查这些名称,因为我需要查看转换对我的数据是否有用。这样,我可以分析一些真正奇怪的地方,看看是否发生了有趣的事情。这是我的代码,如果您觉得它有用(尽管我会承认它只是草稿)

# Data structuring
import pandas as pd 
import numpy as np 

# Plotting
import seaborn as sns
import matplotlib.pyplot as plt
sns.set() # for plot styling

# Load data
df = pd.read_csv('user_data.csv')
print(df.head())

# sklearn
from sklearn.mixture import GMM
from sklearn.manifold import TSNE


tsne = TSNE(n_components = 2, init = 'random', random_state = 0)
lab_proj = tsne.fit_transform(df)

x = [i[0] for i in lab_proj]
y = [i[1] for i in lab_proj]

print(len(lab_proj))

df['PCA1'] = x 
df['PCA2'] = y 
model = GMM(n_components = 1, covariance_type = 'full')
model.fit(df)
y_gmm = model.predict(df)

df['cluster'] = y_gmm 
sns.lmplot('PCA1', 'PCA2', data = df, col='cluster', fit_reg = False)
plt.show()

谢谢!

0 个答案:

没有答案