파이썬을 설치하게 되면 The Python Standard Library에 표준 내장 자료형과 표준내장 함수, 표준내장 모듈이 있다.
list
, dict
, tuple
, set
등print()
, len()
, range()
, enumerate()
, map()
, zip()
등os
, sys
, itertools
, collections
, math
등파이썬에는 값을 담아두는 컨테이너(Container) 자료형이 다수 존재한다. 크게 보면 값을 변경시킬 수 있는 리스트(list
)와 집합(set
)이 있고 값을 변경시킬 수 없는 튜플(tuple
)로 나눌 수 있다.
list
)리스트(list
)는 다음과 같은 특징이 있다.
mutable
)하다.index
)가 있다.[
, ]
을 꺾쇠기호로 열고 닫아 리스트 객체를 생성시킨다. 생성된 리스트 객체에 .append()
메쏘드를 사용해서 추가로 리스트 객체를 추가한다.
데이터 사이언스 기능: ['데이터 조작', '시각화', '모형']
데이터 사이언스 기능: ['데이터 조작', '시각화', '모형', '커뮤니케이션']
리스트 객체 두개 features
와 biz_features
를 결합시켜 새로운 리스트 객체를 생성시킬 경우 +
연산자를 사용하면 된다.
biz_features = ["문제정의", "운영", "사업모형"]
data_science = features + biz_features
print(f"데이터 사이언스: {data_science}")
데이터 사이언스: ['데이터 조작', '시각화', '모형', '커뮤니케이션', '문제정의', '운영', '사업모형']
for
함수를 사용해서 리스트(features
) 각 원소를 하나씩 뽑아낼 수도 있다.
데이터 조작
시각화
모형
커뮤니케이션
앞서 언급한 것처럼 리스트의 원소는 변경이 가능하다.
데이터 조작
Visualization
모형
커뮤니케이션
리스트 data_science
객체의 원소값에 접근하고자 할 경우 index()
메쏘드를 사용하여 숫자 위치를 파악한다. len()
함수를 사용해서 리스트 전체 크기를 파악할 수 있고, 0부터 시작되는 파이썬 색인 규칙에 따라 data_science.index('사업모형')
을 통해 6번째 위치 즉 마지막에 위치함도 쉽게 파악하게 된다.
리스트 전체길이: 7, 사업모형 위치: 6
더불어 .append()
와 .remove()
메쏘드를 사용해서 리스트에 원소를 추가하고 삭제하는 것도 가능하다.
리스트 원소 추가: ['데이터 조작', 'Visualization', '모형', '커뮤니케이션', 'R']
리스트 원소 제거: ['Visualization', '모형', '커뮤니케이션', 'R']
.pop()
메쏘드를 사용하게 되면 리스트 원소를 뽑아낼 수 있고, .count()
메쏘드를 통해 원소 갯수도 셀수 있다.
'R'
리스트 잔존 원소: ['Visualization', '모형', '커뮤니케이션']
2
튜플(tuple)은 리스트와 마찬가지로 값(value)을 다수 저장시킬 수 있지만 한번 생성된 튜플 내부 원소값은 변경시킬 수가 없다. 즉, 변경시킬 수 없는 immutable
자료구조로 ()
으로 생성시키는데 순서가 있다. 튜플의 특징을 다음과 같이 요약할 수도 있다.
index
색인이 있다.immutable
).pair
형태로 되어 있다.가장 단순하게 튜플을 생성시키는 방법은 괄호 (
, )
를 사용하여 문자열과 숫자를 순서대로 넣는 방식이다.
(1, 'ggplot', 2, 'dplyr', 3, 'caret'), 원소추출: ('ggplot', 2)
features
리스트와 packages
리스트 두개를 하나로 묶어 zip()
함수를 사용하게 되면 튜플 tuple
객체 toolchain
이 생성된다.
packages = ["dplyr", "ggplot", "broom"]
features = ["데이터 조작", "시각화", "모형"]
toolchain = zip(packages, features)
print(f"데이터 사이언스 툴체인: {list(toolchain)}")
데이터 사이언스 툴체인: [('dplyr', '데이터 조작'), ('ggplot', '시각화'), ('broom', '모형')]
('ggplot', '시각화')
튜플의 두 값을 꺼네는데 먼저 zip
으로 압축된 것을 list()
를 씌워서 리스트로 빼내고 색인 [1]
을 걸어 두 변수에 각각 할당시킨다.
toolchain = zip(packages, features)
package, feature = list(toolchain)[1]
print(f"팩키지: {package}, 기능: {feature}")
팩키지: ggplot, 기능: 시각화
하지만 튜플 원소는 변경할 수 없기 때문에 값을 변경시키게 되면 오류가 생성된다.
Error in py_call_impl(callable, dots$args, dots$keywords): TypeError: 'tuple' object does not support item assignment
Detailed traceback:
File "<string>", line 1, in <module>
set
)집합(set
)은 수학의 집합이론을 파이썬으로 구현한 것이다. 즉, 집합 자료구조는 중복된 값이 없는 유일무이한 순서없는 원소로 구성된 집합체다. 파이썬 집합 자료구조는 다음 특징을 갖추고 있다.
mutable
).south_korea = ["한국어", "민주주의", "자본주의", "한반도", "한반도", "수정자본주의"]
north_korea = ["한국어", "전체주의", "공산주의", "한반도", "사회주의", "한국어", "공산주의"]
south_set = set(south_korea)
north_set = set(north_korea)
print(f"대한민국 --> 리스트 크기: {len(south_korea)}, 집합 크기: {len(south_set)}")
대한민국 --> 리스트 크기: 6, 집합 크기: 5
북한 --> 리스트 크기: 7, 집합 크기: 5
집합원소 추가, 삭제, 갱신을 할 경우 .update()
, .add()
, .discard()
메쏘드를 사용한다.
대한민국: {'한국어', '민주주의', '한반도', '한라산', '자본주의', '수정자본주의'}
대한민국: {'한국어', '민주주의', '한반도', '한라산', '자본주의'}
대한민국: {'한국어', '민주주의', '한반도', '한라산', '자본주의', '설악산', '서울'}
집합 자료구조를 갖추게 되면 백미는 친숙한 집합 연산 작업을 수행함에 있다.
.ution()
메쏘드: 합집합, \(\cup\).intersectin()
메쏘드: 교집합, \(\cap\).diff()
메쏘드: 차집합, \(\setminus\)통일한국 합집합: {'공산주의', '한국어', '민주주의', '한반도', '사회주의', '한라산', '자본주의', '전체주의', '설악산', '서울'}
통일한국 교집합: {'한반도', '한국어'}
통일한국 차집합 A: {'민주주의', '한라산', '자본주의', '설악산', '서울'}
통일한국 차집합 B: {'전체주의', '사회주의', '공산주의'}
dictionary
)파이썬의 뿌리는 딕셔너리 (dictionary
)라고 해도 과언은 아니다. 딕셔너리 키는 유일무이하며 변경될 수 없는 제약조건을 충족해야 된다. 딕셔너리 (dictionary
) 자료구조는 다음 특징을 갖추고 있다.
iterable
반복자를 갖는 대표적인 자료구조다.dict()
혹은 {}
을 사용해서 생성함.먼저 {}
으로 ds_dict
텅빈 딕셔너리 객체를 하나 생성시킨다. 그리고 키로 packages
, 값으로 features
를 염두에 두고 ds_dict[feature] = package
명령어로 딕셔너리를 for
루프를 돌려 생성시킨다. 그리고 나서 ds_dict
딕셔너리에서 feature
를 출력시킨다.
키(key) | 값(value) |
---|---|
dplyr | “데이터 조작” |
ggplot | “시각화” |
broom | “모형” |
ds_dict = {}
packages = ["dplyr", "ggplot", "broom"]
features = ["데이터 조작", "시각화", "모형"]
ds_tuple = zip(packages, features)
for package, feature in ds_tuple:
ds_dict[package] = feature
print(f"{package}, {feature}")
dplyr, 데이터 조작
ggplot, 시각화
broom, 모형
키: dplyr, 값:데이터 조작
키: ggplot, 값:시각화
키: broom, 값:모형
.get()
메쏘드를 통해서 키(‘ggplot’)로 ’시각화’를 찾아내고, .keys()
메쏘드로 딕셔너리 전체 키와 .values()
메쏘드로 딕셔너리 전체 값을 찾아낼 수 있다.
'시각화'
dict_keys(['dplyr', 'ggplot', 'broom'])
dict_values(['데이터 조작', '시각화', '모형'])
앞서 보왔듯이 딕셔너리에 .items()
메쏘드를 사용해서 키, 값을 뽑아낼 수 있다.
키: dplyr, 값:데이터 조작
키: ggplot, 값:시각화
키: broom, 값:모형
조건문(conditional
)과 결합하여 ds_dict
딕셔너리에 특정값이 존재하는지도 확인할 수 있다.
ggplot 기능: 시각화
.csv
파일 불러읽기 1csv.reader()
로 .csv
파일을 불러오게 되면 튜플로 불러오게 되는데 딕셔너리로 불러오고자 하는 경우 csv.DictReader()
메쏘드를 사용한다.
import csv
csv_file = open('data/csv_sample.csv', 'r')
for row in csv.DictReader(csv_file, ['name', 'miles', 'country']):
print(row)
OrderedDict([('name', 'A'), ('miles', ' 10'), ('country', ' USA')])
OrderedDict([('name', 'B'), ('miles', ' 30'), ('country', ' UK')])
OrderedDict([('name', 'C'), ('miles', ' 4'), ('country', ' IT')])
OrderedDict([('name', 'A'), ('miles', ' 20'), ('country', ' UK')])
OrderedDict([('name', 'B'), ('miles', ' 10'), ('country', ' USA')])
자료구조간 변환은 다음과 같다.
리스트 두개 즉, 문자열 키(key)와 숫자 값(value)을 갖는 리스트를 딕셔너리로 변환시키려면 zip()
으로 묶고 dict()
으로 변환시켜야 된다.
# 이름 문자열 리스트
name_list = ["김현수", "박상용" , "이정훈" , "최학수" , "최병규"]
# 정수 나이 리스트
age_list = [56, 23, 43, 97, 43]
demo_dict = dict(zip(name_list, age_list))
print(demo_dict)
{'김현수': 56, '박상용': 23, '이정훈': 43, '최학수': 97, '최병규': 43}
두개의 튜플 리스트를 딕셔너리로 변환시키는 방법은 dict()
함수를 사용하면 된다.
demo_list_tup = [('김현수', 56), ('박상용', 23), ('이정훈', 43), ('최학수', 97), ('최병규', 43)]
demo_dict = dict(demo_list_tup)
print(demo_dict)
{'김현수': 56, '박상용': 23, '이정훈': 43, '최학수': 97, '최병규': 43}
딕셔너리를 리스트로 변환시키려면 전체를 리스트로 변환시키려면 .items()
메쏘드를 사용하고 키만 추출하여 리스트로 변환시키려면 .keys()
, 값만 추출하여 리스트로 반환시키려면 .values()
메쏘드를 사용한다.
튜플 리스트: dict_items([('김현수', 56), ('박상용', 23), ('이정훈', 43), ('최학수', 97), ('최병규', 43)])
키(key) 리스트: dict_keys(['김현수', '박상용', '이정훈', '최학수', '최병규'])
값(value) 리스트: dict_values([56, 23, 43, 97, 43])