# 프로젝트 주제 : 아마존 고객 구매 식품 데이터 분석

# 컬럼 설명

✔️Discount Amount : 할인금액
✔️List Amount : 정가 / 할인전금액
✔️Sales Amount : 실제판매금액
-> Sales Price * Sales Quantity
✔️Sales Amount Based on List Price : 할인적용 안된 판매금액 전체
✔️Sales Cost Amount : 상품을 판매하는데 들어간 비용
✔️Sales Margin Amount : 판매 마진 금액
-> Sales Amount - Sales Cost Amount
✔️Sales Price : 실제 판매 가격
✔️Sales Quantity : 상품 수량
< 카테고리 분류하기 >
1. 데이터 로드하기
여러 패키지 가져오기
import pandas as pd
import sklearn
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import re
csv 파일 읽어오기
df = pd.read_csv('base_df.csv')
df = df.dropna()
⚡️nan 행 컬럼 버리기
df = df.dropna()
⚡️특정 nan 행 컬럼 버리기
df = df.dropna(subset = ['컬럼1', '컬럼2'])
⚡️열 컬럼 버리기
df = df.drop('컬럼1', axis=1)
df 확인하기
df

Item 컬럼 확인하기
df['Item']

2. 마지막 2단어로 Product 컬럼 생성하기
df['Product'] = df['Item'].apply(lambda x : ' '.join(x.split()[-2:]) if len(x.split()) >= 2 else x)
⚡️중요한 문법
컬럼.apply(lambda x : 식)
groupby(컬럼).apply(lambda x : 식)
⚡️문자열 앞의 2자리 가져오기
x.split()[:2]
만약 2자리인 경우는 앞에 ' '.join()을 함으로써 문자열 리스트를 문자열로 묶어줘야 한다
⚡️문자열 뒤의 2자리 가져오기
x.split()[-2:]
만약 2자리인 경우는 앞에 ' '.join()을 함으로써 문자열 리스트를 문자열로 묶어줘야 한다
df 확인하기
df

df['Product']의 유니크 값 확인하기
df['Product'].unique()

만약 여기서 text editor를 클릭한다면 전체 파일을 볼 수 있다!
⚡️숫자세기 함수 종류
1) count
중복제거를 하지 않는다
2) nunique
중복제거 후 개수세기
3) unique
값의종류
4) value_counts
값의 종류별 개수세기
3. 카테고리 정의 후 분류해보기
df_product = df[['Product']]
df_product

df['Product'].unique() 를 수행한 후 text editor를 열어서 지피티에게 각 카테고리별로 분류해달라고 해 보았다
카테고리별로 딕셔너리 생성하기
# 카테고리 정의
categories = {
'Food': ['Butter', 'Rice', 'Soup', 'Pasta', 'Pizza', 'Sandwich', 'Cake', 'Cookie', 'Brownie', 'Candy', 'Chocolate', 'Noodle'],
'Vegetables': ['Vegetable', 'Potato', 'Onion', 'Carrot', 'Tomato', 'Lettuce', 'Broccoli', 'Asparagus', 'Mushroom', 'Pepper', 'Garlic'],
'Fruits': ['Apple', 'Orange', 'Banana', 'Lemon', 'Lime', 'Grape', 'Peach', 'Plum', 'Cherry', 'Berry', 'Melon'],
'Dairy': ['Milk', 'Cheese', 'Yogurt', 'Butter', 'Cream'],
'Beverages': ['Juice', 'Soda', 'Cola', 'Wine', 'Beer', 'Drink'],
'Snacks': ['Chips', 'Pretzels', 'Popcorn', 'Crackers', 'Jerky', 'Nuts', 'Mints', 'Waffles'],
'Bread': ['Bread', 'Bagel', 'Muffin', 'Donut', 'Roll'],
'Canned Food': ['Canned', 'Tuna', 'Sardines', 'Tomatos', 'Peaches', 'Beans', 'Corn', 'Soup'],
'Other': []
}
딕셔너리 items()으로 키와 값의 쌍 확인하기
categories.items()
dict_items([('Food', ['Butter', 'Rice', 'Soup', 'Pasta', 'Pizza', 'Sandwich', 'Cake', 'Cookie', 'Brownie', 'Candy', 'Chocolate', 'Noodle']),
('Vegetables', ['Vegetable', 'Potato', 'Onion', 'Carrot', 'Tomato', 'Lettuce', 'Broccoli', 'Asparagus', 'Mushroom', 'Pepper', 'Garlic']),
('Fruits', ['Apple', 'Orange', 'Banana', 'Lemon', 'Lime', 'Grape', 'Peach', 'Plum', 'Cherry', 'Berry', 'Melon']),
('Dairy', ['Milk', 'Cheese', 'Yogurt', 'Butter', 'Cream']),
('Beverages', ['Juice', 'Soda', 'Cola', 'Wine', 'Beer', 'Drink']),
('Snacks', ['Chips', 'Pretzels', 'Popcorn', 'Crackers', 'Jerky', 'Nuts', 'Mints', 'Waffles']),
('Bread', ['Bread', 'Bagel', 'Muffin', 'Donut', 'Roll']),
('Canned Food', ['Canned', 'Tuna', 'Sardines', 'Tomatos', 'Peaches', 'Beans', 'Corn', 'Soup']),
('Other', [])])
⚡️ 카테고리 매핑 함수
# 카테고리 매핑 함수
def categorize_item(item):
for category, keywords in categories.items():
if any(re.search(r'\b' + keyword + r'\b', item, re.IGNORECASE) for keyword in keywords):
return category
return 'Other'
re.search(keyword, item, re.IGNORECASE)는 item에서 키워드를 대소문자 구분 없이 검색합니다.
키워드가 item에 포함되어 있으면 해당 카테고리를 반환합니다.
모든 카테고리에 해당하지 않으면 'Other'를 반환합니다.
# 단어 경계 \b의 역할
\b는 문자와 공백 또는 비 문자(예: 구두점) 사이에 있는 위치를 매칭합니다.
예를 들어, \bword\b는 'word'라는 단어를 정확히 매칭하며, 'sword', 'wording' 등과 같은 문자열과는 매칭하지 않습니다.
만약 \b를 사용하지 않는다면 word라는 단어를 매칭할때 sword에서도 매칭되는 상황이 나올 수 있습니다
df['Item']에 카테고리 매핑 함수 적용후 새로운 컬럼 카테고리 생성하기
df['Category'] = df['Item'].apply(categorize_item)
카테고리 생성 확인하기
df['Category']

df

'Knowledge🦢 > Python' 카테고리의 다른 글
| [Python] RFM 세그먼테이션 (0) | 2024.08.22 |
|---|---|
| [Python] 아이템별 조합 찾기, 2개의 테이블 합치기⚡️ (0) | 2024.07.11 |
| [Python] 파이썬 iterable 의 뜻 (0) | 2024.05.08 |
| [Python] 파이썬 기초문법 복습 (0) | 2024.04.05 |
| [TIL] 파이썬 문법 기초 (0) | 2024.04.04 |