Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

yooonicode

python 데이터 분석 - ch 5 본문

데이터분석

python 데이터 분석 - ch 5

yooonii 2023. 9. 22. 01:13

📖 5-1

맷플롯립 그래프 담는 객체인

1. 피겨 - 모든 그래프 구성 요소를 담고 있는 최상위 객체

scatter()로 산점도를 그릴 때 자동으로 피겨 객체가 생성됨, figure() 함수로 명시적으로 활용하면 다양한 옵션 활용 가능

2. rcParams

3. 서브플롯

import
scatter()로 투명도 0.1 지정하면 출력

- figsize 매개변수의 지정으로 산점도 사이즈 조절 가능(인치 단위)

print(plt.rcParams['figure.figsize'])
// 윗 코드 이용하여 맷플롯립 기본 그래프 크기 확인 가능

 

- plt.show() 호출시 figure()로 만든 피겨 객체는 자동으로 소멸됨

- 그래프 사진을 오른쪽 클릭 후 실제 자로 재보면 실제 사이즈보다 작음

➡️ DPI(dot per inch)의 차이, 맷플롯립의 기본 DPI는 72로 노트북의 DPI보다 작음

print(plt.rcParams['figure.dpi'])
// 현재 맷플롯립의 기본 그래프크기 확인

> 인치보다는 픽셀 크기로 다루는 것이 편리함, figsize는 인치 단위로 값을 지정해야하기 때문에 원하는 픽셀 값을 DPI로 나누어 구할 수 있음. 900*600 크기의 그래프를 그리고 싶다면 두 픽셀의 값을 72로 나누어 figsize에 전달

➡️ 픽셀 값을 DPI값으로 나누면 인치 값 구할 수 있음

확인 결과 900*600 픽셀이 아님 ➡️ 코랩 노트북은 기본적으로 출력시에 그래프 주변 공백을 최소화하는 타이트 레이아웃을 사용하기 때문

✔️ 코랩 노트북의 타이트 레이아웃을 사용하지 않으려면 맷플롯립 그래프를 그릴 때 bbox_inches를 None으로 지정해야

다시 돌려놓기


figsize 그대로 둔 후 dpi 매개변수를 지정하여 인치당 픽셀 수를 두 배로 늘려서 그래프를 두 배 키움

그래프 안의 모든 구성요소도 함께 커졌음, 마커의 크기 및 x축, y축의 크기가 커졌음

- figsize는 캔버스 크기라면 DPI는 그래프 확대하는 돋보기


2. rcParams 객체

- 맷플롯립 그래프의 기본값을 관리하는 객체

- 객체에 담긴 값을 출력하는 것 뿐 아니라 새로운 값으로 바꾸어 이후 그려지는 모든 그래프에 적용할 수 있음

- 그래프 해상도를 높이기 위해 DPI 기본값 높이기

- 산점도 마커를 별모양으로 바꾸기(기본값 동그라미)

- 기본값 수정 대신에 scatter() 함수의 marker 매개변수로 마커의 모양을 지정하면 됨

➡️ 기본값을 무시하고 marker 매개변수의 지정 값을 이용함


3. 서브플롯

- 맷플롯립의 Axes 클래스의 객체를 말하며 하나의 서브플롯은 두개 이상의 축을 포함함

- 3차원 그래프라면 세개의 축이 존재

- 각 축에는 눈금, 틱이 표시되며 축의 이름을 나타내는 레이블이 있음

✔️ 하나의 피겨 객체에 두 개 서브플롯 추가하기 - subplots()

- 매개변수에 2를 넣어 두 개의 서브플롯을 그린 후, scatter와 hist 함수 호출

- 히스토그램의 y축은 로그 스케일로 지정

앞선 방식과는 다른 객체지향 방식으로 여러개의 그래프 그려 조작할 때 편리

- subplots도 피겨 크리 조정 가능함(figsize), 제목 지정 가능(set_title())

- 서브플롯을 가로로 출력하는 법

matplotlib.pyplot.figure() - 피겨 객체 만들어 반환

matplotlib.pyplot.subplots() - 서브플롯 생성 후 반환

Axes.set_x(or y)scale() - x축 또는 y축의 스케일 지정

Axes.set_title()

Axes.set_x(or y)label()


📖 5-2 선 / 막대 그래프 그리기

- 데이터 다운로드 후 연도별 발행도서 개수와 주제별 도서 개수를 구하기

- 발행년도에 따라서 연도별 도서 갯수를 구하고, 시간순으로 배치하여 (sort_index())

- 2650년이 말이 안되므로 2030년 이하인 데이터만 추려줌


✔️ 주제별 도서 개수 구하기

- 주제분류번호의 첫번째 글자는 십진분류코드, 첫 글자만 선택하여 value_counts()

