从 Python 中的常用词词典的 SVD 打印散点图的问题
Problems to print out scatterplot from SVD of a dictionary of frequent words in Python
我可能在这里犯了很多错误。
我创建了这本词典,用于整理从两段文本中提取的常用词。
dims = {('1', 2,0),('beam',4,2),('electron',3,7),('electron-beam', 2,0),('focused',0,2),('generation', 2,0),('relativistic',0,2),('requirements',3,0),('sample', 0,2),('stringent', 2,0),('ultrafast', 0,5)}
第一个单词是数字“1”,它在 text1 中出现了 2 次,在 text2 中出现了 0 次。第二个词是 'beam',它在 text1 中出现了 4 次,在 text2 中出现了 2 次,依此类推。
我想得到两个texts.The中单词的svd(奇异值分解)的散点图texts.The最终结果应该是这样的:
找不到解决办法,于是开始破解任务:
就像创建一个只有数字的数组:
dinums = [[2,0],[4,2],[3,7],[2,0],[0,2],[2,0],[0,2],[3,0],[0,2],[2,0],[0,5]]
并且可以设法提取有意义的 SVD:
import scipy as sp
U, s, Vh = sp.linalg.svd(a)
这是包含结果的数据框:
svd_df = pd.DataFrame(U[:,0:2])
print(svd_df)
0 1
0 -0.090641 0.300286
1 -0.353900 0.442893
2 -0.740124 -0.101449
3 -0.090641 0.300286
4 -0.172618 -0.157679
5 -0.090641 0.300286
6 -0.172618 -0.157679
7 -0.135962 0.450429
8 -0.172618 -0.157679
9 -0.090641 0.300286
10 -0.431545 -0.394199
我重命名了这些列,以便在散点图中使用它们:
svd_df = svd_df.rename(columns={0:'Abstr_1', 1:'Abstr_2'})
我打算绘制散点图(大失败!!!):
import seaborn as sns
import matplotlib.pyplot as plt
color_dict = dict({'Abstr_1':'Orange',
'Abstr_2':'Grey'})
# Scatter plot: SV1 and SV2
sns.scatterplot(x="Abstr_1", y="Abstr_2",
palette=color_dict,
data=svd_df, s=100,
alpha=0.7)
plt.xlabel('Abstract 1:'.format(s), fontsize=10)
plt.ylabel('Abstract 2:'.format(s), fontsize=10)
这是否有助于您更接近您的想法?
备注:
您的数据框在 运行 SVD(可能是共线性的标志)之后包含重复条目(例如索引 0、3、5、9),这是故意的吗?如果不是,请尝试不同的模型参数来改善输出。
color_dict = dict({'Abstr_1':'Orange','Abstr_2':'Grey'})
令人困惑,(x, y) 形成一个点,您是否要为每个点绘制一半橙色和一半灰色?如果你想要点的不同颜色,你可以像我一样使用聚类(分组)。
您可以使用.text
来标记您的观点。请注意,由于重复的数据框条目,某些单词重叠。
代码
# your word list
words = ['one','beam','electron','electron-beam','focused',\
'generation','relativistic','requirements','sample','stringent','ultrafest']
# randomly assinging cluster for the purpose of demonstration
svd_df['Cluster'] = [0,1,0,1,1,0,0,1,0,1,0]
# at this stage your data frame looks like this
print(svd_df)
# Abstr_1 Abstr_2 Cluster
# 0 -0.090641 0.300286 0
# 1 -0.353900 0.442893 1
# 2 -0.740124 -0.101449 0
# 3 -0.090641 0.300286 1
# 4 -0.172618 -0.157679 1
# 5 -0.090641 0.300286 0
# 6 -0.172618 -0.157679 0
# 7 -0.135962 0.450429 1
# 8 -0.172618 -0.157679 0
# 9 -0.090641 0.300286 1
# 10 -0.431545 -0.394199 0
color_list = ['Orange','Grey']
# Scatter plot: SV1 and SV2
g = sns.scatterplot(x='Abstr_1', y='Abstr_2', hue='Cluster',
palette=color_list,
data=svd_df,s=100,
alpha=0.7)
for x,y,z in zip(svd_df['Abstr_1'],svd_df['Abstr_2'],words):
g.text(x,y+0.01,z)
plt.xlabel('Abstract 1', fontsize=10)
plt.ylabel('Abstract 2', fontsize=10)
输出
我可能在这里犯了很多错误。
我创建了这本词典,用于整理从两段文本中提取的常用词。
dims = {('1', 2,0),('beam',4,2),('electron',3,7),('electron-beam', 2,0),('focused',0,2),('generation', 2,0),('relativistic',0,2),('requirements',3,0),('sample', 0,2),('stringent', 2,0),('ultrafast', 0,5)}
第一个单词是数字“1”,它在 text1 中出现了 2 次,在 text2 中出现了 0 次。第二个词是 'beam',它在 text1 中出现了 4 次,在 text2 中出现了 2 次,依此类推。
我想得到两个texts.The中单词的svd(奇异值分解)的散点图texts.The最终结果应该是这样的:
找不到解决办法,于是开始破解任务:
就像创建一个只有数字的数组:
dinums = [[2,0],[4,2],[3,7],[2,0],[0,2],[2,0],[0,2],[3,0],[0,2],[2,0],[0,5]]
并且可以设法提取有意义的 SVD:
import scipy as sp
U, s, Vh = sp.linalg.svd(a)
这是包含结果的数据框:
svd_df = pd.DataFrame(U[:,0:2])
print(svd_df)
0 1
0 -0.090641 0.300286
1 -0.353900 0.442893
2 -0.740124 -0.101449
3 -0.090641 0.300286
4 -0.172618 -0.157679
5 -0.090641 0.300286
6 -0.172618 -0.157679
7 -0.135962 0.450429
8 -0.172618 -0.157679
9 -0.090641 0.300286
10 -0.431545 -0.394199
我重命名了这些列,以便在散点图中使用它们:
svd_df = svd_df.rename(columns={0:'Abstr_1', 1:'Abstr_2'})
我打算绘制散点图(大失败!!!):
import seaborn as sns
import matplotlib.pyplot as plt
color_dict = dict({'Abstr_1':'Orange',
'Abstr_2':'Grey'})
# Scatter plot: SV1 and SV2
sns.scatterplot(x="Abstr_1", y="Abstr_2",
palette=color_dict,
data=svd_df, s=100,
alpha=0.7)
plt.xlabel('Abstract 1:'.format(s), fontsize=10)
plt.ylabel('Abstract 2:'.format(s), fontsize=10)
这是否有助于您更接近您的想法?
备注:
您的数据框在 运行 SVD(可能是共线性的标志)之后包含重复条目(例如索引 0、3、5、9),这是故意的吗?如果不是,请尝试不同的模型参数来改善输出。
color_dict = dict({'Abstr_1':'Orange','Abstr_2':'Grey'})
令人困惑,(x, y) 形成一个点,您是否要为每个点绘制一半橙色和一半灰色?如果你想要点的不同颜色,你可以像我一样使用聚类(分组)。您可以使用
.text
来标记您的观点。请注意,由于重复的数据框条目,某些单词重叠。
代码
# your word list
words = ['one','beam','electron','electron-beam','focused',\
'generation','relativistic','requirements','sample','stringent','ultrafest']
# randomly assinging cluster for the purpose of demonstration
svd_df['Cluster'] = [0,1,0,1,1,0,0,1,0,1,0]
# at this stage your data frame looks like this
print(svd_df)
# Abstr_1 Abstr_2 Cluster
# 0 -0.090641 0.300286 0
# 1 -0.353900 0.442893 1
# 2 -0.740124 -0.101449 0
# 3 -0.090641 0.300286 1
# 4 -0.172618 -0.157679 1
# 5 -0.090641 0.300286 0
# 6 -0.172618 -0.157679 0
# 7 -0.135962 0.450429 1
# 8 -0.172618 -0.157679 0
# 9 -0.090641 0.300286 1
# 10 -0.431545 -0.394199 0
color_list = ['Orange','Grey']
# Scatter plot: SV1 and SV2
g = sns.scatterplot(x='Abstr_1', y='Abstr_2', hue='Cluster',
palette=color_list,
data=svd_df,s=100,
alpha=0.7)
for x,y,z in zip(svd_df['Abstr_1'],svd_df['Abstr_2'],words):
g.text(x,y+0.01,z)
plt.xlabel('Abstract 1', fontsize=10)
plt.ylabel('Abstract 2', fontsize=10)
输出