데이터 분석의 큰 그림 : CRISP-DM

 

출처 : CRISP-DM IT위키

이를 분석하면 다음과 같이 표로 확인할 수 있다.

CRISP-DM은 데이터를 이용한 비즈니스 문제 해결 방법론이다.

큰 회사들은 이러한 프로세스를 기반으로 둔 자체적인 프로세스를 통해 비즈니스를 한다.

Ai개발자 지망생은 이후 Ai를 개발하면서 기업의 비즈니스를 해결하는 역할을 할 수 있다.

단계 절차 세부활동 비고 간단히
1 BusinessUnderstanding 업무 목표 수립, 현재 상황 평가마이닝
목표 수립, 프로젝트 계획
  무엇이
문제인가?
2 DataUnderstanding 초기 데이터 수집데이터 기술 데이터 품질
검증
진행이 불가할 경우 ①로 회귀 어디?
진짜?
3 DataPreparation 데이터 설정, 선택데이터 생성, 정제 데이터
통합, 데이터 클렌징
  모델링을 위한
데이터 구조
준비
4 Modeling 모델링 기법 선택테스트 설계 생성 모델
생성 및 평가
진행이 불가할 경우 ②로 회귀 학습, 검증
(예측, 평가)
5 Evaluation 결과 평가프로세스 재검토 진행이 불가할 경우 ①로 회귀 문제가
해결되는가?
6 Deployment 전개 계획 수립모니터링 및 유지 계획 최종
보고서 작성
   

 

 

분석할 수 있는 데이터는 다음 질적테이터와 양적테이터로 나뉜다.

흔히 정성적과 정량적 데이터라고 말하는데 처음 보는 사람은 이를 구분하는게 쉽지 않다.

예를 들어 '3월'이라는 데이트를 갖고있다면 이것은 정성적 데이터일까? 정량적 데이터인가?

간단하게 구분하는 방법은 '3월이 1월의 3배인가?' 생각해 보면 된다. 판매량 매출액 같은 정량적 데이터는 A가 B의 n배인가?라는 질문에 위화감이 없을 거다.

그러나 예로 든 3월이 1월의 3배인가?를 들었을 때 우리의 뇌는 이상함을 감지하게 된다. 이렇게 단순히 몇 배인가? 물어볼 수 없는 데이터를 정성적 데이터로 구분할 수 있다. 즉, 월에 관련된 데이터는 정성적 데이터, 질적 데이터이다.

 

 

분석할 수 있는 데이터의 기본은 2차원이다.

흔히 우리가 행과 열의 형태로 Table을 만드는 DB작업을 할 때에도 이러한 형태를 갖는다.

 

분석할 수 있는 정보의 종류 2가지

  • 수치형 (숫자)
  • 범주형 (범주)

두 가지 종류가 특별한 구조를 가져야 함

  • 기본 구조 : 2차원
    • 행 : 분석단위, 데이터 한 건, 한 건
    • 열 : 정보, 변수, 요인(x, feature, input / 독립변수), 결과(y, target, label, output / 종속변수)

(분석, 모델링을 위한) 데이터 구조를 다루는 패키지

  • numpy
  • pandas

 

 

<Numpy>

우리는 python에서 리스트를 많이 활용한다. 다른 타입의 데이터도 한꺼번에 저장 가능하고, 요소를 변경, 추가, 제거하기가 요이하기 떄문이다.

그러나 데이터분석에서는 수학적 계산이 가능해야 되고 대량의 데이터를 처리하는 속도가 빨리야 한다.

numpy는 빠른 수치 계산을 위해 C언어로 만들어진 python 라이브러리고 벡터와 행렬 연산에 편리한 기능들을 제공한다.

 

# 별칭 없이 라이브러리 불러오기
import numpy
a = numpy.array([1, 2, 3, 4, 5])
# 별칭을 주고 라이브러리 불러오기
import numpy as np
a = np.array([1, 2, 3, 4, 5])
# 특정 함수만 불러오기
from numpy import array
a = array([1, 2, 3, 4, 5])

다음과 같은 방법으로 numpy 라이브러리에 내장되어있는 array함수를 사용할 수 있다.

 

numpy는 기본적으로 2차원의 데이터를 가지고 있다.

이를 활용하기 위해서는 다음과 같은 기본 지식을 가져야 된다.

 

주요 용어

  • axis: 배열의 각 축
  • rank: 축의 개수
  • shape: 축의 길이, 배열의 크기

 

예시) 3X4 형태인 배열

  • axis 0 과 axis 1 을 갖는 2차원 배열
  • rank 2 array
  • shape는 (3, 4)

 

1차원, 2차원, 3차원 리스트를 생성해주고 이를 np.array를 활용하여 배열로 변환해 줄거다.

리스트를 생성할 때 한줄로 데이터를 입력해도 되지만, 가독성을 위해 구분해 주었다.

import numpy as np

