Skip to content
PYGWALKER
Streamlit related APIs

Streamlit API

pygwalker.api.streamlit

  • init_streamlit_comm: pygwalker 통신을 초기화합니다(프론트엔드 -- 백엔드). use_kernel_calc=True를 사용하려는 경우 필요합니다.
  • get_streamlit_html: pygwalker 내장 가능한 streamlit 코드를 가져옵니다.

use_kernel_calc가 활성화된 예시

import pandas as pd
import streamlit.components.v1 as components
import streamlit as st
from pygwalker.api.streamlit import init_streamlit_comm, get_streamlit_html
 
st.set_page_config(
    page_title="Streamlit에서 Pygwalker 사용하기",
    layout="wide"
)
 
st.title("Streamlit에서 Pygwalker 사용하기(통신 지원)")
 
# Pygwalker 통신 초기화
init_streamlit_comm()
 
# `use_kernel_calc=True`를 사용할 때, 메모리가 폭발하지 않도록 Pygwalker html을 캐시해야 합니다.
@st.cache_resource
def get_pyg_html(df: pd.DataFrame) -> str:
    # 응용 프로그램을 게시해야 할 때 `debug=False`로 설정해야 합니다. 이를 통해 다른 사용자가 구성 파일을 작성하지 못하게 방지할 수 있습니다.
    # 차트 구성 저장 기능을 사용하려면 `debug=True`로 설정하십시오.
    html = get_streamlit_html(df, spec="./gw0.json", use_kernel_calc=True, debug=False)
    return html
 
@st.cache_data
def get_df() -> pd.DataFrame:
    return pd.read_csv("/bike_sharing_dc.csv")
 
df = get_df()
 
components.html(get_pyg_html(df), width=1300, height=1000, scrolling=True)

use_kernel_calc가 비활성화된 예시

import pygwalker as pyg
import pandas as pd
import streamlit.components.v1 as components
import streamlit as st
 
# Streamlit 페이지 너비 조정
st.set_page_config(
    page_title="Streamlit에서 Pygwalker 사용하기",
    layout="wide"
)
 
# 제목 추가
st.title("Streamlit에서 Pygwalker 사용하기")
 
# 데이터 가져오기
df = pd.read_csv("/bike_sharing_dc.csv")
# 복사한 Pygwalker 차트 코드를 여기에 붙여넣기
vis_spec = """[{"visId":"gw_rZy5","name":"차트 1","encodings":{"dimensions":[{"dragId":"gw_BUE2","fid":"ZGF0ZV8x","name":"date","semanticType":"nominal","analyticType":"dimension"},{"dragId":"gw_x1ug","fid":"bW9udGhfMg==","name":"month","semanticType":"ordinal","analyticType":"dimension"},{"dragId":"gw_zRAa","fid":"c2Vhc29uXzM=","name":"season","semanticType":"nominal","analyticType":"dimension"},{"dragId":"gw_ZeVh","fid":"eWVhcl81","name":"year","semanticType":"nominal","analyticType":"dimension"},{"dragId":"gw_JqXv","fid":"aG9saWRheV82","name":"holiday","semanticType":"nominal","analyticType":"dimension"},{"dragId":"gw_OD2F","fid":"d29yayB5ZXMgb3Igbm90XzE0","name":"work yes or not","semanticType":"nominal","analyticType":"dimension"},{"dragId":"gw_KgQu","fid":"YW0gb3IgcG1fMTU=","name":"am or pm","semanticType":"nominal","analyticType":"dimension"},{"dragId":"gw_PqvI","fid":"RGF5IG9mIHRoZSB3ZWVrXzE2","name":"Day of the week","semanticType":"ordinal","analyticType":"dimension"}],"measures":[{"dragId":"gw_7JNg","fid":"aW5kZXhfMA==","name":"index","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_IYM_","fid":"aG91cl80","name":"hour","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_ofd8","fid":"dGVtcGVyYXR1cmVfNw==","name":"temperature","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_sGlX","fid":"ZmVlbGluZ190ZW1wXzg=","name":"feeling_temp","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_674M","fid":"aHVtaWRpdHlfOQ==","name":"humidity","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_AxQD","fid":"d2luc3BlZWRfMTA=","name":"winspeed","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_iy94","fid":"Y2FzdWFsXzEx","name":"casual","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_9J2u","fid":"cmVnaXN0ZXJlZF8xMg==","name":"registered","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_WzEF","fid":"Y291bnRfMTM=","name":"count","analyticType":"measure","semanticType":"quantitative","aggName":"sum"},{"dragId":"gw_count_fid","fid":"gw_count_fid","name":"Row count","analyticType":"measure","semanticType":"quantitative","aggName":"sum","computed":true,"expression":{"op":"one","params":[],"as":"gw_count_fid"}}],"rows":[{"dragId":"gw_gJqj","fid":"cmVnaXN0ZXJlZF8xMg==","name":"registered","analyticType":"measure","semanticType":"quantitative","aggName":"sum"}],"columns":[{"dragId":"gw_uZ9C","fid":"RGF5IG9mIHRoZSB3ZWVrXzE2","name":"Day of the week","semanticType":"ordinal","analyticType":"dimension"}],"color":[{"dragId":"gw_04s5","fid":"c2Vhc29uXzM=","name":"season","semanticType":"nominal","analyticType":"dimension"}],"opacity":[],"size":[],"shape":[],"radius":[],"theta":[],"details":[],"filters":[],"text":[]},"config":{"defaultAggregated":true,"geoms":["auto"],"stack":"stack","showActions":false,"interactiveScale":false,"sorted":"none","zeroScale":true,"size":{"mode":"auto","width":320,"height":200},"format":{}}}]"""
 
# Pygwalker를 사용하여 HTML 생성
pyg_html = pyg.to_html(df, spec=vis_spec)
 
# HTML을 Streamlit 앱에 임베드
components.html(pyg_html, height=1000, scrolling=True)

관련 Q&A

pygwalker를 다른 사람들과 공유할 수 있는 웹 애플리케이션으로 어떻게 만들 수 있나요?

답변: pygwalker.to_html() API를 사용하여 HTML 코드를 생성하고, 해당 코드를 웹 서버에 호스팅할 수 있습니다. 권장하는 방법은 pygwalker 코드를 호스팅하기 위해 streamlit을 사용하는 것입니다.

import pygwalker as pyg
import pandas as pd
import streamlit.components.v1 as components
# 데이터 가져오기
df = pd.read_csv("/<your_data>.csv")
# Pygwalker를 사용하여 HTML 생성
pyg_html = pyg.to_html(df)
 
# HTML을 Streamlit 앱에 임베드
components.html(pyg_html, height=1000, scrolling=True)

대용량 데이터를 처리할 수 있는 Tableau/PowerBI의 온라인 오픈 소스 대안을 구축하는 방법은 무엇인가요?

답변: 대용량 데이터를 처리할 수 있는 Tableau/PowerBI의 온라인 오픈 소스 대안을 구축하기 위해 pygwalker + streamlit + snowflake를 사용할 수 있습니다.