import numpy as np
import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import font_manager, rc
from sklearn.model_selection import train_test_split
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, GRU, Flatten
import warnings
# 모든 경고 메시지 무시
warnings.filterwarnings("ignore")
# 폰트 설정
font_path = "C:/Windows/Fonts/malgun.ttf" # 한글 폰트 경로
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
mpl.rc('axes', unicode_minus=False)
root = 'C:/Users/data/tomato'
root = 'C:/Users/data/tomato' # file 경로
data = pd.read_csv(root+'/전라북도_농가데이터셋_방울토마토.csv', encoding='cp949')
data = pd.read_csv(root+'/전라북도_농가데이터셋_방울토마토.csv', encoding='cp949') # file 이름
# 열 개수 설정(조회하고자 하는 열 개수가 많아 100개로 설정)
pd.set_option('display.max_columns', 100)
print(data)
시설ID 시도 시군구 품목명 품종 재배면적 시설유형 재배형태 단동/연동 구분 \ 0 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 1 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 2 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 4 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN ... ... ... ... ... .. ... ... ... ... 3257 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3258 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3259 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3260 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3261 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 수집일 외부온도 외부습도 외부 일사량 외부풍향 외부풍속 외부강우 강우감지 내부온도 내부습도 \ 0 2021-02-04 10:00 -1.0 NaN 461 NaN 2.0 NaN 0.0 12.0 48.0 1 2021-02-04 11:00 0.0 NaN 590 NaN 3.0 NaN 0.0 13.0 43.0 2 2021-02-04 12:00 0.0 NaN 655 NaN 2.0 NaN 0.0 16.0 41.0 3 2021-02-04 13:00 1.0 NaN 656 NaN 2.0 NaN 0.0 17.0 43.0 4 2021-02-04 14:00 1.0 NaN 586 NaN 2.0 NaN 0.0 16.0 43.0 ... ... ... ... ... ... ... ... ... ... ... 3257 2021-06-28 9:00 25.0 NaN 529 NaN 0.0 NaN 0.0 18.0 49.0 3258 2021-06-28 10:00 26.0 NaN 525 NaN 0.0 NaN 0.0 19.0 46.0 3259 2021-06-28 11:00 27.0 NaN 454 NaN 0.0 NaN 0.0 19.0 46.0 3260 2021-06-28 12:00 24.0 NaN 71 NaN 2.0 NaN 0.0 16.0 54.0 3261 2021-06-28 13:00 18.0 NaN 25 NaN 4.0 NaN 1.0 14.0 63.0 내부CO2 내부 일사량 토양EC 토양PH 지온 지습 (양액)총배액 (양액)총급액 (양액)배액PH \ 0 362.0 NaN NaN NaN NaN NaN NaN NaN NaN 1 289.0 NaN NaN NaN NaN NaN NaN NaN NaN 2 259.0 NaN NaN NaN NaN NaN NaN NaN NaN 3 230.0 NaN NaN NaN NaN NaN NaN NaN NaN 4 245.0 NaN NaN NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... .. ... ... ... 3257 321.0 NaN NaN NaN 22.0 NaN NaN NaN NaN 3258 292.0 NaN NaN NaN 23.0 NaN NaN NaN NaN 3259 286.0 NaN NaN NaN 23.0 NaN NaN NaN NaN 3260 296.0 NaN NaN NaN 24.0 NaN NaN NaN NaN 3261 353.0 NaN NaN NaN 23.0 NaN NaN NaN NaN (양액)공급PH (양액)배액EC (양액)공급EC (양액)지온 (양액)지습 배기팬작동여부 CO2발생장치작동여부 \ 0 NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... ... ... 3257 NaN NaN NaN NaN 81.0 NaN NaN 3258 NaN NaN NaN NaN 83.0 NaN NaN 3259 NaN NaN NaN NaN 83.0 NaN NaN 3260 NaN NaN NaN NaN 81.0 NaN NaN 3261 NaN NaN NaN NaN 82.0 NaN NaN 보광등작동여부 난방기작동상태 난방기작동여부 유동팬작동상태 유동팬작동여부 보온커튼작동상태 보온커튼작동여부 \ 0 NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... ... ... 3257 NaN NaN NaN NaN NaN NaN NaN 3258 NaN NaN NaN NaN NaN NaN NaN 3259 NaN NaN NaN NaN NaN NaN NaN 3260 NaN NaN NaN NaN NaN NaN NaN 3261 NaN NaN NaN NaN NaN NaN NaN 차광커튼작동상태 차광커튼작동여부 우측삼중측창 작동여부 좌측삼중측창 작동여부 우측이중측창 작동여부 좌측이중측창 작동여부 \ 0 100.0 NaN NaN NaN NaN NaN 1 100.0 NaN NaN NaN NaN NaN 2 100.0 NaN NaN NaN NaN NaN 3 100.0 NaN NaN NaN NaN NaN 4 100.0 NaN NaN NaN NaN NaN ... ... ... ... ... ... ... 3257 100.0 NaN NaN NaN NaN NaN 3258 100.0 NaN NaN NaN NaN NaN 3259 94.0 NaN NaN NaN NaN NaN 3260 100.0 NaN NaN NaN NaN NaN 3261 100.0 NaN NaN NaN NaN NaN 우측일중측창 개도 우측일중측창 온도폭 우측일중측창 설정온도 우측일중측창 작동여부 우측일중측창 작동상태 좌측일중측창 개도 \ 0 NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... ... 3257 NaN NaN NaN NaN NaN NaN 3258 NaN NaN NaN NaN NaN NaN 3259 NaN NaN NaN NaN NaN NaN 3260 NaN NaN NaN NaN NaN NaN 3261 NaN NaN NaN NaN NaN NaN 좌측일중측창 온도폭 좌측일중측창 설정온도 좌측일중측창 작동여부 좌측일중측창 작동상태 측창 우측이중천창 작동여부 \ 0 NaN NaN 0.0 NaN NaN 57.0 1 NaN NaN 0.0 NaN NaN 60.0 2 NaN NaN 0.0 NaN NaN 62.0 3 NaN NaN 0.0 NaN NaN 67.0 4 NaN NaN 0.0 NaN NaN 65.0 ... ... ... ... ... .. ... 3257 NaN NaN 43.0 NaN NaN 100.0 3258 NaN NaN 45.0 NaN NaN 100.0 3259 NaN NaN 47.0 NaN NaN 100.0 3260 NaN NaN 14.0 NaN NaN 100.0 3261 NaN NaN 0.0 NaN NaN 100.0 좌측이중천창 작동여부 우측일중천창 개도 우측일중천창 온도폭 우측일중천창 설정온도 우측일중천창 작동여부 \ 0 57.0 NaN NaN NaN 0.0 1 60.0 NaN NaN NaN 0.0 2 61.0 NaN NaN NaN 0.0 3 63.0 NaN NaN NaN 0.0 4 61.0 NaN NaN NaN 0.0 ... ... ... ... ... ... 3257 100.0 NaN NaN NaN 100.0 3258 100.0 NaN NaN NaN 100.0 3259 100.0 NaN NaN NaN 100.0 3260 100.0 NaN NaN NaN 64.0 3261 100.0 NaN NaN NaN 0.0 우측일중천창 작동상태 좌측일중천창 개도 좌측일중천창 온도폭 좌측일중천창 설정온도 좌측일중천창 작동여부 \ 0 NaN NaN NaN NaN 0.0 1 NaN NaN NaN NaN 0.0 2 NaN NaN NaN NaN 0.0 3 NaN NaN NaN NaN 0.0 4 NaN NaN NaN NaN 0.0 ... ... ... ... ... ... 3257 NaN NaN NaN NaN 100.0 3258 NaN NaN NaN NaN 100.0 3259 NaN NaN NaN NaN 100.0 3260 NaN NaN NaN NaN 73.0 3261 NaN NaN NaN NaN 0.0 좌측일중천창 작동상태 천창 조사일 주차 생장길이 화방높이 줄기직경 엽장 엽폭 엽수 개화군 착과군 열매수 \ 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... ... .. ... ... ... ... ... .. .. .. ... ... ... 3257 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3258 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3259 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3260 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3261 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 최종화방차수 0 NaN 1 NaN 2 NaN 3 NaN 4 NaN ... ... 3257 NaN 3258 NaN 3259 NaN 3260 NaN 3261 NaN [3262 rows x 84 columns]
# 데이터 객체 정보 확인
data.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 3262 entries, 0 to 3261 Data columns (total 84 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 시설ID 3262 non-null object 1 시도 3262 non-null object 2 시군구 3262 non-null object 3 품목명 3262 non-null object 4 품종 0 non-null float64 5 재배면적 3262 non-null object 6 시설유형 0 non-null float64 7 재배형태 0 non-null float64 8 단동/연동 구분 0 non-null float64 9 수집일 3262 non-null object 10 외부온도 3259 non-null float64 11 외부습도 0 non-null float64 12 외부 일사량 3259 non-null object 13 외부풍향 0 non-null float64 14 외부풍속 3259 non-null float64 15 외부강우 0 non-null float64 16 강우감지 3259 non-null float64 17 내부온도 3260 non-null float64 18 내부습도 3260 non-null float64 19 내부CO2 3259 non-null float64 20 내부 일사량 0 non-null float64 21 토양EC 0 non-null float64 22 토양PH 0 non-null float64 23 지온 2899 non-null float64 24 지습 0 non-null float64 25 (양액)총배액 0 non-null float64 26 (양액)총급액 0 non-null float64 27 (양액)배액PH 0 non-null float64 28 (양액)공급PH 0 non-null float64 29 (양액)배액EC 0 non-null float64 30 (양액)공급EC 0 non-null float64 31 (양액)지온 0 non-null float64 32 (양액)지습 2899 non-null float64 33 배기팬작동여부 0 non-null float64 34 CO2발생장치작동여부 0 non-null float64 35 보광등작동여부 0 non-null float64 36 난방기작동상태 0 non-null float64 37 난방기작동여부 0 non-null float64 38 유동팬작동상태 0 non-null float64 39 유동팬작동여부 0 non-null float64 40 보온커튼작동상태 0 non-null float64 41 보온커튼작동여부 0 non-null float64 42 차광커튼작동상태 3259 non-null float64 43 차광커튼작동여부 0 non-null float64 44 우측삼중측창 작동여부 0 non-null float64 45 좌측삼중측창 작동여부 0 non-null float64 46 우측이중측창 작동여부 0 non-null float64 47 좌측이중측창 작동여부 0 non-null float64 48 우측일중측창 개도 0 non-null float64 49 우측일중측창 온도폭 0 non-null float64 50 우측일중측창 설정온도 0 non-null float64 51 우측일중측창 작동여부 0 non-null float64 52 우측일중측창 작동상태 0 non-null float64 53 좌측일중측창 개도 0 non-null float64 54 좌측일중측창 온도폭 0 non-null float64 55 좌측일중측창 설정온도 0 non-null float64 56 좌측일중측창 작동여부 3259 non-null float64 57 좌측일중측창 작동상태 0 non-null float64 58 측창 0 non-null float64 59 우측이중천창 작동여부 3259 non-null float64 60 좌측이중천창 작동여부 3259 non-null float64 61 우측일중천창 개도 0 non-null float64 62 우측일중천창 온도폭 0 non-null float64 63 우측일중천창 설정온도 0 non-null float64 64 우측일중천창 작동여부 3259 non-null float64 65 우측일중천창 작동상태 0 non-null float64 66 좌측일중천창 개도 0 non-null float64 67 좌측일중천창 온도폭 0 non-null float64 68 좌측일중천창 설정온도 0 non-null float64 69 좌측일중천창 작동여부 3259 non-null float64 70 좌측일중천창 작동상태 0 non-null float64 71 천창 0 non-null float64 72 조사일 466 non-null object 73 주차 466 non-null object 74 생장길이 443 non-null float64 75 화방높이 420 non-null float64 76 줄기직경 466 non-null float64 77 엽장 466 non-null float64 78 엽폭 466 non-null float64 79 엽수 305 non-null float64 80 개화군 466 non-null float64 81 착과군 466 non-null float64 82 열매수 443 non-null float64 83 최종화방차수 420 non-null float64 dtypes: float64(75), object(9) memory usage: 2.1+ MB
# '외부 일사량' 열에서 쉼표 제거 및 숫자 형식으로 변환
data['외부 일사량'] = data['외부 일사량'].str.replace(',', '').astype(float)
# 최대값 찾기 (정상변환 확인)
max_values = data['외부 일사량'].max()
print(max_values)
1050.0
# 열 이름 확인
print("CSV 파일의 모든 열 이름:")
print(data.columns)
CSV 파일의 모든 열 이름: Index(['시설ID', '시도', '시군구', '품목명', '품종', '재배면적', '시설유형', '재배형태', '단동/연동 구분', '수집일', '외부온도', '외부습도', '외부 일사량', '외부풍향', '외부풍속', '외부강우', '강우감지', '내부온도', '내부습도', '내부CO2', '내부 일사량', '토양EC', '토양PH', '지온', '지습', '(양액)총배액', '(양액)총급액', '(양액)배액PH', '(양액)공급PH', '(양액)배액EC', '(양액)공급EC', '(양액)지온', '(양액)지습', '배기팬작동여부', 'CO2발생장치작동여부', '보광등작동여부', '난방기작동상태', '난방기작동여부', '유동팬작동상태', '유동팬작동여부', '보온커튼작동상태', '보온커튼작동여부', '차광커튼작동상태', '차광커튼작동여부', '우측삼중측창 작동여부', '좌측삼중측창 작동여부', '우측이중측창 작동여부', '좌측이중측창 작동여부', '우측일중측창 개도', '우측일중측창 온도폭', '우측일중측창 설정온도', '우측일중측창 작동여부', '우측일중측창 작동상태', '좌측일중측창 개도', '좌측일중측창 온도폭', '좌측일중측창 설정온도', '좌측일중측창 작동여부', '좌측일중측창 작동상태', '측창', '우측이중천창 작동여부', '좌측이중천창 작동여부', '우측일중천창 개도', '우측일중천창 온도폭', '우측일중천창 설정온도', '우측일중천창 작동여부', '우측일중천창 작동상태', '좌측일중천창 개도', '좌측일중천창 온도폭', '좌측일중천창 설정온도', '좌측일중천창 작동여부', '좌측일중천창 작동상태', '천창', '조사일', '주차', '생장길이', '화방높이', '줄기직경', '엽장', '엽폭', '엽수', '개화군', '착과군', '열매수', '최종화방차수'], dtype='object')
# '수집일' 열을 날짜형으로 변환
data['수집일'] = pd.to_datetime(data['수집일'], format='%Y-%m-%d %H:%M:%S', errors='raise')
print(data)
시설ID 시도 시군구 품목명 품종 재배면적 시설유형 재배형태 단동/연동 구분 \ 0 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 1 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 2 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 4 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN ... ... ... ... ... .. ... ... ... ... 3257 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3258 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3259 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3260 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 3261 PF_0020760_01 전라북도 진안군 방울토마토 NaN 4,000 NaN NaN NaN 수집일 외부온도 외부습도 외부 일사량 외부풍향 외부풍속 외부강우 강우감지 내부온도 \ 0 2021-02-04 10:00:00 -1.0 NaN 461.0 NaN 2.0 NaN 0.0 12.0 1 2021-02-04 11:00:00 0.0 NaN 590.0 NaN 3.0 NaN 0.0 13.0 2 2021-02-04 12:00:00 0.0 NaN 655.0 NaN 2.0 NaN 0.0 16.0 3 2021-02-04 13:00:00 1.0 NaN 656.0 NaN 2.0 NaN 0.0 17.0 4 2021-02-04 14:00:00 1.0 NaN 586.0 NaN 2.0 NaN 0.0 16.0 ... ... ... ... ... ... ... ... ... ... 3257 2021-06-28 09:00:00 25.0 NaN 529.0 NaN 0.0 NaN 0.0 18.0 3258 2021-06-28 10:00:00 26.0 NaN 525.0 NaN 0.0 NaN 0.0 19.0 3259 2021-06-28 11:00:00 27.0 NaN 454.0 NaN 0.0 NaN 0.0 19.0 3260 2021-06-28 12:00:00 24.0 NaN 71.0 NaN 2.0 NaN 0.0 16.0 3261 2021-06-28 13:00:00 18.0 NaN 25.0 NaN 4.0 NaN 1.0 14.0 내부습도 내부CO2 내부 일사량 토양EC 토양PH 지온 지습 (양액)총배액 (양액)총급액 (양액)배액PH \ 0 48.0 362.0 NaN NaN NaN NaN NaN NaN NaN NaN 1 43.0 289.0 NaN NaN NaN NaN NaN NaN NaN NaN 2 41.0 259.0 NaN NaN NaN NaN NaN NaN NaN NaN 3 43.0 230.0 NaN NaN NaN NaN NaN NaN NaN NaN 4 43.0 245.0 NaN NaN NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... ... .. ... ... ... 3257 49.0 321.0 NaN NaN NaN 22.0 NaN NaN NaN NaN 3258 46.0 292.0 NaN NaN NaN 23.0 NaN NaN NaN NaN 3259 46.0 286.0 NaN NaN NaN 23.0 NaN NaN NaN NaN 3260 54.0 296.0 NaN NaN NaN 24.0 NaN NaN NaN NaN 3261 63.0 353.0 NaN NaN NaN 23.0 NaN NaN NaN NaN (양액)공급PH (양액)배액EC (양액)공급EC (양액)지온 (양액)지습 배기팬작동여부 CO2발생장치작동여부 \ 0 NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... ... ... 3257 NaN NaN NaN NaN 81.0 NaN NaN 3258 NaN NaN NaN NaN 83.0 NaN NaN 3259 NaN NaN NaN NaN 83.0 NaN NaN 3260 NaN NaN NaN NaN 81.0 NaN NaN 3261 NaN NaN NaN NaN 82.0 NaN NaN 보광등작동여부 난방기작동상태 난방기작동여부 유동팬작동상태 유동팬작동여부 보온커튼작동상태 보온커튼작동여부 \ 0 NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... ... ... 3257 NaN NaN NaN NaN NaN NaN NaN 3258 NaN NaN NaN NaN NaN NaN NaN 3259 NaN NaN NaN NaN NaN NaN NaN 3260 NaN NaN NaN NaN NaN NaN NaN 3261 NaN NaN NaN NaN NaN NaN NaN 차광커튼작동상태 차광커튼작동여부 우측삼중측창 작동여부 좌측삼중측창 작동여부 우측이중측창 작동여부 좌측이중측창 작동여부 \ 0 100.0 NaN NaN NaN NaN NaN 1 100.0 NaN NaN NaN NaN NaN 2 100.0 NaN NaN NaN NaN NaN 3 100.0 NaN NaN NaN NaN NaN 4 100.0 NaN NaN NaN NaN NaN ... ... ... ... ... ... ... 3257 100.0 NaN NaN NaN NaN NaN 3258 100.0 NaN NaN NaN NaN NaN 3259 94.0 NaN NaN NaN NaN NaN 3260 100.0 NaN NaN NaN NaN NaN 3261 100.0 NaN NaN NaN NaN NaN 우측일중측창 개도 우측일중측창 온도폭 우측일중측창 설정온도 우측일중측창 작동여부 우측일중측창 작동상태 좌측일중측창 개도 \ 0 NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN ... ... ... ... ... ... ... 3257 NaN NaN NaN NaN NaN NaN 3258 NaN NaN NaN NaN NaN NaN 3259 NaN NaN NaN NaN NaN NaN 3260 NaN NaN NaN NaN NaN NaN 3261 NaN NaN NaN NaN NaN NaN 좌측일중측창 온도폭 좌측일중측창 설정온도 좌측일중측창 작동여부 좌측일중측창 작동상태 측창 우측이중천창 작동여부 \ 0 NaN NaN 0.0 NaN NaN 57.0 1 NaN NaN 0.0 NaN NaN 60.0 2 NaN NaN 0.0 NaN NaN 62.0 3 NaN NaN 0.0 NaN NaN 67.0 4 NaN NaN 0.0 NaN NaN 65.0 ... ... ... ... ... .. ... 3257 NaN NaN 43.0 NaN NaN 100.0 3258 NaN NaN 45.0 NaN NaN 100.0 3259 NaN NaN 47.0 NaN NaN 100.0 3260 NaN NaN 14.0 NaN NaN 100.0 3261 NaN NaN 0.0 NaN NaN 100.0 좌측이중천창 작동여부 우측일중천창 개도 우측일중천창 온도폭 우측일중천창 설정온도 우측일중천창 작동여부 \ 0 57.0 NaN NaN NaN 0.0 1 60.0 NaN NaN NaN 0.0 2 61.0 NaN NaN NaN 0.0 3 63.0 NaN NaN NaN 0.0 4 61.0 NaN NaN NaN 0.0 ... ... ... ... ... ... 3257 100.0 NaN NaN NaN 100.0 3258 100.0 NaN NaN NaN 100.0 3259 100.0 NaN NaN NaN 100.0 3260 100.0 NaN NaN NaN 64.0 3261 100.0 NaN NaN NaN 0.0 우측일중천창 작동상태 좌측일중천창 개도 좌측일중천창 온도폭 좌측일중천창 설정온도 좌측일중천창 작동여부 \ 0 NaN NaN NaN NaN 0.0 1 NaN NaN NaN NaN 0.0 2 NaN NaN NaN NaN 0.0 3 NaN NaN NaN NaN 0.0 4 NaN NaN NaN NaN 0.0 ... ... ... ... ... ... 3257 NaN NaN NaN NaN 100.0 3258 NaN NaN NaN NaN 100.0 3259 NaN NaN NaN NaN 100.0 3260 NaN NaN NaN NaN 73.0 3261 NaN NaN NaN NaN 0.0 좌측일중천창 작동상태 천창 조사일 주차 생장길이 화방높이 줄기직경 엽장 엽폭 엽수 개화군 착과군 열매수 \ 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... ... .. ... ... ... ... ... .. .. .. ... ... ... 3257 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3258 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3259 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3260 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3261 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 최종화방차수 0 NaN 1 NaN 2 NaN 3 NaN 4 NaN ... ... 3257 NaN 3258 NaN 3259 NaN 3260 NaN 3261 NaN [3262 rows x 84 columns]
# 전체 요소 결측값 조회
missing_values = data.isna().sum()
print(missing_values)
시설ID 0 시도 0 시군구 0 품목명 0 품종 3262 ... 엽수 2957 개화군 2796 착과군 2796 열매수 2819 최종화방차수 2842 Length: 84, dtype: int64
- 독립 변수 feature = data[['외부온도', '외부 일사량', '외부풍속', '내부온도', '내부습도']]
- 종속 변수 target = data[['내부CO2']]
# '수집일'과 분석 요소 선택
date = data[['수집일']]
feature = data[['외부온도', '외부 일사량', '외부풍속', '내부온도', '내부습도']]
target = data[['내부CO2']]
# 열 합치기
data_selected = pd.concat([date, feature, target], axis=1)
# 선택된 열 확인
print(data_selected)
수집일 외부온도 외부 일사량 외부풍속 내부온도 내부습도 내부CO2 0 2021-02-04 10:00:00 -1.0 461.0 2.0 12.0 48.0 362.0 1 2021-02-04 11:00:00 0.0 590.0 3.0 13.0 43.0 289.0 2 2021-02-04 12:00:00 0.0 655.0 2.0 16.0 41.0 259.0 3 2021-02-04 13:00:00 1.0 656.0 2.0 17.0 43.0 230.0 4 2021-02-04 14:00:00 1.0 586.0 2.0 16.0 43.0 245.0 ... ... ... ... ... ... ... ... 3257 2021-06-28 09:00:00 25.0 529.0 0.0 18.0 49.0 321.0 3258 2021-06-28 10:00:00 26.0 525.0 0.0 19.0 46.0 292.0 3259 2021-06-28 11:00:00 27.0 454.0 0.0 19.0 46.0 286.0 3260 2021-06-28 12:00:00 24.0 71.0 2.0 16.0 54.0 296.0 3261 2021-06-28 13:00:00 18.0 25.0 4.0 14.0 63.0 353.0 [3262 rows x 7 columns]
결측값 개수를 조회하고 제거합니다.
# 선택된 항목의 결측값 조회
missing_values = data_selected.isna().sum()
print(missing_values)
수집일 0 외부온도 3 외부 일사량 3 외부풍속 3 내부온도 2 내부습도 2 내부CO2 3 dtype: int64
# 결측치 제거 (결측치가 있는 행을 제거)
data_cleaned = data_selected.dropna()
print(data_cleaned)
수집일 외부온도 외부 일사량 외부풍속 내부온도 내부습도 내부CO2 0 2021-02-04 10:00:00 -1.0 461.0 2.0 12.0 48.0 362.0 1 2021-02-04 11:00:00 0.0 590.0 3.0 13.0 43.0 289.0 2 2021-02-04 12:00:00 0.0 655.0 2.0 16.0 41.0 259.0 3 2021-02-04 13:00:00 1.0 656.0 2.0 17.0 43.0 230.0 4 2021-02-04 14:00:00 1.0 586.0 2.0 16.0 43.0 245.0 ... ... ... ... ... ... ... ... 3257 2021-06-28 09:00:00 25.0 529.0 0.0 18.0 49.0 321.0 3258 2021-06-28 10:00:00 26.0 525.0 0.0 19.0 46.0 292.0 3259 2021-06-28 11:00:00 27.0 454.0 0.0 19.0 46.0 286.0 3260 2021-06-28 12:00:00 24.0 71.0 2.0 16.0 54.0 296.0 3261 2021-06-28 13:00:00 18.0 25.0 4.0 14.0 63.0 353.0 [3259 rows x 7 columns]
수집일에 따른 요소별 그래프를 조회합니다.
# 그래프 조회
fig, axs = plt.subplots(6, 1, figsize=(16, 10), sharex=True)
# 각각의 서브플롯에 데이터를 그림
axs[0].plot(data_cleaned['수집일'], data_cleaned['외부온도'], label='외부온도', color='blue')
axs[1].plot(data_cleaned['수집일'], data_cleaned['외부 일사량'], label='외부 일사량', color='red')
axs[2].plot(data_cleaned['수집일'], data_cleaned['외부풍속'], label='외부풍속', color='green')
axs[3].plot(data_cleaned['수집일'], data_cleaned['내부온도'], label='내부온도', color='orange')
axs[4].plot(data_cleaned['수집일'], data_cleaned['내부습도'], label='내부습도', color='purple')
axs[5].plot(data_cleaned['수집일'], data_cleaned['내부CO2'], label='내부CO2', color='brown')
# 서브플롯 간의 간격 조정
plt.tight_layout()
# 각각의 서브플롯에 범례 추가
for ax in axs:
ax.legend()
# x축 레이블 설정
axs[-1].set_xlabel('수집일')
plt.show()
# 테스트셋 생성을 위해 수집일 항목 DROP
df = data_cleaned.drop(['수집일'], axis=1)
df
외부온도 | 외부 일사량 | 외부풍속 | 내부온도 | 내부습도 | 내부CO2 | |
---|---|---|---|---|---|---|
0 | -1.0 | 461.0 | 2.0 | 12.0 | 48.0 | 362.0 |
1 | 0.0 | 590.0 | 3.0 | 13.0 | 43.0 | 289.0 |
2 | 0.0 | 655.0 | 2.0 | 16.0 | 41.0 | 259.0 |
3 | 1.0 | 656.0 | 2.0 | 17.0 | 43.0 | 230.0 |
4 | 1.0 | 586.0 | 2.0 | 16.0 | 43.0 | 245.0 |
... | ... | ... | ... | ... | ... | ... |
3257 | 25.0 | 529.0 | 0.0 | 18.0 | 49.0 | 321.0 |
3258 | 26.0 | 525.0 | 0.0 | 19.0 | 46.0 | 292.0 |
3259 | 27.0 | 454.0 | 0.0 | 19.0 | 46.0 | 286.0 |
3260 | 24.0 | 71.0 | 2.0 | 16.0 | 54.0 | 296.0 |
3261 | 18.0 | 25.0 | 4.0 | 14.0 | 63.0 | 353.0 |
3259 rows × 6 columns
요소별 상관관계를 분석합니다.
# 상관 관계 계산
correlation_matrix = df.corr()
correlation_matrix
외부온도 | 외부 일사량 | 외부풍속 | 내부온도 | 내부습도 | 내부CO2 | |
---|---|---|---|---|---|---|
외부온도 | 1.000000 | 0.441088 | 0.193764 | 0.814439 | -0.489254 | -0.624993 |
외부 일사량 | 0.441088 | 1.000000 | 0.347255 | 0.768345 | -0.821978 | -0.532319 |
외부풍속 | 0.193764 | 0.347255 | 1.000000 | 0.341588 | -0.398901 | -0.402808 |
내부온도 | 0.814439 | 0.768345 | 0.341588 | 1.000000 | -0.723218 | -0.717340 |
내부습도 | -0.489254 | -0.821978 | -0.398901 | -0.723218 | 1.000000 | 0.544615 |
내부CO2 | -0.624993 | -0.532319 | -0.402808 | -0.717340 | 0.544615 | 1.000000 |
import seaborn as sns
import matplotlib.pyplot as plt
# 상관 관계 히트맵 그리기
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='Blues', fmt=".2f")
plt.title('Correlation Heatmap',fontsize=20, pad=20)
# x축과 y축의 라벨 제거
plt.xlabel('') # x축의 라벨 제거
plt.ylabel('') # y축의 라벨 제거
plt.show()
training_sample =int(len(df) *0.8)
train_set,test_set = df[:training_sample], df[training_sample:]
train_set,test_set
( 외부온도 외부 일사량 외부풍속 내부온도 내부습도 내부CO2 0 -1.0 461.0 2.0 12.0 48.0 362.0 1 0.0 590.0 3.0 13.0 43.0 289.0 2 0.0 655.0 2.0 16.0 41.0 259.0 3 1.0 656.0 2.0 17.0 43.0 230.0 4 1.0 586.0 2.0 16.0 43.0 245.0 ... ... ... ... ... ... ... 2602 10.0 0.0 0.0 10.0 61.0 442.0 2603 10.0 0.0 0.0 9.0 61.0 454.0 2604 9.0 0.0 0.0 9.0 61.0 471.0 2605 9.0 6.0 0.0 9.0 61.0 491.0 2606 10.0 91.0 0.0 9.0 61.0 492.0 [2607 rows x 6 columns], 외부온도 외부 일사량 외부풍속 내부온도 내부습도 내부CO2 2607 13.0 273.0 0.0 10.0 53.0 365.0 2608 16.0 477.0 0.0 12.0 47.0 344.0 2609 20.0 651.0 0.0 15.0 38.0 315.0 2610 23.0 805.0 0.0 18.0 27.0 297.0 2611 24.0 915.0 0.0 19.0 28.0 294.0 ... ... ... ... ... ... ... 3257 25.0 529.0 0.0 18.0 49.0 321.0 3258 26.0 525.0 0.0 19.0 46.0 292.0 3259 27.0 454.0 0.0 19.0 46.0 286.0 3260 24.0 71.0 2.0 16.0 54.0 296.0 3261 18.0 25.0 4.0 14.0 63.0 353.0 [652 rows x 6 columns])
# 데이터 정규화
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# 정규화 수행
scalers = {}
for i in train_set.columns:
scaler = MinMaxScaler(feature_range=(-1,1))
s_s = scaler.fit_transform(train_set[i].values.reshape(-1,1))
s_s = np.reshape(s_s, len(s_s))
scalers['scaler_'+ i] = scaler
train_set[i] = s_s
# 테스트 셋에도 같은 스케일러 적용
s_s = scaler.transform(test_set[i].values.resha