Microsoft Fabric 中的笔记本可视化效果

Microsoft Fabric 是一项集成式分析服务,可以缩短在数据仓库和大数据分析系统中进行见解提取所需的时间。 笔记本中的数据可视化是一个关键组件,可用于深入了解数据。 它有助于人们更轻松地理解大数据和小型数据。 还可使人们更轻松地检测数据组中的模式、趋势和离群值。

使用 Fabric 中的 Apache Spark 时,有多种内置选项可帮助你可视化数据,包括 Fabric 笔记本图表选项以及对常用开源库的访问权限。

使用 Fabric 笔记本时,可以使用图表选项将表格结果视图转变为自定义图表。 在这里,无需编写任何代码即可实现数据可视化。

内置可视化命令 - display() 函数

该 Fabric 内置可视化函数可将 Apache Spark 数据帧、Pandas 数据帧和 SQL 查询结果转换为丰富的格式数据可视化效果。

可以在 PySpark 中创建的数据帧上使用 display 函数以及 Spark 数据帧上的 Scala 或弹性分布式数据集 (RDD) 函数生成丰富的数据帧表视图和图表视图。

默认情况下,SQL 语句的输出以渲染的表视图显示。

丰富的数据帧表视图

丰富数据帧预览的动态 GIF。

  1. 使用 display() 命令时默认渲染“”视图。
  2. 可通过单击“检查”按钮来分析数据帧。 它提供汇总的数据分布,并会显示每一列的统计信息。
  3. “检查”侧窗格的每个卡片映射到数据帧的一列,可通过单击卡片或选择表中的一列来查看更多详细信息。
  4. 可通过单击表中的单元格查看单元格详细信息。 当数据帧包含长字符串类型的内容时,此功能很有用。
  5. 可以指定表视图的行计数,默认值为 1000,笔记本最多支持查看和分析一个数据帧的 10000 行。

丰富的数据帧图表视图

图表视图的动画 GIF。

  1. 获得呈现的表视图后,请切换到图表视图。

  2. Fabric 笔记本将根据目标数据帧自动推荐“键”“值”对,使默认图表具有数据见解意义。

  3. 现在,你可以通过指定以下值自定义可视化效果:

    配置 说明
    图表类型 display 函数支持多种图表类型,包括条形图、散点图、折线图等。
    密钥 指定 x 轴的值范围。
    Value 指定 y 轴的值范围。
    序列组 使用此配置确定聚合的组。
    聚合 使用此方法可聚合可视化效果中的数据。

    配置将会自动保存在笔记本输出内容中。

    注意

    默认情况下,display(df) 函数将只选择数据的前 1000 行来呈现图表。 选择“聚合所有结果”,然后选择“应用”以应用根据整个语义模型生成的图表。 当图表设置发生更改时,将触发 Spark 作业。 请注意,可能需要几分钟时间才能完成计算并呈现图表。

  4. 作业完成后,可以查看最终可视化效果并与之交互。

display(df) 摘要视图

使用 display(df, summary = true) 检查给定 Apache Spark 数据帧的统计信息摘要。 摘要包括每列的列名、列类型、唯一值和缺失值。 你还可以选择特定列来查看其最小值、最大值、平均值和标准差。

摘要视图的动画 GIF。

displayHTML() 选项

Fabric 笔记本支持使用 displayHTML 函数的 HTML 图形。

下图是使用 D3.js 创建可视化效果的示例。

使用 D3.js 创建的图表示例的屏幕截图。

要创建此可视化效果,可运行以下代码。

