[1주차] 파이썬 기초(2)

빵 반죽·2023년 3월 26일
0

네이버 AI TECH 5기

목록 보기
3/5

Numpy: Numerical Python

  • 리스트에 비해 메모리 효율적

  • 선형대수학 구현

  • array creation
    - ndarray = np.array([1,2,3,4], float) -> 리스트, dtype(한 종류만 가능, dynamic typing 불가)

    • C의 Array를 사용, 즉 실제 값이 메모리에 순서대로 있음(리스트는 실제 값이 있는 곳의 포인터들을 보관)
  • .shape -> dimension(tuple), .ndim -> rank, .size -> number of items

    • dimension이 추가될 때마다 튜플의 숫자가 한칸씩 밀린다. axis 수도 커짐
    • rank에 따라: scalar(0), vector(1), matrix(2), 3-tensor(3), n-tensor(n)
  • .dtype -> data type

    • C의 data type과 compatible
    • bool, int, int8~int128, uint, uint8~uint128, float, float32/64, longfloat, ... -> .nbyte
  • .reshape(d) -> d의 모양으로 바꿔서 반환

    • -1의 사용: (2,4)를 (-1,2)로 바꾸고자 함 -> size를 기반으로 -1자리에 4를 알아서 넣어줌
    • .flatten() -> 1차원으로 바꿔서 반환
  • [,] 형식의 인덱싱 지원, [][]도 된다(row, column)

  • slicing -> row, column 따로 가능, 리스트와 동일

  • np.arange(시작, 끝, 스텝) -> 숫자를 차례로 넣어준다. 주로 reshape과 같이 쓴다.

  • np.zeros(shape, dtype, order)/np.ones(shape, dtype, order)/np.empty(shape, dtype,order)->초기화 안됐다는 의미

  • something_like -> ones, zeros, empty + like, 같은 쉐입의 해당 array 리턴

  • np.identity(n, dtype) -> nxn identity matrix 생성, nxm의 경우엔 .eye(n, m, k=idx)

  • np.diag(matrix) -> 대각선만 뽑아줌

  • random sampling -> np.random.uniform(0,1,10), np.random.normal(0,1,10)...

  • operation functions

    • .sum(axis=), .mean(), .std()
    • np.(exponential, trigonometric, hyperbolic 종류의 다양한 함수 호출 가능) -> element-wise 적용
    • concatenate: np.vstack((a,b))->vertical stack/np.hstack((a,b)) -> horizontal stack
      • or np.concatenate((a,b), axis=)
    • element-wise operations: +, -, * , //, **
        • : 서로 matrix 내 같은 element 끼리 곱하기
      • 기본적으로 shape이 같아야 된다.
    • m1.dot(m2)
    • .T or `.transpose()'
    • broadcasting -> shape이 다른 배열 간 계산. 알아서 채워 사칙연산(상수)
  • timeit -> jupyter에서 코드의 퍼포먼스를 체크하는 함수

  • 속도: for loop < list comprehension < numpy

  • comparison

    • <, > -> element-wise 판정, bool array 반환, 같은 shape
    • np.any(조건) / np.all(조건) -> 전체를 보고 하나의 boolean 값 도출
    • np.logical_and(조건), np.logical_not(조건), np.logical_or(조건) -> element-wise
    • np.where() 조건이 맞는 곳~~
      • np.where(a>0, 3, 2) -> 조건에 맞는 곳은 3으로 아닌 곳은 2로 만든 array 반환
      • np.where(a>5) -> 조건에 맞는 원소의 인덱스 array 반환
    • np.isnan(a), np.isfinite(a)
    • np.argmax(a, axis=), np.argmin(a, axis=) -> array(axis) 내 최대/최소의 index 반환
  • boolean index -> TF로 구성 된 array로 조작

    condition = array < 3	# 원소 < 3 인 경우 T, 아닌 경우 F인 배열 리턴
    array[condition]	# < 3에 해당하는 원소만 뽑아줌
  • fancy index -> index로 구성 된 array로 조작

    index = [0, 0, 1, 2]	# 이 값이 인덱스가 되어 원소를 뽑아옴, array의 인덱스 범위를 벗어나면 에러
    array[index]
    array.take(index)		# 위와 동일
  • loadtxt, savetxt

  • np.save("name", arr=) -> pickle

Pandas: panel data

  • series -> dataframe에서 한 column vector, index<->values pair
    - list, ndarray, dict 모두 series 변환 가능

    • Series(data, dtype=, name=)

      list_data = [1,2,3,4,5]
      list_name = ['a','b','c','d','e']
      
      # list 또는 numpy array를 series로 변환
      # index 이름을 list_name으로 지정
      example_obj = Series(data=list_data, index=list_name, name="number")
    • df.astype(float) -> type 변환

    • 항상 index에 있는 값을 기준으로 값을 추가(NaN) 또는 제외

  • dataframe -> series의 모음(각각 dtype 다를 수 있음), 기본 2차원

    • 주로 csv파일 읽어서 만듦(read_csv, to_csv), 굳이굳이 dict 타입으로 받아서 만들 수도 있긴 하다(json 파일 같은 경우)
    • DataFrame(data=, index=, columns=[], dtype=, copy=)
    • loc[:], iloc[:] -> index location(이름에 따라)/position(순서에 따라)
    • df.debt = df.age > 40		# 새로운 데이터 할당하기
    • df.T -> transpose
    • 리스트, dict 타입처럼 참조 가능
    • df.values(np array로 반환), df.index, df.name
    • df.head/tail()
    • del/drop column -> 실제 df에 변형 유무
    • selction
      • columns - with column names
      • rows - with index number: [:], multiple selection with [ , , , ...] or boolean index
  • operations

    • Series끼리: s1.add(s2) -> 겹치는 index끼리 연산, 없는 값은 NaN(fill_value=n 을 추가하면 없는 값을 n으로 간주하고 연산)

    • Series, DataFrame: Series를 axis를 기준으로 row broadcasting 실행

    • .map(lambda x: x**2)

    • s1.map(s2) -> 같은 위치의 데이터를 s2로 전환, dict를 넣으면 해당 key에 해당하는 값을 value로 바꿔준다. 비슷하게 .replace()

    • .apply(lambda) -> map의 df 버젼, 내장함수 넣어도 가능

    • .describe() -> 통계, 요약

    • .unique() -> series에서 유일한 값들만 모아서 리스트

    • .sum/.sub/.mean/.min/.max/.count/.median/.var

    • .isnull() -> NaN인 개수 반환

    • .sort_values([], ascending=True) -> column list를 기준으로 정렬

    • .corr/.cov/.corrwith

  • groupby : split + apply + combine

    • df.groupby(기준 column)[적용되는 column].sum()
    • 묶는 기준 column이 꼭 하나일 필요는 없음. 그 개수만큼 인덱스 생성 -> hierarchical index
      • .unstack() -> groupby로 묶인 데이터를 matrix 형태로 전환
      • .swaplever() -> index level 변환
      • .sum(level=0) 이런식으로 level 지정 연산 가능
    • grouped data: split 단계만 거친 (기준으로 묶인) 상태 df.groupby(기준 column)
      • g_d.get_group(그룹명)
      • Aggregation: 요약된 통계 정보 .agg(내장함수 또는 내장함수 리스트)
      • Transformation: 해당 정보에 함수 적용 .transform(lambda)
      • Filteration: 특정 정보 필터링 .filter(lambda)
  • merge & concat

    • pd.merge(df1, df2, on='') -> 특정 column을 기준으로 두 dataframe 합치기
    • pd.merge(df1, df2, left_on='', right_on='') 이런 식으로 column 이름 달라도 합칠 수 있음
    • join: inner join/ left join/ right join/ full join도 구현
      • on 뒤에 how= 항목 추가 -> 'left', 'inner', 'outer', 'right' 등
    • pd.concat([df1, df2]) or d1.append(d2) -> 이어붙이기

0개의 댓글

관련 채용 정보