1. 문제점
이번 프로젝트에서 공공데이터를 활용해서 DB에 넣을 필요가 있었다
이때 주어진 csv 파일이 문제가 있었는데, 정규화가 하나도 안된 상태였다
사용한 공공데이터는 아래 링크에서 볼 수 있다
https://www.data.go.kr/data/3038404/fileData.do?recommendDataYn=Y
한국산업인력공단_국가기술자격 종목별 시험정보_20220620
국가기술자격의 종목별 시험정보(종목명, 개요, 변쳔과정, 수행직무, 진로 및 전망, 취득방법)에 대한 데이터입니다.
www.data.go.kr
우선 엑셀로 파일을 열어서 확인해봤는데 아래와 같았다
Column이 3개로만 나누어져있었으며 type이라고 정의한 곳에는 사실 column으로 가야하고 contents는 각 컬럼에 맞게 내용으로 가야한다
더 문제였던 부분은 모든 자격마다 동일한 수의 type을 갖고있는 것도 아니였다
해당 파일을 정규화해서 db에 넣어야한다
2. 과정
1. csv -> json
기존에도 크롤링을 하거나해서 수집한 데이터들은 csv보다 개인적으로 json이 편해서 파일형을 변환하기로 했다
그리고 컬럼 수정도 필요했기 때문에 파이썬을 이용했다
2. python & colab활용
import csv
import json
input_file_name = "drive/My Drive/Colab Notebooks/a.csv"
output_file_name = "drive/My Drive/Colab Notebooks/a.json"
with open(input_file_name, "r", encoding="utf-8", newline="") as input_file:
products=[]
reader = csv.reader(input_file,delimiter=',')
# 첫 줄은 col_names 리스트로 읽어 놓고
cnt =0 #id 값이 될 변수
name = "가스기술사" #첫 자격이름/정보 저장
for row in reader: #매 row를 읽어서 저장
if(row[0]!=name):#자격 이름이 바뀌었으면 그 전 값 저장
cnt+=1
product= {
"id": cnt,
"name": name,
"type":types,
"info": info,
"job":job,
"link":link,
"company": company,
"details": details,
"usage":usage,
"exam": exam,
"way":way
}
products.append(product)
name = row[0] #이름 업데이트
types=None #각 자격정보 마다 없는 정보가 생기기 때문에 변수 초기화
info=None
job=None
link=None
company=None
details=None
usage=None
exam=None
way=None
if(row[1]=='개요'):
types= row[2]
if(row[1]=='변천과정'):
info= row[2]
if(row[1]=='수행직무'):
job= row[2]
if(row[1]=='실시기관 홈페이지'):
link= row[2]
if(row[1]=='실시기관명'):
company= row[2]
if(row[1]=='위 자격취득자에 대한 법령상 우대현황'):
details= row[2]
if(row[1]=='진로 및 전망'):
usage = row[2]
if(row[1]=='출제경향'):
exam= row[2]
if(row[1]=='취득방법'):
way= row[2]
with open(output_file_name, "w", encoding="utf-8", newline="") as output_file:
output_file.write(json.dumps(products,ensure_ascii=False)) #json 파일로 저장
해당 파일을 코랩환경에서 실행했다
물론 이 전에 코랩이랑 내 구글드라이브를 mount해준 뒤 실행했다
3. mongoDB에 data import
GUI로 studio 3T를 쓰고 있어서 data import를 해주는 기능이 따로 있는지 찾아봤는데 json은 유료이다
따라서 다른 방법을 찾아보니 cmd로 직접 import 할 수 있었다
cmd창을 열어서 아래의 명령어를 입력하면 정확히 무슨 값인지는 모르겠지만 데이터들이 나온다
mongod
이 과정 후 아래의 명령어를 입력해야하는데, mongoimport.exe가 설치가 안되어 있는 경우 다운로드 받아야한다
그렇지 않으면 아래의 사진과 같은 결과를 마주할 수 있다
내 경우에는 전에 mongoDB를 설치했던 bin 폴더 안에 exe 파일만 따로 넣어줘서 환경변수를 추가로 설정하지 않았다
mongoimport --db 스키마이름 --collection 콜렉션이름 --host "localhost:27017" --jsonArray --file "파일경로"
다음으로 위의 명령어를 입력하면 아래의 사진처럼 성공적으로 데이터가 들어간 것을 확인할 수 있다
3. 결과
다시 studio 3T로 결과 값을 조회해 봤다
기존에 구상했던 데로 column에 맞게 값이 들어간 것을 확인할 수 있다
4. 참조
mongoDB import: https://spidyweb.tistory.com/167
'ETC' 카테고리의 다른 글
[Socket] Socket 통신 (0) | 2021.07.28 |
---|---|
[Authorization] OAuth 2.0 (0) | 2021.07.28 |
[SERVER] FLASK (0) | 2021.07.28 |
[GIT] GIT 커밋취소, gitIgnore (0) | 2021.07.27 |