geometrica / app.py
elasko-aim's picture
Rename app,py to app.py
6240ef6 verified
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)