Day26 - Python데이터분석(9). 22.09.30.금

류소리·2022년 9월 29일
0

데이터분석

목록 보기
8/11

[ 백분위수(quantile) 구하기 ]

: quantile메서드는 해당 행/열의 분위수의 해당하는 값을 반환하는 메서드입니다.

백분위수(Percentile)는 오름차순 정렬했을 때 0을 최소값, 100을 최대값으로 백분율로 나타낸 특정 위치 값입니다. 따라서 사분위수는 25, 50, 75를 기준 점으로 나눠져 1분위부터 4분위까지 존재하게 됩니다.

판다스와 넘파이 모듈을 이용해 백분위수를 구해보겠습니다.
pandas 함수명은 quantile( ), numpy 함수명은 percentile( )입니다.

<특히 주의할 점은>

pandas의 quantile함수의 q(백분위수)는 0과 1사이 값을 입력하고
numpy의 percentile함수의 q(백분위수)는 0과 100사이 값을 입력합니다.

따라서 중앙값을 구할때 quantile( ) q값을 0.5, percentile( ) q값을 50으로 입력해야 합니다.


[ GroupBy ] p386

Pivot_table이 매우 편리한 기능을 갖고 있음에도 불구하고 몇가지 아쉬운 점이 있다면 앞서 설명한대로 values의 순서를 변경하기 위해서 추가적인 절차를 해야 한다는 점, 그리고 칼럼과 칼럼간의 연산을 통한 새로운 칼럼을 추가하는 방법을 적용하기 어렵다는 것이다.

: 특정 범주로 데이터를 쪼개서 연산을 처리한 후에 다시 하나로 묶어서 데이터를 병합하는 것이 groupby이다.


[ 피봇 테이블(pivot table) ] p418

: pivot_table은 매우 유용하고 강력한 기능을 제공하고 있지만 그 문법이 조금 까다롭다(까다로운 이유는 여러 가지 기능을 활용할 수 있기 때문이다).

  • margins 처리
    pivot_table의 오른쪽 끝과 아래 끝에 총계와 같은 산식을 넣고 싶은 경우에는 margins 옵션을 True로 설정하여 추가하면 된다.

여기서 주의할 점은
All 컬럼은 흡연자와 비흡연자를 구분하지 않은 평균 값이다.

  • aggfunc
    aggfunc은 기본값이 'mean'이므로 평균값들을 보여준다.

[ 교차일람표 : pd.crosstab() ] p421

: 교차표는 그룹의 빈도를 계산하기 위한 피벗테이블의 한 유형이다.
crosstab의 처음 두 인자는 배열이나 시리즈 혹은 배열의 리스트가 올 수 있다.

  • pd.crosstab이다.
    첫번째 들어가는 것이 국적 -> 인덱스
    두번째 들어가는 것이 손 -> 컬럼

  • 여기에 margins=True를 넣을 수도 있다.


[ 시계열 자료 다루기 ] p423

: 시계열 자료는 인덱스가 날짜 혹은 시간인 데이터를 말한다.

이번에는 판다스가 아닌 파이썬 자체의 datetime 모듈을 사용해보겠습니다. 그중에서도 strptime 과 strftime 을 비교해볼 건데요.

[parse string to datetime]
:문자열을 시계열로 파싱한다.

  • strptime 은 문자열을 날짜 객체로 변환하는 것이고,

[string from time]
:시계열을 문자열로 바꾼다.

  • strftime 은 날짜 객체를 문자열로 변환하는 것입니다.

strftime()

: 사용해 날짜 형식을 변환하는 방법

◆ %d : 0을 채운 10진수 표기로 날짜를 표시
◆ %m : 0을 채운 10진수 표기로 월을 표시
◆ %y : 0을 채운 10진수 표기로 2자리 년도
◆ %Y : 0을 채운 10진수 표기로 4자리 년도
◆ %H : 0을 채운 10진수 표기로 시간 (24시간 표기)
◆ %I : 0을 채운 10진수 표기로 시간 (12시간 표기)
◆ %M : 0을 채운 10진수 표기로 분
◆ %S : 0을 채운 10진수 표기로 초
◆ %f : 0을 채운 10진수 표기로 마이크로 초 (6자리)
◆ %A : locale 요일
◆ %a : locale 요일 (단축 표기)
◆ %B : locale 월
◆ %b : locale 월 (단축 표기)
◆ %j : 0을 채운 10진수 표기로 년중 몇 번째 일인지 표시
◆ %U : 0을 채운 10진수 표기로 년중 몇 번째 주인지 표시 (일요일 시작 기준)
◆ %W : 0을 채운 10진수 표기로 년중 몇 번째 주인지 표시 (월요일 시작 기준)

strftime() 원하는 서식을 지정해 날짜 형식을 변경할 수 있습니다.

 '문자열'이 datetime으로 바뀌었다.

