카테고리 없음

33. TIL) 스마트 팜 팀 프로젝트(2)

kaseomi 2025. 2. 5. 20:37
728x90
#드라이브 마운틴
from google.colab import drive
drive.mount('/content/drive')
# 라이브러리 실행
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import koreanize_matplotlib

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
from sklearn.linear_model import LinearRegression, LogisticRegression
#데이터셋 불러오기
prod_df = pd.read_csv('/content/22_생산정보.csv', encoding='cp949')
grow_df = pd.read_csv('/content/22_생육정보.csv', encoding='cp949')
eguse_df = pd.read_csv('/content/22_에너지사용정보.csv', encoding='cp949')
env_df = pd.read_csv('/content/22_환경정보.csv', encoding='cp949')
#생산정보 결측치 확인 및 제거
prod_df.isnull().sum()
prod_df[['measDate','farm_cde','itemGrade']].isnull().sum()
prod_df[['outtrn']].fillna(0)
None
#생육정보 결측치 확인 및 제거
grow_df.isnull().sum()
grow_df[['measDate','farm_cde','itemCode']].isnull().sum()
grow_df[['measDate','farm_cde','itemCode']].dropna()
None
eguse_df.isnull().sum()#에너지사용정보 결측치 없음
env_df.dropna()#환경정보 결측치 확인 및 제거
None
# 그래프 스타일 설정
sns.set(style="whitegrid", font="NanumGothic")

# 박스플롯 그리기
plt.figure(figsize=(6, 6))
sns.boxplot(x="farm_cde", y=prod_df["outtrn"],hue="itemGrade", data=prod_df)
plt.title("수확량 (outtrn) 이상치")
plt.ylabel("수확량 (kg)")

# 그래프 출력
plt.show()
None

수확량 이상치 데이터

# 날짜 컬럼을 datetime 형식으로 변환
env_df["measDate"] = pd.to_datetime(env_df["measDate"])

# 날짜 리스트 정의
date_list = [
    "2022-10-04", "2022-10-10", "2022-10-17", "2022-10-24", "2022-10-31",
    "2022-11-07", "2022-11-14", "2022-11-21", "2022-11-28", "2022-12-05", "2022-12-12"
]

# 주어진 날짜로 시작하는 데이터만 필터링 (초 단위 유지 X)
filtered_df = env_df[env_df["measDate"].dt.strftime("%Y-%m-%d").isin(date_list)]

# HI 값 필터링
filtered_df = filtered_df[filtered_df["fatrCode"] == "IR"]

# 초 단위 제거 (날짜만 남기기)
filtered_df["measDate"] = filtered_df["measDate"].dt.strftime("%Y-%m-%d")

# senVal을 float로 변환 (문자열이 포함되어 있으면 NaN 처리)
filtered_df["senVal"] = pd.to_numeric(filtered_df["senVal"], errors="coerce")

# NaN 값 제거
filtered_df = filtered_df.dropna(subset=["senVal"])

# 날짜별 그룹화하여 평균 계산
grouped_df = filtered_df.groupby(["measDate", "fatrCode"], as_index=False)["senVal"].mean()

# 결과 출력
grouped_df

출력값