본문 바로가기

교육

[2021 NIPA AI 온라인 교육][기본교육과정] 데이터 분석을 위한 라이브러리

https://2021nipa.elice.io/explore

 

2021 NIPA AI 온라인 교육 | 엘리스: 코딩, 엘리스에서 시작하세요!

실습중심 온라인 코딩교육, 엘리스! 개인 및 기업 디지털 트랜스포메이션(DT) 교육, 대학 데이터 사이언스 교육은 엘리스로 시작하세요.

2021nipa.elice.io


1강  파이썬의 여러 가지 모듈과 패키지

1. 모듈

    : 특정 목적을 가진 함수, 자료의 모임

    1) 모듈을 사용하는 이유?

        - 코드의 길이가 길어지는 상황에서 모든 함수, 변수를 구현하는 것을 불가능

        - 누군가 만들어 놓은 함수, 변수 등을 활용하면 빠르고 효율적으로 사용할 수 있음

 

2. 모듈 사용하기

   1) import(불러오기) 키워드를 이용해서 모듈 사용

        ex) import random 

    2) 모듈 속 사용하려는 함수/변수의 사용법 확인

        ex) random.randrange(start,stop)        : range(start, stop) 중의 한 원소를 가지고 옴

ex)
  import random

  print(random.randrange(0,2))

    3) 우리가 원하는 내용이 담긴 모듈 제작 가능 (.py로 만들 수 있음)

         ① py파일을 생성 후, 함수와 변수를 만든다.

#cal.py
def plus(a, b) :
    c = a+b
    return c

         ② 다른 파일에서 만들어 둔 py 파일을 불러온다.

                : main.py에서 import cal을 통해 모듈 호출

         ③ 불러온 모듈 속 함수, 변수를 활용한다.

 

3. 패키지

    : 모듈을 폴더(directory)로 구분하여 관리하는 것

       - 왜? : 모듈을 편리하게 관리하기 위해서

< user 폴더 –> cal 모듈 –> plus 함수 이용 >
Ex1)
import user.cal

print(cal.plus(3, 4))
  *main과 cal에 모두 plus 함수가 있다면 오류 발생 가능*

Ex2) from-import 사용
from user.cal imort plus
print(plus(3, 4))

 

 


 

2강  데이터 핸들링을 위한 라이브러리 Numpy

1. Numpy

    : Numerical python : 파이썬에서 대규모 다차원 배열을 다룰 수 있게 도와주는 라이브러리

        - 라이브러리 종류 : pandas, numpy, metplotlib

    1) numpy를 사용하는 이유

         : 데이터의 대부분을 숫자 배열로 볼 수 있음

         : 반복문 없이 배열 처리 가능    (파이썬 리스트에 비해 빠른 연산을 지원하고 메모리를 효율적으로 사용)

import numpy as np          : numpy 모듈을 불러와서 np 별칭 부여

    2) 배열 생성하기

         : numpy 배열 생성 및 출력 형태 확인

         : ndarray : n차원의 배열

np_arr = np.array(range(5))
print(np_arr)                                 / [0 1 2 3 4] (공백으로 구분)           / 리스트(1차원)는 콤마로 구분
print(type(np_arr))                     / <class ‘numpy.ndarray’>

 

2. 배열의 기초 

    1) 배열의 데이터 타입 dtype

         : 파이썬 리스트와 달리 같은 데이터 타입만 저장 가능

arr = np.array([0, 1, 2, 3, 4], dtype=float)
print(arr)                                      / [0, 1, 2, 3, 4, ]
print(arr.dtype)                              / ‘float64’
print(arr.astype(int))                        / [0 1 2 3 4]

dtype 종류

    2) ndarray의 차원 관련 속성 : ndim(n차원) & shape

 

    3) ndarray의 크기 속성과 shape 조절

Ex1)
arr = np.array([0, 1, 2, 3, 4, 5])

print(“arr.shape : {}” .format(arr.shape))                 / arr.shape : (6, )
print(“배열 요소의 수 : {}” .format(arr.size))              / 배열 요소의 수 : 6
print(“배열의 길이 : {}” .format(len(arr)))                   / 배열의 길이 : 6

Ex2)
# arr.shape = 3, 2

print(“arr.shape : {}” .format(arr.shape))                / arr.shape : (3, 2)
print(“배열 요소의 수 : {}” .format(arr.size))             / 배열 요소의 수 : 6
print(“배열의 길이 : {}” .format(len(arr)))                  / 배열의 길이

 