DatetimeIndex 인덱스는 다음과 같은 보조 함수를 사용하여 생성한다.

- pd.to_datetime 함수
- pd.date_range 함수

Date 컬럼의 자료형 변환하기

  • pd.to_datetime
    : 날짜/시간을 나타내는 문자열을 자동으로 datetime 자료형으로 바꾼 후 DatetimeIndex 자료형 인덱스를 생성한다.

pd.date_range(start=시작, end=끝, 개수, 간격)

  • pd.date_range
    : 모든 날짜/시간을 일일히 입력할 필요없이 시작일과 종료일 또는 시작일과 기간을 입력하면 범위 내의 인덱스를 생성해 준다.
    date_range는 기본적으로 시작 시간이나 종료 시간의 타임스탬프를 보존한다
  • freq
    특정한 날짜만 생성되도록 할 수도 있다. 많이 사용되는 freq 인수값은 다음과 같다
  • s: 초
  • T: 분
  • H: 시간
  • D: 일(day)
  • B: 주말이 아닌 평일
  • W: 주(일요일)
  • W-MON: 주(월요일)
  • M: 각 달(month)의 마지막 날
  • MS: 각 달의 첫날
  • BM: 주말이 아닌 평일 중에서 각 달의 마지막 날
  • BMS: 주말이 아닌 평일 중에서 각 달의 첫날
  • WOM-2THU: 각 달의 두번째 목요일
  • Q-JAN: 각 분기의 첫달의 마지막 날
  • Q-DEC: 각 분기의 마지막 달의 마지막 날

[ OHLC 리샘플링 ] P467


[ 기간이동 계산rolling ] p471

pandas.Series.rolling
: rolling 메서드는 현재 열에 대하여 일정 크기의 창(window)를 이용하여 그 window안의 값을 추가 메서드를 통해 계산하는 메서드 입니다.

  • 데이터분석을 하다보면 일정 범위에서 규칙적으로 연산(예: 이동평균)을 해야할 일이 많습니다.
  • 예를 들어, 날마다 일주일 간의 주가 평균을 알고 싶을 때, 매일 일일이 다 계산하는 것은 매우 비효율적 입니다.
  • 이 때, 유용하게 쓸 수 있는 함수가 .rolling 이라고 보시면 됩니다


[ 데이터의 열의 빠른 반환, take()메서드] p482

  • take 메서드는 데이터의 행이나 열을추출할 때 iloc 메서드보다 좀 더 빠른 성능을 기대할 수 있다.
  • Numpy의 ndarrays와 유사하게 pandas의 인덱스, Series, DataFrame은 또한 take()메서드를 제공한다.
  • take() 메서드는 입력된 축과 정수 인덱스에 해당하는 요소들을 반환한다.
  • 특징
  • 주어진 인덱스들은 반드시 정수의 인덱스 위치로 이루어진 ndarray나 리스트이어야 한다.
  • take()메서드는 또한 음수의 정수도 사용할 수 있다.
    - 파이썬과 마찬가지로 끝에서 부터의 상대적 위치를 의미한다.
  • .iloc 메서드로 같은 작업을 수행 할 수 있다.
    - 하지만 .iloc 메서드 보다 빠르기 때문에 최적화에 적합하다.
    - take() 메서드는 iloc 메서드와 마찬가지로 정수 기반의 위치인덱스를 사용하기 때문에, 멀티인덱스가 적용되지 않는다.

resuit=object.take(indices,axis=0)

object : 메서드가 적용되는 객체로 DataFrame, Series 등이 해당된다.
axis : 메서드를 적용할 축을 입력받는다.
0 or index : 행의 인덱스를 정렬한다.(기본값)
1 or columns : 열의 인덱스를 정렬한다.

-> pandas 객체에서 take()메서드는 불린인덱스(boolean index)를 적용할 수 없다.
False는 0으로 True는 1이란 정수로 인식한다.


출처:
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=wideeyed&logNo=221609442389 -> quantile
https://wikidocs.net/155537 -> quantile
https://wikidocs.net/46755 -> 피봇테이블 정리
https://steadiness-193.tistory.com/52?category=947982 -> 피벗테이블 깔끔정리
https://steadiness-193.tistory.com/56?category=947982 -> 교차알림표 깔끔정리
https://datascienceschool.net/01%20python/04.08%20%EC%8B%9C%EA%B3%84%EC%97%B4%20%EC%9E%90%EB%A3%8C%20%EB%8B%A4%EB%A3%A8%EA%B8%B0.html -> 시계열 정리
https://ponyozzang.tistory.com/626 -> strftime()
https://hiio.tistory.com/30 -> to_datetime
https://kongdols-room.tistory.com/181?category=817565-> take
https://ordo.tistory.com/67 [우 주 신:티스토리] -> rolling

profile
새싹 빅테이터 개발자

0개의 댓글