"데이터셋은 어디서 구해요? 매번 CSV 찾아서 불러오기 귀찮아서요."
지윤의 질문에 강주원 선배가 바로 답했다.
"Plotly에 내장 데이터셋이 여러 개 있어. px.data. 치고 탭 눌러봐."
자동완성 목록이 쭉 떴다. gapminder, iris, tips, stocks, wind, election... 생각보다 많았다.
"연습하거나 예제 만들 때 파일 없어도 바로 쓸 수 있어서 편해. 어떤 차트 타입에 뭐가 어울리는지도 같이 배울 수 있고."
주요 내장 데이터셋
plotly.express.data 모듈에는 여러 예제 데이터셋이 내장되어 있습니다. 모두 pandas DataFrame으로 반환됩니다.
px.data.iris()
붓꽃(아이리스) 데이터셋입니다. 150개 샘플, 3종(setosa, versicolor, virginica)의 꽃받침(sepal)과 꽃잎(petal) 크기를 담고 있습니다.
- 주요 컬럼:
sepal_length,sepal_width,petal_length,petal_width,species - 적합한 차트: 산점도, 히스토그램, 박스플롯
px.data.gapminder()
1952년부터 2007년까지 5년 단위로 기록된 세계 각국의 인구, GDP, 기대수명 데이터입니다. 142개국, 1704개 행으로 구성됩니다.
- 주요 컬럼:
country,continent,year,lifeExp,pop,gdpPercap - 적합한 차트: 산점도(버블), 라인 차트, 애니메이션
px.data.tips()
레스토랑 팁 데이터셋입니다. 244개 행으로 총 식사 금액, 팁 금액, 요일, 시간대 등을 담고 있습니다.
- 주요 컬럼:
total_bill,tip,sex,smoker,day,time,size - 적합한 차트: 산점도, 박스플롯, 바 차트
px.data.stocks()
IT 기업 주가 데이터셋입니다. GOOG, AAPL, AMZN, FB, NFLX, MSFT의 일별 주가를 담고 있습니다.
- 주요 컬럼:
date,GOOG,AAPL,AMZN,FB,NFLX,MSFT - 적합한 차트: 라인 차트, 영역 차트
데이터셋 확인하기
어떤 컬럼이 있는지 바로 확인하는 방법입니다.
# 파일: check_datasets.pyimport plotly.express as px# iris 데이터셋df_iris = px.data.iris()print(df_iris.head())print(df_iris.columns.tolist())# gapminder 데이터셋df_gap = px.data.gapminder()print(df_gap.head())print(df_gap.columns.tolist())
gapminder로 버블 차트 만들기
gapminder 데이터셋은 버블 차트 예제로 자주 등장합니다. GDP와 기대수명의 관계를 대륙별로 색구분하고, 인구를 버블 크기로 표현할 수 있습니다.
# 파일: gapminder_bubble.pyimport plotly.express as pxdf = px.data.gapminder()df_2007 = df[df["year"] == 2007]fig = px.scatter( df_2007, x="gdpPercap", y="lifeExp", size="pop", color="continent", hover_name="country", log_x=True, size_max=60, title="2007년 GDP vs 기대수명")fig.show()
log_x=True는 x축을 로그 스케일로 표시합니다. GDP처럼 값의 범위가 매우 넓을 때 사용합니다. size_max는 버블의 최대 크기를 픽셀 단위로 제한합니다.
마우스를 버블 위에 올리면 나라 이름(hover_name="country")과 함께 GDP, 기대수명, 인구 값이 표시됩니다.
"이걸 캡스톤 프로젝트에서 쓸 수 있겠다." 지윤이 혼잣말했다.
강주원 선배의 메시지가 바로 왔다.
"그게 핵심이야. 데이터 가져오면 일단 이 코드 틀에 넣어서 탐색해봐. 어떤 컬럼을 x, y, size, color에 쓸지 정하는 것 자체가 분석의 절반이거든."
자주 묻는 질문
Q: 내장 데이터셋 말고 CSV 파일을 불러오려면 어떻게 하나요?
pandas로 CSV를 읽어서 DataFrame을 만들면 됩니다. px.scatter(df, x="컬럼명", y="컬럼명")처럼 컬럼명만 바꿔주면 됩니다. 내장 데이터셋과 사용 방법이 동일합니다.
Q: gapminder 데이터에서 특정 연도만 사용하려면 어떻게 하나요?
pandas 필터링을 사용합니다. df[df["year"] == 2007]처럼 조건을 걸면 해당 연도 데이터만 추출됩니다.
Q: size_max를 너무 크게 하면 어떻게 되나요?
버블이 겹쳐서 아래 데이터가 보이지 않을 수 있습니다. 일반적으로 40~80 사이 값을 사용합니다. 너무 작으면 크기 차이를 구분하기 어렵습니다.