반응형
# # Data 분석을 위한 패키지
# 1. NumPy
# - Numerical Python
# - 과학계산용 패키지
# - 특징
# - 빠르고 효율적인 다차원 배열 객체 ndarray (n-dimensional array)
# - `[[1, 2], [1, 2], [[1, 2], [3, 4]]]`
# - 데이터 분석 시 데이터 컨테이너 역할(데이터를 담는 그릇)
# - 설치
# - `pip install numpy`
# 1. pandas
# - 금융회사에 다니고 있던 Wes McKinney가 처음에 금융 데이터 분석을 위해 설계(2008년)
# - pandas: 계량 경제학 용어인 Panel Data와 Analysis의 합성어
# - Panel Data<sup>1</sup>
# - multi-dimensional data involving measurements over time (Wikipedia)
# - 구조화된 데이터를 빠르고 쉬우면서 다양한 형식으로 가공할 수 있는 풍부한 자료 구조와 함수를 제공한다.
# - pandas의 기본 구조는 NumPy로 되어있다.
# - 설치
# - `pip install pandas`
# 1. matplotlib/seaborn/bokeh
# - 시각화 도구
# - 설치
# - `pip install matplotlib`
# - `pip install seaborn`
# - `pip install bokeh`
#
# 1. SciPy
# - 과학 계산용 패키지
# - 최적화, 선형대수, 적분 등 과학 계산에 쓰이는 대부분이 있음
# - Numpy extension of Python
#
# 1. scikit-learn
# - SciPy에 기반한 머신러닝 프레임워크
# ![](<a href=https://www.altexsoft.com/media/2017/08/%5E4275D3AF463329B3C66C6157C233DBF8F6B2BCCF49CC64ABE9%5Epimgpsh_fullsize_distr.png>https://www.altexsoft.com/media/2017/08/%5E4275D3AF463329B3C66C6157C233DBF8F6B2BCCF49CC64ABE9%5Epimgpsh_fullsize_distr.png</a>)
![](<a href=https://www.altexsoft.com/media/2017/08/%5E4275D3AF463329B3C66C6157C233DBF8F6B2BCCF49CC64ABE9%5Epimgpsh_fullsize_distr.png>https://www.altexsoft.com/media/2017/08/%5E4275D3AF463329B3C66C6157C233DBF8F6B2BCCF49CC64ABE9%5Epimgpsh_fullsize_distr.png</a>)
# ---
# # NumPy: 배열과 벡터 계산
# ### NumPy Documentation
#
# [Tutorials](https://docs.scipy.org/doc/numpy/user/quickstart.html)
# #### Numerical Python의 줄임말
#
# 1. 빠르고 효율적인 메모리 사용, 벡터 연산, 브로드캐스팅(확대) 기능을 제공하는 다차원 배열인 ndarray (n dimentional array)를 제공
# 1. for 문 등 반복문을 작성할 필요없이 전체 배열에 대해 빠른 연산을 제공
# 1. 배열 데이터를 디스크에 쓰거나 읽을 수 있는 도구
# 1. 선형대수, 난수 발생기, 푸리에(Fourier) 변환 기능
# 1. C, C++, 포트란 등 다른 언어로 쓰여진 코드를 통합하는 도구
# #### 데이터 분석에서 빠른 연산을 위해 자주 사용하는 기능
#
# 1. 배열에서 데이터 변경, 정제, 부분 집합, 필터링의 빠른 수행
# 2. 정렬, 유일 원소 찾기, 집합 연산
# 3. 통계 표현과 데이터의 수집/요약
# 4. 여러 데이터의 병합, 데이터 정렬과 데이터 조작
# #### 표준 NumPy의 컨벤션을 import numpy as np로 사용
# ---
# # 1. NumPy ndarray: 다차원 배열 객체
# ### 1.1 ndarray 사용
# In[ ]:
import numpy as np
# In[ ]:
lst = [1, -2, -3, 4, 5, 6]
# In[ ]:
arr = np.array(lst)
arr
# In[ ]:
arr * 3
# In[ ]:
arr + arr
# #### <참고> 파이썬 리스트의 산술 연산
# In[ ]:
lst * 3
# In[ ]:
lst + lst
# ### 1.2 ndarray 생성
# In[ ]:
# 1차원 배열
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
arr1
# In[ ]:
# 2차원 배열
data2 = [[1,2,3,4], [5,6,7,8]]
arr2 = np.array(data2)
arr2
# In[1]:
arr1.ndim
arr2.ndim
# In[ ]:
arr1.shape
arr2.shape
# In[ ]:
arr2.reshape((4,2))
# In[ ]:
arr2.ravel()
# In[ ]:
arr2.flatten() # 항상 복사본 생성
# #### <참고> np.array는 생성될 때 적절한 자료형을 선택한다.
# In[ ]:
arr1.dtype
arr2.dtype
# #### np.zeros(): 0 으로 초기화된 배열 생성
# In[ ]:
np.zeros(10)
# In[ ]:
np.zeros((3,6)) ## 3행 6열
# #### np.empty(): 초기화 되지 않은 배열 생성
# In[ ]:
np.empty((2,5))
# #### np.arange(): 파이썬 range() 함수의 배열 버전
# In[ ]:
np.arange(15)
# 함수| 설명
# :---| :---
# array | 입력 데이터(리스트, 튜플, 배열 또는 다른 순차형 데이터)를 ndarray로 변환하며 dtype이 명시되지 않은 경우에는 자료형을 추론하여 저장한다. 기본적으로 입력 데이터는 복사된다.
# asarray | 입력 데이터를 ndarray로 변환하지만 입력 데이터가 이미 ndarray일 경우, 복사가 되지 않는다.
# arange | 내장 range 함수와 유사하지만 리스트 대신 ndarray를 반환한다.
# ones, ones_like | 주어진 dtype과 주어진 모양을 가지는 배열을 생성하고 내용을 모두 1로 초기화한다. ones_like는 주어진 배열과 동일한 모양과 dtype을 가지는 배열을 새로 생성하여 내용을 모두 1로 초기화한다.
# zeros, zeros_like | ones, ones_like와 같지만 내용을 0으로 채운다.
# empty, empty_like | 메모리를 할당하여 새로운 배열을 생성하지만 ones나 zeros처럼 값을 초기화하지는 않는다.
# eye, identity | N x N 크기의 단위 행렬을 생성한다(좌상단에서 우하단을 잇는 대각선은 1로 채워지고 나머지는 0으로 채워진다).
# ### 1.3 ndarray의 자료형
# dtype로 자료형을 알 수 있다.
#
# - 산술 데이터의 dtype은 float, int 같은 자료형의 이름과 하나의 원소가 차지하는 비트로 이루어짐
# - 파이썬의 float 객체에서 사용되는 부동소수점 값은 8바이트 혹은 64바이트로 이루어짐
# - [NumPy 자료형](http://docs.scipy.org/doc/numpy/user/basics.types.html)
# In[ ]:
arr1 = np.array([1,2,3], dtype=np.float32)
arr1
# In[ ]:
arr2 = np.array([1,2,3], dtype=np.float64)
arr2
# In[ ]:
arr1.dtype, arr2.dtype
# #### 타입 변경: astype() 메소드
# In[ ]:
arr = np.array([1,2,3,4,5])
arr
# In[ ]:
arr.dtype
# In[ ]:
f_arr = arr.astype(np.float64)
f_arr
# In[ ]:
f_arr.dtype
# In[ ]:
arr.dtype
# In[ ]:
arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
arr
# In[ ]:
arr.astype(np.int32)
# In[ ]:
num_str = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
# In[ ]:
num_str
# In[ ]:
num_str.astype(float)
# #### <참고> dtype 축약코드
#
# 종류 | Type Code | 설명
# :---|:---|:---
# int8, uint8 | i1, u1 | 부호가 있는 8비트(1바이트) 정수형과 부호가 없는 8비트 정수형
# int16, uint16 | i2, u2 | 부호가 있는 16비트 정수형과 부호가 없는 16비트 정수형
# int32, uint32 | i4, u4 | 부호가 있는 32비트 정수형과 부호가 없는 32비트 정수형
# int64, uint64 | i8, u8 | 부호가 있는 64비트 정수형과 부호가 없는 64비트 정수형
# float16 | f2 | 반정밀도 부동소수점
# float32 | f4 or f | 단정밀도 부동소수점 C 언어의 float 형과 호환
# float64 | f8 or d | 배정밀도 부동소수점 C 언어의 double 형과 파이썬의 float 객체와 호환
# float128 | f16 or g | 확장 정밀도 부동소수점
# bool | ? | True, False 값을 저장하는 불리언형
# object | O | 파이썬 객체형
# string_ | S | 고정 길이 문자열형, 길이가 10인 문자열의 dtype은 S10
# unicode_ | U | 고정 길이 유니코드형(예: U10)
#
# In[ ]:
emp_uint32 = np.empty(8, dtype='u4')
emp_uint32
# ### 1.4 배열과 스칼라 간의 연산
# - **배열은 for 반복문을 작성하지 않고 데이터를 일괄처리할 수 있다(벡터화)**
# - 같은 크기의 배열 간 산술연산은 배열의 각 요소 단위로 적용
# In[ ]:
arr = np.array([[1., 2., 3.], [4., 5., 6.]])
# In[ ]:
arr * 3
# In[ ]:
arr * arr
# In[ ]:
arr - arr
# In[ ]:
1 / arr
# In[ ]:
# **는 square root of x
arr ** 0.5
# ### 1.5 인덱싱(색인)과 슬라이싱
# In[ ]:
arr = np.arange(10)
arr
# In[ ]:
arr[5]
# In[ ]:
arr[5:8]
# In[ ]:
arr[5:8] = 12
# In[ ]:
arr
# #### 브로드캐스팅
# - arr[5:8] = 배열에 스칼라 값을 대입하면 이 값이 필요한 만큼 복사되어 확산 전파
# - 파이썬 리스트는 브로드캐스팅 불가
#
# #### 배열 조각은 원본 배열의 View를 리턴 (파이썬 리스트의 슬라이싱은 복사본을 리턴)
#
# - 즉, 데이터는 복사되지 않으며 뷰에 대한 변경은 그대로 원본 배열에 반영
# - 복사본이 필요할 경우 arr[5:8].copy()를 사용
# #### Slicing : 사용 예
#
# - [:]: 배열 전체
# - [0:n]: 0번째부터 n-1번째까지, 즉 n번 항목은 포함하지 않는다.
# - [:5]: 0번째부터 4번째까지,5번은 포함하지 않는다.
# - [2:]: 2번째부터 끝까지
# - [-1]: 제일 끝에 있는 배열값 반환
# - [-2]: 제일 끝에서 두번째 값 반환
# In[ ]:
arr = np.arange(10)
arr
# In[ ]:
arr_cp = arr[5:8].copy()
# In[ ]:
arr_cp[:] = 128
arr_cp
# In[ ]:
arr
# #### 2차원, 3차원 배열 제어
# In[ ]:
arr2d = np.array([[1,2,3], [4,5,6], [7,8,9]])
# In[ ]:
arr2d.ndim
# In[ ]:
arr2d[2]
# In[ ]:
arr2d[0][2]
# In[ ]:
# ,로도 구분 가능
arr2d[0, 2]
# In[ ]:
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr3d
# In[ ]:
arr3d.ndim
# In[ ]:
arr3d[0]
# In[ ]:
arr_org = arr3d[0].copy()
arr_org
# In[ ]:
arr3d[0] = 42
# In[ ]:
arr3d
# In[ ]:
arr3d[0] = arr_org
# In[ ]:
arr3d
# In[ ]:
arr3d[1, 0]
# #### 슬라이스 색인
# In[ ]:
arr = np.arange(10)
arr
# In[ ]:
arr[1:6]
# In[ ]:
arr2d = np.array([[1,2,3], [4,5,6], [7,8,9]])
arr2d
# In[ ]:
arr2d[:2]
# #### arr2d[:2, 1:]
# 행, 열
#
# - 같은 [ ] 안에서는 행과 열 구분
# In[ ]:
arr2d[:2, 1:]
# In[ ]:
arr2d[:2][1:]
# In[ ]:
arr2d[1, :2]
# In[ ]:
arr2d[2, :1]
# In[ ]:
arr2d[:, :1]
# In[ ]:
arr2d[:2, 1:] = 0
# In[ ]:
arr2d
# ### 1.6 불리언 색인
# In[ ]:
data = np.arange(28)
data=data.reshape(7,4)
# In[ ]:
data
# In[ ]:
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
# In[ ]:
names
# In[ ]:
names == 'Bob'
# In[ ]:
data[names == 'Bob']
# In[ ]:
names2 = np.array(['Bob', 'Joe', 'Will'])
# In[ ]:
names2 == 'Bob'
# In[ ]:
data[names2 == 'Bob']
# In[ ]:
data[names == 'Bob', 2:]
# In[ ]:
data[names == 'Bob', 3]
# #### != , ~ 으로 부정
# In[ ]:
names != 'Bob'
# In[ ]:
data[~(names == 'Bob')]
# In[ ]:
names
# In[ ]:
mask = (names == 'Bob') | (names == 'Will')
# In[ ]:
mask
# In[ ]:
data[mask]
# In[ ]:
data[mask, 3:]
# #### 불리언 색인시 항상 데이터 복사
#
# - 파이썬 예약어인 and, or는 불리언 배열에서는 사용 불가
# In[ ]:
data[data < 5] = 0
# In[ ]:
data
# In[ ]:
data[names == 'Bob'] = 7
# In[ ]:
data
# ### 1.7 팬시 색인
# In[ ]:
arr = np.empty((8, 4))
# In[ ]:
for i in range(8):
arr[i] = i
# In[ ]:
arr
# In[ ]:
# 특정한 순서로 로우 선택
arr[[4, 3, 0, 6]]
# In[ ]:
arr[[-2, -3]]
# In[ ]:
np.arange(32)
# In[ ]:
arr = np.arange(32).reshape((8, 4))
# In[ ]:
arr
# In[ ]:
# 1개 항목을 선택
# (1, 0), (5, 3), (7, 1), (2, 2)에 대응하는 요소가 선택
arr[[1, 5, 7, 2], [0, 3, 1, 2]]
# In[ ]:
# 특정 행들을 선택하고 이의 열의 순서를 바꾸는 경우
# 1, 5, 7, 2 행을 선택
# 컬럼 열에서 :,로 모든 행을 선택해 주어야 한다.
# 0, 3, 1, 2 열을 순서대로 선택
arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
# In[ ]:
# np.ix_ 사용하는 방법
arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]
# ### 1.8 배열 전치와 축 바꾸기
# In[ ]:
arr = np.arange(15).reshape((3, 5))
arr
# In[ ]:
arr.T # 행과 열을 바꿔준다.
# In[ ]:
arr.transpose() # T와 같은 역할을 한다.
# In[ ]:
arr = np.random.randn(6, 3)
arr
# In[ ]:
arr.T
# In[ ]:
np.dot(arr.T, arr) # arr.T 3 * 6 행렬 곱하기 arr 6 * 3 행렬의 결과값이다.
# ---
# # 2. 유니버설 함수
# - ufunc 유니버설 함수는 ndarray 안에 있는 데이터 원소별로 연산을 수행하는 함수
# - 유니버설 함수는 하나 이상의 스칼라 값을 받아서 하나 이상의 스칼라 결과 값을 반환하는 간단한 함수를 고속으로 수행할 수 있는 벡터화된 래퍼 함수
# ### 2.1 단항 유니버설 함수
# In[ ]:
import numpy as np
# In[ ]:
arr = np.arange(10)
# In[ ]:
np.sqrt(arr)
# In[ ]:
arr
# In[ ]:
np.exp(arr)
# ### 2.2 이항 유니버설 함수
# In[ ]:
x = np.random.randn(8)
# In[ ]:
y = np.random.randn(8)
# In[ ]:
x
# In[ ]:
y
# In[ ]:
np.maximum(x, y)
# #### [Universal functions](http://docs.scipy.org/doc/numpy/reference/ufuncs.html)
# ---
# # 3. 배열을 사용한 데이터 처리
# - 반복문 작성하지 않고 간결한 배열연산을 통해 많은 종류의 데이터 처리 작업
# - **벡터화:** 배열연산을 사용해서 반복문을 명시적으로 제거하는 기법
# - 순수 파이썬보다 2~3배, 많게는 수십, 수백 배까지 빠르다.
# - **브로드캐스팅:** 아주 강력한 벡터 연산 방법
# ### 3.1 벡터화
# In[ ]:
import numpy as np
# In[ ]:
points = np.arange(100000, dtype='f')
points[:10]
# In[ ]:
get_ipython().run_cell_magic('time', '', 'total = 0\nfor i in points:\n total += i\nprint(total)')
# In[ ]:
get_ipython().run_line_magic('time', 'points.sum()')
# ### 3.2 배열연산으로 조건절 표현하기
# In[ ]:
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
# In[ ]:
result = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]
result
# In[ ]:
result = np.where(cond, xarr, yarr)
result
# In[ ]:
arr = np.random.randn(4, 4)
arr
# In[ ]:
np.where(arr > 0, 2, -2)
# In[ ]:
np.where(arr > 0, 2, arr)
# ### 3.3 수학 메서드와 통계 메서드
# In[ ]:
arr = np.random.randn(5, 4)
arr
# In[ ]:
arr.mean()
# In[ ]:
np.mean(arr)
# In[ ]:
arr.sum()
# #### 연산을 진행할 축을 선택( 행방향: axis = 0, 열방향: axis = 1) - Default: axis = 0
# In[ ]:
arr.sum(axis=0)
# In[ ]:
arr.sum(0)
# In[ ]:
arr.sum(axis=1)
# In[ ]:
arr.sum(1)
# In[ ]:
arr.mean(axis=1)
# #### 누적연산 - cumsum(), cumprod(): 중간 계산 값을 담고 있는 배열을 반환
# In[ ]:
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
arr
# In[ ]:
arr.cumsum(axis=0)
# In[ ]:
arr.cumprod(axis=1)
# In[ ]:
arr.cumprod(axis=0)
# #### 기본 배열 통계 메서드
#
# 메세드 | 설명
# :---|:---
# sum | 배열 전체 혹은 특정 축에 대한 모든 원소의 합을 계산한다.
# mean | 산술평균을 구한다. 크기가 0인 배열에 대한 mean 결과는 NaN이다.
# std, var | 각각 표준편차와 분산을 구한다.
# min, max | 최소값, 최대값
# argmin, argmax | 최소 원소의 색인 값, 최대 원소의 색인 값
# cumsum | 각 원소의 누적 합
# cumprod | 각 원소의 누적 곱
#
# ### 3.4 불리언 배열을 위한 메서드
# - 불리언 값은 True = 1, False = 0 으로 취급
# - 불리언 배열에 대한 sum 메서드를 실행하면 True인 원소의 개수를 반환
# In[ ]:
arr = np.random.randn(100)
# In[ ]:
(arr > 0).sum()
# In[ ]:
arr[:10]
# In[ ]:
bools = np.array([False, False, True, False])
# In[ ]:
# 하나라도 True 이면 결과는 True
bools.any()
# In[ ]:
# 모두 True 이면 결과는 True
bools.all()
# In[ ]:
bools = np.array([True, True, True, True])
# In[ ]:
bools.any()
# In[ ]:
bools.all()
# #### 배열의 값이 0 이면 False, 그 외 나머지는 모두 True로 취급
# In[ ]:
arr.any()
# In[ ]:
arr.all()
# ### 3.5 정렬
# In[ ]:
arr = np.random.randn(8)
arr
# In[ ]:
# <참고> 원본을 변경하지 않음
np.sort(arr)
# In[ ]:
arr
# In[ ]:
arr.sort()
arr
# #### 다차원 배열의 정렬
# In[ ]:
arr = np.random.randn(5, 3)
arr
# In[ ]:
# axis = 0: 세로방향 정렬(column sort)
arr.sort(axis=0)
arr
# In[ ]:
# axis = 1: 가로방향 정렬(row sort)
arr.sort(axis=1)
arr
# ### 3.6 집합 함수
# In[ ]:
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
# In[ ]:
np.unique(names)
# In[ ]:
ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])
# In[ ]:
np.unique(ints)
# #### np.in1d()
# In[ ]:
values = np.array([6, 0, 0, 3, 2, 5, 6])
# In[ ]:
np.in1d(values, 2)
# In[ ]:
np.in1d(values, [2, 3, 6])
# #### 배열 집합 연산
#
# Method | Comment
# :---|:---
# unique(x) | 배열 x에서 중복된 원소를 제거한 후 정렬하여 반환한다.
# intersect1d(x, y) | 배열 x와 y에 공통적으로 존재하는 원소를 정렬하여 반환한다.
# union1d(x, y) | 두 배열의 합집합을 반환한다.
# in1d(x, y) | x의 원소 중 y의 원소를 포함하는지를 나타내는 불리언 배열을 반환한다.
# setdiff1d(x, y) | x와 y의 차집합을 반환한다.
# setxor1d(x, y) | 한 배열에는 포함되지만 두 배열 모두에는 포함되지 않는 원소들의 집합인 대칭차집합을 반환한다.
# ---
# # 4. 배열의 파일 입∙출력
# ### 4.1 배열을 바이너리 형식으로 디스크에 저장하기
# In[ ]:
arr1 = np.arange(10)
# In[ ]:
arr2 = np.arange(5)
# In[ ]:
np.save('data/file_arr1.npy', arr1)
# In[ ]:
arr1_l = np.load('data/file_arr1.npy')
arr1_l
# In[ ]:
np.savez('data/array_archive.npz', a=arr1, b=arr2)
# In[ ]:
arch = np.load('data/array_archive.npz')
# In[ ]:
arch['a']
# In[ ]:
arch['b']
# ### 4.2 텍스트 파일 불러오기와 저장하기
# In[ ]:
arr = np.array( [[2.23342715,-0.37376633,-1.05142871],
[-0.57247149,-1.35777871,0.28676036],
[-0.01042671,-0.0211314,-0.72049352]])
# In[ ]:
arr
# In[ ]:
np.savetxt('data/array_ex.txt', arr, delimiter=',')
# In[ ]:
arr_l = np.loadtxt('data/array_ex.txt', delimiter=',')
# In[ ]:
arr_l
# ---
# # 5. 선형대수
# In[ ]:
x = np.array([[1., 2., 3.], [4., 5., 6.]])
# In[ ]:
y = np.array([[6., 23.], [-1, 7], [8, 9]])
# In[ ]:
x
# In[ ]:
y
# In[ ]:
x.shape
# In[ ]:
y.shape
# In[ ]:
# np.dot(x, y)
x.dot(y)
# In[ ]:
from numpy.linalg import inv
# In[ ]:
X = np.random.randn(5, 5)
# In[ ]:
mat = X.T.dot(X)
# In[ ]:
mat
# In[ ]:
inv(mat) # 행렬을 역행렬으로 변환
# In[ ]:
# 행렬 * 역행렬 = 단위 행렬
mat.dot(inv(mat))
# ---
# # 6. 난수 생성
# In[ ]:
samples = np.random.normal(size=(4, 4))
# In[ ]:
samples
# In[ ]:
import random
# In[ ]:
N = 1000000
# In[ ]:
get_ipython().run_line_magic('time', 'samples = [random.normalvariate(0, 1) for _ in range(N)]')
# In[ ]:
samples[:10]
# In[ ]:
get_ipython().run_line_magic('time', 'samples_arr = np.random.normal(size=N)')
# In[ ]:
samples_arr[:10]
# #### numpy.random 함수
#
# 함수 | 설명
# :---|:---
# seed | 난수 발생기의 시드를 지정한다.
# permutation | 순서를 임의로 바꾸거나 임의의 순열을 반환한다.
# shuffle | 리스트나 배열의 순서를 뒤섞는다.
# rand | 균등분포에서 표본을 추출한다.
# randint | 주어진 최소/최대 범위 안에서 임의의 난수를 추출한다.
# randn | 표준편차가 1이고 평균 값이 0인 정규분표에서 표본을 추출한다.
# binomial | 이항분포에서 표본을 추출한다.
# mormal | 정규분포에서 표본을 추출한다.
# beta | 베타분포에서 표본을 추출한다.
# chisquare | 카이제곱분포에서 표본을 추출한다.
# gamma | 감마분포에서 표본을 추출한다.
# uniform | 균등(0,1)분포에서 표본을 추출한다.
#
# ---
# # 7. 예제: 계단 오르내리기
# In[ ]:
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')
# In[ ]:
import random
position = 0
walk = [position]
steps = 1000
for i in range(steps):
step = 1 if random.randint(0, 1) else -1
position += step
walk.append(position)
# In[ ]:
plt.plot(walk[:100])
# In[ ]:
# In[ ]:
nsteps = 1000
draws = np.random.randint(0, 2, size=nsteps)
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum()
# In[ ]:
plt.plot(walk[:100])
# In[ ]:
walk.min()
# In[ ]:
walk.max()
# In[ ]:
(np.abs(walk) >= 10).argmax()
# In[ ]:
np.abs(walk) >= 10
# ---
# In[ ]:
# end of file
# In[ ]:
반응형
LIST
'Programming' 카테고리의 다른 글
[Python][Library] 2 Pandas - 1. 자료구조 (0) | 2022.01.02 |
---|---|
[Python][Library] 1 Numpy - tutorial (0) | 2022.01.02 |
[Python][문법] - 총 정리 (0) | 2021.12.30 |
[Python][문법] 개념 정리 (0) | 2021.12.26 |
[Python][개념] 파이썬 사용 이유 및 특징, 활용처 (0) | 2021.12.25 |