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 4 본문

데이터분석

python 데이터 분석 - ch 4

yooonii 2023. 9. 15. 17:06

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

데이터 시각화를 아우르는 데이터 분석을 탐색적 데이터 분석

 

- CH4 ; 데이터 분석, 시각화 방식 소개

 

만들었던거 불러옴

수치형 열에 대한 요약 통계를 보여주는 describe() 메서드를 이용하여 통계량을 계산하였음

불리언 배열을 사용하고 sum 함수를 이용해서 도서 권수가 0인 행 개수를 카운트해주었고, 

3206개는 전체 데이터에서 무시할 만한 양이라고 판단하여 0권 초과하는 책들만 따로 데이터프레임화 해주었음

다시 describe(), percentiles 매개변수에 위치를 지정할 수 있음 ( 30, 60, 90%가 출력되어 있음)

include에 데이터타입 지정하여 기술통계 역시 출력 가능함

count는 누락된 값 제외 데이터 개수

unique는 고유한 값의 개수

top은 가장 많이 등장하는 값

freq는 top에 가장 많이 등장하는 값의 빈도수


- 평균 구하기, 인덱스로 불러와서 리스트 원소 개수로 나누어줌(ez)

시그마로 표현해준다면 시작값, 종료값을 i로 지정한 후 len으로 나누어줌

얘가 다해줌
중앙값

데이터 개수 짝수일때는 가운데 두개 값을 평균해서 결정함

중복값 제거하는 코드 마지막줄에서, 중앙값 구해보니 초기보다 높아졌음을 확인할 수 있음

최대최소(ez)

 ✔️ quantile(4분위수)

percentile(백분위수)

판다스에서는 전용 메서드를 사용함, 하위 25%인경우 0.25를 입력해줌

분위수 여러가지 지정해줄 수 있고

마지막 코드 같은 경우에 interpolation(보간) 매개변수에서 중간값을 계산하는 방법을 결정해줌

4와 5 사이의 90% 분위수는

이렇게 비례식을 이용해서 나온 결과임을 확인할 수 있음

판다스에서 지원하는 다른 보간 방식, 분위수 상관없이 무조건 두 수 사이의 중앙값을 사용하는 midpoint, 두 수중의 가까운 값을 출력하는 nearest, 두 수 중 작은/큰 값을 설정하는 lower, higher가 있음

 

 

✔️ 백분위 구하는 트릭

불리언 배열을 만든 이후에, mean() 호출하여 평균 구하면 10보다 작은 값이 차지하는 비율 얻기 - 약 0.65

직접 mean() 이용해보면 0.65에 해당하는 백분위는 10임을 알 수 있음

 

✔️ 분산: 각 값에서 평균 뺀 후 제곱하여 총 개수로 나누어 구할 수 있음

Var(x), s^2, sigma^2를 활용함, 

표준편차는 sqrt(분산)

해석 : 평균 11회의 도서를 빌릴때, 어떤 도서를 임의로 선정한다면 평균보다 19만큼 더 많거나 적을 수 있음

outlier 존재하기 때문에 편차 큰걸로 해석할 수 있음

물론 직접 구할 수도 있다.


✔️ 최빈값 ; 가장 많이 등장하는 값을 의미함

수치형, 텍스트형 전부 가능하다.

수치형만 연산할 수 있도록 numeric_only = True로 지정해주었음

- 지정하지 않는다면 시간 오래걸리며 오류 발생

 

번호 열부터 찾게 되면 사실상의 의미가 없어져서, 도서명부터 끝까지 mode로 최빈값 계산


⭐ 넘파이의 기술통계 함수

- 가중평균을 타나낼 수 있음

도서권수가 많을 수록 대출건수에 낮은 가중치를 주도록 설정하면, 평균이 조금 낮아짐

데이터프레임과 시리즈 객체에 스칼라값으로 산술연산을 수행한다면 이를 브로드캐스팅이라고 부름

입력배열과 가중치의 크기는 같아야함 (3개를 가중평균 하려면 3개의 가중치가 있어야함)

 

대출건수를 도서권수로 나눈 평균도 단순평균보다 낮음

전체 대출건수를 전부 더한 후에 도서권수를 전부 더한 것으로 나누면 한 권당 대출 건수도 구할 수 있음

 ➡️ 판다스에서는 interpolation 변수가 python 3.8부터 method로 변경되었음

percentile로도 가능함

분산도 구해줄 수 있는데

넘파이의 분산과

판다스의 분산(ns_book7[''].var())이 다른 이유

- 판다스는 n-1 자유도 방식을 사용함 (ddof = 1으로 지정한다면 분산을 구할때 n이 아닌 n-1로 나눔)

넘파이는 주로 머신러닝 작업에,

판다스는 데이터 분석에 많이 사용되어 차이가 있음

++ 데이터 개수 충분하다면, 분산을 나타낼때 자유도를 고려할 필요는 없음

 

자유도 고려 안하여 표준편차도 구해봄

✔️ 최빈값 구하는 함수는 넘파이에서 없지만

