PART 04. 데이터 다루기 _ SQL과 데이터프레임
PART 02에서 marimo의 반응형 실행 원리를 배웠고, PART 03에서 위젯으로 인터랙션을 만들었습니다. 이제 데이터를 직접 다룰 차례입니다.
marimo는 SQL 셀을 기본으로 제공합니다. 별도 라이브러리를 가져오지 않아도 mo.sql()로 DuckDB 쿼리를 실행하고, 그 결과를 Python 데이터프레임으로 받을 수 있습니다. SQL 셀도 DAG 위의 노드입니다. 위젯 값을 f-string으로 SQL에 삽입하면, 위젯을 조작하는 순간 쿼리가 자동으로 재실행됩니다.
Python에서 만든 Pandas나 Polars 데이터프레임을 SQL 쿼리에서 테이블로 직접 참조하는 것도 가능합니다. SQL에서 집계하고, Python에서 필터링하고, 다시 SQL로 조인하는 식의 왕복 사용이 자연스럽습니다.
PART 03 Ch 01에서 "PART 04에서 자세히 다룬다"고 예고했던 mo.ui.table과 mo.ui.dataframe 위젯도 이 파트에서 함께 다룹니다.
마지막 챕터에서는 캐싱을 다룹니다. 반응형 노트북은 셀을 자주 재실행하는 구조입니다. 계산이 무거운 함수라면 결과를 캐시해 불필요한 재계산을 막을 수 있습니다. @mo.cache, @mo.lru_cache, @mo.persistent_cache 세 가지 데코레이터가 그 역할을 합니다.
선행 지식: PART 02 (반응형 데이터플로우), Pandas 기초.
이 파트를 마치면
mo.sql()로 DuckDB 쿼리를 실행하고 결과를 데이터프레임으로 받을 수 있습니다.- Python 변수와 위젯 값을 SQL에 삽입해 반응형 쿼리를 구성할 수 있습니다.
- Python 데이터프레임을 SQL 쿼리에서 테이블로 참조하고, SQL 결과를 Python에서 이어서 처리할 수 있습니다.
- SQL 출력 타입(
native,polars,pandas,auto등)의 의미를 이해하고pyproject.toml에서 기본값을 설정할 수 있습니다. - 대용량 데이터를 다룰 때 DuckDB
native타입이 유리한 이유를 설명할 수 있습니다. - SQL 결과와 데이터프레임을 matplotlib, plotly, altair와 연결해 반응형 시각화를 만들 수 있습니다.
@mo.cache,@mo.lru_cache,@mo.persistent_cache의 용도와 차이를 설명하고, 비싼 연산에 적절한 데코레이터를 선택할 수 있습니다.