일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- Folium
- plt
- 문제풀이
- python
- matplotlib
- MacOS
- 파이썬
- 재귀함수
- 머신러닝
- barh
- Machine Learning
- numpy
- SQL
- 조합
- tree.fit
- 통계학
- 기계학습
- Slicing
- pandas filter
- 등비수열
- pandas
- maplotlib
- 스터디노트
- 등차수열
- pandas 메소드
- INSERT
- 순열
- 리스트
- DataFrame
Archives
- Today
- Total
코딩하는 타코야끼
[Pandas] 3강_Pandas 정렬 집계 본문
728x90
반응형
1. 정렬
📍 index이름, column 이름을 기준으로 정렬
df = pd.read_csv('data/movie.csv', index_col = 'movie_title')
df
🌓 sort_index(axis, ascending=True)
- axis
- index 이름 기준 정렬(행) : 'index' 또는 0 (기본값)
- column 이름 기준 정렬(열) : 'columns' 또는 1
- ascending
- 정렬방식
- True(기본): 오름차순, False: 내림차순
- inplace
- 원본에 적용 여부
- False(기본): 변경한 복사본 반환
- True : 원본을 변경
# sort_index() -> index name 으로 정렬
df.sort_index() # (axis=0)
df.sort_index(ascending=False) # 내림차순 정렬 (defaul: 오름차순
# index 정렬 => 부분일치 slicing 이 가능.
# !!! **정렬후 loc indexer 를 사용하면 속도가 빠르다.** !!!!!
df.sort_index().loc['A':'B'] # A 로 시작하는 영화 ~ B로 시작하는 영화 앞까지.
📍 특정 컬럼(열)의 값을 기준으로 정렬
🌓 sort_values(by, ascending, inplace)
- by
- 정렬 기준 컬럼이름을 문자열로 지정
- 여러 컬럼에 대해 정렬할 경우 리스트에 담아 전달
- ascending
- 정렬방식
- True(기본): 오름차순, False: 내림차순
- 여러 컬럼에 대해 정렬할 경우 정렬방식도 리스트에 담아 전달
- inplace
- 원본에 적용 여부
- False(기본): 변경한 복사본 반환
- True : 원본을 변경
- 결측치는 방식과 상관없이 마지막에 나온다.
# 감독이름기준 정렬
df.sort_values('director_name')
df.sort_values('director_name', ascending =False) # 내림차순
# 상영시간 기준 정렬
# df.sort_values('duration')[['duration','imdb_score']].head(30)
df.sort_values(['duration', 'imdb_score'])[['duration','imdb_score']].head(30)
# df.sort_values(['duration', imdb_score])
# : duration으로 전체를 정렬. duration이 같은 값들끼리는 imbd_score로 정렬
# : 정렬방식 - 셋다 오름차순(기본방식)
# ascending은 by의 컬럼 순서대로 지정한다. -> 내림차순이 하나라도 있으면 지정해 줘야 한다.
df.sort_values(['duration', 'imdb_score'], ascending=[False, True])[['duration','imdb_score']].head(30)
# duration은 False(내림사춘), imdb_score는 True (오름차순)
-----
# boollean indexing 후 결과 정렬 (dataframe을 처리후에 그 결과를 정렬)
result = df[df['duration'] >250].sort_values('duration') # 조회결과를 정렬해서 result에 대입
# values_counts()결과 정렬 => 값기준으로 내림차순 정렬해서 결과를 반환.
result = df['director_name'].value_counts()
result[result>10].sort_index() # 감독 이름순으로 정렬
result[result>10].sort_values() # 오름차순으로 정렬
2. flights.csv (항공기 운항 기록 데이터)
📍 Column 이름과 고유값 의미
- MONTH : 비행 월
- DAY : 비행 일
- WEEKDAY : 비행 요일 - 1(월요일)~7(일요일)
- AIRLINE : 항공사 코드
- UA: United Air Lines Inc.
- AA: American Airlines Inc.
- US: US Airways Inc.
- F9: Frontier Airlines Inc.
- B6: JetBlue Airways
- OO: Skywest Airlines Inc.
- AS: Alaska Airlines Inc.
- NK: Spirit Air Lines
- WN: Southwest Airlines Co.
- DL: Delta Air Lines Inc.
- EV: Atlantic Southeast Airlines
- HA: Hawaiian Airlines Inc.
- MQ: American Eagle Airlines Inc.
- VX: Virgin America
- ORG_AIR : 출발공항
- DEST_AIR : 도착공항
- SCHED_DEP : 출발예정시각
- DEP_DELAY : 출발지연시간(분)
- AIR_TIME : 비행시간(분)
- DIST : 비행거리(마일)
- SCHED_ARR : 도착예정시각
- ARR_DELAY : 도착지연시간(분)
- DIVERTED : 회항여부(1: True, 0: False)
- CANCELLED : 취소여부(1: True, 0: False)
📍 데이터 확인하는 과정
🌓 .shap - 크기 확인
flights = pd.read_csv('data/flights.csv')
flights.shape
>>>
(58492, 14)
🌓 .info( ) - 정보 확인
flights.info()
🌓 .isnull( ).sum( ) - 결측치 개수 확인
flights.isnull().sum()
🌓 .value_counts( ) - column별 index 개수 확인
flights['AIRLINE'].value_counts()
🌓 .unique( ) - 고유값들의 종류 확인
flights['AIRLINE'].unique()
🌓 .nunique( ) - 고유값들의 수 확인
flights['AIRLINE'].nunique() # 14개의 범주로 구성되어 있다.
>>>
14
3. 기술통계 메소드들을 이용한 데이터 집계
📍 주요 기술통계 메소드
🌓 메소드
- DataFrame에 위의 기술 통계 메소드들을 적용할 경우 컬럼별로 계산한다.
- sum(), mode(), max(), min(), unique(), nunique(), count()는 문자열에 적용가능하다.
- idxmax(), idxmin() 는 문자열 컬럼에 사용할 수 없다. (문자열의 경우 넘파이의 argmax(), argmin() 함수를 사용한다.)
🌓 공통 매개변수
- skipna=True(기본값)
- 결측치(NA)를 포함해서 계산할지 여부 설정.
- True가 기본값으로 결측치(NA)를 제외하고 처리한다.
- 결측치 제외하지 않으려면 skipna=False로 설정하는데 결측치가 있으면 결과는 결측치가 된다.
- axis
- DataFrame에 적용할 때 계산방향을 설정
- 0 또는 'index' (기본값): 컬럼 방향으로 집계
- 1 또는 'columns': 행 방향으로 집계
- DataFrame에 적용할 때 계산방향을 설정
📍 aggregate(func, axis=0, *args, **kwargs) 또는 agg(func, axis=0, *args, **kwargs)
- DataFrame, Series의 메소드로 집계결과를 다양한 형태로 묶어서 볼 때 사용한다.
- 사용자 정의 집계메소드를 사용할 때도 편리하다.
🌓 매개변수
- func
- 집계 함수 지정
- 함수명/함수리스트 (문자열)
- 판다스 제공 집계메소드들은 문자열로, 사용자정의 집계함수는 함수 객체로 전달
- Dictionary : {'집계할컬럼' : 집계함수, ... }
- 컬럼별로 다른 집계를 할 경우
- 함수명/함수리스트 (문자열)
- 집계 함수 지정
- axis
- DataFrame에 적용할 때 0 방향으로 계산할 지 1 방향으로 계산할지 설정
- 0 또는 'index' (기본값): 컬럼 방향으로 집계
- 1 또는 'columns': 행 방향으로 집계
- 키원드 인자값이 들어갈떄는 꼭! axis = 0 or 1 표시를 해준다.
- DataFrame에 적용할 때 0 방향으로 계산할 지 1 방향으로 계산할지 설정
- args, **kwargs
- 함수에 전달할 매개변수.
- 집계함수는 첫번째 매개변수로 Series를 받는다. 그 이외의 매개변수가 있는 경우.
# 도착 지연시간 (ARR_DELAY): 최소값, 최대값
flights["ARR_DELAY"].min(), flights['ARR_DELAY'].max()
>>>
(-60.0, 1185.0)
flights["ARR_DELAY"].aggregate(['min', 'max'])
>>>
min -60.0
max 1185.0
Name: ARR_DELAY, dtype: float64
# aggregate => agg 같은 똑같음.
flights["ARR_DELAY"].agg(['min', 'max'])
>>>
min -60.0
max 1185.0
Name: ARR_DELAY, dtype: float64
flights['ARR_DELAY'].agg('mean',skipna=False)
flights['ARR_DELAY'].mean(skipna=False) # 위에 명령어와 같다.
>>>
nan
# 컬럼별로 다른 통계량을 계산 -> {컬럼:통계함수}
flights.agg({
"DEP_DELAY":'sum',
"ARR_DELAY":['mean', 'std'],
})
4. Groupby
- 특정 열을 기준으로 같은 값을 가지는 행끼리 묶어서 group화 한다.
- ~~ 별 집계를 할 때 사용한다. (성별, 직급별, 등급별 ...)
- Group으로 묶을 기준 열은 범주형타입(category)을 사용한다.
📍 구문
🌓 DF.groupby('그룹으로묶을기준컬럼')
- DataFrameGroupby 객체를 반환한다.
- DataFrameGroupby 객체는 어떤 행끼리 묶여있는지 정보를 가진다. 이 객체의 집계함수를 사용하면 그룹별 집계를 할 수 있다.
- DataFrameGroupby객체['집계할 컬럼'].집계함수( )
- groupby에 여러개의 컬럼을 기준으로 나눌 경우 리스트에 묶어서 전달한다.
- 집계할 컬럼이 여러개인 경우 리스트로 묶어준다.
🌓 집계함수
- 기술통계 함수들
- agg()/aggregate()
- 여러 다른 집계함수 호출시(여러 집계를 같이 볼경우)
- 사용자정의 집계함수 호출시
- 컬럼별로 다른 집계함수들을 호출할 경우
# 항공사별 출발지연시간과 도착지연시간의 평균 (집계할 대상 컬럼이 여러개인 경우)
flights.groupby('AIRLINE')[['DEP_DELAY','ARR_DELAY']].mean()
flights.groupby('AIRLINE')[['DEP_DELAY','ARR_DELAY']].agg(['min','max']) # multi index라 불린다 !
📍 복수열 기준 그룹핑
- 두개 이상의 열을 그룹으로 묶을 수 있다.
- groupby의 매개변수에 그룹으로 묶을 컬럼들의 이름을 리스트로 전달한다.
# 출발공항 / 항공사 별 출발 지연시간의 min/max
flights.groupby(['ORG_AIR','AIRLINE'])['DEP_DELAY'].agg(['min','max'])
# 월/항공사 별 출발지연시간과 도착지연시간의 평균 - group의 기준컬럼 - 여러개, 집계대상 여러개
flights.groupby(["MONTH","AIRLINE"])[["DEP_DELAY","ARR_DELAY"]].mean()
📍 Group 별 집계결과에서 특정 조건의 항목만 조회
- Groupby 집계 후 boolean indexing 처리한다.
# 항공사별 취소건수
result = flights.groupby("AIRLINE")['CANCELLED'].sum()
result[result >= 100].sort_values()
>>>
AIRLINE
OO 142
EV 146
MQ 152
AA 154
Name: CANCELLED, dtype: int64
5. 사용자 정의 집계함수를 만들어 적용
📍 사용자 정의 집계 함수 정의
- 매개변수
- Series 또는 DataFrame을 받을 매개변수(필수)
- 필요한 값을 받을 매개변수를 선언한다. (선택)
📍 agg( ) 를 사용해 사용자 정의 집계 함수 호출
- DataFrame.agg(func=None, axis=0, *args, **kwargs)
- axis : 사용자 정의 함수에 전달할 값들(Series)의 축 지정
- Series.agg(func=None, axis=0, *args, **kwargs)
- DataFrame의 agg와 매개변수 구조를 맞추기 위해 axis 지정한다. (kwargs를 이용해 매개변수 전달할 경우 axis는 생략해도 된다. - axis기본값 0을 그냥 쓰면 되므로. - keyword 인자 뒤에 position 인자는 안되서 *args로 값 전달시에는 axis를 지정해야 한다.)
- DataFrameGroupBy.agg(func, *args, **kwargs) :
- axis 지정안함.
- 사용자 함수에 Series를 group 별로 전달한다.
- SeriesGroupBy.agg(func=None, *args, **kwargs)
- axis 지정안함
- 사용자 함수에 Series를 group 별로 전달한다.
- args, **kwargs는 사용자 정의 함수에 선언한 매개변수가 있을 경우 전달할 값을 전달한다.
- 키워드 인자를 이용해 가변인자로 전달하는 것이 편하다.
반응형
'[T.I.L] : Today I Learned > Pandas' 카테고리의 다른 글
[Pandas] 4-2강_pivot_table 및 일괄처리 메소드 (0) | 2023.04.19 |
---|---|
[Pandas] 4-1강_groupby 관련 메소드 (0) | 2023.04.19 |
[Pandas] 2-2강_Pandas DataFrame(행, 열의 값 조회 및 변경) (0) | 2023.04.13 |
[Pandas] 2-1강_Pandas DataFrame(메소드) (0) | 2023.04.13 |
[Pandas] 1강_Pandas Series (1) | 2023.04.11 |