Home [SeSAC]파이썬 라이브러리를 활용한 데이터 분석-1
Post
Cancel

[SeSAC]파이썬 라이브러리를 활용한 데이터 분석-1

파이썬 라이브러리를 활용한 데이터 분석

  • 웹 도서: https://wesmckinney.com/book
  • 코드: https://github.com/wesm/pydata-book

Chapter 1. 시작하기 전에

1.2 파이썬을 사용하면 안되는 경우

  • 속도가 중요시 되는 경우 C계열 사용
  • 동시성이 높은 멀티스레드 사용이 요구 시

1.3 필수 파이썬 라이브러리

  • Numpy
  • Pandas
  • Matplotlib
  • IPython, Jupyter
  • SciPy
  • Scikit-learn
  • Statsmodels
  • others

기존 conda 환경중에 버전이 꼬인것들이 많아서 다 지우고 책 환경만 하나 새로 만들었다

1
2
3
4
5
6
7
8
9
conda config --add channels conda-forge
conda config --set channel_priority strict

conda create -y -n pydata-book python=3.11
conda env list

conda activate pydata-book
conda install -y pandas jupyter matplotlib
conda install lxml beautifulsoup4 html5lib openpyxl requests sqlalchemy seaborn scipy statsmodels patsy scikit-learn pyarrow pytables numba

주피터에 새로 생긴 환경이 생기지 않아 검색해 방법을 찾아냈다

1
2
3
source activate pydata-book
pip install ipykernel
python -m ipykernel install --user --name pydata-book --display-name "Python (pydata-book)"

Chapter 2. 파이썬 기초, IPython과 주피터 노트북

2.1 파이썬 인터프리터

인터프리터 언어란?

  • 한번에 하나의 명령어만 실행
  • python을 입력해서 실행

2.2 IPython 기초

.ipynb : interactive python notebook

  • tab키: 자동완성 기능
  • ?: 자기관찰(introspection)이라 부르며 설명이 출력된다
  • 명령어 중간만 기억날때: *로 감싼 후 ex) np.*load*?

2.3 파이썬 기초

파이썬은 세미콜론으로 종료할 필요가 없으나 사용하여 한 줄에 여러 문을 구분할 수 있다

1
a=5;b=6;c=7

하지만 가독성이 떨어져 추천하진 않는다

모든 것은 객체

  • 객체 모델의 일관성
  • 모든 숫자, 문자열, 자료구조, 함수, 클래스, 모듈 등은 파이썬 인터프리너테어 파이썬 객체라 부르는 상자안에 저장된다

코멘트

# 을 주석처리하되 코드 뒤에 붙힐때는 공백 두칸을 주는것이 convention rule이다

1
a = 1  # 두칸 뒤 주석

동적 참조, 강력한 유형

  • 자료형을 자유롭게 변경할 수 있다
1
2
3
4
a = 1
type(a)  # int
a = "foo"
type(a)  # string

이항 연산자

is==의 차이:

  • a is b: a와 b가 같은 파이썬 객체를 참조할 경우 True
  • a is not b: a와 b가 다른 파이썬 객체를 참조할 경우 True
  • a==b: a와 b가 같은 값을 가지는 경우 True

리스트 깊은 복사 방법:

  • c = list(a)

가변 객체와 불변 객체

  • muatable: list, dictionary, numpy array, 사용자 정의 클래스 등
  • immutable: string, tuple

immutable: 내부 값을 변경할 수 없다

문자열

특수 문자 없이 역슬래시가 많이 포함된 문자열을 나타내려면 귗낳을 수 있다. 그런 경우 앞에 r을 붙혀주면 편하다

1
2
s = r"this\has\no\special\characters"
print(s)  # "this\\has\\no\\special\\characters"

날짜와 시간

1
2
3
4
5
6
7
8
from datetime import datetime, date, time
dt = datetime(2011, 10, 29, 20, 30, 21)

print(dt.day)  #29
print(dt.minute) #30

print(dt.date())  # datetime.date(2011, 10, 29)
print(dt.time())  # datetime.time(20, 30, 21)

strftime: datetime을 문자열로 포맷

1
dt.strftime("%Y-%m-%d %H:%M")  # '2011-10-29 20:30'

strptime: 문자열을 해석해 datetime객체로 만듬

1
datetime.strptime("20091031", "%Y%m%d")  # datetime.datetime(2009, 10, 31, 0, 0)

dt.replace: datetime의 필드 치환

1
2
dt_hour = dt.replace(minute=0, second=0)
dt_hour  # datetime.datetime(2011, 10, 29, 20, 0)

