分析Code Workbooks変換Plotly の使用方法

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

データを可視化する

Code Workbook では、オープンソースの可視化ライブラリを使用してデータの可視化を表示できます。これらの可視化は、たとえば Notepad ドキュメントでほかのユーザーと共有できます。

Python の可視化

Python では、Code Workbook は Matplotlib、Seaborn、Plotly を使用した可視化をサポートしています。

Matplotlib と Seaborn を使用する

Matplotlib を使用する場合、matplotlib.pyplot.show() を呼び出すと、生成されたプロット画像がトランスフォームの出力に保存され、ユーザーインターフェースに返されます。これにより、カスタマイズしたプロットを作成できます。ほかの可視化と同様に、グラフ内のトランスフォームを右クリックして画像をダウンロードを選択すると、この画像をダウンロードできます。

Matplotlib を使用して可視化を描画するトランスフォームの例を以下に示します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 def viz_plot_univariate_distribution_using_histogram(input_dataset): import matplotlib.mlab as mlab import matplotlib.pyplot as plt INPUT_DF = input_dataset SELECTED_COLUMN = "column_to_plot" # これは数値列である必要があります NUM_BINS = number_of_bins # 選択した列のヒストグラムを作成します bins, counts = INPUT_DF.select(SELECTED_COLUMN).rdd.flatMap(lambda x:x).histogram(NUM_BINS) # ヒストグラムを描画します fig, ax = plt.subplots() ax.hist(bins[:-1], bins, weights=counts, density=True) ax.set_xlabel(SELECTED_COLUMN) ax.set_ylabel('Probability density') ax.set_title(r'Histogram of ' + str(SELECTED_COLUMN)) # ylabel が見切れないように余白を調整します fig.tight_layout() plt.show()

Matplotlib をベースとするデータ可視化ライブラリである Seaborn を使用する場合、画像をフロントエンドに返すには matplotlib.pyplot.show() を呼び出す必要があります。

プロファイルを編集するか、ワークブックの環境をカスタマイズすることで、環境に Seaborn を追加できます。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 def seaborn_example(pandas_df): import seaborn as sns import matplotlib.pyplot as plt sns.set_theme() # 可視化を作成します sns.relplot( data=pandas_df, x="price", y="minimum_nights" ) # プロットを取得するにはこれが必要です plt.show()
Copied!
1 2 3 4 5 6 def seaborn_violinplot(pandas_df): import seaborn as sns import matplotlib.pyplot as plt sns.violinplot(x="col_A", y="col_B", data=pandas_df); plt.show()

デフォルトでは、Code Workbook の Matplotlib と Seaborn の可視化は PNG 形式で出力されます。Matplotlib と Seaborn の可視化を SVG 形式で出力するには、プロットの前に次のコードを使用します。

set_output_image_type('svg')

または、よりわかりやすくするためにヒントを使用します。

Copied!
1 2 3 @output_image_type('svg') def chart(input): # ここでチャートを作成します

Matplotlib を使用して異なる言語やフォントでプロットする

Matplotlib を使用して、ラテン文字以外の文字を使用する言語(日本語や韓国語など)やデフォルト以外のフォントでラベルやテキストをプロットするには、画像の描画時に Matplotlib で使用するフォントファミリーを明示的に指定する必要があります。詳細については、デフォルトでインストールされている利用可能なフォントの一覧を参照してください。

Matplotlib のフォントを指定する方法の例を以下に示します。

def japanese_korean_matplotlib_example():
    import matplotlib.mlab as mlab
    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    # フォントファミリーを Noto Sans CJK フォントパックに設定します
    rcParams['font.family'] = 'Noto Sans CJK JP'
    # データを作成します
    x = [10,20,30,40,50]
    y = [30,30,30,30,30]

    # 線を描画します
    plt.plot(x, y, label = "ライン1")
    plt.plot(y, x, label = "선2")
    plt.xlabel("X-軸")
    plt.ylabel("Y-축")
    plt.legend()
    plt.title("日本語ラベル図の例 // 한글 라벨 도표의 예시")
    plt.show()

韓国語と日本語のフォントを使用したプロット

Matplotlib 2.* のフォント指定

Matplotlib 2.* では、.ttc フォントファイルは Matplotlib によって自動的に検出されません。3.* にアップグレードするか、フォントのファイルパスを Matplotlib のフォントマネージャーに直接追加してください。

Copied!
1 2 3 4 from matplotlib import rcParams import matplotlib.font_manager as fm fm.fontManager.ttflist += fm.createFontList(["/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"]) rcParams['font.family'] = 'Noto Sans CJK JP'</pre>

Plotly を使用する

Plotly は、インタラクティブな画像を作成できる可視化ライブラリです。Plotly を使用するには、まず環境に含まれていることを確認してください。

fig.show() を呼び出すと、生成されたプロット画像がトランスフォームの出力の一部として保存され、ユーザーインターフェースに返されます。Plotly Express を使い、Plotly で可視化を描画するトランスフォームの例を以下に示します。Plotly Express には iris データセットがあらかじめ読み込まれています。

Copied!
1 2 3 4 5 def plotly_example(): import plotly.express as px df = px.data.iris() fig = px.scatter(df, x = "sepal_width", y = "sepal_length", color = "species") fig.show()

