LiJell's 성장기

05.python_numpy 본문

Bigdata/파이썬_Python

05.python_numpy

All_is_LiJell 2021. 12. 15. 17:40
반응형

modified on Wed Dec 30

# -- coding: utf-8 --
"""
Created on Wed Dec 15 16:12:07 2021

@author: hanju
"""

자료구조

  1. 리스트 (기본구조)
  2. 튜플(상수, 불변)
  3. 딕셔너리(key:value) <<- json java원조 {1:'양진욱', 2:'백혜림', 3:'박윤수'}
  4. 세트(set) : 집합
  5. 배열 (numpy)
  6. 판다스 구조 (Series, DataFrame)

넘파이 (numpy)

  1. 배열 (array) 생성, 연산
  • array: 하나의 데이터 타입 허용 (int, float, ), 다차원 자료구조
import numpy as np
np.array([1,2,3])
array([1, 2, 3]) # 1차원 배열, 1 dimension series

2 .차원 배열 (수리적 모형: 행,열)

np.array([[1,2,3],[4,5,6],[7,8,9]])
array([[1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]])
  1. 3차원 배열
np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
array([[[ 1, 2, 3],
        [ 4, 5, 6]],

        [[ 7, 8, 9],
         [10, 11, 12]]])
  • 1~25까지의 array
np.arange(1,26)
array([ 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])
  • reshape
np.arange(1,26).reshape(5,5)
array([[ 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]])
  • type
a1=np.arange(1,26)
type(a1)
numpy.ndarray
  1. 색인
   a2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
   a2
   array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
  • array[행, 열]
a2[1,:] #1번 위치 행과 모든 열의 값을 나타내라
array([4, 5, 6])
  • 정수 색인 (두번째 열 선택: 차원 축소 발생)
a2[:,1] # 1번 위치에 있는 열의 모든 행 값을 반환해라
array([2, 5, 8])
  • 슬라이스 색인 (두번 째 열 선택: 차원 축소 발생 안함)
a2[:,1:2] # 모든 행과 1번위치에서 2번 위치 전까지 반환해라
array([[2],
       [5],
       [8]])


a2
# a2에서 1, 3 행 선택
a2[0:3:2,:]
array([[1, 2, 3],
       [7, 8, 9]])

a2[[0,2],:]
array([[1, 2, 3],
       [7, 8, 9]])

a2[1,1]
5
a2[[1,2],[1,2]] # return array([5, 9]) # 1번행의 1번 2번열의 2번 뽑기
array([[1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]])
# >>>> a2[1,1], a2[2,2] 포인트 인덱싱
# 2개의 포인트(점) 출력
  • 색인함수 (ix_())
a2[np.ix_([1,2],[1,2])]
 array([[5, 6],
       [8, 9]])
# 이렇게 하면 1번행의 1번과 2번열의 2번 사이에 있는 값들을 추출.
a2[[0,1],[1,2]]
array([2, 6])
  • 조건 색인
a2 > 5
array([[False, False, False],
       [False, False, True],
       [ True, True, True]])

a2[a2>5]
array([6, 7, 8, 9]) ture만 출력

a2[:,0] # 첫번째 컬럼 가져와서
a2[:,0] > 5 #5이상인 행만 선택하겠어
a2[a2[:,0] > 5]
array([[7, 8, 9]])
# 조건의 결과를 행방향에 색인 값으로 전달

메서드

a2.dtype # numpy 구성 데이터 타입 확인하고 싶을 때
a2.shape # numpy의 모양(shape)
(3, 3)
a2.shape[0] # numpy 행의 수
a2.shape[1] #numpy 열(컬럼) 수

a2.reshape(1,9) # array 모양 변경 위에서 알고난 수를 참고
a2.ndim         # array 차원
  1. 연산
[1,2,3] + [4,5,6] 
[1, 2, 3, 4, 5, 6] # list 는 서로 원소끼리 연산 불가 (확장으로 해석됨)

np.array([1,2,3]) + np.array([4,5,6])
array([5, 7, 9])
np.array([1,2,3]) + np.array([4,5,6,7])
#서로 사이즈가 같은 배열끼리 연산 가능
  1. 형 (데이터 타입) 변환 메서드
a2.astype('float')
array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])

