
날씨가 너무 덥고 움직이기 싫은 요즘입니다
저는 머리도 쓰기 싫지만... 벌려 놓은 일이 있어 다행이 머리는 쓰고 있어요
올라가는 불쾌지수에 무언가 마음먹기도 어려운 듯 합니다
일주일이나 지각했지만 다른 지각한 여러분들 덕분에... 친절한 족장님 덕분에
기한 안에 올라갈 듯한 4주차 과제 시작합니다
04-1. 통계로 요약하기
기술통계의 종류
평균
: 말 그대로 평균입니다. 딱히 설명할 필요가 없죠
#판다스
ns_book7['대출건수'].mean()
#넘파이
np.mean(ns_book7['대출건수'])
np.average(ns_book7['대출건수'])
*average의 경우 가중평균을 계산할 수 있음
가중평균이란 각 값의 중요도에 따라 가중치를 부여해서 평균을 계산하는 방법이죠...
간단히 average 함수의 괄호 안에 wights라는 매서드를 추가해 사용하면 됩니다
np.average(ns_book7['대출건수'], weights=1/ns_book7['도서권수'])
중앙값
: 전체 데이터를 늘어놓았을 때 중앙에 위치한 값
*짝수인 경우 가운데 두 값의 평균
#판다스
ns_book7['대출건수'].median()
#넘파이
np.median(ns_book7['대출건수'])
중앙값은 자료의 특성 상 유의미할 수도, 아닐 수도 있습니다
자료가 고르게 분포되어 있다면 유의할 수도 있으나... 그게 아니라면 극단적인 값이 나올 수도 있으니까요
그래서 유의미한 중앙값을 알아내기 위해 중복값을 없애고 중앙값을 구하는 방법도 존재합니다
ns_book7['대출건수'].drop_duplicates().median()
*drop_duplicates() : 판다스에서 중복된 요소를 삭제하는 함수(하나씩은 남겨둠)
최솟값 최댓값
: 말그대로.
#판다스
ns_book7['대출건수'].min()
ns_book7['대출건수'].max()
#넘파이
np.min(ns_book7['대출건수'])
np.max(ns_book7['대출건수'])
분위수
: 데이터를 순서대로 늘어놓았을 때 이를 균등한 간격으로 나누는 기준점
사분위수를 주로 사용한다.
사분위수는 q1 25%, q2 50%, q3 75% 이다.
#판다스
ns_book7['대출건수'].quantile(0.25)
ns_book7['대출건수'].quantile([0.25,0.5,0.75])
사분위 함수 안에 원하는 분위수를 지정하면 해당 분위수 값을 모두 출력. 여러개면 리스트로 넣는다
#넘파이
np.quantile(ns_book7['대출건수'], [0.25,0.5,0.75])
+
사분위 수는 퍼센트에 해당하는 값을 출력한다면, 값을 넣었을 때 이것의 분위가 궁금할 수도 있다.
이를 바로 출력할 수 있는 함수는 없지만, 불리언 배열을 이용하여 도출 가능하다.
borrow_10_flag = ns_book7['대출건수'] < 10
#10이라는 값의 분위수를 구하고 싶다면, 비교구문을 통해 불리언 배열을 만든다.
borrow_10_flag.mean()
#그것의 평균을 계산한다. 그러면 10 미만은 1, 10 이상은 0으로 평균을 계산한 것이기 때문에
#10이라는 값이 가지고 있는 대략적 위치를 파악할 수 있다.
분산
: 평균으로부터 데이터가 얼마나 퍼져있는가
#판다스
ns_book7['대출건수'].var()
#넘파이
np.var(ns_book7['대출건수'])
ns_book7['대출건수'].var(ddof=0)
*여기서 ddof는 자유도를 의미하고, 0이면 n-0, 1이면 n-1 이런 식...
표준편차
: 분산에 제곱근을 한 값.
평균을 중심으로 데이터가 대략 얼마큼 떨어져 분포해 있는지
#판다스
ns_book7['대출건수'].std()
#넘파이
np.std(ns_book7['대출건수'])
최빈값
: 데이터에서 가장 많이 등장하는 값
#판다스
ns_book7['도서명'].mode()
*mode 함수는 텍스트에도, 수치형에도 적용 가능
#넘파이
*넘파이에는 최빈값 함수가 없다
values, counts = np.unique(ns_book7['도서명'], return_counts=True)
#유니크 함수를 통해 고유값과 등장횟수 배열을 받고
max_idx = np.argmax(counts)
#argmax함수를 통해 가장 큰 값을 가진 인덱스를 찾는다
values[max_idx]
#그것의 values를 찾는다
이런 전반적인 기술통계량을 알고 싶다면
describe() 함수를 사용하면 된다.
-데이터 개수
-평균
-표준편차
-최솟값
-q1,q2,q3
-최댓값
을 출력한다.
04-2. 분포 요약하기
파이썬에서 그래프를 그리기 위해서는 matplotlib패키지가 필요하다.
그래프를 출력하기 위해서는 plt.show() 함수를 사용한다.
1. 산점도
: 두 변수의 관계를 시각적으로 나타내기 좋음
plt.scatter()
plt.scatter(x좌표 리스트, y좌표 리스트)
ex)
plt.scatter([1,2,3,4], [1,2,3,4])
plt.scatter(ns_book7['번호'], ns_book7['대출건수'])
#판다스
ns_book7.plot.scatter('도서권수','대출권수')
*판다스에서 그래프를 그릴 때는 열 이름만 넣으면 됨
2. 히스토그램
: 특정 자료가 어떻게 분포하고 있는지를 시각적으로 나타냄
plt.hist()
plt.hist(값 리스트)
import numpy as np
np.histogram_bin_edges([0,3,5,6,7,7,9,13], bins=5)
#넘파이 패키지 안의 이 함수는 히스토그램의 구간을 출력함
ex)
plt.hist([0,3,5,6,7,7,9,13], bins=5)
plt.hist(ns_book7['대출건수'])
+
구간 조정하기
히스토그램이 한 구간에 너무 몰려있다면 로그 스케일로 바꾸어 해결할 수 있다
plt.yscale('log'), plt.hist(ns_book7['대출건수'], log=True)
#y축에 로그스케일 적용
plt.xscale('log')
#x축에 로그스케일 적용
#판다스
ns_book7['대출권수'].plot.hist(bin=100)
*기타설정
bins : 구간 개수
3. 상자 수염 그림
: 최솟값, 사분위 수, 최댓값을 통해 데이터를 요약하는 그래프, 두 변수의 분포를 비교하기에 좋다.
boxplot()
plt.boxplot(ns_book7[['대출건수','도서권수']])
*boxplot은 한 개의 변수에 대해 하나씩 출력되며 여러 변수를 동시에 넣으면 여러개의 boxplot이 생성
이것도 수가 작거나 해서 상자가 잘 안그려지면 로그스케일로 변환할 수 있다.
plt.boxplot(ns_book7[['대출건수','도서권수']])
plt.yscale('log')
plt.show()
#판다스
ns_book7[['대출건수','도서권수']].boxplot()
*기타설정
vert=False : 상자그림을 수평으로 그림
(이 경우 로그스케일도 x축에 적용)
whis=3 : 수염길이 조정. 3이면 원래 1.5배인 수염길이를 3배로 늘리는 설정.
whis 같은 경우 백분위로도 설정 가능.
**matplotlib의 기타 설정
c : 색 (ex. c='r''g''b')
s : 크기( 점의 크기)
marker : 마커 모양

[기본과제]

loc매서드를 스스로 사용하는 것에 아직 익숙하지 않다보니 이중 인덱스로 열을 불러오는 방법으로 코드를 적었습니다
뭐.. 아무튼 똑같이 나오니까요^^
겨우 기한 안에 올라갑니다
4주차까지 하고 쉬었어야 하는데 쉬고 4주차 하는 느낌이네요
아무튼 5주차부터 또 파이팅 하겠습니다!
'혼공단' 카테고리의 다른 글
| [혼공분석] 6주차_Ch.6 복잡한 데이터 표현하기 (5) | 2025.08.18 |
|---|---|
| [혼공분석] 5주차_Ch.5 데이터 시각화하기 (4) | 2025.08.11 |
| [혼공분석] 3주차_ch.03 데이터의 정제 (2) | 2025.07.25 |
| [혼공분석] 2주차_Ch2. 데이터 수집 (7) | 2025.07.12 |
| [혼공분석]1주차_Ch1.천천히 정리해보자 (0) | 2025.07.04 |