jzou19950715 commited on
Commit
0a37365
·
verified ·
1 Parent(s): 9a8390a

Update components/analysis.py

Browse files
Files changed (1) hide show
  1. components/analysis.py +66 -47
components/analysis.py CHANGED
@@ -1,21 +1,13 @@
1
  # components/analysis.py
2
 
3
- from dataclasses import dataclass
4
- from typing import Any, Callable, Dict, List, Optional
5
  import pandas as pd
6
 
7
  from .statistical import StatisticalAnalyzer
8
  from .visualization import D3Visualizer
9
 
10
- @dataclass
11
- class AnalysisTool:
12
- """Analysis tool class"""
13
- name: str
14
- description: str
15
- func: Callable
16
-
17
  class DataAnalyzer:
18
- """Main analysis component"""
19
 
20
  def __init__(self):
21
  self.statistical = StatisticalAnalyzer()
@@ -30,42 +22,69 @@ class DataAnalyzer:
30
  """Analyze data based on type"""
31
  params = params or {}
32
 
33
- if analysis_type == "distribution":
34
- stats_result = self.statistical.analyze_distribution(
35
- df[params.get("column")]
36
- )
37
- viz_result = self.visualizer.create_interactive_plot(
38
- "distribution",
39
- {"values": df[params.get("column")].tolist()}
40
- )
41
- return {
42
- "statistics": stats_result,
43
- "visualization": viz_result
44
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
- elif analysis_type == "forecast":
47
- forecast_result = self.statistical.forecast_probability_cone(
48
- df[params.get("column")],
49
- steps=params.get("steps", 10)
50
- )
51
- viz_result = self.visualizer.create_interactive_plot(
52
- "probability_cone",
53
- forecast_result
54
- )
55
  return {
56
- "forecast": forecast_result,
57
- "visualization": viz_result
58
- }
59
-
60
- elif analysis_type == "correlation":
61
- corr_result = self.statistical.analyze_correlations(df)
62
- viz_result = self.visualizer.create_interactive_plot(
63
- "correlation",
64
- {"matrix": corr_result["correlation_matrix"]}
65
- )
66
- return {
67
- "correlations": corr_result,
68
- "visualization": viz_result
69
- }
70
-
71
- return {"error": "Unsupported analysis type"}
 
1
  # components/analysis.py
2
 
3
+ from typing import Dict, Optional
 
4
  import pandas as pd
5
 
6
  from .statistical import StatisticalAnalyzer
7
  from .visualization import D3Visualizer
8
 
 
 
 
 
 
 
 
9
  class DataAnalyzer:
10
+ """Main analysis component with datetime handling"""
11
 
12
  def __init__(self):
13
  self.statistical = StatisticalAnalyzer()
 
22
  """Analyze data based on type"""
23
  params = params or {}
24
 
25
+ try:
26
+ if analysis_type == "distribution":
27
+ # Select column or default to first numeric column
28
+ column = params.get("column")
29
+ if not column or column not in df.columns:
30
+ numeric_cols = df.select_dtypes(include=['number']).columns
31
+ if len(numeric_cols) == 0:
32
+ raise ValueError("No numeric columns found for distribution analysis")
33
+ column = numeric_cols[0]
34
+
35
+ values = df[column].dropna().values
36
+ stats_result = self.statistical.analyze_distribution(values)
37
+ viz_result = self.visualizer.create_interactive_plot(
38
+ "distribution",
39
+ {"values": values.tolist()}
40
+ )
41
+
42
+ return {
43
+ "statistics": stats_result,
44
+ "visualization": viz_result
45
+ }
46
+
47
+ elif analysis_type == "forecast":
48
+ # Handle time series data
49
+ column = params.get("column")
50
+ if not column or column not in df.columns:
51
+ numeric_cols = df.select_dtypes(include=['number']).columns
52
+ if len(numeric_cols) == 0:
53
+ raise ValueError("No numeric columns found for forecasting")
54
+ column = numeric_cols[0]
55
+
56
+ values = df[column].dropna().values
57
+ forecast_result = self.statistical.forecast_probability_cone(
58
+ values,
59
+ steps=params.get("steps", 10)
60
+ )
61
+ viz_result = self.visualizer.create_interactive_plot(
62
+ "forecast",
63
+ forecast_result
64
+ )
65
+
66
+ return {
67
+ "forecast": forecast_result,
68
+ "visualization": viz_result
69
+ }
70
+
71
+ elif analysis_type == "correlation":
72
+ # Analyze correlations (datetime columns are handled in StatisticalAnalyzer)
73
+ corr_result = self.statistical.analyze_correlations(df)
74
+ viz_result = self.visualizer.create_interactive_plot(
75
+ "correlation",
76
+ {"matrix": corr_result["correlation_matrix"]}
77
+ )
78
+
79
+ return {
80
+ "correlations": corr_result,
81
+ "visualization": viz_result
82
+ }
83
+
84
+ return {"error": "Unsupported analysis type"}
85
 
86
+ except Exception as e:
 
 
 
 
 
 
 
 
87
  return {
88
+ "error": str(e),
89
+ "visualization": f"<div class='error'>Error in analysis: {str(e)}</div>"
90
+ }