Spaces:
Build error
Build error
| import pandas as pd | |
| import geopandas as gpd | |
| import folium | |
| from sklearn.ensemble import IsolationForest | |
| import subprocess | |
| def load_geo_traffic_data(file_path): | |
| """ | |
| Загружает данные гео-трафика из CSV файла. | |
| CSV должен содержать колонки: latitude, longitude, traffic_intensity, timestamp. | |
| """ | |
| data = pd.read_csv(file_path) | |
| return data | |
| def analyze_geo_traffic(data, contamination=0.01): | |
| """ | |
| Преобразует DataFrame в GeoDataFrame и применяет алгоритм обнаружения аномалий. | |
| contamination – процент ожидаемых аномалий (например, 1%). | |
| Возвращает GeoDataFrame с добавленным столбцом 'anomaly' (-1: аномалия, 1: нормальные данные). | |
| """ | |
| # Создаем GeoDataFrame | |
| gdf = gpd.GeoDataFrame( | |
| data, | |
| geometry=gpd.points_from_xy(data.longitude, data.latitude) | |
| ) | |
| # Применяем Isolation Forest для анализа 'traffic_intensity' | |
| model = IsolationForest(contamination=contamination, random_state=42) | |
| data['anomaly'] = model.fit_predict(data[['traffic_intensity']]) | |
| # Добавляем информацию об аномалиях в GeoDataFrame | |
| gdf['anomaly'] = data['anomaly'] | |
| return gdf | |
| def create_traffic_map(gdf): | |
| """ | |
| Строит карту региона с отображением точек. | |
| Зеленый цвет – нормальный трафик, красный – обнаруженная аномалия. | |
| """ | |
| center_lat = gdf.geometry.y.mean() | |
| center_lon = gdf.geometry.x.mean() | |
| m = folium.Map(location=[center_lat, center_lon], zoom_start=10) | |
| for _, row in gdf.iterrows(): | |
| color = 'red' if row['anomaly'] == -1 else 'green' | |
| folium.CircleMarker( | |
| location=[row.geometry.y, row.geometry.x], | |
| radius=3, | |
| color=color, | |
| fill=True, | |
| fill_color=color, | |
| fill_opacity=0.7 | |
| ).add_to(m) | |
| return m | |
| def run_cybersecurity_check(ruby_script_path, log_file): | |
| """ | |
| Запускает Ruby-скрипт для анализа логов кибербезопасности. | |
| """ | |
| subprocess.run(["ruby", ruby_script_path, log_file]) | |
| if __name__ == "__main__": | |
| # Этап 1: Загрузка и анализ гео-трафика (от 0% до 100% выполнения) | |
| file_path = 'geo_traffic.csv' # Файл с данными трафика | |
| data = load_geo_traffic_data(file_path) | |
| gdf = analyze_geo_traffic(data, contamination=0.01) | |
| # Этап 2: Создание карты региона | |
| traffic_map = create_traffic_map(gdf) | |
| traffic_map.save("geo_traffic_map.html") | |
| print("Карта сохранена как 'geo_traffic_map.html'") | |
| # Этап 3: Вызов Ruby-скрипта для проверки кибербезопасности | |
| # Предположим, что лог-файл называется 'cyber_logs.json' | |
| ruby_script = 'cyber_security_check.rb' | |
| log_file = 'cyber_logs.json' | |
| run_cybersecurity_check(ruby_script, log_file) |