본문 바로가기

데이터 분석/Python - 정리하자

불필요한 컬럼 정리 해보자

반응형

**해당 데이터는 제가 학원 강의를 수료하며 받은 데이터이며 원본 데이터는 기업으로부터 제공받은 데이터라서 공유할 수 없습니다.
**본문은 공부를 하며 과정을 이해하며 생각하기 위함이니 참고 해주시면 감사드리겠습니다.

## Environment : Anaconda-navigator
## Programming Language : Python 3
## Import Pandas
## import seaborn as sns
## import matplotlib as mpl
## import matplotlib pyplot as plt
## Data provided by DS school & Origin data from Kmong.
## Kmong is a company that has a dream as below.
Kmong은 "비합리적인 서비스 시장을 정보기술로 혁신하여 새로운 일자리를 만들고 사람들이 행복하게 일하는 세상을 만든다."는 미션을 가지고 있는 프리랜서 마켓 플랫폼입니다.
Kmong팀은 디자인, 마케팅, IT&개발, 컨텐츠 제작, 통번역 등 다양한 서비스 카테고리를 기반으로 직업과 직장의 경계를 허물며 사람들이 스스로 경제 주체가 되어 행복하게 일하는 세상을 만들고 있습니다.

Target

  1. 데이터를 불러오기 및 전반적인 정보 확인
  2. 불러온 데이터들을 전처리
  3. 데이터들 목적에 맞게 병합

이전 글들에서 목적에 맞게 새로 생성했던 컬럼들이 있습니다.
이번 글에서는 기존에 활용했던 컬럼을 지우고 아래 조건에 맞게 새로 생성한 컬럼과 필요한 컬럼들을 활용해 보도록 하겠습니다.

osversion - 이제 이 컬럼을 버린 뒤 osversion(number)을 사용할 것입니다.
devicemanufacturer - 이제 이 컬럼을 버린 뒤 device_clean을 사용할 것입니다.
canonicaldeviceuuid - 이제 이 컬럼을 버린 뒤 userid를 사용할 것입니다.
channel - 이제 이 컬럼을 버린 뒤 channel(clean)을 사용할 것입니다.
event_rank - 이 컬럼은 애초부터 사용할 필요가 없기 때문에 제거해줘도 됩니다.

우선 컬럼명들을 확인해봅니다.

raw_log_data.columns

방법이 크게 두가지가 있을것으로 보입니다.
가지고 있는 컬럼들만 리스트업해서 사용하거나 필요없는 컬럼들을 지우거나.
저는 불필요한 컬럼들을 삭제하는 것으로 진행하겠습니다.

# 위에서 명시한 필요하지 않은 컬럼들을 전부 담은 drop_columns라는 이름의 리스트를 생성합니다
drop_columns = ["osversion", "devicemanufacturer",
                "canonicaldeviceuuid", "channel", "event_rank"]

# 판다스(Pandas)의 drop 함수를 활용하여 unnessery_columns에 명시한 컬럼들을 전부 버립니다
# 여기서 axis = 0 옵션을 넣으면 row를 버릴려고 시도하고, axis = 1 옵션을 넣으면 column을 버릴려고 시도합니다
# 이 결과를 copy 함수를 활용해서 사본으로 복사한 뒤 clear_log라는 이름의 새로운 변수에 할당합니다
# (이렇게 하면 clear_log 변수에 들어간 값을 고쳐도 raw_log_data 변수에 들어간 값이 바뀌지 않습니다)
clear_log = raw_log_data.drop(drop_columns, axis = 1).copy()

print(clear_log.shape)    # new_log의 행렬 사이즈를 출력합니다
print(clear_log.columns)  # new_log의 컬럼들을 출력합니다
clear_log.head()          # 상위 5개 데이터를 출력합니다

내용이 잘 반영되었습니다.

데이터를 분석할 때 컬럼명의 형식을 동일하게 유지하는 것이 중요합니다.
가령 회사 내부 데이터 팀에서 컬럼에서 두 개의 단어를 하이픈(-)으로 연결하기로 합의했다면
모든 컬럼을 하이픈으로 연결해야 하고, 언더바(_)로 연결하기로 합의했다면 모든 컬럼을 언더바로 연결해야 합니다.
그래서 현재 데이터도 아래 조건에 따라 컬럼명에 통일성을 갖춰 보겠습니다. (ex: eventcategory vs params_term) 

