본문 바로가기
데이터 분석/혼자 공부하는 데이터 분석 with 파이썬

[혼공분석] 4주차_데이터 요약하기

by yEvery 2025. 2. 8.

04-1 통계로 요약하기

 

기술통계(요약 통계): 자료의 내용을 압축하여 설명하는 방법

탐색적 데이터 분석: 데이터 시각화를 아우르는 이러한 데이터 분석 방법

ns_book6.describe()
ns_book7.describe(percentiles=[0.3, 0.6, 0.9])
ns_book7.describe(include='object')

describe() 메서드: 데이터프레임에서 기본적인 몇 가지 기술통계를 자동으로 추출

percentiles 매개변수: 원하는 위치의 값을 지정하면 보여줌

include 매개변수: 수치가 아닌 다른 데이터 타입의 열의 기술통계를 보여줌


추가 숙제(선택): Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기

ns_book7['대출건수'].mean()
ns_book7['대출건수'].median()
ns_book7['대출건수'].min()
ns_book7['대출건수'].max()
ns_book7['대출건수'].quantile([0.25, 0.5, 0.75])
ns_book7['대출건수'].var()
ns_book7['대출건수'].std()
ns_book7['도서명'].mode()

평균: 숫자 값을 모두 더해 개수로 나눈 것, mean() 메서드

중앙값: 전체 데이터를 순서대로 늘어 놓았을 때 중앙에 위치한 값.

             전체 데이터 개수가 짝수이면 가운데 두 개의 값을 평균하여 중앙값 결정, median() 메서드

최솟값: 최소인 값, min() 메서드

최댓값: 최대인 값, max() 메서드

분위수: 데이터를 순서대로 늘어 놓았을 때 이를 균등한 간격으로 나누는 기준점.

             사분위수의 경우 25%, 50%, 75%이며, 25%에 해당하는 값을 제1사분위수, 중앙값을 제2사분위수, 75%에 해당하               는 값을 제3사분위수라고 부른다. quantile() 메서드

분산: 평균으로부터 데이터가 얼마나 퍼져있는지를 나타내는 통계량, var() 메서드

표준편차: 분산에 제곱근을 한 것

최빈값: 데이터에서 가장 많이 등장하는 값, mode() 메서드


ns_book7.mean(numeric_only=True)

데이터프레임에서 기술통계를 구할 때 수치형 열만 연산할 수 있으므로 numeric_only=True로 지정

넘파이의 기술통계 함수
import numpy as np

np.mean(ns_book7['대출건수'])
np.average(ns_book7['대출건수'], weights=1/ns_book7['도서권수'])
np.median(ns_book7['대출건수'])
np.min(ns_book7['대출건수'])
np.max(ns_book7['대출건수'])
np.quantile(ns_book7['대출건수'], [0.25, 0.5, 0.75])​
np.std(ns_book7['대출건수'])

values, counts = np.unique(ns_book7['도서명'], return_counts=True)
max_idx = np.argmax(counts)
values[max_idx]

average() 함수의 weights 매개변수: 가중치를 제공하면 가중 평균을 계산

가중 평균: 평균을 구할 때 각 값의 중요도에 다라 가중치를 부여하여 계산하는 평균값

최빈값 함수를 제공하지 않음 → unique() 함수를 사용

unique() 함수: 배열에서 고유한 값을 찾아줌

return_counts 매개변수: True로 지정하면 고유한 값의 등장 횟수도 반환

판다스와 넘파이의 분산

판다스: 분산을 계산할 때 n이 아니라 n-1을 분모로 사용
표본집단: 전체 데이터 중에서 수집한 일부 데이터
모집단: 전체 데이터
모집단을 구할 수 없거나 구하기 어려운 경우 표본집단을 사용해서 모집단의 특징을 추정

넘파이: n을 분모로 사용
ddof 매개변수: 자유도 차감값을 지정할 수 있다.
판다스 var() 메서드의 ddof 기본값:1
넘파이 var() 함수의 ddof 기본값: 0

 

04-2 분포 요약하기

import matplotlib.pyplot as plt

 

맷플롯립: 파이썬에서 그래프를 그리는 데 사용하는 대표적인 패키지

plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
plt.show()

산점도: 두 변수 혹은 두 가지 특성값을 직교 좌표계에 점으로 나타내는 그래프, 한 번에 표현할 수 있는 특성 개수에 한계

alpha 매개변수: 투명도 지정, 중첩된 데이터 포인트를 가늠하기 좋음

양의 상관관계: x축이 증가함에 따라 y축이 증가

음의 상관관계: x축이 증가함에 따라 y축이 감소

plt.hist([0,3,5,6,7,7,9,13], bins=5)
plt.show()

히스토그램: 수치형 특성의 값을 일정한 구간(계급)으로 나누어 구간 안에 포함된 데이터 개수를 막대 그래프로 그린 것

도수: 구간 안에 속한 데이터 개수

도수분포표: 히스토그램에 나오는 구간과 도수를 표로 요약한 것

import numpy as np
np.histogram_bin_edges([0,3,5,6,7,7,9,13], bins=5)

histogram_bin_edges() 함수: 히스토그램의 구간을 정확하게 확인

np.random.seed(42)
random_samples = np.random.randn(100)

plt.hist(random_samples)
plt.show()

seed() 함수: 유사난수를 생성, 항상 같은 난수를 추출할 수 있다.

randn() 함수: 표준정규분포를 따르는 랜덤한 실수를 생성

 

plt.boxplot(ns_book7[['대출건수', '도서권수']]
plt.yscale('log')
plt.show()

상자 수염 그림: 최솟값, 세 개의 사분위수, 최댓값 다섯 개의 숫자를 사용해 데이터를 요약하는 그래프

로그 스케일: 큰 값일수록 도수 크기가 많이 줄어들어 작은 값과의 차이가 줄어든다.

IQR: 제 1사분위와 제 3사분위수 사이의 거리

 

plt.boxplot(ns_book7[['대출건수', '도서권수']], vert=False)
plt.xscale('log')
plt.show()

vert 매개변수: 상자 수염 그림을 수평으로, False로 지정

plt.boxplot(ns_book7[['대출건수', '도서권수']], whis=10)
plt.boxplot(ns_book7[['대출건수', '도서권수']], whis=(0,100))

whis 매개변수: 수염의 기본 길이는 IQR의 1.5배, 수염 길이 조정, 백분율로도 지정 가능

 

판다스의 그래프 함수
  • 판다스 데이터프레임 객체의 plot 속성 사용
  • 맷플롯립과 달리 데이터프레임으로 그래프를 그릴 때, x축과 y축에 해당하는 열 이름만 지정

산점도

ns_book7.plot.scatter('도서권수', '대출건수', alpha=0.1)
plt.show()

히스토그램

ns_book7['도서명'].apply(len).plot.hist(bins=100)
plt.show()

상자 수염

ns_book7[['대출건수', '도서권수']].boxplot()
plt.yscale('log')
plt.show()

기본 숙제(필수): p. 279의 확인 문제 5번 풀고 인증하기

selected_rows = (1980 <= ns_book7['발행년도']) & (ns_book7['발행년도'] <=2022)
plt.hist(ns_book7.loc[selected_rows, '발행년도'])
plt.show()

정답 코드는 Boolean indexing을 사용하여 조건을 만족하는 행의 발행년도 데이터로 히스토그램을 생성하고

내가 작성한 코드는 조건을 만족하는 DataFrame을 생성한 후, 그 DataFrame의 발행년도 열을 히스토그램으로 생성한다.