이전에 원노트에 정리해놓았던 TIL이다. 아무래도 한곳에 모아두고 보는 것이 편할 것 같으니 정리해두려고 한다.
PEP8 : 파이썬 스타일 가이드
- 파이썬 공식 문서에 들여쓰기는 4칸으로 권장함
- 한 줄 당 최대 79자로 제한 등
- 주피터는 내부 플러그인으로 오토pep8 사용
For 반복문
- 문자열 -> 리스트
- 리스트를 순회하며 요소 하나씩 꺼내기 가능
Range(start, stop, step)
- 0 ~ n-1까지의 범위
- Range(10, 0, -1)과 같은 방식으로 역순 범위 지정도 가능
- Enumerate() : 인덱스 번호와 값을 같이 가져옴(변수 두 개 지정) = range(len())과 같은 기능
- 숫자들의 시퀀스로 반복하고자 할 때 사용
While문
- 일정 조건이 충족될 때까지 반복하고 싶을 때 사용
- 웹 스크래핑 시 데이터가 없을 때 빠져나오기
함수
- Parameter(매개변수), argument(전달인자, 인수)
- 인수를 매개변수로써 함수 호출시 넘겨줌
- Def(par=arg)
- *arguments(argument 인자) : 리스트, 튜플 형태로 전달
- **keywords(키워드 인자) : 딕셔너리 형태로 전달
- Print하면 출력만 하고 변수로 반환이 안됨. 변수로 반환받고 싶다면 return 사용
- 함수 도움말 : ? -> 독스트링 확인 / ?? -> 소스코드 확인
코드리뷰
- LGTM(looks good to me) : 코드리뷰 시 많이 사용
- 좋은점, 개선점(변수명 직관적으로 사용 등)
주피터 -> 줄리아, 파이썬, R
- ipynb확장자 -> ipython 환경 제공
- 원래 ipython notebook이었으나 다양한 언어를 받고자 jupyter notebook으로 변경
판다스 : 파이썬의 대표적인 데이터 분석 도구
- Panel(다차원 데이터 구조) 데이터 지원 지금은 사용하지 않음
- Dataframe, series 형태 데이터 지원
- 데이터프레임에서 행이나 열 하나만을 떼어오면 시리즈 형태가 됨
- 대괄호가 2개 들어가면 2차원 행렬, 1개이면 1차원 벡터 시리즈 구조가 됨
넘파이 : 파이썬에서 사용할 수 있는 공학용 계산기
- 기본적인 기술통계부터 다차원 배열의 연산 지원
- 파이썬은 느리지만 넘파이는 빠름 -> 내부가 연산이 빠른 c언어로 되어있고 인터페이스만 구현함
- 반복문 사용 x, 벡터 연산, c언어
시각화 라이브러리
- Matplotlib : 대부분 정적인 시각화(matlab 문법과 유사). Math + plot + library
- Javascript : 동적인 시각화
- Plotly
판다스 실습
메서드, 어트리뷰트의 차이 : 함수 뒤 괄호가 있고 없고(옵션이 필요 없기 때문에)
- E.g. 메서드 : df.info() / 어트리뷰트 : df.shape
%timeit : 코드 시간 출력 - 프로파일링(코드 성능 비교)
nan(not a number)
칼럼의 요소 중 하나라도 다른 데이터 타입이 섞여있다면 우선순위에 따라 적용됨
- object - float - int
열에 하나의 값만 넣으면 행 개수 만큼 값이 채워짐(브로드캐스팅)
Df.drop()
- Inplace 기능 웬만하면 사용 x
- 메서드 체이닝 할 때 잘 동작하지 않음
○ 메서드 체이닝 : 여러 메서드들을 묶어서 사용하는 것
Df.describe() :
- 수치형의 기술통계 : 개수, 평균, 표준편차, 최소, 최대, 사분위
- 범주형의 기술통계 : 개수, 유일값, 최빈값, 최빈값의 빈도수
- Nan값은 제외하고 계산
Split(), join() : 문자열 나누기, 붙이기 함수
- 디폴트로 공백 기준으로 나누고 붙임
복습
Ipynb 재실행 시 모든 출력 지우고 시작하면 헷갈리지 않음
%time : 한 번 실행한 결과의 시간 측정
%timeit : 여러 번 실행한 결과의 평균과 표준편차를 보여줌(더 정교)
표준편차가 클수록 산포도가 큼(평균값에서 멀리 떨어짐)
판다스 치트시트 중 사용하지 않는 것들 유의하기
인덱싱
- 두 개 이상 데이터프레임 인덱싱 : 대괄호 두 개
- 인덱스에 숫자가 아닌 값이 올 수 있음
- 꼭 유일값이 아니어도 되지만 유일값이 되는게 사용하기 편함
- loc
: 라벨이나 boolen array 값으로 데이터프레임을 가져옴
- iloc
: 인덱스를 기준으로 데이터프레임을 가져옴
Boolean 인덱싱 : 조건을 탐색한 뒤 데이터프레임으로 한 번 더 감싸줌
- .query 기능은 Boolean 인덱싱으로 구현 가능해서 권장하지 않음
접근자(Accessor)
- 시리즈에서만 쓸 수 있음
- .str : 판다스 시리즈에서 문자열 메서드들을 활용하도록 할 수 있게 함
- .dt : 시계열 데이터
- .cat : 카테고리컬 데이터
- .sparse : 희소 데이터
Sort_values() : 정렬
- by, ascending 파라미터에 인수로 리스트 형태를 넣어 여러 기준으로 정렬 가능
- Na_position 파라미터를 통해 na 값 우선순위 결정 가능
엑셀 인코딩 방식
- euc-kr(한글완성형코드) : 2350자 지원. 완성형코드는 국제표준과 충돌이 적다는 장점이 있지만, 미리 조합되어 있는 글자 외의 문자는 인식할 수 없다는 단점이 있음
Cp949 : 11172자 지원. 한글, 윈도우 환경에서 사용
앤스컴's 콰르텟 : 기술통계량은 비슷하지만 분포나 그래프는 매우 다른 네개의 데이터셋
Seaborn
- matplotlib 기반 데이터 시각화 도구
- High-level interface : 기술이 잘 감춰져 있어 사용이 쉽다
- 내부에서 통계적 연산을 제공함
head(n), tail(n)
.sample(n)
- Random_state : 시드 부여
○ seed number 42의 의미 : 소설 "은하수를 여행하는 히치하이커를 위한 안내서"에서 컴퓨터한테 묻는 인생의 본질에 대한 정답이 42임
- Frac : 샘플링할 비율 지정
.corr() : 변수들의 상관계수 출력
- 양의 상관계수, 0, 음의 상관계수
- 피어슨 상관계수
- 같은 짝에 대해 대각선 대칭
- 자기 자신에 대한 상관계수
- 상관관계와 인과관계는 다름
.value_counts()
- 한 개의 변수(시리즈 형태)에 대한 요소들의 빈도수 출력에 쓰임
- normalize 파라미터를 통해 비율로 출력
.groupby()["칼럼명"].연산()
- 먼저 그룹화 진행
- 그룹화 후 해당 칼럼에 대해 연산 적용
○ 여러 개 지정 가능, 지정하지 않으면 모든 칼럼에 대해 적용
Seaborn 그래프
Relplot(relational plot) : 두 가지 변수의 관계를 나타내기 위해 사용
- Scatterplot
- Lineplot
Displot(distribution plot) : 변수 하나 혹은 두개의 값 분포를 나타내기 위해 주로 사용
- Histplot
- Kdeplot
- Ecdfplot
- Rugplot
Catplot(categorical plot) : 범주형 변수와 연속형 변수간의 관계를 나타내기 위해 주로 사용
- Barplot
- Pointplot
- Boxplot
- Violinplot
- Swarmlot
- Pointplot
- Stripplot
Hue : 해당 변수의 요소별로 색상을 다르게 지정
Col : 해당 변수로 서브플롯을 그림
- 서브플롯 : 하나의 그래프를 여러개로 쪼갠 것
Col_wrap : 서브플롯을 한 줄에 몇 개씩 그릴 것인지
Countplot : x축 혹은 y축 지정하면 나머지 축에 알아서 개수 시각화
Barplot : 막대그래프
- 보통 범주형 변수에 대한 표현에 사용(범주형 + 수치형)
- 검은색 막대 : 신뢰구간, ci
- ci는 시각화 시간이 오래 걸리므로 필요한 상황이 아니면 뺄 것을 권장함
- Estimator 파라미터를 통해 여러 연산 적용 가능. 디폴트는 mean
- 단점 : 대푯값만을 표현함(값의 분포를 알기 힘듦)
Boxplot
- 이상치 값을 확인할 때 보통 박스플롯 활용
- Q1~Q3까지 표현해줌. 박스 상단(Q3), 중앙(Q2), 박스 하단(Q1)
- 이상치는 별도로 표시
Kde(kernel density estimate) : 커널밀도추정 그래프
- 관측치 빈도의 상대량(비율)을 시각화
Violinplot
- 히스토그램의 밀도를 추정해서 시각화 -> kdeplot을 대칭되게 그린 것
○ 히스토그램 : 도수분포를 시각화한 것. 정해진 구간에 변량이 분포되어 있는 정도를 시각화한 것
○ 빈도의 절대량(count)을 표현
○ 바이올린 내에 boxplot을 포함하고 있음
Scatterplot
- 두 변수의 산포도
Lmplot
- 변수간의 선형 관계 확인
- 산포도, 선형관계, 신뢰구간 표현
파이차트는 범주가 많을 때 시각화하면 비교가 불편해서 사용하지 않음(seaborn에도 없음)
자료의 종류
1. 양적 자료 : 사칙연산 가능
1.1 연속 자료
1.2. 이산 자료
2. 질적 자료(범주형) : 사칙연산 불가
2.1. 순서 자료
2.2. 명목 자료
부록
앤스컴 콰르텟과 유사한 예제, violinplot, boxplot 비교
https://www.autodesk.com/research/publications/same-stats-different-graphs