파이썬 심화(numpy와 pandas)

오상윤·2023년 1월 3일
0

파이썬 심화

목록 보기
9/9

numpy와 pandas

numpy

  • C를 기반으로 작성된 라이브러리
  • 과학적 계산을 위한 핵심 라이브러리
  • 다차원 배열 객체와 이들의 계산을 위한 다양한 도구 제공
  • 배열(ndarray) : 다차원 배열 객체
    • np에서의 각 위치의 자료는 모두 같은 자료형이어야 한다.
    • np.array(컬렉션)을 통해 생성할 수 있다.
    • .dtype을 통해 각 데이터의 자료형을 알 수 있다.
    • (dtpye = 자료형)으로 자료형을 지정할 수 있다.

배열과 리스트 차이

  • 모든 원소가 같은 자료형이다.
  • 원소의 개수를 바꿀 수 없다.
  • 파이썬은 자체적으로 배열 자료형을 제공하지 않기 때문에 numpy를 통해서만 사용할 수 있다.
  • C로 구현되었기 때문에 파이썬 반복문에 비해 월등히 속도가 빠르다.
  • 간단한 코드로도 복잡한 선형 대수 연산을 수행할 수 있다.
  • numpy배열은 다차원으로 구성될 수 있고 .shape를 통해 몇 차원인지, 각 차원은 몇 개의 원소로 구성되어 있는지 알 수 있다.

특수 행렬 생성

  • np.zeros() : 각각 0으로 채워진 배열 생성
  • np.ones() : 각각 1로 채워진 배열 생성
  • np.eye() 또는 np.diag() : 대각행렬을 생성
  • np.empty() : 크기만 지정해두고 요소는 초기화되지 않은 배열 생성. 각각의 요소는 가비지 값이 채워져 있음

인덱싱과 슬라이싱

  • 슬라이싱을 할 경우 복제가 되지 않음. 이는 그 배열의 주소값만을 가져오기 떄문.
  • copy()를 통해 복사해야함

유용한 함수와 메소드

  • flatten() : 다차원 배열을 1차원으로 펼친다.
  • transpose() : 행과 열을 변환
  • np.reshape() : 다차원 배열의 shape을 바꾼다.
  • np.random.random() : 난수를 발생시킨다.
  • hstack : 수평으로 배열을 붙혀 만든다.
  • vstack : 수직으로 배열을 붙혀 만든다
a = np.array([1,2,3,4,5])
# a의 1,3,5행만 선택
b = a[[1,3,5]]
# 0열 1행인 원소, 2열 3행인 원소를 가지는 array로
a[[0,2],[1,3]]
# a의 원소에서 1이나 2인원소들만 출력
a[(a == 1) or (a == 2)]
import numpy as np
b = np.array([1,2,3,4])
c = np.array([[1,2],
              [3,4]])
print(np.prod(b)) # 1*2*3*4
print(np.prod(c, axis=0)) # [1*3, 2*4] 0은 열
print(np.prod(c, axis=1)) # [1*2,2*4] 1은 행
print(np.sum(b))  # 1+2+3+4
print(np.sum(b, keepdims=True)) # [1+2+3+4]
print(np.sum(c, axis=0)) # [1+3, 2+4]
print(np.sum(c, axis=1)) # [1+2, 3 +4]
import numpy as np
arr = np.array([[10, 20, 30, 40], [50, 60, 70, 80]])
#     데이터  구조     데이터타입  행의 갯수   열의 갯수
print(arr, arr.shape, arr.dtype, len(arr), len(arr[0]))
import numpy as np
a1 = np.ones((2,3))
print(a1)
a2 = np.zeros((2, 2))
print(a2)
# hstack/vstack : 두개를 붙인 새로운 배열을 생성
# hstack : horizontal stack 수평으로 붙임 
print(np.hstack([a1, a2]))
a3 = np.zeros((3,3))
# vstack vertical stack  수직으로 이어 붙임 
print(a3)
a4 = np.vstack([a1, a3])
print(a4)
print(a1)

pandas

  • numpy 기반으로 개발된 데이터 분석도구
  • pandas.Series는 1차원 데이터를 다루는데 효과적
  • pandas.DataFrame은 2차우너 데이터를 다루는데 유용
  • .values 속성을 이용해 데이터만 numpy array형식으로 접근 가능하다.
  • Column의 이름은 .columns를 통해 얻을 수 있고
  • Row의 이름은 .index를 통해 얻을 수 있다.
  • Column의 이름은 .columns를 통해 얻을 수 있고
  • Row의 이름은 .index를 통해 얻을 수 있다.

dataframe에 함수 적용

  • df.apply(함수, [axis = 0]) : axis가 0일 경우 칼럼 단위로 함수 수행 axis가 1일 경우 row 단위
  • df.applymap(함수) : 각각 요소별로 함수 적용
  • isnull() : NaN이나 None인 경우 True, 그 외엔 False
  • notnull() : isnall의 반대
  • dropna() : Nan이나 None을 소유한 행을 제외
  • fillna() :Nan이나 None을 특정 수로 채울 수 있음
  • groupby("칼럼이름").agg(함수) : 컴럼이름이 같은 것들끼리 함수를 적용
from pandas import DataFrame, Series
import numpy as np
data = {"2015": [990432,3448737,2890451,2466052],
        "2010": [9631482, 3393191, 2632035, 2431774],
        "2005": [9762546, 3512547, 2517680, 2456016],
        "2000": [9853972, 3655437, 2466338, 2473990],
        "지역": ["수도권","경상권","수도권","경상권"],
        "2010-2015증가율":[0.0283,0.0163,0.0982,0.0141]
        }
index = ["서울","부산","인천","대구"]
df = DataFrame(data, index=index,columns=column)
print(df)
print(df.index)
import pandas as pd
# def f1(x):
#     return x.sum()
f1 = lambda x:x.sum()
items = {'apple':{'count':10,'price':1500},
         'banana': {'count':5, 'price': 15000},
         'melon': { 'count':7,'price': 1000},
         'kiwi': {'count':20,'price': 500},
         'mango': {'count':30,'price': 1500},
         'orange': { 'count':4,'price': 700}}
data1 = pd.DataFrame(items).T # T는 transpose() 행열 변경
print(data1)
print(data1.apply(f1))  # 열별 합계
print(data1.apply(f1, axis=1))  # 행별로 합계
profile
가보자가보자~

0개의 댓글