es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Transforma filas y columnas y crea un dataframe de similitud utilizando Pyspark.

Ya tengo un conjunto de datos normalizado:

 df = spark.createDataFrame([('manzana roja', 'plátano maduro', 0.3),
            ('manzana roja', 'chile picante', 0.4),
            ('manzana roja','kiwi dulce', 0.5),
            ('plátano maduro','chile picante', 0.6),
            ('plátano maduro','kiwi dulce', 0.7),
            ('chile picante','kiwi dulce', 0.8)], ["frase1", "frase2", 'porcentaje_común'])
df.show()

+--------------+----------------+----------------------+----------------+
|        frase1|          frase2|porcentaje_común|           
+--------------+----------------+----------------------+----------------+
|   manzana roja|    plátano maduro|                0.3|         
|   manzana roja|    chile picante|                0.4|         
|   manzana roja|        kiwi dulce|                0.5|         
| plátano maduro|    chile picante|                0.6|         
| plátano maduro|        kiwi dulce|                0.7|         
|  chile picante|        kiwi dulce|                0.8|         
+--------------+----------------+----------------------+----------------+

Quiero crear una matriz de similitud usando pyspark. El resultado debería verse así:

+--------------+------------+----------------+-----------------+--------------+
|        frases|  manzana roja|    plátano maduro|   chile picante|    kiwi dulce|
+--------------+------------+----------------+-----------------+--------------+
|   manzana roja|         1.0|             0.3|              0.4|           0.5|
| plátano maduro|         0.3|             1.0|              0.6|           0.7|
|  chile picante|         0.4|             0.6|              1.0|           0.8|
|    kiwi dulce|         0.5|             0.7|              0.8|           1.0|
+--------------+------------+----------------+-----------------+--------------+

Por lo tanto, hay unidades en la diagonal y encima / debajo se encuentran los valores de las columnas average. Mi problema es que no comprendo del todo cómo hacer las unidades en la diagonal.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear una matriz de similitud usando PySpark, puedes utilizar la función pivot. Esto te permitirá crear una matriz con las frases como columnas y filas, y los valores de common_persent como valores en la matriz. Para crear las unidades en la diagonal, puedes utilizar la función fillna para llenar las celdas vacías con el valor 1.0.

    Por ejemplo:

    df_pivot = df.groupBy("phrase1").pivot("phrase2").agg(F.first("common_persent"))
    df_pivot = df_pivot.fillna(1.0)
    df_pivot.show()
    
    +-----------+---------+-----------+----------+----------+
    |    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|
    +-----------+---------+-----------+----------+----------+
    

Comments are closed.