トランスフォームを実行すると、可視化タブに Plotly の可視化が表示されます。可視化は全画面モードで表示することを推奨します。拡大・縮小やグラフ上での選択などの機能を使用できます。

Python の Plotly

アニメーション付きの可視化を生成する、より複雑な例を以下に示します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def plotly_example_2(): import plotly.graph_objects as go fig = go.Figure( data=[go.Scatter(x=[0, 1], y=[0, 1])], layout=go.Layout( xaxis=dict(range=[0, 5], autorange=False), yaxis=dict(range=[0, 5], autorange=False), title="Start Title", updatemenus=[dict( type="buttons", buttons=[dict(label="Play", method="animate", args=[None])])] ), frames=[go.Frame(data=[go.Scatter(x=[1, 2], y=[1, 2])]), go.Frame(data=[go.Scatter(x=[1, 4], y=[1, 4])]), go.Frame(data=[go.Scatter(x=[3, 4], y=[3, 4])], layout=go.Layout(title_text="End Title"))] ) fig.show()

R の可視化

R では、Code Workbook は ggplot2 と plotly を使用した可視化をサポートしています。

R の Plotly

ggplot2 を使用する

Copied!
1 2 3 4 fare_distribution <- function(titanic_dataset) { hist(titanic_dataset$Fare) return(titanic_dataset) }
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 example_ggplot <- function() { library(ggplot2) theme_set(theme_bw()) # bw テーマを事前に設定します data("midwest", package = "ggplot2") # 散布図 gg <- ggplot(midwest, aes(x=area, y=poptotal)) + geom_point(aes(col=state, size=popdensity)) + geom_smooth(method="loess", se=F) + xlim(c(0, 0.1)) + ylim(c(0, 500000)) + labs(subtitle="Area Vs Population", y="Population", x="Area", title="Scatterplot", caption = "Source: midwest") plot(gg) return(NULL) }

デフォルトでは、ggplot の可視化は PNG として出力されます。R の ggplot の可視化を SVG 形式で生成するには、コメントを使用してヒントを追加します。

Copied!
1 2 3 4 5 fare_distribution <- function(titanic_dataset) { # image: svg hist(titanic_dataset$Fare) return(titanic_dataset) }

PNG または SVG の出力をカスタマイズするには、組み込みの graphicsFile 変数をファイル名として使用して、png() または svg() 関数を呼び出します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 unnamed_1 <- function() { png( filename=graphicsFile, width=800, height=400, units="px", pointsize=4, bg="white", res=300, type="cairo") plot(1:10, 1:10) }

カスタムの svg() 関数を使用する場合は、上記のコメントによるヒントも指定する必要があります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 unnamed_1 <- function() { # image: svg svg( filename=graphicsFile, width=5, height=9, pointsize=4, bg="white") plot(1:10, 1:10) }

Plotly を使用する

Plotly ↗ を使用すると、インタラクティブなグラフを作成できます。R で Plotly を使用するには、環境に r-plotly パッケージを追加します。フロントエンドにグラフを表示するには、plot() または print() でグラフをプロットします。簡単な例を以下に示します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 plotly_example <- function() { library(plotly) scatter_plotly <- plot_ly ( x = rnorm(1000), y = rnorm(1000), mode = "markers", type = "scatter" ) plot(scatter_plotly) }

Plotly の制限事項

以下の留意事項は、Python と R の両方に適用されます。

  • コンソールでは、Plotly の可視化は画像に変換され、PNG として表示されます。インタラクティブにはなりません。インタラクティブな可視化を表示するには、グラフ内のトランスフォームノードにコードを記述します。
  • Plotly の可視化を作成する際、20,000点を超える可視化は、ブラウザーのパフォーマンスが低下するため推奨しません。点の数が多い散布図を作成する場合は、パフォーマンスを向上させるために scattergl を使用します。

Matplotlib の制限事項

以下の Matplotlib の制限事項は、Python に適用されます。

  • Matplotlib はスレッドセーフではありません。↗
    • 複数のノードを実行する場合、Spark はこれらの計算を並列に実行します。その結果、Matplotlib の実行時例外が発生したり、誤ったノードで可視化が作成されたりするなど、意図しない動作が生じる可能性があります。
  • 1つの Code Workbook 内の別々のノードで複数の Matplotlib の可視化を使用する場合は、各ノードをロックする必要があります。以下に示すように、スレッドセーフなデコレーター @synchronous_node_execution で各ノードをロックできます。
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import matplotlib.mlab as mlab import matplotlib.pyplot as plt from matplotlib import rcParams @synchronous_node_execution def thread_safe_node(): # フォントファミリーを Noto Sans CJK フォントパックに設定します rcParams['font.family'] = 'Noto Sans CJK JP' # データを作成します x = [10,20,30,40,50] y = [30,30,30,30,30] # 線を描画します plt.plot(x, y, label = "ライン1") plt.plot(y, x, label = "선2") plt.xlabel("X-軸") plt.ylabel("Y-축") plt.legend() plt.title("日本語ラベル図の例 // 한글 라벨 도표의 예시") plt.show()