Today's study
- 데이터 시각화 (그래프 그리기)
데이터 시각화
- 데이터가 가지고 있는 정보를 시각적으로 표현
- 데이터 분석의 초기과정에서 유용한 탐색적 데이터분석(exploratory data analysis, EDA) 도구로 사용
- 필요한 이유
- 데이터의 기본적인 상태확인: 통계량, 결측치, 이상치 등 확인
- 분석을 위한 기준(가정)을 세우는데 도움이 됨
- 최종 결과를 효과적으로 표현, 전달
- Pandas를 사용하여 다중 산점도(scatter plots)를 생성하는 방법
- fig와 ax는 각각 figure와 axes 객체를 의미
- plt.subplots() 함수를 사용하여 5x5 인치 크기의 그래프를 생성
- ax.scatter()는 산점도를 그리는 함수
- datasaurus[datasaurus["dataset"] == "dino"]["x"]
: 데이터프레임 datasaurus에서 "dataset" 열의 값이 "dino"인 행들의 "x" 값을 선택 - alpha=0.3
: 점의 투명도를 설정. 여기서 0.3은 30%의 불투명도를 의미하며, 값이 낮을수록 더 투명해짐
- Pandas를 이용하여 여러개의 그래프 그리기
- figure 개수, 위치, 크기 설정하기
- fig, axes = plt.subplots(3, 4, figsize=(8, 6), sharex=True, sharey=True)
- fig와 axes는 각각 figure와 여러 개의 subplot을 의미
- plt.subplots(3, 4)는 3행 4열의 subplot 배열을 생성
- sharex=True, sharey=True는 모든 subplot이 동일한 x축과 y축 스케일을 공유하도록 설정 - 그릴 data를 전체 data에서 뽑아오기
- for dataset, ax in zip(datasaurus["dataset"].unique(), axes.flat):
- datasaurus["dataset"].unique()는 datasaurus 데이터프레임에서 고유한 데이터셋 이름을 반환
- axes.flat은 subplot 배열을 1차원으로 펼칩
- zip 함수는 각 데이터셋과 subplot을 짝지음 - x, y축을 설정함
- ax.scatter(datasaurus[datasaurus["dataset"] == dataset]["x"],
datasaurus[datasaurus["dataset"] == dataset]["y"],
alpha=0.5):
- 각 subplot에 대해 dataset 이름과 일치하는 데이터의 x와 y 값을 산점도로 그림 - 각 그래프의 이름을 정해줌
- ax.set_title(dataset): 각 subplot의 제목을 데이터셋 이름으로 설정 - ax.spines[["top", "right"]].set_visible(False): 각 subplot의 위쪽과 오른쪽 테두리를 보이지 않게 설정
- 제목 넣기
- fig.suptitle("Datasaurus 각 테이블별 산점도"): 전체 figure의 제목을 "Datasaurus 각 테이블별 산점도"로 설정 - 축 detail하게 label하기
- fig.supxlabel(R"$x$"), fig.supylabel(R"$y$"): 전체 figure의 x축과 y축 라벨을 각각 설정. 여기서 $x$, $y$는 수학 표현식을 나타내기 위해 LaTeX 포맷을 사용
선 그래프(plot)
- 선(line)과 마커(markers)에 차이를 줄 수 있음
- 선그래프 그려보기
- 그리고자하는 그래프 식을 입력
- fig, ax = plt.subplots() 를 입력하여 그래프를 그릴 공간 그려주기
- 각각의 선 그래프에 대한 설명 넣어주기
- ax.plot( ) *3개 = 3개 그래프
- ax.plot(t, y_blue, marker="o", ls="-", c="tab:blue", label ="파란 공")
--> t와 y_blue에 대해 선 그래프를 그림
--> marker="o": 원 형태의 마커를 사용
--> ls="-": 실선 스타일을 사용
--> c="tab:blue": 파란색으로 그래프를 그림
--> label="파란 공": 그래프에 대한 범례를 설정 - x, y축 및 제목 설정하기
- ax.set_xlabel("시간 (second)"): x축의 라벨을 "시간(second)"로 설정
- ax.set_ylabel("위치 (cm)"): y축 라벨 설정
- ax.set_title("공의 위치"): 제목 설정
- 하트 방정식 만들어보기
- ax.plot 후 헌번에 x, y를 설명해 줄 수도 있음
- ax.set( ) 도 마찬가지
Scatter 그래프 그리기 (color/ marker size)
- Matplotlib 라이브러리를 이용하여 마커 크기로 차이를 둔 scatter 그래프 그리기
(data by Kaggle)
- marker size factor 설정하기
- marker_size_factor = (plt.rcParams["lines.markersize"] ** 2 / iris[feature_additional].mean()):
--> matplotlib의 기본 마커 크기 설정값을 가져옴
--> 마커 크기는 일반적으로 마커의 면적(즉, 크기)이므로, 크기를 제곱하여 면적으로 변환
--> iris 데이터셋의 feature_additional 열의 평균값을 구하여 마커의 크기를 상대적으로 조정하기 위한 기준값 구하기 - 데이터의 feature_x 열과 feature_y 열의 값들을 사용하여 산점도를 그리기
- ax.scatter(iris[feature_x], iris[feature_y], s = marker_size_factor * iris[feature_additional], alpha=0.7):
--> s = marker_size_factor * iris[feature_additional]는 feature_additional 열의 값을 기반으로 마커 크기를 조절 - x, y축 및 제목 그리기
- Color로 차이를 둔 scatter 그래프 그리기
- 그래프를 그릴 공간 만들기
- x, y축 좌표데이터 그리기
- cmap="virdis"는 색상 맵(color map)으로 "viridis"를 사용하여 데이터를 색상으로 표현
막대 그래프 그리기 (bar, barh)
- bc = ax.bar(film_title, admissions):
- 막대 그래프 그리는 함수 - ax.yaxis.set_tick_params(length=0):
- y축 눈금의 길이를 0으로 설정하여 눈금 선을 숨김 - ax.yaxis.set_major_formatter(admission_formatter):
- y축 눈금의 표시 형식을 admission_formatter 함수로 설정 - plt.setp(ax.get_xticklabels(), ha="right", rotation=45):
- x축 라벨(영화 제목)을 오른쪽 정렬하고 45도 회전시킴 - ax.spines[["top", "right", "left"]].set_visible(False):
- 상단, 오른쪽, 왼쪽 테두리를 숨김
색상선택
- x = np.linspace(0, 5, 100): 0에서 5까지 100개의 균일한 값을 가진 배열 x를 생성
- X, Y = np.meshgrid(x, y): x와 y를 사용하여 2차원 그리드 배열 X와 Y를 생성
- Z = np.sin(X) ** 5 + np.cos(X) * np.cos(Y): X와 Y 값을 사용하여 Z 배열을 생성. 이 배열은 함수 np.sin(X) ** 5 + np.cos(X) * np.cos(Y)의 값을 가짐
- fig = plt.figure(): 새로운 Figure 객체 fig를 생성
- subfigs = fig.subfigures(2, 2): 2x2 배열의 SubFigure 객체를 생성하여 subfigs에 저장
- for cmap, subfig in zip(["viridis", "turbo", "jet", "hsv"], subfigs.flat): 색상 맵(cmap) 리스트와 SubFigure 객체 리스트를 동시에 순회
- ax = subfig.subplots(): 각 SubFigure 내에 서브플롯을 생성하여 ax에 저장
- image = ax.imshow(Z, extent=[x[0], x[-1], y[0], y[-1]], origin="lower", cmap=cmap): Z 배열을 이미지로 표시합니다. 이미지는 x와 y의 범위를 사용하고, 좌하단에서 시작하며, cmap 색상 맵을 사용
- subfig.colorbar(image, ax=ax): 각 서브플롯에 색상 막대를 추가
- ax.set(xlabel="x", ylabel="y", title=cmap): x축 라벨을 "x", y축 라벨을 "y", 제목을 해당 색상 맵 이름으로 설정
Heatmap 그리기
- Seaborn 라이브러리를 사용
- sns.heatmap(iris[iris.columns[:-1]].corr(), annot=True, cmap='cubehelix_r'):
- sns.heatmap 함수는 히트맵을 그리는 함수
- iris[iris.columns[:-1]].corr()는 Iris 데이터셋에서 마지막 열을 제외한 모든 열의 상관 행렬을 계산
- iris.columns[:-1]는 마지막 열을 제외한 모든 열을 선택
- .corr()는 상관 행렬을 계산
- annot=True는 각 셀에 상관 계수를 표시
- cmap='cubehelix_r'는 히트맵의 색상 맵을 'cubehelix'의 반전된 버전으로 설정
'TIL(2024y) > Machine learning' 카테고리의 다른 글
24.06.10 Review (Summary/ Linear Regression with Pytorch) (0) | 2024.06.11 |
---|---|
24.05.28 Ensemble model (Bagging/ Random tree) (0) | 2024.05.28 |
24.05.27 알고리즘 개념(Decision Tree) (0) | 2024.05.28 |
24.05.24 통계 / scaling / data split (0) | 2024.05.26 |
24.05.22 머신러닝 개념 및 이상치/결측치 해결 (0) | 2024.05.22 |