[Bigdata] 4. 넘파이의 세계로

2025. 4. 28. 01:59·Data/Bigdata
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 난수와 정규분포

난수의 중요성

  1. 실험 및 시뮬레이션: 복잡한 시스템 동작 이해하고 예측하는데 중요
  2. 알고리즘 테스트 및 검증
  3. 데이터 샘플링
  4. 머신러닝과 딥러닝
난수를 사용하면 실제 데이터에 거의 가까운 데이터를 쉽게 생성할 수 있음

  • 통계학에서 가장 중요한 확률 분포인 정규분포는 자연현상, 사회현상에서 존재하는 다양한 무작위 분포를 설명하는데 많이 사용됨

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
'Data/Bigdata' 카테고리의 다른 글
  • [Bigdata] 5. 맷플롯립 알아보기
  • [Bigdata] 슬라이싱 정리
  • [Bigdata] 3. 넘파이 시작하기
  • [Bigdata] 2. 데이터 분석을 위한 도구
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (434) N
      • App·Android (1)
      • BE (49) N
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (11)
        • 스프링부트 시큐리티 & JWT (0)
        • PHP (11) N
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (27) N
        • AI (7)
        • Bigdata (6)
        • Database (1)
        • 빅데이터분석기사 (12) N
      • Infra (0)
      • Activity (2)
        • Education (0)
        • Intern (0)
        • 리모트 인턴십 6기 (2)
        • 구름톤 유니브 4기 (0)
        • SW교육기부단 15기 (0)
        • SK AI Dream Camp (0)
      • CS (8)
      • 취준 (13)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (3)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 회고 (0)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    너비우선탐색
    그리디알고리즘
    최단경로
    자료구조
    그래프이론
    그래프탐색
    정렬
    구현
    문자열
    수학
    이분탐색
    시뮬레이션
    매개변수탐색
    투포인터
    오블완
    다이나믹프로그래밍
    티스토리챌린지
    백준
    브루트포스 알고리즘
    누적합
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[Bigdata] 4. 넘파이의 세계로
상단으로

티스토리툴바