init
This commit is contained in:
commit
31d550bc89
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.cache
|
||||||
|
.py
|
||||||
|
compile_commands.json
|
||||||
|
build
|
||||||
13
CMakeLists.txt
Normal file
13
CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
project(white-screen-qt)
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} main.cpp)
|
||||||
|
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
|
||||||
|
|
||||||
|
find_package(Qt5 COMPONENTS Widgets Gui REQUIRED)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets Qt5::Gui)
|
||||||
|
|
||||||
|
qt5_wrap_cpp(${PROJECT_NAME} main.cpp)
|
||||||
7
conanfile.txt
Normal file
7
conanfile.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[requires]
|
||||||
|
qt/6.8.3
|
||||||
|
[generators]
|
||||||
|
CMakeDeps
|
||||||
|
CMakeToolchain
|
||||||
|
[layout]
|
||||||
|
cmake_layout
|
||||||
BIN
delay_distribution_ci_95.png
Normal file
BIN
delay_distribution_ci_95.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 155 KiB |
BIN
delay_distribution_ci_99.png
Normal file
BIN
delay_distribution_ci_99.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 167 KiB |
527
delays.csv
Normal file
527
delays.csv
Normal file
@ -0,0 +1,527 @@
|
|||||||
|
0,40.04
|
||||||
|
1,45.29
|
||||||
|
2,42.51
|
||||||
|
3,47.70
|
||||||
|
4,41.81
|
||||||
|
5,38.94
|
||||||
|
6,47.21
|
||||||
|
7,44.49
|
||||||
|
8,47.85
|
||||||
|
9,37.17
|
||||||
|
10,35.34
|
||||||
|
11,38.51
|
||||||
|
12,45.75
|
||||||
|
13,42.85
|
||||||
|
14,42.02
|
||||||
|
15,45.20
|
||||||
|
16,42.42
|
||||||
|
17,48.65
|
||||||
|
18,39.86
|
||||||
|
19,44.28
|
||||||
|
20,43.61
|
||||||
|
21,36.93
|
||||||
|
22,49.29
|
||||||
|
23,44.65
|
||||||
|
24,38.64
|
||||||
|
25,36.87
|
||||||
|
26,45.01
|
||||||
|
27,36.96
|
||||||
|
28,44.16
|
||||||
|
29,44.49
|
||||||
|
30,48.80
|
||||||
|
31,41.11
|
||||||
|
32,47.27
|
||||||
|
33,48.46
|
||||||
|
34,38.73
|
||||||
|
35,41.96
|
||||||
|
36,43.09
|
||||||
|
37,36.38
|
||||||
|
38,36.53
|
||||||
|
39,38.64
|
||||||
|
40,43.95
|
||||||
|
41,40.16
|
||||||
|
42,43.24
|
||||||
|
43,39.37
|
||||||
|
44,40.53
|
||||||
|
45,39.79
|
||||||
|
46,49.99
|
||||||
|
47,44.13
|
||||||
|
48,40.31
|
||||||
|
49,42.57
|
||||||
|
50,42.79
|
||||||
|
51,39.92
|
||||||
|
52,38.02
|
||||||
|
53,36.32
|
||||||
|
54,38.48
|
||||||
|
55,38.57
|
||||||
|
56,38.88
|
||||||
|
57,40.04
|
||||||
|
58,44.16
|
||||||
|
59,45.56
|
||||||
|
60,46.75
|
||||||
|
61,44.95
|
||||||
|
62,37.17
|
||||||
|
63,46.30
|
||||||
|
64,42.42
|
||||||
|
65,37.72
|
||||||
|
66,44.01
|
||||||
|
67,48.19
|
||||||
|
68,42.42
|
||||||
|
69,38.54
|
||||||
|
70,37.69
|
||||||
|
71,41.90
|
||||||
|
72,39.00
|
||||||
|
73,43.37
|
||||||
|
74,41.60
|
||||||
|
75,39.61
|
||||||
|
76,33.87
|
||||||
|
77,39.98
|
||||||
|
78,42.27
|
||||||
|
79,38.27
|
||||||
|
80,42.36
|
||||||
|
81,40.62
|
||||||
|
82,41.81
|
||||||
|
83,39.83
|
||||||
|
84,41.99
|
||||||
|
85,45.07
|
||||||
|
86,35.16
|
||||||
|
87,49.29
|
||||||
|
88,41.38
|
||||||
|
89,41.60
|
||||||
|
90,43.91
|
||||||
|
91,40.99
|
||||||
|
92,44.19
|
||||||
|
93,42.48
|
||||||
|
94,40.59
|
||||||
|
95,34.79
|
||||||
|
96,40.74
|
||||||
|
97,43.76
|
||||||
|
98,39.89
|
||||||
|
99,40.01
|
||||||
|
100,41.11
|
||||||
|
101,40.22
|
||||||
|
102,46.42
|
||||||
|
103,41.69
|
||||||
|
104,38.91
|
||||||
|
105,34.91
|
||||||
|
106,47.21
|
||||||
|
107,41.38
|
||||||
|
108,42.63
|
||||||
|
109,35.64
|
||||||
|
110,41.78
|
||||||
|
111,35.77
|
||||||
|
112,41.84
|
||||||
|
113,46.02
|
||||||
|
114,41.29
|
||||||
|
115,36.35
|
||||||
|
116,45.59
|
||||||
|
117,42.79
|
||||||
|
118,36.83
|
||||||
|
119,41.11
|
||||||
|
120,39.28
|
||||||
|
121,47.58
|
||||||
|
122,43.98
|
||||||
|
123,44.22
|
||||||
|
124,38.42
|
||||||
|
125,36.62
|
||||||
|
126,41.63
|
||||||
|
127,43.82
|
||||||
|
128,49.10
|
||||||
|
129,36.35
|
||||||
|
130,39.52
|
||||||
|
131,41.60
|
||||||
|
132,40.86
|
||||||
|
133,36.07
|
||||||
|
134,40.16
|
||||||
|
135,43.37
|
||||||
|
136,40.56
|
||||||
|
137,38.54
|
||||||
|
138,35.77
|
||||||
|
139,41.05
|
||||||
|
140,45.38
|
||||||
|
141,43.46
|
||||||
|
142,46.78
|
||||||
|
143,42.02
|
||||||
|
144,45.26
|
||||||
|
145,39.49
|
||||||
|
146,38.67
|
||||||
|
147,39.92
|
||||||
|
148,43.95
|
||||||
|
149,40.04
|
||||||
|
150,43.12
|
||||||
|
151,38.09
|
||||||
|
152,40.41
|
||||||
|
153,35.55
|
||||||
|
154,39.70
|
||||||
|
155,39.83
|
||||||
|
156,46.17
|
||||||
|
157,39.22
|
||||||
|
158,39.52
|
||||||
|
159,37.60
|
||||||
|
160,46.94
|
||||||
|
161,42.94
|
||||||
|
162,41.08
|
||||||
|
163,39.09
|
||||||
|
164,46.33
|
||||||
|
165,41.38
|
||||||
|
166,35.68
|
||||||
|
167,38.85
|
||||||
|
168,36.07
|
||||||
|
169,41.11
|
||||||
|
170,48.40
|
||||||
|
171,41.56
|
||||||
|
172,42.63
|
||||||
|
173,41.87
|
||||||
|
174,40.92
|
||||||
|
175,38.24
|
||||||
|
176,36.29
|
||||||
|
177,47.52
|
||||||
|
178,39.73
|
||||||
|
179,38.76
|
||||||
|
180,36.99
|
||||||
|
181,37.11
|
||||||
|
182,42.14
|
||||||
|
183,40.31
|
||||||
|
184,41.38
|
||||||
|
185,36.56
|
||||||
|
186,45.93
|
||||||
|
187,40.13
|
||||||
|
188,38.48
|
||||||
|
189,39.55
|
||||||
|
190,38.70
|
||||||
|
191,38.94
|
||||||
|
192,39.18
|
||||||
|
193,39.28
|
||||||
|
194,40.50
|
||||||
|
195,41.60
|
||||||
|
196,39.67
|
||||||
|
197,41.72
|
||||||
|
198,39.95
|
||||||
|
199,43.06
|
||||||
|
200,36.10
|
||||||
|
201,35.34
|
||||||
|
202,42.66
|
||||||
|
203,36.99
|
||||||
|
204,36.10
|
||||||
|
205,35.10
|
||||||
|
206,43.15
|
||||||
|
207,35.22
|
||||||
|
208,40.50
|
||||||
|
209,40.71
|
||||||
|
210,37.69
|
||||||
|
211,40.89
|
||||||
|
212,35.86
|
||||||
|
213,42.97
|
||||||
|
214,39.06
|
||||||
|
215,42.33
|
||||||
|
216,41.60
|
||||||
|
217,42.69
|
||||||
|
218,36.71
|
||||||
|
219,42.79
|
||||||
|
220,37.99
|
||||||
|
221,38.06
|
||||||
|
222,51.39
|
||||||
|
223,39.55
|
||||||
|
224,41.60
|
||||||
|
225,35.80
|
||||||
|
226,40.95
|
||||||
|
227,43.30
|
||||||
|
228,44.49
|
||||||
|
229,41.66
|
||||||
|
230,36.71
|
||||||
|
231,48.98
|
||||||
|
232,45.17
|
||||||
|
233,41.44
|
||||||
|
234,34.67
|
||||||
|
235,41.81
|
||||||
|
236,35.83
|
||||||
|
237,43.03
|
||||||
|
238,38.09
|
||||||
|
239,35.34
|
||||||
|
240,42.51
|
||||||
|
241,42.69
|
||||||
|
242,42.76
|
||||||
|
243,50.02
|
||||||
|
244,41.08
|
||||||
|
245,42.45
|
||||||
|
246,41.50
|
||||||
|
247,47.67
|
||||||
|
248,44.95
|
||||||
|
249,41.14
|
||||||
|
250,36.16
|
||||||
|
251,35.28
|
||||||
|
252,43.40
|
||||||
|
253,48.58
|
||||||
|
254,41.72
|
||||||
|
255,40.80
|
||||||
|
256,49.13
|
||||||
|
257,41.38
|
||||||
|
258,35.34
|
||||||
|
259,38.42
|
||||||
|
260,37.41
|
||||||
|
261,37.60
|
||||||
|
262,40.80
|
||||||
|
263,44.89
|
||||||
|
264,38.91
|
||||||
|
265,36.90
|
||||||
|
266,40.13
|
||||||
|
267,43.27
|
||||||
|
268,36.47
|
||||||
|
269,43.55
|
||||||
|
270,38.57
|
||||||
|
271,42.63
|
||||||
|
272,41.69
|
||||||
|
273,48.00
|
||||||
|
274,40.22
|
||||||
|
275,39.43
|
||||||
|
276,40.71
|
||||||
|
277,40.74
|
||||||
|
278,35.86
|
||||||
|
279,38.06
|
||||||
|
280,38.12
|
||||||
|
281,46.26
|
||||||
|
282,39.34
|
||||||
|
283,41.50
|
||||||
|
284,37.66
|
||||||
|
285,37.84
|
||||||
|
286,34.09
|
||||||
|
287,43.15
|
||||||
|
288,43.40
|
||||||
|
289,45.53
|
||||||
|
290,41.78
|
||||||
|
291,42.91
|
||||||
|
292,35.98
|
||||||
|
293,48.07
|
||||||
|
294,38.33
|
||||||
|
295,40.50
|
||||||
|
296,44.56
|
||||||
|
297,42.91
|
||||||
|
298,36.04
|
||||||
|
299,37.23
|
||||||
|
300,40.44
|
||||||
|
301,41.66
|
||||||
|
302,38.85
|
||||||
|
303,42.14
|
||||||
|
304,38.39
|
||||||
|
305,36.62
|
||||||
|
306,41.72
|
||||||
|
307,39.00
|
||||||
|
308,38.18
|
||||||
|
309,43.21
|
||||||
|
310,42.45
|
||||||
|
311,37.69
|
||||||
|
312,46.02
|
||||||
|
313,42.11
|
||||||
|
314,45.20
|
||||||
|
315,43.58
|
||||||
|
316,46.78
|
||||||
|
317,39.03
|
||||||
|
318,38.24
|
||||||
|
319,45.59
|
||||||
|
320,45.84
|
||||||
|
321,45.20
|
||||||
|
322,45.29
|
||||||
|
323,40.41
|
||||||
|
324,44.77
|
||||||
|
325,42.97
|
||||||
|
326,38.06
|
||||||
|
327,39.09
|
||||||
|
328,38.33
|
||||||
|
329,34.58
|
||||||
|
330,39.70
|
||||||
|
331,43.88
|
||||||
|
332,43.09
|
||||||
|
333,38.24
|
||||||
|
334,44.34
|
||||||
|
335,41.56
|
||||||
|
336,48.98
|
||||||
|
337,39.18
|
||||||
|
338,40.37
|
||||||
|
339,39.58
|
||||||
|
340,42.72
|
||||||
|
341,44.10
|
||||||
|
342,44.34
|
||||||
|
343,40.47
|
||||||
|
344,47.70
|
||||||
|
345,37.96
|
||||||
|
346,40.01
|
||||||
|
347,36.19
|
||||||
|
348,38.21
|
||||||
|
349,39.40
|
||||||
|
350,42.45
|
||||||
|
351,45.62
|
||||||
|
352,38.73
|
||||||
|
353,35.95
|
||||||
|
354,37.11
|
||||||
|
355,45.47
|
||||||
|
356,38.73
|
||||||
|
357,47.06
|
||||||
|
358,40.34
|
||||||
|
359,35.58
|
||||||
|
360,40.89
|
||||||
|
361,34.94
|
||||||
|
362,47.24
|
||||||
|
363,42.30
|
||||||
|
364,41.38
|
||||||
|
365,37.63
|
||||||
|
366,47.03
|
||||||
|
367,39.18
|
||||||
|
368,43.55
|
||||||
|
369,37.63
|
||||||
|
370,42.97
|
||||||
|
371,42.24
|
||||||
|
372,45.32
|
||||||
|
373,38.39
|
||||||
|
374,49.50
|
||||||
|
375,39.67
|
||||||
|
376,37.87
|
||||||
|
377,39.06
|
||||||
|
378,44.46
|
||||||
|
379,38.70
|
||||||
|
380,34.88
|
||||||
|
381,38.02
|
||||||
|
382,42.18
|
||||||
|
383,40.47
|
||||||
|
384,52.83
|
||||||
|
385,45.01
|
||||||
|
386,41.08
|
||||||
|
387,50.51
|
||||||
|
388,42.51
|
||||||
|
389,53.71
|
||||||
|
390,44.92
|
||||||
|
391,39.06
|
||||||
|
392,39.37
|
||||||
|
393,44.74
|
||||||
|
394,41.99
|
||||||
|
395,36.16
|
||||||
|
396,41.47
|
||||||
|
397,38.67
|
||||||
|
398,35.71
|
||||||
|
399,46.08
|
||||||
|
400,44.28
|
||||||
|
401,36.25
|
||||||
|
402,39.43
|
||||||
|
403,45.59
|
||||||
|
404,36.59
|
||||||
|
405,39.79
|
||||||
|
406,44.98
|
||||||
|
407,49.13
|
||||||
|
408,41.38
|
||||||
|
409,40.41
|
||||||
|
410,35.71
|
||||||
|
411,44.89
|
||||||
|
412,39.00
|
||||||
|
413,46.11
|
||||||
|
414,43.33
|
||||||
|
415,48.65
|
||||||
|
416,38.73
|
||||||
|
417,38.88
|
||||||
|
418,41.02
|
||||||
|
419,44.25
|
||||||
|
420,51.51
|
||||||
|
421,45.84
|
||||||
|
422,40.07
|
||||||
|
423,44.22
|
||||||
|
424,43.40
|
||||||
|
425,46.75
|
||||||
|
426,37.87
|
||||||
|
427,42.97
|
||||||
|
428,41.17
|
||||||
|
429,38.21
|
||||||
|
430,39.34
|
||||||
|
431,34.33
|
||||||
|
432,43.46
|
||||||
|
433,44.59
|
||||||
|
434,35.68
|
||||||
|
435,39.76
|
||||||
|
436,46.05
|
||||||
|
437,40.34
|
||||||
|
438,46.48
|
||||||
|
439,43.67
|
||||||
|
440,41.90
|
||||||
|
441,53.31
|
||||||
|
442,43.43
|
||||||
|
443,39.46
|
||||||
|
444,36.47
|
||||||
|
445,46.69
|
||||||
|
446,34.88
|
||||||
|
447,41.96
|
||||||
|
448,38.12
|
||||||
|
449,36.38
|
||||||
|
450,40.50
|
||||||
|
451,45.84
|
||||||
|
452,35.98
|
||||||
|
453,38.18
|
||||||
|
454,44.28
|
||||||
|
455,36.29
|
||||||
|
456,37.41
|
||||||
|
457,42.72
|
||||||
|
458,42.91
|
||||||
|
459,43.21
|
||||||
|
460,44.53
|
||||||
|
461,37.51
|
||||||
|
462,39.73
|
||||||
|
463,44.89
|
||||||
|
464,41.11
|
||||||
|
465,43.52
|
||||||
|
466,42.69
|
||||||
|
467,37.90
|
||||||
|
468,38.15
|
||||||
|
469,35.40
|
||||||
|
470,37.57
|
||||||
|
471,44.83
|
||||||
|
472,44.10
|
||||||
|
473,40.44
|
||||||
|
474,44.56
|
||||||
|
475,42.69
|
||||||
|
476,36.80
|
||||||
|
477,39.00
|
||||||
|
478,40.22
|
||||||
|
479,37.32
|
||||||
|
480,40.44
|
||||||
|
481,40.71
|
||||||
|
482,39.92
|
||||||
|
483,45.29
|
||||||
|
484,41.60
|
||||||
|
485,41.66
|
||||||
|
486,42.82
|
||||||
|
487,47.21
|
||||||
|
488,43.49
|
||||||
|
489,47.76
|
||||||
|
490,44.04
|
||||||
|
491,41.29
|
||||||
|
492,37.26
|
||||||
|
493,39.49
|
||||||
|
494,44.80
|
||||||
|
495,39.03
|
||||||
|
496,42.21
|
||||||
|
497,45.59
|
||||||
|
498,46.72
|
||||||
|
499,41.05
|
||||||
|
500,38.24
|
||||||
|
501,40.44
|
||||||
|
502,42.57
|
||||||
|
503,53.38
|
||||||
|
504,67.84
|
||||||
|
505,44.98
|
||||||
|
506,43.06
|
||||||
|
507,43.18
|
||||||
|
508,45.50
|
||||||
|
509,47.88
|
||||||
|
510,36.04
|
||||||
|
511,40.22
|
||||||
|
512,44.62
|
||||||
|
513,43.76
|
||||||
|
514,40.95
|
||||||
|
515,39.15
|
||||||
|
516,39.43
|
||||||
|
517,39.55
|
||||||
|
518,41.75
|
||||||
|
519,48.00
|
||||||
|
520,35.16
|
||||||
|
521,43.52
|
||||||
|
522,39.61
|
||||||
|
523,36.68
|
||||||
|
524,39.79
|
||||||
|
525,51.21
|
||||||
|
526,40.37
|
||||||
|
BIN
histogram.png
Normal file
BIN
histogram.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 144 KiB |
208
latency.py
Normal file
208
latency.py
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
from scipy import stats
|
||||||
|
|
||||||
|
def calculate_confidence_interval(data, confidence=0.95):
|
||||||
|
"""
|
||||||
|
Вычисление доверительного интервала для среднего значения
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
data: массив данных
|
||||||
|
confidence: уровень доверия (по умолчанию 95%)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tuple: (среднее, нижняя граница, верхняя граница, стандартная ошибка)
|
||||||
|
"""
|
||||||
|
n = len(data)
|
||||||
|
mean = np.mean(data)
|
||||||
|
std_error = stats.sem(data) # Стандартная ошибка среднего
|
||||||
|
|
||||||
|
# Вычисление доверительного интервала с использованием t-распределения
|
||||||
|
ci = stats.t.interval(confidence, n-1, loc=mean, scale=std_error)
|
||||||
|
|
||||||
|
return mean, ci[0], ci[1], std_error
|
||||||
|
|
||||||
|
def plot_delay_histogram_with_ci(csv_file_path, save_to_file=True, show_plot=False,
|
||||||
|
confidence_level=0.99, delimiter=','):
|
||||||
|
"""
|
||||||
|
Универсальный скрипт для построения гистограммы с доверительным интервалом
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Чтение данных
|
||||||
|
df = pd.read_csv(csv_file_path, delimiter=delimiter, header=None,
|
||||||
|
names=['index', 'delay_ms'])
|
||||||
|
delays = df['delay_ms'].values
|
||||||
|
|
||||||
|
# Вычисление базовой статистики
|
||||||
|
mean_delay = np.mean(delays)
|
||||||
|
median_delay = np.median(delays)
|
||||||
|
std_delay = np.std(delays)
|
||||||
|
min_delay = np.min(delays)
|
||||||
|
max_delay = np.max(delays)
|
||||||
|
|
||||||
|
# Вычисление доверительного интервала
|
||||||
|
mean_ci, ci_lower, ci_upper, std_error = calculate_confidence_interval(
|
||||||
|
delays, confidence_level)
|
||||||
|
|
||||||
|
# Вывод статистики
|
||||||
|
print("=" * 60)
|
||||||
|
print("АНАЛИЗ ЗАДЕРЖЕК С ДОВЕРИТЕЛЬНЫМ ИНТЕРВАЛОМ")
|
||||||
|
print("=" * 60)
|
||||||
|
print(f"Количество измерений (n): {len(delays)}")
|
||||||
|
print(f"Уровень доверия: {confidence_level*100}%")
|
||||||
|
print("\n--- ОСНОВНАЯ СТАТИСТИКА ---")
|
||||||
|
print(f"Минимальная задержка: {min_delay:.2f} мс")
|
||||||
|
print(f"Максимальная задержка: {max_delay:.2f} мс")
|
||||||
|
print(f"Средняя задержка: {mean_delay:.2f} мс")
|
||||||
|
print(f"Медианная задержка: {median_delay:.2f} мс")
|
||||||
|
print(f"Стандартное отклонение: {std_delay:.2f} мс")
|
||||||
|
print(f"Стандартная ошибка: {std_error:.4f} мс")
|
||||||
|
|
||||||
|
print(f"\n--- ДОВЕРИТЕЛЬНЫЙ ИНТЕРВАЛ {confidence_level*100}% ---")
|
||||||
|
print(f"Точечная оценка среднего: {mean_ci:.2f} мс")
|
||||||
|
print(f"Доверительный интервал: [{ci_lower:.2f}, {ci_upper:.2f}] мс")
|
||||||
|
print(f"Ширина интервала: {ci_upper - ci_lower:.2f} мс")
|
||||||
|
print(f"Погрешность: ±{(ci_upper - ci_lower)/2:.2f} мс")
|
||||||
|
|
||||||
|
# Дополнительные метрики
|
||||||
|
cv = (std_delay / mean_delay) * 100 # Коэффициент вариации
|
||||||
|
print(f"\n--- ДОПОЛНИТЕЛЬНЫЕ МЕТРИКИ ---")
|
||||||
|
print(f"Коэффициент вариации: {cv:.1f}%")
|
||||||
|
print(f"Q1 (25-й перцентиль): {np.percentile(delays, 25):.2f} мс")
|
||||||
|
print(f"Q3 (75-й перцентиль): {np.percentile(delays, 75):.2f} мс")
|
||||||
|
print(f"IQR (межквартильный размах): {np.percentile(delays, 75) - np.percentile(delays, 25):.2f} мс")
|
||||||
|
|
||||||
|
# Создание гистограммы
|
||||||
|
plt.figure(figsize=(14, 8))
|
||||||
|
n_bins = min(30, len(delays) // 5)
|
||||||
|
|
||||||
|
# Гистограмма
|
||||||
|
n, bins, patches = plt.hist(delays, bins=n_bins, alpha=0.7, color='steelblue',
|
||||||
|
edgecolor='black', linewidth=0.5, density=False)
|
||||||
|
|
||||||
|
plt.xlabel('Задержка (мс)', fontsize=12)
|
||||||
|
plt.ylabel('Частота', fontsize=12)
|
||||||
|
plt.title(f'Распределение задержек на обработку нажатия мыши (n={len(delays)}, CI={confidence_level*100}%)',
|
||||||
|
fontsize=14, fontweight='bold')
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
|
||||||
|
# Добавление статистических линий
|
||||||
|
plt.axvline(mean_delay, color='red', linestyle='-', linewidth=2,
|
||||||
|
label=f'Среднее ({mean_delay:.1f} мс)')
|
||||||
|
plt.axvline(median_delay, color='green', linestyle='-', linewidth=2,
|
||||||
|
label=f'Медиана ({median_delay:.1f} мс)')
|
||||||
|
|
||||||
|
# Добавление доверительного интервала
|
||||||
|
plt.axvspan(ci_lower, ci_upper, alpha=0.2, color='yellow',
|
||||||
|
label=f'ДИ {confidence_level*100}%: [{ci_lower:.1f}, {ci_upper:.1f}] мс')
|
||||||
|
|
||||||
|
# Вертикальные линии для границ доверительного интервала
|
||||||
|
plt.axvline(ci_lower, color='orange', linestyle='--', linewidth=1, alpha=0.7)
|
||||||
|
plt.axvline(ci_upper, color='orange', linestyle='--', linewidth=1, alpha=0.7)
|
||||||
|
|
||||||
|
plt.legend(loc='upper right', fontsize=10)
|
||||||
|
plt.tight_layout()
|
||||||
|
|
||||||
|
# Сохранение в файл
|
||||||
|
if save_to_file:
|
||||||
|
output_file = f'delay_distribution_ci_{int(confidence_level*100)}.png'
|
||||||
|
plt.savefig(output_file, dpi=300, bbox_inches='tight')
|
||||||
|
print(f"\n✓ Гистограмма сохранена как: {output_file}")
|
||||||
|
|
||||||
|
# Показ графика
|
||||||
|
if show_plot:
|
||||||
|
plt.show()
|
||||||
|
else:
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
print("\n✓ Анализ завершен успешно")
|
||||||
|
|
||||||
|
return {
|
||||||
|
'data': delays,
|
||||||
|
'mean': mean_delay,
|
||||||
|
'median': median_delay,
|
||||||
|
'std': std_delay,
|
||||||
|
'ci_lower': ci_lower,
|
||||||
|
'ci_upper': ci_upper,
|
||||||
|
'confidence_level': confidence_level
|
||||||
|
}
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"✗ Ошибка: Файл '{csv_file_path}' не найден")
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
print(f"✗ Ошибка: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def compare_confidence_intervals(csv_file_path, confidence_levels=[0.90, 0.95, 0.99], delimiter=','):
|
||||||
|
"""
|
||||||
|
Сравнение доверительных интервалов для разных уровней доверия
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
df = pd.read_csv(csv_file_path, delimiter=delimiter, header=None,
|
||||||
|
names=['index', 'delay_ms'])
|
||||||
|
delays = df['delay_ms'].values
|
||||||
|
|
||||||
|
print("=" * 70)
|
||||||
|
print("СРАВНЕНИЕ ДОВЕРИТЕЛЬНЫХ ИНТЕРВАЛОВ ДЛЯ РАЗНЫХ УРОВНЕЙ ДОВЕРИЯ")
|
||||||
|
print("=" * 70)
|
||||||
|
print(f"Количество измерений: {len(delays)}")
|
||||||
|
print(f"Среднее значение: {np.mean(delays):.2f} мс")
|
||||||
|
print(f"Стандартная ошибка: {stats.sem(delays):.4f} мс\n")
|
||||||
|
|
||||||
|
results = []
|
||||||
|
for conf in confidence_levels:
|
||||||
|
mean, ci_lower, ci_upper, std_error = calculate_confidence_interval(delays, conf)
|
||||||
|
width = ci_upper - ci_lower
|
||||||
|
margin = width / 2
|
||||||
|
|
||||||
|
results.append({
|
||||||
|
'confidence': conf,
|
||||||
|
'mean': mean,
|
||||||
|
'ci_lower': ci_lower,
|
||||||
|
'ci_upper': ci_upper,
|
||||||
|
'width': width,
|
||||||
|
'margin': margin
|
||||||
|
})
|
||||||
|
|
||||||
|
print(f"Доверительный интервал {conf*100:.0f}%:")
|
||||||
|
print(f" [{ci_lower:.2f}, {ci_upper:.2f}] мс")
|
||||||
|
print(f" Ширина: {width:.2f} мс, Погрешность: ±{margin:.2f} мс")
|
||||||
|
print()
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при сравнении интервалов: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Пример использования
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Укажите путь к вашему файлу
|
||||||
|
csv_file = "delays.csv"
|
||||||
|
|
||||||
|
print("АНАЛИЗ ДОВЕРИТЕЛЬНЫХ ИНТЕРВАЛОВ ДЛЯ ЗАДЕРЖЕК")
|
||||||
|
print("=" * 50)
|
||||||
|
|
||||||
|
# Основной анализ с 95% доверительным интервалом
|
||||||
|
results = plot_delay_histogram_with_ci(
|
||||||
|
csv_file_path=csv_file,
|
||||||
|
save_to_file=True,
|
||||||
|
show_plot=False,
|
||||||
|
confidence_level=0.99
|
||||||
|
)
|
||||||
|
|
||||||
|
print("\n" + "=" * 50)
|
||||||
|
|
||||||
|
# Сравнение разных уровней доверия
|
||||||
|
compare_results = compare_confidence_intervals(csv_file, [0.90, 0.95, 0.99])
|
||||||
|
|
||||||
|
# Интерпретация результатов
|
||||||
|
if results:
|
||||||
|
print("\n--- ИНТЕРПРЕТАЦИЯ РЕЗУЛЬТАТОВ ---")
|
||||||
|
print(f"С вероятностью 95% истинное среднее значение задержки ")
|
||||||
|
print(f"находится в интервале от {results['ci_lower']:.2f} до {results['ci_upper']:.2f} мс.")
|
||||||
|
print(f"Это означает, что если бы мы повторили эксперимент много раз,")
|
||||||
|
print(f"95% вычисленных таким образом интервалов содержали бы истинное среднее значение.")
|
||||||
55
main.cpp
Normal file
55
main.cpp
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#include <QApplication>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
class ClickableWindow : public QWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ClickableWindow(QWidget *parent = nullptr) : QWidget(parent)
|
||||||
|
{
|
||||||
|
// Create a label to show instructions
|
||||||
|
QLabel *label = new QLabel("Click anywhere to change background color!");
|
||||||
|
label->setAlignment(Qt::AlignCenter);
|
||||||
|
|
||||||
|
// Set up layout
|
||||||
|
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||||
|
layout->addWidget(label);
|
||||||
|
|
||||||
|
// Set initial background color
|
||||||
|
setStyleSheet("background-color: black;");
|
||||||
|
|
||||||
|
// Set window properties
|
||||||
|
setWindowTitle("Click to Change Background Color");
|
||||||
|
resize(400, 300);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void mousePressEvent(QMouseEvent *event) override
|
||||||
|
{
|
||||||
|
if (event->button() == Qt::LeftButton) {
|
||||||
|
setStyleSheet("background-color: white");
|
||||||
|
}
|
||||||
|
|
||||||
|
QTimer::singleShot(200, this, &ClickableWindow::backToBlack);
|
||||||
|
|
||||||
|
QWidget::mousePressEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void backToBlack()
|
||||||
|
{
|
||||||
|
setStyleSheet("background-color: black");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
ClickableWindow window;
|
||||||
|
window.show();
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user