web-dev-qa-db-fra.com

Pyspark: affiche l'histogramme d'une colonne de trame de données

Dans le cadre de données de pandas, j'utilise le code suivant pour tracer l'histogramme d'une colonne:

my_df.hist(column = 'field_1')

Y a-t-il quelque chose qui peut atteindre le même objectif dans le cadre de données pyspark? (Je suis dans Jupyter Notebook) Merci!

14
Edamame

Malheureusement, je ne pense pas qu'il existe une fonction propre plot() ou hist() dans l'API PySpark Dataframes, mais j'espère que les choses finiront par aller dans cette direction.

Pour le moment, vous pouvez calculer l'histogramme dans Spark et tracer l'histogramme calculé sous forme d'histogramme. Exemple:

import pandas as pd
import pyspark.sql as sparksql

# Let's use UCLA's college admission dataset
file_name = "https://stats.idre.ucla.edu/stat/data/binary.csv"

# Creating a pandas dataframe from Sample Data
df_pd = pd.read_csv(file_name)

sql_context = sparksql.SQLcontext(sc)

# Creating a Spark DataFrame from a pandas dataframe
df_spark = sql_context.createDataFrame(df_pd)

df_spark.show(5)

Voici à quoi ressemblent les données:

Out[]:    +-----+---+----+----+
          |admit|gre| gpa|rank|
          +-----+---+----+----+
          |    0|380|3.61|   3|
          |    1|660|3.67|   3|
          |    1|800| 4.0|   1|
          |    1|640|3.19|   4|
          |    0|520|2.93|   4|
          +-----+---+----+----+
          only showing top 5 rows


# This is what we want
df_pandas.hist('gre');

Histogramme lors de l'utilisation de df_pandas.hist ()

# Doing the heavy lifting in Spark. We could leverage the `histogram` function from the RDD api

gre_histogram = df_spark.select('gre').rdd.flatMap(lambda x: x).histogram(11)

# Loading the Computed Histogram into a Pandas Dataframe for plotting
pd.DataFrame(
    list(Zip(*gre_histogram)), 
    columns=['bin', 'frequency']
).set_index(
    'bin'
).plot(kind='bar');

Histogramme calculé à l'aide de RDD.histogram ()

18
Shivam Gaur

Vous pouvez maintenant utiliser le paquet pyspark_dist_explore pour exploiter la fonction hist matplotlib de Spark DataFrames:

from pyspark_dist_explore import hist
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
hist(ax, data_frame, bins = 20, color=['red'])

Cette bibliothèque utilise la fonction d'histogramme rdd pour calculer les valeurs bin. 

6
Chris van den Berg

La méthode histogram pour les RDD renvoie les plages et le nombre de bacs. Voici une fonction qui prend ces données d'histogramme et les représente sous forme d'histogramme.

import numpy as np
import matplotlib.pyplot as mplt
import matplotlib.ticker as mtick

def plotHistogramData(data):
    binSides, binCounts = data

    N = len(binCounts)
    ind = np.arange(N)
    width = 1

    fig, ax = mplt.subplots()
    rects1 = ax.bar(ind+0.5, binCounts, width, color='b')

    ax.set_ylabel('Frequencies')
    ax.set_title('Histogram')
    ax.set_xticks(np.arange(N+1))
    ax.set_xticklabels(binSides)
    ax.xaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
    ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))

    mplt.show()

(Ce code suppose que les bacs ont la même longueur.)

1
Andrew MacFie