displayHTML("""<!DOCTYPE html>
<meta charset="utf-8">

<!-- Load d3.js -->
<script src="https://d3js.org/d3.v4.js"></script>

<!-- Create a div where the graph will take place -->
<div id="my_dataviz"></div>
<script>

// set the dimensions and margins of the graph
var margin = {top: 10, right: 30, bottom: 30, left: 40},
  width = 400 - margin.left - margin.right,
  height = 400 - margin.top - margin.bottom;

// append the svg object to the body of the page
var svg = d3.select("#my_dataviz")
.append("svg")
  .attr("width", width + margin.left + margin.right)
  .attr("height", height + margin.top + margin.bottom)
.append("g")
  .attr("transform",
        "translate(" + margin.left + "," + margin.top + ")");

// Create Data
var data = [12,19,11,13,12,22,13,4,15,16,18,19,20,12,11,9]

// Compute summary statistics used for the box:
var data_sorted = data.sort(d3.ascending)
var q1 = d3.quantile(data_sorted, .25)
var median = d3.quantile(data_sorted, .5)
var q3 = d3.quantile(data_sorted, .75)
var interQuantileRange = q3 - q1
var min = q1 - 1.5 * interQuantileRange
var max = q1 + 1.5 * interQuantileRange

// Show the Y scale
var y = d3.scaleLinear()
  .domain([0,24])
  .range([height, 0]);
svg.call(d3.axisLeft(y))

// a few features for the box
var center = 200
var width = 100

// Show the main vertical line
svg
.append("line")
  .attr("x1", center)
  .attr("x2", center)
  .attr("y1", y(min) )
  .attr("y2", y(max) )
  .attr("stroke", "black")

// Show the box
svg
.append("rect")
  .attr("x", center - width/2)
  .attr("y", y(q3) )
  .attr("height", (y(q1)-y(q3)) )
  .attr("width", width )
  .attr("stroke", "black")
  .style("fill", "#69b3a2")

// show median, min and max horizontal lines
svg
.selectAll("toto")
.data([min, median, max])
.enter()
.append("line")
  .attr("x1", center-width/2)
  .attr("x2", center+width/2)
  .attr("y1", function(d){ return(y(d))} )
  .attr("y2", function(d){ return(y(d))} )
  .attr("stroke", "black")
</script>

"""
)

在笔记本中嵌入 Power BI 报表

重要

此功能目前处于预览状态。 此信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 Microsoft 不对此处提供的信息作任何明示或默示的担保。

Powerbiclient Python 包现在在 Fabric 笔记本中原生受支持。 无需在 Fabric 笔记本 Spark 运行时 3.4 上执行任何额外的设置(例如身份验证过程)。 只需导入 powerbiclient,然后即可继续探索。 若要详细了解如何使用 powerbiclient 包,请参阅 powerbiclient 文档

Powerbiclient 支持以下关键功能。

呈现现有的 Power BI 报表

只需几行代码即可轻松地在笔记本中嵌入 Power BI 报表并与之交互。

下图是呈现现有 Power BI 报表的示例。

Spark 快速视觉对象的屏幕截图。

运行以下代码来呈现现有的 Power BI 报表。

from powerbiclient import Report

report_id="Your report id"
report = Report(group_id=None, report_id=report_id)

report

从 Spark 数据帧创建报表视觉对象

可以在笔记本中使用 Spark 数据帧快速生成见解可视化效果。 还可以选择“保存”嵌入报表,以在目标工作区中创建报表项。

下图是来自 Spark 数据帧的 QuickVisualize() 的示例。

Power BI 报表的屏幕截图。

运行以下代码以从 Spark 数据帧呈现报表。

# Create a spark dataframe from a Lakehouse parquet table
sdf = spark.sql("SELECT * FROM testlakehouse.table LIMIT 1000")

# Create a Power BI report object from spark data frame
from powerbiclient import QuickVisualize, get_dataset_config
PBI_visualize = QuickVisualize(get_dataset_config(sdf))

# Render new report
PBI_visualize

从 pandas 数据帧创建报表视觉对象

还可以基于笔记本中的 pandas 数据帧创建报表。

下图是来自 pandas 数据帧的 QuickVisualize() 的示例。

Pandas 快速视觉对象的屏幕截图。

运行以下代码以从 Spark 数据帧呈现报表。

import pandas as pd

# Create a pandas dataframe from a URL
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv")

