일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 에이블스쿨
- httr
- KT 에이블스쿨
- 웹크롤링
- dx
- 기계학습
- 빅분기
- 시계열
- 에트리 인턴
- r
- ggplot2
- python
- 하계인턴
- hadoop
- SQL
- kaggle
- 에이블러
- 하둡
- kt aivle school
- ML
- SQLD
- 프로그래머스
- KT AIVLE
- 서평
- 소셜네트워크분석
- 빅데이터분석기사
- 다변량분석
- 시각화
- Eda
- matplot
- 머신러닝
- arima
- ETRI
- 가나다영
- cnn
- 한국전자통신연구원
- 한국전자통신연구원 인턴
- Ai
- 지도학습
- 딥러닝
Archives
- Today
- Total
소품집
[Kaggle] 영업사원 통장 입금 내역 시각화 본문
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/
2주전 캐글코리아 오픈 채팅방에서 재현님이 올려주신!
데이터와 약간의 전처리 그리고 시각화 과정을 따라 쳐보면서 익혀보았습니다.
한 달 안했다고 이렇게 다...🔥 까먹다니요?
속도 상관없다 치고 까먹으면 구글링 하면 되지만 좀 심하게 다 까먹었다 ㅎㅎㅎ
자료 공유해주신 재현님 감사합니다. 🙇🏻♀️
728x90
'AI' 카테고리의 다른 글
[DL] 배치(batch)와 에포크(epoch), 반복(iteration) (0) | 2021.09.30 |
---|---|
[DL] 퍼셉트론, 인공 신경망 기본 (0) | 2021.09.28 |
[python] pandas 패키지 모음 (0) | 2020.10.16 |
[Dacon] 심리 성향 예측 AutoML 따라하기 (0) | 2020.10.15 |
[Kaggle] 도로교통공단 기초 카운트 시각화 (0) | 2020.09.20 |
Comments