分析Code Workbook変換データの視覚化

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

データの視覚化

Code Workbookでは、オープンソースの視覚化ライブラリを使用して、ユーザーのデータの視覚化を表示することができます。これらの視覚化は、たとえば Notepad documents などで他の人と共有することができます。

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を環境に追加するには、プロファイルの編集またはCode Workbookの環境のカスタマイズによって行うことができます。

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" # x軸に"price"、y軸に"minimum_nights"を設定します ) # このコードはプロットを表示するために必要です plt.show()
Copied!
1 2 3 4 5 6 7 def seaborn_violinplot(pandas_df): import seaborn as sns # seabornライブラリをインポート import matplotlib.pyplot as plt # matplotlibのpyplotをインポート # インプットされたデータフレームに対して、col_AをX軸、col_BをY軸としてバイオリンプロットを作成 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のフォントを指定する方法の一例です:

def japanese_korean_matplotlib_example():
    import matplotlib.mlab as mlab
    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    # Noto Sans CJK JP フォントパックをフォントファミリーとして設定します
    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-軸")  # X軸のラベルを設定します
    plt.ylabel("Y-축")  # Y軸のラベルを設定します
    plt.legend()  # 凡例を表示します
    plt.title("日本語ラベル図の例 // 한글 라벨 도표의 예시")  # タイトルを設定します
    plt.show()  # プロットを表示します

plot_with_korean_and_japanese_fonts

Matplotlib 2.* のフォント指定

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

Copied!
1 2 3 4 5 6 7 8 from matplotlib import rcParams import matplotlib.font_manager as fm # フォントマネージャに新しいフォントを追加します fm.fontManager.ttflist += fm.createFontList(["/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"]) # デフォルトのフォントを 'Noto Sans CJK JP' に設定します rcParams['font.family'] = 'Noto Sans CJK JP'</pre>

Plotly の使用

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

fig.show()への呼び出しにより、結果として得られるプロット画像が変換出力の一部として保存され、ユーザーインターフェースに返されます。以下は、Plotly Express を使用して視覚化をレンダリングする変換の例です。Plotly Express は、アイリスデータセットを事前に読み込んでいます。

Copied!
1 2 3 4 5 6 7 8 def plotly_example(): import plotly.express as px # データセットを読み込む df = px.data.iris() # 散布図を作成する(x軸:がくの幅、y軸:がくの長さ、色:種類) 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 22 23 24 25 26 27 28 29 30 31 32 def plotly_example_2(): import plotly.graph_objects as go # plotlyのgraph_objectsをgoとしてインポートする fig = go.Figure( data=[go.Scatter(x=[0, 1], y=[0, 1])], # x=[0, 1], y=[0, 1]のデータをプロットする layout=go.Layout( xaxis=dict(range=[0, 5], autorange=False), # x軸の範囲を0から5に設定し、自動範囲設定はオフにする yaxis=dict(range=[0, 5], autorange=False), # y軸の範囲を0から5に設定し、自動範囲設定はオフにする title="Start Title", # グラフのタイトルを"Start Title"とする updatemenus=[dict( type="buttons", # メニュータイプをボタンに設定する buttons=[dict(label="Play", method="animate", args=[None])])] # ボタンのラベルを"Play"、メソッドを"animate"に設定する ), frames=[go.Frame(data=[go.Scatter(x=[1, 2], y=[1, 2])]), # フレームにx=[1, 2], y=[1, 2]のデータをプロットする go.Frame(data=[go.Scatter(x=[1, 4], y=[1, 4])]), # フレームにx=[1, 4], y=[1, 4]のデータをプロットする go.Frame(data=[go.Scatter(x=[3, 4], y=[3, 4])], layout=go.Layout(title_text="End Title"))] # フレームにx=[3, 4], y=[3, 4]のデータをプロットし、タイトルを"End Title"に設定する ) fig.show() # グラフを表示する

R の視覚化

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

r plotly

ggplot2 の使用法

Copied!
1 2 3 4 5 6 7 # 'fare_distribution'という関数を定義します。この関数は、'titanic_dataset'というデータセットを引数として受け取ります。 fare_distribution <- function(titanic_dataset) { # データセットの'Fare'(運賃)の分布をヒストグラムとして表示します。 hist(titanic_dataset$Fare) # データセットをそのまま返します。この関数は、データセットの'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)) + # x軸の範囲を設定 ylim(c(0, 500000)) + # y軸の範囲を設定 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 6 7 fare_distribution <- function(titanic_dataset) { # 画像: svg # titanic_datasetのFare列のヒストグラムを描く hist(titanic_dataset$Fare) # titanic_datasetを返す return(titanic_dataset) }

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

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 unnamed_1 <- function() { # png関数で画像ファイルを作成 png( filename=graphicsFile, # 画像ファイル名 width=800, # 画像の幅 height=400, # 画像の高さ units="px", # 単位はピクセル pointsize=4, # 文字サイズ bg="white", # 背景色は白 res=300, # 解像度 type="cairo") # 描画エンジン # 1から10までの数値をプロット plot(1:10, 1:10) }

カスタム svg() 関数を使用する場合は、上記で説明したコメントヒントも提供する必要があります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 unnamed_1 <- function() { # image: svg # 画像: 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) # plotlyパッケージを読み込む scatter_plotly <- plot_ly ( x = rnorm(1000), # x軸に1000個の正規分布に従う乱数を生成 y = rnorm(1000), # y軸に1000個の正規分布に従う乱数を生成 mode = "markers", # マーカーモードを設定 type = "scatter" # グラフの種類を散布図に設定 ) plot(scatter_plotly) # 散布図を描画 }

Plotly の制限事項

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

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

Matplotlib の制限事項

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

  • Matplotlib はスレッドセーフではありません。
    • 複数のノードを実行するとき、Spark はこれらの計算を並行して実行します。その結果、Matplotlib ランタイム例外や誤ったノードで作成された可視化という形で意図しない挙動が明らかになる可能性があります。
  • 単一の 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 JP」に設定します 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-軸") # X軸のラベル plt.ylabel("Y-축") # Y軸のラベル plt.legend() # 凡例を表示 plt.title("日本語ラベル図の例 // 한글 라벨 도표의 예시") # タイトルを表示 plt.show() # プロットを表示