2016년 2월 26일 금요일

[데이터 분석] 데이터 준비하기 : 다듬기, 변형, 병합

 미국 농무부는 음식의 영양소 정보 데이터베이스를 제공하고 있습니다. 영국 해커 애슐리 윌리엄스는 이 데이터베이스를 Json 형식으로 웹사이트 (http://ashleyw.co.uk/project/food-nutrient-database)에 제공하고 있습니다.  각 음식에는 수자로 된 고유 ID와 영양소 및 제공량을 담고 있는 두 가지 리스트가 있으나 이 데이터 형식은 분석하기 좋지 않으므로 데이터 형식을 바꿔 보도록 하겠습니다. 
 웹사이트에서 데이터를 내려받은 다음 압축을 해제하고 선호하는 JSON 라이브러리를 사용해서 파이썬에 읽어오도록 하겠습니다.



 db에 있는 각 엔트리는 한 가지 음식에 대한 모든 정보를 담고 있는 사전형입니다. 'nutrients' 필드는 사전의 리스트이며 각 항목은 한 가지 영양소에 대한 정보를 담고 있습니다.


 사전의 리스트를 DataFrame으로 바꿀 때 추출할 필드의 목록을 지정해줄 수 있습니다. 음식의 이름과 그룹, id 그리고 제조사를 추출해 보도록 하겠습니다.



 그리고 value_counts 메서드를 이용해서 음식 그룹의 분포를 확인해 볼 수 있습니다.



 이제 모든 영양소 정보를 분석해 보도록 하겠습니다. 먼저 더 쉽게 분석을 하기 위해 각 음식의 영양소 정보를 하나의 테이블에 담아보겠습니다. 그러기 위해서는 몇 가지 과정을 거쳐야 하는데 먼저 음식의 영양소 리스트를 하나의 DataFrame으로 변환하고 음식의 id를 위한 칼럼을 하나 추가합니다. 그리고 이 DataFrame을 리스트에 추가합니다. 마지막으로 이 리스트를 concat 메서드를 사용해서 하나로 합쳐보겠습니다.


 문제가 없다면 nutrients는 다음과 같을 것입니다.


  총 389355개의 데이터가 있습니다. 하지만 이 DataFrame에는 중복된 데이터가 있으므로 제거하도록 하겠습니다.



 중복된 데이터를 제거하니 14179개로 줄어들었습니다. 중복된 데이터가 굉장히 많았네요. 그리고 'group'과 'description'은 모두 DataFrame 객체이므로 뭐가 뭔지 쉽게 알아볼 수 있도록 이름을 바꾸도록 하겠습니다.


 이 데이터를 음식 그룹과 영양소의 종류별 중간 값을 그래프로 그려 보도록 하겠습니다.


 좀 더 응용하면 각 영양소가 어떤 음식에 가장 많이 들어있는지 찾아볼 수도 있습니다.


위 코드의 실행 결과를 전부 보기에는 너무 방대하므로 여기서는 아미노산에 대한 내용만을 다뤄봤습니다.







댓글 1개:

  1. 데이터 다운로드를 위한 링크가 연결이 안됩니다. 혹시 다운로드 받으신 파일을 받을 수 있을까요?

    답글삭제