# 1차원 리스트
a1 = [1, 2, 3, 4, 5]

# 2차원 리스트
a2 = [[1.5, 2.5, 3.2],
      [4.2, 5.7, 6.4]]
      
# 3차원 리스트
a3 = [[[1, 3, 1],
       [4, 7, 6],
       [8, 3, 4]],
      [[6, 2, 4],
       [8, 1, 5],
       [5, 15, 4]]]
       
 # 리스트를 배열로 변경
 b1 = np.array(a1)
 b2 = np.array(a2)
 b3 = np.array(a3)
  • 1차원 배열
    • Rank :1
    • shape : (5, ) / (x, )
  • 2차원 배열
    • Rank :2
    • shape : (3, 5) / (x, y) 행과 열
  • 3차원 배열
    • Rank :3
    • shape : (2, 3, 5) / (x, y, z) Rank 3 부터는 행과 열이 (3, 5)인 배열이 2개 있다는 의미로 읽으면 된다.
  • 앞에서 부터 axis 0, axis 1, axis 2의 크기를 의미한다. shape의 맨 앞 aixs 0은 데이터의 건수를 의미한다.
배열명.ndim 배열 차원 확인
배열명.shape 배열의 형태(크기)를 튜플 자료형으로 제공
배열명.reshape(행, 열) 포함된 요소가 사라지지 않는 형태라면 입력한 행, 열 값으로 변환
1차원 변환시 (행, ) 또는 (행) 형태로 사용
(행, -1), (-1, 열) 표현의 경우 컴퓨터가 알아서 데이터 변환(-1은 컴퓨터에게 맡긴다는 뜻)

 

배열 인덱싱과 슬라이싱

배열[ 행, 열 ] 특정 위치의 요소를 조회  a[0, 1]
배열[행1, 행2, ... , :  ] 다양한 행 범위 조회, 전체 열 조회  a[ [ 0, 1 ], : ] 또는 
a[ [ 0, 1 ] ]  / 열은 생략 가능
배열[  :  , 열1, 열2, ... ] 전체 행 조회, 다양한 열 범위 조회  a[  : , [ 0, 1 ] ] / 행은 생략 불가
( : = 처음부터 끝까지 )
배열[  행1, 행2, ... , 열1, 열2, ...  ] 다양한 행, 열 요소로 범위 검색 a[ 0 : 2, 1 : 2 ]

 

<슬라이싱>

  • 배열[행1:행N,열1:열N] 형태로 지정해 그 위치의 요소를 조회한다.
  • 조회 결과는 2차원 배열이 된다.
  • 마지막 범위 값은 대상에 포함되지 않는다.
  • 즉, **배열[1:M, 2:N]**이라면 1 ~ M-1행, 2 ~ N-1열이 조회 대상이 된다.

<조건 조회>

  • 조건에 맞는 요소를 선택하는 방식이며, 불리안 방식이라고 부른다.
  • 조회 결과는 1차원 배열이 된다.
  • ex) 
    • score= np.array( [ [ 78, 91, 84, 89, 93, 65 ], [ 82, 87, 96, 79, 91, 73 ] ] )
    • print( score[ score >= 90 ] )  # 요소중 90이상인 것만 조회
    • print(score[ ( score >= 80 ) & ( score <= 95 ) ] ) # 요소중 80보다 크거나 같고, 95보다 작거나 같은 것만 조회

<배열 연산>

  • x = np.array([[1, 2], [3, 4]])
  • y = np.array([[5, 6], [7, 8]])
배열 더하기 x + y 또는 np.add( x, y ) 배열 빼기 x - y 또는 np.subtract( x, y )
배열 곱하기 x * y 또는 np.multiply( x, y ) 배열 나누기 x / y 또는 np.divide( x, y )
배열 지수연산 x ** y 또는 np.power( x, y )    

 

<배열 집계 / 중요!>

  • np.sum(배열명) - 전체집계
  • np.sum(배열명, axis = 0) - 열기준 집계
  • np.sum(배열명, axis = 1) - 행기준 집계

 

  • np.argmax(배열명) - 전체 중에서 가장 큰 값의 인덱스
  • np.argmax(배열명, axis = 0) - 행 방향 최대값의 인덱스
  • np.argmax(배열명, axis = 1) - 열 방향 최대값의 인덱스

 

  • np.where(배열명 조건, 조건이 참일경우 값, 거짓일 경우 값] - ex) np.where(a > 2, 1, 0)

 

 

정리 numpy

Array구조 : Axis, Rank, shape

  • 특별히 Axis 0의 의미 이해

Array 조회

  • 인덱스 : 특정 인덱스, 여러 인덱스, 범위 / 조건 조회

Array Shape 변형 : reshape

Array 연산

  • 기본연산 : 사칙연산, 지수, 제곱근

Array 집계

  • sum, mean, min, max, std … (axis = 0, 1 에 따른 연산 방향)

+ Recent posts