a2.astype('int')
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
a2.astype('str')
array([['1', '2', '3'],
       ['4', '5', '6'],
       ['7', '8', '9']], dtype='<U11')
  1. np.where 함수
  • if 문의 축약
  • np.where(조건, 참인 값 반환, 거짓인 값 반환)
  • SQL문 기본 형태 : select + from db where
np.where(a2>5,'A','B')
array([['B', 'B', 'B'],
       ['B', 'B', 'A'],
       ['A', 'A', 'A']], dtype='<U1')
  1. 산술 연산 메서드
a2.sum()
a2.mean()
a2.var() #분산
a2.std() # 표준편차
a2.min()
a2.max()

(a2 > 5).sum() # a2 에서 5보다 큰 값의 수 ( ture 가 1 이니까 ture의 합 또는 개수)
(a2 > 5).any() # true a2에서 5보다 큰 값이 하나라도 있을 경우 참 
(a2 > 5).all() # False a2에서 모두 5 보다 클 경우만 참


a2
'''
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
'''

a2.sum(axis=0) #( 같은 위치에 있는 행의 값들의 합) 행끼리 더해줘 axis=0은 행축
array([12, 15, 18])
a2.sum(axis=1) #( 같은 위치에 있는 열의 값들의 합) 열끼리 더해줘 axis=1은 열축
array([ 6, 15, 24])

# [축 번호]
# 2차원  : 행(0), 열(1)
# 3차원  : 층(0), 행(1), 열(2)
  1. 전치 메서드
  • 행과 열을 바꾼다.

1) T : 행과 열을 전치

np.arange(1,9)
array([1, 2, 3, 4, 5, 6, 7, 8])
a1 = np.arange(1,9).reshape(4,2)
a1
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
a1.T
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])

2) swapaxes: 두 축을 전달 받아서 두 축을 서로 전치swap, 전달 순서는 중요하지 않아요
a1
array([[1, 2],
        [3, 4],
        [5, 6],
        [7, 8]])
a1.swapaxes(0,1) #0번축과 1번축을 swap
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])
a1.swapaxes(1,0) # 1번축과 0번축을 swap 어차피 똑같은 말.
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])

3) transpose
# 원본의 차원에 맞는 축번호를 인수에 차례대로 전달, 그리고 그대로 전치 전달되는 순서 중요
a1
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
a1.transpose(0,1) #원본 그대로 출력
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
a1.transpose(1,0) # 행과 열 전치 따라서 순서가 중요.
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])
  1. 외부 파일 입출력
1) 파일 불러오기
  np.loadtxt(fname,       # 파일명
             dtype,       # 데이터타입
             delimiter,   # 필드 구분 기호
             skiprows,    # skip 할 행의 수
             usecols,     # 선택할 컬럼의 값(위치)
             encoding)    # 인코딩 옵션

np.loadtxt('C:/Users/hanju/Desktop/multicamp/data_bigdata_cert/file1.txt', delimiter=',',dtype='str')
np.loadtxt('./data_bigdata_cert/file1.txt', delimiter=',',dtype='str')

2) 파일 내려쓰기
np.savetxt(fname,      # 파일명
           X,          # 객체명
           delimiter,  # 구분자
           fmt,        # 출력형식(format)
           header,     # 해더 출력 여부(file 첫 문자열)
           encoding)   # 인코딩 옵션


x = np.arange(0.0,5.0,1.0)
np.savetxt('./data_bigdata_cert/file2.txt', x, delimiter=',', fmt='%s')
# %s: 문자타입 (string)

# [참고 : fmt 전달/변경 방식]
# %s : string
# %f : float
# %d : 숫자

'%s' % 123 #'123'
'%f' % 123 #'123.000000'
'%.2f'% 123 #'123.00' >> 소수점 2째자리까지
'%d' % 123 #'123'
'%7d'% 123 #'    123'
'%-7d' % 123 #'123    '
반응형

'Bigdata > 파이썬_Python' 카테고리의 다른 글

07. Pandas _ Series, DataFrame  (0) 2022.01.01
06.python_str_method  (0) 2021.12.20
04.python_def_lambda_map  (0) 2021.12.15
03.python_conditional_statements_loop  (0) 2021.12.15
02.python_02_함수와 메서드  (0) 2021.12.15
Comments