Spaces:
Sleeping
Sleeping
| # UAP Analytics Utilities Package | |
| This package contains centralized utilities for the UAP Data Analysis Tool, designed to improve code organization, performance, and maintainability. | |
| ## Components | |
| ### 1. Visualization (`visualization.py`) | |
| Centralized plotting functions with caching for improved performance. | |
| ```python | |
| from utils import UAP_Visualizer | |
| # Create a treemap | |
| fig = UAP_Visualizer.plot_treemap(df, 'category_column', top_n=20) | |
| # Create a histogram | |
| fig = UAP_Visualizer.plot_hist(df, 'numeric_column', bins=30) | |
| # Create a line plot | |
| fig = UAP_Visualizer.plot_line(df, 'date_column', ['value1', 'value2']) | |
| ``` | |
| ### 2. Data Processing (`data_processing.py`) | |
| Centralized data filtering, loading, and transformation utilities. | |
| ```python | |
| from utils import DataProcessor | |
| # Filter dataframe with UI | |
| filtered_df = DataProcessor.filter_dataframe(df) | |
| # Load data with caching | |
| data = DataProcessor.load_data('file.h5') | |
| # Parse JSON responses in parallel | |
| parsed = DataProcessor.parse_responses_parallel(responses_dict) | |
| # Find lat/lon columns | |
| lat_col, lon_col = DataProcessor.find_lat_lon_columns(df) | |
| ``` | |
| ### 3. Session State Management (`session_manager.py`) | |
| Centralized session state handling for Streamlit apps. | |
| ```python | |
| from utils import SessionStateManager | |
| # Initialize session state | |
| SessionStateManager.initialize() | |
| # Get/Set values | |
| value = SessionStateManager.get('key', default_value) | |
| SessionStateManager.set('key', value) | |
| # Update multiple values | |
| SessionStateManager.update({'key1': value1, 'key2': value2}) | |
| # Clear specific keys or all | |
| SessionStateManager.clear(['key1', 'key2']) | |
| ``` | |
| ### 4. API Key Validation (`api_validators.py`) | |
| Cached API key validation to reduce redundant API calls. | |
| ```python | |
| from utils import APIKeyValidator | |
| # Validate individual keys | |
| is_valid = APIKeyValidator.validate_openai_key(api_key) | |
| is_valid = APIKeyValidator.validate_cohere_key(api_key) | |
| is_valid = APIKeyValidator.validate_gemini_key(api_key) | |
| # Validate multiple keys | |
| results = APIKeyValidator.validate_all_keys({ | |
| 'openai': openai_key, | |
| 'cohere': cohere_key, | |
| 'gemini': gemini_key | |
| }) | |
| ``` | |
| ### 5. Memory Management (`memory_manager.py`) | |
| Utilities for handling large datasets efficiently. | |
| ```python | |
| from utils import MemoryManager | |
| # Get memory usage | |
| stats = MemoryManager.get_memory_usage() | |
| # Process large file in chunks | |
| iterator = MemoryManager.get_data_iterator('large_file.h5', chunksize=10000) | |
| result = MemoryManager.process_data_in_chunks(iterator, process_func) | |
| # Optimize DataFrame memory | |
| optimized_df = MemoryManager.optimize_dataframe_memory(df) | |
| # Sample large dataset | |
| sample = MemoryManager.sample_large_dataset('huge_file.h5', sample_size=10000) | |
| ``` | |
| ### 6. Pipeline Architecture (`pipeline.py`) | |
| ETL pipeline pattern for structured data processing. | |
| ```python | |
| from utils import UAP_Pipeline, PipelineComponents, create_uap_analysis_pipeline | |
| # Create custom pipeline | |
| pipeline = UAP_Pipeline("My Pipeline") | |
| pipeline.add_extractor("Load Data", PipelineComponents.extract_from_file, use_chunks=True) | |
| pipeline.add_transformer("Parse JSON", PipelineComponents.parse_json_responses) | |
| pipeline.add_validator("Validate Schema", PipelineComponents.validate_schema, required_columns=['date']) | |
| pipeline.add_loader("Save Cache", PipelineComponents.save_to_cache, cache_key='results') | |
| # Run pipeline | |
| result = pipeline.run(initial_data='data.csv') | |
| # Use pre-built pipeline | |
| standard_pipeline = create_uap_analysis_pipeline() | |
| result = standard_pipeline.run('uap_data.h5') | |
| ``` | |
| ### 7. Logging Configuration (`logger_config.py`) | |
| Centralized logging with decorators for performance tracking. | |
| ```python | |
| from utils import setup_logging, log_performance, log_errors | |
| # Setup custom logging | |
| logger = setup_logging(log_level="DEBUG", log_file="app.log") | |
| # Use decorators | |
| @log_performance | |
| @log_errors | |
| def process_data(df): | |
| # Function will log execution time and any errors | |
| return df.groupby('category').mean() | |
| ``` | |
| ## GPU Acceleration | |
| The utils package automatically detects and uses GPU acceleration when available: | |
| ```python | |
| # In app.py | |
| import torch | |
| GPU_AVAILABLE = torch.cuda.is_available() | |
| if GPU_AVAILABLE: | |
| import cuml.accel | |
| cuml.accel.install() | |
| ``` | |
| ## Best Practices | |
| 1. **Always initialize session state** at the beginning of your Streamlit app: | |
| ```python | |
| SessionStateManager.initialize() | |
| ``` | |
| 2. **Use cached functions** for expensive operations: | |
| ```python | |
| @st.cache_data | |
| def expensive_computation(data): | |
| return DataProcessor.parse_responses_parallel(data) | |
| ``` | |
| 3. **Handle large files** with memory manager: | |
| ```python | |
| # Check file size first | |
| if file_size_gb > 1: | |
| data = MemoryManager.sample_large_dataset(file_path) | |
| else: | |
| data = DataProcessor.load_data(file_path) | |
| ``` | |
| 4. **Validate API keys** before use: | |
| ```python | |
| if not SessionStateManager.get('api_key_validated'): | |
| if APIKeyValidator.validate_openai_key(key): | |
| SessionStateManager.set('api_key_validated', True) | |
| ``` | |
| 5. **Use pipelines** for complex data processing: | |
| ```python | |
| pipeline = create_uap_analysis_pipeline() | |
| processed_data = pipeline.run(raw_data_path) | |
| ``` | |
| ## Performance Tips | |
| - Enable GPU acceleration when available for faster processing | |
| - Use chunked processing for files larger than 1GB | |
| - Cache visualization results for repeated plots | |
| - Validate API keys once and cache results | |
| - Use parallel processing for JSON parsing | |
| - Optimize DataFrame memory for large datasets | |
| ## Debugging | |
| View session state summary: | |
| ```python | |
| with st.expander("Debug Info"): | |
| st.json(SessionStateManager.get_state_summary()) | |
| ``` | |
| Check memory usage: | |
| ```python | |
| stats = MemoryManager.get_memory_usage() | |
| st.metric("Memory", f"{stats['rss_mb']:.1f} MB") | |
| ``` |