From dc7bcefc75ce66017b9bc1c504f2ef1dbc16fb5e Mon Sep 17 00:00:00 2001
From: Enzo De Carvalho Bittencourt <enzo.decarvalhobittencourt@ensiie.eu>
Date: Thu, 28 Sep 2023 16:32:15 +0200
Subject: [PATCH] updated stats

---
 Random/__pycache__/stats.cpython-311.pyc | Bin 0 -> 1115 bytes
 Random/main.py                           |  31 +++++++++++++++++++++++
 Random/stats.py                          |  19 ++++++++++++++
 3 files changed, 50 insertions(+)
 create mode 100644 Random/__pycache__/stats.cpython-311.pyc
 create mode 100644 Random/stats.py

diff --git a/Random/__pycache__/stats.cpython-311.pyc b/Random/__pycache__/stats.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..99b30e77125b8e59c18d27673114aa526b93eba2
GIT binary patch
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)<=

literal 0
HcmV?d00001

diff --git a/Random/main.py b/Random/main.py
index 1d4c004..4af1704 100755
--- a/Random/main.py
+++ b/Random/main.py
@@ -3,7 +3,10 @@ import graph
 from datetime import datetime
 import matplotlib.pyplot as plt
 import numpy as np
+import stats
+import scipy
 import seaborn as sns
+import csv
 
 #shut up stupid warnings from not "the-most-up-to-date" libraries
 import warnings
@@ -43,6 +46,31 @@ def iteratives(N, seed, generator):
         results[name] = res
     return results
 
+def write_stats(data, name):
+    fields=["name","quantil25", "quantil50", "quantil75", "mean"
+            , "variance", "skew", "exckurt"] 
+    quantil25 = np.quantile(data,0.25)
+    quantil50 = np.quantile(data,0.5)
+    quantil75 = np.quantile(data,0.75)
+    mean      = np.mean(data)
+    variance  = np.var(data)
+    skew      = scipy.stats.skew(data)
+    exckurt   = scipy.stats.kurtosis(data) - 3
+    #write file
+    with open(name+'.csv', 'w', newline='') as csvfile:
+        datawriter = csv.DictWriter(csvfile, fieldnames=fields)
+        datawriter.writeheader()
+        datawriter.writerow({
+                    "name" : name,
+                    "quantil25" : str(quantil25),
+                    "quantil50" : str(quantil50),
+                    "quantil75" : str(quantil75),
+                    "mean"      : str(mean),
+                    "variance"  : str(variance),
+                    "skew"      : str(skew),
+                    "exckurt"   : str(exckurt)})
+    return
+
 if __name__=="__main__":
     ##INIT PARAMS##
     N = 100
@@ -70,3 +98,6 @@ if __name__=="__main__":
     
     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")
diff --git a/Random/stats.py b/Random/stats.py
new file mode 100644
index 0000000..6b1b11d
--- /dev/null
+++ b/Random/stats.py
@@ -0,0 +1,19 @@
+"""
+Module to calculate various value on an array
+(Quantile, mean, etc..)
+"""
+import numpy as np
+import scipy
+
+def chisquared_uniform(arr, N):
+    """
+    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)
+
-- 
GitLab