AIVLE

데이터 처리

민주82 2023. 2. 7. 16:07

데이터 전처리의 두가지 단계 !

① 데이터 구조 만들기

② 모델링을 위한 전처리

 

                           Raw data                            

         csv, 데이터베이스, Log...   

                               

 |

① 데이터 구조 만들기

 |

           

                                 하나의 데이터셋                                 

                 : 분석단위 

                 : 정보, 변수

 

    | 

    ② 모델링을 위한 전처리

   |

 

모델링 가능한 데이터 셋

모든 셀은 값이 있어야하고, 숫자 !

                      

 

 

<데이터프레임 변경>

- 모든 열 이름 변경

df.columns = ['column_1', 'column_2', 'column_3', 'column_4', 'column_5']

이런 식으로 열 이름 하나씩 지정 !

 

- 지정한 열 이름 변경

df.rename(columns={'column_1': '바꿀이름_1',
'column_2': '바꿀이름_2',
'column_3': '바꿀이름_3',
'column_4': '바꿀이름_4',}, inplace=True)

inplace = False(기본값) --> 단순 조회 기능/  컬럼명이 바뀌지 않고!

inplace = True --> 실제로 값이 바뀜

 

 

 

열 추가

data['새로 만들 열'] = data['column_1'] / (1+data['column_2']/100 )

 

기존 열 column_1과 column_2를 계산한 결과로 새로운 열을 만든다.

 

 

열 삭제

@@@열을 삭제할 때는 항상 조심!!@@@

drop() : 메소드를 사용해 열을 삭제
- axis=0: 행 삭제(기본 값) 
- axis=1: 열 삭제
- inplace=True: 옵션을 지정해야 실제로 반영이 됩니다.
                False : 삭제한 것 처럼 보여줘(조회!)

#열 하나 삭제
data.drop('column_1', axis=1, inplace=True)

#여러 열 삭제
data.drop(['column_1','column_2'], axis=1, inplace=True)
# 여러개일 때 리스트!

 

값 변경 

.map({ ‘기존값’:’새값’, ‘ ‘:’ ‘ , …})

범주형 값을 다른 값으로 변경

 

 

cut()

pd.cut(숫자형변수, 분할방식, 범주값)

숫자형 변수를 범주형 변수로 변환

#  3 등분으로 분할후 a,b,c로 이름 붙이기기
age_group = pd.cut(data['Age'], 3, labels = ['a','b','c'])

 

(32, 40]

32<  <= 46

 

 

<데이터프레임 결합>

pd.concat()

- 매핑 기준 : 인덱스(행), 칼럼이름(열)

 

pd.merge()

- 매핑 기준 : 특정 칼럼(key)의 값 기준으로 결합

 

CONCAT

방향

• axis=0 : 세로(행)로 합치기  --> 아래로 붙여라

• axis=1 : 가로(열)로 합치기  --> 옆으로 붙여라

방법

• join = ‘outer’ : 모든 행과 열 합치기 (기본값)

• Join = ‘inner’ : 매핑되는 행과 열만 합치기

pd.concat([df1, df2], axis = 1, join = 'inner')

 

MERGE

두 데이터프레임을 지정한 키 값을 기준으로 병합

left/right/outer/inner join

 how='inner'

• how='outer'

pd.merge(df1, df2, how = 'inner')
pd.merge(df1, df2, how = 'inner', on = 'A')

 

Pivot

집계된 데이터를 재구성

dataframe.plot(index, column, values)

 

 

 

시게열 데이터

: 행과 행에 시간의 순서가 있고 시간 간격이 동일한 데이터

 

 

시계열 데이터일때 사용하는 3가지 함수

  1. .shift() : 시계열 데이터에서 시간의 흐름 전후로 정보를 이동시킬 때 사용
  2. .rolling().mean() : 시간의 흐름에 따라 일정 기간 동안 평균을 이동하면서 구하기
  3. .diff() : 특정 시점 데이터, 이전시점 데이터와의 차이 구하기

 

CRISP-DM

 

① Business Understanding

: 문제정의, 요인파악을 위해 가설 수립

 

   과학 연구에서는..

  1.  귀무가설: 기존 연구 결과로 이어져 내려오는 정설
  2.  대립가설: 기존의 입장을 넘어서기 위한 새로운 연구 가설
  3.  우리가 수립하는 가설을 대립가설이라고 부르기도 함

가설을 세울 때!

해결해야 하는 문제(목표, y)가 무엇인가?   →   y를 설명하기 위한 요인(x)을 찾음  →  가설의 구조를 정의(x→y)

 

 

② Data Understanding

: 데이터 원본 식별, 취득 / 데이터 탐색

 

Exploratory Data Analysis 탐색적 데이터 분석

: 개별 데이터 분포, 가설 맞는지 확인, NA, 이상치 파악

Confirmatory Data Analysis 확증적 데이터 분석

: 탐색적으로 파악하기 애매한 정보는 통계적 분석 도구(가설검정)사용

 

 

 Data Preparation

  1. 모든 셀에 값이 있어야 한다.
  2. 모든 값은 숫자이어야 한다. (범주 -> 숫자)
  3. 값의 범위를 일치시켜야 한다. (옵션)

- 결측치 조치, 가변수화(범주 -> 숫자), 스케일링, 데이터 분할

 

 Modeling

: 중요 변수들을 선택하고 적절한 알고리즘을 적용하여 예측모델 생성

  생성된 모델 평가

 

⑤ Evaluation