3. Indexing & Slicing

    1) Indexing

         : 인덱스로 값을 찾아냄

Ex1)
x = np.arange(7)

print(x[3])
x[0] = 10                         / x의 0번째 인덱스를 10으로 변경

Ex2) 
x = np.arange(1, 13, 1)               / 1부터 13까지, 간격은 1로 설정   / [[1 2 3 4]
                                                                                                                             [5 6 7 8]
                                                                                                                             [9 10 11 12]]

x.shape = 3,4
print(x[2, 3])                              / 세로로 2번째, 가로로 3번째 인덱스

 

    2) Slicing 

         : 인덱스의 값으로 배열의 일부분을 가져옴

Ex1) 
print(x)                          / [0 1 2 3 4 5 6]

print(x[1:4])                 / 1부터 3까지 출력 ( 배열의 시작은 0)
print(x[::2])                  / 처음부터 끝까지 2의 간격을 두고 가져와라

Ex2) 
print(x)                          / [[1 2 3 4]

                                            [5 6 7 8]
                                            [9 10 11 12]]
print(x[1:2, :2:3])       / [[5]]

 

    3) Boolena Indexing

         : 배열의 각 요소의 선택 여부를 Boolean Mask(불리언 마스크)를 이용하여 지정하는 방식

         : Boolean Mask

               : True, False로 구성된 Mask array

 

    4) Fancy indexing

         : 배열의 각 요소 선택을 index 배열을 전달하여 지정하는 방식

Ex1) 
x = np.arnage(7)

print(x[[1, 3, 5]])                    / [1 3 5]

Ex2) 
x = np.arange(1, 13, 1).reshape(3,4)

print(x)                                                                     / [[1 2 3 4]
                                                                                       [5 6 7 8]
                                                                                       [9 10 11 12]]
print(x[[0, 2]])                                                        / [[1 2 3 4]
                                                                                       [9 10 11 12]

 


 

3강  데이터 조작 및 분석을 위한 pandas 기본

1. Pandas

    : 파이썬 라이브러리

    : 구조화된 데이터를 효과적으로 처리하고 저장

    : array 계산에 특화된 Numpy를 기반으로 설계

 1) Series

    - Numpy의 array가 보강된 형태로 Data와 Index를 가지고 있음

    - 값(values)을 ndarray 형태로 가지고 있음

    - 인덱스를 지정할 수 있고 인덱스로 접근 가능

    - Dictionary를 활용하여 series 생성 가능

 

2. DataFrame (데이터 프레임)

    : 여러 개의 series가 모여서 행과 열을 이루는 데이터

      - Index, Columns 이름 지정

country.index.name = “country”
country.columns.name = “info”

      - 저장(Save) & 로드(Load)

< 저장 >
country.to_csv(“ ”)

country.to_excel(“ ”)

< 로드 >
country = pd.read_csv(“ ”)
country = pd.read_excel(“ ”)

 

예시

 

3. 데이터 선택 및 변경하기

    1) loc : 명시적인 인덱스를 참조하는 인덱싱/슬라이싱

            ex) country.loc[‘china’]

 

    2) iloc : 파이썬 스타일의 정수 인덱스 인덱싱/슬라이싱 (암묵적)

            ex) country.iloc[0]

            ex) country.iloc[1:3, :2]

 

    3) masking 연산이나 query 함수를 활용하여 조건에 맞는 dataframe 행 추출 가능

            ex) country[country[‘population’] < 10000]             / masking 연산 활용

            ex) country.query(“population > 10000”)                 / query 함수 활용

 

    4) series도 numpy array처럼 연산자 활용 가능

            ex) gdp_per_capita = country[‘gdp’] / country[‘population’]

            ex) country[‘gdp per capita’] = gdp_per_capita

 

    5) 데이터를 리스트로 추가 or 딕셔너리로 추가

            ex) df = pd.DataFrame(columns =[‘이름’, ‘나이’,‘주소’])

            ex) df.loc[0]=[‘길동’,‘26’, ‘서울’] / 리스트로 데이터 추가

            ex) df.loc[1] = {‘이름’:‘철수’,‘나이’:‘25’, ‘주소’:‘인천’}                    / 딕셔너리로 데이터 추가

            ex) df.loc[1, ‘이름’] = ‘영희’ / 데이터 수정

       - NaN 컬럼 추가(not a number)

            ex) df[‘전화번호’] = np.nan

            ex)df.loc[0,‘전화번호’] = ‘01012341234’

 

    6) dataframe에서 컬럼 삭제 후 원본 변경

            ex) df.drop(‘전화번호’, axis = 1, inplace = True)         / axis = 1: 열 방향 , =0 : 행 방향

                                                                                                                  / inplace = true : 원본 변경 / false:원본 변경 x

 

 


 

