adding dashboard to the commit
This commit is contained in:
parent
f84ca4b517
commit
a014734a9d
21 changed files with 2259 additions and 1 deletions
133
PlantDashboard/data_handler.py
Normal file
133
PlantDashboard/data_handler.py
Normal file
|
@ -0,0 +1,133 @@
|
|||
import pandas as pd
|
||||
import json
|
||||
import csv
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
class DataHandler:
|
||||
def __init__(self):
|
||||
self.data_directory = "plant_data"
|
||||
self.ensure_data_directory()
|
||||
|
||||
def ensure_data_directory(self):
|
||||
"""Ensure the data directory exists"""
|
||||
if not os.path.exists(self.data_directory):
|
||||
os.makedirs(self.data_directory)
|
||||
|
||||
def save_prediction_data(self, parameters, prediction, filename=None):
|
||||
"""Save prediction data to CSV"""
|
||||
if filename is None:
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
filename = f"prediction_{timestamp}.csv"
|
||||
|
||||
filepath = os.path.join(self.data_directory, filename)
|
||||
|
||||
# Combine parameters and prediction results
|
||||
data = {**parameters}
|
||||
data.update({
|
||||
'final_height': prediction['final_height'],
|
||||
'growth_rate': prediction['growth_rate'],
|
||||
'health_score': prediction['health_score'],
|
||||
'optimal_conditions': prediction['optimal_conditions'],
|
||||
'yield': prediction['yield'],
|
||||
'timestamp': datetime.now().isoformat()
|
||||
})
|
||||
|
||||
# Convert to DataFrame
|
||||
df = pd.DataFrame([data])
|
||||
|
||||
try:
|
||||
df.to_csv(filepath, index=False)
|
||||
return filepath
|
||||
except Exception as e:
|
||||
print(f"Error saving data: {e}")
|
||||
return None
|
||||
|
||||
def load_historical_data(self):
|
||||
"""Load all historical prediction data"""
|
||||
data_files = [f for f in os.listdir(self.data_directory) if f.endswith('.csv')]
|
||||
|
||||
if not data_files:
|
||||
return pd.DataFrame()
|
||||
|
||||
all_data = []
|
||||
for file in data_files:
|
||||
filepath = os.path.join(self.data_directory, file)
|
||||
try:
|
||||
df = pd.read_csv(filepath)
|
||||
all_data.append(df)
|
||||
except Exception as e:
|
||||
print(f"Error loading {file}: {e}")
|
||||
|
||||
if all_data:
|
||||
return pd.concat(all_data, ignore_index=True)
|
||||
else:
|
||||
return pd.DataFrame()
|
||||
|
||||
def export_to_json(self, data, filename):
|
||||
"""Export data to JSON format"""
|
||||
filepath = os.path.join(self.data_directory, filename)
|
||||
|
||||
try:
|
||||
with open(filepath, 'w') as f:
|
||||
json.dump(data, f, indent=2, default=str)
|
||||
return filepath
|
||||
except Exception as e:
|
||||
print(f"Error exporting to JSON: {e}")
|
||||
return None
|
||||
|
||||
def import_from_json(self, filename):
|
||||
"""Import data from JSON format"""
|
||||
filepath = os.path.join(self.data_directory, filename)
|
||||
|
||||
try:
|
||||
with open(filepath, 'r') as f:
|
||||
data = json.load(f)
|
||||
return data
|
||||
except Exception as e:
|
||||
print(f"Error importing from JSON: {e}")
|
||||
return None
|
||||
|
||||
def get_plant_statistics(self, plant_type=None):
|
||||
"""Get statistics for plant predictions"""
|
||||
df = self.load_historical_data()
|
||||
|
||||
if df.empty:
|
||||
return {}
|
||||
|
||||
if plant_type:
|
||||
df = df[df['plant_type'] == plant_type]
|
||||
|
||||
if df.empty:
|
||||
return {}
|
||||
|
||||
stats = {
|
||||
'total_predictions': len(df),
|
||||
'avg_final_height': df['final_height'].mean(),
|
||||
'avg_health_score': df['health_score'].mean(),
|
||||
'avg_growth_rate': df['growth_rate'].mean(),
|
||||
'best_conditions': df['optimal_conditions'].max(),
|
||||
'worst_conditions': df['optimal_conditions'].min()
|
||||
}
|
||||
|
||||
return stats
|
||||
|
||||
def create_comparison_report(self, plant_types):
|
||||
"""Create a comparison report for different plant types"""
|
||||
df = self.load_historical_data()
|
||||
|
||||
if df.empty:
|
||||
return {}
|
||||
|
||||
report = {}
|
||||
for plant_type in plant_types:
|
||||
plant_data = df[df['plant_type'] == plant_type]
|
||||
if not plant_data.empty:
|
||||
report[plant_type] = {
|
||||
'count': len(plant_data),
|
||||
'avg_height': plant_data['final_height'].mean(),
|
||||
'avg_health': plant_data['health_score'].mean(),
|
||||
'success_rate': len(plant_data[plant_data['health_score'] > 70]) / len(plant_data) * 100
|
||||
}
|
||||
|
||||
return report
|
Loading…
Add table
Add a link
Reference in a new issue