본문 바로가기
Programming/python

파이썬 python drop, rename, isin 함수로 데이터 정제하기 -1

by 조창대 2021. 7. 19.
반응형

서울일자리센터 인재정보 직종별, 지역별 목록.csv
0.27MB

 

위 csv 파일은 '서울 열린 데이터 광장'에서 받은 7월7일자 인재정보이다. 구직을 원하는 사람들이 서울일자리센터에 올린 인재정보들을 데이터베이스화 해놓은 것을 받았다.

 

이 데이터셋에서 노년 구직자들의 희망직종은 어떤 것들이 있는지 알아보고 파이차트로 그려보자.

 

먼저 대한민국에선 65세 이상을 노인으로 정하고 있어서 이번 분석에서도 노인의 조작적 정의를 65세 이상으로 설정하겠다.

 

 

import pandas as pd
import matplotlib.pyplot as plt

df=pd.read_csv('data/서울일자리센터 인재정보 직종별, 지역별 목록.csv',encoding='cp949')
df

 

df를 실행하면 이런 데이터프레임이 나타난다. 총 1356개의 row, 23개의 column이 있다. 

df를 보면 '검색키워드1' ~ '검색키워드5' 컬럼의 값들이 모두 결측값으로 보인다. 

 

분석할 땐 '나이' 컬럼과 지금은 가려진 '희망직종공통코드명' 컬럼만 사용할 거라 검색키워드 컬럼들이 있으나 마나 상관없지만 그래도 보기 안좋으니 지워봤다.

 

 

df.drop(df.loc[:,'검색키워드1':'검색키워드5'],axis=1,inplace=True)
df

이전 포스팅들에서 숱하게 써온 drop 함수를 이용해서 검색 키워드 컬럼들을 지워보니

컬럼이 많아서 보이지 않던 '희망직종공통코드명' 컬럼도 보이고 데이터프레임이 좀 더 깔끔해졌다.

 

 

그런데 '희망직종공통코드명'도 너무 길게 느껴져서 '희망직종명'으로 컬럼 이름을 변경하려고 한다.

df.rename(columns={'희망직종공통코드명':'희망직종명'},inplace=True)

그럴 땐 rename 함수를 써주면 되는데, 

rename 함수는 칼럼 갯수 맞춰 줄 필요 없이 특정한 칼럼 이름만 개별적으로 바꿀 수 있다.

df.rename(columns={'기존이름' : '바꿀이름'},inplace=True) 구성이고, 인덱스 이름을 바꾸고 싶으면 columns 자리에 index를 넣어주면 된다.

 


이렇게 데이터 정제 과정을 거치고 보기 편해진 데이터셋을 필터링해서 65세 이상 구직자들만 모아보자.

 

condition=df['나이']>=65
df[condition]

condition 변수에 '나이' 컬럼 값이 65 이상인 구직자들만 추출하는 조건을 걸고 df를 씌워주니 65세 이상 구직자 417명의 데이터셋만 걸러졌다.

 

 

그런데 '희망직종명' 컬럼을 보면 그냥 청소원도 있고 건물청소원(공공건물아파트사무실병원상가공장 등) 도 있다. 이들을 같은 직종명으로 묶어주면 분석하는 데 편리하고 유의미한 결과를 얻을 수 있다. 모조리 묶어준다.

boolean1=df['희망직종명']=='청소원'
boolean2=df['희망직종명']=='환경 미화원'
boolean3=df['희망직종명']=='건물 청소원(공공건물아파트사무실병원상가공장 등)'

df.loc[boolean1|boolean2|boolean3,'희망직종명']='건물 청소원'

| 표시는 or의 의미이다. boolean1 2 3은 true, false 값으로 리턴돼서 df.loc의 index 자리에 조건들을 or 로 이어주면 '희망직종명'의 '청소원', '환경 미화원', '건물청소원(공공건물아파트사무실병원상가공장 등)' 값들이 모두 '건물 청소원'으로 변경된다.

 

list=['건물 경비원(청사학교병원상가빌딩공장 등)','아파트?빌라 경비원']
df.loc[df['희망직종명'].isin(list),'희망직종명']='경비원(건물 관리원)'

위의 과정을 좀 더 쉽게 수행할 수 있는 코드이다.

 

isin(list)은 list의 값들을 포함하고 있는 모든 row를 골라낼 때 주로 쓰인다.

list를 만들고 그 안에 바꾸고 싶은 값들을 넣으면 그 값을 포함한 row만 True로 리턴한다.

list 안에 있던 값들이 모두 '경비원(건물 관리원)'으로 바뀌었다.

 

 

new=df[condition]['희망직종명'].value_counts().head(5).sort_values()
new

>>>
화학/환경/에너지 분야 단순 종사원      9
주차 관리 안내원                9
경비원(건물 관리원)             65
재가 요양보호사                72
건물 청소원                 157
Name: 희망직종명, dtype: int64
>>>

df[' '].value_counts() 는 컬럼의 각 요소들이 몇 번씩 나오는지 알려준다.

그 중 상위권 5개의 값(head(5)) 을 작은 것부터 쭉 정렬(sort_values()) 했다.

이 value_counts()에 따라 리턴된 값으로 파이차트를 만들면 끄읕.

 

 

**전체보기**

import pandas as pd
import matplotlib.pyplot as plt

df=pd.read_csv('data/서울일자리센터 인재정보 직종별, 지역별 목록.csv',encoding='cp949')
df.drop(df.loc[:,'검색키워드1':'검색키워드5'],axis=1,inplace=True)
df.rename(columns={'희망직종공통코드명':'희망직종명'},inplace=True)

condition=df['나이']>=65

boolean1=df['희망직종명']=='청소원'
boolean2=df['희망직종명']=='환경 미화원'
boolean3=df['희망직종명']=='건물 청소원(공공건물아파트사무실병원상가공장 등)'
df.loc[boolean1|boolean2|boolean3,'희망직종명']='건물 청소원'

list=['건물 경비원(청사학교병원상가빌딩공장 등)','아파트?빌라 경비원']
df.loc[df['희망직종명'].isin(list),'희망직종명']='경비원(건물 관리원)'

new=df[condition]['희망직종명'].value_counts().head(5).sort_values()
new

 

 


 

이렇게 데이터를 수집하고 정제해서 분석에 편하도록 한 다음

65세 이상의 데이터셋만 추출하고 그들의 희망직종명 순위까지 알아보았다.

 

파이차트를 만들 때도 공부할 것들이 많으니 다음 게시물에서 계속 :>...

반응형