파이썬 공부

[Python for Data Analysis] 03. 내장 자료구조, 함수, 파일 (1)

지식보부상님 2024. 12. 6. 20:13
 
파이썬 라이브러리를 활용한 데이터 분석
믿고 보는 파이썬 데이터 분석 대표 도서가 3판으로 돌아왔다. 파이썬 판다스 프로젝트 창시자인 웨스 맥키니가 직접 설명하는 파이썬 라이브러리 사용법은 실용적이고 현대적이다. 파이썬과 판다스 최신 버전을 기준으로 내용을 업데이트했고 다양한 사례를 살펴보며 데이터 분석 문제를 효과적으로 해결하는 방법을 알아본다. 판다스, 넘파이, IPython, 맷플롯립, 주피터 등 다양한 파이썬 라이브러리를 소개하고 새로운 기능뿐만 아니라 메모리 사용량을 줄이고 성능
저자
웨스 맥키니
출판
한빛미디어
출판일
2023.05.01


이 글은 <파이썬 라이브러리를 활용한 데이터 분석 3판>의 내용을 바탕으로 합니다.

Chapter 3: 내장 자료구조, 함수, 파일의

소단원 §3.1 자료구조와 순차 자료형의 내용을 담고 있습니다.

 

§3.1 자료구조와 순차 자료형

(3. 1. 1) 튜플

◈ 튜플

- 튜플 (Tuple): 불변한(immutable) 순차 자료형

- 소괄호생략, 또는 tuple() 이용하여 튜플 생성

- 인덱싱, 중첩 튜플 가능

- + 연산자: 튜플 이어붙이기 (튜플을 이어붙여 새로운 튜플을 만드는 것)

- * 연산자: 튜플의 반복 

튜플을 정의하는 방식
인덱싱, 중첩 가능

 

튜플의 불변성
tup자체는 수정이 불가하지만 객체의 변경은 가능
튜플에서 +와 * 연산자

◈ 튜플에서 값 분리하기

- 위와 같이 튜플의 값들을 하나씩 분리 가능

- 튜플 내의 리스트 객체도 분리 가능

- 튜플에서 값 처음의 일부만 얻고 싶을 땐 *rest (또는 *_)를 이용

◈ 튜플 메서드

- count(val) : 튜플에서 val의 개수를 반환

count 메서드

 

(3. 1. 2) 리스트

◈ 리스트

- 리스트 (List) : 크기, 내용 변경 가능한 자료형(mutable)

- 대괄호, list() 로 생성

- 이터레이터/제너레이터의 실제값 담기 위해 사용

리스트 생성과 제너레이터 값 저장

◈ 원소 추가하고 삭제하기

*원소 추가

- append( item ) : 리스트의 가장 마지막에 item 추가

- insert( idx, item ) : 리스트의 원하는 자리(idx)에 item 추가

- 일반적으로 성능 insert < append (insert는 자리 마련을 위해 값을 모두 이동시켜야함)

 

*원소 삭제

- pop( idx ) : 특정 위치(idx) 값 반환하고 삭제 

- remove( item ) : 특정 값 삭제, 앞에서부터 삭제

리스트 원소 추가/삭제 예제

 

*원소 확인

- in / not in  이용하여 원소 존재하는지 확인 가능

- {element} in {list} 로 사용 => 존재하면 True, 존재하지 않으면 False 리턴

리스트의 원소 확인 예제

◈ 리스트 이어 붙이기

- + 연산자 : 여러개 리스트 합쳐새로운 리스트 생성

- extend( list2 ) : 기존의 리스트에 list2 추가

- 일반적으로 성능은 ( + 연산자 ) < extend

  => +는 리스트 생성 후 값을 복사하는 과정이 필요하므로

리스트 이어붙이기

◈ 정렬

- sort( reverse = False, key = len ) : 생략시 오름차순 정렬

  reverse 옵션 : reverse = False 는 오름차순, reverse = True내림차순 정렬

  key 옵션 : key = len은 문자열의 길이를 기준으로 정렬

- sorted( list ): list 정렬하여 새로운 리스트 반환, 원본 리스트 변화 x

- sort는 매서드, sorted는 함수!

리스트의 정렬
sorted로 정렬 후 저장

◈ 슬라이싱

- [start : stop : step] 으로 사용 (end보단 stop으로 이해하자. stop 전까지만 주어짐)

