| 354 | |
| 355 | # Detect data time frequency |
| 356 | def detect_timeframe(df): |
| 357 | if len(df) < 2: |
| 358 | return "Unknown" |
| 359 | |
| 360 | time_diffs = [] |
| 361 | for i in range(1, min(10, len(df))): # Check first 10 time differences |
| 362 | diff = df['timestamps'].iloc[i] - df['timestamps'].iloc[i-1] |
| 363 | time_diffs.append(diff) |
| 364 | |
| 365 | if not time_diffs: |
| 366 | return "Unknown" |
| 367 | |
| 368 | # Calculate average time difference |
| 369 | avg_diff = sum(time_diffs, pd.Timedelta(0)) / len(time_diffs) |
| 370 | |
| 371 | # Convert to readable format |
| 372 | if avg_diff < pd.Timedelta(minutes=1): |
| 373 | return f"{avg_diff.total_seconds():.0f} seconds" |
| 374 | elif avg_diff < pd.Timedelta(hours=1): |
| 375 | return f"{avg_diff.total_seconds() / 60:.0f} minutes" |
| 376 | elif avg_diff < pd.Timedelta(days=1): |
| 377 | return f"{avg_diff.total_seconds() / 3600:.0f} hours" |
| 378 | else: |
| 379 | return f"{avg_diff.days} days" |
| 380 | |
| 381 | # Return data information |
| 382 | data_info = { |