AI 부트캠프 | Week 5) (#판다스 라이브러리)

Gomcha ·2023년 8월 20일
0

FC AI 6기 부트캠프

목록 보기
6/13
post-thumbnail

1.데이터분석 및 시각화

01 Pandas 라이브러리

01-1) 판다스 라이브러리

  • 데이터프레임과 시리즈가 있으며, 판다스에서 다루는 핵심 자료형
  • 표의 데이터는 values, 행이름은 index, 열이름은 columns

    [특징]
    - 표 전체에 함수를 적용해 개별요소를 바꾸어, 불(Bool)값(True/False)으로 반환함
    - 인덱싱을 할 수 있다(라벨, 로케이션 이용)
    - 라벨(key값) : df.loc['라벨명','라벨명']
    - 로케이션 : df.iloc[0,0]

[참고]

02 엑셀 vlookup 및 다양한 기능-pandas

02-1) 엑셀 불러오기

  • pandas read_excel : 엑셀파일을 프레임으로 불러오는 함수
    df = pd.read_excel('파일경로')
  • io : 파일의 경로명
  • sheet_name(인수는 문자열, 정수, 리스트) : 불러올 시트를 지정하는 인자

    [예시]
    - 지정하지 않음 : 첫번째 시트
    - [1] : 두번째 시트
    - "Sheet1" : 문자열은 해당 이름을 가진 시트
    - [0,1,"Sheet5"] : 첫번째 시트와 두번째 시트 그리고 "Sheet5" 이름의 시트를 딕셔너리로 통합해서 가져옴
    - None : 모든 시트를 딕셔너리로 통합해서 가져옴

02-2) 단일요건 vlookup

  • pandas의 merge함수
    df.merge(right, how='inner', on=None)
  • 두 데이터프레임을 기준 열의 내용에 따라 병합하는 엑셀 함수

인자
- how (인수는 ‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’ / 기본값은 ‘inner’)
: 병합할 방식을 결정하는 인자.
- left
: 왼쪽 데이터프레임의 키(key)만을 병합에 사용(엑셀의 vlookup과 유사)
- right (인수 데이터프레임 혹은 시리즈) : 병합할 객체
- outer
: 양쪽 데이터프레임의 키(key)들의 합집합을 병합에 사용
- inner
: 양쪽 데이터프레임의 키(key)들의 교집합을 병합에 사용
- cross
: 양쪽 데이터프레임의 곱집합(cartesian product)을 생성
- on (인수는 열의 레이블 또는 리스트 / 기본값은 None)
: 병합의 기준이 되는 열을 지정하는 인자. 기본 값은 양쪽 데이터프레임에서 이름이 공통인 열들이 지정된다. 리스트로 입력하면 복수의 열을 기준으로 병합한다.

02-3) 다중요건 vlookup

  • merge함수
    df.merge(right, how='left, on=['업체', '음료']
  • 복수 열을 기준으로 vlookup

02-4) 행과 열 이름 바꾸기

  • rename함수
    df.rename(index=None, columns=None, level=None)

    인자
    - index의 이름을 바꾸는 인자(인수는 mapper)
    ** mapper는 딕셔너리나 시리즈나 함수와 같이 맵핑 할 수 있는 매개체
    - columns의 이름을 바꾸는 인자
    - level은 멀티인덱스에서 이름을 바꿀 레벨을 지정하는 인자
    mapper

02-5) 정렬하기

  • sort_values함수
    df.sort_values(by, ascending=True)
    df.sort_values(['수학','과학'], ascending=[0, 1])
    0은 오름차순
    1은 내림차순

    인자
    - by : 정렬의 기준이 될 배열을 지정하는 인자
    - ascending : 정렬 순서를 오름 또는 내림차순으로 지정하는 인자

