-
Chapter.02-3~02-4 기초적인 통계 계산하기, 그래프 그리기Do it! 판다스 입문 2022. 6. 12. 14:57
지금까지는 데이터를 추출하는 방법에 대해 알아보았습니다. 이번에는 추출한 데이터를 가지고 몇 가지 기초적인 통계 계산을 해보겠습니다. 다음은 갭마인더 데이터 집합에서 0~9번째 데이터를 추출하여 출력한 것입니다.
print(df.head(n=10))
country continent year lifeExp pop gdpPercap
0 Afghanistan Asia 1952 28.801 8425333 779.445314
1 Afghanistan Asia 1957 30.332 9240934 820.853030
2 Afghanistan Asia 1965 31.997 10267083 853.100710
3 Afghanistan Asia 1967 34.020 11537966 836.197138
4 Afghanistan Asia 1972 36.088 13079460 739.981106
5 Afghanistan Asia 1977 38.438 14880372 786.113360
6 Afghanistan Asia 1982 39.854 12881816 978.011439
7 Afghanistan Asia 1987 40.822 13867957 852.395945
8 Afghanistan Asia 1992 41.674 16317921 649.341395
9 Afghanistan Asia 1997 41.763 22227415 635.341351그룹화한 데이터의 평균 구하기
1. lifeExp 열을 연도별로 그룹화하여 평균 계산하기
예를 들어 연도별 lifeExp 열의 평균을 계산하려면 어떻게 해야 할까요? 데이터를 year 열로 그룹화하고 lifeExp 열의 평균을 구하면 됩니다. 다음은 데이터프레임의 groupby 메서드에 year 열을 전달하여 연도별로 그룹화한 다음 lifeExp 열을 지정하여 mean 메서드로 평균을 구한 것입니다.
print(df.groupby('year')['lifeExp'].mean( ))
year
1952 49.057620
1957 51.507401
1962 53.609249
1967 55.678290
1972 57.647386
1977 59.570157
1982 61.533197
1987 63.212613
1992 64.160338
1997 65.014676
2002 65.694923
2007 67.007423
Name: lifeExp, dtype: float642. 과정 1에서 작성한 코드가 조금 복잡해서 어리둥절할 수도 있을 것입니다. 어떤 일이 벌어진 것일까요? 과정 1에서 작성한 코드를 작은 단위로 나누어 살펴보겠습니다. 먼저 데이터프레임을 연도별로 그룹화한 결과를 살펴보겠습니다. groupby 메서드에 year 열 이름을 전달하면 연도별로 그룹화한 country, continent, ..., gdpPercap 열을 모은 데이터프레임을 얻을 수 있습니다.
grouped_year_df = df.groupby('year')
print(type(grouped_year_df))
<class 'pandas.core.groupby.DataFrameGroupBy'>3. grouped_year_df를 출력하면 과정 2에서 얻은 데이터프레임이 저장된 메모리의 위치를 알 수 있습니다. 이 결과를 통해 연도별로 그룹화한 데이터는 데이터프레임 형태로 현재 메모리의 0x10d9340f0이라는 위치에 저장되어 있음을 알 수 있습니다.
print(grouped_year_df)
<pandas.core.groupby.DataFrameGroupBy object at 0x10d9340f0>4. 이어서 lifeExp 열을 추출한 결과를 살펴보겠습니다. 그룹화한 데이터프레임에서 lifeExp 열을 추출하면 그룹화한 시리즈를 얻을 수 있습니다. 즉, 연도별로 그룹화한 lifeExp 열을 얻을 수 있습니다.
grouped_year_df_lifeExp = grouped_year_df['lifeExp']
print(type(grouped_year_df_lifeExp))
<class 'pandas.core.groupby.SeriesGroupBy'>5. 마지막으로 평균을 구하는 mean 메서드를 사용한 결과를 보겠습니다. 과정 4에서 연도별로 그룹화한 lifeExp에 mean 메서드를 사용했기 때문에 각 연도별 lifeExp 열의 평균값을 얻을 수 있습니다.
mean_lifeExp_by_year = grouped_year_df_lifeExp.mean( )
print(mean_lifeExp_by_year)
year
1952 49.057620
1957 51.507401
1962 53.609249
1967 55.678290
1972 57.647386
1977 59.570157
1982 61.533197
1987 63.212613
1992 64.160338
1997 65.014676
2002 65.694923
2007 67.007423
Name: lifeExp, dtype: float646. lifeExp, gdpPercap 열의 평균값을 연도, 지역별로 그룹화하여 한 번에 계산하기
다음은 과정 1~4를 응용한 코드입니다. year, continent 열로 그룹화한 그룹 데이터프레임에서 lifeExp, gdpPercap 열만 추출하여 평균값을 구한 것입니다.
multi_group_var = df.groupby(['year', 'continent'])[['lifeExp', 'gdpPercap']].mean( )
print(multi_group_var)
year continent
1952 Africa 39.135500 1252.572466
Americas 53.279840 4079.062552
Asia 46.314394 5195.484004
Europe 64.408500 5661.057435
Oceania 69.255000 10298.085650
1957 Africa 41.266346 1385.236062
Americas 55.960280 4616.043733
Asia 49.318544 5787.732940
...
2007 Africa 54.806038 3089.032605
Americas 73.608120 11003.031625
Asia 70.728485 12473.026870
Europe 77.648600 25054.481636
Oceania 80.719500 29810.188275
print(type(multi_group_var))
<class 'pandas.core.frame.DataFrame'>7. 그룹화한 데이터 개수 세기
이번에는 그룹화한 데이터의 개수가 몇 개인지 알아보겠습니다. 이를 통계에서는 '빈도수'라고 부릅니다. 데이터의 빈도수는 nunique 메서드를 사용하면 쉽게 구할 수 있습니다. 다음은 continent를 기준으로 데이터프레임을 만들고 country 열만 추출하여 데이터의 빈도수를 계산한 것입니다.
print(df.groupby('continent')['country'].nunique( ))
continent
Africa 52
Americas 25
Asia 33
Europe 30
Oceania 2
Name: country, dtype: int64그래프 그리기
그래프와 같은 데이터의 시각화는 데이터 분석 과정에서 가장 중요한 요소입니다. 데이터를 시각화하면 데이터를 이해하거나 추이를 파악하는 등의 작업을 할 때 많은 도움이 됩니다. 여기에서는 간단한 그래프를 그려보고 데이터 시각화가 무엇인지 알아보겠습니다. 자세한 내용은 04장에서 더 자세히 설명하겠습니다.
1. 먼저 그래프와 연관된 라이브러리를 불러옵니다.
%matplotlib inline
import matplotlib.pyplot as plt2. 그런 다음 year 열을 기준으로 그룹화한 데이터프레임에서 lifeExp 열만 추출하여 평균 값을 구합니다.
global_yearly_life_expectancy = df.groupby('year')['lifeExp'].mean( )
print(global_yearly_life_expectancy)
year
1952 49.057620
1957 51.507401
1962 53.609249
1967 55.678290
1972 57.647386
1977 59.570157
1982 61.533197
1987 63.212613
1992 64.160338
1997 65.014676
2002 65.694923
2007 67.007423
Name: lifeExp, dtype: float643. 과정 2에서 구한 값에 plot 메서드를 사용하면 다음과 같은 그래프가 그려집니다.
global_yearly_life_expectancy.plot( )
마무리하며
이 장에서는 데이터 집합을 불러오는 방법과 데이터를 추출하는 방법 등을 알아보았습니다. 판다스가 무엇인지 감이 좀 잡혔나요? 다음 장에서는 판다스의 기본 자료형인 데이터프레임과 시리즈를 좀 더 자세히 알아보겠습니다.
출처 : "판다스 입문"
'Do it! 판다스 입문' 카테고리의 다른 글
Chapter 04-1 데이터 시각화가 필요한 이유 (0) 2022.06.20 Chapter 03-4~03-6 데이터프레임 다루기, 시리즈와 데이터프레임의 데이터 처리하기, 데이터 저장하고 불러오기 (0) 2022.06.13 Chapter 03-1~03-3 나만의 데이터 만들기, 시리즈 다루기(기초,응용) (0) 2022.06.13 Chapter.02-2 데이터 추출하기 (0) 2022.06.12 Chapter 02-1 데이터 집합 불러오기 (0) 2022.06.11