Äldre visualiseringar
Den här artikeln beskriver äldre Visualiseringar av Azure Databricks. Se Visualiseringar i Databricks-notebook-filer för aktuellt visualiseringsstöd .
Azure Databricks har också inbyggt stöd för visualiseringsbibliotek i Python och R så att du kan installera och använda bibliotek från tredje part.
Skapa en äldre visualisering
Om du vill skapa en äldre visualisering från en resultatcell klickar du på + och väljer äldre visualisering.
Äldre visualiseringar stöder en omfattande uppsättning diagramtyper:
Välj och konfigurera en äldre diagramtyp
Om du vill välja ett stapeldiagram klickar du på stapeldiagramikonen :
Om du vill välja en annan ritningstyp klickar du till höger om stapeldiagrammet och väljer ritningstyp.
Verktygsfält för äldre diagram
Både linje- och stapeldiagram har ett inbyggt verktygsfält som stöder en omfattande uppsättning interaktioner på klientsidan.
Om du vill konfigurera ett diagram, klickar du på Ritalternativ ....
Linjediagrammet erbjuder olika alternativ för att anpassa diagrammet. Du kan ange ett intervall för Y-axeln, visa och dölja punkter och visa Y-axeln med en logaritmisk skala.
Information om äldre diagramtyper finns i:
Färgkonsekvens i diagram
Azure Databricks stöder två typer av färgkonsekvens i äldre diagram: serieuppsättning och global.
Series set färgkonsekvens tilldelar samma färg till samma värde om du har serier med samma värden men i olika ordningar (till exempel A = ["Apple", "Orange", "Banana"]
och B = ["Orange", "Banana", "Apple"]
). Värdena sorteras innan de ritas, så båda förklaringarna sorteras på samma sätt (["Apple", "Banana", "Orange"]
), och samma värden får samma färger. Men om du har en serie C = ["Orange", "Banana"]
skulle det inte vara färg som överensstämmer med uppsättning A eftersom uppsättningen inte är densamma. Sorteringsalgoritmen skulle tilldela den första färgen till "Banana" i set C men den andra färgen till "Banana" i set A. Om du vill att dessa serier ska vara färgkonsekventa kan du ange att diagram ska ha global färgkonsekvens.
I globala färgkonsekvens mappas varje värde alltid till samma färg oavsett vilka värden serien har. Om du vill aktivera detta för varje diagram markerar du kryssrutan Global färgkonsekvens.
Kommentar
För att uppnå den här konsekvensen använder Azure Databricks hash-funktioner direkt på värden för att skapa färger. För att undvika kollisioner (där två värden hamnar på exakt samma färg) använder man en hash som genererar en stor uppsättning färger. Som en bieffekt av detta kan inte snygga eller lätt urskiljbara färger garanteras; med många färger kommer det säkert att finnas några som ser mycket lika ut.
Visualiseringar för maskininlärning
Utöver standarddiagramtyperna stöder äldre visualiseringar följande träningsparametrar och resultat för maskininlärning:
Residualer
För linjära och logistiska regressioner kan du rendera ett monterat kontra residualdiagram . Om du vill hämta det här diagrammet anger du modellen och DataFrame.
I följande exempel körs en linjär regression på förhållandet mellan stadspopulation och husförsäljningsprisdata. Därefter visas residualerna kontra de anpassade värdena.
# Load data
pop_df = spark.read.csv("/databricks-datasets/samples/population-vs-price/data_geo.csv", header="true", inferSchema="true")
# Drop rows with missing values and rename the feature and label columns, replacing spaces with _
from pyspark.sql.functions import col
pop_df = pop_df.dropna() # drop rows with missing values
exprs = [col(column).alias(column.replace(' ', '_')) for column in pop_df.columns]
# Register a UDF to convert the feature (2014_Population_estimate) column vector to a VectorUDT type and apply it to the column.
from pyspark.ml.linalg import Vectors, VectorUDT
spark.udf.register("oneElementVec", lambda d: Vectors.dense([d]), returnType=VectorUDT())
tdata = pop_df.select(*exprs).selectExpr("oneElementVec(2014_Population_estimate) as features", "2015_median_sales_price as label")
# Run a linear regression
from pyspark.ml.regression import LinearRegression
lr = LinearRegression()
modelA = lr.fit(tdata, {lr.regParam:0.0})
# Plot residuals versus fitted data
display(modelA, tdata)
ROC-kurvor
För logistiska regressioner kan du rendera en ROC-kurva . För att hämta det här diagrammet anger du modellen, de förberedda data som är indata till fit
metoden och parametern "ROC"
.
I följande exempel utvecklas en klassificerare som förutsäger om en individ tjänar <=50 000 eller >50 000 om året från olika attribut för individen. Den överordade datamängden kommer från censusdata och består av information om 48 842 individer och deras årsinkomst.
I exempelkoden i det här avsnittet används one-hot-kodning.
# This code uses one-hot encoding to convert all categorical variables into binary vectors.
schema = """`age` DOUBLE,
`workclass` STRING,
`fnlwgt` DOUBLE,
`education` STRING,
`education_num` DOUBLE,
`marital_status` STRING,
`occupation` STRING,
`relationship` STRING,
`race` STRING,
`sex` STRING,
`capital_gain` DOUBLE,
`capital_loss` DOUBLE,
`hours_per_week` DOUBLE,
`native_country` STRING,
`income` STRING"""
dataset = spark.read.csv("/databricks-datasets/adult/adult.data", schema=schema)
from pyspark.ml import Pipeline
from pyspark.ml.feature import OneHotEncoder, StringIndexer, VectorAssembler
categoricalColumns = ["workclass", "education", "marital_status", "occupation", "relationship", "race", "sex", "native_country"]
stages = [] # stages in the Pipeline
for categoricalCol in categoricalColumns:
# Category indexing with StringIndexer
stringIndexer = StringIndexer(inputCol=categoricalCol, outputCol=categoricalCol + "Index")
# Use OneHotEncoder to convert categorical variables into binary SparseVectors
encoder = OneHotEncoder(inputCols=[stringIndexer.getOutputCol()], outputCols=[categoricalCol + "classVec"])
# Add stages. These are not run here, but will run all at once later on.
stages += [stringIndexer, encoder]
# Convert label into label indices using the StringIndexer
label_stringIdx = StringIndexer(inputCol="income", outputCol="label")
stages += [label_stringIdx]
# Transform all features into a vector using VectorAssembler
numericCols = ["age", "fnlwgt", "education_num", "capital_gain", "capital_loss", "hours_per_week"]
assemblerInputs = [c + "classVec" for c in categoricalColumns] + numericCols
assembler = VectorAssembler(inputCols=assemblerInputs, outputCol="features")
stages += [assembler]
# Run the stages as a Pipeline. This puts the data through all of the feature transformations in a single call.
partialPipeline = Pipeline().setStages(stages)
pipelineModel = partialPipeline.fit(dataset)
preppedDataDF = pipelineModel.transform(dataset)
# Fit logistic regression model
from pyspark.ml.classification import LogisticRegression
lrModel = LogisticRegression().fit(preppedDataDF)
# ROC for data
display(lrModel, preppedDataDF, "ROC")
Om du vill visa residualer utelämnar du parametern "ROC"
:
display(lrModel, preppedDataDF)
Beslutsträd
Äldre visualiseringar stöder återgivning av ett beslutsträd.
För att få den här visualiseringen anger du beslutsträdsmodellen.
Följande exempel tränar ett träd att identifiera siffror (0–9) från MNIST-datauppsättningen med avbildningar av handskrivna siffror och visar sedan trädet.
Python
trainingDF = spark.read.format("libsvm").load("/databricks-datasets/mnist-digits/data-001/mnist-digits-train.txt").cache()
testDF = spark.read.format("libsvm").load("/databricks-datasets/mnist-digits/data-001/mnist-digits-test.txt").cache()
from pyspark.ml.classification import DecisionTreeClassifier
from pyspark.ml.feature import StringIndexer
from pyspark.ml import Pipeline
indexer = StringIndexer().setInputCol("label").setOutputCol("indexedLabel")
dtc = DecisionTreeClassifier().setLabelCol("indexedLabel")
# Chain indexer + dtc together into a single ML Pipeline.
pipeline = Pipeline().setStages([indexer, dtc])
model = pipeline.fit(trainingDF)
display(model.stages[-1])
Scala
val trainingDF = spark.read.format("libsvm").load("/databricks-datasets/mnist-digits/data-001/mnist-digits-train.txt").cache
val testDF = spark.read.format("libsvm").load("/databricks-datasets/mnist-digits/data-001/mnist-digits-test.txt").cache
import org.apache.spark.ml.classification.{DecisionTreeClassifier, DecisionTreeClassificationModel}
import org.apache.spark.ml.feature.StringIndexer
import org.apache.spark.ml.Pipeline
val indexer = new StringIndexer().setInputCol("label").setOutputCol("indexedLabel")
val dtc = new DecisionTreeClassifier().setLabelCol("indexedLabel")
val pipeline = new Pipeline().setStages(Array(indexer, dtc))
val model = pipeline.fit(trainingDF)
val tree = model.stages.last.asInstanceOf[DecisionTreeClassificationModel]
display(tree)
Strukturerade strömmande dataramar
För att visualisera resultatet av en strömningsfråga i realtid, kan du display
en strukturerad strömnings-DataFrame i Scala och Python.
Python
streaming_df = spark.readStream.format("rate").load()
display(streaming_df.groupBy().count())
Scala
val streaming_df = spark.readStream.format("rate").load()
display(streaming_df.groupBy().count())
display
stöder följande valfria parametrar:
-
streamName
: namnet på strömningsfrågan. -
trigger
(Scala) ochprocessingTime
(Python): definierar hur ofta strömningsfrågan körs. Om detta inte anges söker systemet efter tillgängliga nya data så snart den tidigare bearbetningen har slutförts. För att minska kostnaden i produktionen rekommenderar Databricks att du alltid ange ett utlösarintervall. Standardutlösarintervallet är 500 ms. -
checkpointLocation
: platsen där systemet skriver all kontrollpunktsinformation. Om den inte anges genererar systemet automatiskt en tillfällig kontrollpunktsplats i DBFS. För att dataströmmen ska kunna fortsätta bearbeta data där den slutade måste du ange en kontrollpunktsplats. Databricks rekommenderar att du i produktion alltid anger alternativetcheckpointLocation
.
Python
streaming_df = spark.readStream.format("rate").load()
display(streaming_df.groupBy().count(), processingTime = "5 seconds", checkpointLocation = "dbfs:/<checkpoint-path>")
Scala
import org.apache.spark.sql.streaming.Trigger
val streaming_df = spark.readStream.format("rate").load()
display(streaming_df.groupBy().count(), trigger = Trigger.ProcessingTime("5 seconds"), checkpointLocation = "dbfs:/<checkpoint-path>")
Mer information om dessa parametrar finns i Starta strömningsfrågor.
Funktionen displayHTML
Notebook-filerna för Azure Databricks programmeringsspråk (Python, R och Scala) stöder HTML-grafik med hjälp av funktionen displayHTML
. Du kan använda valfri HTML-, CSS- eller JavaScript-kod med funktionen. Den här funktionen stöder interaktiv grafik med JavaScript-bibliotek, t.ex. D3.
Exempel på hur du använder displayHTML
finns i:
Kommentar
displayHTML
-iframe hanteras från domänen databricksusercontent.com
och iframe-sandboxen innehåller attributet allow-same-origin
.
databricksusercontent.com
måste vara tillgänglig från din webbläsare. Om det för närvarande blockeras av företagets nätverk måste det läggas till i en lista över tillåtna.
Bilder
Kolumner som innehåller bilddatatyper återges som omfattande HTML. Azure Databricks försöker återge miniatyrbilder för DataFrame
kolumner som matchar Spark ImageSchema.
Miniatyråtergivning fungerar för alla bilder som har lästs in via spark.read.format('image')
funktionen. För avbildningsvärden som genereras på andra sätt stöder Azure Databricks återgivning av 1, 3 eller 4 kanalbilder (där varje kanal består av en enda byte), med följande begränsningar:
-
Enkanalsavbildningar: fältet
mode
måste vara lika med 0. Fältenheight
,width
ochnChannels
måste beskriva binära avbildningsdata i fältetdata
korrekt. -
Trekanalsavbildningar: fältet
mode
måste vara lika med 16. Fältenheight
,width
ochnChannels
måste beskriva binära avbildningsdata i fältetdata
korrekt. Fältetdata
måste innehålla pixeldata i segment om tre bytes, med kanalordningen(blue, green, red)
för varje pixel. -
Fyrkanalsavbildningar: fältet
mode
måste vara lika med 24. Fältenheight
,width
ochnChannels
måste beskriva binära avbildningsdata i fältetdata
korrekt. Fältetdata
måste innehålla pixeldata i segment om fyra bytes, med kanalordningen(blue, green, red, alpha)
för varje pixel.
Exempel
Anta att du har en mapp som innehåller några avbildningar:
Om du läser bilderna i en DataFrame och sedan visar DataFrame renderar Azure Databricks miniatyrbilder av bilderna:
image_df = spark.read.format("image").load(sample_img_dir)
display(image_df)
Visualiseringar i Python
I detta avsnitt:
Seaborn
Du kan också använda andra Python-bibliotek för att generera diagram. Databricks Runtime innehåller visualiseringsbiblioteket Seaborn. Om du vill skapa en Seaborn-rityta importerar du biblioteket, skapar en rityta och överför ritytan till display
-funktionen.
import seaborn as sns
sns.set(style="white")
df = sns.load_dataset("iris")
g = sns.PairGrid(df, diag_sharey=False)
g.map_lower(sns.kdeplot)
g.map_diag(sns.kdeplot, lw=3)
g.map_upper(sns.regplot)
display(g.fig)
Andra Python-bibliotek
Visualiseringar i R
Så här använder du display
-funktionen för att rita data i R:
library(SparkR)
diamonds_df <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
display(arrange(agg(groupBy(diamonds_df, "color"), "price" = "avg"), "color"))
Du kan använda funktionen för R-rityta av standardtyp.
fit <- lm(Petal.Length ~., data = iris)
layout(matrix(c(1,2,3,4),2,2)) # optional 4 graphs/page
plot(fit)
Du kan också använda valfritt R-visualiseringspaket. R-notebook-filen återger den resulterande ritytan som en .png
och visar den infogad.
I detta avsnitt:
Galler
Galler-paketet har stöd för trellisgrafer – grafer som visar en variabel eller relationen mellan variabler, villkorat med en eller flera andra variabler.
library(lattice)
xyplot(price ~ carat | cut, diamonds, scales = list(log = TRUE), type = c("p", "g", "smooth"), ylab = "Log price")
DandEFA
DandEFA-paketet stöder Dandelion-ritytor.
install.packages("DandEFA", repos = "https://cran.us.r-project.org")
library(DandEFA)
data(timss2011)
timss2011 <- na.omit(timss2011)
dandpal <- rev(rainbow(100, start = 0, end = 0.2))
facl <- factload(timss2011,nfac=5,method="prax",cormeth="spearman")
dandelion(facl,bound=0,mcex=c(1,1.2),palet=dandpal)
facl <- factload(timss2011,nfac=8,method="mle",cormeth="pearson")
dandelion(facl,bound=0,mcex=c(1,1.2),palet=dandpal)
Plotly
Plotly R-paketet förlitar sig på htmlwidgets för R. Installationsinstruktioner och en notebook-fil finns i htmlwidgets.
Andra R-bibliotek
Visualiseringar i Scala
Så här använder du display
-funktionen för att rita data i Scala:
val diamonds_df = spark.read.format("csv").option("header","true").option("inferSchema","true").load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
display(diamonds_df.groupBy("color").avg("price").orderBy("color"))
Djupdykningsanteckningsböcker för Python och Scala
En djupdykning i Python-visualiseringar finns i notebook-filen:
En djupdykning i Scala-visualiseringar finns i notebook-filen: