jzou19950715's picture
Create components/analysis.py
1b8822c verified
raw
history blame
2.2 kB
# components/analysis.py
from dataclasses import dataclass
from typing import Any, Callable, Dict, List, Optional
import pandas as pd
from .statistical import StatisticalAnalyzer
from .visualization import D3Visualizer
@dataclass
class AnalysisTool:
"""Analysis tool class"""
name: str
description: str
func: Callable
class DataAnalyzer:
"""Main analysis component"""
def __init__(self):
self.statistical = StatisticalAnalyzer()
self.visualizer = D3Visualizer()
def analyze_data(
self,
df: pd.DataFrame,
analysis_type: str,
params: Optional[Dict] = None
) -> Dict:
"""Analyze data based on type"""
params = params or {}
if analysis_type == "distribution":
stats_result = self.statistical.analyze_distribution(
df[params.get("column")]
)
viz_result = self.visualizer.create_interactive_plot(
"distribution",
{"values": df[params.get("column")].tolist()}
)
return {
"statistics": stats_result,
"visualization": viz_result
}
elif analysis_type == "forecast":
forecast_result = self.statistical.forecast_probability_cone(
df[params.get("column")],
steps=params.get("steps", 10)
)
viz_result = self.visualizer.create_interactive_plot(
"probability_cone",
forecast_result
)
return {
"forecast": forecast_result,
"visualization": viz_result
}
elif analysis_type == "correlation":
corr_result = self.statistical.analyze_correlations(df)
viz_result = self.visualizer.create_interactive_plot(
"correlation",
{"matrix": corr_result["correlation_matrix"]}
)
return {
"correlations": corr_result,
"visualization": viz_result
}
return {"error": "Unsupported analysis type"}