데이터를 다루는 일
모든 업계가 데이터를 기반으로 움직인다.
분야를 막론하고 데이터는 중요하다.
데이터에 대한 이해와 데이터를 다루는 능력이 있다면
엄청난 경쟁력이 될 것이다.
데이터 과학이란, 데이터 마이닝과 유사하게 정형, 비정형 형태를 포함한
다양한 데이터로부터 지식과 인사이트를 추출하는데
과학적 방법론, 프로세스, 알고리즘, 시스템을 동원하는 융합분야이다.
프로그래밍, 수학과 통계, 특정 분야의 전문성이 함께 겸비해야 한다.
파이썬 계산작업을 편리하게 해주는 라이브러리
numpy배열(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]
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]
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 ]
array1 = numpy.arange(6)
print(array1)
[0 1 2 3 4 5]
array1 = numpy.arange(2, 7)
print(array1)
[2 3 4 5 6]
array1 = numpy.arange(3, 17, 3)
print(array1)
[ 3 6 9 12 15]
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
R은 통계를 위한 언어이므로, 데이터 분석의 도구가 잘 갖춰져있고
파이썬은 다양한 용도로 만들어진 언어이고, 데이터 분석의 도구가 평범했다.
데이터 보관, 데이터 정리, 데이터 분석하는 데에 핵심적인 역할을 한 것이 데이터프레임이였고, pandas가 데이터프레임을 그대로 가져와서 인기가 많아졌다.
Pandas의 DataFrame은 2차원 형태의 데이터를 다루기 위한 자료형이다.
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
파이썬 사전(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
리스트가 담긴 사전이 아니라, 사전이 담긴 리스트로도 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(데이터 타입) 종류
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 # 정답 출력
코드잇에서 무료 수강하며 학습한 내용을 정리한 글입니다.