为 fvt table 计算 tf_idf
calculating tf_idf for fvt table
我有一个频率值table喜欢-
a b
1 3 0
2 0 3
3 4 5
我想计算 tf_idf。
我的代码-
l=len(data)
for doc in data:
m=data.groupby(doc).apply(lambda column: column.sum()/(column != 0).sum())
for i in range(l):
tf=print(data.loc[i,doc])
idf=log(l/m)
weight=tf*idf
data.loc[i,doc]=weight
说明-
首先,我遍历每一列,我在 var m 中找到该列中的非零行,并将该行的特定值存储在列中作为 tf,然后计算 tf_idf 并替换 [=31 中的值=] 具有 tf_idf 个权重。
预期输出-
对于 g 列第一行,我们有 tf=3 idf=log(5/4) 因此 tf_idf=idf*tf
a b
1 0.4 0
2 0 0.4
3 0.17 .22
输入数据帧:
df
a b
0 3 0
1 0 3
2 4 5
首先,找到所有单词中的idf
个,
idf_list = []
for col in list(df.columns):
total_count = df[col].nonzero()[0][1]
idf = np.log(len(df) / total_count)
idf_list.append(round(idf, 3))
现在,找到 tf-idf
并更新数据框,
for row in range(len(df)):
total_doc_words = sum(df.iloc[row].values)
for col in range(len(df.columns)):
tf = df.iloc[row, col] / total_doc_words
df.iloc[row, col] = tf * idf_list[col]
输出:
df
a b
0 0.405 0.000
1 0.000 0.405
2 0.180 0.225
我有一个频率值table喜欢-
a b
1 3 0
2 0 3
3 4 5
我想计算 tf_idf。
我的代码-
l=len(data)
for doc in data:
m=data.groupby(doc).apply(lambda column: column.sum()/(column != 0).sum())
for i in range(l):
tf=print(data.loc[i,doc])
idf=log(l/m)
weight=tf*idf
data.loc[i,doc]=weight
说明- 首先,我遍历每一列,我在 var m 中找到该列中的非零行,并将该行的特定值存储在列中作为 tf,然后计算 tf_idf 并替换 [=31 中的值=] 具有 tf_idf 个权重。
预期输出-
对于 g 列第一行,我们有 tf=3 idf=log(5/4) 因此 tf_idf=idf*tf
a b
1 0.4 0
2 0 0.4
3 0.17 .22
输入数据帧:
df
a b
0 3 0
1 0 3
2 4 5
首先,找到所有单词中的idf
个,
idf_list = []
for col in list(df.columns):
total_count = df[col].nonzero()[0][1]
idf = np.log(len(df) / total_count)
idf_list.append(round(idf, 3))
现在,找到 tf-idf
并更新数据框,
for row in range(len(df)):
total_doc_words = sum(df.iloc[row].values)
for col in range(len(df.columns)):
tf = df.iloc[row, col] / total_doc_words
df.iloc[row, col] = tf * idf_list[col]
输出:
df
a b
0 0.405 0.000
1 0.000 0.405
2 0.180 0.225