- start 인덱스부터 stop 인덱스 전까지 => stop - start 의 개수만큼 반환

- 음수 인덱스, 스텝으로 지정도 가능

파이썬의 인덱스
슬라이싱

(3. 1. 3) 딕셔너리

◈ 딕셔너리 (Dictionary)

- 키 - 값 쌍으로 이루어짐 => 키를 이용한 검색, 삽입 수정 등이 용이

- { 키 : 값 } 으로 생성 / 불변 자료형만 가능  ex) 리스트 x 

- update( { } ) : 기존의 딕셔너리에 새로운 딕셔너리 추가

- pop( key ) : key에 해당하는 value 반환 후 해당 원소 삭제

- del dic[ key ] : key에 해당하는 원소 삭제

- keys() : 딕셔너리의 키들 이터레이터 반환하는 매서드

- values() : 딕셔너리의 값들 이터레이터 반환하는 매서드

- items() : 딕셔너리 (key, value) 튜플쌍 반환하는 매서드

◈ 순차 자료형에서 딕셔너리 생성하기

- dict( 튜플 ) : 튜플 -> 딕셔너리로 생성해주는 함수

[참고]

- zip( list1, list2 ) : list1, list2 원소들 순서대로 튜플쌍 생성하는 함수

◈ 기본값

- dic[ key ] 로 접근하면 딕셔너리에 해당 키가 없는 경우 에러 발생

=> get 매서드 이용

- get( <키>, <기본값> ) : 딕셔너리에 해당 <키>가 있다면 값 리턴, 없다면 <기본값> 리턴 (생략시 None 리턴)

- setdefault(<키>, <기본값>): 딕셔너리에 해당 <키> 있으면 값 리턴, 없다면 <기본값>으로 값으로 딕셔너리에 저장

- collections 모듈의 defaultdict( <기본값 생성 함수> )

  키가 없을 때, <기본값 생성함수>int 이면 기본값을 0으로, [] 이면 리스트를 자동으로 생성

같은 예제 setdefault / defaultdict 이용

(3. 1. 4) 집합

◈ 집합

- 고유한 원소만, 정렬 x 자료형

- set() 함수, {} 으로 생성

- 집합 연산(합집합, 교집합 등) 매서드 제공 

[파이썬 집합 연산 매서드]

더보기

 

함수 대체 문법 설명
a.add(x)   a에 원소 x 추가
a.clear()   모든 원소 삭제 
a.remove(x)   a에서 원소 x 삭제
a.pop()   a에서 임의의 원소 제거, a가 empty면 에러발생
a.union(b) a | b a ∪ b
a.update(b) a |= b a = a ∪ b
a.intersection(b) a & b a ∩ b
a.intersection_update(b) a &= b a = a ∩ b
a.difference(b) a - b a, b의 차집합
a.difference_update(b) a -= b a 에 a, b 차집합 대입
a.symmetirc_difference(b) a ^ b a, b의 대칭차집합
a.symmetirc_difference_update(b) a ^= b a에 a, b의 대칭차집합 대입
a.issubset(b) <= a가 b의 부분집합이면 True
a.issuperset(b) >= b가 a의 부분집합이면 True
a.isdisjoing(b)   a, b가 서로소면 True

- 원소는 일반적으로 불변 자료형이어야 => 리스트 원소로 갖고 싶으면 튜플로 변경해야 함

(3. 1. 5) 내장 순차 자료형 함수

◈ enumerate

- enumerate( <순차자료형>, start = 1) : <순차 자료형> 에는 리스트, 튜플 등 / start = 1 에는 시작 인덱스 (생략시 0부터)

- for 문에서 주로 사용 / ( <현재 index>, <현재 값> ) 튜플로 제공

enumerate 예제

◈ reversed

- reversed( <순차자료형> ) : <순차자료형> 역순으로 순회하는 제너레이터, set은 사용 x

reversed 예제

(3. 1. 6) 리스트, 집합, 딕셔너리 표기법

* 리스트 표기법

[ expr for value in collection if condition] : 조건에 맞는 원소들만 리스트에 넣기

 

* 딕셔너리 표기법

 dict_comp = {key-expr: value-expr for value in collection if condition]

 

* 집합 표기법

set_comp = { expr for value in collections if condition } 

◈ 중첩된 리스트 표기법

- 간결한 표현이 가능 / 3개 이상 중첩 추천 x

예제 1
예제 2