강의명 : 5분빨리 퇴근하자! 파이썬 데이터 분석, 시각화, 웹 대시보드 제작하기
플랫폼 : 인프런
3) Scatterplot (Plotly)
- Plotly express Scatterplot 그리기
- Plotly express의 scatter로 figure 변수만 명시
- x: X축으로 지정할 변수
- y: Y축으로 지정할 변수
- data_frame: 데이터셋
- width, height:figure의 크기 조절
import plotly.express as px import pandas as pd df = pd.read_csv('../datasets/global_internet_users/global_internet_users.csv') #Plotly Figure 그리기 fig = px.scatter( data_frame=df, x='Year', y='No. of Internet Users', width=500, height=400, hover_data=['Entity'] ) fig.show()
- color 인자의 활용
- 특정 변수의 값 별로 scatter들의 색깔을 나눠서 그래프 그리기
- Seaborn의 hue 인자와 동일한 기능
- color_descrete, map_color, color_descrete_sequence 인자를 통해 색깔 조절 가능
entities = ['China','India','Finland'] df = df.loc[df['Entity'].isin(entities)] fig = px.scatter( data_frame=df, x='Year', y='No. of Internet Users', width=500, height=500, color='Entity' ) fig.show()
entities = ['China','India','Finland'] df = df.loc[df['Entity'].isin(entities)] fig = px.scatter( data_frame=df, x='Year', y='No. of Internet Users', width=500, height=500, color='Entity', color_discrete_sequence = ['blue','black','red'] ) fig.show()
#딕셔너리로 컬러 지정 map color_discrete_map = { 'China':'blue', 'Finland':'black', 'India':'red' }
#seaborn에서 palette 인자와 동일한 역할 color_discrete_sequence=px.colors.qualtative.Light24
- symbol 인자의 활용
- color 인자와 유사한 목적으로, 색깔 대신 scatter의 형태를 변경하여 데이터 그룹별 구분
- Seaborn의 style 인자와 동일한 기능
- symbol_sequence 인자를 이용하여 scatter의 행태 커스터마이징 가능
fig = px.scatter( data_frame=df, x='Year', y='No. of Internet Users', width=500, height=500, symbol='Entity' ) fig.show()
fig = px.scatter( data_frame=df, x='Year', y='No. of Internet Users', width=500, height=500, symbol='Entity', symbol_sequence = ['star','arrow','cross'] ) fig.show()
- size 인자의 활용
- Plotly scatter의 size 인자는 그 값의 크기별로 데이터 포인트의 크기를 조절할 수 있음
fig = px.scatter( data_frame=df, x='Year', y='No. of Internet Users', width=500, height=500, size='No. of Internet Users' ) fig.show()
- Plotly Scatter 활용
- 앞서 다룬 color, symbol, size 인자는 혼합해서 사용 가능
df = sns.load_dataset('tips') fig = px.scatter( data_frame = df, x='total_bill', y='tip', color='smoker', size='size', symbol='time', width=600, height=400 ) fig.show()
4) Regression Plot & Line Plot
- Regression Plot
- x와 y 변수에 대한 scatter와 regression 그래프를 동시에 표현
- ci : confidence interval
- Scatterplot과는 다르게 hue 인자 사용 불가
- scatter 인자에 False를 전달하여 regression 그래프만 표현 가능
- order 인자를 통해 regression 다항식 차수 조절 가능
df = sns.load_dataset('tips')
fig, ax = plt.subplots()
sns.regplot(x='total_bill', y='tip', data=df, ax=ax)
df = sns.load_dataset('tips')
fig, ax = plt.subplots()
sns.regplot(x='total_bill', y='tip', data=df, ax=ax, ci=None)
#선, 점 서식 지정
fig, ax = plt.subplots()
sns.regplot(
x=x, y=y, ax=ax, order=3,
scatter_kws={'s':80}, line_kws={'color':'red', 'linestyle':'--'}
)
- Plotly
- Plotly express의 scatter 함수에서 trendline 인자로 활용 가능
- color 인자 사용 시 각 color 별로 regression 표현 (Seaborn regplot에선 불가)
- color 인자를 사용하더라도 trendline_scope 인자를 통해 전체 데이터에 대한 regression 가능
df = sns.load_dataset('tips')
fig = px.scatter(
data_frame=df, x='total_bill', y='tip',
width=400, height=400, trendline='ols'
)
fig.show()
#color 변수 지정
fig = px.scatter(
data_frame=df, x='total_bill', y='tip',
width=400, height=400,
color='smoker', trendline='ols'
)
fig.show()
#하나의 트렌드 라인 그리기
fig = px.scatter(
data_frame=df, x='total_bill', y='tip',
width=400, height=400, trendline='ols', color='smoker',
trendline_scope = 'overall'
)
fig.show()
- Line plot
- scatter 대신 line으로 표현
- 기본적인 그래프 그리는 법 scatterplot과 동일
#hue로 색 구분
fig, ax = plt.subplots()
sns.lineplot(
x='Year', y='No. of Internet Users',
data=df, ax=ax, hue='Entity'
)
fig, ax = plt.subplots()
sns.lineplot(
x='Year', y='No. of Internet Users',
data=df, ax=ax, style='Entity'
)
- scatterplot과 lineplot 겹쳐 보이기
fig, ax = plt.subplots()
sns.lineplot(
x='Year', y='No. of Internet Users',
data=df, ax=ax, hue='Entity'
)
sns.scatterplot(
x='Year', y='No. of Internet Users',
data=df, ax=ax, hue='Entity', legend=False
)
Plotly - Lineplot
- Line plot
- scatter 대신 line으로 표현
- 기본적인 그래프 그리는 법 Plotly scatter와 동일
- color 인자 동일하게 사용 가능, symbol 인자 대신 line_dash 인자 사용
fig = px.line( data_frame=df, x='Year', y='No. of Internet Users', width=400, height=400, color='Entity' ) fig.show()
fig = px.line( data_frame=df, x='Year', y='No. of Internet Users', width=400, height=400, line_dash='Entity' ) fig.show()
#컬러와 심볼 동시에 적용
fig = px.line(
data_frame=df, x='Year', y='No. of Internet Users',
width=400, height=400, color='Entity', symbol='Entity'
)
fig.show()
5) Boxplot, Stripplot, Swarmplot
- Boxplot
- 특정 변수에 대해 요약 통계량을 확인할 수 있도록 그린 그래프
- 1, 2 (중간값), 3 사분위수와 범위 (1QR) 한 눈에 파악 가능
- 이상치를 한 눈에 파악 가능
- Seaborn boxplot은 scatterplot과 유사한 방식으로 그리기 가능
df = sns.load_dataset('tips') fig, ax = plt.subplots(figsize=(3,4)) sns.boxplot(y='total_bill', data=df, ax=ax)
- Stripplot, Swarmplot
- 특정 변수에 대해 요약 통계량을 확인할 수 있도록 그린 그래프
- boxplot을 이루는 각 data point를 stripplot과 겹쳐 그림으로써 확인 가능
- 각 datapoint의 겹침을 최소화하여 그리기 위해서 swarmplot 사용
fig, ax = plt.subplots()
sns.**stripplot**(
x='weekday', y='kwhTotal', data=df, ax=ax, color='grey', alpha=0.4
)
sns.boxplot(x='weekday', y='kwhTotal', data=df, ax=ax)
fig, ax = plt.subplots()
sns.swarmplot(
x='weekday', y='kwhTotal', data=df, ax=ax, color='grey', alpha=0.4
)
sns.boxplot(x='weekday', y='kwhTotal', data=df, ax=ax)
- Boxplot
- Seaborn boxplot의 x축 변수 (주로 범주형) 순서를 지정하기 위해 order 인자 사용
weekday_order = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
fig, ax = plt.subplots()
sns.boxplot(x='weekday', y='kwhTotal', data=df, ax=ax, order=weekday_order)
- Plotly
- Plotly express의 box 함수를 통해 boxplot 표현 가능
- 기본 그래프 그리기는 scatter와 유사
fig = px.**box**( data_frame=df, x='weekday', y='kwhTotal', width=500, height=400 ) fig.show()
- box 함수의 points 인자를 통해 Seaborn의 boxplot + stripplot 표현 가능
fig = px.box( data_frame=df, x='weekday', y='kwhTotal', width=500, height=400, points='all' ) fig.show()
- category_orders 인자를 통해 x축 변수 순서 조절 가능
weekday_order = { 'weekday': ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'] } fig = px.box( data_frame=df, x='weekday', y='kwhTotal', width=500, height=400, **category_orders**=weekday_order ) fig.show()
- color 인자를 통해 각 x값에서 특정 변수 그룹별로 box를 나눠 표현 가능5) Boxplot, Stripplot, Swarmplot
- Boxplot
- 특정 변수에 대해 요약 통계량을 확인할 수 있도록 그린 그래프
- 1, 2 (중간값), 3 사분위수와 범위 (1QR) 한 눈에 파악 가능
- 이상치를 한 눈에 파악 가능
- Seaborn boxplot은 scatterplot과 유사한 방식으로 그리기 가능
df = sns.load_dataset('tips') fig, ax = plt.subplots(figsize=(3,4)) sns.boxplot(y='total_bill', data=df, ax=ax)
- Stripplot, Swarmplot
- 특정 변수에 대해 요약 통계량을 확인할 수 있도록 그린 그래프
- boxplot을 이루는 각 data point를 stripplot과 겹쳐 그림으로써 확인 가능
- 각 datapoint의 겹침을 최소화하여 그리기 위해서 swarmplot 사용
fig, ax = plt.subplots() sns.**stripplot**( x='weekday', y='kwhTotal', data=df, ax=ax, color='grey', alpha=0.4 ) sns.boxplot(x='weekday', y='kwhTotal', data=df, ax=ax)
fig, ax = plt.subplots() sns.swarmplot( x='weekday', y='kwhTotal', data=df, ax=ax, color='grey', alpha=0.4 ) sns.boxplot(x='weekday', y='kwhTotal', data=df, ax=ax)
- Boxplot
- Seaborn boxplot의 x축 변수 (주로 범주형) 순서를 지정하기 위해 order 인자 사용
weekday_order = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'] fig, ax = plt.subplots() sns.boxplot(x='weekday', y='kwhTotal', data=df, ax=ax, order=weekday_order)
- Plotly
- Plotly express의 box 함수를 통해 boxplot 표현 가능
- 기본 그래프 그리기는 scatter와 유사
fig = px.**box**( data_frame=df, x='weekday', y='kwhTotal', width=500, height=400 ) fig.show()
- box 함수의 points 인자를 통해 Seaborn의 boxplot + stripplot 표현 가능
fig = px.box( data_frame=df, x='weekday', y='kwhTotal', width=500, height=400, points='all' ) fig.show()
- category_orders 인자를 통해 x축 변수 순서 조절 가능
weekday_order = { 'weekday': ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'] } fig = px.box( data_frame=df, x='weekday', y='kwhTotal', width=500, height=400, **category_orders**=weekday_order ) fig.show()
- color 인자를 통해 각 x값에서 특정 변수 그룹별로 box를 나눠 표현 가능
- Boxplot