티스토리 뷰

pandas로 데이터를 생성하는 방법에 대해 알아보았으니, 이제 data들을 어떻게 연산하고 평균 및 표준편차를 내서 분석을 하는지 확인해보도록 하겠습니다. 이를 통해 pandas로 데이터 분석을 더 고급스럽게 활용할 수 있으므로 이번 포스팅에서 확인하도록 하겠습니다.

pandas 데이터 연산
pandas 데이터 사칙연산
pandas 데이터 평균 구하기
pandas 최대 최소 구하기
describe 메서드를 이용하여 데이터 요약하기

이번 포스팅에서 pandas 데이터 연산과 관련하여 지난번 작성했던 학생별 과목 성적에 대한 data를 조금 더 확장하여 진행하도록 하겠습니다.

import pandas as pd

subject = ['국어','수학','영어','사회','과학']
data = {'갑' : [90,100,95,80,85] , '을' : [85,95,100,80,95], '병' : [100,85,90,90,100],
        '정' : [75,90,80,100,90], '무' : [90,95,85,85,80]}
table = pd.DataFrame(data,index=subject)
 
국어 90 85 100 75 90
수학 100 95 85 90 95
영어 95 100 90 80 85
사회 80 80 90 100 85
과학 85 95 100 90 80

 

pandas 데이터 사칙연산

가장 먼저 사칙연산을 진행하도록 하겠습니다. Series()로 생성한 데이터와 DataFrame()으로 생성한 데이터 모두 연산이 가능하며, 간단한 예제를 통해서 바로 확인해보겠습니다.

먼저 Series()로 생성된 pandas 데이터 연산을 진행해보겠습니다. Series()는 1차원 데이터를 생성하기 때문에 가장 직관적으로 데이터 사칙연산을 확인할 수 있습니다.

import pandas as pd

data =pd.Series([10,10,10,10,10])
data1 = pd.Series([1,2,3,4,5])
print(data+data1)
실행 결과
0 11
1 12
2 13
3 14
4 15
dtype: int64

data라는 변수에는 모두 10으로 값을 채워 넣었고, data1은 1부터 5까지의 값을 채워 넣었습니다. 그리고 두 pandas를 합연산 하였더니 각 데이터의 위치에 대응하는 데이터끼리 더해진 것을 확인할 수 있습니다.

 

다음으로는 DataFrame()으로 생성된 pandas 데이터 연산을 진행하겠습니다. DataFrame()을 통해 data와 data1이라는 두 데이터를 생성하여 연산을 진행해보겠습니다. 연산 전에 예상을 해본다면 갑, 을, 병에 대한 점수는 더해지겠지만, 정과 무는 데이터가 어떻게 합쳐질까요?

data
국어 90 85 100 75 90
수학 100 95 85 90 95
영어 95 100 90 80 85
사회 80 80 90 100 85
과학 85 95 100 90 80
data1 - -
국어 90 85 100 - -
수학 100 95 85 - -
영어 95 100 90 - -
사회 80 80 90 - -
과학 85 95 100 - -

 

subject = ['국어','수학','영어','사회','과학']
data = {'갑' : [90,100,95,80,85] , '을' : [85,95,100,80,95], '병' : [100,85,90,90,100],
        '정' : [75,90,80,100,90], '무' : [90,95,85,85,80]}
data1 = {'갑' : [90,100,95,80,85] , '을' : [85,95,100,80,95], '병' : [100,85,90,90,100]}

table = pd.DataFrame(data,index=subject)
table1 = pd.DataFrame(data1, index=subject)

print(table+table1)
실행 결과
        갑   무   병   을   정
국어 180 NaN 200 170 NaN
수학 200 NaN 170 190 NaN
영어 190 NaN 180 200 NaN
사회 160 NaN 180 160 NaN
과학 170 NaN 200 190 NaN

실행결과는 바로 위와 같습니다. 연산을 했는데 해당 데이터가 존재하지 않는다면 NaN (Not a Number)와 같은 형태로 연산이 진행됩니다.

 

pandas 데이터 평균 구하기

학생들의 시험 점수 평균을 계산하기 위해서는 어떻게 해야 할까요? pandas에서는 평균을 구할 수 있도록 mean()이라는 메서드가 제공됩니다. 이외에도 총합과 표준편차, 분산, 최대 최소 등을 확인할 수 있습니다. 각각의 경우는 아래에서 예제를 통해 확인해보겠습니다.

import pandas as pd

subject = ['국어','수학','영어','사회','과학']
data = {'갑' : [90,100,95,80,85] , '을' : [85,95,100,80,95], '병' : [100,85,90,90,100],
        '정' : [75,90,80,100,90], '무' : [90,95,85,85,80]}
