From db25e628d67c33d15ce22212d4f9ab6bb71232bf Mon Sep 17 00:00:00 2001
From: Adrienucl <adrien.payen@student.uclouvain.be>
Date: Thu, 21 Dec 2023 00:32:24 +0100
Subject: [PATCH] last update

---
 .DS_Store                              | Bin 6148 -> 6148 bytes
 matrice_cat.xlsx                       | Bin 0 -> 11780 bytes
 matrix_category.xlsx                   | Bin 0 -> 11769 bytes
 projet_en_groupe/.DS_Store             | Bin 6148 -> 6148 bytes
 projet_en_groupe/algorithme_netflix.py | 121 ++++++++++++++++---------
 5 files changed, 78 insertions(+), 43 deletions(-)
 create mode 100644 matrice_cat.xlsx
 create mode 100644 matrix_category.xlsx

diff --git a/.DS_Store b/.DS_Store
index 8c4326e544aff75bdc18e95cd4563353d7bdd5eb..e67dba760cf882cd80f4290e831fa2069d1f19c4 100644
GIT binary patch
delta 37
tcmZoMXffEZon^8BTMeV}<X$%a$<Zu=lc%zNXEfg2%T~p>nT_KgKLGKT42%E(

delta 55
zcmZoMXffEZorQ7dWC6B99?9xzBXcty1w#W1!^u5t(v01c16bu5do~xaN;5JVZSG;K
LV%*Hm@s}R}$}$h#

