본문 바로가기

~2023

[json/pandas] json 파일 읽어오기 및 데이터 프레임으로 만들기

728x90
반응형
 

json 파일을 읽어 온 다음에 pandas로 데이터 프레임을 만들어 보려고 한다.

MS-ASL 데이터셋을 사용하기 위해 이 기법들을 사용했다.

 

우선 필요한 라이브러리를 import 해주자

import json
import pandas as pd

 

그런 다음에 root 변수를 만들어 절대 경로를 지정해주고 __main__으로 메인 부분을 작성하자

root = "[절대 경로]"

if __name__ == '__main__':
	# 메인 작동 부분

root를 만들어 준 이유는 작성자 기준 Ubuntu 20.04 버전에서 디스크를 마운트해서 쓰기 때문이다.

그래서 기본 경로보다 길기 때문에 작성하기 귀찮으니 그냥 변수로 만들었다.

 

이 부분은 '# 메인 작동 부분'에 들어가야 할 코드이다.

	# json 파일 읽기
    with open(root + '/dataset/MS-ASL/MSASL_train.json') as f:
        json_data = json.load(f)
    # print(json.dumps(json_data, indent="\t"))

    # json 파일 출력하기
    print("train_shape => (", len(json_data), ",", len(json_data[0]), ")") # (16054, 16)

    # 각 속성 담기
    url, start_time, end_time, label, signer_id, box, text, width, height, fps = [], [], [], [], [], [], [], [] ,[] ,[]
    
    for i in range(len(json_data)):
        url.append(json_data[i]["url"])
        start_time.append(json_data[i]["start_time"])
        end_time.append(json_data[i]["end_time"])
        label.append(json_data[i]["label"])
        signer_id.append(json_data[i]["signer_id"])
        box.append(json_data[i]["box"])
        text.append(json_data[i]["text"])
        width.append(json_data[i]["width"])
        height.append(json_data[i]["height"])
        fps.append(json_data[i]["fps"])
        
    # 데이터 프레임 만들기
    graph = pd.DataFrame({
        "url": url,
        "start_time": start_time,
        "end_time": end_time,
        "label": label,
        "signer_id": signer_id,
        "box": box,
        "text": text,
        "width": width,
        "height": height,
        "fps": fps
    })
    
    print(graph)

open()의 매개변수로 root + '상대 경로'를 넘겨줘 데이터셋이 위치한 곳을 명시해줬다.

그리고 json_data에 json 정보를 담고 json.dumps에 "\t"를 주어 띄어쓰기가 이쁘게 된 상태로 json_data를 출력하게 했다.

우리는 데이터 프레임이 필요하니 이 부분은 주석으로 처리했다.

 

속성명으로 리스트를 만들어 각 속성명에 해당하는 값들을 담고 pd.DataFrame({ 속성명: 넘겨 줄 리스트, ... })에 넘겨줘 graph라는 데이터 프레임을 만들었다.

마지막으로 데이터 프레임이 잘 만들어졌는데 print()로 찍어주면 끝이다.

 

 

 

 

 

 
 
 
728x90
반응형