Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- pytorch
- 데이터분석
- 태블로
- tableau
- 딥러닝
- IRIS
- Google ML Bootcamp
- 이코테
- 파이썬
- r
- ML
- scikit learn
- pandas
- SQL
- 데이터분석준전문가
- matplotlib
- SQLD
- Python
- 통계
- ADsP
- 자격증
- 데이터 분석
- 머신러닝
- 회귀분석
- Deep Learning Specialization
- 이것이 코딩테스트다
- 코딩테스트
- 데이터 전처리
- sklearn
- 시각화
Archives
- Today
- Total
함께하는 데이터 분석
[Python] NumPy 본문
안녕하세요!
오늘은 파이썬에서 다차원 배열을 효과적으로 처리할 수 있고
수학 및 과학 연산에 유용한 NumPy 라이브러리에 대해 알아보려고 합니다.
우선 코딩은 주피터 노트북을 활용했습니다!
만약 주피터 노트북을 이용하고 싶으시다면
2022.01.22 - [데이터 분석 공부하기/Python] - [Python] Jupyter Notebook 설치 및 실행
[Python] Jupyter Notebook 설치 및 실행
오늘은 간단하게 Anaconda를 설치하여 주피터 노트북을 실행시키는 방법을 알아볼게요! 우선 아나콘다는 수학과 과학 분야에서 사용되는 여러 패키지들을 묶어 놓은 파이썬 배포판이고 대표적으
tnqkrdmssjan.tistory.com
^^^^
여기를 눌러주시면 됩니다!
그럼 시작해볼게요~
1. NumPy 배열
import numpy as np #numpy 불러오기
ar = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
ar
>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
type(ar)
>>> numpy.ndarray
1-1. 1차원 배열 만들기
ar1 = np.array([1, 2, 3])
ar1
>>> array([1, 2, 3])
print(ar1.ndim) # 배열의 차원
print(ar1.shape) # 배열의 크기
>>> 1
(3,)
1-2. 2차원 배열 만들기
ar2 = np.array([[0, 1, 2], [3, 4, 5]])
ar2
>>> array([[0, 1, 2],
[3, 4, 5]])
print(ar2.ndim) # 배열의 차원
print(ar2.shape) # 배열의 크기 (행, 열)
>>> 2
(2, 3)
1-3. 3차원 배열 만들기
# 2 x 3 x 4 array
ar3 = np.array([[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]],
[[11, 12, 13, 14],
[15, 16, 17, 18],
[19, 20, 21, 22]]])
ar3
>>> array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]],
[[11, 12, 13, 14],
[15, 16, 17, 18],
[19, 20, 21, 22]]])
print(ar3.ndim) # 배열의 차원
print(ar3.shape) # 배열의 크기 (깊이, 행, 열)
>>> 3
(2,3,4)
1-4. 배열의 자료형
ar1 = np.array([1, 2, 3])
ar1.dtype # 배열 원소의 타입
>>> dtype('int32')
ar2 = np.array([1.0, 2.0, 3.0])
ar2.dtype
>>> dtype('float64')
ar3 = np.array([1, 2, 3], dtype = 'f') #float으로 설정
ar3.dtype
>>> dtype('float32')
2-1. 배열의 인덱싱
# 1차원 배열
ar1 = np.array([0, 1, 2, 3, 4])
ar1
>>> array([0, 1, 2, 3, 4])
ar1[2] #파이썬은 0번째부터
>>> 2
ar1[-1] #맨 뒤
>>> 4
# 2차원 배열
ar2 = np.array([[0, 1, 2], [3, 4, 5]])
ar2
>>> array([[0, 1, 2],
[3, 4, 5]])
ar2[0, 1] # 첫 번째 행의 두 번째 열
>>> 1
ar2[-1, -1] # 마지막 행의 마지막 열
>>> 5
2-2. 배열 슬라이싱
ar1 = np.array([[0, 1, 2, 3], [4, 5, 6, 7]])
ar1
>>> array([[0, 1, 2, 3],
[4, 5, 6, 7]])
# 첫 번째 행 전체
ar1[0, :]
>>> array([0, 1, 2, 3])
# 두 번째 열 전체
ar1[:, 1]
>>> array([1, 5])
# 두 번째 행의 두 번째 열부터 끝 열까지
ar1[1, 1:]
>>> array([5, 6, 7])
2-3. 배열 인덱싱(팬시 인덱싱)
# 1차원 배열에서 홀수번째 원소만 추출
ar = np.array([11, 22, 33, 44, 55, 66, 77, 88, 99])
idx = np.array([0, 2, 4, 6, 8])
ar[idx]
>>> array([11, 33, 55, 77, 99])
# 같은 원소를 반복하여 출력 가능
ar = np.array([11, 22, 33, 44, 55, 66, 77, 88, 99])
idx = np.array([0, 0, 0, 0, 1, 1, 1, 1])
ar[idx]
>>> array([11, 11, 11, 11, 22, 22, 22, 22])
# 조건문 연산을 사용하여 원소 추출
ar = np.array([11, 22, 33, 44, 55, 66, 77, 88, 99])
ar[ar % 2 == 0] # 2로 나눠서 나머지가 0
>>> array([22, 44, 66, 88])
# 다차원 배열에서 배열 인덱싱
ar = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
ar
>>> array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
ar[:, [True, False, False, True]]
>>> array([[ 1, 4],
[ 5, 8],
[ 9, 12]])
ar[[2, 0, 1], :] # 행 순서 변경
>>> array([[ 9, 10, 11, 12],
[ 1, 2, 3, 4],
[ 5, 6, 7, 8]])
3. 배열 생성 함수
# 모든 원소가 0인 배열 생성
ar1 = np.zeros(5)
ar1
>>> array([0., 0., 0., 0., 0.])
ar2 = np.zeros((2, 3))
ar2
>>> array([[0., 0., 0.],
[0., 0., 0.]])
# 모든 원소가 1인 배열 생성
ar3 = np.ones((3, 4), dtype = 'int') # int설정
ar3
>>> array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
# 특정 규칙에 따라 증가하는 수열 생성
np.arange(10)
>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(1, 10, 2) # 시작, 끝(포함), 구간
>>> array([1, 3, 5, 7, 9])
np.linspace(0, 100, 5) # 시작, 끝(포함), 개수
>>> array([ 0., 25., 50., 75., 100.])
4-1. 배열의 크기 바꾸기
ar1 = np.arange(12) #0부터 12개 생성
ar1
>>> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
ar2 = ar1.reshape(3, 4)
ar2
>>> array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
4-2. 배열 합치기
# 가로로 합치기
ar1 = np.array([1, 2, 3])
ar2 = np.array([4, 5, 6])
ar3 = np.concatenate([ar1, ar2])
ar3
>>> array([1, 2, 3, 4, 5, 6])
# 세로로 합치기 ar1 = np.arange(4).reshape(1, 4)
ar2 = np.arange(8).reshape(2, 4)
print(ar1, "\n")
print(ar2)
>>> [[0 1 2 3]]
[[0 1 2 3]
[4 5 6 7]]
ar3 = np.concatenate([ar1, ar2], axis = 0) ar3
>>> array([[0, 1, 2, 3],
[0, 1, 2, 3],
[4, 5, 6, 7]])
4-3. 정렬
ar1 = np.array([5, 9, 10, 3, 1])
ar1 = np.sort(ar1) # 오름차순
ar1
>>> array([ 1, 3, 5, 9, 10])
# 내림차순 - sort함수는 내림차순 지원을 안해서 오름차순 정렬 후 아래와 같이 진행
ar1[::-1]
>>> array([10, 9, 5, 3, 1])
ar2 = np.array([[4, 3, 5, 7],
[1, 12, 11, 9],
[2, 15, 1, 14]])
ar2
>>> array([[ 4, 3, 5, 7],
[ 1, 12, 11, 9],
[ 2, 15, 1, 14]])
np.sort(ar2, axis = 0) # axis=0 -> 열
>>> array([[ 1, 3, 1, 7],
[ 2, 12, 5, 9],
[ 4, 15, 11, 14]])
np.sort(ar2, axis = 1) # axis=1 -> 행
>>> array([[ 3, 4, 5, 7],
[ 1, 9, 11, 12],
[ 1, 2, 14, 15]])
5. 기술통계
ar = np.array([18, 5, 10, 23, 12, 7, 2, 15, 8, 6])
ar
>>> array([18, 5, 10, 23, 12, 7, 2, 15, 8, 6])
len(ar) # 데이터의 개수
>>> 10
np.mean(ar) # 평균
>>> 10.6
np.var(ar) # 분산
>>> 37.64
np.std(ar) # 표준편차
>>> 6.135144660071187
np.max(ar) # 최대값
>>> 23
np.min(ar) # 최소값
>>> 2
np.median(ar) # 중앙값
>>> 9.0
print(np.percentile(ar, 25)) # 1사분위수
print(np.percentile(ar, 50)) # 2사분위수 (median)
print(np.percentile(ar, 75)) # 3사분위수
>>> 6.25
9.0
14.25
6-1. 난수생성
# 시드 설정하기
np.random.seed(1234)
np.random.rand(5) # 0과 1사이의 난수 5개 생성
>>> array([0.19151945, 0.62210877, 0.43772774, 0.78535858, 0.77997581])
np.random.randn(10) # 표준정규분포를 따르는 난수 10개 생성
>>> array([-0.94029827, -0.95658428, -0.33060682, 0.87412791, 2.00254961,
0.01086208, -0.86924706, 1.4249841 , 0.1458091 , 2.89409095])
np.random.normal(3, 1, 10) #평균이 3 표준편차가 1을 따르는 난수 10개 생성
>>> array([3.47143516, 1.80902431, 4.43270697, 2.6873481 , 2.27941127,
3.88716294, 3.85958841, 2.3634765 , 3.01569637, 0.75731505])
np.random.randint(10, 20, size = 10) # 시작, 끝, 개수
>>> array([15, 12, 16, 13, 17, 10, 19, 10, 13, 12])
np.random.randint(10, 20, size = (3, 4))
>>> array([[13, 11, 13, 11],
[13, 17, 11, 17],
[14, 10, 15, 11]])
6-2. 데이터 순서 바꾸기
ar = np.arange(10)
np.random.shuffle(ar)
ar
>>> array([7, 2, 3, 8, 6, 1, 0, 9, 4, 5])
7. 정수 데이터 카운팅
# 중복된 원소 제거
ar1 = np.array([1, 1, 2, 2, 2, 3, 3, 4])
np.unique(ar1)
>>> array([1, 2, 3, 4])
ar2 = np.array(['a', 'b', 'b', 'c', 'a', 'c', 'c', 'a', 'a'])
index, count = np.unique(ar2, return_counts = True)
index #중복 원소 제거된 array
>>> array(['a', 'b', 'c'], dtype='<U1')
count #원소의 갯수
>>> array([4, 2, 3], dtype=int64)
이상입니다!
다음은 Pandas로 찾아뵐게요!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/005.gif)
'데이터분석 공부 > Python' 카테고리의 다른 글
[Python] Seaborn을 활용한 범주형 변수의 시각화 (0) | 2022.03.19 |
---|---|
[Python] Seaborn을 활용한 수치형 변수의 시각화 (0) | 2022.03.18 |
[Python] Pandas - ② (0) | 2022.01.24 |
[Python] Pandas - ① (0) | 2022.01.24 |
[Python] Jupyter Notebook 설치 및 실행 (0) | 2022.01.22 |