- 단, 열에 NaN이 포함되어 있으므로 -1을 반환하게끔 걸러냄

✔️ 주제분류번호 열의 값을 받아 첫 글자를 반환하는 함수 선언 후에 apply()에 넣어 반복 적용

➡️ 8로 시작하는 도서인 문학 도서가 제일 많음을 확인, 인덱스 순서대로 정렬하지 않음

더보기

명목형 데이터와 순서형 데이터

명목형 : 순서를 매길 수 없는 성별이나 국가

순서형 : 순서가 있는 데이터, 만족도 등 순서형이라면 그래프 표현 전에 순서대로 정렬하여야 함

- 주제분류번호는 명목형이므로 sort하지 않음


✔️ 선 그래프 그리기 - plot()

- 그래프 해상도 위하여 기본 DPI 100으로 설정

- plot()의 매개변수에 연도, 도서 개수를 지정하여 선 그래프를 그리기

- 제목, 축 이름 지정 ⭐ 서브플롯과 다르게 title(), xlabel(), ylabel() 사용하여 저장


- 선 모양, 색 배꾸기

linestyle 매개변수의 기본값은 '-' (':' - 점선, '-' - 쇄선, '--' : 파선)

color 매개변수는 hex코드 전달 또한 색 이름 지정 (blue, magenta, cyan, yellow, black, white, green, red - b,m,c,y,bl(bk인가?), w, g, r로 축약 가능)

marker 매개변수 존재

그냥 df 전달하면 자동으로 인덱스를 x축 좌표로 사용하여 그래프 그림
한꺼번에 지정할 수 있음

✔️ 눈금 개수 조절, 마커에 텍스트 표시

눈금 개수 조절 - xticks(), yticks(), 서브플롯에는 set_xticks(), set_yticks()

+ range() 함수의 사용을 통해 10년씩 건너뜀, 슬라이스 연산자를 사용하여 다섯개씩 건너뛰며 count_by_year 값 선택

+ 시리즈 객체의 items() 활용하여 인덱스와 값을 감싼 튜플 얻어내기

- 그래프 값 표시에는 annotate() : 첫 매개변수에 나타낼 문자열, 두 번째에 xy좌표를 튜플로 지정

- 마커 옆에 텍스트가 바로 있음, 떼어놓기 위해서 xytext 매개변수를 사용함

annotate()는 마커와 동일한 좌표 시스템을 사용하므로 조금 띄워보는 시

- x축으로 1만큼, y축으로 10만큼 떨어뜨림

‼️ y축의 스케일이 크기때문에 상대적 위치를 포인트, 픽셀 단위로 지정하는 것이 효과적

⭐ xytext 매개변수와 함께 textcoords 매개변수를 사용하여 상대 위치, offset points 지정

+ 1포인트는 1/72 inch, 픽셀 단위로 지정하고 싶다면 offset pixels로


✔️ 막대 그래프 그리기 - bar()

- 막대 중앙으로 텍스트 위치 옮기고, 색상 바꾸기

> annotate()의 ha 매개변수를 center로 지정(기본값 right)

> 텍스트 겹치는 경우 방지 위하여 fontsize로 크기 줄이기

> 텍스트 색깔 color='green'으로 지정

> 기본 bar width 0.8인데 두께를 줄이고 color = 'blue'

 ✔️ 가로 막대 그래프 그리기 - barh()

- 두께를 나타내기 위해 width 아닌 height 매개변수 사용, x축 y축의 이름 변경

- annotate() 사용시에도 x값과 y값 변경되어 idx,val 아닌 val, idx로 변경하여 사용해야함

- ha 아닌 va 매개변수로 기본값 baseline, center로 변경함(top, bottom도 존재함)


✔️ 이미지 출력 및 저장

- PIL, Pilow 패키지를 이용할 수도 있음

- 이미지 저장

- 그래프를 이미지로 저장 - savefig()

sol1) savefig(저장할 이름, dpi = )

sol2) rcParams['savefig.dpi']로 DPI지정, 기본값은 figure로 피겨의 DPI를 따라감

- 마지막의 가로 막대를 저장하려면 show() 함수 호출 전에 savefig()하여 피겨 객체 소멸 전에 저장되도록 함

저장한것 불러서 열어봄

DPI가 높다면 인쇄물에 충분한 고해상도 이미지 얻기 가능

'데이터분석' 카테고리의 다른 글

python 데이터 분석 ch 7-1, 7-2  (0) 2023.09.30
python 데이터 분석 - ch 6  (0) 2023.09.22
python 데이터 분석 - ch 4  (1) 2023.09.15
python 데이터 분석 - ch 3  (0) 2023.09.15
python 데이터 분석 - ch1, 2  (1) 2023.09.09