diff --git a/matrice_cat.xlsx b/matrice_cat.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..47c49b89444b6029c80e2635215ec292111e0bbb
GIT binary patch
literal 11780
zcmaKS1z40@+cnZ7jdV*3NDM74-5}jL^w1?;($d{2Ad(^sT}p?9)X*TEl9K<R=e*}V
ze&6@QHT!wsVsB>Fz4p4-{p?#s9sv;#4h{|#_7Z_JF_3+s{0I&%77-5a3G6p|;tuw%
zAbVFM_1BId7XwyLuw6ycpnVrRw&cZaWFM4?!&OxSKTwi#kf7`oLErl&3mNnWI^JDd
z;*pA;YF?1y2lIn@m);mbqUWTk&#Ce;+VE}*7=TAFh;~bgJ#z&&J*dTBEiw`cCYd5J
zN_Cfan&Us>v_IF5%wSxUk7x>&GQpwttW<x>9eK&E2vYZY_m0ZJt5vTonBgc%ZTD$t
zuypC<yy|(~`sgkdfGl#)<hh+ru?okFa(pKP)|Q`={k$PT0s<IQJgeMjA@lN9%>D>G
zzEv%p{Um)oOk+_t+H{Iv*YK$2rU=6f&Of7TfViuBTUJuw=R}beC}weSb!I@qeN#_6
z?^mEgHqFYktl1K}{2d>qzody0e|S{t^kwc8HT}{*=<K6EPy0uH_#1TVbDXZd@$P!t
zF~(ixWe?M&1?Rg-k>I_XSn}5uxM{p{J{bBp>+RkSE`0~W#D0%d{)PXKT-mv881C}$
zaByg_tC2Iv&V`NjVXR2#RO)6&7d`ZmT))n+mqE=hZl)?)pyv|qptUFc^tSMG@WEk3
zoGAKRYm^wLy-mx(-C@DEJ8xf|lcBSeli(o@j)aYL4BlBgVKJd0htZ$_9gEO2H!N-y
zXynTJTVr+bW%`i4;xF^u>V*{3m}Bq;ln1R}J{z6f4tMW}IelMw=z7&3un|&LKO#EU
zL|1ytG0tsgujjBGzi(1NWvP2Jz-X>O9ufF@@-Qn@Ya^dY<?E(_=5+IoP)Ux=*ZjQt
zEGrzfGNsi)-F7!Jr~zPeG+O>;!+j%J#+x7-4;_Hn4RD-+_p1-wzY&pe(>vONA<+m!
zgamf=v}5}Xiid-<t*L{9?E@$O2FRwH9b4k?_HoUHt~;*Wvv`+hZ}g$32qAU#3U;zq
z4c508H~>X*)O?iO&(SmKD9yXWqhF&C=y!s&RPgCgPw8hy8XgOKIK+-pg@0;j!lJ;B
zmZ>hIoI0Gb9pPMWlA#Xse6^gm7L{a9hM5tGJ+_%kUnJ&|QkJZm*=n!KI`BjGoi*~L
zR=TMzeo;k*=w46weLtq+1hEgshOOu*FVnh*jJI=mmbjZuJib0lLP-geGgBXwJ&NCi
zZ*-NiPc~<`8GVqSIJ{Sw?G)Z=>S9Oh<CH-5S3k#rX`bS=xpwv+JF7c1|HkLWXuj$v
z5geRK9UL6&@_^3+GA>pikgE&ZuM5WmL~pZaouPdRqD!01WL~-TfH>V3^KJ3^q5*KS
zjz)`<^(_+66!G!>oS)b66>?{wjsEkNS?PX66+sO~xQNwV|J%{jQMS95#^!t1>$8TB
zBWzV8hVwqY-q!~c(^&1<;HfYEMmenzf5_d{!PUwBbmr2?-NnY;o{_`d?wL`8hyT2P
zOXF+L<Fw`7TL()@N{Y7Is~_KQp|QM1m52U~x9%rr$83iVhi&>If_E1O-GkQ-9=y|s
zem+}+o2j$qTAOU``u<m5=SeHm&G*VN(2GNn)>h)hw%d!;%qlEp*#moFBN4%ayW3vn
zrGwGM7Qc(_V~3^K%`XeX*GnTsC*>?nKW7JdtNiV}ueUd<uJ11|qQZ8Uw0LtJ7KP_q
zyzK%%5-wrwUqGQEZTB@^5>;*fr^VNH$7T(4&4h>ci$?d?C*42JtA1=ugvDaT%6g6J
zks6BVx4-uFxSoz`rtCj#H}H3;7^#Z&KHWHj9@gEH-(Rk+Nw-sW<T@C(`u*Ho<5_wa
z9vHioC57%Q;ZDNw1Lvo;#0pJQ362@%n7~^`-_Nk0ztgZP(a;O8{@^M&$I&Xm!Kh2K
zo_rRPrkO1kZau{xlI9M6`k8AF{-weoE9_?f@k<40CG6$^`K7|HeJ9UElK?75MROST
zL=y_^#ybRdLyc{gp_NBy@y-|N%EW?1yObe=fM6>s-P$y8F)fpaU@NxK+B}dVJyVll
zE3whqBG51$>K^L%FyuT8l@CMP!!YtNEY5z~M_>4O?IF<aL$;6`c8MP5+3&~m`Ql^A
z%IUa|e{gg`7);m-S>CF?t9h&dl+vZHsGa<Xo@?y-wyuAxh3m@<@i_lDPa)?jbvK7|
z#4}BqX&GLb25Xn9p>ua)n}%N6F!bIev(Qca_-Liv1ofSnCpp#fKy$&>y}g8Lg;%Q{
zH2BgCnR~>tHbT?_Ddt=#IGS=6JJsZLd@Z1?mMd>U<tG1;1(EyNn~L1Emct0c98&L4
zBB7VM>yx`Z{JxEJ7Nv1YaZ~){2EjEGWTRZ1=s6{y-8UvpPvN(5w;yl60FRD5;vs64
zY!YwkWm^xZkuIW+)}fXqm>mnI!>yNj490>U^7CiX;_p1&OPGwFrI&p%OI%g0oDecl
zxwl@35i`l}Hh$bZf7~q6%(ClotRTF#YJDGZKExW!4iSCvfJhS`nKC;>YR+{VE!T7p
z-E5NxN^L-8KyC2UfM$VefqG#@b&umb;B@8-D;*JwZx2fxI`K!buEziYT9$bA=tRl-
z)NeCB<BpltGC;E-CO|W-(!0dF#kIS|>siGVzeDtrtzZgw&!R$xx&3raCU&prItksg
z(lZ7kJsL23H=dcLP*&V92V_5<Eou_)U9VXv{y6tI#yA*@VYQjTj;-|~ZS5<~^O)@|
z{gU3o6ybLSDKazE#2gk;A>0Y;@j?-rWI`)jMG4tZz#y$%VyRMn%?yJzu|T0x(=ETp
z^-1mm|9<X75Ax>eJ|>5INS$ZF>rr%uwWL|4qg=;PeGZK@@1Q#2lEb3TnQi_?;qDp!
zae{65?H^>#D@^;<+5J^D$GmA?QLbUGv8Ms2;p!nA^0fWb9@94A6>KaCc+tICMeAF%
z3C(JqOtQmipoC{;Q?eUP%;yK9gVO6+FSaiT=MUNZ&IOD718?slGDi46&)|%&!e3up
z0*uawFoJ(XKuIg`H*%;da;-*l4mms{T|-^(B=#5H69f~=q&|DoTGsBh`i^6Y1nedJ
zZjpN7=>m-ql@K+)$q<R`k5ZTI%KZt-y@(W0f_dU_g5AKpOIX4LZT4Ovl}Ub)#gLTj
zs{x@zlQLSJWTRQ{h<@gatk3Cg<M(Wh_eOVn)|U6U*COLj$6;>?S9yI+esA;pleTJJ
zOr{|rF<lyPoD!Q8Jx}-Y&nMhVYEd<4MT3Kr7z&5V(qM+0R4zt4_7j3_%x#M8N831M
zsAefL36j~&0$?TT#$KNf3ACwpVKS^|tY9oAe#M0T19T|uhr|bNI{W4pCaTURg9B)j
z+do;JWS!nJA6#pRl$&iC3GIhwr(sl9Ul`?oE@ZxPeyqUpz|u-rFLSnYjuxpo!Ldr;
zqOi`7%sFAB98KSDIT1SWbC6Qf%-*=Zbq#jCmhe6wa4qRIrQ9`15ue*;e&RdHQXkeo
zL21`QTj;DuO8p@TotU9ye$BgHPMcZQuu+cyKa8R3#d#8)>~oJL;r?$<{>H7eKiyVX
z@A+Zd81dRWlR;c;6F(M7<WeMs<&09?ioV0M&+{|HSkOWrSV^ReThB{mgXut|Ogu_7
zO56}l7@Zoe6+Ioz8{H7?5q%Mj6&)Kb2~QDD7pQ|<N*Aby+ea5@fV)K(Xaod!Ql%k=
z%I2jZ#>i5oBc?=5@41>U&na!+)T!6p69v(ThmG8b$53#v^7ZqXcykyzr$ioyIAtHb
zX_f3-QS0ICap`%!hO}0EkWWs+?v-85KMLma8uaY-9KGzg?9--Q4%7jnUdF|$!#5V8
zUh*vm8sc8k1scCX5oA|T=eY2B8mBN>TUm}F<L^j_%{sQdjIEC3?xT~}iZOL){B1t3
z+bxj%Lj%df|4(!3hsezsA}a8;Sj^MfIZP|?`}BB@KtL_anmW#>k;fUwp~pNcE)&`U
zm`j|(rB5pHGUTU1u+*;}VXY^abZD@ZnqWpEAyh`r?&dRvW05^c9x~V}w{WLI<$7{9
zWEg~4AZwiA`Aw-eEYGeQ!7aGnvAR1sn4Gne)cG>pDPLy~E^rLgbzX1uW#vf^_gd&N
z*UAX9cUAn_W>c(t$TIL{k9-gFNUPEeU&9KmUXMVJcMnRBbPx3-ta;qzL4&JugL7Pw
zukw)r<;DgVGaQ!zOdF5Uf-gmZ0G34SIFV`vb<T_RA`INu6G|xIc`emzyJ-7q(}%{d
zCjySEgU_@IL%?N9ojN_y@;%A+6N}$69esu&CW0WriMNI`(0H;XprIAXMLhu_Ina=E
zk$n-k$g#*NycLt#E#eH3fqj17228|67!Vu+-!btLJ2+JPZ^)=i#m(2~sukdeX^#{v
z#O^vc0TPLC)=Fq3RN`ii@gvT2yxN14Rf0nd`fuabq@&S#%!Uto!YO=x@h#KYD~Wld
zOUPMjGo4QL3-{&YpZBs6u?c8H>sPn9r5*lYf_{N}CmFo_3%alJkL^iRJNLkh&w?d1
z;uswj;QMJGKK|}o#Da(n_Z2y!7uw=XhMy*$QZpLvUG7Lizh9GoxFU6}KDX)foa~Hj
z4l3-0!JrYwJW5Yy$Z7vK_W{tbaWqULpdrUE1b#F$P8{|QfzGqOcNlHP7fPO9F2Lca
zb0Z7J$xA)LI!)+c10W_cEeD$5GScs)F_)vVJoz?se%`@pjc_0-Ku#Wn+Z$8mRF}Bm
z7dAMIO#We*1V}-*$I8L(H3Tu&cY}D@b**r(NyScJV(IUfj=lS|LAD4qq_s18WZ-=H
z7b8vdMC;a$gw_xmreN>jayQko@dmCl0=`w^w)U10TLHeCRz=}`fHH(!g6`ykkze>L
zEDk=)>4*jWUB?s0PZ<OEE=gnrFi!>ak@|mae3_Xkmly%v-S3*ED>j{xC(1<AfK1YE
z4C!AAAfO#L?R*+^3|tvn6xXv3o}GSrir^l;+$Hnhlsv^f8+;Bb2>l7t34)isdnrNw
zF}AG;9k<M^QVJMeg+O6Nzmu*vPtUHX&aH>Y2zKmSte+60E=}IMG?mqx`gUk6HWhFj
zcO33C2C%{E-Nrh1iwFU4JAT<_h_>y)ShMarU`3SrOO620eB)%#!>$SnH_4K(7$r-;
zsmU%3Bmj6Cr<NMJGpe-T7@&@*A?hOy+HJQcbuuv7n*nGOJAeSLMC%TOF$u*%eG?Gr
zURlGw>zksyP~Zu7(mC0}C?p(cGTj<RCSs~jYnLkbdc+<%;`8u~s?!g^+6$A3P#7pr
zcr-`&yeb9kdr)Hx*$tfwKX|rJN3snOTXoO=Qb<6i>UPK2ubsM%`)PL|2kjf{#TLzx
zJbb4FMspnq85CE#I+ZF4Ec*)<mFMh=IU3D%;Qabo;)v;e*ErOHXCHIflx9XDISIc|
z>GXVH2uIHEEfQ@Ry&0|7gZ7{hJ+?iWA^XK^Dc%2namGcZ|HaEdGh7+^KoG7K{o==o
z{HMC6V}xpRysFna)pAQzXel}pg5zB7j|?y=Ia!Id0L>mT^khby_P|Q6Ea%JU<1D94
zla*y^6YnL*ejUx<Spi^_1(nnR8Xh=|zQ**DNwrTxC7{EzM|_<!)QUo`O&@4ckn^)?
zU>PCMy5N1|7n|~Bgq;j;d0nu}h596K!%MYlB>a&!E!sfmab*2sGy=Q+pz(pBRL!}w
zh-)3DRp78lU-g!4nu+za%*UBk+Y#VHo^s99j0f~iN0avaP8;B^^PI_`?*F7Jm}dcx
zY#MN#AMlSpHMzbTitm<$kC(u3LCZvr>}Ox5aaaCJB^pFsu_>+S-Ks^H=8|*O9I4%g
z4TTYFWl0@B?H``pZ8PFbYFSkK6;@OYLE3=bXZxXKLZ<rc6c6}B|7Pd2HR3h?wUpza
z<AmeL;}<3_DYK5JDaSF#!V{kahO3>HFKNu;15hmbsh0mcU;fXK1X`}bbb>T!U|>i~
zbI!EhZ>szCG}YQS3gTEG%LNnPFP+$?nEQnMS5!7KoiABTyg!L-9%+7rK7vO(PsuX>
z;yLWu?OC2#2aDe+iU8e=OOAM#!F9-XY1j@5pi)Wwi*e0`F-KnjN{Vb=I$};l<i-Y<
z#?d40{dq&c<jp7f6Q4f6l?!8#4A@?a2FE841HyE15vm*(nb!q8!B26=oEwD%IK??d
zfI=lrV0lD@g>Ud7pN<>U?ItVmwOP!w=Kym!ayadYVFFHEMN~!XK;-bLMnP|%&u8>9
zZ>fZo{+0X1vf;SV-kQ|e?)-D|ZoQO;RN`NTGpPg9Q<#FGB*+@4BWB1hrw;{%qA4Vb
zavxV_W8#RVgEj_P_VHarx<NE3#9BH)3Xry&rsL`Fgg#0K8AxzSbV{a^{$*d9!rXm2
z=DO(^bpFzC)dQeG!`B!reY1X@7=T`?WV=rTYGTuO0%gp-1W`8C_8Tth(pq%Serb9Q
z?5dbXYiZ;3QVaXz3Q?|fBx!<DdT<9}OfDw2ST<;5mj&D?E+Q|f=MLoSgN!G@<m>lF
z1?g5=qh~!N)c$Hg@W2@7+j_KN7tcY@e4Tj~`0l^#RFmSxiPxynCvpbJIB@2|Y}H<q
zikNNX*^ah-l|F5p0{kHDR|WV{T5Lu5iK54lj1A2Mjp>^+DHSlW<G11a5xicMwg*uU
zq%Qq5<Wo`HdjEA4G6n1os(dOPOGF5OYOwXDvpQOjr(U5n$5?+MP5Uh$#8rlTYe%oK
z7o9JIj$c8iQ_L;3Lm)~s1QcMt>j&EA90wl9*T{4rzyxbI%LpQA`zZoERt9r4ox}7t
zx}%i<YEYc4qRW|5pe=46eIWS9hfGp#gcXUm%|73m-v_<nZFMUVQ6!u+*l0T#ABni)
zpEdwe0Aaq*`2&cQ!Oj6Eg~XmPePs`3d>ralwya~g?Kop{Hnodpf2A6e<|6J*!%h7N
z$jbV^oX;e#+aMOo`{_ob1>rso$MT35Decbk`Y7qYpxOyQf#rK-5mQ1u!=0y>JA2D{
zt&Syy5-OhQ_csht*Zi#Ie0_~a|AdLoj!-zq(Q_CgJ411o)NKiXN|Tc<01dZtpsGRg
zFycPYHn@BKJEUkU=OdYCZ)}!CNO$q*ES;k~e51sE?f30p{<9#o5r5<TGD6~Vxb2j9
z29@#yWe)gNs4@`WMQH82`k=mNb20L@CT!o?)b8Z&dtKA^Gz=D@=wAMm;$;4*1C1>6
zF38`z<^;2ztkt+>ot8Pqa1%1V6<YX*@wQ3vZe-rnphEa0vEb|>J6Tydtd5)x-$~1^
z0RM&7Q9&Kp@L2)-{zJN+Dg9*t@4l;RxZnMpmfoCKpWg_Y&ISbWdt4#Rdno}&+{ndw
z{be*P-Q#0^C4QKmPGk`ZWjS36nl!hm4z9p*%tEPeyL@I(TLVPNzxt2~%y<7Uj&w`l
zpIo3#0{sKA!|81@NO5uucAKd8fPKZajr>x1nTTz&R9U4?seTaDluwgFJ55GpYWpL%
z;m5JedK+TjK?lri`*i*yy~$_D{8e`So=I!9!AR1v#HrEcA^X`GfUxQ4Ofo`P`Z<j*
z+<b@*yW!u4%tkMLu|~~a`my1+SIN~_68!oh_z8a4ln}Z=m^*A_C3`3iV8NNDg9Rth
z?3IhR+>_5J8T~AMPr~T~tyeV!$SHzW2g&@bpae!6EgwKJZ(M(sCtMMks*XPm)7J_@
z@hx+I?;4*h7)4!N2ghKL2oGq)B)_rkAsuN2wV1V7`WX9|v)~?eu&92THwzJE1?(kI
zFTYPERf1(brZhc7P89|CUf7PF1U8F5q{CU_u*eNR{+V+37s816sf|^TI*;2ceyuGG
z=Ss+sQ)9Pk49E<Lf%qZEG=<gcTXr2kR0v7OEWKB4{L-+ZEX%xq>>>A)_CQ1S-M+_k
z!wR!2w~UiLSe`o-y+x<qHg(uT@_NX0_HqF9L{Sa^8O)mQX!i=0VQ?kV+eCG6seYSh
z&J**Y%JhUP^@iuI125=O&wIPB`L&W^@1t?3#tK|C!wT;IT_e!*R`9JHWjGb;?Cq|S
z37ZL8&I1kCwIiF>xA51v*D%(=UG9~TH8%TE9n6+B=@^(7%bk#+N<~Mg^lD5#3BK%L
zdlr0K7IfLcuKHzOmmQ;_7BL}0cf$yZD*V74-J=*!iX{Dww)Jt=<f+jKcrSOK<)Fck
zeLYfsO-_O=^9KiHZ7(A1*h#lW-<whY?6<-LpqUkD_9=9he=9s;o%~E&eaj{b%7W8%
z(0KfsB(BG&zFQarjDYBujLU(hxP0`1=C6=^e%R%b(s=sHp0Tt$AG#xDs!ZR!4bPhc
zE~E7-!vL8BUVKYwtf(JqoC9uB3R67PZJnN3Cs?4=2vU8g6u_G9#e6g}Mwl}9JSMKb
zP1)G_CO4l?r)OEO1DCGT<%>=D4va7d;zOcCVoD-P;wVJHYI$|ogLXdj&#-`~_U=hG
z%WdRPCW%ph8xr}7I>3TJ0Rv*LF_QzawqNi_Vs1ID)q$Z~f|s#&?}}P}SGPTrX;Gny
z#I<oC;TUFy2wV7k9#EmPiyHn_xNt=g)AM;vebHcn?G*Q#YL`yg|M-E->Q=LMHG5>h
zh_lShV_${&)|D^4Y)q-w$*hYX5Zxnoz7Ishx6@)POtO2_;CxorCMgR>PN1I=%}W>b
zcDH9R3A7nU_E~X1a}7sjVrg#c8gE0IIs7r6V(|Ri$K568n{cOi$KFLG;u4Yd^Xb=v
zn;1|VyTz^$r-kpidiH!i@0-`89viL$O|CiRo`=DF!IOG6{i-^^UK(U-sxGyYbg|=K
zx-u#udBR3lYTbs(AE%fDcByjMqV$OuBVK>Cu-E_MND-#?T@fUk)8DX!+5PJaHg{^z
zl>KHddqHf?Vk@9&Lc=+&sw>!W)gJPjR5D>xeb<^U=MOWdslXYlFS88MyR1`8JY+)O
zz;nkiss9<E`(WmO&}(IRXIC3=WxD(;Y%21T&+kwC7V^%4GU|x>x6Wr$prc3lLqaC#
zc!@8T1I-Ik8cp9*849@|1ZGS*u|Yg%mBPaFu4;G7+4fz_mK2MPVI@;BD{(AteJuZP
z8%Jk%XzJ`b4B1|-4N;5vA8zTV?Tp(#Zn(A2a>gJlYm4W)ReZn&j32PaE(JD?AiAK-
zUoykA{Deo!#@@_2NHEY8XjVb@U>hX3uVV%Jl*M6>`(t@|vATD|c6qB{57Hs&hD*Me
zr)PIxHZw0`gFDNOSYgKvzE?-8_qUGM`@QX6mTZ3QzMhcVg8OSvm)nDlgX?<=l*EgM
z2CS>x)L7`{?)gD1CG_=)|G$q*f{ASCWMBuJ^swV3tbdM6{ys>0t2zifWW#Pb!Jk^R
zrm&&W<u3ayul_PX!g`c`kxP?Ypq706PH0#Cnd4d==i0*9h*#qao=D$(xA85q1X*-+
zH|vneYcgS;*lFI5tW8}<5Z8v|OO*0en^{utORkL$E5l|on?tB1USn-fXmf<M>V!PV
zu3Jd8Iac2`9!-npN=nk2%u=<xIP_z8*IjS7dNRxLVv<4dT&^Mu(}A_O*5H&_&4;3{
zeSYjU@O2ld?saLvvxA%9I0{KjwSsrOB0>9eP^I^x7RTrXtGGXgfr0pkNlRaC3I(#6
zv)@@0ybzz(G(GeSg$MO!Pj;R17pXPvS)2ExYl|#r<F(O0joKvK2Yhck=O6mWg1Irq
zcCq4T2J%9^pm2P7kGGR?&R|EF5MU5x?nu-tS1Bj=WZ-L>l4U=c_P1wl(sSj0JU;BG
z;${h}r2hupVLAn20|t6O5**yaSu^a6%EijW8Dy^J>TGRq>GJD*N?p+b%8uT8sD=8%
zu4Gb275&Qw#LB>&`RdUJcW(weR)Tj}%1Ix8F2%an7Rb})@n$L?#(U8w8{Kf|+KnYT
zyVHr}uoR0zA)2$pa>Czszck|Eb=2o&e@P~bUza>)Wq2G^mZDjUmVciGnsl`aP|}Z0
ziKiSPMZMYOB|f9bFUI5`%Fbp@%>^P1$c;fdLz4wX5>2ajrUSmSI=VAOWvR!975EVp
zbIvdo38G2nD6WvZ?q_u7VJy=abK|#q?s)8}wxCS-<8W`~7VOL)7M?V`FUBhH6OQ(G
zSrlM9Sl~%muLbNu4X<k#oH>GfyVZE>C3%WLT=_0$2wrH3L{_ZShNcC`<>-;zT}fA{
zpo;5wZK1A~YcCCd<pn#<ih`E+9>OX?+T4*Ss24ecLmHBH6*%A@1s`g(%UeH_K)Sgo
z0Ir7C!@=I`<D&0pT{a!Qa%dGq@cZotmRw>(elRiajN{*nfWsWO8F<y!^?G;X-Pdr$
z%Gsq9d|X3^SD^1o%Z6V+?eXq&ZmtnQoXUIIa8bX5p9viLL=Lu?lt@u@uOM@^;eSuT
z;@u8GXeKsJJa>w0H*tPv8C(!-;4ardv5&UIDD+OqYxlf;aUY^x7RWdo<G;l^wl}$}
z(|7rt^$z~uys)keA-aa~LI}nSjK6r{`q~ckix92qOHo<u*nWpbI6wS0nNF>uyiOmZ
zy{X5uNArD4!W~DM5FNE>v?ROw9?gSgUfgJCXg$-xqV4l~Y+}OtP{k7|LatU3l`c0h
zNq%$C9Y6V@u<B~ScBpLOYcb1%Ewi6bJ=o>%=3OumiR+lHu-JWMakVb=IXoPYE1gQX
zH9175-6Kd@EZ?5U%F)lR9K|uxb3H$qvT`iqDGUv=kk1=hK;!3(02gyTJDHO)15gQ_
z<4|Wjqrh28!%M~&o&nOWlXa(Kg~SkK;m&DODww{xtVp<5WoE%l3`v^qHq9GCLGGv!
zE)XZU=EBl8EIf**U$)N^7~J5xhRCC$O;tpLkMb^(%}R&p93DOSu;tYrM2y=GFvcT!
zYn(l%;58uMBb*pAsG_pfZ6dWlgK81adYt#>mYyf?B^qyjc%$p<C!{7-qqRhgs>8)T
z=L-H%jS{?{?^3o@$?<(09!Iu^i}XiDtg>1ZMZ|0_eUv;P2cNU*0zWa|>&<SH&TgkD
z&an6Wv|9BU^M2ehe9t6Vg5NIF!OFV*7N0F`=g{-*Bl|LcG0{okpfKFf+&RfWw@a!o
z$scT!F5AoV+HcIBdVn<x<ET!V6R0gY!8V}=#`tZrS{iYME6+*kvZjWE?9Y`K!&Q9^
zRolPJb_C7sQQj%N!^#idUtzxgqbGvsN=m&N#*kN}zk5<(>fvey0)u{!zYe$ebrfTv
z5=3n$%u;O)F;4`BD>Ev1W{ckJ*OxEUmG(vm)szr>e@O4QcM;#m0RU9732E)guvN;E
zAxTCbRS+e2jF!)&6OJuvhwG!@KJnA$9H034Uy^U`d_v(6mzIzjNUZ;^U#SyLD~x4@
zTVEj%d{><Erl?CcfLK`unt^L=0KHmfT2#l00Kor{uwSjmf0k@NSAS|kIyfju2bd>y
z!ZAaV$C(T4=<VRKaBtPLo#S{H@dlR+VH#S9a|R$WXQ`+lKA{M%lIXYVwp{%>O1Fc@
z&qE|I8=E!2`eY0BV?B~Hyq_QyR?-`yl*jgU6}opddllv9S>a{)btDEN_erjFV(gWh
zuGC~Bfb6zrCy?bxyWx>h&zV=N{b>5h;G>y~&R3Rz-E%!9%N{iZ{M5mgX6~vD&0~`L
z9$de|iEU3(d>^wwkJO_I-HC-tt)m0@!{@t8vj^^(_$>_`ys1aG%%qA9k)vWbh5ep@
z>@O}9>HOxOXEA76kdCHU9uY9=4ORvTtCl-I@40B)LZHH8)#MVh$w<ICe>DB&SVbiZ
z(2<E~>k;|fh!qT~jXOnB)PP<weo?_e>nq<BY4N(lYxTNYUtjr{7$%Y{=;iw3hyh^*
zBP-;^%HW~!{cfi6*Ieax-=CNAoQ6A>OMW+}(?)IV2+5c}$KMi{a)n+WpIQ3*+|R%*
z5qOq%qj1sVE>QPw1@szciop>_o~WWzD=_2n!52N6QBy_ow2e#$Oh47wT)_Vdr_iyR
zc#Us>MZ=*w2{-?C^|52D%hXDj)rdX4Jg;R!h{cL&!5Sv)iEaNu&SS7c!b^I!CxiA9
zOg0Cc;XIhKFYyKrjyawp*Lo*u-ZV-3cG6KkbB!&)d?%HPzNL~LVgHqA70CSzHNW!G
z;*fR6(ZaM{Jm$R&BkGU>3!ofw{33^ujFh{FV<MinCQ?C;Lg|f>6GR<*JB~fZ>rwo;
zgo~a6^Ui_kmPAkWVU4xE<YUQR`gO&j#+dn)HT#gY$x=>5YVzxRGVw^$y3u4+fMG?P
z9fng!|A6CCu|#&&hr_SzKn59iOX`72gY9+>#SxpH=$E{HOVO4`U{9`exm8y*!#CHI
zJd5Olvgd&HtLwJww!^k4Uk{DvRZuV?#?;j2YL-!pvkZl559YU|_)MU~Fm4j&RdqU>
zbHPuA94SYg$nxcvfhV@KkgK%!TkKuW!kwG}`7AnNxW)QivK_kp0wPMU*oBu)EG$Ju
z%|7)8n>Od?Vr<&|&|q{EdmG)^)J3ATsFbD#H=VTMX<@yXK5jRhse*xOiQ-?P!zLl#
zV=NUkbchtJqs=NP0qlD8%xs+q!->SUsp8D5%6goK#DM{vO|`u`kH6Z27XAwSOzzy7
zzqY99Wp7@x)&<M@S{?YUaYE1_ACe!?Ry6I6EcAzl^?+^E&$`ZyI#(NJjLLACH|he~
zQb-zpw&y#vI$K5;^FvsKW&!!66(y2|-*2LHXG+B7rD#^m@dctluVa<*aKcm_qeJbe
zG1<5F31;zC0He`Yc2DzOE&z|;CmU&YZfkLY+>BGCAbYaUpPwTMw&(1|RdJo|;WxGC
zKYNSD^~Kvmu^&j-GbI&AS!#@qO$6eftB0uIgs~<`O&+2VkvZ$+5eC)vslR0LUdq~*
ziy`nWUsmO6WPgRiB@y(pL@l1m+$h<-Ei_$iI=6~b3Y42(&OEW|Arpg2YW@v6wAY}*
zwM$=2<2=8eH~VgfB=q+FXnn0R&1ZxHiy&zJWQe+Q>hzOzXAiW@aYP!tVCS@;cdeS)
zwSoXL`U)vKnl)`BKSBr>&QMN5#XWvi&eHyK1KZW!x(D>(ZkEFaCul0t(`fyujK8_2
zYt}N#+r`ow*~r_ndCrhkRZpOAy}Vc?=kiFnZ!s`<Jmi^9i=r2t^zgwR8^W>~n@qzU
z^1p3B(_ZQ&9n1!(z&tq)%m$b{n5j5BIJ&TzIXHtJykU02@PjK4ITVy!_g?*sgZhCs
z8SYGijy6(sp2a&;_p?YXhV>E!19(DnAY#qSqCMN7QFl*0^(N?Ke2WBMCkFTHJZc$~
zq_rw_TS(5wShsq_s&tG(P?w7rzafbfrD{amQ7lNATE=?-{I>q7c4W<_p30ErSbiad
zL#YN^e%f^KlGpZ8qF{UXWB4a5?1FG=0ytwh&n`piL@G%i1(|J$24YeW>I9B1!YTcn
z4OMM)WFkH%u&7{gaz1RyiuPTy^ySwzyMy<yG+gY_P%8^la}rgg<NJ=O&0bk{1j50Z
z=AhI({!9v3b)q~=Z&;%a6ULTB7sYZ?9+3Wd+G1D`x?ZG!mXP41C?`j;1-|2sZrKq*
z_~z8t9>LJ@^x}-c>h6!WIm4!s2@e>i*a)!Ke`9Lm==dAbPNm(4E>2iCp^)3Fr>E-t
zQl$afM-s&Z+N74_+I;oji3?JydS$=G!86x3ak{wq0_!1jpLlku3XUtyzpz*m^X)UQ
z)zf*;&1c`65hpk&*Di|np9k#8<wR(lKB6Y>V4>q<(GkZZ$SSnY)8LagOQru5TT!6i
z^ZddM%r)<MyBI_xJbEIJDFCk}=0?#Y>Mo=2dOH1eU^fRVm-jmEM-c?Glca+2w&=#e
z^>oX2z}|!8!}3JFjF|1$!?CZ18$rtQHB$p!K%_xk9mLLdl2r=z_K(RxoZ>C3u|RrC
zPA*DoTbGnprVxq}^Xy0|ep3`^K2aTpjB4BEWhe$*{<4`%oZ6v!CYla<D6P_4A4J(J
zJSVe0c;P8#{B6QjQ#nEQYQS34CbQoWx$;#?>nT`;^?6+EPA7!d=P{{&A!^L7AUM*k
zkXn5kxyLOQ!zmY1uzx!!)%aXpdURCG|L15J3TxC)7Ud<!&EA}4BL^KnnE!nQkB9Jo
z_uIlE_3JAj@Zs{mbl?8Dz@H7Hzo)~&1q24bqW@p*qkm5Pv#;`>i3zZ6_<wg<{<+Sd
z{fGaoQwyWs|J9B7=PG}e<^Qa*LiV3k{w~u0ocw2b`OjocivPXX{Bwmr3z2_Tu&4UH
z!hgz=Kd1ibPXC#jMEz^(pI-IP1^!gOe-?0K{9m;2&*^_|^na%JKl`uge{Fjec_ieA
RzjzG$4uHkkp84UY{|AG|<3Rub

literal 0
HcmV?d00001

diff --git a/matrix_category.xlsx b/matrix_category.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..c3cd0da546301fe7326d79c65e0b9a36fe63d3a9
GIT binary patch
literal 11769
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
U2^r=79q91yV0fG@*zSM(f3oo51poj5

literal 0
HcmV?d00001

diff --git a/projet_en_groupe/.DS_Store b/projet_en_groupe/.DS_Store
index f62eb354c0eca2ffb7a9666b921257d47fa7d7e2..0bebdd61ccf544d5f88a54eb3b651bfcf9fc1fef 100644
GIT binary patch
delta 69
zcmZoMXffEZm4$J~<ZUd4>Jrt}M&_nE3dUx}wK@vbmPQ6T3MR&8wY8iaqRRT#LGjr+
Zxq10rll@uc8M`;<v(8}J%*OGL9{}Ye6!riB

delta 70
zcmZoMXffEZm4$KV<ZUd48j{u3M&@QZ3Wf$2hP65h)s{vEItnJnX0^4P9HPql)<N;v
aIk|cH-IM)T<r#Z6=dsRU+RV=JmmdK37!@c0

diff --git a/projet_en_groupe/algorithme_netflix.py b/projet_en_groupe/algorithme_netflix.py
index fb3c724..b8065a7 100644
--- a/projet_en_groupe/algorithme_netflix.py
+++ b/projet_en_groupe/algorithme_netflix.py
@@ -31,10 +31,12 @@ def movies(data_1): # enregistrement
     films = data_1[data_1['type'] == 'Movie']  # Filter the data to include only movies
     movie_titles = films['title'].tolist()  # Extract movie titles
 
+    movie_df = pd.DataFrame({'Movie Titles': movie_titles})
+
     # afficher que les 100 premiers
 
-    print(movie_titles)  # Display movie titles
-    save_to_csv(movie_titles)
+    print(movie_df)  # Display movie titles
+    save_to_csv(movie_df)
 
     return  # Be careful, you need to ask each time if they want to save the list to a .csv
 
@@ -44,9 +46,11 @@ def series(data_1):
     series = data_1[data_1['type'] == 'TV Show']  # Filter the data to include only series
     series_titles = series['title'].tolist()  # Extract series titles
 
-    print(series_titles)  # Display series titles
+    series_df = pd.DataFrame({'Movie Titles': series_titles})
+
+    print(series_df)  # Display series titles
 
-    save_to_csv(series_titles)
+    save_to_csv(series_df)
 
     return  # Be careful, you need to ask each time if they want to save the list to a .csv
 
@@ -77,10 +81,11 @@ def by_country(data_1):
     filtered_data = filter_media_type(data_1)
 
     country_list = []
-    for countries in filtered_data['country'].dropna().str.split(', '):
+    for countries in filtered_data['country'].dropna().str.split(','):
         for country in countries:
-            if country not in country_list and country != '':
-                country_list.append(country)
+            cleaned_country = country.strip()  # Remove leading and trailing spaces
+            if cleaned_country and cleaned_country not in country_list:
+                country_list.append(cleaned_country)
 
     print("List of all available countries:")
     country_list.sort()
@@ -94,9 +99,9 @@ def by_country(data_1):
         save_to_csv(country_data)
     else:
         print(f"No movies or series found for the country {country_input}.")
-    
 
     return
+
  # Be careful, you need to ask each time if they want to save the list to a .csv
 
 
@@ -139,9 +144,19 @@ def duration(data_1):
     type_input = input("Enter the type (romantic, action, drama, etc.) to display movies and/or series: ").capitalize()
     type_data = filtered_data[filtered_data['listed_in'].str.lower().str.contains(type_input.lower(), case=False, na=False)]
 
-    if not type_data.empty:
+    print("Quel type de tri voulez-vous ? ")
+    print("1. Croissant")
+    print("2. Décroissant")
+    sort_order = str(input("Entrez le numéro du type de tri : "))
 
-        type_data_sorted = type_data.sort_values(by='duration', ascending=True)  # see if we do in ascending or descending
+    if not type_data.empty:
+        if sort_order.lower() == '1':
+            type_data_sorted = type_data.sort_values(by='duration', ascending=True)
+        elif sort_order.lower() == '2':
+            type_data_sorted = type_data.sort_values(by='duration', ascending=False)
+        else:
+            print("Invalid sort order. Defaulting to ascending order.")
+            type_data_sorted = type_data.sort_values(by='duration', ascending=True)
 
         print(type_data_sorted)
         save_to_csv(type_data_sorted)
@@ -149,6 +164,7 @@ def duration(data_1):
         print(f"No movies or series found for the type {type_input}.")
 
 
+
 def director(data_1):
     filtered_data = filter_media_type(data_1)
 
@@ -202,6 +218,9 @@ def specific_genre_director(data_1):
     filtered_data = filter_media_type(data_1)
 
     unique_directors = filtered_data['director'].unique()
+    # Convert elements to strings to handle potential float values
+    unique_directors = [str(director) for director in unique_directors]
+    
     print("List of all available directors:")
     print(', '.join(unique_directors))
 
@@ -233,6 +252,9 @@ def specific_genre_actor(data_1):
     filtered_data = filter_media_type(data_1)
 
     unique_actors = filtered_data['cast'].unique()
+    # Convert elements to strings to handle potential float values
+    unique_actors = [str(actor) for actor in unique_actors]
+    
     print("List of all available actors:")
     print(', '.join(unique_actors))
 
@@ -260,6 +282,7 @@ def specific_genre_actor(data_1):
     return
 
 
+
 # rating
 
 # these are variables that needs to be registered in general not in a local function
@@ -283,7 +306,7 @@ def most_rated(data_1, data_2) :
 
 def most_rated_year(data_1, data_2):
     # Display all available unique release years
-    available_years = data_1['release_year'].unique()
+    available_years = sorted(data_1['release_year'].unique())
     print("Available years: ", available_years) # tri des dates 
 
     # Ask the user to enter a release year
@@ -328,52 +351,74 @@ def most_rated_recent(data_1, data_2):
 
 # Example usage
 
-def parental_code(data_1): # s5542 bug concernant les virgules
+def parental_code(data_1):
+    valid_codes = set(['PG-13', 'TV-MA', 'PG', 'TV-14', 'TV-PG', 'TV-Y', 'TV-Y7', 'R', 'TV-G', 'G', 'NC-17', 'NR', 'TV-Y7-FV', 'UR'])
 
-    code_list = []
-    for codes in data_1['rating'].dropna().str.split(', '):
-        for code in codes:
-            if code not in code_list and code != '':
-                code_list.append(code)
-    print("Here are the parental codes: ")
-    print(code_list)
-    save_to_csv(code_list)
-    return
+    # Filter out entries that are not valid parental codes
+    filtered_data = data_1[data_1['rating'].isin(valid_codes)]
+
+    print("Valid parental codes:")
+    print(', '.join(valid_codes))
 
+    # Ask the user to enter a parental code
+    selected_code = input("Enter a parental code to display movies and/or series: ")
 
+    # Filter the data based on the selected parental code
+    if selected_code in valid_codes:
+        result_data = filtered_data[filtered_data['rating'].str.contains(selected_code, case=False, na=False)]
+        if not result_data.empty:
+            print(result_data)
+            save_to_csv(result_data)
+        else:
+            print(f"No movies or series found for the parental code {selected_code}.")
+    else:
+        print("Invalid parental code entered.")
+
+    return
 
-  #code_parental = input("Entrez le code de contrôle parental : PG-13, TV-MA")
 
 def directors_nationality(data_1):
-    # Check if the 'director' column exists in the dataset
-    if 'director' not in data_1.columns:
-        print("The dataset does not contain a 'director' column.")
+    # Check if the 'director' and 'country' columns exist in the dataset
+    if 'director' not in data_1.columns or 'country' not in data_1.columns:
+        print("The dataset does not contain 'director' or 'country' columns.")
         return
 
     # Extract unique directors and their respective nationalities
     directors_nationality_dict = {}
     for index, row in data_1.iterrows():
-        directors = row['director'].split(', ')
+        directors = str(row['director']).split(', ') if pd.notna(row['director']) else []
         nationality = row['country']
 
         for director in directors:
             if director in directors_nationality_dict:
-                directors_nationality_dict[director]['nationalities'].add(nationality)
-                directors_nationality_dict[director]['count'] += 1
+                # Use a set to store unique nationalities for each director
+                directors_nationality_dict[director]['nationalities'].add(str(nationality))
+                directors_nationality_dict[director]['number of movies or series'] += 1
             else:
-                directors_nationality_dict[director] = {'nationalities': {nationality}, 'count': 1}
+                directors_nationality_dict[director] = {'nationalities': set(), 'number of movies or series': 1}
+                directors_nationality_dict[director]['nationalities'].add(str(nationality))
+
+    # Remove duplicates from the nationalities list for each director
+    for director_info in directors_nationality_dict.values():
+        director_info['nationalities'] = list(set(director_info['nationalities']))
 
     # Sort the directors by the number of movies and series produced
-    sorted_directors = sorted(directors_nationality_dict.items(), key=lambda x: x[1]['count'], reverse=True)
+    sorted_directors = sorted(directors_nationality_dict.items(), key=lambda x: x[1]['number of movies or series'], reverse=True)
+
+    columns = ['director', 'nationalities', 'number of movies or series']
+    directors_df = pd.DataFrame([[director, ', '.join(info['nationalities']), info['number of movies or series']] for director, info in sorted_directors], columns=columns)
 
     # Display the list of directors and their nationalities
     print("Directors and their nationalities, sorted by the number of movies and series produced:")
     for director, info in sorted_directors:
-        print(f"{director}: {', '.join(info['nationalities'])} - {info['count']} movies/series")
-    save_to_csv(sorted_directors)
-    return
+        director_name = str(director) if pd.notna(director) else 'Unknown'
+        nationalities_str = ', '.join(str(n) for n in info['nationalities'])
+        print(f"{director_name}: {nationalities_str} - {info['number of movies or series']} movies/series")
 
+    # Save to CSV using the DataFrame
+    save_to_csv(directors_df)  # Commenting this out since the 'save_to_csv' function is not provided
 
+    return directors_df
 
 
 
@@ -457,26 +502,16 @@ def save_to_csv(data, default_filename='output.csv'):
                 new_filename = new_filename + ".csv"
                 data.to_csv(new_filename, index=False)
                 print(f"Data saved to {new_filename}")
-
-                # Ask if the user wants to open the file
-                open_choice = input("Do you want to open the saved file? (YES/NO): ").upper()
-                if open_choice == 'YES':
-                    os.system(file_name)
         else:
             # Save to a new file
             data.to_csv(file_name, index=False)
             print(f"Data saved to {file_name}")
 
-            # Ask if the user wants to open the file
-            open_choice = input("Do you want to open the saved file? (YES/NO): ").upper()
-            if open_choice == 'YES':
-                os.system(file_name)
     else:
         print("Data not saved.")
 
 
 
-
 # début de l'algorithme de recommandation 
 
 # Load the CSV file
-- 
GitLab