- 통계는 데이터 분석에서 굉장히 중요한 요소이다.
- 데이터에 대한 통계 계산식으로 Pandas 함수로 제공하기 때문에 어렵지 않게 통계 값을 산출할 수 있다.
- describe() - 요약통계
- 전반적인 주요 통계를 확인할 수 있음
- 기본 값으로 수치형(Numerical) 컬럼에 대한 통계표를 보여줌
- count : 데이터 개수
- mean : 평균
- std : 표준편차
- min : 최솟값
- max : 최대값
tc5 = tips.copy()
# numerical 칼럼에 대한 통계
tc5.describe()
# 각 컬럼에 대한 개수, 누락 데이터는 건너 뛰기 때문에 244로 나옴
tc5.count()
'''
total_bill 245
tip 244
sex 244
smoker 244
day 244
time 244
size 244
dtype: int64
'''
tc5['tip'].sum() # 731.5799999999999
round(tc5['tip'].sum()) # 732 반올림처리
round(tc5['tip'].sum(), 0) # 0이 의미하는 것은 소수점 0자리까지 반환한다는 의미
round(tc5['tip'].sum(), 2) # 731.58 / 소수점 2자리까지 반올림하여(소수점 3번째에서 반올림) 표시하라
# 여러 컬럼에 대하여 sum을 구하자. 열거형으로 칼럼 나열
# 2차원으로 나와야 하기 때문에 리스트를 [] 안에 넣어야 함
tc5[['tip', 'total_bill']].sum()
'''
tip 731.58
total_bill 4853.11
dtype: float64
'''
skipna
기술 통계함수에서는 skipna = True 가 기본으로 설정skip = False로 설정한다면,
NaN값이 있는 컬럼은 NaN값으로 그대로 출력된다.
# numeric 칼럼 모두 sum()
# 정수값과 누락 데이터를 더하면 Nan 이기 때문에 누락 skip하라는 skipna는 잘 안 씀
tc5.sum(skipna=False)
'''
total_bill 4853.11
tip NaN
size NaN
dtype: float64
'''
tc5.mean()
tc5.mean(skipna=False)
'''
total_bill 19.808612
tip NaN
size NaN
dtype: float64
'''
median() - 중앙값
- 데이터의 중앙 값을 출력
- 중앙값 : 데이터를 오름차순 정렬하여 중앙에 위치한 값
- 이상치(outlier)가 존재하는 경우, 평균보다 중앙값을 대표값으로 더 선호
cumsum 누적합 과 sum 합의 차이
# 누적의 합 cumsum
# 누적의 곱 cumprod
# 모든 손님이 준 팁의 합
tc5['tip'].cumsum() # 누적된 값들을 하나하나 보여줄 뿐 sum()과 다를 게 없다
'''
0 1.01
1 2.67
2 6.17
3 9.48
4 13.09
...
240 724.83
241 726.83
242 728.58
243 731.58
244 NaN
Name: tip, Length: 245, dtype: float64
'''
# 합을 한 번에 보여주기
tc5['tip'].sum() # 731.5799999999999
# 분산
tc5['tip'].var() # 1.9144546380624725 variance가 그다지 다양하진 않다..?
# 표준편차
tc5['tip'].std() #1.3836381890011826
quantile() - 분위
- 주어진 데이터를 동등한 크기로 분할하는 지점
- 10%일 경우 0.1을, 80%의 경우 0.8을 대입하여 값을 계산
mode() - 최빈값
- 가장 많이 출현한 데이터를 의미
- 카테고리형 데이터에도 적용 가능
corr() - 상관관계
- 컬럼별 상관관계를 확인할 수 있음
- -1에 가까울수록 반비례 관계, 1에 가까울수록 정비례 관계를 의미
- 부호에 상관없이 -1과 1에 가까운지에 따라 영향력 있음을 판단함
✅ Sat(토요일) 방문한 누적 식사 인원(size)의 숫자는?
condition = tc5['day']=='Sat'
con_list = tc5[condition]
con_list['size'].cumsum()
tc5[condition]['size'].sum()
# loc 권장!!
tc5.loc[condition, 'size'].cumsum()
#con_list['size'].sum()
#tc5[condition].size
날짜, 시간 datetime
날짜 끝나는 날, 주기, 설정 가능
- date_range() 함수 사용으로 생성
- start(시작날짜) | end (끝나는 날짜) | periods(생성할 데이타 갯수) | freq(주기)
- datetime64라는 데이타 타입으로 지정됨
- datetime 타입은 dt접근자로 아래와 같은 날짜 속성에 쉽게 접근 가능하다.
Pandas의 dt(datetime) 날짜 관련 변수
- pandas.Series.dt.year: 연도
- pandas.Series.dt.month: 월
- pandas.Series.dt.day: 일
- pandas.Series.dt.dayofweek :요일**(월요일 0)**
- pandas.Series.dt.hour: 시
- pandas.Series.dt.minute: 분
- pandas.Series.dt.second: 초
- pandas.Series.dt.microsecond: 마이크로초(micro seconds, 백만분의 일초)
tips.shape # (245, 7) 행과 열
tips.shape[0] # 245 행의 수
날짜는 datetime64
가끔 datetime이 object로 나오는 경우가 있다
# tips.shape[0] 245일 생성
dates = pd.date_range('20200101', periods=tips.shape[0])
dates
feature engineering 다루기
dc = tips.copy()
# 컬럼 추가
dc['date'] = dates
dc.head()
datetime - 을 기준으로 년, 월, 일로 자르기
월별 데이터를 추출해낼 수 있다칼럼을 새롭게 만들 때 날짜를 분리해서 만드는 경우가 있다
# 문자열일 경우 datetime으로 형변환하여 - 를 기준으로 년, 월, 일 나누기
# 데이터프레임에서 칼럼 하나만 잘라오면 Series가 된다
dc['date'].dt.year.head()
'''
0 2020
1 2020
2 2020
3 2020
4 2020
Name: date, dtype: int64
'''
# datetime에서 월만 추출
dc['date'].dt.month.head()
'''
0 1
1 1
2 1
3 1
4 1
Name: date, dtype: int64
'''
dc['date'].dt.day.head()
'''
0 1
1 2
2 3
3 4
4 5
Name: date, dtype: int64
'''
월요일 0, 일요일 6
dc['date'].dt.dayofweek.head() # 2 수, 3목, 4금, 5토, 6일
'''
0 2
1 3
2 4
3 5
4 6
Name: date, dtype: int64
'''
# 분기 quarter / 1년 => 1분기: 1~3월, 2분기: 4~6월, ...
# 우리 데이터는 9월까지라 3분기로 나뉨
dc['date'].dt.quarter
'''
0 1
1 1
2 1
3 1
4 1
..
240 3
241 3
242 3
243 3
244 3
Name: date, Length: 245, dtype: int64
'''
dc['분기'] = dc['date'].dt.quarter
dc['년도'] = dc['date'].dt.year
dc['월'] = dc['date'].dt.month
dc['일'] = dc['date'].dt.day
dc.head()
날짜 관련처럼 보이지만 실제로 object로 인식되는 컬럼들이 많다.
이런 컬럼들은 다시 날짜 타입으로 변경해야 하는데 그런 경우to_datetime() 함수로 바꿔준다.
바꾸고 나서 나머지 사용법은 동일하다
dc['date'] = pd.to_datetime(dc['date'])
dc.head()
'Python > 데이터 분석' 카테고리의 다른 글
[Dataframe] Dataframe - 데이터 병합 (0) | 2022.04.09 |
---|---|
[DataFrame] DataFrame - Grouping, pivot_table (0) | 2022.04.08 |
[DataFrame] DataFrame - 누락데이터 처리하기, 삭제하기 (0) | 2022.04.08 |
[DataFrame] DataFrame - 조회하기 (0) | 2022.04.08 |
[DataFrame] DataFrame - 컬럼 다루기 & 컬럼명 변경 및 추가, 삭제하기 (0) | 2022.04.02 |
댓글