범위로 병합

  • merge_asof함수
    pd.merge_asof(left, right, on=None, by=None, direction='backward')

    인자
    - left는 병합할 객체1(인수는 df 혹은 series)
    - right는 병합할 객체1(인수는 df 혹은 series)
    - on
    : 유사 일치로 병합할 기준이 되는 열의 레이블을 지정(인수는 열의 레이블)
    반드시 하나의 열만 지정 /숫자나 datetime 같이 유사일치가 가능한 자료형의 열이어야 함/오름차순 정렬 ***
    - by
    : 정확히 일치시킬 열을 지정하는 인자(인수는 열의 레이블 또는 열의 레이블의 리스트)
    - direction
    : 경계를 기준으로 유사일치 시킬 방향을 결정하는 인자(인수는 'backward'(기본값), 'forward', 'nearest')
    - 'backward'는 작은 값중 최대를 찾아 병합함
    - 'forward'는 큰 값중 최소 찾아 병합
    - 'nearest'는 가장 가까운 값을 찾아 병합

데이터 프레임 결합

  • concat 함수
    pd.concat(objs, axis=0, join='outer', keys=None)

    인자
    - objs
    : 결합할 시리즈나 데이터프레임들을 리스트로 지정하는 인자(인수는 series or df의 배열)
    - axis
    : 결합할 축 방향을 지정하는 인자 (axis = 0 은 행방향, axis=1은 열방향)
    - join
    : 결합방식을 지정하는 인자 (인수는 inner, outer(기본값)) / inner은 교집합 결합 / outer은 합집합 결합
    - keys
    : 결합하는 각 데이터프레임에 레벨 부여(인수는 배열/기본값은 none)

03 [기초]데이터프레임 다루기

03-1) 웹크롤링 결과를 Df로 불러오기

  • read_html
    pd.read_html(io, match = '.+', header=None, index_col=None

    인자
    - io : 웹페이지의 경로명
    - match (인수는 문자열 혹은 정규표현식 / 기본값은 ‘.+’ )
    : 테이블 중에서 특정 문자열을 포함한 테이블을 지정하는 인자. 기본값은 빈 문자열을 제외한 모든 문자열이다.(지정하지 않으면 문자열이 포함된 모든 테이블을 가져온다)
    - header (인수는 정수, 정수의 리스트 / 기본값은 None)
    : columns를 지정하는 인자. 리스트로 지정하면 멀티 인덱스인 columns가 된다.
    - index_col (인수는 정수, 정수의 리스트 / 기본값은 None)
    : index를 지정하는 인자. 지정하지 않으면 RangeIndex가 index로 부여된다. 리스트로 지정하면 멀티 인덱스인 index가 된다.

03-2) 데이터프레임 정보 파악

  • info
    : 데이터 프레임의 많은 정보를 알려줌
  • shape
    : 데이터 프레임의 크기를 알려주는 속성
  • dtypes
    : 각 열의 dtype을 시리즈로 반환하는 속성
  • describe
    : 숫자로 된 열들의 간단한 통계들을 제공하는 함수
  • unique
    : 열의 고유값들을 반환하는 함수

03-3) 인덱싱과 슬라이싱(loc/iloc)

  • 대괄호 인덱싱 : 레이블(이름)으로 인덱싱
    - 열은 인덱싱만 가능하며, 행은 슬라이싱만 가능
  • loc 인덱싱 : 레이블(이름)으로 인덱싱
    - 행과 열 모두 인덱싱과 슬라이싱 가능, 행과 열 동시에 가능
  • iloc 인덱싱 : 로케이션으로 인덱싱
    - 행과 열 모두 인덱싱과 슬라이싱 가능, 행과 열 동시에 가능
  • drop함수 : 데이터프레임의 행이나 열을 삭제
    df.drop(labels, axis = 0, level = None)
    인자
    - labels (인수는 레이블 혹은 리스트)
    : 드롭할 행의 레이블(이름)이나 열의 레이블. 복수라면 리스트로 묶어서 입력
    - axis (인수는 0 또는 1/기본값은 0)
    : 삭제할 부분이 행인지 열인지를 지정하는 인자. 기본값은 0이고 행을 삭제한다
    - level (멀티 인덱스의 레벨 / 기본값은 None)
    : 멀티인덱스일 때 삭제할 레벨을 지정하는 인자

03-4) pandas 연산

  • 데이터프레임 또는 시리즈와 스칼라(상수) 연산 : 모든 요소에서 각각 연산함
  • 시리즈 간의 연산
    : 동일한 index끼리 각각 연산함
  • 데이터프레임 간의 연산
    : 동일한 index와 columns 끼리 각각 연산
  • 데이터프레임과 시리즈의 연산
    : 브로드캐스팅(broad casting)

