데이터 처리

데이터 로드

모듈 로딩

import json
with open("./data/data_benefits.json", "r", encoding="utf-8") as j :
    data_benefits_1 = json.load(j)
j.close()

데이터 프레임 생성

# DataFrame 껍데기 생성
columns = ["company", "card_name", "cat_name", "benefits_sum", "benefits_detail"]
df = pd.DataFrame(columns=columns)

# 새로운 인덱스를 생성하며 각 column에 필드값을 채워넣는다.
data_benefits_list = [data_benefits_1, data_benefits_2, data_benefits_3]

for data_benefits in data_benefits_list :
    for card in data_benefits :
        for cat in card["category"] :
            
            idx = len(df)   # 맨 마지막 인덱스에 데이터를 넣기위한 변수

            df.loc[idx, "company"] = card["bank"]          # 카드사
            df.loc[idx, "card_name"] = card["name"]        # 카드 이름
            df.loc[idx, "annual_dom"] = card["annual_dom"] # 연회비 국내용
            df.loc[idx, "annual_for"] = card["annual_for"] # 연회비 해외겸용
            df.loc[idx, "last_usage"] = card["last_usage"] # 전월 사용 실적

            df.loc[idx, "cat_name"] = cat["name"]          # 소비 분야 이름
            df.loc[idx, "benefits_sum"] = cat["summary"]   # 해당 소비분야의 혜택 요약본
            df.loc[idx, "benefits_detail"] = cat["detail"] # 해당 소비분야의 혜택 전문

전처리

결측치 NA처리

df = df.replace("", np.nan) # 원래 결측치는 공백문자였음.

동일이름의 카드 처리

# 해당하는 카드 확인
data_benefits_list = [data_benefits_1, data_benefits_2, data_benefits_3]

cards_list = []

for data_benefits in data_benefits_list :
    for card in data_benefits :
        cards_list.append(card["name"])

from collections import Counter
cards_count = Counter(cards_list)
cards_count = sorted(cards_count.items(), key = lambda x : x[1], reverse=True)
cards_count[:5]

# 결과
[('카카오페이 체크카드', 3),
('알뜰교통카드', 3),
('롯데체크카드', 2),
('톡톡D 카드', 1),
('탄탄대로 올쇼핑 티타늄카드', 1)]
#
def rename(x) :
    if x["card_name"] == "카카오페이 체크카드" :
        if x["company"] == "IBK기업은행" :
            return "카카오페이 체크카드 (IBK기업은행)"
        elif x["company"] == "하나카드" :
            return "카카오페이 체크카드 (하나카드)"
        elif x["company"] == "우리카드" :
            return "카카오페이 체크카드 (우리카드)"

    elif x["card_name"] == "알뜰교통카드" :
        if x["company"] == "신한카드" :
            return "알뜰교통카드 (신한카드)"
        elif x["company"] == "하나카드" :
            return "알뜰교통카드 (하나카드)"
        elif x["company"] == "우리카드" :
            return "알뜰교통카드 (우리카드)"

    elif x["card_name"] == "롯데체크카드" :
        if x["annual_for"] == "없음" :
            return "롯데체크카드 1"
        else :
            return "롯데체크카드 2"
    else :
        return x["card_name"]

df["card_name"] = df.apply(rename, axis=1)

결과

정의

Leave a comment