Morphでは、Pythonを使用して複雑なデータ分析を行うことができます。

記述方法は通常のPython関数に@morph.funcアノテーションを付与するだけでMorphで実行することができます。

@morph.func
@morph.load_data("example_sql_cell")
def get_data_from_database(context):
	sql_result_df = context.data["example_sql_cell"]
	return pd.DataFrame({})

返り値について

Pythonの返り値では、dataframevisualizationmarkdownjsonのいずれかを指定することができます。これらの方に合うような値を作成し返り値として返却してください。

dataframeを指定した場合は、そのままMorphのデータフレームとして表示されます。

visualizationを指定した場合は、そのままMorphのビジュアライゼーションとして表示されます。この場合は、PlotlyやMatplotlibなどのライブラリを使用して可視化することができます。

markdownを指定した場合は、そのままMorphのMarkdownとして表示されます。

jsonを指定した場合は、そのままMorphのJSONとして表示されます。

可視化について

可視化をする場合は、以下のようにPlotlyやMatplotlibなどのライブラリを使用して可視化オブジェクトを返却する関数を実装してください。 ここで、関数の中でhtmlを作成して返却したりしないように注意をしてください。

Plotly

import plotly.express as px

import morph
from morph import MorphGlobalContext

@morph.func(
    name="${MORPH_NAME}",
    description="${MORPH_DESCRIPTION}",
)
@morph.load_data("${MORPH_PARENT_NAME}")
def main(context: MorphGlobalContext) -> px.line:
    data = context.data["${MORPH_PARENT_NAME}"]
    # This is where you write your code.
    # The `px.line` function creates a line plot using Plotly Express.
    fig = px.line(data, x="X Axis", y="Y Axis", markers=True)
    fig.update_layout(title="Plotly Plot")
    return fig

Matplotlib

import matplotlib.pyplot as plt

import morph
from morph import MorphGlobalContext

@morph.func(
    name="${MORPH_NAME}",
    description="${MORPH_DESCRIPTION}",
)
@morph.load_data("${MORPH_PARENT_NAME}")
def main(context: MorphGlobalContext) -> plt.Figure:
    data = context.data["${MORPH_PARENT_NAME}"]
    # This is where you write your code.
    # The `plot` function creates a line plot using Matplotlib.
    fig, ax = plt.subplots()
    ax.plot(data["X-Axis"], data["Y-Axis"], marker="o")
    ax.set_title("Matplotlib Plot")
    ax.set_xlabel("X-Axis")
    ax.set_ylabel("Y-Axis")
    return fig