소품집

[Kaggle] 영업사원 통장 입금 내역 시각화 본문

AI

[Kaggle] 영업사원 통장 입금 내역 시각화

sodayeong 2021. 2. 3. 17:44
728x90

 

## 1.1. 입금 내역 데이터를 읽어오기


- 사용될 데이터 다운 받아오기
- 임의로 만들어진 데이터임! 

import numpy as np
import pandas as pd

y2020 = pd.read_excel('data/57_income.xlsx')
y2020.head(20)

- 여러 입금 내역이 섞여있는 것을 확인할 수 있다. 
    - 성과금, 컨텐츠, 결제환급, 카드, 출장과 같은 입금내역 확인.
    - A씨는 영업사원으로 근무하는 동시에 퇴근 후와 주말을 이용해 컨텐츠를 제작합니다. 
    - 본인은 회사, 그리고 투잡인 컨텐츠 제작과 관계된 내역만을 골라보자. 
 
- 회사에서는 세 가지의 수입이 있다. 
    1. 기본급: 매달 200만원. 달마다 약간의 변동이 있을 수 있음
    2. 출장비: 일비 3만원, 그리고 장소 이동 1건당 교통비 3만원
    3. 성과금: 계약 성사시 건당 1천만원
 
- 투잡에서는 두 가지의 수입이 있다. 
    1. 컨텐츠 제작비: 컨텐츠 회사와 건당 10만원의 계약을 함.
       출장이 없는 날의 60% 가량을 투자함.
    2. 2차 창작비: 드물지만 컨텐츠자 2차 창작됨. 
       1%의 확률로 출판 계약, 저작권료 등으로 건당 100만원을 받음.
        
 - 그리고 제외해야 하는 사적 입금액이 있습니다. 
     1. 카드 결제 취소액이 입금 되기도 하고
     2. 가족으로부터 자녀에게 오는 용돈이 있음
     

## 1.2. 총 입금액 확인
- 총 입금액을 확인합니다.
- 카드 환불금, 자녀에게 줄 돈이 섞여있는 금액입니다.

y2020['입금액'].sum() # 총입금액 확인

- 읽기 좋게 천 단위로 쉼표를 찍어보자. 
- format(데이터,',')를 사용하면 가능!

format(y2020['입금액'].sum(),',')

## 1.3. 소득확인 
- 일을 해서 얻은 소득만 확인해보자. 
- '적요' 열에서 기본급, 출장비, 성과급, 컨텐츠, 2차 창작비를 추출합니다. 
    1. 기본급: '우리회사' 뒤에 숫자가 붙어 입금
    2. 출장비: '출장' 뒤에 숫자가 붙어 입금
    3. 성과급: 건당 '성과급'으로 입금
    4. 컨텐츠 제작비: 회사 이름인 'oo컨텐츠'로 입금
    5. 2차 창작물: '출판 계약금', '저작권료'등으로 입금


- 숫자를 제외하고 공통으로 포함된 단어만 사용해서 추출하자. 
- 근로소득만 담은 데이터 프레임을 y2020_company로 저장.

y2020_company =  y2020.loc[y2020['적요'].str.contains('우리회사|출장|성과급|컨텐츠|출판|출연|저작권',regex=True)]
y2020_company['입금액'] = y2020_company['입금액'].astype(int)
y2020_company.head()

- 총 근로소득을 확인해보자. 

format(y2020_company['입금액'].sum(),',')

## 1.3.1. 소득원별 소득 
- 같은 명령을 사용해서 소득원별 index를 추출하자



### 1. 회사 
# 기본급

index_salary = y2020_company.loc[y2020_company['적요'].str.contains('우리회사', regex=False)].index

# 출장비
index_biztrip = y2020_company.loc[y2020_company['적요'].str.contains('출장', regex=False)].index


# 성과급
index_success = y2020_company.loc[y2020_company['적요'].str.contains('성과급', regex=False)].index


