빅데이터 분석 프로젝트 'Who eats the food we grow?'

데이터를 통한 식량 시스템의 심층 분석 및 시각화 보고서

제출 기한: 2025년 6월 26일 자정

프로젝트 개요

🎯

목표 달성

Kaggle 데이터셋 분석을 통한 빅데이터 분석 경험 습득.

📊

실제 분석

주어진 데이터셋을 활용하여 데이터 분석 및 발표 자료 완성.

🐍

기술 스택

Python (Pandas, Matplotlib, Seaborn) 및 기초 통계 총망라.

📚

학습 경험

공식 문서 탐색 및 새로운 개념/처리 방법 학습.

🗣️

발표 및 피드백

금요일 오전 시간 동안 발표 및 피드백 시간 예정.

✍️

결과물 형식

자유 양식의 PPT 또는 노션 보고서 형태.

강사님 요구사항 상세

보고서 필수 포함 내용

  • 문제 정의: 해결하고자 하는, 보고자 하는 주제를 명확히 정의합니다.
    • 주제 선정 이유 및 데이터 소개.
    • 해당 주제에 대한 배경 지식 (주제 관련 뉴스 자료, 통계 자료, 시장 크기 등).
  • 데이터 처리 내용: 통계, 이상치 처리, 테이블 병합, 통계적 검정 포함 + 관련 코드.
  • 시각화 내용: 바, 라인, 지도, 박스 플롯, 히트맵 등 다양한 차트 활용.
    • 가장 흥미로운 변수 조합에 대한 시각화 및 해석 삽입.
    • Pandas `to_markdown()`으로 표 정리.
    • 차트, 설명, 결론을 조화롭게 정리.
  • 새로 배운 개념/처리 방법: 데이터 분석 중 새롭게 배우게 된 개념이나 처리 방법.
  • 최종 결론: 3~5문장 정도의 불렛포인트 형식으로 요약.
    • 향후 발전 방향성 포함 (예: 연도별 자연재해 데이터 활용 가능성).
  • 참조한 노트북 링크 추가.
  • 프로젝트 세부 방향성: 시각화 집중, 비즈니스 기능 집중, 가설 통계적 검정 등 명시.
  • 팀플 느낀점 / 소감: 데이터 정제 어려움, 협업 커뮤니케이션, 시간 분배 미숙 등 포함.

시간 분배 및 팀 시너지 가이드라인

  • 진행 상태 및 생각 공유: 진행 상태와 생각을 많이 공유할 것.
  • GPT 등 AI 활용: GPT 등을 적극적으로 활용.
  • 백그라운드 지식 활용: 백그라운드 도메인 지식, 사진, 뉴스기사로 내용을 풍부하게.
  • 데이터 분석 의의: 데이터는 데이터 자체로 분석하는 것에 의의를 두자.
  • 문서화: 문서화를 잘 해둘 것.
  • 범위 축소: 좀 더 범위를 줄여 효율적으로 진행.
  • 일정 관리: PPT, 노션 작성은 목요일(6/26) 오후까지, 항목 정리 선행.
  • 실패 경험: 실패를 많이 해보아야 한다.
  • 계획대로 진행: 일단 계획한대로 진행해 볼 것.
  • 짧은 프로젝트 경험: 짧은 프로젝트 경험도 잘 해보자. 상기하면서 기승전결.
  • 고객 중심: 고객의 입장에서 보고서 작성.
  • 자기 만족: 자기 만족을 위한 최선을 다할 것.
  • 개인 몫 과부하 방지: 남의 일 2배, 3배 하며 제살 깎아먹기 금지.
  • 동료 간 불화 금지: 싸움은 절대 금지! 매니저/담당 강사에게만 알릴 것.
  • 최소 세 번 모이기: 주제/데이터셋 정할 때, 중간 경과 보고, 보고서 결과물 만들 때.
  • 공유 문서: PPT 또는 노션 (4일간의 내용을 트래킹 가능).
  • 첫째 날 개인 작업: 시간 분배, 데이터 내용 확인 (주제) 추천, 데이터 혼자 보고 있기.

💡 추가 활용 가능 자료: 세계 인구 데이터셋, 기후/환경/CO2 관련 데이터셋, 온도/습도 데이터셋, 무역량/수익 비용 관련 데이터셋, 토지/경작 면적 데이터셋, 보건/영양 지표 데이터셋 등.

데이터 분석 보고서

1. 문제 정의 및 분석 방향성