04 [심화]데이터프레임 다루기

04-1) 데이터가공(feature engineering)

  • raw 데이터에서 열은 특성, 행은 개체를 나타냄
  • 기존 열(feature)을 가공해 유용한 특성을 가지는 열로 만드는 것

04-2) rank

  • 데이터프레임이나 시리즈의 순위를 매기는 함수

    인자
    - method (인수는 ‘average’, ‘min’, ‘max’, ‘first’, ‘dense’ / 기본 값은 ‘average’)
    : 동점자 처리방식을 지정하는 인자
    average: 평균 순위
    min: 최소 순위
    max: 최대 순위
    - first: 출현 순서에 따라 순위 부여
    - dense: ‘min’ 과 같지만 동점자가 여러명 있어도 다음 순위가 1을 더해서 부여한다
    ex. 90, 89, 89, 88을 각각 1, 2, 2, 3을 부여한다 (4위가 아니라 3위를 부여한다)
    - ascending (인수는 bool / 기본 값은 True)
    : 오름차순과 내림차순을 결정하는 인자, 기본값은 오름차순 (True)

04-3) astype

  • 데이터 프레임이나 시리즈의 자료형을 바꾸는 함수
    • dtype
      : 자료형을 지정하는 인자
      특정 열에만 적용하고 싶을 경우 열의 레이블과 자료형을 딕셔너리로 넣음
      ex> A열은 문자열로 B열은 정수로 바꾸고 싶을 경우 dtype인자에 {'A':'str', 'B':'int'}을 인수로 입력

04-4) 데이터프레임 필터링(불리언 인덱싱)

  • bool 배열로 인덱싱하는 기법
  • 불리언 인덱싱에 들어가는 배열은 리스트가 아니라 시리즈도 가능

04-5) 조건에 따라 값 부여(불리언 마스킹)

  • if문 처럼 참, 거짓에(boolean) 따라 값을 부여하는는 것(masking)
  • True or False에 따라 값을 씌우는(masking) 함수

    인자
    - cond (인수는 bool 시리즈, 데이터프레임)
    : 조건문처럼 작동하는 True 또는 False의 배열을 입력받는 인자 mask 함수는 True일 때의 값을 바꾼다.
    - other (인수는 스칼라 , 시리즈, 데이터프레임, 함수 / 기본값은 nan)
    : 조건문이 True일 때 바꿀 값을 지정하는 인자. 기본값은 NaN이다

04-6) 범주화(cut)

  • 숫자와 같은 데이터를 구간별로 나누어 범주화하는 함수

    인자
    - x (인수는 배열)
    : 구간을 나눌 배열을 입력받는 인자. 반드시 1차원이어야 한다
    - bins (인수는 정수, 순서의 배열)
    : 구간을 나누는 기준을 입력받는 인자
    --정수 : 정수만큼의 균등한 구간으로 분할한다
    --순서의 배열 : ex1) [0, 20, 40, 60] 이라면 0 ~ 20, 20 ~ 40, 40 ~ 60 까지의 3개의 구간으로 분할한다
    - right (인수는 bool / 기본값은 True)
    : 구간에서 우측 경계를 포함할지 여부를 결정하는 인자
    - labels (인수는 배열 또는 False / 기본값은 None)
    : 구간의 레이블을 지정하는 인자. False는 가장 왼쪽 구간부터 0, 1, 2, 3... 으로 레이블을 부여한다
    -- 기본값은 구간의 경계를 구간의 레이블로 부여한다
    -- 반드시 bins 인자로 나누어진 구간수와 같아야 한다

04-7) category 자료형

  • 범주화(categorization)를 하는 이유
    - 범주화해서 분류하기 위함
    - 자료형이 category일 필요는 없음(문자열로도 분류가능)
  • category 자료형 사용하는 이유
    - 메모리 절약
    - 순서부여하여 내가 원하는 순서로 정렬하기 위함

04-8) value_counts/plot

s.value_counts(normalize=False, sort=True, ascending=False)

profile
공부하는 데이터 분석가 👩‍💻

0개의 댓글