4강  데이터 조작 및 분석을 위한 pandas 심화

1. 데이터 프레임 정렬하기

    1) index 값 기준으로 정렬하기

         : axis = 0 : 행 인덱스 기준 정력(default 오름차순)

        ex) df = df.sort_index(axis = 0)

         : 고려 사항 : 방향 , 오름차순/내림차순

            - axis = 1         : 열 인덱스 기준

            - 오름차순 : ascending = true / 내림차순 : ascending = false

       ex) df.sort_index(axis = 1, ascending = False)

 

    2) column 값 기준으로 정렬하기

         : col1 컬럼 기준 정렬(default 오름차순)

             ex) df.sort_values(‘col1’, ascending = True)

         : col2 컬럼 기준 오름차순 정렬 후 col1 컬럼 기준 내림차순

             ex) df.sort_calues([‘col2’, ‘col1’], ascending = [True, False]]

               - col2의 기준을 방해하지 않는 선에서 col1 정렬 (중복에서 변경과 같은 부분)

 

2. 데이터 프레임 분석용 함수

    1) 집계 함수 – count

        : count, max, min, sum 등

        : count 메서드를 활용하여 데이터 개수 확인 가능(default : NaN 값 제외)

          ex) df.count(axis = 0) : 열 기준으로 카운트        / (세로줄)

                 df.count(axis = 1) : 행 기준 카운트                / ( 가로 줄 )

 

    2) 집계 함수 – max, min

        : max, min 메서드를 활용하여 최대, 최솟값 확인 가능(default : 열기 준, NaN 값 제외)

          ex) df.max() / df.min()             / 결과 데이터 값은 float 형식으로 나옴

 

    3) 집계 함수 – sum, mean

        : sum, mean 메서드를 활용하여 합계 및 평균 계산(default :열 기준, NaN 값 제외)

          ex) df.sum() / df.mean()

        : axis, skipna 인자 활용하여 합계 및 평균 계산 (행 기준, NaN 값 포함 시)

          ex) df.sum(axis = 1)             /행 기준 합계

          ex) df.meann(axis = 1, skipna = False)         / NaN값 포함 시 평균을 NaN로 표기

        : skipna = true : nan를 무시

        : fillna : nan 값이 존재하는 컬럼의 평균 구하여 NaN값 대체

          ex) df[‘math’] = df[‘math’].fillna(B_avg)              / math 컬럼에서 NaN 부분을 d_avg로 채워라

                 df.mean(axis = 1, skipna = False)

 

3. 그룹으로 묶기 

    1) group by

        : 간단한 집계를 넘어서서 조건부로 집계하고 싶은 경우

          ex) df.groupby(‘key’).sum()           / key 컬럼을 기준으로 집계

                 df.groupby([‘key’,‘data1’]).sum()

 

    2) aggregate

        : groupby를 통해서 집계를 한 번에 계산하는 방법

          ex) df.groupby(‘key’).agregate([‘min_집계함수’, np.median_numpy, max])

                 df.groupby(‘key’).aggregate({‘data1’: ‘min’, ‘data2’ : np.sum})

 

    3) filter

        : groupby를 통해서 그룹 속성을 기준으로 데이터 필터링

          ex) df.groupby(‘key’).mean()

                 df.groupby(‘key’).filter(filter_by_mean)

                    / 여기서 filter_by_mean은 평균이 3보다 크면 true라고 나오는 함수로 정의함

 

    4) apply, lambda

        : groupby를 통해서 묶은 데이터에 함수 적용

          ex) df.groupby(‘key’).apply(lambda x: x.max() - x.min())

 

    5) get_group

        : groupby로 묶인 데이터에서 key값으로 데이터를 가져올 수 있다.

          ex) df = pd.read_csv(“~”)

                 df.head()

                 df.groupbt(“시도”).get_group(“충남”)

                 len(df.groupby(“시도”).get_group(“충남”)                     / 개수

 


끝!

 

기본과정은 끝났다! 

사실 좀 전에 끝내고 프로젝트랑 마무리지어서 응용 강의를 듣고 있는데

양이 많아서 이제야 정리했다.

 

응용과정도 파이팅,,~~