[데이터분석]5.numpy

넘파이 리스트 vs 파이썬 리스트

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()

import matplotlib.pyplot as plt
t = []
p2 = []
p3 = []
for i in range(0, 50, 2):
    t.append(i/10)
    p2.append((i/10)**2)
    p3.append((i/10)**3)
plt.plot(t, t, 'r--', t, p2, 'bs', t, p3, 'g^')
plt.show()

1. numpy 라이브러리

- 제곱근

import numpy as np
print(np.sqrt(2))

- 파이

import numpy as np
print(np.pi)
print(np.sin(0))
print(np.cos(np.pi))

- 랜덤한 수

import numpy as np
a = np.random.rand(5)
print(a)
print(type(a))

  • numpy.ndarray : N-Dimensional, n차원

    ⭐️ rand() : 실수로 나옴

import numpy as np
print(np.random.choice(6,10))
#[1 2 5 2 5 4 2 5 4 3]

⭐️ choice(n, m) : 0 ~ n-1까지의 숫자를 m번 반복하여 선택

import numpy as np
print(np.random.choice(10, 6, replace=False))
#[0 6 1 5 4 8]

⭐️ replace=False 로 설정하여 중복값을 뽑지 못하게 설정

import numpy as np
print(np.random.choice(6, 10, p=[0.1, 0.2, 0.3, 0.2, 0.1, 0.1]))
#[0 4 2 2 2 2 4 2 1 1]

⭐️ p : 확률 설정
0은 0.1, 1은 0.2, 2는 0.3 등으로 확률 설정할 수 있음

-그래프 그리기

1) 히스토그램

import numpy as np
import matplotlib.pyplot as plt

dice = np.random.choice(6, 10)
plt.hist(dice, bins=6)
plt.show()

import numpy as np
import matplotlib.pyplot as plt

dice = np.random.choice(6, 1000000, p=[0.1,0.2,0.3,0.2,0.1,0.1]) # 설정한 확률에 따라 값들 출력됨
plt.hist(dice, bins=6)
plt.show()

  • 확률 설정 및 10만번 수행

2) 버블차트로 표현

import numpy as np
import matplotlib.pyplot as plt
x = np.random.randint(10, 100, 100)
y = np.random.randint(10, 100, 100)
size = np.random.rand(100) * 100

plt.scatter(x, y, s=size, c=x, cmap='jet', alpha=0.7)
plt.colorbar()
plt.show()

  • np.random.randint(10, 100, 100) : [10, 100)까지의 수를 200회 추출하겠다는 의미
    • np.random.rand(n) : 0~1사이에 있는 n개의 실수를 만들겠다
    • np.random.randint(a,b,n) : a 이상 b 이하의 n개의 정수를 만들겠다.
import matplotlib.pyplot as plt
import random

x = []
y = []
size = []

for i in range(200):
    x.append(random.randint(10,100))
    y.append(random.randint(10,100))
    size.append(random.randint(10,100))
    
plt.scatter(x, y, s=size, c=x, cmap='jet', alpha=0.7)
plt.colorbar()
plt.show()

  • numpy 미이용한 코드

- numpy array

  • ndarray : numpy 배열
import numpy as np
a = np.array([1,2,3,4])
print(a)
#[1 2 3 4]
print(a[1], a[-1])
# 2 4
print(a[1:]
#[2 3 4]
  • 넘파이 배열은 리스트 내 쉼표가 없음
  • 인덱싱, 슬라이싱 가능
  • 한 가지 타입의 데이터만 저장 가능함
import numpy as np
a = np.array([1,2,'3',4])
print(a) #['1' '2' '3' '4'] 문자열로 모두 치환됨
  • 배열 초기화하기
    1) zeros(), ones(), eye() : 0과 1로만 배열 초기화
import numpy as np
a = np.zeros(10) # 0으로 이루어진 크기가 10인 배열 생성
b = np.ones(10) # 1로 이루어진 크기가 10인 배열 생성
c = np.eye(3) # 3X3행렬 생성
print(a) #[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
print(b) #[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
print(c) 
#[[1. 0. 0.]
#[0. 1. 0.]
#[0. 0. 1.]]

2) arange() 이용 : 특정 간격에 해당하는 값 생성

import numpy as np
print(np.arange(3)) #[0 1 2] n-1한 값까지로 배열 생성
print(np.arange(3,7) #[3 4 5 6] 첫번째 숫자부터 두번째 숫자-1까지 배열 생성
print(np.arange(3,7,2)) #[3 5] 일정한 간격을 두고 배열 생성

3)linspace() 이용 : 특정 개수의 구간으로 나눈 값 생성

import numpy as np
a = np.arange(1, 2, 0.1) # 1부터 2미만까지 0.1 간격으로 실수 생성
b = np.linspace(1, 2, 11) # 1부터 2까지 11개 구간으로 나눈 실수 생성
print(a) #[1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9]
print(b) #[1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. ]
import numpy as np
a = np.arange(-np.pi, np.pi, np.pi/10)
b = np.linspace(-np.pi, np.pi, 20)
print(a)
print(b)

-array의 다양한 활용

  1. 연산 적용
import numpy as np
a = np.zeros(10) + 5
print(a) #[5. 5. 5. 5. 5. 5. 5. 5. 5. 5.]
  1. 함수 적용
import numpy as np
a = np.linspace(1, 2, 11)
print(np.sqrt(a)) # [1. 1.04880885 1.09544512 1.14017543 1.18321596 1.22474487 1.26491106 1.30384048 1.34164079 1.37840488 1.41421356]
  • 배열에 어떤 연산이나 함수를 적용할 때 배열의 모든 값이 한꺼번에 계산됨
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(-np.pi, np.pi, np.pi/100)
plt.plot(a, np.sin(a))
plt.show()

  • pi값을 기준으로 특정 범위 생성
  • 범위 내 숫자들을 pi값을 100으로 나눈 만큼 간격을 두어 배열 a에 저장
  • sin()함수를 a에 저장된 값 전체에 적용 후 그래프로 표현함
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(-np.pi, np.pi, np.pi/100)

plt.plot(a, np.sin(a))
plt.plot(a, np.cos(a))
plt.plot(a+np.pi/2, np.sin(a)) # sin그래프 평형 이동
plt.show()

- 마스크(mask)

  • 조건에 부합하는 데이터만 선별적으로 저장
import numpy as np
a = np.arange(-5, 5)
print(a<0) #[ True  True  True  True  True False False False False False]
print(a[a<0]) # 마스크 적용
#[-5 -4 -3 -2 -1]

mask1 = abs(a) > 3 #절댓값 이용
print(a[mask1]) #[-5 -4  4]

mask1 = abs(a) > 3
mask2 = abs(a) % 2 == 0

print(a[mask1+mask2]) # 둘 중 조건이 하나라도 참인 경우
#[-5 -4 -2  0  2  4]
print(a[mask1*mask2]) # 두 개 모두 참인 경우
#[-4  4]

버블차트 그려보기

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randint(-100, 100, 1000)
y = np.random.randint(-100, 100, 1000)
size = np.random.randint(3) * 100

mask1 = abs(x) > 50
mask2 = abs(y) > 50
x = x[mask1+mask2]
y = y[mask1+mask2]

plt.scatter(x,y,s=size,c=x,cmap='jet',alpha=0.7)
plt.colorbar()
plt.show()

좋은 웹페이지 즐겨찾기