วิธีใช้ Marimo วิเคราะห์ข้อมูลเชิงโต้ตอบด้วย Python

How to Use Marimo for Interactive Data Analysis

Python Notebook แบบดั้งเดิมอาจยอดเยี่ยมสำหรับการสำรวจข้อมูล แต่บ่อยครั้งที่การจัดการลำดับของเซลล์ทำได้ยากจนส่งผลให้ผลลัพธ์ไม่สอดคล้องกัน การจะเปลี่ยน Notebook ให้เป็นเครื่องมือเชิงโต้ตอบมักต้องพึ่งพาซอฟต์แวร์เพิ่มเติม หรือต้องเขียนโค้ดใหม่ทั้งหมดในที่อื่น

Marimo เข้ามาแก้ปัญหานี้ด้วยแนวทางที่สะอาดตา โดยเป็น Reactive Python Notebook แบบ Open-source ที่เซลล์จะอัปเดตอัตโนมัติเมื่อค่าในส่วนที่เกี่ยวข้อง (Dependencies) เปลี่ยนแปลง นอกจากนี้ยังจัดเก็บเป็นไฟล์ Python ปกติ ทำให้ง่ายต่อการจัดการเวอร์ชันด้วย Git และการแชร์

ในคู่มือนี้ เราจะสร้างแดชบอร์ดวิเคราะห์ข้อมูลเชิงโต้ตอบอย่างง่ายโดยใช้ Marimo, Pandas และ Altair ตั้งแต่การสร้างชุดข้อมูล เพิ่มตัวกรอง เชื่อมต่อการแสดงผล และรันในรูปแบบแอปพลิเคชัน

1. การติดตั้ง Marimo

เริ่มต้นด้วยการติดตั้ง Marimo พร้อมไลบรารีที่จำเป็นสำหรับการวิเคราะห์ข้อมูล:

pip install marimo pandas altair

คุณยังสามารถติดตั้งผ่าน uv หรือ Conda ได้เช่นกัน หรือเลือกติดตั้งแบบ marimo[recommended] ที่รวมเครื่องมืออย่าง DuckDB และ Polars มาให้ในตัว จากนั้นสร้าง Notebook แรกของคุณด้วยคำสั่ง:

python -m marimo edit analysis.py

Editor จะเปิดขึ้นในเบราว์เซอร์ โดยจุดเด่นของ Marimo คือการบันทึกไฟล์เป็นนามสกุล .py ปกติ ต่างจากรูปแบบ .ipynb ของ Jupyter ที่ซับซ้อนกว่า

2. การสร้างชุดข้อมูล

เราจะเริ่มสร้างชุดข้อมูลการขายจำลองที่ประกอบด้วยข้อมูลผลิตภัณฑ์ ภูมิภาค ไตรมาส จำนวนหน่วย และรายได้ เพื่อใช้ประกอบการสาธิต

import altair as alt
import numpy as np
import pandas as pd
import marimo as mo
 
rng = np.random.default_rng(42)
 
products = [
    ("Laptop", "Tech", 800, 1500),
    ("Phone", "Tech", 500, 1200),
    ("Tablet", "Tech", 250, 800),
    ("Monitor", "Tech", 150, 600),
    ("Keyboard", "Accessories", 30, 150),
    ("Mouse", "Accessories", 15, 90),
    ("Headphones", "Accessories", 50, 400),
    ("Webcam", "Accessories", 40, 250),
]
regions = ["US", "Europe", "Asia"]
region_scale = {"US": 1.0, "Europe": 0.75, "Asia": 0.55}
quarters = ["Q1", "Q2", "Q3", "Q4"]
 
rows = []
for _quarter in quarters:
    for _region in regions:
        for _name, _category, _lo, _hi in products:
            units_sold = int(
                rng.integers(_lo, _hi) * region_scale[_region] * rng.uniform(0.7, 1.3)
            )
            unit_price = round(rng.uniform(_lo, _hi) / 8, 2)
            rows.append(
                {
                    "product": _name,
                    "category": _category,
                    "region": _region,
                    "quarter": _quarter,
                    "units_sold": units_sold,
                    "unit_price": unit_price,
                    "revenue": round(units_sold * unit_price, 2),
                }
            )
 
df = pd.DataFrame(rows)
df

How to Use Marimo for Interactive Data Analysis

ข้อดีของ Marimo คือคุณไม่ต้องเขียนโค้ดแสดงผลเพิ่มเติม เพียงแค่วางชื่อ df ไว้ท้ายเซลล์ ระบบจะแสดงตารางเชิงโต้ตอบที่สามารถค้นหา จัดเรียง และกรองข้อมูลได้ทันที โดยรองรับทั้ง Pandas และ Polars

