본문 바로가기
공부/파이썬 Python

Open Skills API 이용해서 세상 모든 직무능력 불러오기(feat. requests, json)

by 혼밥맨 2021. 1. 15.
반응형

Open Skills API 이용해서 세상 모든 직무능력 불러오기(feat. requests, json)

 

Open Skills 이용해서 세상 모든 직업 불러오기(feat. requests, json) gogetem.tistory.com/110

Open Skills. 

A complete and standard data store for canonical and emerging skills, knowledge, abilities, tools, technolgies, and how they relate to jobs. Created by Work Data Initiative. http://www.dataatwork.org 

표준 및 새로운 기술, 지식, 능력, 도구, 기술 및 직무와 관련된 방법에 대한 완전하고 표준적인 데이터 저장소입니다.

 

Open Skills API; /skills

offset은 pagination을 뜻하고, limit은 한 페이지에 반환할 직무 능력(job skills)의 개수를 뜻합니다.

임의로 offset에는 1을, limit에는 500을 넣어서 try 해보겠습니다.

Open Skills API; /skills

반환하는 json data의 attribute을 보면, uuid, name, type, description, onet_element_id, normalized_skill_name이 있습니다. (이하 스킬은 직무 능력과 동일한 의미입니다)

uuid: 스킬 고유의 ID

name: 스킬의 이름

type: 스킬의 종류 (tool, hard skill, soft skill, certificate 등등)

description: 스킬 설명

onet_element_id: onet에서 제공하는 스킬 ID

normalized_skill_name: 일반화된 스킬 이름

 

Response Headers 부분에 x-total-count를 보면 총 페이지가 27086개인 것을 알 수 있습니다. 한 페이지에 최대로 반환할 수 있는 스킬의 개수가 500이니까 27086 * 500이면 13,543,000입니다... 

 

직무 능력의 개수가 정확히 13,543,000개는 아니겠지만, 약 이 정도라고 미리 생각해볼 수 있습니다.

http://api.dataatwork.org/v1/skills?offset=1&limit=500

any-api.com/dataatwork_org/dataatwork_org/console/_skills/GET

 

https://any-api.com/dataatwork_org/dataatwork_org/console/_skills/GET

 

any-api.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# Open Skills Project Web Page
# http://dataatwork.org/data/
 
# API Project Overview GitHub Page
# https://github.com/workforce-data-initiative/skills-api/wiki/API-Overview
 
# API Explanation
# http://api.dataatwork.org/v1/spec/
 
# Open Skills Research
# http://dataatwork.org/data/research/
 
# Representativeness Analysis
# http://dataatwork.org/data/representativeness/
# https://github.com/workforce-data-initiative/skills-analysis/blob/master/representativeness_analysis/Representativeness%20Analysis.ipynb
 
# Open Skills Documentation Site
# http://documentation.dataatwork.org/open-skills/
 
 
# Import Libraries
import requests
import json
import pandas as pd
import time
import multiprocessing
from openpyxl import Workbook
 
 
SKILL_COUNT=27087
 
 
def get_all_skills(count):# .csv 포맷 엑셀 파일 작성
  print("S T A R T")
  file_name = "OpenSkills_AllSkills"+str(count)+".csv"
  
  # 모든 직무 능력 json 데이터에 description이 빈칸이라서 제외
  ABC = ["A1""B1""C1""D1""E1"]
  columns = ["uuid""name""type""onet_element_id""normalized_skill_name"]
  
  write_wb = Workbook()
  write_ws = write_wb.active
 
  for (alphabet, col) in zip(ABC, columns): 
    write_ws[alphabet] = col
 
  for i in range(count, count + 67721):  
    time.sleep(0.0002)
    url = "http://api.dataatwork.org/v1/skills?offset=" + str(i) + "&limit=500"
 
    response= requests.request("GET", url)
    res_json = str(response.json())
    response = res_json.split("'}, {'")
 
    # &limit을 포함하는 json은 직무능력과 관련된 데이터가 아님
    for res in response:
      if ("&limit" in res):
        pass;
 
      # string slicing
      else:
        uuid = res[res.find("'uuid':'")+12 : res.find("'name'")-3]
        name = res[res.find("'name':")+9 : res.find("'type':")-3]
        type_ = res[res.find("'type':")+9 : res.find("'description'")-3]
        element_id = res[res.find("'onet_element_id':")+20 : res.find("'normalized_skill_name'")-3]
        normalized_skill_name = res[res.find("'normalized_skill_name':")+26 :]
 
        write_ws.append([uuid, name, type_, element_id, normalized_skill_name])
        time.sleep(0.001)
    
    if (i % 100==0):
      print(count, i)     # 100pg 마다 프로그레스 프린트
  
  # 파일 저장 
  write_wb.save(file_name)
 
 
# M A I N
num_list = [067721354420316# 네 개 로 나눠서 진행 (가능하면 8개, 16개, 32개 .. 도 가능)
 
if __name__ == '__main__':
  pool = multiprocessing.Pool(processes=8)
  pool.map(get_all_skills, num_list)
  pool.close()
  pool.join()
cs

이렇게 코드를 작성하고 엑셀파일을 작성하는 것으로 했습니다. json handling 하는 데에 있어서 부족하고 더 좋은 코드가 있을 거라고 믿습니다. 혹시나 잘 아시는 분 있으시다면 댓글로 알려주시면 감사하겠습니다. 

 

OpenSkills_AllSkills.csv

 

Open Skills 이용해서 세상 모든 직업 불러오기(feat. requests, json) gogetem.tistory.com/110

반응형

댓글