# 데이터 출처
https://www.kaggle.com/datasets/khanmdsaifullahanjar/bank-user-dataset/data
Bank User Dataset
This dataset contains user behaviors contributing to their credit score
www.kaggle.com
< 프로젝트 배경 >
고객의 금융데이터를 탐색하여, 타 부서에게 서비스 현황을 볼 수 있게 해주세요.
우리의 서비스가 앞으로 어떠한 방향으로 나아갈 지 확인할 수 있었으면 좋겠어요.
< 주제 >
은행 고객데이터에 대한 EDA 진행, 서비스 현황 확인 및 개선점 제시 로 생각해주세요.
주어진 데이터를 활용하여 EDA 를 진행하여 아래 항목에 대한 확인이 가능하면 더더욱 좋겠죠?
1. 서비스의 현 상태 확인
2. 이슈사항 확인
3. 고객 세그먼트화(특정 기준에 따라 유저를 나눔)
4. 인사이트 제공
< 프로젝트 진행 과정 >
1. 수집 및 전처리
2. 데이터 분석 및 시각화
3. 결론 및 인사이트
kaggle에서 데이터를 다운받으면 결측값이 섞여있다
그 때문에 SQL에서 csv를 불러오는 과정에서 오류가 발생한다
< 컬럼별 소개 >
ID
|
고객번호에 대한 월별 고유ID(유니크값)
|
Customer_ID
|
고객번호
|
Month
|
월
|
Age
|
나이
|
Occupation
|
직업
|
Annual_Income
|
연간 소득
|
Num_Bank_Accounts
|
보유 계좌 갯수
|
Num_Credit_Card
|
보유 카드 갯수
|
Interest_Rate
|
이자율
|
Num_of_Loan
|
대출 건수
|
Type_of_Loan
|
대출 종류
|
Num_of_Delayed_Payment
|
대출 마감 지연 건수
|
Credit_Mix
|
신용도
|
Outstanding_Debt
|
미지불 채무
|
Credit_Utilization_Ratio
|
신용 활용율
|
Credit_History_Age
|
신용 기간(계좌 오픈 후 얼마나 유지되고 있는지) https://blog.naver.com/churan/222143252002
|
Payment_of_Min_Amount
|
카드 최소 결제금액
|
Total_EMI_per_month
|
월 할부금 총액
|
Amount_invested_monthly
|
월 투자금 총액
|
Payment_Behaviour
|
결제(투자) 성향
|
Monthly_Balance
|
월간 잔액
|
< 전처리 과정 진행 >
< 1. 데이터 불러오기 >
import pandas as pd
root = '/content/drive/MyDrive/스파르타 코딩클럽 데이터분석/Python 10조 은행 팀프로젝트'
file_address = root + '/Bank Data.csv'
bank = pd.read_csv(file_address, low_memory=False)
< 2. 불필요한 컬럼 삭제하기 >
불필요한 컬럼의 기준은 컬럼 자체가 데이터 분석으로서의 의미있는 값을 도출하기 힘들다고 판단될때 선택한다
또는 해석하기 어려운 난해한 값들이 많을 때도 선택될 수 있다
# 1. 필요한 컬럼만 선택 (총 27개 중 22개 사용)
bank = bank.drop(['Name','SSN','Monthly_Inhand_Salary','Changed_Credit_Limit',
'Num_Credit_Inquiries'], axis = 1)
< 3. 데이터 전처리 >
- 타입 바꿔주기
- 이상값 제거
다음의 밑줄친 부분의 컬럼을 보면 int 형 또는 float형이어야 하지만 캐글에서 데이터를 다운받고 데이터 형식을 확인했을떄 문자열 형식인 object형으로 되어있다
int형 또는 float형이 문자열 형식으로 되어있다는 뜻은 결측값이 섞여있다는 뜻이다
따라서 결측값을 모두 제거 후 int64형 또는 float64형으로 바꿔줘야 한다
원래 처음부터 int형 또는 float형으로 되어 있었다면 OK!
import numpy as np
import re
## AGE
for i, age in enumerate(bank['Age']):
if not age.isdigit():
bank.at[i, 'Age'] = re.sub(r'[^0-9]', '', age)
if bank.at[i, 'Age'] == '':
bank.at[i, 'Age'] = np.nan
bank['Age'] = bank['Age'].fillna(0)
bank['Age'] = bank['Age'].astype('int64')
bank[bank['Age'] >= 100].shape[0]
## 100살 이상인 사람의 수 : 1401 (이상치..ㅎ)
먼저 함수를 설명하자면 int형으로 바꿀때
1) 0~9를 제외한 어떠한 기호가 있을때 그 기호를 없애고
2) 빈칸을 int형으로 바꾸면 오류나므로 빈칸이라면 np.nan라는 결측값을 넣는다
그 후 모든 결측값을 0으로 대체한 후 형을 바꿔준다
여기서는 0으로 대체하지만 평균값 등으로 대체할 수도 있다
나이 값이 100이 넘는 이상치 값들을 0으로 대체하였다
bank.loc[bank['Age'] >= 100, 'Age'] = 0
이어서 'Annual_Income' 또한 int형으로 바꿔준다
for i,value in enumerate(bank['Annual_Income']):
if not value.isdigit():
bank.at[i,'Annual_Income'] = re.sub(r'[^0-9]', '', value)
if bank.at[i,'Annual_Income'] == '':
bank.at[i,'Annual_Income'] = np.nan
bank['Annual_Income'] = bank['Annual_Income'].fillna(0)
bank['Annual_Income'] = bank['Annual_Income'].astype('int64')
[ 결과 확인 ]
그런데 이렇게 동일한 함수를 일일히 반복하면 너무 번거롭지 않는가?
그래서 함수를 만들어서 데이터와 컬럼명을 입력하면 적용 가능하게 하였다
# 정수형으로 만들기
import re
def clean_code_int(data, col):
for i,x in enumerate(data[col]):
x = str(x)
if not x.isdigit():
data.at[i, col] = re.sub(r'[^0-9]', '', x)
if data.at[i, col] == '':
data.at[i, col] = np.nan
data[col] = data[col].fillna(0)
data[col] = data[col].astype('int64')
# 실수형으로 만들기
import re
def clean_code_float(data, col):
for i,x in enumerate(data[col]):
x = str(x)
if not x.isdigit():
data.at[i, col] = re.sub(r'[^0-9.]', '', x)
if data.at[i, col] == '':
data.at[i, col] = np.nan
data[col] = data[col].fillna(0)
data[col] = data[col].astype('float64')
실수형으로 만들때는 '.' 실수형을 나타내는 점까지 포함, 숫자만 포함시키고 나머지를 제거한다
숫자가 아닌 기호가 있다면 제거하고
빈칸 -> 결측값으로 만들고 -> 전체적으로 결측값에 0 넣기
clean_code_int(bank, 'Num_of_Loan')
bank.info()
한번 확인해보자
bank['Num_of_Loan'].tail()
이상값 갯수 확인하기
bank[bank['Num_of_Loan']>=30].shape[0]
이상값을 임의로 0으로 대체하였다
다른 컬럼들도 이와 같이 진행한다
# 함수 진행 컬럼들
Age
Annual_Income
Num_of_Loan
Num_of_Delayed_Payment int
Outstanding_Debt
Amount_invested_monthly
Monthly_Balance
'Project⚡️ > Team Project' 카테고리의 다른 글
[Pandas] 은행 고객데이터를 이용한 서비스 분석 회고록2 (0) | 2024.05.27 |
---|---|
[Pandas] 은행 고객데이터를 이용한 서비스 분석 회고록 (0) | 2024.05.26 |
[SQL] 서울시 내에 있는 따릉이 데이터 SQL (0) | 2024.04.16 |
[팀프로젝트] sql에 csv 데이터 넣기 (0) | 2024.04.16 |
[SQL] mysql workbench에서 csv 데이터 import 하는 법 - 빠르게 넣기 (0) | 2024.04.16 |