table = pd.DataFrame(data,index=subject)

#1
print(table.mean())

#2
print(table.std())
#1 실행 결과
갑 90.0
을 91.0
병 93.0
정 87.0
무 87.0
dtype: float64

#2 실행 결과
갑 7.905694
을 8.215838
병 6.708204
정 9.746794
무 5.700877
dtype: float64

위와 같이 생성된 table이라는 데이터에 mean()과 std()를 적용하였더니, 각 학생별 점수의 평균과 표준편차를 구할 수 있었습니다. 그렇다면 각 과목별 평균점수를 구할 수 있는 방법은 어떻게 적용하면 될까요? 방법은 아래와 같습니다.

import pandas as pd

subject = ['국어','수학','영어','사회','과학']
data = {'갑' : [90,100,95,80,85] , '을' : [85,95,100,80,95], '병' : [100,85,90,90,100],
        '정' : [75,90,80,100,90], '무' : [90,95,85,85,80]}
table = pd.DataFrame(data,index=subject)

#1
print(table.mean(axis=1))

#2
print(table.std(axis=1))
#1 실행 결과
국어 88.0

수학 93.0
영어 90.0
사회 87.0
과학 90.0
dtype: float64

#2 실행 결과
국어 9.082951
수학 5.700877
영어 7.905694
사회 8.366600
과학 7.905694
dtype: float64

mean()과 std()라는 메서드 안에 axis라는 옵션을 추가했더니 과목별 평균과 표준편차를 구할 수 있었습니다. axis는 0과 1로 어떤 데이터를 선택할 수 있을지 정할 수 있습니다.

  • axis = 0 : 주어진 데이터의 열을 기준으로 연산 진행
  • axis = 1 : 주어진 데이터의 행을 기준으로 연산 진행

 

pandas 최대 최소 구하기

최대 최소도 평균과 마찬가지입니다. 간단한 예제를 통해 확인하고 활용방법만 익힌 후에 바로 넘어가도록 하겠습니다.

import pandas as pd

subject = ['국어','수학','영어','사회','과학']
data = {'갑' : [90,100,95,80,85] , '을' : [85,95,100,80,95], '병' : [100,85,90,90,100],
        '정' : [75,90,80,100,90], '무' : [90,95,85,85,80]}
table = pd.DataFrame(data,index=subject)

#1
print(table.max())

#2
print(table.min(axis=1))
#1 실행 결과
갑 100
을 100
병 100
정 100
무 95
dtype: int64

#2 실행 결과
국어 75
수학 85
영어 80
사회 80
과학 80
dtype: int64

#1는 학생별 최대 성적을 출력하도록 지정하였습니다. 그리고 #2는 과목별 최저 점수를 볼 수 있도록 출력한 모습입니다. 이와 같이 axis옵션을 이용해서 데이터 어느 부분의 최댓값과 최솟값을 뽑아낼지 각자의 데이터를 이용하여 적용하실 수 있습니다.

 

describe 메서드를 이용하여 데이터 요약하기

describe() 메서드를 이용하면 데이터를 한눈에 요약할 수 있습니다. describe()는 주어진 데이터의 행을 기준으로 요약된 데이터를 보여줍니다. 아래 예제를 통해 바로 확인해보겠습니다.

import pandas as pd

subject = ['국어', '수학', '영어', '사회', '과학']
data = {'갑': [90, 100, 95, 80, 85], '을': [85, 95, 100, 80, 95], '병': [100, 85, 90, 90, 100],
        '정': [75, 90, 80, 100, 90], '무': [90, 95, 85, 85, 80]}
table = pd.DataFrame(data, index=subject)
print(table.describe())
실행 결과
            갑            을            병            정            무
count 5.000000 5.000000 5.000000 5.000000 5.000000
mean 90.000000 91.000000 93.000000 87.000000 87.000000
std 7.905694 8.215838 6.708204 9.746794 5.700877
min 80.000000 80.000000 85.000000 75.000000 80.000000
25% 85.000000 85.000000 90.000000 80.000000 85.000000
50% 90.000000 95.000000 90.000000 90.000000 85.000000
75% 95.000000 95.000000 100.000000 90.000000 90.000000
max 100.000000 100.000000 100.000000 100.000000 95.000000

pandas 데이터의 전체적인 데이터를 한눈으로 요약한 모습입니다. 최솟값부터 사분위수 그리고 최댓값까지 출력된 모습을 확인할 수 있고, 이를 이용해서 원본 데이터로부터 원하는 값을 얻어낼 수 있습니다.

댓글
공지사항