1. 새롭게 알게된 내용
팀원 분 중 한 분이 TIL을 쓸 때, 단순히 배웠던 부분을 정리하기 보다는 이것을 실제 데이터셋에 스스로 적용해보며 공부하고 TIL을 쓰는 것이 효과적이라고 하셨다.
그래서 오늘 강의를 다 듣고 데이터셋에 다양한 시각화를 그려보기 위해 시도를 하였고, 이것을 바탕으로 TIL을 작성하고자 한다.
1.1 막대그래프, 히스토그램, 히트맵 (Titanic 데이터 셋)
GitHub - aramssong/Udemy_STARTERS
Contribute to aramssong/Udemy_STARTERS development by creating an account on GitHub.
github.com
📌 공통 스타일 지정하기
plt.rcParams를 활용하여 폰트, 제목, 그리드 등 다양한 기능들의 스타일을 한 번에 지정해둔다.
# 한글 폰트 설정
plt.rcParams['font.family'] = 'Malgun Gothic'
# 마이너스 기호 깨지는 문제 해결
plt.rcParams['axes.unicode_minus'] = False
# figure 크기
# plt.rcParams['figure.figsize'] = (10, 7)
# 제목
plt.rcParams['axes.titlesize'] = 15
plt.rcParams['axes.titleweight'] = 'bold'
# 그리드 표시
plt.rcParams['axes.grid'] = True
plt.rcParams['grid.alpha'] = 0.3
plt.rcParams['grid.linestyle'] = '--'
# 폰트 크기
plt.rcParams['font.size'] = 12
✅ 막대 그래프 (plt.bar)
막대 그래프의 색상, 테두리 등을 설정할 수 있다.
plt.bar(alive.index, alive['alive']
, width = 0.5 # 막대 폭
, color = ['r', 'b'] # 막대 색상
, alpha = 0.5 # 막대 색상 투명도
, edgecolor = 'gray' # 막대 테두리 색상
, linewidth = 2 # 막대 테두리 굵기
, hatch = '/') # 막대 내 패턴 모양
plt.title('생존여부 별 인원')
# labelpad : 레이블과 그래프와의 간격
plt.xlabel('생존 여부', labelpad = 10, fontsize = 12)
plt.ylabel('사람 수(명)', labelpad = 10, fontsize = 12)
plt.show()
✅ 가로 막대 그래프 (plt.barh)
가로 막대 그래프는 세로 막대 그래프와 매개변수를 동일하게 설정하면 된다.
plt.barh(embarked.index, embarked['embarked']
, color = ['r', 'g', 'orange']
, alpha = 0.5)
plt.title('탑승지 별 인원')
plt.xlabel('탑승지')
plt.ylabel('사람수(명)')
plt.show()
✅ 히스트그램 (plt.hist)
막대 그래프와 비슷하며, bins 매개변수를 통해 구간의 갯수를 다양하게 설정할 수 있다.
plt.figure(figsize = (10, 5))
plt.hist(titanic['age']
, bins = 20 # 구간의 갯수
, rwidth = 0.9 # 막대의 폭
, color = 'y' # 막대 색상
, alpha = 0.5 # 막대 색상 투명도
, ec = 'k' # 막대 테두리 색상
, lw = 2 # 테두리 두께
, ls = ':' # 테두리 스타일
, hatch = '/') # 패턴 모양
plt.title('나이 별 인원')
plt.xlabel('나이')
plt.ylabel('사람수(명)')
plt.show()
✅ 히트맵 (plt.pcolor / sns.heatmap)
히트맵은 matplotlib과 seaborn으로 시각화하였다.
# matplotlib
plt.pcolor(age_class) # 히트맵
plt.colorbar() # 컬러바 생성
plt.xticks(np.arange(0.5, len(age_class.columns), 1), labels = age_class.columns)
plt.yticks(np.arange(0.5, len(age_class.index), 1), labels = age_class.index)
plt.title('연령대 - 객실등급 별 인원')
plt.xlabel('연령대')
plt.ylabel('객실등급')
plt.show()
# seaborn
sns.heatmap(age_class
, cmap = 'Blues' # 색상
, annot = True # 히트맵 내 수치 표현
, fmt = 'd') # 정수로 표시
1.2 박스플롯, 바이올린플롯, 산점도 (iris데이터 셋)
GitHub - aramssong/Udemy_STARTERS
Contribute to aramssong/Udemy_STARTERS development by creating an account on GitHub.
github.com
✅ 박스플롯 (plt.boxplot)
데이터의 통계값과 이상치를 표현할 수 있으며, 시각적으로 확인하기에 좋다.
plt.boxplot([iris['sepal_length'], iris['sepal_width'], iris['petal_length'], iris['petal_width']]
, labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'] # 라벨
, showmeans = True # 평균 표시
, meanline = True) # 표시된 평균을 선으로 나타냄
plt.title('붓꽃 꽃받침, 꽃잎의 길이와 너비 분포')
plt.show()
✅ 바이올린플롯(plt.violinplot)
데이터의 범위와 분포를 표현할 수 있다.
violin = plt.violinplot([iris['sepal_length'], iris['sepal_width'], iris['petal_length'], iris['petal_width']]
, showmeans = True # 평균 표시
, showmedians = True # 표시된 평균을 선으로 나타냄
, quantiles = [[0.25, 0.75], [0.25, 0.75], [0.25, 0.75], [0.25, 0.75]]) # 사분위수 범위 설정
# 각 그래프 별 배경 색상 설정
violin['bodies'][0].set_facecolor('r')
violin['bodies'][1].set_facecolor('g')
violin['bodies'][2].set_facecolor('b')
violin['bodies'][3].set_facecolor('c')
# 선 색상 설정
violin['cmins'].set_edgecolor('k') # 최솟값
violin['cmaxes'].set_edgecolor('k') # 최댓값
violin['cmeans'].set_edgecolor('r') # 평균값
violin['cmedians'].set_edgecolor('b') # 중앙값
violin['cquantiles'].set_edgecolor('gray') # 사분위수
violin['cbars'].set_edgecolor('gray') # 가운데선
plt.xticks(range(1, 5, 1) # x축의 범위를 지정
, labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']) # 라벨
plt.title('붓꽃 꽃받침, 꽃잎의 길이와 너비 분포')
plt.show()
✅ 산점도 (plt.scatter)
x축과 y축의 데이터의 관계를 파악할 수 있다. (상관관계)
그리고 점의 색과 크기로 정보를 표현할 수 있다.
plt.scatter(iris['petal_length'], iris['petal_width'])
plt.show()
1.3 산점도 (tips 데이터셋)
GitHub - aramssong/Udemy_STARTERS
Contribute to aramssong/Udemy_STARTERS development by creating an account on GitHub.
github.com
iris 데이터셋으로 산점도를 그려보았는데, 산점도의 점의 크기와 색으로 표현하는 데에는 데이터셋이 한계가 있다는 판단 하에 이를 적극 활용할 수 있는 tips 데이터셋으로 다시 산점도를 그려보았다.
plt.scatter(tips['total_bill'], tips['tip']
, s = tips['size'] * 50
, alpha = 0.5
, c = tips['color'])
plt.title('지불금액과 팁의 관계')
plt.xlabel('지불 금액(달러)')
plt.ylabel('팁(달러)')
plt.show()
2. 파트너간 상보적 학습
오늘도 '멘토링' 대신에 '파트너간 상보적 학습' 시간을 가졌다.
아직 어려운 부분이 아니라서 공부한 것에 대해 이야기를 하기 보다는, TIL 어떻게 쓰면 좋을 지 등에 대해 이야기를 나누었다.
그리고 시간이 남아서 데이터 분석 중에 관심있는 직무 등 다양한 이야기들도 나누어서 유익한 시간이었다.
3. 회고
파이썬의 패키지 중 하나인 matplotlib을 활용해서 다양한 그래프를 그려보는 것을 배웠다.
파이썬 시각화를 제대로 배운 적이 없으며, 캐글이나 데이콘의 코드를 카피해서 시각화를 한 것이 전부이기에 오늘의 강의가 매우 유익했다.
이 코드는 그래프의 어떤 부분을 그리는 것인지에 대해 이제서야 명확하게 알게 되었다.
모든 기능들과 모든 매개변수들을 기억하지는 못하지만, 어떤 것들이 있는지 인지하고 있는 것만으로도 시각화하는 데에 많은 도움이 되지 않을까 싶다.
시각화 코드를 단순히 따라하는 것에 그치지 않고 이를 내가 직접 적용해보려는 시도를 한 것이 잘했다고 생각이 된다. 생각보다 많은 시간이 걸렸지만, 그래도 머릿 속에 더욱 잘 남는 것 같다. 앞으로도 적용하려고 시도해보자.
'웅진X유데미 STARTERS > TIL (Today I Learned)' 카테고리의 다른 글
[스타터스 TIL] 7일차.파이썬 데이터 시각화 (4) - 시각화 실습 (0) | 2023.02.14 |
---|---|
[스타터스 TIL] 6일차.파이썬 데이터 시각화 (3) - seaborn, 실습 (0) | 2023.02.13 |
[스타터스 TIL] 4일차.파이썬 데이터 시각화 (1) - 기본 그래프 (0) | 2023.02.10 |
[스타터스 TIL] 4일차.파이썬 데이터 분석 (4) - 분석 실습, value_counts, groupby (0) | 2023.02.09 |
[스타터스 TIL] 3일차.파이썬 데이터 분석 (3) - 판다스, 데이터프레임 (0) | 2023.02.09 |