ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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()
Designed by Tistory.