【发布时间】:2019-10-29 15:29:19
【问题描述】:
如何在数据集中应用具有相似名称(如 McDonald 和 Mc DOnald's)的字符串聚类,如果字符串相同(如 sam 和其他还有 sam),那么如何再次基于价值或价格进行聚类 例如- 考虑一个包含 10 个元素的数据表
name price
ram 200
shyam 150
ram12 59
gita 45
ram 2 45
g11ita 23
john2 32
john 7
jonh21 8
jonh 38
ram22 3
那么分组应该是
ram 200
ram12 59
ram 2 45
ram22 3
john2 32
jonh 37
john 7
john21 8
gita 45
g11ita 23
我已经使用了fuzzywuzzy和Levenheneitein距离的字符串聚类,但它只能聚类字符串而不能聚类价格 如何对第一个字符串进行聚类,如果相同则聚类价格
【问题讨论】:
-
如果可以的话,请展示它的示例代码。
-
for sortgp in all_sort_gp: this_gp = all_main_name.groupby(['sort_gp']).get_group(sortgp) gp_start = this_gp.index.min() gp_end = this_gp.index.max() for i在范围内(gp_start,gp_end+1): if pd.isna(all_main_name['alias'].iloc[i]): all_main_name['alias'].iloc[i] = all_main_name['names'].iloc[i ]; all_main_name['score'].iloc[i] = 100 for j in range(i+1,gp_end+1): if pd.isna(all_main_name['alias'].iloc[j]): fuzz_socre = fuzz.partial_ratio (all_main_name['names'].iloc[i],all_main_name['names'].iloc[j])
-
如果不是 no_key_word(all_main_name['names'].iloc[j]): fuzz_socre -= 10 if (fuzz_socre > 75): all_main_name['alias'].iloc[j] = all_main_name[ 'alias'].iloc[i] all_main_name['score'].iloc[j] = fuzz_socre if i % (len(all_names)//10) == 0: print("progress: %.2f" % (100 *i/len(all_names)) + "%")
标签: python python-2.7 machine-learning artificial-intelligence cluster-analysis