Python, R과 같은 수많은 언어들에서 제일 중요한 건, 해당 언어에서 어떠한 자료형을 가지고 있느냐다.
대부분의 오류는 사용하려는 api에 데이터를 담고 있는 형태(Type), 담겨 있는 데이터의 형태(Data type), 데이터의 구조(Shape)가 적합하지 않아 발생하며, 어지간해선 이를 해결하면 해결된다.
성능향상 문제에서도 Type, Data type, Shape은 지대한 영향을 미치며, 이를 어떻게 가지고 노느냐에 따라서 같은 알고리즘도 전혀 다른 방식으로 접근할 수 있다.
그러므로, Python 첫 번째 page에선 이에 대해 간략하게 살펴보도록 하자
- Python을 사용하면서 느낀 중요한 부분에 대해 짚고 넘어갈 것이므로, 보다 상세한 설명을 원한다면 구글링 하길 바란다(분석가에게 제일 중요한 능력은 검색 능력이지 않는가!).
- 일부 자료형은 설명하다보면 아주 깊게 들어가게 되므로, 자세한 설명은 뒤로 미루도록 하겠다.
- Python을 사용하며, 데이터 분석에 유용하다고 느낀 Type을 위주로 설명한다.
Type
- scalar
- list
- array
- tensor
- dictionary
- DataFrame
위 6가지 외에도 여러 Type이 존재하지만, 데이터 분석을 하면서, 숨 쉬듯 사용했던 Type 위주로 추려냈다.
위 Type중 numpy의 array나 pandas의 DataFrame, tensorflow의 tensor 같이 해당 Type의 기능이 꽤 많아 제대로 이해하고 사용하려면 두꺼운 책 여러 권을 읽어야 하지만, 이는 뒤로 미뤄두고 오늘은 가볍게 설명해보자.
Scalar
scalar를 극단적으로 단순하게 말해보면, 그냥 숫자나 문자가 딱 한 개 나오는 경우를 가리킨다. 여기서 문자라는 것은 눈에 보이기엔 문자처럼 보이지만 실제로는 숫자인데, 대체 이게 뭔소리냐 싶겠지만, 설명을 들어보면 꽤 쉽게 이해될 것이다.
Python의 scalar에는 크게 4개의 자료형이 있다.
- int
- float
- None
- Boolean
여기서 int는 정수, float는 소수, None은 값이 없음, Boolean은 True or False이다. 자, 이제 하나하나 설명해보도록 하자.
int(정수)
# int
>>> 1
1
- 자, 숫자 1을 셀 안에 넣고 ctrl + enter를 입력하니 1이 반환되었다.
- >>>는 입력한 코드
- 아래에 >>> 없이 숫자만 나온 경우는 출력된 결과이다.
>>> a = 1
>>> print(a)
1
>>> print(type(a))
<class 'int'>
- a에 1을 할당하고 print() 해보자
- print()는 말 그대로 print(출력)하는 함수이다.
- 참고로 주피터 노트북의 경우 셀의 맨 마지막 줄에 출력하고자 하는 함수를 입력하면, 해당 함수의 내용이 바로 출력 된다.
- type()은 변수의 자료형을 확인하는 방법이다.
# int 함수를 이용하면 소수를 정수로 바꿀 수 있다.
# 소수 > 정수
>>> int(2.35)
2
# Boolean > 정수
>>> int(True)
1
# 문자 > 정수
>>> int("123")
123
- int() 함수는 int가 될 수 있는 자료형을 int로 바꿔주는 역할을 한다.
- ""나 ''는 문자를 의미하는데 담겨 있는 내용이 숫자인 경우엔 숫자로 바꿀 수 있다.
- True의 경우 분명 문자인데 정수 1로 바뀌는 것이 이상하게 보일 수 있는데, 이는 꽤 재미난 성질이므로, 뒤에서 다시 언급하도록 하겠다.
- 그러나, 정수로 형태를 변환시킬 수 없는 경우 ValueError가 뜨게 된다.
>>> int("scalar")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-17-45517d963ca8> in <module>
----> 1 int("scalar")
ValueError: invalid literal for int() with base 10: 'scalar'
>>> int("1.25")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-18-fb02bea94e38> in <module>
----> 1 int("1.25")
ValueError: invalid literal for int() with base 10: '1.25'
>>> int("True")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-19-c0bc75205372> in <module>
----> 1 int("True")
ValueError: invalid literal for int() with base 10: 'True'
- "" 나 '' 안에 문자 혹은 소수가 들어가는 경우 ValueError가 발생한다.
- 앞에서 1로 바뀌었던 True 역시 "True"로 들어가는 경우 ValueError가 발생한다.
float(소수)
# float
>>> print(1.25)
1.25
>>> b = 2.75
>>> print(b)
2.75
>>> print(type(b))
<class 'float'>
>>> print(float(10))
10.0
- 말 그대로 소수이다.
- int() 함수와 마찬가지로 float()를 하면 정수를 소수로 치환할 수 있다.
- int()함수와 마찬가지로 float()이 될 수 없는 대상을 치환하려고 하는 경우 ValueError가 뜬다.
# 반올림, 올림, 버림을 해보자
>>> import numpy as np
>>> import math
>>> c = 15.62719
# 반올림
>>>print(np.round(c, 2))
>>>print(round(c, 3))
15.63
15.627
# 올림
>>> print(np.ceil(c))
>>> print(math.ceil(c))
16.0
16
# 버림
>>> print(np.trunc(c))
>>> print(math.trunc(c))
15.0
15
- 반올림은 python의 기본 함수인 round가 있다.
- 반올림, 올림, 내림은 주로 numpy, math 모듈의 함수를 이용한다.
- numpy으로 충분하므로, 굳이 math 모듈을 가지고 올 필요는 없다.
- import는 특정 모듈을 가지고 온다는 것을 의미하며, as는 그 모듈을 as 뒤에 있는 문자로 간단하게 표현하겠다는 것을 의미한다.
- np.round(x, N): float x를 소수점 N 자리에서 반올림한다.
- np.ceil(x): float x를 올림 한다(math.ceil()과 달리 결과는 float으로 반환).
- np.trunc(x): float x를 내림한다(math.trunc()과 달리 결과는 float으로 반환).
None(값없음)
>>> None
>>> d = None
>>> print(d)
None
- 말 그대로 값이 없다는 것을 의미한다.
- 특정 변수를 미리 생성해놓고 추후 Data를 넣는 경우나, 결측 값 같이 값이 있어야 하는데 존재하지 않음을 나타낼 때 사용된다.
Boolean
>>> e = 10
>>> print(e == 10)
True
>>> print(e == 12)
False
>>> print(e != 10)
False
>>> if e == 10:
>>> print("Go")
>>> else:
>>> print("stop")
Go
- Boolean 또는 Bool이라 불리는 scalar는 True와 False 두 개의 값으로 이루어져 있다.
- if 문과 같이 True, False에 따라 다른 결과를 반환하는 경우나, 특정 값을 추출할 때 자주 사용된다.
>>> bool(1)
True
>>> bool(10.0)
True
>>> bool("abc")
True
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool("")
False
>>> print(int(True))
1
>>>> print(int(False))
0
- Boolean의 True는 1에 False는 0에 대응한다(이 성질을 잘 이용하면 코드를 아주 단순하게 만들 수 있다).
- bool() 함수를 이용하면 0, 0.0, ""은 False에 나머지 경우는 True를 반환한다.
그 외
위 내용을 보면 그렇다면 알파벳 같은 문자의 Type은 무엇일까? 하는 궁금증이 들 것이다.
>>> type("abc")
str
>>> type("123")
str
- str이라 반환되며, 이는 string의 줄임말로 문자열을 의미한다. 문자와 숫자 Data는 그 접근 방향이 꽤나 다르므로, "Data가 딱 하나 있는 것들을 scalar라고 뭉뚱그려 말하지 않는구나!"라고 단순히 생각해보자.
- scalar에 대한 심층적인 설명으로 들어가면, 내용이 상당히 길어지므로, 단순하게 숫자로 표현할 수 있거나 값이 존재하지 않는 경우를 scalar라고 생각하면 된다(상세한 내용은 위키피디아를 참조하자).
- scalar는 뒤에서 배울 벡터에 원소가 하나만 있는 상태라고 생각하면 된다.
이번 포스팅에서는 데이터의 Type과 scalar에 대해 알아보았다. 간략히 설명하려 했으나, 쓰다 보니 내용이 꽤 길어져 이 사람이 뭘 이야기하고 싶은 건가 싶을 수도 있으니, 다음 포스트부터는 좀 더 단순하게 적어보도록 하겠다.
'Python > Basic' 카테고리의 다른 글
Python-기초: 1.4. 자료형(5) - dictionary (0) | 2021.01.15 |
---|---|
Python-기초: 1.3. 자료형(4) - tensor (0) | 2021.01.15 |
Python-기초: 1.2. 자료형(3) - array (0) | 2021.01.14 |
Python-기초: 1.1.자료형(2) - list (0) | 2021.01.14 |
Python 파이썬이란??? (0) | 2020.06.24 |