DeepLearning - pandas, seaborn 주요함수

데이터프레임/시각화 핸들링

딥러닝 주요 라이브러리 묵록

  • numpy, pandas, matplotlib, seaborn, tensorflow, scikit-learn, XGBoost
Libraryaliasusageetc
pandaspdDataFrame handling엑셀 같은 느낌(재료 손질)
numpynpNumerical computation, array handling모델 내부 계산(요리)
matplotlibpltData visualization기본 그래프(like 플레이팅)
seabornsnsAdvanced data visualization예쁜 그래프, 통계 시각화(like 플레이팅)

예시

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split # 모델 내 특정 함수 하나만 가져오는 방식

# pandas: 전처리, 결측치, 필터링 ...
df = pd.read_csv("data.csv")
print(df.head())

# numpy: 행렬, 벡터, 계산 ...
arr = np.array([1,2,3])
print(arr)

# matplotlib: 기본 그래프
plt.plot(x, y)
plt.show()

# seaborn: 분포 확인, 상관관계 확인 ...
sns.countplot(data=df, x='label') # Label 컬럼이 있다고 가정
plt.show() # sns가 그래프를 만들었으니, 꾸미기/출력을 plt가 해 줌 (지금까지 그린 거 출력해!)

Tabular 데이터 로딩

Tabular 데이터

: 표 형태의 데이터 즉, 현업기준으론 아래의 예가 있다.

  • 금융 -> 고객 데이터
  • 쇼핑 -> 구매 기록
  • 병원 -> 환자 정보

pandas로 Tabular 데이터 다루기

데이터 읽기

pd.read_excel()
pd.read_json()
pd.read_csv()
pd.read_table()

데이터 다루기

df = pd.DataFrame({
    'name': ['Kim', 'Lee', 'Park', 'Choi'],
    'age': [25, 30, np.nan, 28],
    'score': [80, 90, 75, 88],
    'gender': ['F', 'M', 'M', 'F']
})

# 데이터의 앞/뒷부분 몇 줄 보기
# = 데이터 상위 n개 행을 확인해보자 (기본 5개)
# = 불러온 데이터의 형태를 파악하자.
df.head(num) 
df.tail(num)


# 컬럼, 자료형, 결측치 개수 확인
# = 결측치(빈 값)가 있나?
# = age가 숫자인가, 문자형인가?
df.info()

# ★ 숫자형 데이터 요약 통계
# = 평균, 표준편차, 최솟값, 최댓값
df.describe()

# 상관관계보기
# aColumn이 커진다면 다른 Column도 커지는가, 반대로 거지는가. (-1 ~ 1)
# heatmap(?) 그릴 떄 참고
# taget과 연관된 수치 변수 찾을 때 참고
# 주의, 상관관계 != 인과관계, 꼭 원인과 결과 를 관계성으로 갖는 건 아님
df[['age', 'score']].corr()
df.corr(numeric_only =True) # 문자형 컬럼은 상관계수 계산 불가

# 행의 열, 개수 확인
# 출력값: (4, 4) -> 행과 열이 각 4개
df.shape

# column Name 확인
df.columns

# 특정 column 선택
# 다중선택도 가능: df[['name', 'score']]
df['age']
df[df['age'] >= 28]
df[df['score'] >= 80]
df[(df['age'] >= 28) & (df['scroe'] >=80)]  # &, | 

# 자료형별로 컬럼 선택하기
df.select_dtypes(include='number') #숫자형
df.select_dtypes(include='object') #문자형

결측치 다루기

# 결측치 여부
df.isnull()

# ★ column별 결측치 개수
df.isnull().sum()


# 결측치 채우기 FILL! N/A !
df.fillna()
df['age'] = df['age'].isnull().fillna(df['age'].mean())
df['age'] = df['age'].isnull().fillna(0)

# 결측치 제거 DROP! N/A!
df = df.dropna()

정렬, 집계, 그룹화

# 정렬
df.sort_values('score', ascending=False)

# 범위별 개수 
# ex. F: 2, M:2
df['gender'].value_counts()

# 그룹별 집계
# ex. F=84.0, M=82.5
df.groupby('gender')['score'].mean()

행/열 기준 계산

df['tota'] = df['age'] + df['score']

# axis=1 : 행기준 (0: 열기준)
# 80이상은 pass, 그 외 fail
df['result'] = df.apply(
  lamda x: 'pass' if x['score'] >= 80 
  else 'fail', 
  axis = 1)

df[['age', 'score']].sum(axis=0)
df[['age', 'score']].sum(axis=1)

새로운 Column 생성

# 85이상에 대해 1, 아닐 경우 0
df['high_score'] = np.where(df['score']>85, 1, 0)

중복처리

# 중복여부
df.duplicated()

# 중복제거
df.drop_duplicated()

문자열 처리

# 앞뒤 공백제거
df['name'] = df['name'].str.strip()

데이터 시각화하기

주요함수

FunctionUsageDescription
countplot범주개수 확인어떤 값이 많은지 (불균형)
hisplot수치 분포 확인값이 어디에 몰렸는지, 치우침 확인
scatterplot변수 간 관계(두 변수 간의) 증가/감소의 연관성
boxplot분포 + 이상치(유난히 튀는 값)이상치 존재 여부, 중앙값 확인
barplot그룹별 평균 비교평균 차이가 있는지
heatmap뱐수 간 상관관계(전체 변수에 대한) 어떤 변수끼리 관련 있는지

예시

# 범주 개수: 카테고리 개수 확인
# 어떤 성별이 더 많지? 불균형이 있나?
sns.countplot(data=df, x='gender')
plt.show()

# 분포: 데이터 분포 확인
# 데이터가 몰린 곳이 어디지? 좌/우로 치우쳤나? 정규분포인가?
sns.histplot(data=df, x='age', bins=10)
plt.show()

# 관계: 두 변수 간의 관계
# A가 커지면 B도 커져? 관계성이 있어?
# 음의 상관(오른쪽아래)? 양(오른쪽 위)의 상관?
sns.scatterplot(data=df, x='age', y='score')
plt.show()

#이상치-outlier
#중앙값, 분포 범위, 이상치 존재여부
sns.boxplot(data=df, x='gender', y='score')
plt.show()

#평균비교
#평균차이가 얼마지? 그룹간 비교하고 싶어
#count는 개수였고, barfpllot은 평균임
sns.barplot(data=df, x='gender', y='score')
plt.show()

#상관관계
#변수 간 관계 한눈에 보기
# 변수끼리 관계가 높은가? (색이 진하다면 관계 강한 것)
sns.heatmap(df.corr(), annot=True)
plt.show()

기타

Tensorflow 검색방법

  • userguide : 목차 조회
  • examples: 모델 종류 별 예제
    • 함수명 + example

시험 규정

  • 시험지 안에 주어진 7개 사이트 통해서 참고 가능 ctrl+C,V 가능
  • 개인 정리 노트 참고 불가
  • [Shift + tab]: 함수 구조 정보 파악 가능

시험 범위

  • 탐색적 데이터 분석 라이브러리 설치, Tabular 데이터로딩/데이터구성확인, 상관분석과 데이터 시각화
  • 데이터 전처리 데이터 결측치 처리, 라벨 인코딩/원-핫 인코딩, XY데이터분리, 데이터 정규분포화/표준화
  • 머신러닝/딥러닝 모델링 Scikit-learn, TensorFlow 활용 문제 예측/분류를 위한 머신러닝/딥러닝 모델링
  • 모델 성능평가 모델 성능평가 및 그래픽 출력