분석할 수 있는 데이터

     

     

    분석할 수 있는 데이터는 두 가지로 나뉜다 -> 수치형 / 범주형

     

    범주형 데이터

    질적 데이터(정성적 데이터) -> 수학 연산이 가능하지 않은 범주로 나뉘어지는 데이터

    명목형 데이터순서형 데이터로 나눌 수 있다.

    - 명목형 데이터: 성별 등 (남성과 여성을 수학적으로 연산할 수 없다.)

    - 순서형 데이터: 연령대 등 (10대와 20대를 더한다고 해서 30대가 되진 않는다.)

     

    수치형 데이터

    양적 데이터(정량적 데이터) -> 수학 연산이 가능한 데이터

    이산형 데이터연속형 데이터로 나눌 수 있다.

    - 이산형 데이터: 연속적이지 않은 데이터, 책의 페이지 수 등

    - 연속형 데이터: 연속적인 데이터, 키, 온도 등

     

    주의해야 할 점

    범주와 수치로 나누긴 했지만, 질적 데이터가 모두 비 수치형 데이터는 아니다. ex) 우편번호는 수치형 데이터지만 수학 연산이 불가

     

     

    Numpy (넘파이)

    데이터 분석 시 사용하는 라이브러리

    import numpy as np # numpy를 불러오고, 이하 코드에서는 numpy 대신 np로 사용하겠다

     

    배열(Array)

     

    Axis, Rank, Shape

    Axis: 배열의 각 축(axis 0, axis 1 ...)

    Rank: 축의 개수(차원) -> 2개면 2차원, 3개면 3차원 ...

    Shape: 축의 길이 -> 2x3 배열의 경우 Shape는 (2, 3)

     

    넘파이로 배열을 만들어보자.

     

    # 1차원 배열
    
    a = np.array([1, 2, 3])
    
    print(a) 	# [1, 2, 3]
    print(type(a))	# <class 'numpy.ndarray'>  //type은 a의 데이터 타입을 반환함
    print(a.ndim)	# 1		// ndim은 차원을 반환하는 메소드
    print(a.shape)	# (3, )	// shape는 모양을 반환하는 메소드
    print(a.dtype)	# int32	// dtype은 a의 데이터의 타입(형식)을 반환하는 메소드
    print(a[1])		# 2		// 리스트처럼 사용 가능
    
    # 2차원 배열
    
    b = np.array([[1, 2.5, 3],
    	      [4, 5, 6.2]])
    
    print(b.shape)	# (2, 3)
    print(b.dtype)	# float64	//소수가 원소기 때문에 int가 아니라 float이 됨

    - 자료형 변환

     

    리스트, 튜플은 직접 배열로 변환이 가능하지만

    문자열, 딕셔너리, 집합은 다른 자료형으로 변환한 후 배열로 변환이 가능하다.

     

    3차원 배열

    a = np.array([[[1, 2, 3],
    	       [4, 5, 6],
           	       [7, 8, 9]],
                  [[10, 11, 12],
                   [13, 14, 15],
                   [16, 17, 18]]])
                   
                   
    print(a.shape) 	# (2, 3, 3) -> 3x3 2차원 배열이 2개!

     

    # Axis 0 (0번째 축의 의미) -> 분석 단위

     

    - Reshape

    기존 배열을 새로운 형태로 다시 구성 = reshape

    배열 요소가 사라지지 않는 형태면 자유롭게 변환할 수 있다. (ex. 3 x 8 -> 4 x 6 -> 6 x 4 -> 1 x 24 ...)

     

    # -1의 의미

    3 x 8 배열에서 reshape(4, -1) -> 4행으로 된 배열로 변환하되, 열은 너가 알아서 계산해 라는 의미

     

    - 배열 생성용 여러 함수들

    np.zeros()	# 0으로 채워진 배열
    np.ones()	# 1로 채워진 배열
    np.full()	# 특정 값으로 채워진 배열
    np.eye()	# 단위행렬 배열 생성
    np.random.random()	# 임의의 값으로 채운 배열 생성
    
    # 사용 예시
    
    np.zeros((2, 3))	# 2 x 3의 0으로 채워진 배열
    np.full((3, 3), 2)	# 3 x 3 의 2로 채워진 배열
    np.eye(4)	# 4 x 4의 단위행렬
    np.random.random((2, 2))	# 2 x 2의 임의의 값으로 채워진 배열

     

    - 배열 인덱싱 & 슬라이싱

    리스트와 유사하다.

    4 x 3의 배열 arr1이 있다고 가정

    arr1[0][1]	# 2
    arr1[0, 1]	# 2
    arr1[행 인덱스]	# 특정 행 전체
    arr1[:, 열 인덱스]	# 특정 열 전체
    arr1[행 인덱스 리스트, 열 인덱스]
    arr1[행 인덱스 리스트, 열 인덱스 리스트]
    
    # .. 등등 다양하게 사용 가능

    # 조건문으로도 배열을 인덱싱 할 수 있다. (ex. height >= 150)

     

    - 배열 사칙연산

    np.add
    np.substract
    np.multiply
    np.divide
    np.power	# 제곱
    np.sqrt 	# 제곱근

    # 행렬 곱 연산은 행렬 배웠던 것이랑 똑같이 수행됨

     

    - 전치행렬(Transpose)

     

    [1 2

     3 4]

    의 2 x 2 행렬이 있으면, 1, 4 를 축으로 하고 2와 3을 교체한다. 즉,

    [1 3

     2 4]

    가 된다.

    간단히 .T를 통해 얻을 수 있다.

     

    Transpose는 나중 되면 정말 자주 나오거나 사용해야 하기 때문에 꼭 기억해두자!

     

    - 배열 내 집계 함수

     

    np.sum()	# 합
    np.mean()	# 평균
    np.std()	# 표준편차
    
    # 예시
    
    np.sum(a)
    
    np.sum(a, axis = 0)	# axis = 0 방향에 대한 합

     

    - 조건에 따라 다른 값을 지정하는 where

     

    np.where(조건문, 참일 때 값, 거짓일 때 값)

    a = np.array([1,3,2,4])
    
    np.where(a>2, 1, 0)	# a>2 참일 때 1 거짓일 때 0 을 출력하는 배열
    
    >>> 0 1 0 1

     

    - 가장 큰 or 작은 값의 인덱스를 반환해주는 argmax / argmin

     

    np.argmax(array(필수), axis = ? (선택))

     

     

    판다스 (Pandas)

    데이터 분석 시 사용하는 라이브러리 - 데이터프레임을 다룰 때 쓰는

     

    데이터프레임 (Dataframe)

     

    데이터 분석에서 사용하는 데이터 구조를 의미

    관계형 데이터베이스의 테이블 / 엑셀 시트 같은 형태 => 2차원 구조

    행: 분석 단위 / 열: 정보(변수)

     

    - 시리즈 (Series)

    하나의 정보(열)에 대한 데이터 집합

     

    - csv 파일에서 데이터 읽어오기

    import pandas as pd
    
    path = '경로'
    data = pd.read_csv(path)

    - 데이터프레임 정보 확인

    head, tail, shape, columns, dtypes, info, describe

     

    head(num): 상위 num개 만틈의 앞쪽 데이터 확인, default = 5

    tail(num): 뒤쪽 데이터 확인, default = 5

    shape: 데이터프레임 모양 확인 -> (row, col) 

    columns: 열 이름 확인

    dtypes: 열 자료형 확인

    info(): 인덱스, 열, 값 개수, 데이터 형식 정보 등 확인

    describe(): 기초 통계 정보 확인

     

    - 데이터 정렬

    sort_index(ascending = True): 인덱스를 기준으로 정렬, ascending = 오름차순(default)

    sort_values(by= '열이름', ascending = True): 

    특정 열을 기준으로 정렬

     

    - 고유 값 확인

    unique(): 

    고유 값 확인

    value_counts(dropna = True(선택)): 

    고유 값과 그 개수 확인, dropna = True거나 생략할 시 NaN(결측치) 제외

     

     

    - 데이터프레임 조회

     

    1) 시리즈로 조회 (1차원)

    df['열이름'] or df.열이름

     

    2) 데이터프레임으로 조회 (2차원)

    df[['열이름']] -----> 열 이름을 리스트로 입력하여 넣어준 것

     

    3) 조건으로 조회: .loc[행 조건, 열 이름]

    행 조건: 조건문 형태 ---> 조건문에 해당하는 데이터만 조회열 이름: 생략 가능, 1개 시 시리즈 2개 이상 시 데이터프레임 출력

     

    # 여러 조건을 만족하는 행 조회

    df.loc[(df['열이름1'] > 150) & (df['열이름2'] == 24)]	# 열이름1 150 이상이랑 열이름2가 24인 행만 조회됨
    
    # 모든 행 가져오기도 가능
    
    df.loc[:, ['열이름', ...]]

     

    # 관련 메소드

    isin([값1, 값2, ...]): 

    값1 or 값2 or ... 인 데이터만 조회

    between(값1, 값2):

    값1~값2 범위의 데이터만 조회

     

    - 집계 함수

    sum(), mean(), max(), min(), count() -> 뭘 의미하는지는 알겠지?

     

    # groupby()

    df.groupby('집계기준변수', as_index=? )['집계대상변수'].집계함수

    집계기준변수: 범주형 변수 (ex. 월 별, 지역 별 등)

    집계대상변수: 집계함수로 집계할 변수 또는 리스트 (ex. 매출액)

    as_index = ? -> True: 집계기준변수를 인덱스로 사용 / False: 열로 사용

     

    i) agg()

     

    groupby(~).agg(['집계함수', '열이름':'집계함수', ...])  -> 여러 집계를 한 번에 수행 가능

     

    집계를 많이 사용해보면서 익숙해지자!

     

     

    Posted by 저본