2024. 1. 30. 20:09ㆍ시각화
오늘 교육에서 개인적으로 streamlit을 사용하여 대시보드 배포하는 것을 연습하면서, plotly를 이용해서 그래프를 그려보았는데 그 그래프 그리는 것들에 대한 것을 정리해볼까 합니다. 단계로는 streamlit을 먼저 정리해야겠지만,, 그건 좀 더 익숙해질 필요가 있어 보입니다,,
이번에 사용한 데이터는 kaagle [https://www.kaggle.com/c/instacart-market-basket-analysis]에서 가져온 데이터이고, 데이터의 용량이 매우 크고 7개의 데이터 테이블이 있었기 때문에 제가 따로 joint를 하고 1만개의 데이터만 샘플링하여 진행했습니다.
먼저 사용된 데이터 컬럼만 설명을 하면 order_dow라는 컬럼은 Days of Week로 무슨 요일에 주문을 했는가? 라는 데이터를 담고 있습니다. 값은 0~6까지 구성되어 있는데 0부터 일요일,월요일... 순으로 배정되어 있는 컬럼입니다. 그래서 이 데이터에서 각 컬럼이 가지는 값들만 모아서 카운트를 하면 요일별 주문 수를 확인 할 수 있습니다. 그래서 한번 그려보겠습니다.
import pandas as pd
import plotly.graph_objects as go
df=pd.read_csv('/content/drive/MyDrive/data/df.csv)
fig=go.Figure()
fig.show()
다음과 같은 코드로 비어있는 그래프를 그릴 수 있습니다. 그럼 본격적으로 그래프를 그려넣어보겠습니다.
import pandas as pd
import plotly.graph_objects as go
df=pd.read_csv('/content/drive/MyDrive/data/df.csv')
target=df.order_dow.value_counts()
fig=go.Figure()
fig.add_trace(
go.Bar(x=target.index,y=target)
)
fig.show()
fig.add_trace를 통해서 그래프를 넣을 수 있으며, 어떤 그래프를 그릴지는 안에 go.Bar가 정합니다. 막대그래프를 그리기때문에 Bar인 것이고, 산점도면 Scatter 이렇게 들어가게 됩니다. 일단 그래프는 그렸는데 표기된 것이 하나도 없습니다. x축이 무엇인지 y축이 무엇인지 그런것들을 추가해보겠습니다.
import pandas as pd
import plotly.graph_objects as go
df=pd.read_csv('/content/drive/MyDrive/data/df.csv')
target=df.order_dow.value_counts()
fig=go.Figure()
fig.add_trace(
go.Bar(x=target.index,y=target)
)
fig.update_layout(go.Layout(title={'text':'Frequency of Orders by Days of Week',
'font':{'color':'blue','size':30}},
xaxis={'title':{'text':'Days of Week'},
'gridwidth':1,'showgrid':True},
yaxis={'title':{'text':'Frequency'},
'gridwidth':1,'showgrid':True},
))
fig.show()
fig.add_trace에서 수정한것은 없으며, fig.update_layout을 통해서 x축, y축, 제목, grid까지 추가했습니다.
위에서부터 title,xaxis,yaxis는 제목,x축,y축을 나타내는 것이며, 제목같은 경우 text는 어떤 텍스트를 제목에 넣을지 그리고 그 안에 font는 글자를 세팅해주는 코드입니다. color는 무슨 색을 사용할 것인가 size는 글자의 크기를 나타냅니다. x,y 축도 마찬가지로 title은 어떤 텍스트를 쓸지를 정하며 gridwidth는 grid의 두께, showgrid는 grid를 표시할것인가에 대한것입니다. 다음은 조금 밋밋하니 그래프를 꾸며보겠습니다.
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
df=pd.read_csv('/content/drive/MyDrive/data/df.csv')
target=df.order_dow.value_counts()
fig=go.Figure()
fig.add_trace(
go.Bar(x=target.index,y=target,
marker={'color':px.colors.qualitative.Dark24,
'line':{'color':'black','width':2},
'pattern':{'shape':'/'}})
)
fig.update_layout(go.Layout(title={'text':'Frequency of Orders by Days of Week',
'font':{'color':'blue','size':30}},
xaxis={'title':{'text':'Days of Week'},
'gridwidth':1,'showgrid':True},
yaxis={'title':{'text':'Frequency'},
'gridwidth':1,'showgrid':True},
))
fig.show()
이렇게 막대를 꾸며보았는데, go.Bar()안에 marker= 이후로 작성할 수 있습니다. color같은 경우 새롭게 import한 plotly.express에서 색깔 모음을 가지고 와서 막대에 하나씩 적용하고, line을 통해 막대의 외곽선을 그려주었습니다. 세부적으로 color와 width를 입력할 수 있었고, 마지막은 막대의 패턴을 집어넣는 것입니다. 사선으로 칠해져있는데 pattern에 관한 부분이 이 부분입니다.
개인적으로 plotly가 matplotlib 또는 seaborn보다 좋다고 생각해서 이번에 잘 못해도 시간 투자하고 박치기 한번 해보자 하고 plotly로 시각화를 도전해서 streamlit에 배포를 하려고 생각했었는데,, 역시 익숙하지 않으니 쉽지 않았습니다,, 이 그래프 하나 그리는데도 많은 검색과 시간을 보냈습니다,, 많은 연습이 필요한 거 같습니다.
'시각화' 카테고리의 다른 글
[시각화] plotly line (0) | 2024.02.03 |
---|---|
[시각화] plotly 기초 (0) | 2024.01.11 |
[시각화] matplotlib, seaborn BarChart (0) | 2024.01.10 |
[시각화] matplotlib, seaborn 라이브러리 비교 (0) | 2024.01.08 |