Python

dataframe 4 - 데이터 집계

retill28 2024. 7. 5. 05:21

1. 분포와 통계량

describe() 함수를 통해 기초 통계량들을 구할 수 있다. 

 

아래와 같은 함수를 사용해서 대푯값을 구할 수 있다,

numeric_only = True 옵션을 통해 데이터 타입이 숫자인 항목에 한해 구할 수 있다. 

 

 

 

2. 상관관계 분석 

corr() 함수를 통해 각 컬럼별 상관관계를 분석할 수 있다. 

 

후에 배울 그래프와 결합하면 아래처럼 나타낼 수 있다. 

 

 

 

 

3. groupby()

같은 값을 한 그룹으로 묶어서 각종 연산과 통계값을 구하는 방법

형식 : 데이터.groupby(컬럼명).연산및통계함수

  1.  
  2. df.groupby('Pclass').count()    #Pclass 각 그룹군에 대해 해당 값이 몇개인지 표로 보여줌

     

  3. df.groupby('Pclass').nunique() #유니크한 갯수
    #패신저 아이디는 1~216이라 216이란 결과, Survived는 Y/N 으로 두가지 결과만 나왔으므로 2이다

     

  4. df.groupby('Pclass').sum(numeric_only=True)
  5. df.groupby('Pclass')[['Survived','Age']].mean()
  6. 다중함수에 대해서도 groupby 함수를 사용할 수 있다. 
    df.groupby(['Sex','Pclass']).mean(numeric_only=True)
    성별과 클래스에 따른 각 항목의 평균을 계산. 


    df.groupby(['Sex','Pclass'])[['Survived','Age','SibSp','Parch','Fare']].aggregate([np.mean, np.min, np.max])
    성별과 클래스에 따라, 숫자형인 값을 갖는 각 항목에 대해 평균, 최소, 최대값 계산 




4. crosstab()

범주형 데이터를 비교분석할 때 사용한다. 

형태 : pd.crosstab(index=행, columns=열, margins=True/False, normalize=True/False)

  1. 범주열 데이터 갯수 구하기 
    pd.crosstab(df['Sex'], df['Survived'])
    pd.crosstab(df['Pclass'], df['Survived'])
    실행결과

     

  2. 범주열 데이터 비율 구하기
    • normalize = 'all': 전체 합이 100%
    • normalize = 'index': 행별 합이 100%
    • normalize = 'columns': 열별 합이 100%
    pd.crosstab(df['Sex'], df['Survived'], normalize='all')
    pd.crosstab(df['Sex'], df['Survived'], normalize='index')
    pd.crosstab(df['Sex'], df['Survived'], normalize='all', margins=True)
    왼쪽부터 차례로 실행한 결과 

  3. 다중 인덱스, 다중 칼럼의 범주표 구하기 
    pd.crosstab(index=[df['Sex'], df['Pclass']], columns=df['Survived'], normalize='columns')

 

 

 

5. 피벗테이블

엑셀에서 쓰던 그 피벗테이블 

형태 : p d.pivot_table(데이터명, index= 원하는 행, columns= 원하는 열, values= 표에 넣을 값, aggfunc=값을 처리할 연산)

단일 

pd.pivot_table(df, index=
'Sex', columns='Survived', values='Age', aggfunc='mean')


다중

pd.pivot_table(df, index=[
'Sex','Pclass'], columns=['Survived','Embarked'], values='Age', aggfunc='mean')


 

 

 

6. stack, unstack, melt

 
pivot = pd.pivot_table(df, index=['Sex','Pclass'], values=['Survived','Fare'], aggfunc=['mean','median','sum'])
최초 데이터로 만든 피벗 테이블
  • stack : 컬럼 레벨에서 인덱스 레벨로 데이터프레임을 변경합니다.
  • unstack : 인덱스 레벨에서 컬럼 레벨로 데이터프레임을 변경합니다
  • pivot.stack(1) #컬럼의 두번째 레벨을 인덱스로 내립니다.
    열을 행으로 바꿈

    pivot.unstack(0) #인덱스의 첫번째 레벨을 컬럼으로 쌓아 올립니다
  • melt() : 컬럼명들이 데이터 값으로 들어가 더 긴 표를 만든다.
    형태 : pd.melt(데이터명, id_vars=기준 컬럼) 
    # 원본 데이터
    data = pd.DataFrame({'name':['a','b','c']
                        , 'order_count':[3,4,10]
                        , 'amount':[10000,25000,300000]})
     
    # melt 결과 1, 결과 2
    pd.melt(data, id_vars=['name'])
    pd.melt(data, id_vars=['name'], var_name='type', value_name='val')
    좌 : 원본 / 우 : 결과 A,.결과 B

 

 

 

 

 

 

 

 

'Python' 카테고리의 다른 글

crawling 1 - Selenium  (0) 2024.07.10
데이터 시각화 1  (1) 2024.07.05
dataframe 3 - 데이터 가공  (1) 2024.07.05
dataframe 2 - 구조  (0) 2024.07.05
dataframe 1 - 생성, 조회, 추출  (0) 2024.07.05