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)