Skip to content

Latest commit

 

History

History
132 lines (101 loc) · 4.66 KB

211004.md

File metadata and controls

132 lines (101 loc) · 4.66 KB

Day 3

직장인을 위한 데이터분석 with 파이썬 (3일차)

관광객 데이터 분석

데이터 전처리

데이터 전처리 : 데이터를 탐색하고, 분석에 적합하도록 원하는 형태로 가공하는 것

ex) 변수별 값 이상 유무 확인, 결측값 처리, 이상치 처리, 변수 정규화, 파생변수 생성 등

이번에 진행한 데이터 전처리 과정

  1. 불러올 데이터의 형태 파악
  2. 엑셀 파일 파이썬으로 불러오기 (pd.read_excel())
  3. 데이터 탐색 (info(), describe())
  4. 기준년월 칼럼 추가
  5. 국적 데이터만 남기기 (대륙 데이터 제거)
  6. 대륙 칼럼 만들기
  7. 국적별 관광객비율(%) 살펴보기
  8. 전체 외국인 관광객 대비 국적별 관광객 비율 살펴보기

과정 함수화

def create_kto_data(yy, mm):
    # 1. 불러올 엑셀 파일 경로 지정
    file_path = './files/kto_{}{}.xlsx'.format(yy, mm)
    
    # 2. 엑셀 파일 불러오기
    df = pd.read_excel(file_path, header = 1, usecols = 'A:G', skipfooter = 4)
    
    # 3. 기준년월 칼럼 추가
    df['기준년월'] = '{}-{}'.format(yy, mm)
    
    # 4. 국적 칼럼에서 대륙 제거하고 국가만 남기기
    ignore_list = ['아시아주', '미주', '구주', '대양주', '아프리카주', '기타대륙', '교포소계'] # 제거할 대륙명 선정
    condition = (df['국적'].isin(ignore_list) == False) # 대륙 미포함 조건
    df_country = df[condition].reset_index(drop=False) # 칼럼 추가 및 인덱스 초기화
    
    # 5. 대륙 칼럼 추가
    # 대륙 칼럼 생성을 위한 목록 생성
    continents = ['아시아'] * 25 + ['아메리카'] * 5 + ['유럽'] * 23 + ['오세아니아'] * 3 + ['아프리카'] * 2 + ['기타대륙'] + ['교포']
    df_country['대륙'] = continents
    
    
    # 6. 국가별 관광객 비율 칼럼 추가
    df_country['관광객비율(%)'] = round(df_country['관광'] / df_country. * 100, 1)
    
    # 7. 전체 비율 칼럼 추가
    tourist_sum = sum(df_country['관광'])
    df_country['전체비율(%)'] = round(df_country['관광'] / tourist_sum * 100, 1)
    
    # 8. 결과 출력
    return(df_country)

통합 데이터 생성

df = pd.DataFrame()

# 패턴 분석 결과를 이중 반복문을 통해 구현
for yy in range(2010, 2021):
    for mm in range(1, 13):
        # try 이하 구문을 실행
        try:
            # 앞서 만들었던 create_kto_data 함수로 엑셀데이터를 temp로 불러옴
            temp = create_kto_data(str(yy), str(mm).zfill(2))
            
            # temp로 불러온 데이터를 df 밑으로 추가
            df = df.append(temp, ignore_index = True)
        
        # 만약 try 구문에서 에러가 발생하면 except 이후를 실행
        except:
            pass

데이터 시각화

시계열 그래프

import pandas as pd
df = pd.read_excel('./files/kto_total.xlsx')

condition = (df['국적'] == '중국')
df_filter = df[condition]

# 그래프 크기 조절
plt.figure(figsize = (12, 4))

# 그래프 내용 설정
plt.plot(df_filter['기준년월'], df_filter['관광'])

# 그래프 타이틀, x축, y축 이름 달기
plt.title('중국 국적의 관광객 추이')
plt.xlabel('기준년월')
plt.ylabel('관광객수')

# x 축 눈금 값 설정
plt.xticks(['2010-01', '2011-01', '2012-01', '2013-01', '2014-01', '2015-01', '2016-01', '2017-01', '2018-01', '2019-01', '2020-01'])

# 그래프 표현하기
plt.show()

히트맵 그래프

condition = (df['국적'] == '중국')
df_filter = df[condition]

df_pivot = df_filter.pivot_table(values = '관광',
                                index = '년도',
                                columns = '월')
# 그래프 크기 설정
plt.figure(figsize = (16, 10))

# 히트맵 그래프 그리기
sns.heatmap(df_pivot, annot = True, fmt = '.0f', cmap = 'rocket_r')

# 그래프 타이틀 달기
plt.title('중국 관광객 히트맵')

# 그래프 표현
plt.show()

이번에 사용한 데이터도 시계열 데이터라고 할 수 있을 것 같아 추가로 찾아봤다.

시계열 데이터 : 시간을 통해 순차적으로 발생한 관측치의 집합

시계열 데이터의 시계열은 반드시 고정된 시간 구간의 관측치어야 한다.

ex) 어떤 구간은 1달마다 관측했다가, 어떤 구간은 하루마다 관측하고 이러면 안된다.

변동요인

  1. Trend : 장기적으로 나타나는 변동 패턴
  2. Seasonal : 주, 월, 분기, 반기 단위 등 이미 알려진 시간의 주기로 나타나는 패턴
  3. Cyclic : 최소 2년 단위로 나타나는 고정된 기간이 아닌 장기적 변동
  4. irregular : 랜덤요소