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

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.pyEditor จะเปิดขึ้นในเบราว์เซอร์ โดยจุดเด่นของ 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
ข้อดีของ 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])
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)
คุณไม่จำเป็นต้องรันเซลล์ใหม่ด้วยตนเอง เพราะ 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 ทั้งตารางและแผนภูมิจะอัปเดตแบบเรียลไทม์

Marimo รองรับไลบรารีชั้นนำทั้ง Matplotlib, Plotly, Altair, Seaborn และ HoloViews แถมยังสามารถส่งค่าที่เลือกจากแผนภูมิกลับไปยัง Python เพื่อการวิเคราะห์ที่ซับซ้อนขึ้นได้
6. การรัน Notebook ในฐานะแอป
ฟีเจอร์เด่นของ Marimo คือการเปลี่ยน Notebook ให้เป็นแอปพลิเคชันพร้อมใช้งานผ่านคำสั่งในเทอร์มินัล:
python -m marimo run analysis.pyคำสั่งนี้จะเปิด Notebook ในโหมดแอปพลิเคชันโดยซ่อนส่วนที่เป็นโค้ดทิ้งไป ช่วยให้คุณแชร์ผลงานเป็นแดชบอร์ดได้ทันทีโดยไม่ต้องพึ่งพาเฟรมเวิร์กอื่น

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