[코드잇] 데이터 사이언스

silver0·2022년 8월 29일
0

코드잇

목록 보기
4/8

데이터 사이언스

데이터를 다루는 일
모든 업계가 데이터를 기반으로 움직인다.

분야를 막론하고 데이터는 중요하다.
데이터에 대한 이해와 데이터를 다루는 능력이 있다면
엄청난 경쟁력이 될 것이다.

데이터 과학이란, 데이터 마이닝과 유사하게 정형, 비정형 형태를 포함한
다양한 데이터로부터 지식과 인사이트를 추출하는데
과학적 방법론, 프로세스, 알고리즘, 시스템을 동원하는 융합분야이다.

프로그래밍, 수학과 통계, 특정 분야의 전문성이 함께 겸비해야 한다.

데이터 분석 단계

1. 문제 정의

  • 해결하고자하는 문제를 정의
    해결하고자 하는 게 무엇인지, 언제까지 어떤 결과물을 얻을 것인지,
    어떤 방식으로 데이터를 활용할 것인지 등을 설정한다.
    • 목표 설정
    • 기간 설정
    • 평가 방법 설정
    • 필요한 데이터 설정

2. 데이터 모으기

  • 필요한 데이터를 모을 수 있는 방법을 찾는다.
    이미 만들어진 데이터를 그대로 사용할 수도 있고, 공공데이터를 찾아 볼 수도 있고,
    혹은 웹사이트에서 직접 데이터를 수집할 수도 있다.
    • 웹 크롤링
    • 자료 모으기
    • 파일 읽고 쓰기

3. 데이터 다듬기

  • 데이터의 퀄리티를 높여서 의미 있는 분석이 가능하게끔 한다.
    일반적으로 우리가 수집한 데이터에는 수많은 문제점이 있어서
    분석 자체가 불가능하거나 잘못된 결론을 내는 분석을 할 수도 있다.
    "쓰레기를 넣으면 쓰레기가 나온다(garbage in, garbage out)" 라는 표현이 있다.
    • 데이터 관찰하기
    • 데이터 오류 제거
    • 데이터 정리하기

4. 데이터 분석하기

  • 준비된 데이터로부터 의미를 찾는다
    통계를 이용해서 수치적으로 분석을 하거나, 수십 가지의 그래프를 그려보면서 탐색할 수도 있다.
    처음 설계했던 방식대로 데이터를 활용해서 원하는 결과를 도출해야 한다.
    • 데이터 파악하기
    • 데이터 변형하기
    • 통계 분석
    • 인사이트 발견
    • 의미 도출

5. 데이터 시각화 및 커뮤니케이션

  • 분석 결과를 다른 사람들에게 전달
    어떤 문제를 해결하려 했는지, 어떻게 데이터를 모았는지,
    어떤 방식으로 어떤 인사이트를 얻었는지 등을 다른 사람들에게 전달해야 한다.
    적절한 시각화를 통해 소통을 원활히 할 수 있다.
    • 다양한 시각화
    • 커뮤니케이션
    • 리포트

numpy란?

파이썬 계산작업을 편리하게 해주는 라이브러리

numpy배열(numpy array) 제공

numpy array 만드는 방법

파이썬 리스트를 통해 생성

array1 = numpy.array([2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31])
    
print(array1)
[ 2  3  5  7 11 13 17 19 23 29 31]

균일한 값으로 생성

array1 = numpy.full(6, 7)
    
print(array1)
[7 7 7 7 7 7]
  • numpy 모듈의 full 메소드를 사용하면, 모든 값이 같은 numpy array를 생성할 수 있다.

모든 값이 0인 numpy array 생성

array1 = numpy.full(6, 0)
array2 = numpy.zeros(6, dtype=int)
    
print(array1)
print(array2)
[0 0 0 0 0 0]
[0 0 0 0 0 0]

모든 값이 1인 numpy array 생성

array1 = numpy.full(6, 1)
array2 = numpy.ones(6, dtype=int)
    
print(array1)
print(array2)
[1 1 1 1 1 1]
[1 1 1 1 1 1]

랜덤한 값들로 생성

array1 = numpy.random.random(6)
array2 = numpy.random.random(6)
    
print(array1)
print(array2)
[0.42214929 0.45275673 0.57978413 0.61417065 0.39448558 0.03347601]
[0.42521953 0.65091589 0.94045742 0.18138103 0.27150749 0.8450694 ]
  • numpy의 random 모듈의 random 함수를 사용하면 임의의 값들로 배열을 생성할 수 있다.

연속된 값들이 담긴 numpy array 생성

  • numpy 모듈의 arange 함수를 사용하면 연속된 값들이 담겨 있는 numpy array를 생성할 수 있다.
array1 = numpy.arange(6)
print(array1)
[0 1 2 3 4 5]
  • arange(m)을 하면 0부터 m-1까지의 값들이 담긴 numpy array가 리턴된다.
array1 = numpy.arange(2, 7)
print(array1)
[2 3 4 5 6]
  • arange(n, m)을 하면 n부터 m-1까지의 값들이 담긴 numpy array가 리턴된다.
array1 = numpy.arange(3, 17, 3)
print(array1)
[ 3  6  9 12 15]
  • arange(n, m, s)를 하면 n부터 m-1까지의 값들 중 간격이 s인 값들이 담긴 numpy array가 리턴된다.

list 와 numpy array 비교

list 는 다양한 자료형을 저장할 수 있지만
numpy array는 같은 자료형만 저장할 수 있다.

list는 값을 추가하고 제거하는게 많을 때 사용하고
numpy array는 수치계산이 많고 복잡할 때, 행렬같은 다차원 배열의 경우에 사용한다

통계 기능

최댓값, 최솟값

import numpy as np

