본문 바로가기

파이썬/Pandas (데이터 가공 라이브러리)

Pandas 데이터 요약과 맵핑

# 학습내용
- summary
- maps

import pandas as pd
reviews = pd.read_csv("./lib/input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
# pd.set_option('max_rows', 10)
print(reviews)

# 데이터 요약 함수
# Pandas에는 데이터를 요약해주는 다양한 함수가 내장 되어있으며, 데이터를 더욱 빠르게 확인할 수 있도록 도움을 줍니다.
# describe() 함수에 대해서 살펴보면
reviews.points.describe()
# describe() 메소드는 열(세로)값에 대해 고차원적 분석 결과를 반환 합니다.
# 데이터의 형태, 평균, 범위 값 등 분석에 유용한 값들을 분석 후 전달해줍니다.
print(reviews.points.describe())

# describe() 함수를 정수형이 아닌 문자열에 쓰게된다면 어떤 결과값을 반환 할까요?
# 글자의 빈도 카테고리 등을 계산하여 반환해 줍니다.
reviews.taster_name.describe()
print(reviews.taster_name.describe())

# 간단한 통계값을 얻기위해 mean()함수를 사용 할 수 있다. 해당 레코드의 평균값을 나타내는 함수이다.
# 원본 + 컬럼 + 함수 형태가 가장 기본적인 형태이다.
reviews.points.mean()
print(reviews.points.mean())

# 사용된 값들의 카테고리를 알려주는 unique() 함수 입니다.
reviews.taster_name.unique()
print(reviews.taster_name.unique())

# value_counts() 함수는 카테고리와 동시에 카테고리들의 사용 빈도를 보여 줍니다.
reviews.taster_name.value_counts()
print(reviews.taster_name.value_counts())

# ::::: Maps :::::
# map 이라는 용어는 수학적인 용어로 mapping을 의미 합니다.
# 맵핑이란 개별 원소를 특정 함수에 일대일 대응 시키는 과정을 의미 한다.
# Pandas는 크게 2가지의 자료구조로 나눌수 있다.
# Series는 1차원 배열 구조(단일 컬럼), Dataframe은 2차원 이상의 자료구조(다중 컬럼)
# map() 함수는 Series에서만 사용할 수 있습니다.
# map(): 단일컬럼 반환, apply(): 단일컬럼, 다중컬럼 및 자료구조 모두 반환

review_points_mean = reviews.points.mean()
reviews.points.map(lambda p: p - review_points_mean)
print(reviews.points.map(lambda p: p - review_points_mean))

# apply()를 활용한 Series 데이터 변환
# row는 현재 points 열의 행값

# apply()를 활용한 Series 데이터 변환
# row는 현재 points 열의 행값
def remean_points(row):
    row = row - review_points_mean
    return row

reviews.points.apply(remean_points)
print(reviews.points.apply(remean_points))

#  apply()를 활용한 Dataframe 데이터 변환
# 다중 컬럼이기 때문에 axis='columns' 옵션 지정이 필요합니다.
# 변환하려는 컬럼을 지정해야 합니다.
# => 예) row.points
def remean_points(row):
    row.points = row.points - review_points_mean
    return row

reviews.apply(remean_points, axis='columns')
print(reviews.apply(remean_points, axis='columns'))

print(reviews.head(1))

# 판다스는 맵핑에 필요한 많은 함수를 제공 합니다.
review_points_mean = reviews.points.mean()

# 아래 코드를 주석을 바꿔가면 실행해보세요.
# 파이썬에서 배웠던 연산자 오버로딩이 작동합니다.
# 굳이 map 함수로 기존 값에 평균 값을 빼는 코드를 구현하지 않아도
# reviews.points - review_points_mean 식으로 같은 기능이 구현됩니다.

# reviews.points
# review_points_mean
reviews.points - review_points_mean

# 또한 Pandas는 동일한 길이를 가진 항목들에 대해서는 유연한 작업을 수행할 수 있습니다.
# 예를 들면 다음 처럼 국가와 지역을 합쳐 새로운 특징을 만드는 작업 같이 말이죠
print(reviews.country + " - " + reviews.region_1)

- 끝 -