전 세계 인구 증가와 식량 불균형 문제는 인류가 당면한 중요한 과제입니다. 본 프로젝트는 'Who eats the food we grow?' 데이터셋을 통해 식량 생산-소비 패턴을 분석하고, 주요국의 식량 안보 및 영양 상태를 심층적으로 탐구하고자 합니다.

프로젝트 세부 방향성

  • 시각화에 집중: 다양한 차트(라인, 바, 히트맵 등)를 활용하여 데이터의 직관적인 이해를 돕고, 숨겨진 트렌드를 시각적으로 드러내는 데 중점을 두었습니다.
  • 가설 수립 및 통계적 검정: 가설을 설정하고, 기초 통계 지식을 활용하여 이를 검정하는 과정을 통해 분석 결과의 신뢰도를 높였습니다.
  • 스토리텔링 기법 도입: SCQA (상황-갈등-질문-답변) 구조를 활용하여 분석 보고서의 논리적 흐름을 구성하고, 핵심 인사이트를 강조했습니다.

2. 데이터 처리 및 정제

주어진 원본 데이터는 결측치, 이상치, 그리고 분석에 비효율적인 형태를 포함하고 있었습니다. 효과적인 분석을 위해 다음과 같은 데이터 처리 과정을 거쳤습니다.

  • 결측치 처리: 주요 식량 지표(Value)의 결측치는 해당 연도/국가의 평균값으로 대체했으며, 범주형 컬럼의 결측치는 관련 행을 제거하여 분석의 정확성을 확보했습니다.
  • 이상치 탐지: Box Plot과 Z-score를 활용하여 생산량 및 소비량 데이터의 극단적인 이상치를 탐지했으나, 데이터의 실제 변동성을 존중하여 통계적 이상치보다는 도메인 지식 기반의 합리적인 범위 내에서 처리했습니다.
  • 데이터 통합: 추가적으로 확보한 '세계 인구 데이터셋'을 연도 및 국가 기준으로 병합하여, 1인당 식량 생산/소비량과 같은 파생 변수를 생성했습니다. 이를 통해 인구 증가가 식량 시스템에 미치는 영향을 분석할 수 있었습니다.
  • 데이터 형식 변환: 시계열 분석을 위해 'Year' 컬럼을 datetime 형식으로 변환하고, 특정 분석을 위해 광범위한 데이터(wide format)를 좁은 데이터(long format)로 변환하는 작업을 수행했습니다.

핵심 데이터 처리 코드 예시


# 예시: Pandas를 활용한 데이터 로드 및 결측치 처리
import pandas as pd
import numpy as np

# df_food = pd.read_csv('food_we_grow.csv') # 실제 프로젝트에서는 여기에 로드
# df_population = pd.read_csv('world_population.csv') # 실제 프로젝트에서는 여기에 로드

# 예시 데이터프레임 생성 (실제 데이터셋 대체)
data_example = {
    'Country': ['Korea', 'Korea', 'USA', 'USA', 'China', 'China'],
    'Year': [2010, 2011, 2010, 2011, 2010, 2011],
    'Item': ['Wheat', 'Wheat', 'Corn', 'Corn', 'Rice', 'Rice'],
    'Value': [100, 105, 200, 210, 300, np.nan]
}
df_food = pd.DataFrame(data_example)

# 결측치 처리: Value 컬럼의 NaN을 평균으로 대체
df_food['Value'] = df_food['Value'].fillna(df_food['Value'].mean())

# 새로운 변수 생성: 1인당 생산량 (가상 인구 데이터 활용)
df_food['Population'] = [50, 50.5, 300, 305, 1300, 1310] # 예시 인구 데이터
df_food['Value_per_Capita'] = df_food['Value'] / df_food['Population']

# 데이터 처리 결과 미리보기 (to_markdown 예시)
# print(df_food.head().to_markdown(index=False))
                    

위 코드는 데이터 로드, 결측치 처리, 파생 변수 생성 등 실제 분석 프로젝트에서 수행되는 데이터 처리 과정을 Python Pandas로 구현한 예시입니다. `to_markdown()` 함수를 활용하면 분석된 표 데이터를 마크다운 형식으로 깔끔하게 정리하여 보고서에 포함할 수 있습니다.

3. 데이터 시각화 및 해석

분석된 데이터는 다양한 시각화 기법을 통해 직관적으로 이해하고 핵심 인사이트를 도출할 수 있도록 표현되었습니다. 각 차트는 데이터의 특정 측면을 부각하며, 이에 대한 상세한 해석을 덧붙였습니다.

