diff --git a/Random/__pycache__/stats.cpython-311.pyc b/Random/__pycache__/stats.cpython-311.pyc index 99b30e77125b8e59c18d27673114aa526b93eba2..8fbafb1507b9d7c92e33b0c08d6980c068386049 100644 Binary files a/Random/__pycache__/stats.cpython-311.pyc and b/Random/__pycache__/stats.cpython-311.pyc differ diff --git a/Random/graph.py b/Random/graph.py index ad5d45eb645047d02ded3ea156da6ca9741c1920..38f1c6a90cc6024816e50531c3ec190e4fa06771 100644 --- a/Random/graph.py +++ b/Random/graph.py @@ -33,6 +33,8 @@ def ecdf_graph(N,RESOLUTION,seed,data): xlabel= "Value" ylabel="Cumulative Probability" title_name= name +"\n N = "+str(N)+"\n seed = "+str(seed) + if N==0: + title_name= name +"\n seed = "+str(seed) graph=sns.displot(data[name], kind="ecdf") graph.set(title=title_name) graph.set_axis_labels(xlabel,ylabel) diff --git a/Random/main.py b/Random/main.py index 4af170438c93867a6e685e2bdb1ca1bf8e68d28f..5d330c9d5d283e22489bd5fdda3679ed970bf4ca 100755 --- a/Random/main.py +++ b/Random/main.py @@ -57,9 +57,9 @@ def write_stats(data, name): skew = scipy.stats.skew(data) exckurt = scipy.stats.kurtosis(data) - 3 #write file - with open(name+'.csv', 'w', newline='') as csvfile: + with open('stats.csv', 'a', newline='') as csvfile: datawriter = csv.DictWriter(csvfile, fieldnames=fields) - datawriter.writeheader() + #datawriter.writeheader() datawriter.writerow({ "name" : name, "quantil25" : str(quantil25), @@ -71,10 +71,26 @@ def write_stats(data, name): "exckurt" : str(exckurt)}) return +def write_stats_chi(data, name, RES): + fields=["chi","p"] + val = stats.chisquared_uniform(data,RES) + chi = val[0] + p = val[1] + #write file + with open('chi.csv', 'a', newline='') as csvfile: + datawriter = csv.DictWriter(csvfile, fieldnames=fields) + #datawriter.writeheader() + datawriter.writerow({ + "name" : name, + "chi" : str(chi), + "p" : str(p)}) + return + if __name__=="__main__": ##INIT PARAMS## - N = 100 - RESOLUTION = 1000 + N = 1000000 + RESOLUTION = 100 + iterN = [100, 1000000, 100000000] #init generators generators = [ParkMiller(), KnuthLewis(), Marsaglia() @@ -87,7 +103,7 @@ if __name__=="__main__": #set seaborn params sns.set_theme(style="darkgrid") - #generate all diagrams + #generate N random values for each RNG data = values(N,seed,generators) #graph.hist_distributivity_graph(N,RESOLUTION,seed,data) @@ -96,8 +112,25 @@ if __name__=="__main__": #graph.ecdf_graph(N,RESOLUTION,seed,data) - graph.compare(0, RESOLUTION, seed - , iteratives([1000, 10, 100], seed, ParkMiller())) - print(stats.chisquared_uniform(data["ParkMiller"],N)) - print(np.quantile(data["ParkMiller"],0.25)) - write_stats(data["ParkMiller"],"ParkMiller") + #graph.compare(0, RESOLUTION, seed + # , iteratives([1000, 10, 100], seed, ParkMiller())) + #print(stats.chisquared_uniform(data["ParkMiller"],RESOLUTION)) + #print(np.quantile(data["ParkMiller"],0.25)) + #write_stats(data["ParkMiller"],"ParkMiller") + #write_stats_chi(data["ParkMiller"], "ParkMiller", RESOLUTION) + + #generate a lot of diagrams + graph.hist_distributivity_graph(N,RESOLUTION,seed,data) + + for name in data: + write_stats(data[name],name) + write_stats_chi(data[name],name) + + for name in generators: + data_iter = iteratives(iterN, seed, name) + + graph.ecdf_graph(0, RESOLUTION, seed, data_iter) + graph.compare(0, RESOLUTION, seed, data_iter) + + + diff --git a/Random/stats.py b/Random/stats.py index 6b1b11d9ced8c32249df61062f1ac66e056fbb78..31cb2d15b405e99f68e02fc148df05175167899b 100644 --- a/Random/stats.py +++ b/Random/stats.py @@ -5,15 +5,10 @@ Module to calculate various value on an array import numpy as np import scipy -def chisquared_uniform(arr, N): +def chisquared_uniform(arr,RES): """ chisquared for uniform distrib """ - _,counts = np.unique(arr, return_counts=True) - observed_freq = counts/N - #print(observed_freq) - expected_freq = np.full(shape=observed_freq.size,fill_value=1/N) - print(observed_freq),print(expected_freq) - print(np.sum(expected_freq), np.sum(observed_freq)) - return scipy.stats.chisquare(observed_freq, expected_freq) + observed_freq, _ = np.histogram(arr, bins=np.linspace(0,1,RES)) + return scipy.stats.chisquare(observed_freq)