| import marimo |
|
|
| __generated_with = "0.10.16" |
| app = marimo.App() |
|
|
|
|
| @app.cell |
| def _(): |
| import marimo as mo |
| import polars as pl |
| from sklearn import datasets |
| from sklearn.model_selection import train_test_split |
| from sklearn.tree import DecisionTreeClassifier |
| from sklearn.metrics import accuracy_score, classification_report, confusion_matrix |
|
|
| mo.md("# Iris Dataset Showcase") |
| return ( |
| DecisionTreeClassifier, |
| accuracy_score, |
| classification_report, |
| confusion_matrix, |
| datasets, |
| mo, |
| pl, |
| train_test_split, |
| ) |
|
|
|
|
| @app.cell(hide_code=True) |
| def _(datasets): |
| iris = datasets.load_iris() |
| X = iris.data |
| y = iris.target |
| return X, iris, y |
|
|
|
|
| @app.cell(hide_code=True) |
| def _(X, train_test_split, y): |
| |
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
| return X_test, X_train, y_test, y_train |
|
|
|
|
| @app.cell |
| def _(DecisionTreeClassifier, X_train, mo, y_train): |
| classifier = DecisionTreeClassifier() |
|
|
| classifier.fit(X_train, y_train) |
| mo.md(f""" |
| ## Decision Tree Classifier |
| """) |
| return (classifier,) |
|
|
|
|
| @app.cell |
| def _(X_test, classifier): |
| y_pred = classifier.predict(X_test) |
| return (y_pred,) |
|
|
|
|
| @app.cell |
| def _( |
| accuracy_score, |
| classification_report, |
| confusion_matrix, |
| mo, |
| y_pred, |
| y_test, |
| ): |
| |
| accuracy = accuracy_score(y_test, y_pred) |
|
|
| |
| conf_matrix = confusion_matrix(y_test, y_pred) |
|
|
| |
| class_report = classification_report(y_test, y_pred) |
|
|
| mo.md(f""" |
| Accuracy: {accuracy} |
| |
| Confusion Matrix: |
| ``` |
| {conf_matrix} |
| ``` |
| |
| |
| Classification Report: |
| ``` |
| {class_report} |
| ``` |
| """) |
| return accuracy, class_report, conf_matrix |
|
|
|
|
| @app.cell |
| def _(X_test, pl, y_pred, y_test): |
| import seaborn as sns |
| import matplotlib.pyplot as plt |
|
|
| df = pl.DataFrame({ |
| "sepal length (cm)": X_test[:, 0], |
| "sepal width (cm)": X_test[:, 1], |
| "Predicted": y_pred, |
| "Actual": y_test |
| }) |
| return df, plt, sns |
|
|
|
|
| @app.cell |
| def _(df, mo, plt, sns): |
| plt.figure(figsize=(10, 6)) |
| sns.scatterplot(data=df, x='sepal length (cm)', y='sepal width (cm)', hue='Predicted', style='Actual', palette='Set1', markers=['o', 's', 'D']) |
| plt.title('Iris Dataset: Sepal Length vs Sepal Width') |
| plt.xlabel('Sepal Length (cm)') |
| plt.ylabel('Sepal Width (cm)') |
| plt.legend(title='Class') |
| mo.vstack( |
| [ |
| mo.md("## Iris Dataset"), |
| plt.gcf() |
| ] |
| ) |
| return |
|
|
|
|
| @app.cell |
| def _(conf_matrix, iris, mo, plt, sns): |
| plt.figure(figsize=(8, 6)) |
| sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names) |
| plt.xlabel('Predicted') |
| plt.ylabel('Actual') |
| mo.vstack([ |
| mo.md("## Confusion Matrix"), |
| plt.gcf() |
| ]) |
| return |
|
|
|
|
| @app.cell(hide_code=True) |
| def _(iris, pl): |
| iris_df = pl.DataFrame(data=iris.data, schema=iris.feature_names) |
| iris_df = iris_df.with_columns(pl.Series("species", iris.target)) |
| return (iris_df,) |
|
|
|
|
| @app.cell |
| def _(iris_df, mo, plt, sns): |
| sns.pairplot(iris_df.to_pandas(), hue='species', palette='Set1', markers=["o", "s", "D"]) |
| mo.vstack([ |
| mo.md("## Pair Plot"), |
| plt.gcf() |
| ]) |
| return |
|
|
|
|
| @app.cell |
| def _(classifier, iris, mo, plt): |
| from sklearn.tree import plot_tree |
|
|
| plt.figure(figsize=(12, 8)) |
| plot_tree(classifier, filled=True, feature_names=iris.feature_names, class_names=iris.target_names) |
| mo.vstack([ |
| mo.md("## Classifier Decision Tree Visualization"), |
| plt.gcf() |
| ]) |
| return (plot_tree,) |
|
|
|
|
| @app.cell(hide_code=True) |
| def _(): |
| tips = { |
| "Saving": ( |
| """ |
| **Saving** |
| |
| - _Name_ your app using the box at the top of the screen, or |
| with `Ctrl/Cmd+s`. You can also create a named app at the |
| command line, e.g., `marimo edit app_name.py`. |
| |
| - _Save_ by clicking the save icon on the bottom right, or by |
| inputting `Ctrl/Cmd+s`. By default marimo is configured |
| to autosave. |
| """ |
| ), |
| "Running": ( |
| """ |
| 1. _Run a cell_ by clicking the play ( ▷ ) button on the top |
| right of a cell, or by inputting `Ctrl/Cmd+Enter`. |
| |
| 2. _Run a stale cell_ by clicking the yellow run button on the |
| right of the cell, or by inputting `Ctrl/Cmd+Enter`. A cell is |
| stale when its code has been modified but not run. |
| |
| 3. _Run all stale cells_ by clicking the play ( ▷ ) button on |
| the bottom right of the screen, or input `Ctrl/Cmd+Shift+r`. |
| """ |
| ), |
| "Console Output": ( |
| """ |
| Console output (e.g., `print()` statements) is shown below a |
| cell. |
| """ |
| ), |
| "Creating, Moving, and Deleting Cells": ( |
| """ |
| 1. _Create_ a new cell above or below a given one by clicking |
| the plus button to the left of the cell, which appears on |
| mouse hover. |
| |
| 2. _Move_ a cell up or down by dragging on the handle to the |
| right of the cell, which appears on mouse hover. |
| |
| 3. _Delete_ a cell by clicking the trash bin icon. Bring it |
| back by clicking the undo button on the bottom right of the |
| screen, or with `Ctrl/Cmd+Shift+z`. |
| """ |
| ), |
| "Disabling Automatic Execution": ( |
| """ |
| Via the notebook settings (gear icon) or footer panel, you |
| can disable automatic execution. This is helpful when |
| working with expensive notebooks or notebooks that have |
| side-effects like database transactions. |
| """ |
| ), |
| "Disabling Cells": ( |
| """ |
| You can disable a cell via the cell context menu. |
| marimo will never run a disabled cell or any cells that depend on it. |
| This can help prevent accidental execution of expensive computations |
| when editing a notebook. |
| """ |
| ), |
| "Code Folding": ( |
| """ |
| You can collapse or fold the code in a cell by clicking the arrow |
| icons in the line number column to the left, or by using keyboard |
| shortcuts. |
| |
| Use the command palette (`Ctrl/Cmd+k`) or a keyboard shortcut to |
| quickly fold or unfold all cells. |
| """ |
| ), |
| "Code Formatting": ( |
| """ |
| If you have [ruff](https://github.com/astral-sh/ruff) installed, |
| you can format a cell with the keyboard shortcut `Ctrl/Cmd+b`. |
| """ |
| ), |
| "Command Palette": ( |
| """ |
| Use `Ctrl/Cmd+k` to open the command palette. |
| """ |
| ), |
| "Keyboard Shortcuts": ( |
| """ |
| Open the notebook menu (top-right) or input `Ctrl/Cmd+Shift+h` to |
| view a list of all keyboard shortcuts. |
| """ |
| ), |
| "Configuration": ( |
| """ |
| Configure the editor by clicking the gears icon near the top-right |
| of the screen. |
| """ |
| ), |
| } |
| return (tips,) |
|
|
|
|
| if __name__ == "__main__": |
| app.run() |
|
|