본문 바로가기
Pandas, Numpy

Python으로 구해보는 기초통계량(산술평균, 기하평균)

by Kwonys 2023. 7. 21.
728x90
반응형

파이썬을 통해 기초통계량 중 산술평균, 기하평균을 구해보겠습니다.

먼저 도로교통공단_일자별 시군구별 교통사고 건수 데이터를 불러와 date format을 변경하고 데이터를 살펴보면

# date format 변경
a = range(0, 59724)
b = range(0, 59724)

df['dt'] = pd.DataFrame(list(map(lambda x, y: '2020-'+ str(df['발생월'][x]) + '-' + str(df['발생일'][y]), a, b)))
df['ym'] = pd.DataFrame(list(map(lambda x: '2020-'+ str(df['발생월'][x]), a)))
 
df['dt']  = df['dt'].map(lambda x : datetime.strptime(x, '%Y-%m-%d').strftime('%Y-%m-%d'))
df['ym']  = df['ym'].map(lambda x : datetime.strptime(x, '%Y-%m').strftime('%Y-%m'))
 
df.head()

이런 식으로 데이터가 형성되어 있는 것을 알 수 있습니다..

 

먼저 기초통계를 살펴보면 column별 개수, 평균, 표준편차, 최소값, 사분위수 값, 최대값을 알 수 있습니다.

df.describe()

 

다음으로 월별 사고건수의 평균(산술평균)을 알아내기 위해 'ym' column별로 groupby한 데이터의 사고건수의 평균을 구해보았습니다.

df.groupby('ym').사고건수.mean()

 

다음으로 기하평균을 이용하여 2020년 월 평균 사고건수의 증가율을 구해보겠습니다.

 

먼저 index를 column으로 변환하여 tmp 데이터프레임을 만들어줍니다.

tmp = pd.DataFrame(df.groupby(['ym']).사고건수.sum()).reset_index()
tmp

데이터프레임 생성 후 ''shift_data'', ''rate1'', ''rate2'' column을 만들어주고

''shift_data'' column에 다음달의 사고건수를 당겨와 넣어주고

''rate1'' column에 증가율을 넣어주고, ''rate2''는 일단 빈칸으로 만들어줍니다.

그 다음 ''rate1''이 0보다 크면 1을 더해 ''rate2에 넣고

''rate1''이 0보다 작으면(음수) 1에서 ''rate1''의 절대값을 빼  ''rate2에 넣어줍니다.

그러면 마지막 12월(마지막 행)의  ''shift_data''와 ''rate1'', ''rate2''는 null값이 되기 때문에 삭제해줍니다.

tmp['shift_data'] = tmp['사고건수'].shift(-1)
 
tmp['rate1'] = ((tmp['shift_data']-tmp['사고건수']) / tmp['사고건수'])
 
tmp['rate2'] = ''
tmp.loc[tmp['rate1'] > 0, 'rate2'] = tmp['rate1'] + 1
tmp.loc[tmp['rate1'] < 0, 'rate2'] = 1 - abs(tmp['rate1'])
 
tmp.dropna(axis=0, inplace=True)

 

이제 이 데이터의 rate2의 값을 모두 곱해주면 기하평균을 구할 수 있습니다.

 

reduce함수를 사용하여 ''rate2'' column을 모두 곱해주면 0.9623998114097124 값을 얻을 수 있습니다.

from functools import reduce

arr = tmp['rate2']
reduce(lambda x, y: x * y, arr)

0.9623998114097124

728x90
반응형