단어와 단어 사이는 언제나 언더바(_)로 구분합니다.
가령 하이픈(-)으로 구분하거나, 띄어쓰기를 사용하면 안 됩니다.
(ex: event_category는 허용하지만, eventcategory나 event-category, 또는 event category는 허용하지 않습니다)
컬럼명에 (clean)이라고 들어간 표현은 이제는 지워줘도 될 것 같습니다. (ex channel(clean) -> channel)

# 위에서 명시한 형식에 맞게 컬럼명을 새롭게 변경합니다
# 이를 new_columns라는 이름의 변수에 파이썬 리스트로 집어넣습니다
new_columns = ['event_category', 'is_first_activity', 'app_package_name', 'app_version',
               'device_type', 'source_type', 'params_campaign', 'params_medium',
               'params_term', 'in_app_event_category', 'in_app_event_label',
               'event_datetime', 'row_uuid', 'is_first_goal_activity', 'os_type',
               'os_version', 'device_manufacturer', 'user_id', 'channel',
               'event_datetime_year', 'event_datetime_month', 'event_datetime_day',
               'event_datetime_hour', 'event_datetime_minute', 'event_datetime_second',
               'view_id', 'view_action', 'view_category']


new_log.columns = new_columns  # new_log 변수에 들어간 데이터의 컬럼명을 위에 명시한대로 변경합니다
print(new_log.shape)           # new_log의 행렬 사이즈를 출력합니다
print(new_log.columns)         # new_log의 컬럼들을 출력합니다
new_log.head()                 # 상위 5개 데이터를 출력합니다

통일된 새로운 컬럼들이 잘 되었습니다. (**기존 컬럼과 새로 들어가야할 컬럼수는 동일해야 값이 잘 적용되니 참고해주세요.)

마지막은 컬럼을 용도에 맞게 잘 정렬해주도록 하겠습니다.

정렬할 때는 보통
1) 중요한 컬럼을 좌측으로, 상대적으로 중요하지 않은 컬럼을 우측으로 옮겨주고,
2) 비슷한 역할을 하는 컬럼이나 서로간에 연관되어있는 컬럼은 같은 위치로 묶어줍니다.
(**해당 정렬방식은 회사나 팀에따라 다를 수 있으니 참고해주세요.)

# 위에서 명시한 형식에 맞게 컬럼의 순서를 변경합니다
# 이를 oredered_columns라는 이름의 변수에 파이썬 리스트로 집어넣습니다
oredered_columns = ['row_uuid', 'app_package_name', 'user_id',
                    'event_datetime', 'event_datetime_year', 'event_datetime_month',
                    'event_datetime_day', 'event_datetime_hour', 'event_datetime_minute',
                    'event_datetime_second', 'device_manufacturer', 'device_type',
                    'os_type', 'os_version', 'app_version', 'event_category',
                    'view_category', 'view_id', 'view_action', 'in_app_event_category',
                    'in_app_event_label', 'source_type', 'channel', 'params_campaign',
                    'params_medium', 'params_term', 'is_first_activity',
                    'is_first_goal_activity']

# new_log 데이터에서 위에서 명시한 컬럼 순서대로 다시 컬럼을 검색합니다
# 이를 다시 new_log라는 이름의 변수에 할당합니다
new_log = new_log[oredered_columns]

print(new_log.shape)    # new_log의 행렬 사이즈를 출력합니다
print(new_log.columns)  # new_log의 컬럼들을 출력합니다
new_log.head()          # 상위 5개 데이터를 출력합니다

정렬된 컬럼으로 잘 반영되었습니다.

 

다음 페이지에서는 본 환경을 이어서 동일한 데이터를 가지고 추가적인 전처리를 진행하도록 하겠습니다.

*** 본 페이지는 본인의 공부를 위해 작성되었으며, 협찬이나 문의를 받고 기재한 내용이 아닙니다. 혹시 문의사항이 있으시거나 문제가 될 경우 연락 주시기 바랍니다.***

 

반응형