부트캠프 프로젝트
- 구독 서비스 플랫폼 데이터 분석 프로젝트
- 문제 코드
# 그래프 스타일 지정
sns.set_theme(style='darkgrid',rc={'figure.figsize':(18,6)},font='Nanum Gothic')
# 꺾은선 그래프 그리기
sns.lineplot(data=df, x='event', y='y', marker='o', color='#A94A4A')
# 막대그래프 그리기
sns.barplot(datadf, x='event', y='y', color='#F4D793')
plt.grid(axis='x')
# 타이틀 축 라벨 작성 및 설정
plt.title('그래프 타이틀', fontsize=18)
plt.xlabel('x축', fontsize=10)
plt.ylabel('y축', fontsize=10)
plt.xticks(fontsize=6, rotation=40)
plt.grid(axis='x')
plt.tight\_layout()
plt.show()
- 개선 코드
# Figure와 Axis 객체 생성
fig, ax = plt.subplots(figsize=(18,6))
# 막대 그래프 그리기
bars = sns.barplot(data=df, x='event', y='y', color='#F4D793', ax=ax)
# 선 그래프를 위한 평균값 계산
line = ax.plot(df['y'], marker='o', color='#A94A4A')
plt.grid(axis='x')
# 타이틀 축 라벨 작성 및 설정
plt.title('그래프 타이틀', fontsize=18)
plt.xlabel('x축', fontsize=10)
plt.ylabel('y축', fontsize=10)
plt.xticks(fontsize=6, rotation=40)
plt.grid(axis='x')
plt.tight_layout()
plt.show()
- 위 코드의 핵심 변수명, 데이터 등은 마스킹 처리하여 기재하였습니다.
[ 문제 상황 ]
- 동일한 데이터로 막대그래프와 꺾은선 그래프를 하나의 figure에 그렸는데, 막대그래프와 꺾은선 그래프의 y축 데이터가 특정 시점부터 일치하지 않았다.
[ 해결 ]
matplotlib 라이브러리의 객체 지향 인터페이스로 그래프를 그리는 코드로 해결했다.
처음에는
sns.lineplot()
과sns.barplot()
을 독립적으로 호출하여 각각 그래프를 그렸다. 그렇기 때문에sns.lineplot()
과sns.barplot()
은 각각의 축 범위를 독립적으로 계산하여 꺾은선 그래프와 막대그래프가 동일한 X,Y축 스케일을 사용하지 않을 가능성이 커졌다.이를 해결하기 위해 두 번째 코드로 matplotlib의 AxesSubplot 객체를 생성한 뒤, 꺾은선 그래프와 막대그래프를 동일한 ax 객체에 그렸다. ax 객체를 공유하므로 꺾은선 그래프와 막대그래프가 동일한 X,Y축 범위를 사용하게 되어 두 그래프 간 데이터 불일치가 발생하지 않았다.
[ 회고 ]
- 이 경험을 통해 데이터 시각화에서 일관성 있는 스케일과 축 설정이 얼마나 중요한지를 배웠다. 그래프를 독립적으로 생성하면 동일한 축 범위를 사용하지 않게되어 두 그래프 간 축의 스케일 차이가 날 경우 시각화에 문제가 생길 수 있다는 점을 알게 되었다. 또한 그래프를 생성할 때 데이터의 맥락을 유지하고, 명확하고 일관된 스케일을 설정하여 정보 전달의 정확성을 보장해야 한다는 점을 깨달았다.
'DA Study > TIL' 카테고리의 다른 글
[TIL] 조건절에서 서브쿼리 활용하기 # MySQL # SQL (4) | 2025.02.01 |
---|---|
[TIL] UNION 테이블 병합 시 각 테이블 별 정렬하기 # MySQL # SQL (0) | 2025.01.31 |
[TIL] MySQL 정규식 REGEXP AND, OR 조건 # MySQL # SQL (1) | 2025.01.22 |
[TIL] MySQL 정규식 REGEXP (Regular Expression) # MySQL # SQL (0) | 2025.01.19 |
[TIL] 로지스틱 회귀분석에서 오즈비 해석하기 # python # 부트캠프 (0) | 2025.01.17 |