3. การเพิ่มตัวควบคุมเชิงโต้ตอบ

ขั้นตอนถัดไปคือการเพิ่ม UI อย่าง Dropdown สำหรับเลือกภูมิภาค และ Slider สำหรับกำหนดเกณฑ์ยอดขายขั้นต่ำ:

region = mo.ui.dropdown(
    options=["All"] + sorted(df["region"].unique().tolist()),
    value="All",
    label="Region",
)
 
min_sales = mo.ui.slider(
    start=0,
    stop=int(df["units_sold"].max()),
    value=0,
    label="Minimum units sold",
)
 
mo.hstack([region, min_sales])

How to Use Marimo for Interactive Data Analysis

Marimo มีส่วนประกอบ UI สำเร็จรูปให้เลือกใช้มากมาย เช่น Checkbox, ตัวเลือกวันที่, การอัปโหลดไฟล์ และช่องกรอกข้อความ

4. การกรองข้อมูล

เราสามารถเชื่อมต่อตัวควบคุม UI เข้ากับ DataFrame ได้ดังนี้:

filtered_df = df[df["units_sold"] >= min_sales.value]
 
if region.value != "All":
    filtered_df = filtered_df[
        filtered_df["region"] == region.value
    ]
 
mo.ui.table(filtered_df)

How to Use Marimo for Interactive Data Analysis

คุณไม่จำเป็นต้องรันเซลล์ใหม่ด้วยตนเอง เพราะ Marimo จะตรวจพบว่า filtered_df เชื่อมโยงกับ region และ min_sales จากนั้นจะรันเซลล์ที่เกี่ยวข้องโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงค่า

5. การสร้างการแสดงผลข้อมูลเชิงโต้ตอบ

เราสามารถนำข้อมูลที่ผ่านการกรองมาสร้างแผนภูมิแท่งโดยใช้ Altair:

chart = (
    alt.Chart(filtered_df)
    .mark_bar()
    .encode(
        x="product:N",
        y="units_sold:Q",
        color="region:N",
        tooltip=["product", "region", "quarter", "units_sold", "revenue"],
    )
    .properties(width=600, height=350)
)
 
chart

เมื่อปรับค่าใน Dropdown หรือ Slider ทั้งตารางและแผนภูมิจะอัปเดตแบบเรียลไทม์

How to Use Marimo for Interactive Data Analysis

Marimo รองรับไลบรารีชั้นนำทั้ง Matplotlib, Plotly, Altair, Seaborn และ HoloViews แถมยังสามารถส่งค่าที่เลือกจากแผนภูมิกลับไปยัง Python เพื่อการวิเคราะห์ที่ซับซ้อนขึ้นได้

6. การรัน Notebook ในฐานะแอป

ฟีเจอร์เด่นของ Marimo คือการเปลี่ยน Notebook ให้เป็นแอปพลิเคชันพร้อมใช้งานผ่านคำสั่งในเทอร์มินัล:

python -m marimo run analysis.py

คำสั่งนี้จะเปิด Notebook ในโหมดแอปพลิเคชันโดยซ่อนส่วนที่เป็นโค้ดทิ้งไป ช่วยให้คุณแชร์ผลงานเป็นแดชบอร์ดได้ทันทีโดยไม่ต้องพึ่งพาเฟรมเวิร์กอื่น

How to Use Marimo for Interactive Data Analysis

ความคิดเห็นทิ้งท้าย

Marimo มอบประสบการณ์ที่เรียบง่ายแต่ทรงพลัง คุณสามารถใช้ Python ปกติสร้าง UI และแดชบอร์ดได้โดยไม่ต้องตั้งค่าสภาพแวดล้อมที่ซับซ้อน ทุกอย่างรันได้ในเครื่องผ่านเบราว์เซอร์

การที่ Notebook เป็นไฟล์ Python ปกติทำให้ทำงานร่วมกับ Git ได้อย่างไร้รอยต่อ หมดปัญหาเรื่องลำดับเซลล์ที่มักพบในไฟล์ .ipynb ถือเป็นโซลูชันที่พร้อมใช้งานทันทีสำหรับใครที่ต้องการเปลี่ยนผลการวิเคราะห์ให้เป็นแอปพลิเคชันที่นำเสนอได้อย่างมืออาชีพ

Source: KDnuggets
ดูแลงานแปลและเรียบเรียงโดย SirilukP

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร