From b56db38ffe628748d14079bf88e7240813baf826 Mon Sep 17 00:00:00 2001 From: Enzo De Carvalho Bittencourt <enzo.decarvalhobittencourt@ensiie.eu> Date: Thu, 28 Sep 2023 17:38:04 +0200 Subject: [PATCH] prepared pipeline --- Random/__pycache__/stats.cpython-311.pyc | Bin 1115 -> 773 bytes Random/graph.py | 2 + Random/main.py | 53 ++++++++++++++++++----- Random/stats.py | 11 ++--- 4 files changed, 48 insertions(+), 18 deletions(-) diff --git a/Random/__pycache__/stats.cpython-311.pyc b/Random/__pycache__/stats.cpython-311.pyc index 99b30e77125b8e59c18d27673114aa526b93eba2..8fbafb1507b9d7c92e33b0c08d6980c068386049 100644 GIT binary patch delta 441 zcmcc3(aOfRoR^o20SJU<iKbdIPUM?a&jI8y1M%lsKw>&W2_uk#f-E?@234F1rXqzg zg{g*d8BqUfkQrdGhItuKel=W843JgJRLfk#22;Vnki`OHYb{`fF_GySre#3OSHm3; z%%I6KS(Hgjw+LkJOOUuG<1Ln?%)DYvwp&bj1-CdeGK)*{(~A;wZ*k-Rg$ojsQzuVk zl2T&1#hh4Fbc;F2HTV{9eo}F2QCVtAd|FXz;Vs7aVvs{7KVfq969h6qVNvV|BpMjL zaxh3r&*51RytZgf^$x=wfjf#X>N{W2cfKIua#6zN3Xo(GY4Dw3c$ZtC$ND<A!X<8n z1+o{p^{;U2UtrOne3n^44dme>P7nbyd?iDX5Qr@RBz|$&<mRW8=A_yciB0BaF_B?q MH2A=PNq}_#0K~Fe$^ZZW literal 1115 zcmZ`&%}X0W6rbIl#AIWt#Avl3jy)7pj3H3;&=M&`GzW#&o<ixe?oM#SW;gDKG$DZ$ zdgwu+g@RrR9$IVBL;nQ(A7slyWx!J@#alpn@zmMX4aU;9Gw*}<@q06G_H#VW14_TQ zhw%stz)#Nzh}u4#BPw=)42nQzWL9O0tS`ADCv&es5z6c;NWuCdzpTr)ijk!wNmM0U z6)lW5MMKeTlS<XbNY{`^mtlxCe(H%WYL=qnX;i_YHjS_)&CI0uGY@q|3gA5}OgBgO z`3uHt#iBf*a#wHA_Kw(nns?aEeNMF|+vFNtgQ>@;4tsLDaSd4Z>iZ;L#U8=lTFsCZ z4PpRjz<r8**hTO0g?fD@mI2rOJw1einvEM-|B1SR+uI|>=@04wQ0@!#y-1*4mkmfU zd+v)4GE|@95hZC|F*j_{z%nZ72C_AUiVBhy(=wDbKjc}8A#np+wxJ1<Zfll#=G{k% zB_VTNtYX5K6jc@c(Wjz>)v6>+>ulJVz>=-11e!`6lTg)AG>dSiU7?ARQms*8iIz#C z-6m3D!qI0#m=(eZBz%cR;`*A2jZG{IB?E7eIDT2hl67U8-mCFWg3!hN%(`B|nX;&* zMa|SR3oEOI!a`=Xuvo}E6*XC}WPHRKik;|!%EHyDjZs?4yFzn^vKIIg0fULH+V0Rn zzCDn22D0uz_SI7BajSHaytA8qx71qxl^l7$xR-YCJ~(EMC%<v+WZp^U-DJMCd<vs) z(heMT;pm6q-KH~^cE{3f=q>8nzPokr?YP5FxctPY#K)0?xHCEHPR=@T&V_SrICmNw z+<N#UhQ7zp-uTzJ6U(`=TpQ-jX=`+Rq)!lJT@nNm((FpLW_W!Yw>;*Z;tMdwJpDFh z7m-I5|Ch}f<J9zKXU<dB;TVSLup9$Bz+(}>47EYxa-D$wmj87i&&+qgzsv{t3&r3A A^Z)<= diff --git a/Random/graph.py b/Random/graph.py index ad5d45e..38f1c6a 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 4af1704..5d330c9 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 6b1b11d..31cb2d1 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) -- GitLab