ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (1) 데이터분석_Numpy
    데이터분석 2023. 6. 11. 19:59
    728x90

    1. 넘파이(Numpy)

    • 수학, 과학 계산용 패키지
    • 자료구조(ndarray)를 제공 -> 파이썬의 list보다 속도가 빠름.

    넘파이 사용 전 다운로드

    !pip install numpy
    import numpy as np # 넘파이를 사용하기 위해 import를 시켜준다.

    1-1. ndarray

    list1 = [1,2,3,4]
    list2 = [[1,2,3,4],[5,6,7,8]]
    print(list1)
    print(list2)
    print(type(list1))
    print(type(list1[1]))
    print(type(list2))

    ndarr1 = np.array([1,2,3,4])
    print(ndarr1)
    print(type(ndarr1)) # ndarray = n dimension array

    # 리스트를 ndarray로 변환하는 방법
    ndarr1 = np.array(list1)
    ndarr2 = np.array(list2)
    print(ndarr1)
    print(ndarr2)
    print(type(ndarr1))
    print(type(ndarr1[1]))
    print(type(ndarr2))

    1-2. ndarray의 data type

    • ndarray는 list와 다르게 1개의 단일 데이터 타입만 허용
    list1 = [1,3.14,'python','🤣',True]
    list1

    list1[3]

    ndarr1 = np.array([1,2,3,4])
    ndarr1

    ndarr2 = np.array([1,2,3.14,4]) # 모든 요소가 float로 변경됨
    ndarr2 # 가장 큰 데이터 타입으로 바뀜

    ndarr3 = np.array([1,2,3.14,True]) # 모든 요소 float로 변경
    ndarr3

    ndarr4 = np.array(['1',2,3.14,True]) # 모든 요소 String로 변경
    ndarr4

    ndarr3 = np.array([1,2,3.14,True], dtype=int) # 모든 요소 float로 변경
    ndarr3

    ndarr4 = np.array(['1',2,3.14,True], dtype=int) # 모든 요소 String로 변경
    ndarr4 # 따옴표 떼고 숫자면 인티저 변경 가능

    ndarr4 = np.array(['1','2','3.14','True'], dtype=int) # 모든 요소 String로 변경
    ndarr4 # 따옴표 떼고 3.14가 float 면 작업이 두번이여서 오류

    1-3. ndarray 슬라이싱

    ndarr1 = np.array(['🍌','🥝','🍊','🍉','🍈'])
    ndarr1

    ndarr1.shape

    # 인덱싱
    print(ndarr1[0])
    print(ndarr1[4])
    print(ndarr1[-1])
    print(ndarr1[-2])

    ndarr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    ndarr2d.shape

    print(ndarr2d[0,2])
    print(ndarr2d[0][2])

    # 0행 가져오기
    print(ndarr2d[0])
    print(ndarr2d[0,])
    print(ndarr2d[0,:])

    # 0열 가져오기
    print(ndarr2d[:,0])

    1-4. Fancy 인덱싱

    • 범위가 아닌 특정 index의 집합의 값들을 선택해서 추출하고 싶을 때 사용
    ndarr1 = np.array([10,15,2,8,20,90,85,44,23,32])
    idx = [2,5,9]
    ndarr1[idx]

    ndarr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    ndarr2d[[0,1],:]

    1-5. Boolean 인덱싱

    • 조건에 대한 필터링을 통해 Boolean 값을 이용한 색인을 사용
    ndarr1 = np.array(['🍌','🥝','🍊','🍉','🍈'])
    selValue = [True,False,True,True,False]
    ndarr1[selValue]

    ndarr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    ndarr2d > 7

    ndarr2d[ndarr2d > 7]

    2. 행렬 연산

    2-1. 연산자

    • 덧셈, 뺄셈, 곱셈, 나눗셈은 shape가 같아야함
    • 같은 position끼리 연산
    • 내적(dot product)은 맞닿는 shape가 같아야함
    • 내적(dot product)은 떨어져 있는 shape가 결과 행렬이 됨
    a = np.array([[1,2,3],[2,3,4]])
    b = np.array([[3,4,5],[1,2,3]])
    a.shape, b.shape # shape가 다르면 오류

    # 덧셈, 뺄셈,나눗셈, 곱셈 연산
    print(a+b)
    print(a-b)
    print(a*b)
    print(a/b)

    # dot product(행렬곱, 내적)
    a = np.array([[1,2,3],[1,2,3],[2,3,4]])
    b = np.array([[1,2],[3,4],[5,6]])
    a.shape, b.shape

    print((1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6))
    print((1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6))
    print((2*1 + 3*3 + 4*5), (2*2 + 3*4 + 4*6))

    np.dot(a,b)

    2-2. orange

    • 순차적인 값을 생성할 때 사용
    arr1 = range(1,11)
    arr1

    arr2 = np.arange(1, 11)
    arr2

    for i in arr2:
      print(i, end = " ")

    2-3. sort

    ndarr1 = np.array([1,10,5,7,2,4,3,6,8,9,])
    ndarr1

    np.sort(ndarr1) # 오름차순 정렬

    # 문자열 역순으로 출력하기
    str1 = 'Python'
    print(str1[:]) # 모든 문자를 슬라이싱
    print(str1[::]) # print(str1[::1]) -> : 정방향
    print(str1[::-1]) # print(str1[::-1]) -> : 역방향
    print(str1[4:1:-1]) # 4번 인덱스부터 1 직전까지 역순으로 가져오기
    print(str1[4::-1]) # 4번 인덱스부터 0까지 역순으로 가져오기

    np.sort(ndarr1)[::-1]

    ndarr2d = np.array([[11,10,12,9],[3,1,4,2],[5,6,7,8]])
    ndarr2d.shape

    # 행 정렬
    np.sort(ndarr2d, axis = 0)

    # 열 정렬
    np.sort(ndarr2d, axis = 1)

    # 열 정렬 내림차순
    np.sort(ndarr2d,axis = 1)[:,::-1]

    a = np.sort(ndarr2d, axis = 1)
    np.sort(a, axis = 0)

    2-4 숫자의 단일 연산

    a = np.array([[1,2,3],[4,5,6]])
    print(a+3)
    print(a-3)
    print(a*3)
    print(a/3)

    b = np.array([[3,3,3],[3,3,3]])
    a+b

    댓글

Designed by Tistory.