unique 사용하여 최빈값 찾을 수 있음, 고유한 값의 등장횟수를 반환하게끔 고유한 값과 등장횟수가 담긴 배열을 얻은 후, counts 배열에서 가장 큰 값의 인덱스를 찾아내는 작업을 argmax()를 이용하여 찾아줌

 

가장 큰 값의 인덱스를 찾아냈으니,

values에 인덱스를 집어넣고 출력하면 된다


 ➡️ 데이터 시각화 

다운받음

 ⭐ 산점도 그리기 scatter()

맷플롯립 패키지를 다운받아주고

show() 써줘야 그래프 출력이 됨

데이터를 이용해서 산점도 그려줌
도서권수가 많으면 대출건수가 많을 것이라는 예상을 빗나감

- 투명도를 주어서 중첩된 데이터 포인트 가늠하기 편하게 바꾸기

alpha = 0.1
대출권수 열을 도서권수 열로 나누어서 scatter()에 전달

- 양의 상관관계가 있다고 말할 수 있음

- 산점도는 2차원, 3차원만 가능하기 때문에 한 번에 표현할 수 있는 특성에 한계가 있음

 

 ⭐ 히스토그램

- 수치형 특성의 값을 일정한 구간으로 나누어 구간 안에 포함된 데이터 개수를 막대 그래프로 그린 것, 구간 안에 속한 데이터 개수를 도수라고 부름

히스토그램의 구간을 정확하게 파악하는 함수를 사용하여 다섯 구간의 경곗값을 출력
randn()을 이용하여 표준 정규분포를 따르는 랜덤한 실수를 생성하고, 함수에 샘플 개수를 전달하여 난수를 생성해줌

- seed()를 사용하면 유사난수를 생성할 수 있음

- randn()은 랜덤한 값을 생성하여 실행할 때마다 다른 값이 추출된다

+ 책에서는 동일한 결과 위해 seed 사용해줌

 

평균과 표준편차를 확인하여 표준정규분포를 따르는지 확인해줌

평균이 0, 표준편차가 1에 가까울수록 표준정규분포에 유사함

종모양을 띠고있음

대출 건수의 히스토그램을 그렸더니

describe에서 확인했던 90% 백분위, outlier의 영향이 너무 커서 다른 구간에는 도수 값이 표시되지 않는 현상이 발생함

✔️ 구간 조정하기 ; 로그 스케일로 변경

y축에 로그함수를 적용하여, 큰 값일수록 도수 크기가 많이 줄어들어 작은값과의 차이가 줄어듬

이렇게요
매개변수지정해서도 위와 같은 결과를 얻을 수 있음
x축의 구간 쪼개어 관찰하기
도서명의 길이 분포 관측하기

위 그래프가 왼쪽에만 치우쳐저있어, x축에도 로그스케일을 적용해줄 수 있음

이렇게요


 ⭐ boxplot(상자수염그림)

최솟값, 3개의 사분위수, 최댓값을 사용해 데이터를 요약하는 그래프

제 1사분위수와 3사분위 수사이의 거리는 IQR이라고 하며,

whisker의 길이는 사각형 높이의 1.5배 거리 안에서 가장 멀리 있는 샘플까지를 의미함

이외에는 outlier.

 

대출 권수와 도서 권수열의 박스플롯을 그린다면

1번(대출건수) 2번(도서권수) 중에 2번은 사분위수가 매우 작아서 보이질 않음

y축을 로그스케일로 바꾼다면?

1번은 뚜렷한 확인이 가능함

도서권수열의 사분위수는 전부 1이라는 값을 가지므로 애초에 보이지 않음

박스플롯 여러개를 수평으로 그릴때는 vert = False로 바꾸고, x를 로그스케일로 지정해준다.

기본적으로 IQR의 1.5배가 수염의 길이인데, 더 길게 혹은 짧게 나타낼 수 있다,. 

whis의 기본값은 1.5인데 10으로 바꿨다면, 10배 범위에서 가장 멀리 떨어진 데이터까지의 수염을 그리면 된다

- 2번 상자의 IQR은 0이라서 저게 정상임

 

백분율로도 whis 지정할 수 있음, (0,100)으로 지정한다면 마지막 데이터까지의 수염을 그릴 수 있다. 


 ⭐ 판다스의 그래프 함수

✔️ 산점도 - plot은 그래프 그리는 메서드 제공, 열 이름만 지정해주면 데이터프레임으로 그래프 그릴 수 있음

열 이름이 한글일때 제대로 표시되지 않음

✔️ 히스토그램 그리기

apply 적용 바로 이후에 plot.hist() 사용 가능하여 편리하다

 

✔️ 상자 수염 그림 그리기

 

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

python 데이터 분석 - ch 6  (0) 2023.09.22
python 데이터 분석 - ch 5  (0) 2023.09.22
python 데이터 분석 - ch 3  (0) 2023.09.15
python 데이터 분석 - ch1, 2  (1) 2023.09.09
빅데이터 응용 - 1  (0) 2023.09.07