반응형
1. Bigquery 연결하기
2. 데이터 전처리
1. jd를 SPLIT함수로 3가지 칼럼만 추출해 활용해보자
- jd(job description) : 회사소개, 주요업무, 자격요건, 우대사항, 혜택 및 복지
- SPLIT(칼럼, '쪼갤 기준이 될 단어')[safe_offset(0)] (0 : 기준 단어 앞까지 자르기 / 1 : 기준 단어 뒤부터 자르기)
2. GENERATE_ARRAY함수를 활용해 ARRAY를 만들자
- annual_from(최소 연차), annual_to(최대 연차)만으로는 그 사이 연차까지 알 수가 없다.
- GENERATE_ARRAY(annual_from, annual_to, 1)
SELECT
position_id
, position
, SPLIT(SPLIT(jd, '주요업무')[safe_offset(1)], '자격요건')[safe_offset(0)] AS responsibilities
, 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 tager_annual
FROM `vibrant-magpie-379810.wanted_data_challenge.wanted_position` LIMIT 1000
3. 전처리 완료한 테이블을 Colab으로 넘기기
4. WordCloud 생성하기
① 테이블 톺아보기
results.describe()
② 패키지 및 라이브러리 설치
!pip install krwordrank #wordcloud 형성을 위한 패키지 설치
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['requirements'] = df['requirements'].replace(np.nan, '없음')
df['preference'] = df['preference'].replace(np.nan, '없음')
df.head(5) #가장 상단의 5줄만 보여줘
③ 주요업무, 자격요건, 혜택 및 복지 칼럼의 값들을 리스트로 변환해 한 뭉탱이로 만들기
works = df["responsibilities"].values.tolist() #주요업무의 값들을 리스트로 변화해 한 뭉탱이로 만들어준다.
print(works)
req = df['requirements'].values.tolist() #자격요건 리스트화해서 한 뭉탱이
print(req)
pre = df['preference'].values.tolist() #우대사항 리스트화해서 한 뭉탱이
print(pre)
④ KRWordRank 실행하기
works가 들어간 곳을 req, pre로 바꿔넣기
req's stopwords =
{'분석','데이터', '위한', '대한', '경험', '등)','이상','관련','활용','of','있으신', '있는','이해','등을','and','in'}
pre's stopwords =
{'사용','경험','데이터','등)','등의', 'Data', '분석', '있으', '또는', '대한',' FIt','관련','활용','of','있으신', '있는','이해','등을'}
wordrank_extractor = KRWordRank(
min_count = 3, #단어 최소 출현 빈도수
max_length = 15, # 단어의 character 길이의 최대 값
verbose = True
)
beta = 0.85 # PageRank의 decaying factor beta
max_iter = 10
keywords, rank, graph = wordrank_extractor.extract(works, beta, max_iter) #함수 실행 시 키워드, 랭크, 그래프를 output으로 뱉어줍니다
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개
for word, r in sorted(passwords.items(), key=lambda x:x[1], reverse=True)[:30] : #자주 반복되는 단어 top 30개 추출해서 프린트까지
print((word,r))
⑤ 한글 폰트 지원 불가로 인한 추가 작성 코드
#한글폰트 지원이 되지 않기 때문에 별도로 이걸 깔아줘야한다.
import matplotlib as mpl
import matplotlib.pyplot as plt
%config InlineBackend.figure_format = 'retina'
!apt -qq -y install fonts-nanum
import matplotlib.font_manager as fm
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic')
#mpl.font_manager._rebuild()
#[출처] [Google Colab] 구글 코랩 한글 적용 문제 대응, Matplotlib|작성자 넬티아
⑥ WordCloud 실행
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
wc = WordCloud(font_path = fontpath, width = 1000, height = 1000, scale = 3.0, max_font_size = 250)
gen = wc.generate_from_frequencies(passwords)
plt.figure()
plt.imshow(gen)
⑦ 결과
5. 깨달은 점
- 쪼개기 함수 : SPLIT(칼럼, '쪼갤 기준이 될 단어')[safe_offset(0)] (0 : 기준 단어 앞까지 / 1 : 기준 단어 뒤부터)
- array 만들기 함수 : GENERATE_ARRAY(annual_from, annual_to, 1)
- 결과(모든 경력의 데이터 분석가)
- 주요업무 : 서비스, 비즈니스, 다양한, 기반, 지표, 개선, 결과, 가설, 도출
- 자격요건 : Cohort, 서비스, SQL, 사용, 다양한, 문제, 업무, Python, A/B, 능력, 커뮤니케이션
- 우대사항 : 통계, Google, 서비스, Tableau, 시각화, Spark
반응형