728x90
4.1 다차원 배열의 최대값, 최소값, 평균값 구하기와 정렬
최대값, 최소값, 평균값
a = np.array([10, 20, 30])
a.max(), a.min(), a.mean()
np.max(a), np.min(a), np.mean(a)
- 원소들의 자료형을 변환하려고 한다면 astype() 함수를 이용
a.astype(np.float64)
정렬
c = np.array([35,24,55,69,19,99])
c.sort() # 오름차순
# [19, 24, 35, 55, 69, 99]
d = c[::-1] # 내림차순
# [99, 69, 55, 35, 24, 19]
c_flip = np.flip(c) # 내림차순
# [99, 69, 55, 35, 24, 19]
- sort(): 오름차순
- 배열[::-1]: 내림차순
- np.flip(배열): 내림차순
e = np.array([35,24,55],
[69,19,9],
[4,1,11]])
e.sort()
# [[24,35,55],
# [9,19,69],
# [1,4,11]]
e.sort(axis=0)
# [[4,1,9],
# [35,19,11],
# [69,24,55]]
- 2차원 배열에 sort() 메소드 사용하면 원소들은 기본적으로 axis = 1 방향으로 오름차순 정렬
e = np.array([[35,24,55],
[69,19,9],
[4,1,11]])
4.2 평균값과 중앙값을 알아보자
- 평균: 데이터의 중심에 있는 수치로 데이터의 전체적인 경향을 나타내는 정보
- 산술평균: 데이터의 합을 데이터의 개수로 나눈 값을 통계학에서 부르는 용어
- 평균과 같이 데이터의 전체적인 경향을 나타내는 정보를 대표값이라고 함
평균과 중앙값 계산하기
- mean(): 평균
- median(): 중앙값
- 중앙값: 다차원 배열의 값을 가장 작은 값부터 큰 값까지 늘어 놓았을 때 가장 가운데에 있는 항목
- 이상치: 비정상적으로 큰 값이나 작은 값
4.3 중앙값과 최빈값을 알아보자
중앙값은 이상치의 영향을 덜 받기 때문에, 데이터의 실제 중심 경향을 더 잘 나타내는 경우가 많음
최빈값은 데이터 집합 내에서 가장 일반적이거나 흔한 경우를 파악할 때 유용
bincount()
- bincount(): 각 자료값의 빈도수를 반환하는 함수
a = np.array([2,3,4,4,5,5,5,6,6])
np.bincount(a)
# [0,0,1,1,2,3,2]
argmax()
- argmax(): 넘파이 다차원 배열에서 가장 큰 값의 인덱스 반환
a = np.array([2,3,4,4,5,5,5,6,6])
np.argmax([0,0,1,1,2,3,2])
# 5
mode = np.argmax(np.bincount(a))
# 5
사이파이(scipy)
사이파이(scipy): 과학 기술 계싼을 위한 파이썬 라이브러리
- 최빈값을 구하기 위해 더 효율적인 방법은 사이파이 파이썬 패키지에 있는 state 서브 모듈의 mode()함수 사용하는 것
- mode() 함수는 주어진 다차원 배열의 최빈값과 최빈값의 출현 횟수도 반환
from scipy import stats
import numpy as np
print(stats.mode(a))
# ModeResult(mode=5, count=3)
print(mode.count)
# 3
4.4 분산과 편차를 알아보자
np.var()
- 분산: 각 값이 평균값에서 얼마나 멀리 퍼져있는지, 값의 일관성과 균일성 파악 가능
분산 구하는 법 = (관측값 - 평균) ** 2 / n
- 편차: 각 관측값과 평균과의 차이 (관측값 - 평균)
np.std()
- 분산을 통해서 데이터가 평균값 주변에 모여있는 정도를 측정할 수 있으나, 결국 이 값은 편차 제곱의 평균값이므로 실제 데이터의 변동성을 나타내는 값과는 동떨어진 값이 될 수 있음
- 표준편차: 분산의 제곱근
4.5 평균, 분산, 표준편차를 알아보자
4.6 난수와 의사난수
- 실세계의 관측을 통해서 데이터를 획득하려면 많은 비용이 필요하며 장시간의 관측이 필요한 경우가 많음
- 난수: 인간의 의도와 무관하게 생성된 수, 인간이 만든 기계의 특정한 알고리즘을 통해서 난수를 생성한다는 것은 모순
- 의사난수: 진정한 의미의 난수가 아니지만 난수와 유사한 기능을 한다.
- 시드값: 난수를 생성하는 코드에는 다음 난수를 생성하기 위한 최초값이 필요함 이를 시드값이라고 한다.
import numpy as np
np.random.rand(5) # 0에서 1 사이의 난수 5개를 생성
np.random.rand(2,3) # [2,3]인 난수로 이루어진 다차원 배열
np.random.randint(150, 191, size=10)
# 키가 150~190 사이인 10개의 데이터 생성
4.7 난수와 정규분포
난수의 중요성
- 실험 및 시뮬레이션: 복잡한 시스템 동작 이해하고 예측하는데 중요
- 알고리즘 테스트 및 검증
- 데이터 샘플링
- 머신러닝과 딥러닝
난수를 사용하면 실제 데이터에 거의 가까운 데이터를 쉽게 생성할 수 있음
- 통계학에서 가장 중요한 확률 분포인 정규분포는 자연현상, 사회현상에서 존재하는 다양한 무작위 분포를 설명하는데 많이 사용됨
randn()
넘파이에서 제공하는 정규분포 함수
np.random.seed(42)
np.random.randn(4) # 4개의 난수 생성 -> 난수는 정규분포 따름
- 인자로 넘어온 개수만큼의 난수를 발생시키는데, 이 난수들은 평균이 0이고 표준편차가 1인 표준정규분포 따르게 됨
10 + np.random.randn(4)
# 평균이 10인 4개의 난수 생성 -> 이 난수는 정규 분포를 따름
3 * np.random.randn(4)
# 표준편차가 3인 4개의 난수 생성 -> 이 난수는 정규 분포를 따름
4.8 다양한 난수 생성 기능
np.random.randint(1, 7, size=5)
# 1에서 6 사이의 난수 5개 생성
np.random.randint(1, 7, size=(2,6))
random 서브 모듈에 포함된 중요한 난수 관련 함수들
- permutaion()의 경우 인자로 들어오는 다차원 배열을 복사해서 섞어주지만, shuffle()은 다차원 배열을 섞는 일을 인플레이스로 함
- 인플레이스: 새로운 배열을 만드는 것이 아니라 배열 자체의 원소값을 변화시키는 기능
4.9 리덕션: 강력한 배열 연산
리덕션
여러 개의 수로 이루어진 배열을 하나의 수로 집계하는 기능
- 넘파이의 리덕션은 적용되는 축을 지정하여 이루어짐
- axis = (0,1)과 같이 축을 두 개 모두 주면 전체 리덕션이 이루어짐
np.sum(arr, aixs=0)
arr.sum(axis=0)
# 둘의 결과는 같음
- 리덕션 연산은 벡터화 연산을 통해 이루어지므로 높은 성능을 보임
- 넘파이는 벡터화 연산, 리덕션을 통해 대규모 수치 배열에 대한 빠른 계산 기능을 제공
4.10 상관관계 계산하기
- 상관관계: 키와 몸무게, 연간 소득과 보유한 자동차의 가격 등 상호 의존성이 있는 관계에서 의존성의 정도를 말함
- 상관계수: 상관관계를 -1에서 1 사이의 수치값으로 나타낸 것
corrcoef(x, y)
- 여기서 x와 y는 데이터를 담고 있는 리스트 또는 배열
- 완전한 음의 상관관계: 상관계수 -1
- 상관관계가 전혀 없을 때: 상관계수 0
- 완전한 양의 상관관계: 상관계수 1
선형함수
만일 x 값과 y 값 사이에 y=2x 라는 상관관계가 있을 경우, x가 1만큼 증가할 때 y는 2만큼 증가하는 특징이 있다.
이러한 관계를 가지는 함수를 선형함수라고 함.
- 선형 함수 관계에 있는 두 변수들은 완벽한 의존관계가 있기 때문에 상관계수는 1
728x90
'Data > Bigdata' 카테고리의 다른 글
[Bigdata] 5. 맷플롯립 알아보기 (0) | 2025.04.28 |
---|---|
[Bigdata] 슬라이싱 정리 (0) | 2025.04.28 |
[Bigdata] 3. 넘파이 시작하기 (1) | 2025.04.27 |
[Bigdata] 2. 데이터 분석을 위한 도구 (0) | 2025.04.27 |
[Bigdata] 1. 빅데이터로 통하는 세상 (0) | 2025.04.27 |