[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.07.24
📕 학습 목록
- 분포형 데이터
- 범주형 데이터
- 기타 시각화
📗 기억할 내용
1) 분포형 데이터 (Dis Plot)
- Dis Plot ⊃ Hist Plot, KDE Plot, Rug Plot, ECDF Plot
① Hist Plot(Histogram)
- 데이터를 구간별로 나눔; 데이터 값의 범위를 일정한 간격(bin)으로 나눔 → 각 구간에 속하는 데이터의 개수를 막대로 표시
- 데이터의 대칭성을 확인
- sns.histplot(data, x, hue, multiple, bins)
- multiple : 다른 범주를 어떻게 시각화할지 결정
* multiple 속성들
- layer : 겹치기(기본값)
- dodge : 겹치지 않게 나란히
- stack : 쌓기
- fill : 비율
② KDE Plot (Kernel Density Estimation)
- 데이터의 분포를 곡선으로 표현
- 히스토그램 보다 데이터의 모양•구조를 정확하게 파악(히스토그램 : 이산적인 bin을 사용)
- 비모수적방법으로 데이터 분포를 모델링; 데이터에 대한 가정이 필요x
- sns.kdeplot(data, x)
③ Rug Plot
- 데이터의 각 포인트를 축 위에 작은 선분(or 틱)으로 나타냄
- 다른 Plot 과 함께 사용 가능
- sns.rugplot()
④ displot() 을 활용하여 histplot/kdeplot + rugplot 함께 시각화
- sns.displot(data, x, y, hue, kind(메인 plot), rug(True))
2) 범주형 데이터 (Cat Plot)
- Cat Plot ⊃ Bar Plot, Count Plot, Box Plot, Boxen Plot, Violin Plot, Swarm Plot, Strip Plot, Point Plot
① Bar Plot
- 막대's 높이(길이) : 해당 범주의 값•빈도
- x 축 : 카테고리 변수
- y 축 : 수치 변수
- sns.barplot(data, x, y)
② Count Plot
- 범주형 데이터의 빈도 시각화
- 이산적인 데이터 항목 or 범주를 가진 열(column)
- x or y 매개변수; 범주를 표시할 축을 선택
- sns.countplot(data, x(or y), hue)
③ Box Plot
- 데이터's 중심 경향, 분산, 분포 형태 확인 → 데이터 그룹 간 비교
- 통계적 정보 제공; 중앙값, 사분위수(25%, 75%), 이상치 등
- 상자 수염(데이터의 최대•최소 값)을 벗어난 값 : 이상치
- sns.boxplot(data, x, y, hue)
④ Boxen Plot
- 상자 크기로 값의 분포 정도를 추측
- 비대칭 분포 확인
- box plot 보다 대형 데이터 출력에 유리
- 수염 無, 박스를 벗어나는 값 : 이상치
- sns.boxenplot(data, x, y, hue)
⑤ Violin Plot
- 데이터의 분포를 곡선으로 출력(≓ KDE Plot)
- 너비; 데이터의 밀도 확인
- 비대칭 분포 확인
- sns.violinplot(data, x, y, hue, split, inner)
- split : true일 경우, hue 에 따라 분포를 좌우로 분할
- inner : 그래프 안에 그려 넣을 요소(box, quartile, point, stick)
3) 기타 시각화 도구
- Heatmap, Pair Plots, Pie Chart
① Heatmap
- 수치형 자료형 간의 상관관계를 시각적으로 표현
- 색상 맵; 값의 크기(상대적)에 따라 다양한 색으로 셀을 채움
- sns.heatmap(corr_matrix)
- .corr() 메서드를 활용하여 상관 행렬 계산
② Pair Plots
- 데이터프레임 내의 수치형 변수에 대한 산점도 매트릭스를 생성
- 변수 간의 관계 파악에 용이
- 대각선(변수 자기 자신에 대한 위치); 히스토그램 or KDE 플롯
- sns.pairplot(dataframe, hue, vars)
- vars : 시각화에 사용할 데이터를 리스트에 저장하여 지정
③ Pie Chart
- 전체 데이터에 대한 각 부분 데이터를 비율로 시각화(라벨링)
- seaborn 에는 Pie Chart 생성 기능x; matplotlib 사용하여 구현
- plt.pie(x, labels, autopctm)
- x : 원형 차트 내부 각 조각의 크기
- labels : 원형 차트 내부 각 조각의 레이블
- autopctm : 각 조각의 비율을 계산하여 표시(일반적으로 %1.1f%% 사용)
📘 트러블 슈팅
[문제]
- 문제 내용
heatmap plot 결과, 타켓한 열("carat", "depth", "price") 외에 다른 데이터도 출력됨
# Q) 다이아몬드 데이터 중 carat, depth, price 열에 대해서 Heatmap을 시각화하시오 import seaborn as sns import matplotlib.pyplot as plt diamonds = sns.load_dataset("diamonds") # diamonds.info() numeric_diamonds = diamonds.select_dtypes(include=["float64", "int64"]) # 상관 행렬 계산; 얼마나 상관관계가 있는지 ~ # correlation(상관관계) corr_matrix = numeric_diamonds.corr() sns.heatmap( corr_matrix, annot=True, ) plt.show()
- 문제 원인
타겟한 열만 선택하는 과정이 생략됨
[해결]
- 해결 방법
pandas 라이브러리를 이용하여 데이터프레임에서 타겟열을 복수 선택 → Heatmap을 통해 상관관계를 시각화
- 해결 결과
import seaborn as sns import matplotlib.pyplot as plt diamonds = sns.load_dataset("diamonds") # 단순 복수 열 선택 # diamonds[["carat", "depth", "price"]] # loc를 활용한 복수 열 선택 selected_diamonds = diamonds.loc[:, ["carat", "depth", "price"]] # 상관행렬 계산 .corr() corr_diamonds = selected_diamonds.corr() # heatmap 기능 : 상관행렬 시각화 sns.heatmap( data=corr_diamonds, annot=True, ) plt.show()
📙 내일 일정
- Plotly, Folium
'TIL _Today I Learned > 2024.07' 카테고리의 다른 글
[DAY 12][특강] 학습 데이터의 유형 및 서비스 적용 사례 (1) | 2024.07.26 |
---|---|
[DAY 11] Plotly, Folium (0) | 2024.07.25 |
[DAY 9] Data Preprocessing, Data Visualization (0) | 2024.07.23 |
[DAY 8] Data Manipulation, Data Preprocessing (0) | 2024.07.22 |
[DAY 7] Data Manipulation (0) | 2024.07.19 |