array1 = np.array([14, 6, 13, 21, 23, 31, 9, 5])

print(array1.max()) # 최댓값
print(array1.min()) # 최솟값
31
5

평균값

import numpy as np

array1 = np.array([14, 6, 13, 21, 23, 31, 9, 5])

print(array1.mean()) # 평균값
15.25

중앙값

import numpy as np

array1 = np.array([8, 12, 9, 15, 16])
array2 = np.array([14, 6, 13, 21, 23, 31, 9, 5])

print(np.median(array1)) # 중앙값
print(np.median(array2)) # 중앙값
12.0
13.5

표준 편차, 분산

import numpy as np

array1 = np.array([14, 6, 13, 21, 23, 31, 9, 5])

print(array1.std()) # 표준 편차
print(array1.var()) # 분산
8.496322733983215
72.1875

pandas란?

R은 통계를 위한 언어이므로, 데이터 분석의 도구가 잘 갖춰져있고
파이썬은 다양한 용도로 만들어진 언어이고, 데이터 분석의 도구가 평범했다.

데이터 보관, 데이터 정리, 데이터 분석하는 데에 핵심적인 역할을 한 것이 데이터프레임이였고, pandas가 데이터프레임을 그대로 가져와서 인기가 많아졌다.

Pandas의 DataFrame은 2차원 형태의 데이터를 다루기 위한 자료형이다.

From list of lists, array of arrays, list of series

2차원 리스트나 2차원 numpy array로 DataFrame을 만들 수 있다.
pandas Series를 담고 있는 리스트로도 DataFrame을 만들 수 있다.

따로 column과 row(index)에 대한 설정이 없으면 그냥 0, 1, 2, ... 순서로 값이 매겨진다.

import numpy as np
import pandas as pd

two_dimensional_list = [['dongwook', 50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91], ['yoonsoo', 88, 75]]
two_dimensional_array = np.array(two_dimensional_list)
list_of_series = [
    pd.Series(['dongwook', 50, 86]), 
    pd.Series(['sineui', 89, 31]), 
    pd.Series(['ikjoong', 68, 91]), 
    pd.Series(['yoonsoo', 88, 75])
]

# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(two_dimensional_list)
df2 = pd.DataFrame(two_dimensional_array)
df3 = pd.DataFrame(list_of_series)

print(df1)
          0   1   2
0  dongwook  50  86
1    sineui  89  31
2   ikjoong  68  91
3   yoonsoo  88  75

From dict of lists, dict of arrays, dict of series

파이썬 사전(dictionary)으로도 DataFrame을 만들 수 있다.

사전의 key로는 column 이름을 쓰고, 그 column에 해당하는 리스트, numpy array, 혹은 pandas Series를 사전의 value로 넣어주면 된다.

import numpy as np
import pandas as pd

names = ['dongwook', 'sineui', 'ikjoong', 'yoonsoo']
english_scores = [50, 89, 68, 88]
math_scores = [86, 31, 91, 75]

dict1 = {
    'name': names, 
    'english_score': english_scores, 
    'math_score': math_scores
}

dict2 = {
    'name': np.array(names), 
    'english_score': np.array(english_scores), 
    'math_score': np.array(math_scores)
}

dict3 = {
    'name': pd.Series(names), 
    'english_score': pd.Series(english_scores), 
    'math_score': pd.Series(math_scores)
}


# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
df3 = pd.DataFrame(dict3)

print(df1)
       name  english_score  math_score
0  dongwook             50          86
1    sineui             89          31
2   ikjoong             68          91
3   yoonsoo             88          75

From list of dicts

리스트가 담긴 사전이 아니라, 사전이 담긴 리스트로도 DataFrame을 만들 수 있다.

import numpy as np
import pandas as pd

my_list = [
    {'name': 'dongwook', 'english_score': 50, 'math_score': 86},
    {'name': 'sineui', 'english_score': 89, 'math_score': 31},
    {'name': 'ikjoong', 'english_score': 68, 'math_score': 91},
    {'name': 'yoonsoo', 'english_score': 88, 'math_score': 75}
]

df = pd.DataFrame(my_list)
print(df)
   english_score  math_score      name
0             50          86  dongwook
1             89          31    sineui
2             68          91   ikjoong
3             88          75   yoonsoo

데이터타입

import pandas as pd

two_dimensional_list = [['dongwook', 50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91], ['yoonsoo', 88, 75]]

my_df = pd.DataFrame(two_dimensional_list, columns=['name', 'english_score', 'math_score'], index=['a', 'b', 'c', 'd'])

print(my_df.dtypes)
name             object
english_score     int64
math_score        int64
dtype: object

pandas DataFrame에는 다양한 종류의 데이터를 담을 수 있다.
dtypes를 사용해서 각 column이 어떤 데이터 타입을 보관하는지 확인할 수 있다.

한 column 내에서는 모든 값이 동일한 데이터 타입이다.

pandas의 dtype들

pandas에 담을 수 있는 dtype(데이터 타입) 종류

dtype설명
int64정수
float64소수
object텍스트
bool불린(참과 거짓)
datetime64날짜와 시간
category카테고리

데이터 불러올때 특정 컬럼 인덱스로 지정하기

  • 컬럼 위치로 지정
import pandas as pd

df = pd.read_csv('data/mega_millions.csv', index_col=0)
df # 정답 출력
  • 컬럼 이름으로 지정
import pandas as pd

df = pd.read_csv('data/mega_millions.csv', index_col='Draw Date')
df # 정답 출력


코드잇에서 무료 수강하며 학습한 내용을 정리한 글입니다.

profile
작은 일이라도 꾸준히 노력하면 큰 뜻을 이룰 수 있다

0개의 댓글

관련 채용 정보