### 2. 투잡
# 컨텐츠 제작비
index_contents = y2020_company.loc[y2020_company['적요'].str.contains('컨텐츠', regex=False)].index

# 2차 창작물 
index_2nd = y2020_company.loc[y2020_company['적요'].str.contains('출판|출연|저작권', regex=False)].index



- 'type' 컬럼을 새로 만들어 정리
- groupby로 정렬하기 위해서임

y2020_company['type'] = np.nan

y2020_company.loc[index_salary, 'type'] ='기본급'
y2020_company.loc[index_biztrip, 'type'] = '출장비'
y2020_company.loc[index_success, 'type'] = '성과급'
y2020_company.loc[index_contents, 'type'] ='컨텐츠'
y2020_company.loc[index_2nd, 'type'] = '2차'

## 1.3.2. 시각화
- 소득원별 소득을 시각화로 나타내자.
- 한글 사용을 설정하고, seaborn도 사용해보자.

import matplotlib.pyplot as plt
import seaborn as sns

plt.rcParams['font.family']='NanumGothic'
plt.rcParams['axes.unicode_minus'] = False
sns.set_style("white")
sns.set_context("talk")

- plt.subplots()에 gridspec_kw를 사용하면 비대칭 subplot을 만들기 편리함

fig, axs = plt.subplots(ncols=2, figsize=(10,5), gridspec_kw={'width_ratios':[3,2],'wspace':0}, sharey=True)

fig, axs = plt.subplots(ncols=2, figsize=(10, 5), gridspec_kw={"width_ratios":[3,2], "wspace":0}, sharey=True)

def plot_income(df, idx, ax, palette="tab10", title=None):
    sns.barplot(x=idx, y="입금액", data=df.loc[idx], palette=palette, ax=ax, zorder=2)
    ax.set_xlabel(None)
    ax.set_ylabel(None)

    yticks = ax.get_yticks()
    ax.set_yticks(yticks)
    ax.set_yticklabels([])

    ax.set_facecolor("0.9")
    [ax.spines[k].set_visible(False) for k in ["left", "top", "right"]]

    ax.tick_params(axis="both", length=0)
    [ax.axhline(y, zorder=1, c="lightgray") for y in yticks];

    for i, p in enumerate(ax.patches):
        h = p.get_height()
        ax.text(i, h+2e6, format(int(h), ","), ha="center")
        
    ax.set_title(f"{title} ({format(int(df.loc[idx].sum()), ',')})")
    return ax


idx_company = ["기본급", "출장비", "성과급"]
idx_2job = ["컨텐츠", "2차"]

axs[0] = plot_income(y2020_g, idx_company, axs[0], palette="Blues_r", title="회사")
axs[1] = plot_income(y2020_g, idx_2job, axs[1], palette="Reds_r", title="투잡")
axs[1].spines["left"].set_visible(True)
axs[1].spines["left"].set_color("w")

fig.suptitle(f"2020년 총 소득: {format(int(y2020_g.sum()), ',')}원")
fig.tight_layout()

jehyunlee.github.io/2021/01/21/Python-DS-57-income/

 

Income from Two Companies (1)

수입이 불규칙한 영업사원을 가정하고, 은행계좌를 간단하게 분석합니다. 데이터프레임의 문자열 일부를 이용해 데이터를 분류합니다. 분석을 위한 데이터도 직접 만들어봅니다. 1. 입금 데이

jehyunlee.github.io

 

2주전 캐글코리아 오픈 채팅방에서 재현님이 올려주신!

데이터와 약간의 전처리 그리고 시각화 과정을 따라 쳐보면서 익혀보았습니다. 

 

한 달 안했다고 이렇게 다...🔥 까먹다니요?

속도 상관없다 치고 까먹으면 구글링 하면 되지만 좀 심하게 다 까먹었다 ㅎㅎㅎ

 

 

자료 공유해주신 재현님 감사합니다. 🙇🏻‍♀️

728x90
Comments