정형 데이터 분석 / 데이터 시각화

10979 단어 AIpandasAI

1. Pandas

  • Numpy 기반의 정형데이터(엑셀 형태)를 핸들링 하기 위한 파이썬 라이브러리

  • 주요 구성

    • Series - 행과 열을 표현하는 단위(1차원), Key 값을 가진 List
    • DataFrame - Series(행) + Series(열)를 묶어 만들어진 2차원 형태 (흔히 보는 엑셀과 유사한 형태)
    • index 라는 key 값을 항상 가지고 있음
    • Series 데이터와 DataFrame 데이터의 명령어가 다르니 주의
  • 주요 명령어

    • 엑셀 파일을 읽어 DataFrame 형태로 만들기(pd.read_csv, pd.read_sql 등 여러가지 확장자로 읽기 가능)

      df = pd.read_excel('파일명.xlsx', encoding='utf-8-sig')
    • Index 를 기본값(0,1,2...n)이 아닌 별도의 열로 대체

      df.set_index('열 이름')
    • DataFrame의 세부 내용을 간략하게 확인할 때

      df.head() # 전체 중 일부를 확인 head() <-> tail(), default=5
      df.describe() # DataFrame의 기술통계량(평균, 표준편차, 분위 ...)
      df.info() # DataFrame의 열 정보 (Dtype, Null Count ...)
    • Series 데이터 추출하기

      df.loc[3] # Series로 반환 (3 = index)
      df.loc[3:6, 'col1':'col_N'] # 3~6행의 col1 ~ col_N까지 반환(슬라이싱이지만 뒤까지 포함)
      df['col'] # col 데이터 반환 ( Series 형태 )
      df['col'].str.contains('data') # col 열에 data를 포함하는 열은 True 아니면 False 반환, data에 들어갈 수 있는 DataType str뿐이지만 '|'를 사용해 여러 조건을 한번에 찾아낼 수 있음(data = data1|data2|data3|...)
      df['col'].str.endswith('data') # col 열에 끝이 data를 포함하면 True 아니면 False 반환 <=> startswith
      df['col'].str.upper() # col 열에 str 데이터를 모두 대문자로 변환 <=> lower()
    • DataFrame에서 데이터 추출하기

      • Series 추출 방식과 비슷하지만 대부분 대괄호로 2번 감싸지는 패턴이 있다.
      df.loc[[3]] # DF로 반환, Series에 비해 DF의 시인성이 좋음, df.loc[[3,6,9]]처럼 여러개도 동시에 반환 가능
      df.loc[df['col'].str.contains('data'), :] # col행의 data를 포함한 모든 열을 DF 형태로 반환
      df.iloc[3:6, 0:3] # 3~5행 중 0~2번째 열까지만 DF로 반환 loc의 슬라이싱과 다르게 뒤를 포함하지 않는다.
      df[['col1', 'col2', 'col3']] # 전체 행의 col1 ~ col3 를 DF 형태로 반환
    • DataFrame 데이터 핸들링 예

      df['new_col'] = df['col'].apply(lambda x : x + 1) # col열 data에 함수를 적용한 값을 새로 생성된 new_col행에 추가해준다.(apply + 함수가 for문에 비해 빠르다.)
      pivot_df = pd.pivot_table(df, index='col1', aggfunc=np.sum) # df 데이터를 col1 기준으로 모두 더해준 피벗테이블을 반환(엑셀의 피벗테이블과 같다, aggfunc = aggregation function(집계 함수))
      del df['col'] # col 열 삭제
      df.drop(['row']) # DF에서 row(행) 삭제
      df.drop(['col'], axis=1) # DF에서 col(열) 삭제 (axis는 축 방향으로 1이면 열, 0이면 행 삭제(default=0))
      list(df.columns) # DF의 Column명을 뽑아 list로 형변환 (df.index는 인덱스)
      df.rename(columns ={'col1':'열1', 'col2':'열2'}, inplace=True) #col1, col2 열의 이름을 열1, 열2로 변경(inplace는 원본 덮어쓰기 여부(default=False))
      df.sort_values(by='col1', ascending=False, inplace=True) # col1 안의 Data를 기준 정렬, ascending 오름차순 여부 (<=>sort_index(인덱스명 기준 정렬))
      new_df = df # 변수만 다르고 같은 메모리를 가르키기 때문에 원본에 영향을 주게 되는 복사 형태
      new_df = df.copy(deep=True) # default deep=True, 다른 메모리를 가지기 때문에 원본에 영향을 주지 않는 복사
  • 결측치 처리 방법

    • 전체 열의 대푯값을 계산해 삽입
    • 결측치 전후 데이터를 기반으로 평균으로 삽입(시계열 데이터인 경우)
    • 행 단위로 그룹을 묶어 내 그룹 내 대푯값으로 삽입
    • 예측 모델을 만들어 삽입
    • 결측치가 일정 % 이하인 경우 열 데이터를 모두 제외
    • 기타 다른 방법들

좋은 웹페이지 즐겨찾기