본문 바로가기
[업무 지식]/Python

Python / 데이터 집계

by 에디터 윤슬 2024. 10. 23.
 

Group by

  • Group by 함수는 데이터프레임을 그룹화하고, 그룹 단위로 데이터를 분할(split), 적용(apply), 결합(combine)하는 기능
import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
    'Value': [1, 2, 3, 4, 5, 6]
}
df = pd.DataFrame(data)

# 'Category' 열을 기준으로 그룹화하여 'Value'의 연산 수행
grouped = df.groupby('Category').mean()

grouped_sum = df.groupby('Category').sum()
grouped_count = df.groupby('Category').count()
grouped_max = df.groupby('Category').max()
grouped_min = df.groupby('Category').min()

# 수치형 데이터의 경우에 연산이 가능

 

복수의 열을 기준으로 Group by 함수 사용

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Category': ['A', 'A', 'B', 'B', 'A', 'B'],
    'SubCategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    'Value': [1, 2, 3, 4, 5, 6]
}
df = pd.DataFrame(data)

# 'Category'와 'SubCategory' 열을 기준으로 그룹화하여 'Value'의 합 계산
grouped_multiple = df.groupby(['Category', 'SubCategory']).sum()

print(grouped_multiple)

다양한 집계 함수 적용

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Category': ['A', 'A', 'B', 'B', 'A', 'B'],
    'SubCategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    'Value1': [1, 2, 3, 4, 5, 6],
    'Value2': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)

# 'Category'와 'SubCategory' 열을 기준으로 그룹화하여 각 그룹별 'Value1'과 'Value2'의 평균, 합 계산
grouped_multiple = df.groupby(['Category', 'SubCategory']).agg({'Value1': ['mean', 'sum'], 'Value2': 'sum'})

print(grouped_multiple)

Pivot Table

피벗 테이블 생성하기

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Value': [10, 20, 30, 40, 50]
}
df = pd.DataFrame(data)

# 피벗 테이블 생성: 날짜를 행 인덱스로, 카테고리를 열 인덱스로, 값은 'Value'의 합으로 집계
pivot = df.pivot_table(index='Date', columns='Category', values='Value', aggfunc='sum')

print(pivot)

여러 열을 기준으로 피벗 테이블 생성하기

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'SubCategory': ['X', 'Y', 'X', 'Y', 'X'],
    'Value': [10, 20, 30, 40, 50]
}
df = pd.DataFrame(data)

# 피벗 테이블 생성: 'Date'를 행 인덱스로, 'Category'와 'SubCategory'를 열 인덱스로, 값은 'Value'의 합으로 집계
pivot = df.pivot_table(index='Date', columns=['Category', 'SubCategory'], values='Value', aggfunc='sum')

print(pivot)

집계 함수를 다르게 적용하여 피벗 테이블 생성하기

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Value1': [10, 20, 30, 40, 50],
    'Value2': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)

# 피벗 테이블 생성: 'Date'를 행 인덱스로, 'Category'를 열 인덱스로, 값은 'Value1'과 'Value2'의 평균과 합으로 집계
pivot = df.pivot_table(index='Date', columns='Category', values=['Value1', 'Value2'], aggfunc={'Value1': 'mean', 'Value2': 'sum'})

print(pivot)

시각화 하기

import matplotlib.pyplot as plt

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Value1': [10, 20, 30, 40, 50],
    'Value2': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)

# 피벗 테이블 생성: 'Date'를 행 인덱스로, 'Category'를 열 인덱스로, 값은 'Value1'과 'Value2'의 평균으로 집계
pivot = df.pivot_table(index='Date', columns='Category', values=['Value1', 'Value2'], aggfunc='mean')


# 피벗 테이블의 선 그래프 시각화
pivot.plot(kind='line')
plt.xlabel('Date')
plt.ylabel('Values')
plt.title('Pivot Table Visualization')
plt.legend(title='Category')
plt.show()

데이터 정렬하기

컬럼 기준으로 정렬

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [25, 22, 30, 18, 27],
    'Score': [85, 90, 75, 80, 95]
}
df = pd.DataFrame(data)

# 정렬
sorted_by_score = df.sort_values('Score') # 'Score' 열을 기준으로 오름차순 정렬
sorted_by_score = df.sort_values('Score',ascending=False) # 'Score' 열을 기준으로 내림차순 정렬

print(sorted_by_score)

인덱스 기준으로 정렬

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [25, 22, 30, 18, 27],
    'Score': [85, 90, 75, 80, 95]
}
df = pd.DataFrame(data)

# 정렬
sorted_by_index = df.sort_index() # 인덱스를 기준으로 오름차순 정렬
sorted_by_index = df.sort_index(ascending=False) # 인덱스를 기준으로 내림차순 정렬
print(sorted_by_index)

기타

Pickle 활용하기

  • python 의 변수, 함수, 객체를 파일로 저장하고 불러올 수 있는 라이브러리
  • list, dictionary등을 파일 그대로 저장하면 용량이 매우 커지는데 pickle을 사용하면 binary형태로 저장되기 때문에 용량이 매우 작아진다.
  • 추가적으로 gzip을 이용하여 pickle로 저장된 데이터를 압축할 수 있음 → pandas에서는to_pickle()및read_pickle() 메서드를 통해 pickle을 사용할 수 있음
  • 머신러닝 모델 등을 저장하고 불러올때도 활용함
import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'Column1': [1, 2, 3, 4, 5],
    'Column2': ['A', 'B', 'C', 'D', 'E']
}
df = pd.DataFrame(data)

# 데이터프레임을 pickle 파일로 저장
df.to_pickle('dataframe.pkl')  # 데이터프레임을 'dataframe.pkl' 파일로 저장
import pandas as pd

# pickle 파일에서 데이터프레임 불러오기
loaded_df = pd.read_pickle('dataframe.pkl')  # 'dataframe.pkl' 파일에서 데이터프레임 불러오기
print(loaded_df)

'[업무 지식] > Python' 카테고리의 다른 글

[Python 기초] ①  (0) 2024.10.24
Python / 데이터 시각화  (0) 2024.10.23
python / boolean indexing  (0) 2024.10.23
Python / 코드 핵심 요약  (0) 2024.10.23
Python/약수의 합  (0) 2024.10.22