본문 바로가기

Pandas/실전

판다스 - 미국농무부 영양소 정보 (json 데이터 전처리)

반응형

json 라이브러리를 이용해 읽어오기

 

 

이 db의 길이는 6636이다.

 

단, json데이터의 특성상 그냥 6636개의 데이터가 있다고 볼 수 없다.

 

그 이유는

 

db의 첫번째 값은

 

 

 

위와 같기 때문이다.

 

 

 

 

Key Value
id 단일값
description 문자열 값(들)
tags (빈) 리스트
manufacturer 문자열 값(들)
group 문자열 값(들)
portions 리스트 안의 딕셔너리
딕셔너리의 키 = amount, unit, grams
nutrients 리스트 안의 딕셔너리
딕셔너리의 키 = value, units, description, group

 

 

 

 

위 표의 내용대로 db의 key들은 총 7개이다.

 

그러나 여기서 눈여겨봐야할 키는 바로 nutrients이다.

 

 

nutrients 하나로도 데이터프레임을 만들 수 있다.

 

무슨 말인지 코드로 보자

 

 

db의 첫번째 값의 nutrients만 보면

 

총 162개의 데이터가 있으며,  딕셔너리 형태로 되어 있다.

 

즉, 위 사전을 바로 162행의 데이터프레임으로 만들 수 있다는 것이다.

 

 

 

 

보통 데이터프레임을 만들 때와 같이

 

키가 컬럼으로, 값들이 각 컬럼의 행으로 들어가서 데이터프레임이 만들어졌다.

 

 

 

 

 

추가적으로

 

 

이 nutrients의 id 값은 1008이다.

 

 

 

 

 

 

id를 컬럼으로 추가하면 이 영양소 정보가 몇번의 id에 해당하는지 알 수 있다.

 

 

위 데이터프레임은

 

첫번째 db의 nutrients를 데이터프레임으로 만들고

첫번째 db의 아이디를 컬럼으로 추가해 준 것이다.

 

 

 

 

 

여기까지 이해가 됐다면

 

for loop를 이용해 db에 있는 모든 nutrients를

 

id 컬럼을 추가해서 데이터프레임으로 만들어보자

 

각 nutrients 데이터프레임에 id를 컬럼으로 추가하고

 

리스트에 담아뒀다.

 

 

이를 이제 concat하면 모두 연결된 데이터프레임이 만들어진다.

 

 

db의 전체 길이는 원래 6636이었다.

 

그러나 nutrients에 있는 데이터만 모아도 총 389355개가 된다.

 

 

 

 

 

다만, 어떤 이유에서인지는 몰라도 중복된 데이터가 있다.

 

 

 

 

 

 

문제의 소지가 있을 수 있기에 중복데이터는 삭제해 주자

 

 

 

 

이렇게 잘 정제된 nutrients 데이터는 총 375176개로 확인됐다.

 

 

 

이후 전처리는 아래 포스팅으로 연결

 

https://steadiness-193.tistory.com/106

 

판다스 - 미국농무부 영양소 정보 (json 데이터 전처리2)

https://steadiness-193.tistory.com/105 판다스 - 미국농무부 영양소 정보 (json 데이터 전처리) json 라이브러리를 이용해 읽어오기 이 db의 길이는 6636이다. 단, json데이터의 특성상 그냥 6636개의 데이터가..

steadiness-193.tistory.com

 

 

반응형