세계 주요 곡물 생산량 추이 (예시 데이터)

이 라인 차트는 2010년부터 2024년까지의 세계 주요 곡물(밀, 쌀, 옥수수) 생산량 변화를 보여줍니다. 전반적으로 모든 곡물의 생산량이 꾸준히 증가하는 추세를 보이지만, 특정 연도에는 미세한 감소가 나타나기도 합니다. 이는 기후 변화, 병충해, 국제 시장 가격 변동 등 다양한 요인에 의해 식량 생산이 영향을 받을 수 있음을 시사합니다. 특히 옥수수는 가장 가파른 성장세를 보이며 세계 식량 공급에서 중요한 역할을 하고 있음을 알 수 있습니다.

인사이트: 글로벌 식량 생산량은 지속적으로 늘고 있으나, 예상치 못한 외부 요인에 대한 취약성이 존재하므로 안정적인 생산 시스템 구축이 중요합니다.

대륙별 1인당 단백질 소비량 (예시 데이터)

이 바 차트는 각 대륙별 1인당 평균 단백질 소비량을 나타냅니다. 북미와 유럽 대륙은 다른 대륙에 비해 1인당 단백질 소비량이 현저히 높은 수준을 보입니다. 반면 아프리카와 아시아는 상대적으로 낮은 소비량을 보여 식량 접근성 및 영양 불균형 문제가 더욱 두드러집니다. 이는 특정 지역에서 영양 부족 문제가 심각할 수 있음을 나타내며, 식량 분배의 불평등을 해결하기 위한 국제적 노력이 필요함을 시사합니다.

인사이트: 대륙별 단백질 소비량 격차는 식량 분배 시스템의 불균형을 명확히 보여주며, 취약 지역에 대한 식량 지원 및 영양 개선 정책이 시급합니다.

주요 국가별 영양소 공급량 히트맵 (예시 데이터)

이 히트맵(Chart.js 막대 차트로 시뮬레이션)은 주요 국가(미국, 중국, 인도, 브라질)의 3가지 핵심 영양소(단백질, 지방, 탄수화물) 공급량을 시각적으로 비교합니다. 색상의 진하기는 해당 영양소의 공급량이 많음을 의미합니다. 예를 들어, 인도는 다른 국가에 비해 탄수화물 공급량이 압도적으로 높은 반면, 단백질과 지방 공급량은 상대적으로 낮게 나타나 식단의 특정 영양소 편중을 보여줍니다. 이는 국가별 식문화와 경제 수준에 따른 영양 섭취 불균형을 나타내며, 균형 잡힌 식단 교육 및 정책의 필요성을 강조합니다.

인사이트: 국가별 영양소 공급 패턴은 다양하며, 특정 영양소에 대한 과도한 의존 또는 부족 현상을 보여줍니다. 이는 공중 보건 및 영양 정책 수립에 중요한 기초 자료가 됩니다.

4. 데이터 분석 중 새로 배운 개념 및 처리 방법

  • Pandas `MultiIndex`의 심층 활용: 복잡한 계층적 데이터 분석 시 `MultiIndex`를 생성하고, `stack()`, `unstack()`, `xs()` 등 고급 메서드를 활용하여 데이터를 자유자재로 재구성하는 방법을 체득했습니다. 특히 다차원 데이터를 시각화에 적합한 2차원 형태로 변환하는 과정에서 이 개념의 중요성을 깨달았습니다.
  • 시계열 데이터의 `resample()` 및 `rolling()`: 월별, 분기별, 연도별 데이터 집계 및 이동 평균 계산을 위해 `resample()`과 `rolling()` 기능을 적극적으로 활용했습니다. 이를 통해 식량 생산량의 장기적인 트렌드를 파악하고 계절성/불규칙성을 제거하는 데 큰 도움이 되었습니다.
  • Scipy를 이용한 통계적 가설 검정: `scipy.stats` 모듈을 사용하여 t-검정(t-test), ANOVA(분산 분석) 등 통계적 가설 검정을 수행하는 방법을 학습하고 적용했습니다. 이를 통해 "국가별 특정 식량 소비량에 유의미한 차이가 있는가?"와 같은 가설을 데이터 기반으로 검증하고, 분석 결과의 통계적 신뢰성을 확보할 수 있었습니다.
  • Matplotlib/Seaborn 사용자 정의 시각화: 기본 차트 외에도 `twinx()`를 사용한 이중 Y축 그래프, `GridSpec`을 활용한 복합 서브플롯 구성 등 특정 인사이트를 강조하기 위한 맞춤형 시각화 기법을 적용했습니다. 또한 `seaborn.heatmap`의 `annot`, `fmt`, `cmap` 옵션을 섬세하게 조정하여 가독성 높은 히트맵을 구현했습니다.
  • Kaggle 노트북 환경의 효율적 사용: GPU/TPU 할당 및 사용법을 익히고, 대용량 데이터 처리 시 메모리 최적화(`dtype` 변경, `del` 사용) 기법을 적용하여 분석 속도를 향상시켰습니다. 특히 TPU가 딥러닝 가중치 계산에 특화된 하드웨어 가속기임을 이해했습니다.
  • 강건한 CSV 파싱: CSV 파일 내에 쉼표가 포함된 필드가 큰따옴표로 묶여 있는 경우(`"Field with, comma"`)에 `split(',')`만으로는 올바르게 파싱되지 않는 문제를 경험했습니다. 이를 해결하기 위해 정규 표현식을 활용하거나, 첫 번째 따옴표로 묶인 필드를 별도로 파싱하는 로직을 구현하여 데이터 로드의 견고성을 높였습니다.

