TS_Analysis / README.md
carperca23's picture
video
35c9324
|
Raw
History Blame Contribute Delete
10.6 kB
---
title: TS_Analysis
app_file: app.py
sdk: gradio
sdk_version: 5.32.0
tag: mcp-server-track
---
# 📈 Gradio MCP Time Series Trends Analyzer
[![Python](https://img.shields.io/badge/Python-3.8%2B-blue.svg)](https://python.org)
[![Gradio](https://img.shields.io/badge/Gradio-5.0%2B-orange.svg)](https://gradio.app)
[![MCP](https://img.shields.io/badge/MCP-Compatible-green.svg)](https://modelcontextprotocol.io)
[![Plotly](https://img.shields.io/badge/Plotly-Interactive-purple.svg)](https://plotly.com)
[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
A comprehensive **Gradio 5** web application with integrated **Model Context Protocol (MCP)** capabilities for advanced time series analysis. Features automatic trend detection, anomaly identification, seasonal pattern analysis, and forecasting with interactive visualizations.
## 🌟 Key Features
- **🌐 Web Interface**: Interactive Gradio 5 dashboard with file upload
- **🤖 MCP Integration**: Built-in MCP server functions for programmatic access
- **📊 Advanced Analysis**:
- Trend detection with configurable smoothing
- Multi-method anomaly detection (Z-score, IQR, DBSCAN)
- Seasonal pattern recognition
- Peak and valley identification
- Linear forecasting with confidence intervals
- **📈 Rich Visualizations**: 6 interactive Plotly charts in a single view
- **📁 File Support**: CSV and Excel file processing
- **🔍 Real-time Analysis**: Instant results with detailed reports
## Demostration Video
[Demo](https://youtu.be/tKOnjcp--cI)
## 🚀 Quick Start
### Prerequisites
```bash
Python 3.8+
pip package manager
```
### Installation
1. **Clone or download** the `gradio_trends_mcp.py` file
2. **Install dependencies**:
```bash
pip install gradio pandas numpy plotly scipy scikit-learn
```
3. **Run the application**:
```bash
python gradio_trends_mcp.py
```
4. **Access the interface**:
- Open your browser to `http://localhost:7860`
- The MCP server runs automatically in the background
## 🎯 Usage Guide
### 📊 Web Interface Analysis
1. **Upload Data**:
- Drag & drop CSV or Excel files
- Supported formats: `.csv`, `.xlsx`, `.xls`
2. **Configure Analysis**:
- **Column Name**: Specify which column to analyze (e.g., "sales", "temperature")
- **Trend Window**: Set smoothing window (3-30 periods)
- **Forecast Periods**: Number of future periods to predict (5-100)
- **Anomaly Method**: Choose detection algorithm:
- `zscore`: Standard deviation based (default)
- `iqr`: Interquartile range method
- `isolation`: DBSCAN clustering approach
3. **View Results**:
- Comprehensive analysis report in Markdown
- 6 interactive visualizations
- Unique analysis ID for future reference
### 🤖 MCP Functions
The application provides three main MCP functions accessible through the "MCP Functions" tab or external MCP clients:
#### 1. `analyze_trends`
Performs comprehensive time series analysis.
**Parameters:**
```json
{
"data": [100, 105, 98, 110, 115, 102, 120],
"dates": ["2024-01-01", "2024-01-02", ...], // optional
"window": 7,
"anomaly_method": "zscore"
}
```
**Returns:**
```json
{
"analysis_id": "mcp_analysis_20241201_143022",
"summary": {
"total_points": 100,
"anomalies_detected": 5,
"peaks_count": 12,
"valleys_count": 8,
"trend_strength": 0.0245
},
"results": { /* detailed analysis results */ }
}
```
#### 2. `get_analysis_report`
Retrieves a formatted report from a previous analysis.
**Parameters:**
```json
{
"analysis_id": "analysis_20241201_143022"
}
```
**Returns:** Markdown-formatted detailed report
#### 3. `forecast_series`
Generates forecasts with confidence intervals.
**Parameters:**
```json
{
"data": [100, 105, 98, 110, 115],
"periods": 30
}
```
**Returns:**
```json
{
"forecast_values": [118.2, 121.5, 124.8, ...],
"confidence_upper": [125.1, 128.9, 132.7, ...],
"confidence_lower": [111.3, 114.1, 116.9, ...],
"r_squared": 0.85,
"trend_slope": 3.2
}
```
## 📊 Analysis Capabilities
### 🔍 Trend Detection
- **Moving Average Smoothing**: Configurable window size (3-30 periods)
- **Slope Analysis**: Calculates trend strength and direction
- **Classification**: Categorizes periods as increasing, decreasing, or stable
- **Trend Strength**: Quantifies overall trend consistency
### ⚠️ Anomaly Detection
**Z-Score Method** (Default):
- Identifies points >2.5 standard deviations from mean
- Best for normally distributed data
**IQR Method**:
- Uses interquartile range (Q1-1.5×IQR, Q3+1.5×IQR)
- Robust against outliers
**Isolation Method**:
- DBSCAN clustering to identify outliers
- Effective for complex patterns
### 📅 Seasonality Analysis
- **Multiple Periods**: Tests for 7, 30, and 365-period cycles
- **Autocorrelation**: Measures periodic strength
- **Pattern Detection**: Identifies recurring seasonal patterns
- **Strength Quantification**: Measures seasonal influence
### 📈 Peak & Valley Detection
- **Prominence-Based**: Uses scipy's `find_peaks` with prominence thresholds
- **Adaptive Filtering**: Based on data standard deviation
- **Comprehensive Counts**: Tracks both peaks and valleys
### 🔮 Forecasting
- **Linear Regression**: Simple trend-based forecasting
- **Confidence Intervals**: 95% prediction bands
- **Model Metrics**: R-squared goodness of fit
- **Trend Projection**: Extrapolates historical trends
## 📁 Data Format Requirements
### CSV Files
```csv
date,sales,temperature,traffic
2024-01-01,1000,25.5,150
2024-01-02,1050,26.1,175
2024-01-03,980,24.8,145
```
### Excel Files
- Support for `.xlsx` and `.xls` formats
- First row should contain column headers
- Numeric data in the target column
### Date Handling
- Automatic detection of `date` or `fecha` columns
- Supports various date formats
- Falls back to sequential indexing if no dates provided
## 🎨 Visualization Features
The application generates 6 interactive Plotly charts:
1. **Original Time Series**: Raw data with full interactivity
2. **Trend Analysis**: Original vs. smoothed data
3. **Anomaly Detection**: Highlighted anomalous points
4. **Peaks & Valleys**: Marked extrema with symbols
5. **Forecasting**: Historical data + predictions + confidence bands
6. **Distribution**: Histogram of value distribution
All charts support:
- Zoom and pan
- Hover information
- Legend interaction
- Export capabilities
## 🔧 Technical Implementation
### Core Components
**TrendsAnalyzer Class**:
```python
class TrendsAnalyzer:
def detect_trends(self, data, window=7)
def detect_anomalies(self, data, method="zscore")
def detect_seasonality(self, data, periods=[7,30,365])
def find_peaks_valleys(self, data)
def generate_forecast(self, data, periods=30)
```
**Global Analysis Store**:
- In-memory storage for analysis results
- Unique ID generation for session tracking
- Enables report retrieval and result persistence
**MCP Integration**:
- Built-in MCP server capabilities with Gradio 5
- Programmatic access to all analysis functions
- JSON-based parameter passing and result return
### Dependencies
```txt
gradio>=5.0.0
pandas>=1.3.0
numpy>=1.21.0
plotly>=5.17.0
scipy>=1.7.0
scikit-learn>=1.0.0
```
## 🚨 Error Handling
The application includes comprehensive error handling for:
- **File Format Issues**: Unsupported file types, corrupted files
- **Column Validation**: Missing or invalid column names
- **Data Quality**: Insufficient data points, all-NaN series
- **Analysis Errors**: Invalid parameters, calculation failures
- **MCP Errors**: JSON parsing issues, parameter validation
Error messages are user-friendly and provide actionable guidance.
## 🔍 Usage Examples
### Basic Web Analysis
1. Upload a CSV file with sales data
2. Set column name to "sales"
3. Use default settings (window=7, method="zscore", periods=30)
4. Click "Analyze Time Series"
5. Review the 6-chart visualization and detailed report
### MCP Function Usage
```python
# Through the web interface MCP tab
data_input = '[100, 105, 98, 110, 115, 102, 120, 130, 125, 135]'
# Returns comprehensive analysis with ID
# Get detailed report
analysis_id = 'mcp_analysis_20241201_143022'
# Returns formatted Markdown report
# Generate forecast
forecast_data = '[120, 125, 130, 135, 140]'
periods = 10
# Returns forecast with confidence intervals
```
### Integration with External MCP Clients
```python
# Example with Claude or other MCP clients
response = await mcp_client.call_function(
"analyze_trends",
{
"data": [1000, 1050, 980, 1100, 1150],
"window": 5,
"anomaly_method": "iqr"
}
)
```
## 🚀 Deployment Options
### Local Development
```bash
python gradio_trends_mcp.py
# Access at http://localhost:7860
```
### Production Deployment
```bash
# With custom port and host
GRADIO_SERVER_PORT=8080 python gradio_trends_mcp.py
# Or modify the launch parameters in main()
interface.launch(
server_port=8080,
server_name="0.0.0.0",
share=True # For temporary public access
)
```
### Docker Deployment
```dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY gradio_trends_mcp.py .
EXPOSE 7860
CMD ["python", "gradio_trends_mcp.py"]
```
## 🤝 Contributing
Contributions are welcome! Areas for enhancement:
- [ ] Additional forecasting models (ARIMA, Prophet, LSTM)
- [ ] More anomaly detection algorithms
- [ ] Export functionality (PDF reports, CSV results)
- [ ] Database connectivity options
- [ ] Advanced statistical tests
- [ ] Multi-variate time series support
- [ ] Real-time data streaming
- [ ] Custom visualization themes
### Development Workflow
1. Fork the repository
2. Create a feature branch
3. Implement changes with proper error handling
4. Test with various data formats
5. Submit pull request with description
## 📄 License
MIT License - see LICENSE file for details.
## 🙏 Acknowledgments
- **Gradio Team** - Amazing web interface framework
- **Plotly** - Interactive visualization library
- **MCP Community** - Model Context Protocol development
- **SciPy/NumPy** - Scientific computing foundations
- **scikit-learn** - Machine learning algorithms
## 🔗 Related Resources
- [Gradio Documentation](https://gradio.app/docs)
- [MCP Specification](https://modelcontextprotocol.io)
- [Plotly Python](https://plotly.com/python/)
- [Time Series Analysis Guide](https://www.statsmodels.org/stable/tsa.html)
---
**Built with ❤️ for the data analysis community**
For questions, issues, or feature requests, please open an issue in the repository.