2024.10.28-29 "빅데이터 분석 전문과정"과 2025.03.21 "빅데이터와 AI 이해 및 활용(1기)"을 공부 후 온습도를 조절하면서 딸기를 키워보기 위해 식물재배기를 제작 중입니다.
"빅데이터 분석 전문과정 참여(2024.10.28-29)": 링크
"빅데이터와 AI 이해 및 활용(1기) 참여(2025.03.21)": 링크
"DWC 방식의 스마트 재배기; 프로그램 완성(2024.08.26)": 링크
앞으로 선도농가의 환경정보를 받아서 재배기의 환경 제어에 적용해보기를 원합니다. 이를 위해 스마트팜 빅데이터를 받아서 원하는 환경정보를 추출하는 방법을 시도해 보았습니다. 스마트팜 빅데이터는 스마트팜코리아에서 받았습니다. 어느 정도 마무리가 되어 소개합니다.
충청남도 논산시 소재이고, 시설ID가 PF_0023734_01인 스마트팜에서, 2023년 작기 시작인 딸기에 대해, 스마트팜 내부의 온도와 습도 데이터를, 한 작기 전체에 대해 받아보는 내용입니다.
프로그램 언어는 파이썬입니다. 스파이더 프로그램으로 작성 및 실행했습니다.
추후 제품 등에 활용될 가능성이 있어 프로그램 소스는 공개하지 않는 점 양해 바랍니다.
1. 데이터셋정의서 다운받기, 스마트팜 빅데이터 Open API신청
스마트팜 빅데이터 제공서비스로 들어가서 데이터셋정의서를 다운받았다.
Open API를 사용하려면 신청을 해야 한다. 스마트팜 빅데이터 Open API신청을 클릭하여 신청했다.
2. 코드/메세지 파일 작성
빅데이터를 받아보면 내용이 무엇을 뜻하는지 바로 알기 어려울 때가 있다. 또 에러 메세지가 나면 무슨 뜻인지도 알 필요가 있다. 코드나 메세지가 나타나면 무슨 뜻인지 알려주기 위해 미리 코드와 메세지의 뜻을 나타내는 딕셔너리를 만들었다.
파일:
3. 전체 프로그램의 구성
두 개의 프로그램으로 구성되어 있다.
- 농가별 작기 정보를 받는 프로그램
- 농가별 환경 정보를 받는 프로그램
하나의 프로그램으로 샥~ 처리하면 좋겠지만 해 보니 그렇지가 않았다. 첫번째 프로그램의 결과를 받아보아야 알 수 있는 내용이 있고, 그것을 보고 판단해서 두번째 프로그램의 입력으로 넣어야 하기 때문이다.
4. 농가별 작기 정보를 받는 프로그램 작성
"""
1. 농가별 작기 정보를 받아서
(1) 변수 farm_data에 넣는다.
(2) file_cropping_season_data가 정한 file로 저장한다.
2. file_cropping_season_data가 정한 파일을 읽고 code나 message를 더하여 출력한다.
3. 원하는 항목을 정하면 그 부분만 추출하여 출력하고 file_extracted가 정한 file로 저장한다.
2025.05.05
박영기
"""
import requests
import json
# 오퍼레이션 목록
operation = ["",
"/getCroppingSeasonDataList", # 1. 농가별 작기 정보
"/getCroppingSeasonEnvDataList", # 2. 농가별 환경 정보
"/getCroppingSeasonManlDataList", # 3.농가별 제어 정보
"/getCultivateDataList" # 4. 농가별 생육 정보
]
# 결과 필드 목록 정의
fields_to_extract = [
"statusCode", "statusMessage", "facilityId", "addressName",
"croppingSerlNo", "itemCode", "itemName", "croppingDate",
"croppingEndDate", "acqAutoYn", "acqManlYn", "acqCultiYn", "acqMgmtYn"
]
file_cropping_season_data = "cropping_season_data.json"
file_explained = "cropping_season_data_explained.json"
file_extracted = "cropping_season_data_extracted.json"
file_code_message = "code_message\code_message_dict.json"
year = "/2023" # year, 작기 시작 년도, String, 형식 : yyyy
key1 = "addressName" # 지역명, String, 법정동명
value1 = "충청남도 논산시"
key2 = "itemName" # 품목명, String
value2 = "딸기"
농가별 작기 정보를 받는 파이썬 프로그램의 앞부분이다. 위 프로그램을 실행하면 아래와 같은 3개의 파일이 만들어진다.
cropping_season_data.json
cropping_season_data_explained.json
cropping_season_data_extracted.json
아래에 각 파일의 내용을 설명한다.
(1) cropping_season_data.json
year(작기 시작 년도)를 2023년으로 정하여 농가별 작기 정보를 스마트팜코리아에서 받은 파일이다.
내용은 위와 같은 형태이다. 2023년에 작기를 시작한 모든 농가의 정보를 보내준다.
파일:
(2) cropping_season_data_explained.json
코드나 메세지의 뜻을 알기 쉽도록 code_message_dict.json를 불러와 코드나 메세지 옆에 괄호로 설명을 붙였다.
파일:
(3) cropping_season_data_extracted.json
adressName이 충청남도 논산시이고, itemName이 딸기인 것만 골랐다.
파일:
이렇게 하여 충청남도 논산시에서 딸기를 재배하는 facilityId(시설ID), croppingSerlNo(작기 일련번호), itemCode(품목코드), itemName(품목명)에 대한 정보를 함께 확보했다.
5. 농가별 환경 정보를 받는 프로그램 작성
(1) 원하는 항목 선택
cropping_season_data_extracted.json의 내용을 살펴보고 원하는 facilityId(시설 ID), year(작기 시작 년도), croppingSerlNo(작기 일련번호), itemCode(품목코드)를 선택하고 프로그램에 반영했다. 아래의 값을 적용했다.
시설ID: PF_0023734_01
작기 시작 년도: 2023년
작기 일련번호: 6705
품목코드: 80400(딸기)
추가로, measDate(측정 일자), TI(내부온도), HI(내부습도), HI02(상대습도)를 필터링하여 알려주도록 프로그램했다.
# -*- coding: utf-8 -*-
"""
1. "cropping season_data.json"를 보고 다음을 정하여 code를 고치고 실행한다.
(1) facility_id_value
(2) year
(3) croppingSerlNo
(4) max_page: 2
(5) itemCode
2. 만들어진 "PF_***.json"을 읽어 "totalPage"를 확인하여 max_page를 고친고 실행한다.
3. 딸기의 온습도가 들어 있는 "strawberry_TH.json"이 만들어진다.
2025.05.05
박영기
"""
import requests
import json
from collections import defaultdict
input_file_1 = "code_message_dict.json" # Code의 설명을 위해 부르는 file.
input_file_2 = "cropping_season_data_extracted.json" # 농가별 작기 정보 중 년도를 정하여 filtering한 file.
file_farm_data = "farm_data.json" # 불러와서 data를 누적한 file.
facility_id_key = 'facilityId'
facility_id_value = 'PF_0023734_01'
year = "/2023" # year, 작기 시작 년도, String, 형식 : yyyy
croppingSerlNo = 6705 # 작기 일련번호, Integer
pageNum = 1 # 페이지 번호, Integer, 1페이지당 1000건 조회
max_page = 66 # 원하는 페이지 수
itemCode = 80400 # 딸기
농가별 환경 정보를 받는 파이썬 프로그램의 앞부분이다. 한 페이지에 1,000 항목을 받으므로 처음에는 max_page를 2 정도로 했다. 위 프로그램을 실행하면 아래와 같은 4개의 파일이 만들어진다.
farm_data.json
PF_0023734_01.json
strawberry_TH.json
strawberry_TH_explained.json
(2) farm_data.json
한경 정보 중 croppingSerlNo(작기 일련번호)가 6705인 것만 받아왔다. 두 페이지를 받았으면 총 2,000건이다. (아래 파일은 총 66페이지를 받은 결과이다. )
파일:
(3) PF_0023734_01.json
facilityId(시설 ID)가 PF_0023734_01인 것만 골랐다. farm_data.json과 거의 비슷한데, 시설이 다르면서 작기 일련번호가 같은 경우가 별로 없기 때문인 것 같다.
파일:
(4) strawberry_TH.json
추가로 TI(내부온도), HI(내부습도), HI02(상대습도)만 뽑았다.
파일:
내용을 보면 2023-09-20부터 2023-09-27까지 1시간 간격의 온습도 데이터가 있음을 볼 수 있다. 한 달 정도 밖의 데이터만 있는 것은 앞에서 max_page=2로 했기 때문이다.
(5) strawberry_TH_explained.json
이것은 코드의 설명을 붙인 것이다.
파일:
6. 농가별 환경 정보 한 작기 모두 받기
PF_0023734_01.json에서 totalPage를 확인한다. 66.0으로 되어 있으므로 총 66페이지, 즉 66,000건의 데이터가 있다는 뜻이다. 프로그램에서 max_page = 66으로 바꾼 후 실행하면 다소 시간이 걸리면서 한 작기 전체의 온습도 데이터를 만들어 준다. 컴퓨터와 네트워크 상태에 따라 걸리는 시간이 다르겠지만 앉아서 멍하니 보기에는 지루함이 느껴지는 시간이다.
한 작기 전체 data는 양이 많아 첨부가 안된다. 또, 농가의 귀한 정보이니 함부로 공개하지 않는 것이 맞는 것 같다.
당장은 쓸 데가 없지만 나중에 좀 스마트한 식물재배기를 만들 때 우수 농가의 환경정보를 적용하는 데에 활용해보려고 한다.
'기타 활동 > 공부' 카테고리의 다른 글
스마트농업 전문인력 양성교육 (2024.11.25-12.05) (0) | 2025.04.24 |
---|