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