【发布时间】:2021-12-30 09:50:10
【问题描述】:
我已经有一个标准化的数据集:
df = spark.createDataFrame([('red apple', 'ripe banana', 0.3),
('red apple', 'hot pepper', 0.4),
('red apple','sweet kiwi', 0.5),
('ripe banana','hot pepper', 0.6),
('ripe banana','sweet kiwi', 0.7),
('hot pepper','sweet kiwi', 0.8)], ["phrase1", "phrase2", 'common_persent'])
df.show()
+-----------+-----------+--------------+
| phrase1| phrase2|common_persent|
+-----------+-----------+--------------+
| red apple|ripe banana| 0.3|
| red apple| hot pepper| 0.4|
| red apple| sweet kiwi| 0.5|
|ripe banana| hot pepper| 0.6|
|ripe banana| sweet kiwi| 0.7|
| hot pepper| sweet kiwi| 0.8|
+-----------+-----------+--------------+
我想使用 pyspark 创建一个相似度矩阵。结果应如下所示:
+-----------+---------+-----------+----------+----------+
| phrases|red apple|ripe banana|hot pepper|sweet kiwi|
+-----------+---------+-----------+----------+----------+
| red apple| 1.0| 0.3| 0.4| 0.5|
|ripe banana| 0.3| 1.0| 0.6| 0.7|
| hot pepper| 0.4| 0.6| 1.0| 0.8|
| sweet kiwi| 0.5| 0.7| 0.8| 1.0|
+-----------+---------+-----------+----------+----------+
因此,对角线上有单位,在 average 列的值之上/之下。我的问题是,我不太明白如何在对角线上制作单位。
【问题讨论】:
-
对称矩阵中的值应该是什么意思?如果您的元组不是唯一的,您使用的是什么聚合?
-
这是短语流行的百分比,即平均值。我没有使用聚合函数,但我自己算了。首先,有一列包含所有短语。所有短语都使用count计数并除以平均值,从而获得百分比。这些值位于 common_persent 列中。问题是,当用列改变行的位置时,如果短语匹配,我需要添加一个对角线,所以百分比是 1.0
-
如果您知道如何从对角线上填充值,请先填充它们,然后使用 fillna(1) 填充对角线值。
-
问题是我不明白如何将我的数据框转置为相似矩阵。
标签: python pandas dataframe apache-spark pyspark