elasko-aim commited on
Commit
9d51394
·
verified ·
1 Parent(s): 5f281b8

Create app,py

Browse files
Files changed (1) hide show
  1. app,py +77 -0
app,py ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import geopandas as gpd
3
+ import folium
4
+ from sklearn.ensemble import IsolationForest
5
+ import subprocess
6
+
7
+ def load_geo_traffic_data(file_path):
8
+ """
9
+ Загружает данные гео-трафика из CSV файла.
10
+ CSV должен содержать колонки: latitude, longitude, traffic_intensity, timestamp.
11
+ """
12
+ data = pd.read_csv(file_path)
13
+ return data
14
+
15
+ def analyze_geo_traffic(data, contamination=0.01):
16
+ """
17
+ Преобразует DataFrame в GeoDataFrame и применяет алгоритм обнаружения аномалий.
18
+ contamination – процент ожидаемых аномалий (например, 1%).
19
+ Возвращает GeoDataFrame с добавленным столбцом 'anomaly' (-1: аномалия, 1: нормальные данные).
20
+ """
21
+ # Создаем GeoDataFrame
22
+ gdf = gpd.GeoDataFrame(
23
+ data,
24
+ geometry=gpd.points_from_xy(data.longitude, data.latitude)
25
+ )
26
+
27
+ # Применяем Isolation Forest для анализа 'traffic_intensity'
28
+ model = IsolationForest(contamination=contamination, random_state=42)
29
+ data['anomaly'] = model.fit_predict(data[['traffic_intensity']])
30
+
31
+ # Добавляем информацию об аномалиях в GeoDataFrame
32
+ gdf['anomaly'] = data['anomaly']
33
+ return gdf
34
+
35
+ def create_traffic_map(gdf):
36
+ """
37
+ Строит карту региона с отображением точек.
38
+ Зеленый цвет – нормальный трафик, красный – обнаруженная аномалия.
39
+ """
40
+ center_lat = gdf.geometry.y.mean()
41
+ center_lon = gdf.geometry.x.mean()
42
+ m = folium.Map(location=[center_lat, center_lon], zoom_start=10)
43
+
44
+ for _, row in gdf.iterrows():
45
+ color = 'red' if row['anomaly'] == -1 else 'green'
46
+ folium.CircleMarker(
47
+ location=[row.geometry.y, row.geometry.x],
48
+ radius=3,
49
+ color=color,
50
+ fill=True,
51
+ fill_color=color,
52
+ fill_opacity=0.7
53
+ ).add_to(m)
54
+ return m
55
+
56
+ def run_cybersecurity_check(ruby_script_path, log_file):
57
+ """
58
+ Запускает Ruby-скрипт для анализа логов кибербезопасности.
59
+ """
60
+ subprocess.run(["ruby", ruby_script_path, log_file])
61
+
62
+ if __name__ == "__main__":
63
+ # Этап 1: Загрузка и анализ гео-трафика (от 0% до 100% выполнения)
64
+ file_path = 'geo_traffic.csv' # Файл с данными трафика
65
+ data = load_geo_traffic_data(file_path)
66
+ gdf = analyze_geo_traffic(data, contamination=0.01)
67
+
68
+ # Этап 2: Создание карты региона
69
+ traffic_map = create_traffic_map(gdf)
70
+ traffic_map.save("geo_traffic_map.html")
71
+ print("Карта сохранена как 'geo_traffic_map.html'")
72
+
73
+ # Этап 3: Вызов Ruby-скрипта для проверки кибербезопасности
74
+ # Предположим, что лог-файл называется 'cyber_logs.json'
75
+ ruby_script = 'cyber_security_check.rb'
76
+ log_file = 'cyber_logs.json'
77
+ run_cybersecurity_check(ruby_script, log_file)