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) |