Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过模糊匹配字符串对数据帧行进行聚类?_Python_Pandas_Scikit Learn_Fuzzy Logic - Fatal编程技术网

Python 如何通过模糊匹配字符串对数据帧行进行聚类?

Python 如何通过模糊匹配字符串对数据帧行进行聚类?,python,pandas,scikit-learn,fuzzy-logic,Python,Pandas,Scikit Learn,Fuzzy Logic,我有一个带有ID、名称和地址的数据框。我想通过亲和传播或其他算法对地址进行聚类,以便对地址字符串进行模糊匹配/分组。这部分我有: import pandas as pd import pyodbc import numpy as np from sklearn.cluster import AffinityPropagation from pyjarowinkler import distance from sklearn import metrics conn = pyodbc.connec

我有一个带有ID、名称和地址的数据框。我想通过亲和传播或其他算法对地址进行聚类,以便对地址字符串进行模糊匹配/分组。这部分我有:

import pandas as pd
import pyodbc
import numpy as np
from sklearn.cluster import AffinityPropagation
from pyjarowinkler import distance
from sklearn import metrics

conn = pyodbc.connect(r'DSN=<UserDSN>;')
df = pd.read_sql('select * from <InputTable>', conn)

addr = df['Addresses']
addr = np.asarray(addr)

jw = np.array([[distance.get_jaro_distance(w1,w2) for w1 in addr] for w2 in addr])

affprop = AffinityPropagation(affinity="precomputed", damping=.5)
affprop.fit(jw)

for cluster_id in np.unique(affprop.labels_):
    exemplar = addr[affprop.cluster_centers_indices_[cluster_id]]
    cluster = np.unique(addr[np.nonzero(affprop.labels_==cluster_id)])
    cluster_str = ", ".join(cluster)
    print(" - *%s:* %s" % (exemplar, cluster
将熊猫作为pd导入
导入pyodbc
将numpy作为np导入
从sklearn.cluster导入AffinityPropagation
从pyjarowinkler导入距离
从SKM学习导入度量
conn=pyodbc.connect(r'DSN=;')
df=pd.read\u sql('select*from',conn)
addr=df[“地址”]
地址=np.asarray(地址)
jw=np.array([[distance.get_jaro_distance(w1,w2)表示地址中的w1]表示地址中的w2])
affprop=AffinityPropagation(affinity=“precomputed”,阻尼=.5)
affprop.fit(jw)
对于np.unique(affprop.labels)中的集群标识:
examplar=addr[affprop.cluster\u centers\u index\u[cluster\u id]]
cluster=np.unique(addr[np.nonzero(affprop.labels=cluster\u id)])
集群_str=“,”。加入(集群)
打印(“-*%s:**%s”%)(示例,群集
现在,我如何通过“集群”使集群变得有用数据帧中的列?本质上,我想将每个集群的
示例
添加回数据帧中相应的行。我是否需要某种唯一ID才能做到这一点?其目的是识别数据中的重复行,因此当前没有唯一ID。但是,也许我可以向原始Da添加一个因为每一行作为一个整体都是唯一的,所以这是一个框架吗

谢谢你们所有人的洞察力