분석가 공고를 직접 전처리해보고, 전처리한 다음에 데이터 가지고 시각화까지하고 분석가로써 갖춰야할 것을 알게 될 것
빅쿼리에 csv 파일 가져오기(오류로, 헤드부분 삭제하고 가져왔음)
데이터 전처리
SELECT
position_id # 포지션 id
, position # 포지션명
, SPLIT(SPLIT(jd, '주요업무')[safe_offset(1)], '자격요건')[safe_offset(0)] AS responsibilities # jd 안에서 주요업무라는 구분자를 기준으로 분할한 뒤, 그 결과 중에서 인덱스 1에 해당하는 문자열을 선택함(뒤에 것) 그리고 선택된 문자열을 다시 자격요건이라는 구분자를 기준으로 분할 한 뒤, 그 결과중에서 인덱스 0에 해당하는 문자열을 선택함 => 주요업무
, SPLIT(SPLIT(SPLIT(jd, '주요업무')[safe_offset(1)], '자격요건')[safe_offset(1)], '우대사항')[safe_offset(0)] AS requirements # 주요업무 기준으로 잘라 밑에 것 중 자격요건 기준으로 또 자르고 그 밑에 것 중 우대사항 기준으로 잘라서 그 위에 것인 자격요건을 선택
, SPLIT(SPLIT(SPLIT(SPLIT(jd, '주요업무')[safe_offset(1)], '자격요건')[safe_offset(1)], '우대사항')[safe_offset(1)], '혜택 및 복지')[safe_offset(0)] AS preference # 주요업무 기준으로 자르고 밑에꺼, 자격요건 기준으로 자르고 밑에꺼, 우대사항 기준으로 자르고 밑에꺼 혜택 및 복지 기준으로 자르고 위에꺼 해서 우대사항 추출
, annual_from # 연차 시작
, annual_to # 연차 끝
, GENERATE_ARRAY(annual_from, annual_to, 1) AS target_annual
FROM `enduring-rush-379810.wanted_data.wanted_position`
# annual_from에서 annual_to까지 1씩 증가하는 값을 갖는 배열을 생성함
#position_id | position | responsibilities | requirements | preference | annual_from | annual_to | target_annual
워드 클라우드 형성을 위한 패키지 설치
!pip install krwordrank # word cloud 형성을 위한 패키지 설치
pandas import 등 여러 라이브러리 import
import pandas as pd
import matplotlib.pyplot as plt
from krwordrank.word import KRWordRank
import numpy as np
df = results.copy() # results 복사 dataframe
df['responsibilities'] = df['responsibilities'].replace(np.nan, '없음') # df['responsibilities']에서 NaN 값이 있는 경우에 이를 '없음'으로 변경하여 df['responsibilities']에 다시 할당합니다. 이렇게 함으로써, 'responsibilities' 열에서 결측값을 제거
df['requirements'] = df['requirements'].replace(np.nan, '없음')
df['preference'] = df['preference'].replace(np.nan, '없음')
df.head(5) # 가장 상단의 다섯줄만 보여줘.
df_newbie = df_newbie[~df_newbie['target_annual'].astype(str).str.contains('5|6|7|8|9')]
# 5년차부터 사실상 제외 => 'target_annual' 열(column)의 값을 문자열(str)로 변환한 후, 문자열에 '5', '6', '7', '8', '9' 중 하나라도 포함되어 있는 행(row)을 제거하는 코드로 신입에 관해 추출 가능responsibilities 값을 리스트로 변화시켜주어 한 뭉탱이로 만들어줌
texts = df["responsibilities"].values.tolist() # 주요 업무의 값들을 리스트로 변화시켜주어서 한 뭉탱이로 만들어준다 => 이유는 워드 클라우드를 생성하는 데 필요한 텍스트 데이터를 리스트 형태로 입력해야 하기 때문
print(texts)
자주 반복되는 단어 30개 추출
wordrank_extractor = KRWordRank( # KR-WordRank 알고리즘을 구현한 파이썬 라이브러리
min_count = 3, #단어 최소 출현 빈도수 (이 값 이하로 출현한 단어는 무시, 여기에서는 3번 이상 출현한 단어만으로 대상)
max_length = 15, # 단어의 character 길이의 최대 값(이 값 이상으로 긴 단어는 무시, 여기서는 15자 이하의 단어만을 대상으로함)
verbose = True # 처리과정 중 로그를 출력할지 여부를 결정하는 매개변수
)
beta = 0.85 # PageRank의 decaying factor beta, 이 값을 이용하여 각 노드(키워드) 간의 관계를 계산
max_iter = 10 # WordRank 알고리즘의 최대 반복 횟수
keywords, rank, graph = wordrank_extractor.extract(texts, beta, max_iter) # 텍스트 데이터인 texts를 kr-wordrank 알고리즘에 적용하여, 해당 텍스트에서 추출된 키워드와 각 키워드의 중요도를 계산함, 함수 실행 시 키워드, 랭크, 그래프를 output으로 뱉어줍니다.(keywords : 추출된 키워드 리스트
rank : 각 키워드의 중요도를 나타내는 랭킹 정보
graph : 추출된 키워드 간의 관계를 나타내는 그래프 정보)
stopwords = {'대한','분이면', '있습니다.','분석','데이터', '위한', 'and', '통해', '통한','있는','the','to','in','for','of'} #걸렀으면 하는 stopwords
passwords = {word:score for word, score in sorted(
keywords.items(), key=lambda x:-x[1])[:100] if not (word in stopwords)} #stopwords가 ,제외된 keywords 탑 300개 # 람다의 경우, keyword 딕셔너리의 내용을 중요도에 따라 내림차순으로 정렬, 정렬된 결과 중 상위 100개의 단어를 선택하고, 이 중에 stopword에 해당하지 않는 단어만 password 딕셔너리에 저장
for word, r in sorted(passwords.items(), key=lambda x:x[1], reverse=True)[:30] : #자주 반복되는 단어 top 30개 추출해서 프린트까지, password 딕셔너리 내용을 중요도에 따라 내림차순으로 정렬한 뒤, 상위 30개의 단어와 그 중요도를 선택함
print((word,r))
('서비스', 15.202630480085666)
('비즈니스', 12.546394528844358)
('기반', 12.48102392481802)
('다양한', 11.27943657997832)
('인사이트', 10.696588096345518)
('도출', 10.411450488218929)
('지표', 10.296794302156378)
('개선', 9.735041759623096)
...
한글폰트 지원이 되지 않아서 한글 폰트 설정을 위한 아래 코드 입력
#한글폰트 지원이 되지 않기 때문에 별도로 이걸 깔아줘야한다.
import matplotlib as mpl
import matplotlib.pyplot as plt
%config InlineBackend.figure_format = 'retina' # 그래프 이미지의 해상도를 설정합니다.
!apt -qq -y install fonts-nanum # 구글 Colab에서 Nanum 폰트를 설치합니다.
import matplotlib.font_manager as fm # 폰트 매니저를 불러옵니다.
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf' # NanumBarunGothic 폰트의 경로를 지정합니다.
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic') # 그래프에 사용되는 폰트를 NanumBarunGothic으로 설정합니다.
from wordcloud import WordCloud # 파이썬에서 wordcloud 라이브러리를 사용
from wordcloud import ImageColorGenerator
wc = WordCloud(font_path = fontpath, width= 1000, height = 1000, scale = 3.0, max_font_size=250) # WordCloud 객체를 생성합니다. 이때 font_path는 사용할 폰트의 경로, width와 height는 이미지의 크기, scale은 해상도에 대한 스케일링 비율, max_font_size는 최대 폰트 크기를 나타냅니다.
gen = wc.generate_from_frequencies(passwords) # generate_from_frequencies 메소드를 이용하여 워드 클라우드 이미지를 생성합니다. 이때 passwords는 워드 클라우드를 생성하기 위한 텍스트 데이터가 들어있는 딕셔너리
plt.figure() # 생성된 워드 클라우드 이미지를 matplotlib를 이용하여 시각화, 새로운 플롯(그림)을 생성합니다.
plt.imshow(gen) # gen 변수에 저장된 WordCloud 객체를 이미지로 변환하여 출력합니다.
EDA
, 아래 것은 찾아본 것