카테고리 없음

1-4) 파이썬 데이터 분석 기초 스터디

intergem 2025. 2. 16. 22:23

강의명 : 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를 나눠 표현 가능