datetime.timedelta: 두 datetime 객체의 차

1
2
3
4
5
dt2 = datetime(2011, 11, 15, 22, 30)
delta = dt2 - dt
print(delta)  # datetime.timedelta(days=17, secods=7179)

print(type(delta))  # datetime.timedelta

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

튜플

  • 할당되면 수정이 불가
  • 문자열을 tuple화 시키면 문자별로 분해되어 저장된다
  • 인덱싱 가능(iterable)

연산자를 통한 튜플

1
2
(4, None, 'foo') + (6, 0) + ('bar')
# (4, None, 'foo', 6, 0, 'bar')

튜플에 정수를 곱하면 리스트와 마찬가지로 여러 개의 튜플의 복사본이 반복되어 늘어난다

1
2
('foo', 'bar') * 4
#('foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar')

튜플 안에 있는 객체는 복사되지 않고 그 객체에 대한 참조만 복사된다

튜플을 수정하고 싶을때 리스트로 변환 후에 수정하고 다시 튜플로 변환하는것이 일반적이다

리스트

insert(index, 요소)

  • 연산이 많이 발생하여 잘 쓰지 않는다
  • collections.dequecollections.queue로 많이 대체한다

.sort(key=, reverse=False)

  • sort 메서드: 파이썬 리스트를 정렬하는 메서드
  • 기본적으로 오름차순으로 정렬됨
  • key 매개변수: 각 요소를 비교하는 기준을 지정
  • key에 함수나 람다 표현식을 전달하여 정렬 기준을 커스터마이즈 가능
  • reverse 매개변수: 기본적으로 False, True로 설정하면 내림차순 정렬 수행
1
2
3
names = ["Alice", "Bob", "Charlie", "David"]
names.sort(key=len, reverse=True)
print(names)  # 출력: ['Charlie', 'Alice', 'David', 'Bob']

setdefault

  • setdefault 메서드: 딕셔너리에 키-값 쌍을 추가하거나 이미 있는 키의 값을 반환
  • 키가 이미 존재하면 해당 키의 값을 반환하고, 없으면 키-값 쌍을 추가하고 지정한 기본값 반환
1
2
3
4
5
6
7
8
9
my_dict = {"a": 1, "b": 2}
value = my_dict.setdefault("c", 3)
print(my_dict)  # 출력: {'a': 1, 'b': 2, 'c': 3}
print(value)    # 출력: 3

value = my_dict.setdefault("a", 10)
print(my_dict)  # 출력: {'a': 1, 'b': 2, 'c': 3}
print(value)    # 출력: 1

collections.defaultdict

  • collections 모듈의 defaultdict 클래스: 기본값을 가진 딕셔너리 생성
  • 존재하지 않는 키에 접근하면 기본값으로 초기화되는 딕셔너리
  • 내장 dict와 유사하지만, 존재하지 않는 키에 접근할 때 기본값 반환
1
2
3
4
5
6
7
from collections import defaultdict

my_defaultdict = defaultdict(int)  # int 타입의 기본값을 가진 defaultdict 생성
my_defaultdict["a"] += 1
print(my_defaultdict)  # 출력: defaultdict(<class 'int'>, {'a': 1})
print(my_defaultdict["b"])  # 출력: 0 (int의 기본값)

함수

map

  • map 함수는 파이썬 내장 함수로, 반복 가능한(iterable) 객체의 모든 요소에 함수를 적용하여 새로운 리스트를 반환
  • 원본 리스트를 변경하지 않고 새로운 리스트를 생성
  • map(함수, 반복 가능한 객체) 형식으로 사용
1
2
3
4
5
6
# 리스트의 각 요소를 제곱하여 새로운 리스트 생성
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x ** 2, numbers)
squared_numbers_list = list(squared_numbers)
print(squared_numbers_list)  # 출력: [1, 4, 9, 16, 25]

lambda

  • lambda 표현식은 익명 함수(이름 없는 함수)를 생성하는 방법
  • 간단한 함수를 한 줄로 표현할 때 주로 사용
  • lambda 매개변수: 표현식 형식으로 사용
1
2
3
4
5
# 람다 표현식을 사용하여 두 수의 합을 계산하는 함수 생성
add = lambda x, y: x + y
result = add(3, 5)
print(result)  # 출력: 8

파일과 운영체제

This post is licensed under CC BY 4.0 by the author.

[SeSAC]프로젝트 소통역량강화

[SeSAC]데이터분석 관련 영상 시청