Görsel öğeler

Azure Databricks, display ve displayHTML işlevleri ile çeşitli görselleştirme türlerini kullanıma hazır olarak destekler.

Azure Databricks ayrıca Python ve R'deki görselleştirme kitaplıklarını yerel olarak destekler ve üçüncü taraf kitaplıklarını yükleyip kullanmanıza olanak tanır.

display işlevi

display işlevi çeşitli veri ve görselleştirme türlerini destekler.

Bu bölümdeki konular:

Veri türleri

Veri çerçeveleri

Azure Databricks'te bir Veri Çerçevesi görselleştirmesi oluşturmanın en kolay yolu display(<dataframe-name>) işlevini çağırmaktır. Örneğin, diamonds_df adlı, renge göre gruplanmış elmaslar içeren veri kümesinden oluşan bir Spark Veri Çerçeveniz varsa ortalama fiyatı hesaplamak için şunu çağırdığınızda:

from pyspark.sql.functions import avg
diamonds_df = spark.read.csv("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header="true", inferSchema="true")

display(diamonds_df.select("color","price").groupBy("color").agg(avg("price")))

Elmas rengine göre ortalama fiyatı veren bir tablo görüntülenir.

Elmas rengine göre ortalama fiyat

İpucu

display işlevini çağırdıktan sonra işleme yapılmadan OK görürseniz büyük olasılıkla geçirilen veri çerçevesi veya koleksiyon boştur.

display(), pandas Veri Çerçevelerini destekler. Olmadan bir Pandas veya koalas dataframe 'e başvurdıysanız display , tablo bir Jupyter not defterinde olduğu için işlenir.

Veri Çerçevesi display yöntemi

Not

Databricks Runtime 7.1 ve üzerinde kullanılabilir.

PySpark, pandas ve Koalas Veri Çerçevelerinin display Azure Databricks işlevini çağıran bir display yöntemi vardır. Basit bir Veri Çerçevesi işleminden sonra onu çağırabilirsiniz; örneğin:

diamonds_df = spark.read.csv("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header="true", inferSchema="true")
diamonds_df.select("color","price").display()

öte yandan bir dizi zincirleme Veri Çerçevesi işleminin sonunda da çağrılabilir; örneğin:

from pyspark.sql.functions import avg
diamonds_df = spark.read.csv("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header="true", inferSchema="true")

diamonds_df.select("color","price").groupBy("color").agg(avg("price")).display()

Görüntüler

display, görüntü veri türlerini içeren sütunları zengin HTML olarak işler. display, Spark ImageSchema ile eşleşen DataFrame sütunları için görüntü küçük resimlerini işlemeye çalışır. Küçük resim işleme, işlev aracılığıyla başarıyla okunan tüm görüntüler için çalışır spark.read.format('image') . Azure Databricks, diğer yollarla oluşturulan görüntü değerleri için aşağıdaki kısıtlamalarla (her biri tek bir bayttan oluşan) 1, 3 veya 4 kanallı görüntülerin işlenmesini destekler:

  • Tek kanallı görüntüler: mode alanı 0'a eşit olmalıdır. height, width ve nChannels alanları data alanındaki ikili görüntü verilerini doğru olarak betimlemelidir
  • Üç kanallı görüntüler: mode alanı 16'ya eşit olmalıdır. height, width ve nChannels alanları data alanındaki ikili görüntü verilerini doğru olarak betimlemelidir. data alanı, kanal sıralaması her piksel için (blue, green, red) olacak şekilde üç baytlık öbekler halinde piksel verileri içermelidir.
  • Dört kanallı görüntüler: mode alanı 24'e eşit olmalıdır. height, width ve nChannels alanları data alanındaki ikili görüntü verilerini doğru olarak betimlemelidir. data alanı, kanal sıralaması her piksel için (blue, green, red, alpha) olacak şekilde dört baytlık öbekler halinde piksel verileri içermelidir.
Örnek

Bazı görüntüler içeren bir klasörünüz olduğunu varsayalım:

Görüntü verileri klasörü

Görüntüleri ImageSchema.readImages ile bir veri çerçevesine okur ve sonra Veri Çerçevesini görüntülerseniz display, görüntülerin küçük resimlerini oluşturur:

from pyspark.ml.image import ImageSchema
image_df = ImageSchema.readImages(sample_img_dir)
display(image_df)

Görüntü Veri Çerçevesini görüntüleme

<a name="structured-streaming-dataframes"> Yapılandırılmış Akış Veri Çerçeveleri

Bir akış sorgusunun sonucunu gerçek zamanlı olarak görselleştirmek için, Scala ve Python'da bir Yapılandırılmış Akış Veri Çerçevesini display ile görüntüleyebilirsiniz.

Python
streaming_df = spark.readStream.format(&quot;rate").load()
display(streaming_df.groupBy().count())
Scala
val streaming_df = spark.readStream.format("rate").load()
display(streaming_df.groupBy().count())

display aşağıdaki isteğe bağlı parametreleri destekler:

  • streamName: akış sorgusu adı.
  • trigger (Scala) ve processingTime (Python): Akış sorgusunun ne sıklıkla çalıştırılacağını tanımlar. Belirtilmezse, sistem önceki işlem tamamlandıktan hemen sonra yeni verilerin kullanılabilirliğini denetler. Üretim maliyetini düşürmek için Databricks her zaman bir tetikleyici aralığı tanımlamanızı önerir. Databricks Runtime 8.0 ve üzerinde varsayılan tetikleyici aralığı 500 ms'dir.
  • checkpointLocation: sistemin tüm denetim noktası bilgilerini yazdığı konum. Belirtilmezse, sistem otomatik olarak DBFS üzerinde geçici bir denetim noktası konumu oluşturur. Akışınızın bırakılan yerden veri işlemeye devam etmesi için bir denetim noktası konumu sağlamalısınız. Databricks üretim ortamında her zaman checkpointLocation seçeneğini belirtmenizi önerir.
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>")

Bu parametreler hakkında daha fazla bilgi için bkz. Akış Sorguları Başlatma.

Çizim türleri

display işlevi, zengin bir çizim türü kümesini destekler:

Grafik türleri

Grafik türü seçme ve yapılandırma

Çubuk grafik seçmek için çubuk grafik simgesine tıklayın Grafik Düğmesi:

Çubuk grafik simgesi

Başka bir çizim türü seçmek için Aşağı Düğmesi düğmesine tıklayın ( Grafik Düğmesi çubuk grafiğin sağında) ve çizim türünü seçin.

Grafik araç çubuğu

Hem çizgi hem de çubuk grafiklerde, zengin bir istemci tarafı etkileşim kümesini destekleyen yerleşik bir araç çubuğu vardır.

Grafik araç çubuğu

Bir grafiği yapılandırmak için Çizim Seçenekleri... 'ne tıklayın.

Çizim seçenekleri

Çizgi grafiğin birkaç özel grafik seçeneği vardır: Y ekseni aralığını ayarlama, noktaları gösterme ve gizleme, Y eksenini logaritmik bir ölçekle görüntüleme.

Eski grafik türleri hakkında bilgi için bkz.

Grafikler arasında renk tutarlılığı

Azure Databricks, grafiklerde iki tür renk tutarlılığını destekler: seri kümesi ve genel.

Seri kümesi renk tutarlılığı, farklı satırlarda aynı değerlere sahip olan bir seriniz varsa aynı değere aynı rengi atar (Örneğin A = ["Apple", "Orange", "Banana"] ve B = ["Orange", "Banana", "Apple"]). Değerler çizim öncesinde sıralandığından her iki gösterge de aynı şekilde sıralanır (["Apple", "Banana", "Orange"]) ve aynı renklere aynı değerler verilir. Ancak, C = ["Orange", "Banana"] olan bir seriniz varsa küme aynı olmadığından A kümesi ile rengi tutarlı olmayacaktır. Sıralama algoritması, C kümesindeki "Banana" öğesine ilk rengi, ancak A kümesindeki "Banana" öğesine ikinci rengi atar. Bu serideki renklerin tutarlı olmasını istiyorsanız grafiklerin genel renk tutarlılığına sahip olması gerektiğini belirtebilirsiniz.

Genel renk tutarlılığında, seride hangi değerler olursa olsun, her değer her zaman aynı renge eşlenir. Bunu her grafikte etkinleştirmek için Genel renk tutarlılığı onay kutusunu işaretleyin.

Genel renk tutarlılığı

Not

Azure Databricks, bu tutarlılığı sağlamak için doğrudan değerlerden renklere karmalar oluşturur. Çakışmalardan (iki değerin tam olarak aynı renge karşılık gelmesi) kaçınmak için, karma büyük bir renk kümesinden oluşturulur; bunun yan etkilerinden biri hoş duran veya kolayca ayırt edilebilen renklerin garanti edilememesidir. Çok sayıda renk olduğundan bazılarının birbirlerine çok benzemesi kaçınılmazdır.

Makine öğrenmesi görselleştirmeleri

display işlevi, standart grafik türlerine ek olarak aşağıdaki makine öğrenmesi eğitim parametrelerinin ve sonuçlarının görselleştirmelerini destekler:

Fazlalıklar

display, doğrusal ve lojistik regresyonlar için bir fazlalıklara karşılık uydurma çizimi oluşturmayı destekler. Bu çizimi almak için modeli ve Veri Çerçevesini sağlarsınız.

Aşağıdaki örnek, şehir nüfusundan ev satış fiyatı verilerine doğrusal bir regresyon oluşturur ve sonra fazlalıklara karşılık uydurulan verileri görüntüler.

# 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)

Fazlalıkları görüntüleme

ROC eğrileri

display, lojistik regresyonlarında bir ROC eğrisi oluşturmayı destekler. Bu çizimi elde etmek için modeli, fit metoduna girilen hazır verileri ve "ROC" parametresini sağlarsınız.

Aşağıdaki örnek, bir bireyin çeşitli özniteliklerinden bireyin yılda 50.000'den az mı, çok mu kazandığını tahmin eden bir sınıflandırıcı geliştirmektedir. Yetişkin veri kümesi nüfus sayım verilerinden alınır ve 48.842 birey ile yıllık gelirleri hakkında bilgi içerir.

Bu bölümdeki örnek kodda one-hot kodlama kullanılır. İşlev Apache Spark 3.0 ile yeniden adlandırıldığından kod, kullandığınız Databricks Runtime sürümüne bağlı olarak biraz farklıdır. Databricks Runtime 6.x veya önceki sürümleri kullanıyorsanız kod yorumlarında açıklandığı gibi kodlarda iki satırı düzenlemeniz gerekir.


# 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
# If you are using Databricks Runtime 6.x or below, comment out the preceding line and uncomment the following line.
# from pyspark.ml.feature import OneHotEncoderEstimator, 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"])
    # If you are using Databricks Runtime 6.x or below, comment out the preceding line and uncomment the following line.
    # encoder = OneHotEncoderEstimator(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")

ROC'yi görüntüleme

Fazlalıkları görüntülemek için "ROC" parametresini çıkarın:

display(lrModel, preppedDataDF)

Lojistik regresyon fazlalıklarını görüntüleme

Karar ağaçları

display işlevi, bir karar ağacının işlenmesini destekler.

Bu görselleştirmeyi almak için karar ağacı modelini sağlarsınız.

Aşağıdaki örnekler, el ile yazılan rakamların görüntülerinden oluşan MNIST veri kümesinden rakamları (0 - 9) tanıyan bir ağacı eğitir ve sonra ağacı görüntüler.

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)

Karar ağacını görüntüleme

displayHTML işlevi

Azure Databricks programlama dili not defterleri (Python, R ve Scala), displayHTML işlevini kullanan HTML grafiklerini destekler; işleve herhangi bir HTML, CSS veya JavaScript kodunu geçirebilirsiniz. Bu işlev, D3 gibi JavaScript kitaplıklarını kullanan etkileşimli grafikleri destekler.

displayHTML kullanımına örnekler için bkz.

Not

displayHTML iframe’i databricksusercontent.com etki alanından sunulur ve iframe korumalı alanı allow-same-origin özniteliğini içerir. databricksusercontent.com tarayıcınızdan erişilebilir olmalıdır. Şu anda kurumsal ağınız tarafından engelleniyorsa, izin verilenler listesine eklenmesi gerekir.

Dile göre görselleştirmeler

Bu bölümde bulunanlar:

Python'da görselleştirmeler

Python'da veri grafiği çizmek için display işlevini aşağıdaki gibi kullanın:

diamonds_df = spark.read.csv("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header="true", inferSchema="true")

display(diamonds_df.groupBy("color").avg("price").orderBy("color"))

Python çubuk grafiği

Bu bölümde bulunanlar:

Python not defterine derinlemesine bakış

display işlevini kullanan Python görselleştirmelerine derinlemesine bir bakış için şu not defterine bakın:

Seaborn

Grafik çizimler oluşturmak için diğer Python kitaplıklarını da kullanabilirsiniz. Databricks Runtime, seaborn görselleştirme kitaplığını içerir. Bir seaborn grafik çizimi oluşturmak için kitaplığı içeri aktarın, çizim oluşturun ve çizimi display işlevine geçirin.

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)

Seaborn grafiği

Diğer Python kitaplıkları

R'de görselleştirmeler

R'de veri grafiği çizmek için display işlevini aşağıdaki gibi kullanın:

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"))

Varsayılan R plot işlevini kullanabilirsiniz.

fit <- lm(Petal.Length ~., data = iris)
layout(matrix(c(1,2,3,4),2,2)) # optional 4 graphs/page
plot(fit)

R varsayılan grafik çizimi

Herhangi bir R görselleştirme paketini de kullanabilirsiniz. R not defteri, ortaya çıkan çizimi bir .png olarak yakalar ve satır içi görüntüler.

Bu bölümde bulunanlar:

Lattice

Lattice paketi bir veya daha fazla değişken koşullu bir değikeni veya değişkenler arasındaki ilişkiyi görüntüleyen trellis grafiklerini destekler.

library(lattice)
xyplot(price ~ carat | cut, diamonds, scales = list(log = TRUE), type = c("p", "g", "smooth"), ylab = "Log price")

R Lattice grafiği

DandEFA

DandEFA paketi dandelion çizimlerini destekler.

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)

R DandEFA grafiği

Plotly

Plotly R paketi htmlwidgets for R’ye bağımlıdır. Yükleme yönergeleri ve bir not defteri için bkz. htmlwidgets.

Diğer R kitaplıkları

Scala'da görselleştirmeler

Scala'da veri grafiği çizmek için display işlevini aşağıdaki gibi kullanın:

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"))

Scala çubuk grafiği

Scala not defterine derinlemesine bakış

display işlevini kullanan Scala görselleştirmelerine derinlemesine bir bakış için şu not defterine bakın:

SQL'de görselleştirmeler

Bir SQL sorgusu çalıştırdığınızda Azure Databricks bazı verileri otomatik olarak ayıklar ve bir tablo olarak görüntüler.

SELECT color, avg(price) AS price FROM diamonds GROUP BY color ORDER BY COLOR

SQL tablosu

Buradan farklı grafik türleri seçebilirsiniz.

SQL çubuk grafiği