공기업의 정보를 담고 있는 data를 이용해, 주무기관 별 주요기능 및 역할을 wordcloud로 시각화한다.
컬럼은 각각 '기관명', '기관소개', '주무기관', '설립근거', '주요기능및역할', '기관연혁', '경영목표및전략', '기관장', '소재지'
job_info.columns = ['기관명', '기관소개', '주무기관', '설립근거', '주요기능및역할', '기관연혁', '경영목표및전략', '기관장', '소재지']
아래 코드를 사용하여 '기관소개', '주요기능및역할', '기관연혁', '경영목표및전략'에서 불용어를 제거하고, 명사만 추출한 후 리스트로 저장해주었다.
stopword 처리
import re
def clean_str(text):
pattern = '([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)' # E-mail제거
text = re.sub(pattern=pattern, repl='', string=text)
pattern = '(http|ftp|https)://(?:[-\w.]|(?:%[\da-fA-F]{2}))+' # URL제거
text = re.sub(pattern=pattern, repl='', string=text)
pattern = '([ㄱ-ㅎㅏ-ㅣ]+)' # 한글 자음, 모음 제거
text = re.sub(pattern=pattern, repl='', string=text)
pattern = '<[^>]*>' # HTML 태그 제거
text = re.sub(pattern=pattern, repl='', string=text)
pattern = 'ㅇ○o' #
text = re.sub(pattern=pattern, repl='', string=text)
pattern = 'o' #
text = re.sub(pattern=pattern, repl='', string=text)
pattern = '[^\w\s\n]' # 특수기호제거
text = re.sub(pattern=pattern, repl='', string=text)
text = re.sub('[-=+,#/\?:^$@*\"※~&%ㆍ!』\\‘|\[\]\<\>`\'》]','', string=text)
text = re.sub('\n', ' ', string=text)
return text
명사만 추출(noun)
#텍스트 데이터를 리스트로 변환
Data_list_2=job_info.주요기능및역할.values.tolist()
#명사만 추출한 후 리스트로 저장
data_word_2=[]
for i in range(len(Data_list_2)):
try:
data_word_2.append(okt.nouns(Data_list_2[i]))
except Exception as e:
continue
WordCloud 시각화를 위해 '주요기능및역할'에 리스트로 저장되어있는 데이터를 1NF로 정규화해주었다.
1NF 정규화
#정규화 결과 p_paper
p_paper = pd.DataFrame(columns=['기관명', '기관소개', '주무기관', '주요기능및역할', '기관연혁', '경영목표및전략', '소재지', '시군구'])
rows = 0
#normalize to 1NF
for index, row in job_info.iterrows():
for token in row['주요기능및역할']:
p_paper.loc[rows]=[row['기관명'], row['기관소개'], row['주무기관'], token, row['기관연혁'], row['경영목표및전략'], row['소재지'], row['시군구']]
rows +=1
index인 기관명을 countd하여 다음과 같이 필터를 설정해주었다.
(동작은 무시 가능)
색을 변경해준 후 완성해주었다.
WordCloud가 각 기관의 정보를 제대로 반영하고 있는지 파악하기 위해, 주무기관 별 결과를 확인해보았다.
'근로자', '협력', '직업', '고용'등의 기업 및 구직관련 키워드가 나타나는 것을 확인할 수 있다.
'성과', '연구원', '사업', '정책'등의 행정의 지휘·감독, 정책 조정에 관련된 키워드가 나타나는 것을 확인할 수 있다.