-
KT AIVLE School DX트랙 2주차-DF종합 실습KT_Aivle_School/Python 2024. 3. 10. 23:45
01. 판매 데이터 전처리
판다스(Pandas) 라이브러리를 활용하여 데이터를 전처리하는 과정입니다. 이번 실습에서는 고객 데이터(
customers.csv
)와 판매 데이터(sales.csv
)를 읽어와서, 이를 병합하고 필요한 정보를 추출하여 최종적으로 가변수화까지 진행하는 전 과정을 다룹니다.1-1. 라이브러리 불러오기
import numpy as np import pandas as pd import matplotlib.pyplot as plt %config InlineBackend.figure_format = 'retina' #시각화에 한글표시 for Mac from matplotlib import rc rc('font', family='AppleGothic') plt.rcParams['axes.unicode_minus'] = False
1-2. 데이터 읽어오기
먼저, 고객 데이터와 판매 데이터를 각각 읽어옵니다.
import pandas as pd # customers 데이터 읽어오기 path1 = 'customers.csv' cust = pd.read_csv(path1) print(cust.head(2)) # sales 데이터 읽어오기 path2 = 'sales.csv' sls = pd.read_csv(path2) print(sls.head(2))
1-3. 데이터 전처리
고객별로 집계를 하고, 두 데이터를 'CustomerID'를 기준으로 병합합니다.
# 고객별 집계 cust_sls = sls[['CustomerID', 'Qty', 'Amt']] print(cust_sls.head()) # 병합 cst = pd.merge(cust, sls, on='CustomerID', how='outer') print(cst.head())
1-4. 결측치 처리
병합된 데이터에서 결측치를 확인하고 제거합니다.
# 결측치 확인 print(cst.isnull().sum()) # 결측치 제거 cst = cst.dropna() print(cst.isna().sum())
1-5. 새로운 열 추가 및 변환
등록 날짜를 기준으로 연도와 월을 추출하고, 나이와 연령대를 계산하여 새로운 열로 추가합니다.
# RegisterYear, RegisterMonth 열 추가 cst['RegisterDate'] = pd.to_datetime(cst['RegisterDate']) cst['RegisterYear'] = cst['RegisterDate'].dt.year cst['RegisterMonth'] = cst['RegisterDate'].dt.month # Age, Age2 열 추가 cst['Age'] = 2017 - cst['BirthYear'] cst['Age2'] = cst['Age'] // 10 * 10
1-6. 고객 등급 분류
구매 금액에 따라 고객의 등급을 분류합니다.
# Level 열 추가 cst['Level'] = pd.cut(cst['Amt'], bins=[-float('inf'), 30000, 100000, 300000, 600000, float('inf')], labels=['Family', 'Bronze', 'Silver', 'Gold', 'Platinum']) print(cst['Level'].value_counts())
1-7. 불필요한 열 제거 및 열 이름 변경
데이터 분석에 필요하지 않은 열을 제거하고, 열 이름을 명확하게 변경합니다.
# 불필요한 열 제거 del_cols = ['RegisterDate', 'Address', 'BirthYear', 'Addr2'] cst.drop(del_cols, axis=1, inplace=True) # 열 이름 변경: Age2 --> Age cst = cst.rename(columns={'Age2': 'Age'}) print(cst.head())
1-8. 가변수화
모델링을 위해 범주형 변수를 가변수로 변환합니다.
# 가변수화 dumm_cols = ['Gender', 'Age', 'Level'] cst = pd.get_dummies(cst, columns=dumm_cols, dtype=int)
02. 서울시 인구 변화 데이터 전처리
서울시의 인구 변화는 도시의 성장, 축소, 그리고 사회적, 경제적 변화를 이해하는 데 있어 중요한 지표 중 하나입니다. 본 포스팅에서는 서울시의 인구 데이터를 분석하여 인구 변화의 주요 특징을 탐색해보겠습니다. 이 분석을 통해 우리는 서울시 인구의 성별 분포, 연령대 분포, 그리고 가구 형태의 변화 등을 살펴볼 수 있습니다.
2-1. 데이터 준비
이번 분석에 사용된 데이터는 서울시의 연도별 인구 현황을 나타내는 세 개의 CSV 파일(
seoul_pop_h01.csv
,seoul_pop_h02.csv
,seoul_pop_h03.csv
)에서 가져왔습니다. 각 파일은 서울시의 연도별 인구 현황과 관련된 다양한 변수들을 포함하고 있습니다.2-2. 데이터 읽어오기
다음으로, 데이터를 읽어들이고 각 파일의 첫 두 행을 출력하여 데이터의 구조를 확인합니다.
path1 = 'seoul_pop_h01.csv' pop01 = pd.read_csv(path1) print(pop01.head(2)) path2 = 'seoul_pop_h02.csv' pop02 = pd.read_csv(path2) print(pop02.head(2)) path3 = 'seoul_pop_h03.csv' pop03 = pd.read_csv(path3) print(pop03.head(2))
2-3. 데이터 전처리
각 파일에서 연도별 데이터의 최댓값과 최솟값을 확인하고, 결측치와 열 정보를 확인합니다.
# year 최댓값, 최솟값 확인 print(pop01['year'].min()) print(pop01['year'].max()) print('====') print(pop02['year'].min()) print(pop02['year'].max()) print('====') print(pop03['year'].min()) print(pop03['year'].max()) # 결측치 확인 print(pop01.isnull().sum()) print('====') print(pop02.isnull().sum()) print('====') print(pop03.isnull().sum()) # 열 정보 확인 print(pop01.info()) print('====') print(pop02.info()) print('====') print(pop03.info())
다음으로, 세 개의 데이터프레임을
year
열을 기준으로 합치고, 결측치를 제거합니다.# 데이터프레임 조인 및 결측치 제거 # merge()는 한번에 두 프레임만 가능, 2회 시행 pop = pd.merge(pop01, pop02, on='year', how='outer') pop = pd.merge(pop, pop03, on='year', how='outer') # 결측치 제거 pop = pop.dropna() pop.dropna().sum()
데이터프레임에 새로운 열을 추가하여 한국인 총 인구(
k_total
), 외국인 총 인구(f_total
), 남성 총 인구(male
), 여성 총 인구(female
), 그리고 전체 인구(total
)를 계산합니다.# 열 추가 pop['k_total'] = pop['k_male'] + pop['k_female'] pop['f_total'] = pop['f_male'] + pop['f_female'] pop['male'] = pop['k_male'] + pop['f_male'] pop['female'] = pop['k_female'] + pop['f_female'] pop['total'] = pop['k_total'] + pop['f_total']
열의 순서를 조정하고, 인덱스를 초기화하여 데이터프레임의 최종 형태를 정리합니다.
# 열 순서 변경 및 인덱스 초기화 pop = pop[['year', 'household', 'total', 'male', 'female', 'k_total', 'k_male', 'k_female', 'f_total', 'f_male', 'f_female','older_65']] pop = pop.reset_index(drop=True) pop.head()
2-4. 데이터 시각화
마지막 단계로, 서울시의 인구 변화를 시각화합니다. 전체 인구 변화, 남녀 인구 변화, 그리고 65세 이상 인구 변화를 선 그래프로 표시하여 변화 추이를 살펴봅니다.
# 전체 인구 변화 plt.plot(pop['year'], pop['total']) # 남녀 인구 변화 plt.plot(pop['year'], pop[['male', 'female']]) # 65세 이상 변화 plt.plot(pop['year'], pop['older_65']) plt.legend(['전체 인구', '남성 인구', '여성 인구', '65세 이상']) plt.title('서울시 인구 변화 추이') plt.xlabel('년도') plt.ylabel('인구 수') plt.show()
'KT_Aivle_School > Python' 카테고리의 다른 글
KT AIVLE School DX트랙 3주차-이변량 분석 (1) 2024.03.24 KT AIVLE School DX트랙 3주차-단변량 분석 (0) 2024.03.24 KT AIVLE School DX트랙 2주차-numpy, pandas (1) 2024.02.29 KT AIVLE School DX트랙 2주차-이메일 보내기 (0) 2024.02.28 KT AIVLE School DX트랙 2주차-Excel I/O (0) 2024.02.28