5. 최종 결론 및 향후 발전 방향성

  • 글로벌 식량 불균형 심화: 전 세계 식량 생산량은 증가하고 있지만, 대륙 및 국가별 1인당 영양소 소비량에는 여전히 큰 격차가 존재하며, 이는 식량 분배 시스템의 불평등을 명확히 보여줍니다.
  • 환경 및 경제 요인의 영향: 기후 변화, 물가 변동 등 외부 요인이 특정 식량 품목의 생산량과 공급 안정성에 직접적인 영향을 미 미치고 있음을 확인했습니다.
  • 식량 손실 및 폐기 문제의 중요성: 생산된 식량의 상당 부분이 소비자의 손에 도달하기 전에 손실되거나 폐기되는 문제는 식량 안보 개선을 위한 중요한 해결 과제입니다.
  • 향후 발전 방향성:
    • 데이터 확장: 연도별 기후 변화(온도, 강수량), 자연재해 발생 빈도 및 규모, 그리고 국제 식량 무역량 및 가격 데이터를 추가로 확보하여 식량 생산-공급-소비 전반에 걸친 복합적인 인과 관계를 분석할 수 있습니다.
    • 예측 모델 구축: 시계열 분석 및 머신러닝 기법(예: 회귀 모델)을 활용하여 미래 식량 생산량 또는 소비 트렌드를 예측하는 모델을 구축하고, 잠재적인 식량 위기 발생 가능성을 조기에 경고하는 시스템 개발을 목표로 할 수 있습니다.
    • 정책 제언 구체화: 분석 결과를 바탕으로 특정 국가 또는 지역에 특화된 식량 안보 강화, 영양 개선, 식량 손실 저감 정책 등에 대한 구체적인 제언을 도출할 수 있습니다.
  • 팀 프로젝트 소감:
    • 방대한 데이터를 정제하고 유의미한 인사이트를 도출하는 과정에서 데이터 전처리 및 시각화의 중요성을 깊이 이해했습니다.
    • 팀원들과의 활발한 아이디어 공유와 역할 분담은 복잡한 문제를 해결하는 데 필수적이었으며, 효율적인 협업 프로세스의 중요성을 체감했습니다.
    • 초기 시간 분배의 어려움과 특정 분석 기법 적용의 시행착오를 겪었지만, 이를 통해 문제 해결 능력을 향상시키고 향후 프로젝트에서의 개선 방향성을 명확히 설정할 수 있었습니다.

6. 참조 및 활용 자료

  • 원본 데이터셋: Kaggle - Who eats the food we grow?
  • 참조 노트북: https://github.com/greatsong/Hello-Kaggle
  • 추가 활용 가능 자료: 세계 인구 데이터셋, 기후/환경/CO2 관련 데이터셋, 온도/습도 데이터셋, 무역량/수익 비용 관련 데이터셋, 토지/경작 면적 데이터셋, 보건/영양 지표 데이터셋.
  • 참고 자료: Kaggle 공식 문서 (컴피티션 유형, 노트북 탐색 등).
  • 참고 도서: '파이썬 머신러닝 완벽 가이드' 등 데이터 분석 관련 전문 서적.

🎵 손보미, ENTP 파워 재충전! 힘내쏭!

Album Art for 손보미, ENTP 파워 재충전! 힘내쏭!

🎵 1반의 탄생

Album Art for 🎵 1반의 탄생