본문 바로가기
수업(국비지원)/Python

[Python] chipo.tsc 파일 분석하기1

by byeolsub 2023. 4. 26.

📌

'''
데이터 속성 설명
order_id : 주문번호
quantity : 아이템의 주문수량
item_name : 주문한 아이템의 이름
choice_description : 주문한 아이템의 상세 선택 옵션
item_price : 주문 아이템의 가격 정보
'''

### chipo.tsc 파일 분석하기
# 파일 읽기
import pandas as pd
chipo = pd.read_csv("data/chipotle.tsv",sep="\\t")
chipo.info()

# chipo 데이터의 행열의 갯수 출력하기
chipo.shape

# 컬럼명들 출력하기
chipo.columns

# index(행)의명 출력하기
chipo.index # 결과 -> RangeIndex(start=0, stop=4622, step=1) 
            # : 인덱스로 사용한게 아무것도 없어서 rangeindex가져옴

# order_id 주문번호이므로, 숫자형 분석의 의미가 없다
# order_id 컬럼의 자료형을 문자열로 변경하기
chipo["order_id"] = chipo["order_id"].astype(str)
chipo.info()

# 판매상품명과 상품의 갯수 출력하기
chipo["item_name"].unique()
len(chipo["item_name"].unique())

#1
chipo["item_price"] = chipo["item_price"].str.replace("$","").astype(float)
chipo.info()

# 주문금액 합계
chipo["item_price"].sum()

#2 apply함수 사용
### apply 함수 : 요소들에 적용되는 함수. 
  # apply(함수명 || 람다식)
chipo["item_price"] = chipo["item_price"].apply(lambda x : float(x[1:]))

# 주문금액 합계
chipo["item_price"].sum()

# 주문당 평균 주문 금액
'''
        주문번호     주문금액
           1            1
           1            3
           2            1
           2            1
           
                 전체 주문 금액 : 6
                 주문건수       : 2
                 주문당 평균금액 : 3
'''
#1 전체 주문 금액
hap = chipo["item_price"].sum()
hap

#2 주문 건수
cnt = len(chipo.groupby("order_id"))
cnt

# cnt = len(chipo.groupby("order_id")["item_price"].count())

#1 주문당 평균 금액
hap / cnt

# ------------------
#2 주문당 평균 금액
chipo.groupby("order_id")["item_price"].sum().mean()

# 한번의 주문시 주문금액이 50달러 이상인 주문의 id 출력하기
'''
  주문번호     주문금액
     1           25
     1           30
     2            2
     2           45
     
50달러 이상인 주문번호 : 1     
'''
# 주문당 합계금액
order_id_tot = chipo.groupby("order_id").sum()
order_id_tot

# 주문당 합계금액이 50달러 이상인 경우
result = order_id_tot[order_id_tot["item_price"] >= 50]
result

len(result)
list(result.index)

#1. 50달러 이상인 주문정보를 chipo_50에 저장하기
#chipo["order_id"].isin(result.index)은 
#chipo 데이터프레임의 order_id 열,컬럼에서 result.index와 일치하는 값이 있는 행을 찾아 추출
chipo_50 = chipo.loc[chipo["order_id"].isin(result.index)]
chipo_50
chipo_50.info()

#2. 50달러 이상인 주문정보를 출력하기
chipo_51 = chipo.groupby("order_id").\\
    filter(lambda x : sum(x["item_price"]) >= 50)
chipo_51.info()

#1과 #2의 결과 값은 동일하다.