Estoy tratando de hacer un histograma con una columna de un dataframe que se parece a

DataFrame[C0: int, C1: int, ...]

Si yo fuera a hacer un histograma con la columna C1, ¿qué debo hacer?

Algunas cosas que he intentado son

df.groupBy("C1").count().histogram()
df.C1.countByValue()

Que no funcionan a causa de falta de coincidencia de tipos de datos.

OriginalEl autor user2857014 | 2016-03-16

6 Comentarios

  1. 9

    Puede utilizar histogram_numeric Colmena UDAF:

    import random
    
    random.seed(323)
    
    sqlContext = HiveContext(sc)
    n = 3  # Number of buckets
    df = sqlContext.createDataFrame(
        sc.parallelize(enumerate(random.random() for _ in range(1000))),
       ["id", "v"]
    )
    
    hists = df.selectExpr("histogram_numeric({0}, {1})".format("v", n))
    
    hists.show(1, False)
    ## +------------------------------------------------------------------------------------+
    ## |histogram_numeric(v,3)                                                              |
    ## +------------------------------------------------------------------------------------+
    ## |[[0.2124888140177466,415.0], [0.5918851340384337,330.0], [0.8890271451209697,255.0]]|
    ## +------------------------------------------------------------------------------------+

    También puede extraer la columna de interés y uso histogram método en RDD:

    df.select("v").rdd.flatMap(lambda x: x).histogram(n)
    ## ([0.002028109534323752,
    ##  0.33410233677189705,
    ##  0.6661765640094703,
    ##  0.9982507912470436],
    ## [327, 326, 347])
    Cabe señalar que histogram_numeric no garantiza distribuidos contenedores — esto me sorprendió, de todos modos.

    OriginalEl autor zero323

  2. 4

    Lo que funcionó para mí es

    df.groupBy("C1").count().rdd.values().histogram()

    Tengo que convertir a RDD porque he encontrado histogram método en pyspark.RDD clase, pero no en la chispa.Módulo de SQL

    OriginalEl autor lanenok

  3. 4

    La pyspark_dist_explore paquete que @Chris van den Berg mencionado es bastante agradable. Si no desea agregar un adicional de dependencia puede utilizar este trozo de código para trazar un simple histograma.

    import matplotlib.pyplot as plt
    # Show histogram of the 'C1' column
    bins, counts = df.select('C1').rdd.flatMap(lambda x: x).histogram(20)
    
    # This is a bit awkward but I believe this is the correct way to do it 
    plt.hist(bins[:-1], bins=bins, weights=counts)

    OriginalEl autor Briford Wylie

  4. 2

    Vamos a decir que sus valores de C1 son entre 1-1000 y desea obtener un histograma de 10 bandejas. Puedes hacer algo como:
    df.withColumn(«bins», df.C1/100).groupBy(«bins»).count()
    Si su agrupamiento es más compleja de lo que puede hacer una UDF (y en el peor, usted puede ser que necesite para analizar la columna primera, por ejemplo, mediante el uso de describir o por algún otro método).

    No te olvides de lanzarla como int de lo contrario se obtendrá como muchos grupos como antes

    OriginalEl autor Assaf Mendelson

  5. 1

    Si quieres una para graficar el Histograma, se podría utilizar el pyspark_dist_explore paquete:

    fig, ax = plt.subplots()
    hist(ax, df.groupBy("C1").count().select("count"))

    Si quiera los datos en un pandas DataFrame puede utilizar:

    pandas_df = pandas_histogram(df.groupBy("C1").count().select("count"))

    OriginalEl autor Chris van den Berg

  6. -1

    Creo que lo tengo:

    df.groupBy('C1').agg(func.size(func.collect_list('C1'))).show()
    
    +--+----------------------+                             
    |C1|size(collect_list(C1))|
    +--+----------------------+
    | 1|                    54|
    | 6|                    71|
    | 3|                    59|
    | 5|                    67|
    | 9|                     2|
    | 4|                    69|
    +--+----------------------+

    Si quieres contar los uniques, acaba de cambiar collect_list a collect_set.

    OriginalEl autor Paulo Alves

Dejar respuesta

Please enter your comment!
Please enter your name here