최근 파이썬이 개발뿐만 아니라 데이터 분석에도 점점 많이 쓰이고 있다고 하여(또륵...) 파이썬 공부를 시작하려고 합니다. 데이터가 방대해지면서 속도가 느린 R로는 해결이 되지 않는 부분이 생긴다고 하네요. 다년간 R을 사용한 사람으로서 개탄하지 않을 수 없는 소식입니다.. 하지만 저는 앞으로 고용시장에 던져질 예비노동자이기 때문에 배움에 정진하는데 흔들림이 없어야겠죠....ㅎㅋ
데이터 분석에 앞서 분석할 자료를 살펴보는 탐색적 자료 분석(Exploratory Data Analysis)은 반드시 필요합니다. 단순회귀분석을 하고 싶은데 데이터가 어떻게 생겼는지 살펴보지도 않고 종속변수에 문자형 변수를 넣어버리면 ㅎ 곤란합니다. 파이썬에서 기본적으로 다루는 자료형으로는 숫자형, 문자열, 리스트, 튜플, 딕셔너리 등이 있습니다.
1. 숫자형
#1 숫자형
#정수형(Integer)과 실수형(floating-point)
a=1; b=1.2
print(a) #Integer
print(b) #floating-point
1
1.2
#복소수(complex number)
c=1+2j
print(c.real) #return real number
print(c.imag) #return imaginary number
print(c.conjugate()) #return conjugate complex number
print(abs(c)) # return absolute value
1.0
2.0
(1-2j)
2.23606797749979
순서대로 복소수의 실수 부분, 허수 부분, 켤레복소수, 절댓값을 리턴합니다.
##사칙연산
a=4; b=2
print(a**b) #제곱연산
print(7//4) #나눗셈 후 몫 반환
print(7%4) #나눗셈 후 나머지 반환
16
1
3
다른 사칙연산은 일반적인 기호들을 그대로 따릅니다.
2. 문자열 자료형
#2 문자열 자료형
cat="all cats are cute."
animal="""it's hotter than hell where I'm at
I am an animal with you"""
print(cat)
print(animal)
all cats are cute.
it's hotter than hell where I'm at
I am an animal with you
문자열은 큰 따옴포나 작은 따옴표를 이용하여 만들 수 있습니다. 여러 줄을 갖는 문자열(multiline string)을 만들 경우 따옴표를 세 번 써줍니다. (변수 animal이 가리키는 문자열 객체는 트로이 시반의 animal 가사입니다. 공부할 때 ASMR처럼 듣기 좋아요.)
#문자열 인덱싱
print(animal[3])
print(animal[-3])
print(animal[5:11])
print(animal[55:])
s
y
hotter
you
프로그래밍 언어를 배우면서 가장 쇼킹했던 부분은 0부터 숫자를 센다는 것이었습니다. 숫자는 자고로 1부터 세야하는 거 아닌가요..? 또륵.... 아무튼 그래서 animal[3]은 animal이 가리키는 문자열 객체의 네번째 문자 's'를 출력하게 됩니다. animal[-3]은 뒤에서 세번째 문자인 'y'를 출력합니다. animal[5:11]은 여섯번째 문자부터 열번째 문자까지의 문자를 출력합니다. 주의해야할 것은 열한번째 문자까지가 아니라는 점입니다. animal[55:]는 56번째 문자부터 끝 문자까지를 출력합니다.
#문자열 포매팅
number=3
print("There are %d cats." % number)
hour="five"
print("There are %d cats and they have been sleeping for %s hours" %(number, hour))
There are 3 cats.
There are 3 cats and they have been sleeping for five hours
문자열 내에 변수를 이용한 값을 삽입하고 싶을 때 문자열 포매팅을 사용합니다. 문자열 내에 %d을 넣으면 이 자리에 원하는 정수값을 넣을 수 있습니다. %s를 넣으면 원하는 문자열을 넣을 수 있습니다. 여러 값을 넣고 싶을 때는 두번째 예처럼 괄호로 묶어줍니다. 물론 정수나 문자열뿐만 아니라 부동 소수, 8진수 등을 넣을 수도 있습니다. 더 궁금하시다면 참고자료를 참고해주세요.
#소수점 출력
"%0.4f" %3.1415926
'3.1416'
소수점을 원하는 자리만큼만 출력하고 싶을 때 위와 같이 활용합니다. 소수점 다섯번째 자리에서 반올림하여 네번째 자리까지만 출력합니다.
3. 리스트(list) 자료형
#3 리스트 자료형
list1=[1,2,3]
list2=[3,10,"lights"]
list3=["no",[5,"rights"]]
print(list1); print(list2); print(list3);
[1, 2, 3]
[3, 10, 'lights']
['no', [5, 'rights']]
리스트의 요소는 대괄호[]로 감싸며 각 요소값들은 쉼표로 구분합니다. 요소는 숫자, 문자, 리스트 모두 가능하며 비어있을 수도 있습니다.
#리스트 인덱싱
print(list3[0])
print(list3[1])
print(list3[1][1])
no
[5, 'rights']
rights
문자열 인덱싱과 마찬가지로 리스트 내 요소를 0부터 세어 출력할 수 있습니다. list3[1][1]은 list3의 두번째 요소의 두번째 요소인 'rights'를 출력합니다.
#리스트 연산자
a=[6,5,4]; b=[3,2,1]
print(a+b) #리스트 더하기(+)
print(a*3) #리스트 반복하기(*)
[6, 5, 4, 3, 2, 1]
[6, 5, 4, 6, 5, 4, 6, 5, 4]
#숫자형을 문자열로 바꾸기
str(a)
'[6, 5, 4]'
데이터 분석을 하다보면 (아주 가끔) 숫자를 문자 취급하고 싶을 때가 있습니다. 그냥 출력했을 때와는 다르게 리스트의 양 옆에 따옴표가 있는 것을 확인할 수 있죠.
#리스트 내 요소의 위치를 반환
a=[1,2,3]
a.index(3)
2
a라는 리스트 내에 요소 3의 위치를 반환합니다. 0부터 세었기 때문에 2입니다.
4. 튜플(tuple)
#4 튜플 자료형
tuple1=(1,)
tuple2=(1,2,5)
tuple3=8,9,10
tuple4=(5,6,(5,6))
print(tuple1, tuple2, tuple3, tuple4)
(1,) (1, 2, 5) (8, 9, 10) (5, 6, (5, 6))
리스트와 매우 유사하지만 튜플은 소괄호()로 요소를 둘러싸며, 한 번 만들면 수정이 불가능합니다. 변경하면 안되는 값을 알 때 사용하면 유용하겠지만, 실제로는 코딩 중에 값이 변하는 경우가 훨씬 많아 튜플보다 리스트를 더 선호한다고 합니다.
5. 딕셔너리(dictionary)
#2.5 딕셔너리 자료형
dic={'noun':'cat', 'verb':'runs', 'adv':'fast'}
print(dic)
print(dic["noun"])
{'noun': 'cat', 'verb': 'runs', 'adv': 'fast'}
cat
중괄호 {}를 사용하여 생성하는 딕셔너리의 요소는 Key:Value 형태를 가지며 각 요소는 쉼표로 구분합니다. 위에서 Key는 각각 'noun', 'verb', 'adv'이고, 각 Key에 해당하는 Value는 'cat', 'runs', 'fast'입니다. 딕셔너리 내 요소의 순서는 따지지 않아 앞의 리스트나 튜플처럼 인덱싱을 할 수 없습니다. Key의 Value를 알고 싶다면 dic["noun"]처럼 해당 Key를 이용해 조회할 수 있습니다.
print(dic.keys()) #key 리스트 만들기
print(dic.values()) #value 리스트 만들기
print(dic.get('noun')) #key로 value 얻기
print('noun' in dic) #해당 key가 딕셔너리 내에 있는지 논리형으로 반환
dict_keys(['noun', 'verb', 'adv'])
dict_values(['cat', 'runs', 'fast'])
cat
True
dic.get('noun')은 위의 dic['noun']과 동일한 결과를 출력하는데요, 다만 존재하지 않는 키의 값을 조회하는 경우 전자는 None을 리턴하며 후자는 오류를 발생시킵니다.
6. 집합(set)
#6 집합 자료형
s1=set([1,2,3])
print(s1)
s2=set("bAnana")
print(s2)
{1, 2, 3}
{'A', 'b', 'n', 'a'}
집합 자료형은 중복을 허용하지 않으며, 딕셔너리처럼 순서가 없습니다. 중복을 허용하지 않기 때문에 중복된 값을 제거하기 위한 필터 역할로 사용될 수 있습니다.
s1=set([1,2,3,4,5,6])
s2=set([4,5,6,7,8,9])
print(s1&s2) #교집합
print(s1.intersection(s2))
print(s1|s2) #합집합
print(s1.union(s2))
print(s1-s2) #차집합
print(s1.difference(s2))
{4, 5, 6}
{4, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3}
{1, 2, 3}
이상 파이썬의 대표적인 자료형을 알아보았습니다. 프로그래밍에 쓰이는 데이터 구조는 훨씬 다양하고 복잡하지만 이 자료형들은 그 기초가 되므로 확실하게 알아둘 필요가 있겠습니다. 더 자세하고 다양한 내용은 아래 참고도서를 이용하시길 바랍니다.
참고자료
점프 투 파이썬, 박응용 지음
누구나 쉽게 배우는 파이썬 프로그래밍, 제이슨 R. 브리그스 지음
'繩鋸木斷水滴石穿 > Python' 카테고리의 다른 글
Pandas 기초 - 데이터 만들기부터 조회까지 (0) | 2020.04.10 |
---|---|
Numpy 기초 튜토리얼 (0) | 2020.04.03 |
[자료구조] 스택, 큐, 덱 (0) | 2020.02.23 |
[자료구조] 해시, Dictionary (0) | 2020.02.21 |
[자료구조] 힙(heap) (0) | 2020.02.16 |