: 모델에 대한 데이터 분석 목표와 비즈니스 목표달성에 대한 평가

  비즈니스 목표에 부합되는지 보장

 

 Deployment

: 프로젝트 결과물 최종확정 / 모델 및 배포가 고객 목표를 충족하는지 확인

 

 

 

시각화 라이브러리

 

데이터에는 비즈니스가 담겨있다 !

※ 데이터 시각화의 목적 - 비즈니스의 인사이트를 파악하는 것 !

 

기본 차트 그리기

(1) 차트그리기

plt.plot(1차원 값)

 

(2) x축과 y축의 값 지정하기

plt.plot(x축, y축)

 

(3) 차트 꾸미기

plt.xticks(rotation = 25)       # x축 값 꾸미기 : 방향을 25도 틀어서
plt.xlabel('x축 이름')             # x축 이름 지정
plt.ylabel('y축 이름')             # y축 이름 지정
plt.title('제목')                  # 타이틀



# 그 외 옵션들

plt.plot(data['column_1'], data['column_2']
         ,color='green'                # 칼러
         , linestyle='dotted'          # 라인스타일
         , marker='o')                 # 값 마커(모양)

 

그래프 여러개 겹쳐 그리기

#첫번째 그래프
plt.plot(data['column_1'], data['column_2'], color='green', linestyle='dotted', marker='o')

# 두번째 그래프
plt.plot(data['column_3'], data['column_4'], color='r', linestyle='-', marker='s')

# 레이블 표시하기. loc = : 위치
plt.legend(loc = 'upper right')    
plt.grid()    #격자는 수치 볼 때 편리한므로  추천

#마지막에 show
plt.show()

 

데이터프레임.plot()  --> 이것도 가능!!

 

 

그래프 여러개 한번에 출력하기

plt.subplot(row, column, index)

 index:순서

(2,1,1)
(2,1,2)

: 2행 1열로 나누고 1,2로 순서 정하기

(1,2,1) (1,2,2)

: 1행 2열로 나누고 1,2로 순서 정하기 

 

 

 

개별 변수 분석 도구(단변량 분석)

숫자형 변수, 범주형 변수

 

<숫자형 변수>

  1. 기초 통계량 : 숫자로 요약하기 (정보의 대푯값)
  2. 도수분포표 : 구간을 나누고 빈도수 계산

숫자로 요약하는 방법

평균 -

  • 산술 평균: 모든 값들을 더한 후 개수로 나눈 수
  • 기하 평균
  • 조화 평균: 분자가 동일한 두 비율의 평균

중위수 - 자료의 순서상 가운데 위치한 값

최빈값 - 자료 중에서 가장 빈번한 값

 

사분위수

: 데이터를 오름차순으로 정렬한 후, 전체를 4등분하고 각 경계에 해당되는 값(25%, 50%, 75%)을 의미

 

--> df.describe() 활용하면 기초통계량 구할 수 있음

.describe() 실행결과

총 800명이라면

0.42~20.12까지 200명이 있다는 뜻!

 

 

 

시각화

 

       1. 히스토그램 

          : plt.hist() / sns.histplot()

plt.hist(titanic.Fare, bins = 5, edgecolor = 'gray')
sns.histplot(x= 'Fare', data = titanic, bins = 20)

# bins 값을 크게하면 Fare의 구간이 세분화된다.

      bins의 숫자를 적절히 조절해가며 자료를 파악하는 것이 중요

 

 

       2. 밀도함수 그래프(kde plot)

            : 막대의 너비를 가정하지 않고 모든 점에서 데이터의 밀도를 추정하는 커널 밀도 추정 방식을 사용하여 히스토그                  램의 단점을 해결 / 밀도함수 그래프 아래 면적은 1

              ※ 히스토그램 단점: 구간 bin의 너비에 따라 전혀 다른 모양이 됨    

sns.histplot(x = 'Age', data= titanic, kde=True, bins =16)

히스토그램과 밀도함수 그래프

       3. Box plot

           :plt.boxplot()

            반드시 NaN을 제외해야 한다. (sns.boxplot은 NaN 알아서 빼고 그림)

             --> .notnull()로 제거 후 ..

plt.boxplot(temp['Age'])
plt.grid()
plt.show()

#옆으로 그리기
plt.boxplot(temp['Age'], vert = False)

sns.boxplot(x = titanic['Age'])
plt.grid()
plt.show()

 

 

 

<범주형 변수>

범주형 빈도수 

: 시리즈.values_counts()

 

범주별 비율

: df.shape() 했을때 행의 수인 ([0])으로 나눔 

  시리즈.values_counts() / 시리즈.shape[0]

# 기초통계량
boston['chas'].value_counts() / boston['chas'].shape[0]

실행 결과

시각화

        1. Bar Plot

             sns.countplot : 범주별 빈도수를 계산하고 bar plot으로 나타냄

             plt.bar를 이용하려면 범주별 빈도수를 직접 계산한 결과를 입력해야 범주별 빈도 bar plot이 그려짐

sns.countplot(boston['chas'])
plt.grid()
plt.show()

 

 

 

 

 

'AIVLE' 카테고리의 다른 글

Web Crwaling ② - 네이버 주가 데이터 수집  (1) 2023.02.17
Web Crwaling ① - basic  (0) 2023.02.17
데이터 분석 및 의미 찾기  (0) 2023.02.09
Python 라이브러리  (0) 2023.02.06
Python 프로그래밍  (0) 2023.02.03