unified Z-Score
This commit is contained in:
parent
517b7d55f1
commit
1189d70db1
2 changed files with 121 additions and 49 deletions
73
test.py
73
test.py
|
|
@ -1,13 +1,74 @@
|
|||
from pyagushka import lyagushka
|
||||
from randonautentropy import rndo
|
||||
import json
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
from scipy.interpolate import interp1d
|
||||
|
||||
random_data = []
|
||||
def generate_random_data(size=1024, max_value=100):
|
||||
|
||||
with open('random_values.txt', 'r') as file:
|
||||
for line in file:
|
||||
random_data.append(int(line.strip()))
|
||||
random_data = []
|
||||
max_value_bytes = (max_value.bit_length() + 7) // 8
|
||||
max_int_for_bytes = 2**(max_value_bytes * 8) - 1
|
||||
min_bytes_needed = max_value_bytes * size
|
||||
mod_cutoff = max_int_for_bytes - (max_int_for_bytes % max_value) - 1
|
||||
|
||||
anomalies = json.loads(lyagushka(random_data, 1.0, 5))
|
||||
# Populate the 'random_data' array
|
||||
while len(random_data) < size:
|
||||
hex_data = rndo.get(length=min_bytes_needed)
|
||||
hex_chunks = list((hex_data[0+i:2 * max_value_bytes+i] for i in range(0, len(hex_data), 2 * max_value_bytes)))
|
||||
for i in hex_chunks:
|
||||
num = int(i, 16)
|
||||
if num <= mod_cutoff and len(random_data) < size:
|
||||
random_data.append( num % (max_value + 1) )
|
||||
|
||||
print(anomalies)
|
||||
return random_data
|
||||
|
||||
# load the random test data
|
||||
dataset = []
|
||||
# with open('random_values.txt', 'r') as file:
|
||||
# for line in file:
|
||||
# random_data.append(int(line.strip()))
|
||||
|
||||
dataset = generate_random_data(1024, 1024)
|
||||
dataset.sort()
|
||||
|
||||
# calculate the anomalies in the data
|
||||
analysis_results = json.loads(lyagushka(dataset, 3.0, 7))
|
||||
print(analysis_results)
|
||||
print(len(analysis_results))
|
||||
|
||||
# Initialize plot
|
||||
plt.figure(figsize=(10, 6))
|
||||
|
||||
# Plot dataset points
|
||||
for point in dataset:
|
||||
plt.plot(point, 0, 'ko') # Plot dataset as black dots at y=0
|
||||
|
||||
# Process each cluster/gap for plotting
|
||||
for result in analysis_results:
|
||||
if result['num_elements'] > 0: # It's a cluster
|
||||
color = 'blue' # Color for clusters
|
||||
else: # It's a gap
|
||||
color = 'green' # Color for gaps
|
||||
|
||||
# Generate start and end points for the segment
|
||||
start = result['centroid'] - result['span_length'] / 2
|
||||
end = result['centroid'] + result['span_length'] / 2
|
||||
z_score = result['z_score'] if result['z_score'] is not None else 0
|
||||
|
||||
# Plot a line segment for the cluster/gap
|
||||
plt.plot([start, end], [z_score, z_score], color=color, linewidth=2)
|
||||
|
||||
# Enhancements for visualization
|
||||
plt.xlabel('Integer Value')
|
||||
plt.ylabel('Z-Score')
|
||||
plt.title('Cluster and Gap Analysis with Distinct Z-Score Curves')
|
||||
plt.grid(True)
|
||||
|
||||
# Custom legend
|
||||
plt.plot([], [], color='blue', label='Clusters')
|
||||
plt.plot([], [], color='green', label='Gaps')
|
||||
plt.legend()
|
||||
|
||||
plt.show()
|
||||
Loading…
Add table
Add a link
Reference in a new issue