# Create a pandas dataframe from a Lakehouse csv file
from powerbiclient import QuickVisualize, get_dataset_config

# Create a Power BI report object from your data
PBI_visualize = QuickVisualize(get_dataset_config(df))

# Render new report
PBI_visualize

在数据可视化效果方面,Python 提供了多个图形库,这些库包含许多不同的功能。 默认情况下,Fabric 中的每个 Apache Spark 池都包含一组精选和常用的开放源代码库。

Matplotlib

可以使用每个库的内置呈现功能(如 Matplotlib),来呈现标准绘图库。

下图是使用 Matplotlib 创建条形图的示例。

使用 Matplotlib 创建的折线图的屏幕截图。

使用 Matplotlib 创建的条形图的屏幕截图。

运行下面的示例代码以绘制此条形图。

# Bar chart

import matplotlib.pyplot as plt

x1 = [1, 3, 4, 5, 6, 7, 9]
y1 = [4, 7, 2, 4, 7, 8, 3]

x2 = [2, 4, 6, 8, 10]
y2 = [5, 6, 2, 6, 2]

plt.bar(x1, y1, label="Blue Bar", color='b')
plt.bar(x2, y2, label="Green Bar", color='g')
plt.plot()

plt.xlabel("bar number")
plt.ylabel("bar height")
plt.title("Bar Chart Example")
plt.legend()
plt.show()

Bokeh

可以使用 displayHTML(df) 来呈现 HTML 或交互库,如 bokeh

下图是使用 bokeh 在地图上绘制字形的示例。

在地图上绘制字形的示例的屏幕截图。

要绘制此图像,可运行下面的示例代码。

from bokeh.plotting import figure, output_file
from bokeh.tile_providers import get_provider, Vendors
from bokeh.embed import file_html
from bokeh.resources import CDN
from bokeh.models import ColumnDataSource

tile_provider = get_provider(Vendors.CARTODBPOSITRON)

# range bounds supplied in web mercator coordinates
p = figure(x_range=(-9000000,-8000000), y_range=(4000000,5000000),
           x_axis_type="mercator", y_axis_type="mercator")
p.add_tile(tile_provider)

# plot datapoints on the map
source = ColumnDataSource(
    data=dict(x=[ -8800000, -8500000 , -8800000],
              y=[4200000, 4500000, 4900000])
)

p.circle(x="x", y="y", size=15, fill_color="blue", fill_alpha=0.8, source=source)

# create an html document that embeds the Bokeh plot
html = file_html(p, CDN, "my plot1")

# display this html
displayHTML(html)

Plotly

你可以使用 displayHTML() 来呈现 HTML 或交互式库,如 Plotly 。

要绘制此图像,可运行下面的示例代码。

使用 plotly 创建的美国地图的屏幕截图。

from urllib.request import urlopen
import json
with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
    counties = json.load(response)

import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
                   dtype={"fips": str})

import plotly
import plotly.express as px

fig = px.choropleth(df, geojson=counties, locations='fips', color='unemp',
                           color_continuous_scale="Viridis",
                           range_color=(0, 12),
                           scope="usa",
                           labels={'unemp':'unemployment rate'}
                          )
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

# create an html document that embeds the Plotly plot
h = plotly.offline.plot(fig, output_type='div')

# display this html
displayHTML(h)

Pandas

可以将 pandas 数据帧的 HTML 输出视为默认输出。 Fabric 笔记本会自动显示样式的 HTML 内容。

使用 pandas 创建的表的屏幕截图。

import pandas as pd 
import numpy as np 

df = pd.DataFrame([[38.0, 2.0, 18.0, 22.0, 21, np.nan],[19, 439, 6, 452, 226,232]], 

                  index=pd.Index(['Tumour (Positive)', 'Non-Tumour (Negative)'], name='Actual Label:'), 

                  columns=pd.MultiIndex.from_product([['Decision Tree', 'Regression', 'Random'],['Tumour', 'Non-Tumour']], names=['Model:', 'Predicted:'])) 

df