{"id":3118,"date":"2026-09-07T01:01:55","date_gmt":"2026-09-07T01:01:55","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-calculer-les-moyennes-mobiles-en-python\/"},"modified":"2026-09-07T01:01:55","modified_gmt":"2026-09-07T01:01:55","slug":"comment-calculer-les-moyennes-mobiles-en-python","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-calculer-les-moyennes-mobiles-en-python","title":{"rendered":"Comment calculer les moyennes mobiles en Python"},"content":{"rendered":"<p>L&rsquo;analyse computationnelle des s\u00e9ries chronologiques constitue l&rsquo;un des piliers m\u00e9thodologiques fondamentaux de la mod\u00e9lisation statistique moderne, irriguant des disciplines aussi vari\u00e9es que l&rsquo;\u00e9conom\u00e9trie quantitative, la psychophysiologie exp\u00e9rimentale, le traitement du signal biom\u00e9dical et la science des donn\u00e9es industrielles. Au c\u0153ur de cette discipline r\u00e9side un d\u00e9fi r\u00e9current : l&rsquo;extraction d&rsquo;un signal d\u00e9terministe informatif noy\u00e9 au sein d&rsquo;une superposition de bruits stochastiques, de micro-fluctuations haute fr\u00e9quence et d&rsquo;artefacts instrumentaux non stationnaires. Face \u00e0 cette variabilit\u00e9 intrins\u00e8que, les chercheurs et ing\u00e9nieurs mobilisent des op\u00e9rateurs d&rsquo;int\u00e9gration temporelle capables de filtrer les perturbations \u00e9ph\u00e9m\u00e8res afin de r\u00e9v\u00e9ler les tendances structurelles profondes et les dynamiques sous-jacentes des syst\u00e8mes dynamiques observ\u00e9s.<\/p>\n<p>Parmi l&rsquo;arsenal des techniques de lissage non param\u00e9trique, les moyennes mobiles occupent une place pr\u00e9pond\u00e9rante en raison de leur tractabilit\u00e9 conceptuelle, de leur faible co\u00fbt computationnel et de leur robustesse empirique. Qu&rsquo;il s&rsquo;agisse de caract\u00e9riser le d\u00e9cours temporel de potentiels \u00e9voqu\u00e9s cognitifs, de quantifier la d\u00e9rive d&rsquo;une constante de temps biologique ou de concevoir des syst\u00e8mes algorithmiques temps r\u00e9el, la moyenne mobile offre un compromis analytique remarquable entre conservation de l&rsquo;information et r\u00e9duction de la variance r\u00e9siduelle. Toutefois, son apparente simplicit\u00e9 arithm\u00e9tique dissimule des propri\u00e9t\u00e9s spectrales complexes, des effets de bord critiques et des ph\u00e9nom\u00e8nes de distorsion de phase qui exigent une formalisation rigoureuse tant sur le plan th\u00e9orique que dans l&rsquo;architecture logicielle retenue pour son impl\u00e9mentation.<\/p>\n<p>Le langage <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.python.org\">Python<\/a> s&rsquo;est impos\u00e9 comme l&rsquo;environnement d&rsquo;ing\u00e9nierie et de recherche par excellence, b\u00e9n\u00e9ficiant d&rsquo;un \u00e9cosyst\u00e8me scientifique hautement optimis\u00e9 gr\u00e2ce \u00e0 des biblioth\u00e8ques matricielles et vectoris\u00e9es. Ce pr\u00e9sent trait\u00e9 exhaustif se propose d&rsquo;explorer m\u00e9thodiquement l&rsquo;int\u00e9gralit\u00e9 du cycle de vie des moyennes mobiles en environnement Python. Depuis les fondements math\u00e9matiques discrets et spectraux jusqu&rsquo;aux optimisations bas niveau via des compilateurs Just-In-Time et des manipulations directes d&rsquo;enjamb\u00e9es m\u00e9moire, nous diss\u00e9querons les architectures algorithmiques, les comportements asymptotiques aux fronti\u00e8res et les d\u00e9rives interpr\u00e9tatives inh\u00e9rentes au traitement des s\u00e9ries temporelles complexes.<\/p>\n<h2>1. Fondements th\u00e9oriques et math\u00e9matiques des moyennes mobiles<\/h2>\n<h3>1.1 D\u00e9finition formelle et principe du lissage temporel<\/h3>\n<p>D&rsquo;un point de vue stochastique, une s\u00e9rie chronologique discr\u00e8te peut \u00eatre mod\u00e9lis\u00e9e comme une r\u00e9alisation s\u00e9quentielle d&rsquo;un processus al\u00e9atoire index\u00e9 par un ensemble ordonn\u00e9 d&rsquo;instants temporels. Dans le paradigme additif canonique, l&rsquo;observation brute \u00e0 un instant donn\u00e9 est d\u00e9compos\u00e9e en la somme d&rsquo;une composante de tendance d\u00e9terministe, d&rsquo;une composante cyclique ou saisonni\u00e8re, et d&rsquo;un r\u00e9sidu stochastique assimil\u00e9 \u00e0 un bruit blanc centr\u00e9 de variance finie. Le principe sous-jacent au lissage temporel consiste \u00e0 appliquer un op\u00e9rateur de convolution discr\u00e8te sur cette trajectoire afin d&rsquo;att\u00e9nuer la variance de la composante stochastique tout en pr\u00e9servant le profil de la trajectoire moyenne.<\/p>\n<p>Sur le plan math\u00e9matique, l&rsquo;op\u00e9rateur de moyenne mobile glissante calcule, pour chaque indice temporel, une combinaison lin\u00e9aire des observations situ\u00e9es \u00e0 l&rsquo;int\u00e9rieur d&rsquo;un voisinage compact d\u00e9sign\u00e9 sous le terme de fen\u00eatre d&rsquo;observation. Si l&rsquo;on consid\u00e8re une fen\u00eatre d&rsquo;int\u00e9gration de dimension impaire ou paire, la formulation continue ou discr\u00e8te projette le signal d&rsquo;origine sur un sous-espace fonctionnel r\u00e9gularis\u00e9. La largeur de cette fen\u00eatre temporelle joue un r\u00f4le direct d&rsquo;hyperparam\u00e8tre de r\u00e9gularisation : plus elle augmente, plus la variance empirique de la s\u00e9rie liss\u00e9e converge vers z\u00e9ro, au d\u00e9triment potentiel de la fid\u00e9lit\u00e9 aux dynamiques locales \u00e0 haute fr\u00e9quence.<\/p>\n<p>En analyse spectrale de Fourier, la moyenne mobile op\u00e8re comme un <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Low-pass_filter\">filtre passe-bas<\/a> lin\u00e9aire \u00e0 r\u00e9ponse impulsionnelle finie. Sa fonction de transfert spectrale, r\u00e9gie par le noyau de Dirichlet ou la transform\u00e9e d&rsquo;une fonction porte discr\u00e8te, r\u00e9v\u00e8le une att\u00e9nuation progressive des composantes fr\u00e9quentielles \u00e9lev\u00e9es, corr\u00e9l\u00e9e \u00e0 la largeur de la fen\u00eatre. N\u00e9anmoins, cette att\u00e9nuation s&rsquo;accompagne d&rsquo;ondulations secondaires ind\u00e9sirables dans la bande d&rsquo;arr\u00eat, illustrant le fait que si la moyenne mobile permet une s\u00e9paration pragmatique entre signal macroscopique et bruit microscopique, elle n&rsquo;op\u00e8re pas une coupure spectrale id\u00e9ale mais introduit une perm\u00e9abilit\u00e9 r\u00e9siduelle \u00e0 certaines harmoniques.<\/p>\n<h3>1.2 Objectifs analytiques et r\u00e9duction du bruit stochastique<\/h3>\n<p>L&rsquo;objectif fondamental assign\u00e9 \u00e0 la moyenne mobile r\u00e9side dans l&rsquo;am\u00e9lioration substantielle du rapport signal sur bruit d&rsquo;un enregistrement empirique. Dans les contextes exp\u00e9rimentaux o\u00f9 les mesures subissent des perturbations d&rsquo;origine thermique, instrumentale ou biologique, les variations instantan\u00e9es d&rsquo;un point \u00e0 l&rsquo;autre ne refl\u00e8tent que tr\u00e8s marginalement l&rsquo;\u00e9volution du ph\u00e9nom\u00e8ne d&rsquo;int\u00e9r\u00eat. En sommant des r\u00e9alisations al\u00e9atoires mutuellement ind\u00e9pendantes issues d&rsquo;une m\u00eame loi de probabilit\u00e9, l&rsquo;erreur type de la moyenne d\u00e9cro\u00eet proportionnellement \u00e0 la racine carr\u00e9e de la taille de l&rsquo;\u00e9chantillon local, en stricte conformit\u00e9 avec le th\u00e9or\u00e8me central limite et la loi faible des grands nombres.<\/p>\n<p>Cette d\u00e9croissance de l&rsquo;amplitude stochastique permet d&rsquo;isoler avec nettet\u00e9 les tendances asymptotiques, les trajectoires d&rsquo;\u00e9rosion ou d&rsquo;acc\u00e9l\u00e9ration \u00e0 moyen et long terme, rendant intelligibles des comportements dynamiques masqu\u00e9s par la variance de haute fr\u00e9quence. L&rsquo;analyste se trouve ainsi en mesure d&rsquo;extraire la d\u00e9riv\u00e9e premi\u00e8re globale du syst\u00e8me sans \u00eatre entrav\u00e9 par la non-diff\u00e9rentiabilit\u00e9 pratique introduite par les asp\u00e9rit\u00e9s du bruit blanc.<\/p>\n<p>Cette propri\u00e9t\u00e9 s&rsquo;av\u00e8re particuli\u00e8rement cruciale dans l&rsquo;analyse de donn\u00e9es chronom\u00e9triques fines, telles que les latences motrices ou les s\u00e9ries temporelles de scores psychom\u00e9triques longitudinaux. Dans ces protocoles d&rsquo;\u00e9valuation cognitive, les performances individuelles fluctuent consid\u00e9rablement d&rsquo;un essai \u00e0 l&rsquo;autre en raison de micro-laps attentionnels ou d&rsquo;artefacts moteurs. L&rsquo;application d&rsquo;une moyenne mobile permet de lisser ces oscillations erratiques afin de tracer la courbe d&rsquo;apprentissage r\u00e9elle, de mod\u00e9liser le d\u00e9cours d&rsquo;\u00e9puisement mental ou d&rsquo;objectiver l&rsquo;effet d&rsquo;une intervention th\u00e9rapeutique continue sans surinterpr\u00e9ter les anomalies ponctuelles.<\/p>\n<h3>1.3 Notion de latence temporelle et d\u00e9phasage<\/h3>\n<p>L&rsquo;un des corollaires in\u00e9vitables du lissage par moyenne mobile causale ou unilat\u00e9rale r\u00e9side dans l&rsquo;apparition d&rsquo;un retard de phase syst\u00e9matique, commun\u00e9ment qualifi\u00e9 de latence temporelle. Lorsqu&rsquo;une fen\u00eatre d&rsquo;int\u00e9gration glissante ne prend en compte que les observations pass\u00e9es et l&rsquo;observation pr\u00e9sente, le point calcul\u00e9 \u00e0 l&rsquo;instant pr\u00e9sent refl\u00e8te en r\u00e9alit\u00e9 le centre de gravit\u00e9 informationnel des \u00e9v\u00e9nements ant\u00e9rieurs. Sur le plan de la th\u00e9orie du signal, ce d\u00e9calage temporel correspond \u00e0 un retard de groupe non nul introduit par la r\u00e9ponse impulsionnelle asym\u00e9trique du filtre causal.<\/p>\n<p>Ce ph\u00e9nom\u00e8ne impose une distinction m\u00e9thodologique majeure entre les moyennes mobiles r\u00e9trospectives et les moyennes mobiles centr\u00e9es. Les moyennes centr\u00e9es distribuent la fen\u00eatre d&rsquo;observation de mani\u00e8re sym\u00e9trique autour de l&rsquo;instant consid\u00e9r\u00e9, int\u00e9grant autant de points pass\u00e9s que de points futurs. Cette configuration bilat\u00e9rale annule parfaitement le d\u00e9phasage lin\u00e9aire, permettant d&rsquo;aligner temporellement les extrema locaux du signal liss\u00e9 avec ceux du signal g\u00e9n\u00e9rateur. Cependant, une telle op\u00e9ration requiert l&rsquo;acc\u00e8s \u00e0 l&rsquo;information future, ce qui la rend strictement inapplicable aux flux de donn\u00e9es en continu ou aux syst\u00e8mes de d\u00e9cision pr\u00e9dictifs en temps r\u00e9el.<\/p>\n<p>L&rsquo;ing\u00e9nieur ou le chercheur se trouve donc confront\u00e9 \u00e0 un compromis irr\u00e9ductible entre la fid\u00e9lit\u00e9 chronologique et la r\u00e9activit\u00e9 instantan\u00e9e du filtre. Une fen\u00eatre causale \u00e9tendue conf\u00e8re une stabilit\u00e9 remarquable au signal r\u00e9sultant mais d\u00e9cale temporellement la d\u00e9tection des inversions de tendance, cr\u00e9ant une inertie pr\u00e9judiciable \u00e0 la r\u00e9activit\u00e9 analytique. \u00c0 l&rsquo;inverse, une fen\u00eatre \u00e9triqu\u00e9e minimise ce retard au prix d&rsquo;une contamination accrue par le bruit r\u00e9siduel, augmentant m\u00e9caniquement le taux d&rsquo;alarmes fallacieuses lors de l&rsquo;identification de changements de r\u00e9gime.<\/p>\n<h2>2. Typologie des moyennes mobiles en analyse quantitative<\/h2>\n<h3>2.1 Moyenne mobile simple (SMA)<\/h3>\n<p>La moyenne mobile simple, universellement d\u00e9sign\u00e9e sous l&rsquo;acronyme anglais <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Moving_average#Simple_moving_average\">SMA (Simple Moving Average)<\/a>, constitue l&rsquo;instanciation la plus \u00e9l\u00e9mentaire de cette famille d&rsquo;op\u00e9rateurs. Elle repose sur le principe d&rsquo;\u00e9quipond\u00e9ration arithm\u00e9tique rigoureuse des observations comprises dans la fen\u00eatre d&rsquo;analyse. Chaque donn\u00e9e historique contenue dans l&rsquo;intervalle temporel de taille d\u00e9termin\u00e9e contribue avec un poids strictement identique \u00e0 la composition de la valeur agr\u00e9g\u00e9e finale, la somme de ces coefficients \u00e9tant syst\u00e9matiquement normalis\u00e9e \u00e0 l&rsquo;unit\u00e9 afin de pr\u00e9server l&rsquo;\u00e9chelle dimensionnelle du signal d&rsquo;origine.<\/p>\n<p>Sur le plan formel, pour une s\u00e9rie discr\u00e8te et une fen\u00eatre d&rsquo;observation de taille fixe, la valeur liss\u00e9e \u00e0 l&rsquo;instant d&rsquo;observation s&rsquo;obtient en divisant la somme arithm\u00e9tique des observations par le nombre total d&rsquo;\u00e9l\u00e9ments consid\u00e9r\u00e9s. Cette formulation discr\u00e8te implique que le noyau de lissage adopte le profil g\u00e9om\u00e9trique d&rsquo;une fonction rectangle ou d&rsquo;une porte unitaire. Bien que cette structure offre une simplicit\u00e9 algorithmique absolue et une interpr\u00e9tabilit\u00e9 intuitive imm\u00e9diate, elle pr\u00e9sente une rigidit\u00e9 structurelle majeure quant \u00e0 la fa\u00e7on dont l&rsquo;information historique est trait\u00e9e par le syst\u00e8me.<\/p>\n<p>La faiblesse critique de la moyenne mobile simple r\u00e9side dans son hyper-sensibilit\u00e9 aux valeurs aberrantes locales et son comportement face aux effets de sortie de fen\u00eatre. Lorsqu&rsquo;une observation extr\u00eame entre dans la fen\u00eatre, elle modifie instantan\u00e9ment la moyenne d&rsquo;un facteur proportionnel \u00e0 son amplitude relative divis\u00e9e par la taille de la fen\u00eatre. Plus probl\u00e9matique encore, lorsque cette valeur extr\u00eame quitte la fen\u00eatre d&rsquo;int\u00e9gration plusieurs pas de temps plus tard, elle induit une seconde variation brusque et sym\u00e9trique dans la s\u00e9rie liss\u00e9e, cr\u00e9ant un artefact spectral d&rsquo;\u00e9cho qui ne correspond \u00e0 aucun changement dynamique r\u00e9el dans le syst\u00e8me sous-jacent au moment pr\u00e9cis de cette \u00e9viction.<\/p>\n<h3>2.2 Moyenne mobile pond\u00e9r\u00e9e (WMA)<\/h3>\n<p>Afin de pallier les \u00e9cueils inh\u00e9rents \u00e0 l&rsquo;\u00e9quipond\u00e9ration de la moyenne simple, la moyenne mobile pond\u00e9r\u00e9e, ou WMA (Weighted Moving Average), introduit une structure de pond\u00e9ration diff\u00e9renci\u00e9e au sein du vecteur d&rsquo;int\u00e9gration. La pr\u00e9misse sous-jacente postule que l&rsquo;information la plus r\u00e9cente poss\u00e8de une pertinence pr\u00e9dictive et descriptive intrins\u00e8quement sup\u00e9rieure \u00e0 celle des \u00e9v\u00e9nements plus distants dans le pass\u00e9. Par cons\u00e9quent, les coefficients associ\u00e9s aux observations successives sont modul\u00e9s de mani\u00e8re \u00e0 accorder un cr\u00e9dit d\u00e9croissant aux points temporels au fur et \u00e0 mesure que leur ant\u00e9riorit\u00e9 augmente.<\/p>\n<p>Dans sa forme lin\u00e9aire canonique, le vecteur de poids est g\u00e9n\u00e9r\u00e9 selon une progression arithm\u00e9tique stricte o\u00f9 la pond\u00e9ration attribu\u00e9e \u00e0 un instant pass\u00e9 d\u00e9cro\u00eet proportionnellement \u00e0 son \u00e9loignement de l&rsquo;horizon pr\u00e9sent. Le d\u00e9nominateur de normalisation est alors d\u00e9fini comme la somme int\u00e9grale des entiers composant la s\u00e9quence de pond\u00e9ration, garantissant que le produit scalaire entre le sous-vecteur de donn\u00e9es et le noyau normalis\u00e9 respecte scrupuleusement la conservation de la masse statistique sans distorsion d&rsquo;amplitude.<\/p>\n<p>Cette approche permet d&rsquo;amortir significativement l&rsquo;effet de seuil observ\u00e9 lors de la sortie d&rsquo;une observation de la fen\u00eatre de calcul. Les valeurs anciennes quittant le support d&rsquo;int\u00e9gration ne se voient attribuer qu&rsquo;un poids r\u00e9siduel infinit\u00e9simal, ce qui \u00e9limine les variations parasites associ\u00e9es \u00e0 la fin de la p\u00e9riode d&rsquo;observation. En outre, la concentration de la masse de Dirac sur les instants contemporains r\u00e9duit substantiellement le d\u00e9phasage global de la s\u00e9rie liss\u00e9e par rapport \u00e0 une SMA de dimension temporelle \u00e9quivalente, offrant ainsi un compromis sup\u00e9rieur entre r\u00e9activit\u00e9 et att\u00e9nuation de la variance.<\/p>\n<h3>2.3 Moyenne mobile exponentielle (EMA)<\/h3>\n<p>La moyenne mobile exponentielle, abr\u00e9g\u00e9e sous le sigle <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Exponential_smoothing\">EMA (Exponential Moving Average)<\/a> ou lissage exponentiel simple, transcende les limitations des fen\u00eatres finies en \u00e9tendant th\u00e9oriquement son support d&rsquo;int\u00e9gration \u00e0 l&rsquo;ensemble infini des observations pass\u00e9es. Contrairement aux op\u00e9rateurs \u00e0 r\u00e9ponse impulsionnelle finie (FIR), l&rsquo;EMA appartient \u00e0 la classe des filtres \u00e0 r\u00e9ponse impulsionnelle infinie (IIR). Elle attribue \u00e0 chaque point historique un poids qui d\u00e9cro\u00eet de fa\u00e7on exponentielle continue au fur et \u00e0 mesure que l&rsquo;on remonte dans le pass\u00e9 temporel de la s\u00e9rie.<\/p>\n<p>L&rsquo;op\u00e9rateur EMA est param\u00e9tr\u00e9 par un scalaire de lissage, traditionnellement not\u00e9 alpha, compris strictement entre z\u00e9ro et un. Ce facteur quantifie la vitesse de m\u00e9moire du syst\u00e8me ou la constante d&rsquo;amortissement g\u00e9om\u00e9trique de la pond\u00e9ration. Plus alpha est proche de l&rsquo;unit\u00e9, plus le filtre accorde une importance exclusive \u00e0 la mesure contemporaine, rendant le signal liss\u00e9 quasi instantan\u00e9 mais tr\u00e8s bruit\u00e9 ; \u00e0 l&rsquo;inverse, une valeur d&rsquo;alpha approchant de z\u00e9ro impose une inertie historique consid\u00e9rable, stabilisant drastiquement la trajectoire au d\u00e9triment de l&rsquo;adaptabilit\u00e9 aux chocs structurels r\u00e9cents.<\/p>\n<p>L&rsquo;avantage cardinal de la formulation exponentielle r\u00e9side dans sa nature r\u00e9cursive, qui \u00e9limine compl\u00e8tement l&rsquo;obligation de stocker en m\u00e9moire vive l&rsquo;historique complet des observations pass\u00e9es. La valeur courante de la moyenne exponentielle se calcule directement et exclusivement \u00e0 partir de la mesure instantan\u00e9e pr\u00e9sente et de l&rsquo;\u00e9tat pr\u00e9c\u00e9dent de la moyenne liss\u00e9e. Cette propri\u00e9t\u00e9 de Markov computationnelle conf\u00e8re \u00e0 l&rsquo;EMA une efficience in\u00e9gal\u00e9e pour le traitement des flux de donn\u00e9es continus et massifs, tout en conf\u00e9rant \u00e0 la courbe liss\u00e9e une remarquable r\u00e9gularit\u00e9 visuelle et math\u00e9matique, exempte de tout soubresaut d&rsquo;\u00e9viction de fen\u00eatre.<\/p>\n<h2>3. Configuration de l&rsquo;environnement Python et pr\u00e9paration des donn\u00e9es<\/h2>\n<h3>3.1 \u00c9cosyst\u00e8me scientifique Python et biblioth\u00e8ques requises<\/h3>\n<p>Le traitement professionnel des s\u00e9ries chronologiques en Python s&rsquo;appuie sur une pile logicielle scientifique \u00e9prouv\u00e9e, assurant une passerelle robuste entre la flexibilit\u00e9 syntaxique du langage de haut niveau et la rapidit\u00e9 d&rsquo;ex\u00e9cution de noyaux compil\u00e9s en C et Fortran. Au socle de cet \u00e9cosyst\u00e8me se trouve <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/numpy.org\">NumPy<\/a>, qui standardise la gestion des structures de tableaux multidimensionnels homog\u00e8nes et propose des routines vectoris\u00e9es d&rsquo;alg\u00e8bre lin\u00e9aire \u00e9l\u00e9mentaire indispensables \u00e0 la manipulation bas niveau des vecteurs de donn\u00e9es num\u00e9riques.<\/p>\n<p>En superposition \u00e0 cette assise vectorielle, la biblioth\u00e8que <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\">Pandas<\/a> fournit les structures de donn\u00e9es complexes n\u00e9cessaires \u00e0 l&rsquo;analyse longitudinale, notamment le Series et le DataFrame, en int\u00e9grant nativement la gestion des index temporels, des valeurs lacunaires et des alignements de donn\u00e9es relationnelles. Pour les op\u00e9rations de filtrage avanc\u00e9, d&rsquo;analyse fr\u00e9quentielle et de convolution formelle, la suite <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/scipy.org\">SciPy<\/a> d\u00e9ploie des algorithmes optimis\u00e9s de traitement du signal, tandis que <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/matplotlib.org\">Matplotlib<\/a> assure le rendu graphique vectoriel pour l&rsquo;inspection des trajectoires liss\u00e9es.<\/p>\n<p>L&rsquo;int\u00e9grit\u00e9 et la reproductibilit\u00e9 des analyses quantitatives imposent une gestion rigoureuse des versions au sein d&rsquo;environnements virtuels isol\u00e9s configur\u00e9s via des gestionnaires de d\u00e9pendances tels que Conda ou Virtualenv. L&rsquo;optimisation de la m\u00e9moire vive constitue un enjeu transversal, particuli\u00e8rement critique lorsque les s\u00e9ries chronologiques s&rsquo;\u00e9tendent sur des millions d&rsquo;enregistrements haute r\u00e9solution. L&rsquo;analyste veillera scrupuleusement \u00e0 typer ses vecteurs selon la pr\u00e9cision num\u00e9rique minimale requise, en convertissant par exemple des scalaires flottants g\u00e9n\u00e9riques 64 bits en formats 32 bits afin de doubler le d\u00e9bit de calcul utile dans les caches processeur L1 et L2.<\/p>\n<h3>3.2 Structure matricielle et typage des s\u00e9ries chronologiques<\/h3>\n<p>La structure fondamentale supportant une s\u00e9rie chronologique en Python doit transcender la simple liste it\u00e9rative native, dont la dispersion en m\u00e9moire sous forme de pointeurs d&rsquo;objets distincts engendre un surco\u00fbt de d\u00e9r\u00e9f\u00e9rencement prohibitif pour les calculs intensifs. Les donn\u00e9es doivent imp\u00e9rativement \u00eatre consolid\u00e9es sous la forme de blocs de m\u00e9moire contigus h\u00e9berg\u00e9s au sein d&rsquo;objets NumPy ndarray ou de s\u00e9ries Pandas b\u00e9n\u00e9ficiant d&rsquo;un index temporel explicite bas\u00e9 sur le type DatetimeIndex.<\/p>\n<p>Ce m\u00e9canisme d&rsquo;indexation temporelle formelle permet d&rsquo;associer de mani\u00e8re univoque chaque observation empirique \u00e0 un horodatage pr\u00e9cis et calibr\u00e9, dot\u00e9 d&rsquo;une granularit\u00e9 pouvant s&rsquo;\u00e9tendre de la milliseconde aux horizons multi-annuels. La conversion d&rsquo;un conteneur h\u00e9t\u00e9rog\u00e8ne ou d&rsquo;un tableau de cha\u00eenes textuelles en une s\u00e9rie temporellement index\u00e9e mobilise des fonctions de d\u00e9s\u00e9rialisation robustes capables d&rsquo;interpr\u00e9ter les normes de datation internationales tout en contraignant l&rsquo;axe des temps \u00e0 une monotonicit\u00e9 strictement croissante, pr\u00e9alable indispensable aux algorithmes d&rsquo;\u00e9chantillonnage glissant.<\/p>\n<p>Un imp\u00e9ratif m\u00e9thodologique souvent n\u00e9glig\u00e9 concerne la v\u00e9rification scrupuleuse de l&rsquo;\u00e9quidistance des intervalles d&rsquo;observation temporels. Les op\u00e9rateurs de moyenne mobile classiques reposent sur l&rsquo;hypoth\u00e8se fondamentale d&rsquo;une fr\u00e9quence d&rsquo;\u00e9chantillonnage invariante dans le temps. En pr\u00e9sence d&rsquo;enregistrements asynchrones ou de battements d&rsquo;horloge irr\u00e9guliers, l&rsquo;application directe d&rsquo;une fen\u00eatre de taille discr\u00e8te fixe induit une distorsion physique s\u00e9v\u00e8re, la fen\u00eatre englobant des dur\u00e9es r\u00e9elles variables d&rsquo;une it\u00e9ration \u00e0 l&rsquo;autre. Dans cette configuration, une \u00e9tape pr\u00e9alable de r\u00e9\u00e9chantillonnage sur une grille temporelle uniforme, assortie d&rsquo;une interpolation rigoureuse, s&rsquo;av\u00e8re th\u00e9oriquement et empiriquement obligatoire.<\/p>\n<h2>4. Calcul de la moyenne mobile avec NumPy pur via cumsum<\/h2>\n<h3>4.1 Algorithme des sommes cumul\u00e9es (cumsum)<\/h3>\n<p>L&rsquo;\u00e9valuation na\u00efve d&rsquo;une moyenne mobile simple le long d&rsquo;un vecteur de dimension N en appliquant des boucles imbriqu\u00e9es pour calculer la somme locale sur chaque sous-segment de longueur k entra\u00eene une complexit\u00e9 algorithmique quadratique en O(N \u00d7 k), totalement prohibitive pour de volumineuses s\u00e9ries de donn\u00e9es. Pour surmonter cet \u00e9cueil, l&rsquo;algorithme des sommes cumul\u00e9es, mat\u00e9rialis\u00e9 par la primitive math\u00e9matique des sommes pr\u00e9fixes, offre une solution \u00e9l\u00e9gante permettant de r\u00e9duire la complexit\u00e9 temporelle globale \u00e0 un co\u00fbt strictement lin\u00e9aire en O(N), ind\u00e9pendant de la taille de la fen\u00eatre de lissage.<\/p>\n<p>Le principe fondamental repose sur le pr\u00e9-calcul d&rsquo;un tableau auxiliaire dans lequel chaque \u00e9l\u00e9ment \u00e0 l&rsquo;indice i repr\u00e9sente la sommation int\u00e9grale de toutes les observations du signal d&rsquo;origine depuis l&rsquo;origine temporelle jusqu&rsquo;\u00e0 l&rsquo;indice pr\u00e9sent. Cette transformation vectorielle s&rsquo;ex\u00e9cute nativement via la fonction numpy.cumsum, exploitant les instructions de vectorisation vectorielles mat\u00e9rielles des architectures de processeurs contemporaines pour cumuler les scalaires \u00e0 tr\u00e8s haut d\u00e9bit.<\/p>\n<p>Une fois cette distribution pr\u00e9fixe constitu\u00e9e, la somme des \u00e9l\u00e9ments d&rsquo;une fen\u00eatre arbitraire comprise entre deux indices ne n\u00e9cessite plus la sommation individuelle des \u00e9l\u00e9ments internes. Elle s&rsquo;obtient instantan\u00e9ment par une simple soustraction scalaire unitaire entre la valeur de la somme cumul\u00e9e \u00e0 l&rsquo;extr\u00e9mit\u00e9 de la fen\u00eatre et celle pr\u00e9c\u00e9dant son origine. En appliquant cette translation d&rsquo;indices vectoris\u00e9e sur l&rsquo;ensemble du tableau et en divisant le r\u00e9sultat par le facteur scalaire constant correspondant \u00e0 la largeur de la fen\u00eatre, l&rsquo;int\u00e9gralit\u00e9 du vecteur liss\u00e9 est calcul\u00e9e en une unique passe diff\u00e9rentielle.<\/p>\n<h3>4.2 Impl\u00e9mentation pas \u00e0 pas de la fonction moving_avg<\/h3>\n<p>La transcription informatique rigoureuse de l&rsquo;algorithme des sommes cumul\u00e9es exige un traitement m\u00e9thodique des conditions initiales afin de garantir un alignement d&rsquo;indices rigoureux et d&rsquo;\u00e9viter les erreurs classiques de d\u00e9calage d&rsquo;une unit\u00e9 temporelle. La fonction d\u00e9di\u00e9e doit accepter en arguments d&rsquo;entr\u00e9e le vecteur de donn\u00e9es unidimensionnel et l&rsquo;entier sp\u00e9cifiant la largeur de la fen\u00eatre d&rsquo;observation, tout en v\u00e9rifiant la compatibilit\u00e9 dimensionnelle de ces op\u00e9randes.<\/p>\n<p>La premi\u00e8re phase computationnelle consiste \u00e0 injecter une valeur sentinelle nulle \u00e0 la t\u00eate du vecteur des sommes cumul\u00e9es au moyen de la directive numpy.insert. Cette insertion permet d&rsquo;\u00e9tendre la dimension du tableau cumulatif de N \u00e0 N + 1 \u00e9l\u00e9ments. Sans cette borne artificielle \u00e9gale \u00e0 z\u00e9ro, le calcul de la toute premi\u00e8re fen\u00eatre de taille k n\u00e9cessiterait une disjonction conditionnelle au sein du code, rompant la vectorisation pure et imposant une d\u00e9gradation des performances lors de l&rsquo;\u00e9valuation du premier bloc temporel.<\/p>\n<p>La seconde phase met en \u0153uvre le d\u00e9coupage vectoriel par tranches indic\u00e9es contigu\u00ebs. En soustrayant le sous-vecteur pr\u00e9fixe d\u00e9butant \u00e0 l&rsquo;indice z\u00e9ro et se terminant \u00e0 la dimension N moins k du sous-vecteur d\u00e9butant \u00e0 l&rsquo;indice k et s&rsquo;\u00e9tendant jusqu&rsquo;\u00e0 la fin du tableau cumulatif augment\u00e9, NumPy ex\u00e9cute une boucle interne native en langage C calculant simultan\u00e9ment toutes les diff\u00e9rences locales. La division finale de ce tableau r\u00e9sultant par l&rsquo;entier k produit le vecteur d\u00e9finitif des valeurs liss\u00e9es en un temps d&rsquo;ex\u00e9cution minimal, garantissant une empreinte computationnelle optimale pour les applications critiques.<\/p>\n<h3>4.3 Validation num\u00e9rique sur jeu de donn\u00e9es test<\/h3>\n<p>Afin d&rsquo;\u00e9prouver la conformit\u00e9 arithm\u00e9tique et la pr\u00e9cision algorithmique de notre impl\u00e9mentation vectoris\u00e9e, consid\u00e9rons le vecteur discret exp\u00e9rimental suivant comprenant dix observations : [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]. Nous fixons arbitrairement une largeur de fen\u00eatre de lissage \u00e9gale \u00e0 3 points. L&rsquo;application de la fonction pr\u00e9fixe enrichie d&rsquo;une sentinelle nulle initiale engendre un vecteur cumul\u00e9 progressif d\u00e9butant par z\u00e9ro, suivi de 50, 105, 141, 190, 274, 349, 450, 536, 616 et culminant \u00e0 720 pour l&rsquo;int\u00e9gration totale.<\/p>\n<p>La premi\u00e8re composante de la moyenne glissante se calcule en isolant la premi\u00e8re fen\u00eatre d&rsquo;observations compos\u00e9e des valeurs 50, 55 et 36. Par l&rsquo;op\u00e9rateur diff\u00e9rentiel des sommes pr\u00e9fixes, cette valeur s&rsquo;obtient en soustrayant la somme cumul\u00e9e \u00e0 l&rsquo;indice 0 (z\u00e9ro) de la somme cumul\u00e9e \u00e0 l&rsquo;indice 3 (141), ce qui donne 141, puis en divisant ce r\u00e9sultat par 3, \u00e9tablissant rigoureusement la moyenne initiale \u00e0 47,0. L&rsquo;it\u00e9ration suivante d\u00e9cale la fen\u00eatre d&rsquo;une position pour englober les termes 55, 36 et 49, correspondant \u00e0 la diff\u00e9rence entre 190 (indice 4) et 50 (indice 1), soit 140, produisant une moyenne mobile exacte de 46,67.<\/p>\n<p>La troisi\u00e8me it\u00e9ration int\u00e8gre les points 36, 49 et 84, mat\u00e9rialis\u00e9e par la diff\u00e9rence entre 274 et 105, soit 169, aboutissant \u00e0 une moyenne de 56,33. L&rsquo;ex\u00e9cution compl\u00e8te de la routine vectoris\u00e9e sur l&rsquo;int\u00e9gralit\u00e9 du tableau produit ainsi un vecteur de sortie constitu\u00e9 de 8 valeurs exactement : [47.0, 46.67, 56.33, 69.33, 86.67, 87.33, 89.0, 90.0]. Cette r\u00e9duction dimensionnelle de 10 \u00e0 8 \u00e9l\u00e9ments d\u00e9coule strictement de la nature causale non compl\u00e9t\u00e9e du calcul, validant num\u00e9riquement l&rsquo;absence totale de d\u00e9rive alg\u00e9brique au sein de l&rsquo;impl\u00e9mentation.<\/p>\n<h2>5. Impl\u00e9mentation standardis\u00e9e avec Pandas rolling<\/h2>\n<h3>5.1 Utilisation de la m\u00e9thode Series.rolling()<\/h3>\n<p>L&rsquo;environnement Pandas standardise le traitement des fen\u00eatres coulissantes au moyen de sa m\u00e9thode native Series.rolling(), offrant une abstraction d\u00e9clarative puissante construite directement sur des structures de bas niveau hautement optimis\u00e9es. La syntaxe canonique requiert simplement de sp\u00e9cifier le param\u00e8tre window, qui d\u00e9finit le nombre discret d&rsquo;observations ou l&rsquo;\u00e9tendue temporelle explicite englob\u00e9e par chaque sous-\u00e9chantillon d&rsquo;\u00e9valuation. L&rsquo;objet r\u00e9sultant, de type Window, ne calcule pas imm\u00e9diatement les valeurs mais expose une interface d&rsquo;agr\u00e9gation paresseuse pr\u00eate \u00e0 recevoir des op\u00e9rateurs math\u00e9matiques vectoris\u00e9s.<\/p>\n<p>L&rsquo;application de l&rsquo;op\u00e9rateur .mean() sur cette structure instancie imm\u00e9diatement l&rsquo;\u00e9valuation s\u00e9quentielle de la moyenne le long de la s\u00e9rie temporelle. Sous le capot, l&rsquo;impl\u00e9mentation interne de Pandas est d\u00e9velopp\u00e9e en code Cython et C pr\u00e9-compil\u00e9, exploitant des algorithmes de type fen\u00eatre glissante incr\u00e9mentale. Au lieu de recalculer la somme de tous les \u00e9l\u00e9ments \u00e0 chaque pas, le moteur interne maintient un accumulateur dynamique en ajoutant la nouvelle valeur entrante et en soustrayant la valeur sortante, pr\u00e9venant ainsi toute d\u00e9gradation computationnelle li\u00e9e \u00e0 l&rsquo;\u00e9largissement de la fen\u00eatre.<\/p>\n<p>Outre cette efficience algorithmique, Pandas prend nativement en charge l&rsquo;alignement des m\u00e9tadonn\u00e9es temporelles. L&rsquo;objet r\u00e9sultant conserve scrupuleusement l&rsquo;index initial de la s\u00e9rie d&rsquo;entr\u00e9e, que celui-ci soit s\u00e9quentiel ou chronologique. Cette pr\u00e9servation int\u00e9grale des coordonn\u00e9es d&rsquo;axe facilite les op\u00e9rations ult\u00e9rieures de concat\u00e9nation, de calculs diff\u00e9rentiels et d&rsquo;analyse relationnelle crois\u00e9e au sein de DataFrames complexes sans exiger de gestion manuelle des dimensions ou de translation d&rsquo;indices de la part de l&rsquo;utilisateur.<\/p>\n<h3>5.2 Fen\u00eatrage centr\u00e9 versus fen\u00eatrage r\u00e9troactif<\/h3>\n<p>Par d\u00e9faut, l&rsquo;op\u00e9rateur rolling() adopte un fen\u00eatrage strictement r\u00e9troactif ou causal, assignant la valeur moyenne calcul\u00e9e sur le sous-ensemble \u00e0 l&rsquo;indice temporel correspondant \u00e0 la borne sup\u00e9rieure droite de la fen\u00eatre. Ce mode de fonctionnement respecte rigoureusement la fl\u00e8che du temps et pr\u00e9vient toute contamination pr\u00e9dictive par des donn\u00e9es ult\u00e9rieures. Cependant, comme explicit\u00e9 dans les fondements th\u00e9oriques, cette causalit\u00e9 impose un d\u00e9calage morphologique de la courbe liss\u00e9e, retardant artificiellement la visibilit\u00e9 des creux et des sommets du signal d&rsquo;origine.<\/p>\n<p>Pour neutraliser ce retard dans les contextes d&rsquo;analyse r\u00e9trospective a posteriori o\u00f9 l&rsquo;int\u00e9gralit\u00e9 du signal historique est d\u00e9j\u00e0 acquise, Pandas permet d&rsquo;activer le param\u00e8tre bool\u00e9en center=True. Lorsqu&rsquo;il est initialis\u00e9 \u00e0 vrai, ce param\u00e8tre r\u00e9organise la fen\u00eatre d&rsquo;observation de mani\u00e8re \u00e0 positionner l&rsquo;indice cible exactement au centre g\u00e9om\u00e9trique du sous-segment d&rsquo;int\u00e9gration. Si la dimension de la fen\u00eatre est impaire, l&rsquo;\u00e9quilibrage est parfait, int\u00e9grant un nombre rigoureusement \u00e9gal de points pass\u00e9s et futurs ; si elle est paire, le point central est ajust\u00e9 conform\u00e9ment aux conventions statistiques standards.<\/p>\n<p>L&rsquo;activation du centrage transforme radicalement la port\u00e9e \u00e9pist\u00e9mologique du lissage : le filtre devient bilat\u00e9ral, \u00e9liminant int\u00e9gralement la latence de phase et pr\u00e9servant le calage chronologique exact des variations dynamiques. Il convient n\u00e9anmoins d&rsquo;insister avec la plus grande fermet\u00e9 sur l&rsquo;inapplicabilit\u00e9 totale et absolue de cette configuration centr\u00e9e dans les syst\u00e8mes de pr\u00e9diction en ligne ou d&rsquo;aide \u00e0 la d\u00e9cision algorithmique temps r\u00e9el. D\u00e9ployer un filtre centr\u00e9 sur un flux op\u00e9rationnel engendre une fuite d&rsquo;information du futur vers le pass\u00e9, faussant irr\u00e9m\u00e9diablement les protocoles de backtesting en leur conf\u00e9rant une performance fictive et irr\u00e9alisable dans des conditions de d\u00e9ploiement effectif.<\/p>\n<h3>5.3 Agr\u00e9gations glissantes compl\u00e9mentaires<\/h3>\n<p>L&rsquo;architecture de la m\u00e9thode rolling() ne se cantonne pas \u00e0 l&rsquo;estimation de la tendance centrale arithm\u00e9tique ; elle constitue un cadre g\u00e9n\u00e9rique d&rsquo;\u00e9valuation de moments statistiques locaux d&rsquo;ordres sup\u00e9rieurs. La caract\u00e9risation rigoureuse d&rsquo;une trajectoire temporelle requiert en effet d&rsquo;associer \u00e0 la moyenne mobile des m\u00e9triques quantifiant la volatilit\u00e9 dynamique, la dispersion locale et la forme des distributions conditionnelles instantan\u00e9es tout au long de la p\u00e9riode d&rsquo;enregistrement.<\/p>\n<p>L&rsquo;op\u00e9rateur .std() permet ainsi d&rsquo;\u00e9valuer de mani\u00e8re continue l&rsquo;\u00e9cart-type mobile de la s\u00e9rie chronologique. Cette trajectoire d&rsquo;\u00e9cart-type capture l&rsquo;h\u00e9t\u00e9rosc\u00e9dasticit\u00e9 locale du processus, r\u00e9v\u00e9lant les phases de contraction de variance ou au contraire les explosions soudaines de bruit exp\u00e9rimental. En compl\u00e9ment, l&rsquo;op\u00e9rateur .median() permet d&rsquo;extraire une m\u00e9diane glissante, constituant un filtre non lin\u00e9aire d&rsquo;une robustesse exceptionnelle face aux artefacts impulsionnels et aux distributions \u00e0 queues \u00e9paisses au sein desquelles la moyenne mobile arithm\u00e9tique subit des distorsions prohibitives.<\/p>\n<p>En combinant ces estimateurs avec l&rsquo;\u00e9valuation des quantiles dynamiques via .quantile(), l&rsquo;analyste dispose de tous les outils math\u00e9matiques n\u00e9cessaires pour \u00e9difier des bandes de confiance empiriques autour de la trajectoire liss\u00e9e. Ces enveloppes stochastiques, dont l&rsquo;\u00e9cartement varie en temps r\u00e9el en fonction de la dispersion locale du signal, permettent d&rsquo;encadrer rigoureusement le comportement structurel du syst\u00e8me et d&rsquo;objectiver imm\u00e9diatement les franchissements de seuils statistiques anormaux.<\/p>\n<h2>6. Calcul des moyennes mobiles pond\u00e9r\u00e9es en Python<\/h2>\n<h3>6.1 D\u00e9finition de noyaux de convolution personnalis\u00e9s<\/h3>\n<p>L&rsquo;impl\u00e9mentation de moyennes mobiles pond\u00e9r\u00e9es arbitraires requiert la mod\u00e9lisation explicite de noyaux de convolution discrets, formalis\u00e9s sous la forme de vecteurs unidimensionnels contenant les coefficients d&rsquo;influence attribu\u00e9s \u00e0 chaque d\u00e9calage temporel relatif. Pour construire une moyenne mobile pond\u00e9r\u00e9e lin\u00e9aire classique de dimension k, l&rsquo;op\u00e9rateur numpy.arange(1, k + 1) permet de g\u00e9n\u00e9rer une progression arithm\u00e9tique unitaire incarnant la m\u00e9moire d\u00e9gressive du filtre.<\/p>\n<p>Une \u00e9tape d&rsquo;une rigueur absolue consiste \u00e0 normaliser ce vecteur de poids afin que la sommation int\u00e9grale de ses composantes soit rigoureusement \u00e9gale \u00e0 un. Cette normalisation scalaire s&rsquo;effectue en divisant chaque coefficient individuel par la somme totale du vecteur, obtenue via la fonction numpy.sum. L&rsquo;omission de cette normalisation introduirait une d\u00e9formation d&rsquo;amplitude majeure, amplifiant ou att\u00e9nuant le signal transform\u00e9 proportionnellement au facteur d&rsquo;\u00e9chelle non compens\u00e9 du noyau.<\/p>\n<p>Cette approche matricielle ouvre la voie \u00e0 la d\u00e9finition de noyaux hautement personnalis\u00e9s, tels que des pond\u00e9rations triangulaires, paraboliques, gaussiennes ou des fen\u00eatres de type Blackman-Harris. Chacune de ces g\u00e9om\u00e9tries conf\u00e8re au filtre des propri\u00e9t\u00e9s de coupure spectrale sp\u00e9cifiques, permettant de cibler tr\u00e8s pr\u00e9cis\u00e9ment l&rsquo;att\u00e9nuation de bandes de fr\u00e9quences parasites sans n\u00e9cessiter de refonte de la logique d&rsquo;int\u00e9gration sous-jacente.<\/p>\n<h3>6.2 Application avec la fonction scipy.ndimage.convolve1d<\/h3>\n<p>Pour appliquer un noyau de pond\u00e9ration sur une s\u00e9rie temporelle sans recourir \u00e0 des boucles explicites lentes et inefficaces, la fonction convolve1d issue du module scipy.ndimage constitue une r\u00e9f\u00e9rence algorithmique de premier ordre. Cette routine ex\u00e9cute une convolution spatiale ou temporelle unidimensionnelle optimis\u00e9e au niveau machine, projetant le noyau discret sur chaque point d&rsquo;impact du vecteur cible \u00e0 une vitesse d&rsquo;ex\u00e9cution remarquable.<\/p>\n<p>L&rsquo;un des atouts d\u00e9terminants de convolve1d r\u00e9side dans la flexibilit\u00e9 sophistiqu\u00e9e avec laquelle elle traite les conditions aux limites, c&rsquo;est-\u00e0-dire le comportement algorithmique impos\u00e9 lorsque le noyau d\u00e9passe les extr\u00e9mit\u00e9s physiques du tableau de donn\u00e9es. L&rsquo;argument mode permet de choisir parmi une vaste typologie de prolongements : le mode reflect duplique les valeurs par sym\u00e9trie sp\u00e9culaire aux fronti\u00e8res, le mode constant injecte une valeur scalaire pr\u00e9d\u00e9finie (souvent z\u00e9ro), tandis que le mode nearest \u00e9tend la premi\u00e8re et la derni\u00e8re valeur connues.<\/p>\n<p>Cette gestion native des bords temporels \u00e9vite l&rsquo;apparition m\u00e9canique de valeurs ind\u00e9termin\u00e9es aux extr\u00e9mit\u00e9s de la s\u00e9rie, pr\u00e9servant ainsi l&rsquo;int\u00e9gralit\u00e9 dimensionnelle du vecteur de d\u00e9part. Comparativement aux boucles \u00e9crites en pur code Python, convolve1d r\u00e9duit les temps de traitement de plusieurs ordres de grandeur, se r\u00e9v\u00e9lant indispensable pour le traitement de s\u00e9ries massives issues d&rsquo;acquisitions de capteurs continus.<\/p>\n<h3>6.3 Impl\u00e9mentation vectoris\u00e9e via NumPy dot<\/h3>\n<p>Une alternative \u00e9l\u00e9gante pour calculer une moyenne mobile pond\u00e9r\u00e9e en pur environnement NumPy consiste \u00e0 reformuler le probl\u00e8me sous la forme d&rsquo;un produit matriciel condens\u00e9 en exploitant l&rsquo;op\u00e9rateur numpy.dot. Cette m\u00e9thodologie convertit la s\u00e9quence temporelle en une matrice de Toeplitz ou une matrice de sous-fen\u00eatres coulissantes, o\u00f9 chaque ligne repr\u00e9sente un segment temporel de largeur k, avant d&rsquo;effectuer une multiplication scalaire globale avec le vecteur de poids normalis\u00e9.<\/p>\n<p>La puissance de cette formulation d\u00e9coule directement de l&rsquo;exploitation sous-jacente des biblioth\u00e8ques d&rsquo;alg\u00e8bre lin\u00e9aire de tr\u00e8s haut niveau, telles que BLAS et LAPACK, int\u00e9gr\u00e9es nativement dans les distributions NumPy standard. Ces moteurs exploitent au maximum les registres vectoriels et les optimisations multithread mat\u00e9rielles du microprocesseur, surpassant les m\u00e9canismes d&rsquo;it\u00e9ration s\u00e9quentielle traditionnels d\u00e8s lors que la structure tient confortablement dans le cache processeur.<\/p>\n<p>Il importe toutefois de souligner une contrainte structurelle inh\u00e9rente \u00e0 cette approche : la duplication matricielle de la s\u00e9rie originale peut engendrer une empreinte m\u00e9moire vive disproportionn\u00e9e. La conversion d&rsquo;un vecteur de grande taille en une matrice fen\u00eatr\u00e9e explicite multiplie l&rsquo;occupation m\u00e9moire par un facteur approximativement \u00e9gal \u00e0 la taille k de la fen\u00eatre. Si cette m\u00e9thode brille par sa vitesse sur des vecteurs de taille mod\u00e9r\u00e9e, elle peut saturer la m\u00e9moire lors du traitement de s\u00e9ries temporelles massives, n\u00e9cessitant alors le recours \u00e0 des repr\u00e9sentations par vues sans copie physique.<\/p>\n<h2>7. Calcul de la moyenne mobile exponentielle avec Pandas ewm<\/h2>\n<h3>7.1 Param\u00e9trage math\u00e9matique de Series.ewm()<\/h3>\n<p>L&rsquo;impl\u00e9mentation de la moyenne mobile exponentielle dans Pandas s&rsquo;articule autour de la m\u00e9thode universelle Series.ewm() (Exponentially Weighted Moving), qui encapsule une formalisation math\u00e9matique extr\u00eamement versatile de la d\u00e9croissance g\u00e9om\u00e9trique. Afin d&rsquo;offrir une flexibilit\u00e9 maximale adapt\u00e9e aux standards des diverses disciplines scientifiques, Pandas propose quatre param\u00e9trisations mutuellement exclusives du taux de lissage : l&rsquo;alpha direct, la demi-vie (halflife), l&rsquo;\u00e9tendue temporelle (span) et le centre de masse (com).<\/p>\n<p>Le param\u00e8tre span repr\u00e9sente sans doute la convention la plus couramment adopt\u00e9e dans la pratique quantitative, car il \u00e9tablit une correspondance intuitive avec la fen\u00eatre d&rsquo;une moyenne mobile simple. La relation math\u00e9matique exacte liant l&rsquo;alpha au span est d\u00e9finie par la formule : alpha = 2 \/ (span + 1). Par exemple, sp\u00e9cifier un span de 19 pas temporels \u00e9quivaut rigoureusement \u00e0 attribuer une valeur d&rsquo;alpha de 0,1. Le param\u00e8tre halflife, quant \u00e0 lui, quantifie la dur\u00e9e n\u00e9cessaire pour que le coefficient de pond\u00e9ration relative d&rsquo;une observation historique soit divis\u00e9 exactement par deux, une m\u00e9trique particuli\u00e8rement usit\u00e9e en mod\u00e9lisation physique et financi\u00e8re.<\/p>\n<p>Une subtilit\u00e9 fondamentale du param\u00e9trage de Series.ewm() r\u00e9side dans l&rsquo;utilisation de l&rsquo;argument bool\u00e9en adjust. Lorsque adjust=True (le comportement par d\u00e9faut), Pandas emploie une formulation non biais\u00e9e pour les premiers pas temporels, divisant la somme pond\u00e9r\u00e9e par la somme effective des poids g\u00e9om\u00e9triques accumul\u00e9s depuis l&rsquo;origine de l&rsquo;enregistrement. Lorsque adjust=False, l&rsquo;\u00e9valuation bascule en mode r\u00e9cursif pur, appliquant rigoureusement la relation de r\u00e9currence standard de l&rsquo;EMA depuis la premi\u00e8re mesure, ce qui introduit un biais transitoire sur les premi\u00e8res valeurs de la s\u00e9rie mais garantit une stricte continuit\u00e9 d&rsquo;\u00e9tat en flux continu.<\/p>\n<h3>7.2 Codage et ex\u00e9cution compar\u00e9e sur les s\u00e9ries de donn\u00e9es<\/h3>\n<p>Pour observer empiriquement la dynamique de r\u00e9ponse de l&rsquo;EMA face aux perturbations d&rsquo;un signal, nous pouvons orchestrer un script comparatif appliquant diff\u00e9rentes valeurs de d\u00e9croissance exponentielle sur une s\u00e9rie chronologique pr\u00e9sentant des discontinuit\u00e9s de pente nettes et des sauts de palier soudains. En soumettant cette s\u00e9rie test \u00e0 des configurations d&rsquo;EMA dot\u00e9es de spans vari\u00e9s, les comportements temporels r\u00e9v\u00e8lent la modulation fine de l&rsquo;inertie du filtre.<\/p>\n<p>L&rsquo;ex\u00e9cution de la m\u00e9thode ewm(span=k).mean() sur ces donn\u00e9es d\u00e9montre visuellement et num\u00e9riquement la sup\u00e9riorit\u00e9 de l&rsquo;EMA en mati\u00e8re de r\u00e9activit\u00e9 face aux ruptures de tendance abruptes. Alors qu&rsquo;une moyenne mobile simple r\u00e9agit avec une inertie constante impos\u00e9e par son bloc de donn\u00e9es rectangulaire, l&rsquo;EMA r\u00e9agit imm\u00e9diatement d\u00e8s l&rsquo;instant de la transition, sa d\u00e9riv\u00e9e s&rsquo;ajustant avec vivacit\u00e9 en raison de la concentration maximale de son noyau de pond\u00e9ration sur le point contemporain.<\/p>\n<p>De surcro\u00eet, l&rsquo;analyse des s\u00e9ries liss\u00e9es met en \u00e9vidence la stabilit\u00e9 asymptotique de l&rsquo;EMA face aux valeurs aberrantes isol\u00e9es. Tandis qu&rsquo;une SMA subit deux perturbations nettes et artificielles lors de l&rsquo;entr\u00e9e puis de la sortie du point extr\u00eame, l&rsquo;EMA absorbe la d\u00e9viation en une inflexion unique et asym\u00e9trique, suivie d&rsquo;un retour exponentiel r\u00e9gulier vers la trajectoire d&rsquo;\u00e9quilibre du syst\u00e8me, pr\u00e9venant l&rsquo;apparition d&rsquo;artefacts secondaires dans les donn\u00e9es de sortie.<\/p>\n<h3>7.3 Adaptation aux flux de donn\u00e9es en continu<\/h3>\n<p>L&rsquo;architecture r\u00e9cursive intrins\u00e8que de la moyenne mobile exponentielle en fait la candidate algorithmique id\u00e9ale pour le traitement de donn\u00e9es en flux ininterrompu (streaming data) et les architectures d&rsquo;ingestion temps r\u00e9el. Contrairement aux approches par fen\u00eatres glissantes finies qui exigent le maintien en m\u00e9moire d&rsquo;une file d&rsquo;attente FIFO (First In, First Out) de dimension k, l&rsquo;EMA n&rsquo;a besoin d&rsquo;allouer aucun espace m\u00e9moire pour stocker l&rsquo;historique des points pass\u00e9s.<\/p>\n<p>L&rsquo;\u00e9valuation incr\u00e9mentale d&rsquo;une nouvelle valeur de moyenne exponentielle lors de l&rsquo;apparition d&rsquo;un nouvel \u00e9v\u00e9nement sensoriel se r\u00e9sume \u00e0 une op\u00e9ration \u00e9l\u00e9mentaire combinant la nouvelle observation multipli\u00e9e par alpha et l&rsquo;\u00e9tat m\u00e9moriel ant\u00e9rieur multipli\u00e9 par le compl\u00e9mentaire un moins alpha. Cette mise \u00e0 jour d&rsquo;\u00e9tat s&rsquo;ex\u00e9cute avec une complexit\u00e9 temporelle unitaire en O(1) et une empreinte spatiale strictement constante, ce qui permet son ex\u00e9cution sans surchauffe sur des microcontr\u00f4leurs embarqu\u00e9s ou des syst\u00e8mes distribu\u00e9s \u00e0 tr\u00e8s haute fr\u00e9quence.<\/p>\n<p>Dans les applications de monitoring comportemental en continu ou d&rsquo;analyse t\u00e9l\u00e9m\u00e9trique biom\u00e9dicale, cette formulation r\u00e9cursive permet de traquer instantan\u00e9ment l&rsquo;\u00e9tat physiologique ou op\u00e9ratoire d&rsquo;un sujet sans jamais subir de latence de recalcul global de m\u00e9moire. La stabilit\u00e9 computationnelle ainsi acquise garantit que le syst\u00e8me peut fonctionner de mani\u00e8re ind\u00e9finie dans le temps sans risque d&rsquo;\u00e9puisement des ressources m\u00e9moire vive ou de d\u00e9gradation du d\u00e9bit de traitement.<\/p>\n<h2>8. Traitement des valeurs manquantes et gestion des bords temporels<\/h2>\n<h3>8.1 Gestion des valeurs NaN g\u00e9n\u00e9r\u00e9es par la fen\u00eatre initiale<\/h3>\n<p>L&rsquo;application d&rsquo;un op\u00e9rateur de moyenne mobile sur une s\u00e9rie discr\u00e8te engendre m\u00e9caniquement une zone d&rsquo;ind\u00e9termination num\u00e9rique aux fronti\u00e8res initiales du signal. Pour une fen\u00eatre causale stricte de dimension k, les k &#8211; 1 premi\u00e8res positions temporelles ne disposent pas d&rsquo;un historique pass\u00e9 suffisant pour constituer un \u00e9chantillon complet. Par cons\u00e9quent, les biblioth\u00e8ques scientifiques rigoureuses comme Pandas injectent des valeurs non d\u00e9finies (NaN, pour Not a Number) sur ces positions initiales afin de pr\u00e9server l&rsquo;alignement temporel des index sans inventer de donn\u00e9es fictives.<\/p>\n<p>Pour assouplir cette contrainte g\u00e9om\u00e9trique dans les cas o\u00f9 la pr\u00e9servation du volume de donn\u00e9es pr\u00e9vaut sur la stricte \u00e9quivalence de taille de fen\u00eatre, Pandas int\u00e8gre le param\u00e8tre min_periods au sein de sa m\u00e9thode rolling(). Par d\u00e9faut, min_periods est implicitement cal\u00e9 sur la dimension de la fen\u00eatre k. En r\u00e9duisant explicitement cette valeur, par exemple en assignant min_periods=1, l&rsquo;utilisateur autorise le moteur \u00e0 calculer une moyenne arithm\u00e9tique partielle d\u00e8s la premi\u00e8re observation disponible, augmentant progressivement la taille effective de la fen\u00eatre jusqu&rsquo;\u00e0 atteindre le r\u00e9gime de croisi\u00e8re nominal.<\/p>\n<p>Si l&rsquo;analyste d\u00e9cide en revanche de maintenir l&rsquo;exigence d&rsquo;une fen\u00eatre compl\u00e8te, deux strat\u00e9gies de post-traitement s&rsquo;offrent \u00e0 lui. La premi\u00e8re consiste \u00e0 purger int\u00e9gralement ces valeurs initiales ind\u00e9termin\u00e9es en appliquant la m\u00e9thode .dropna(), r\u00e9duisant ainsi la dimensionnalit\u00e9 globale du vecteur. La seconde strat\u00e9gie consiste \u00e0 propager en arri\u00e8re la premi\u00e8re valeur valide calcul\u00e9e via l&rsquo;op\u00e9rateur .bfill() (backward fill), comblant le vide initial par une estimation constante afin de pr\u00e9server la longueur matricielle initiale sans introduire de discontinuit\u00e9 trop abrupte.<\/p>\n<h3>8.2 Impact des donn\u00e9es manquantes internes \u00e0 la s\u00e9rie<\/h3>\n<p>La pr\u00e9sence de valeurs manquantes diss\u00e9min\u00e9es au sein m\u00eame de la s\u00e9rie temporelle pose un d\u00e9fi algorithmique majeur lors du lissage par moyenne mobile. En arithm\u00e9tique \u00e0 virgule flottante standard r\u00e9gie par la norme IEEE 754, toute op\u00e9ration \u00e9l\u00e9mentaire impliquant une valeur NaN renvoie in\u00e9luctablement une valeur NaN. Par cons\u00e9quent, dans un calcul glissant non corrig\u00e9, une unique valeur manquante isol\u00e9e a tendance \u00e0 se propager m\u00e9caniquement sur toute la largeur k de la fen\u00eatre, contaminant et invalidant k points cons\u00e9cutifs de la s\u00e9rie liss\u00e9e r\u00e9sultante.<\/p>\n<p>Pandas pallie partiellement cette fragilit\u00e9 en ignorant nativement les NaN situ\u00e9s \u00e0 l&rsquo;int\u00e9rieur de la fen\u00eatre active et en recalculant le d\u00e9nominateur sur la base du sous-ensemble des points r\u00e9els effectivement observ\u00e9s, \u00e0 condition que leur nombre total demeure sup\u00e9rieur ou \u00e9gal au seuil fix\u00e9 par min_periods. Bien que robuste au niveau du code, ce comportement introduit une alt\u00e9ration statistique silencieuse : la taille de l&rsquo;\u00e9chantillon d&rsquo;int\u00e9gration varie localement d&rsquo;un pas de temps \u00e0 l&rsquo;autre, ce qui modifie instantan\u00e9ment la variance de l&rsquo;estimateur sans que l&rsquo;analyste n&rsquo;en soit explicitement alert\u00e9.<\/p>\n<p>Une alternative m\u00e9thodologique plus rigoureuse consiste \u00e0 pr\u00e9c\u00e9der l&rsquo;op\u00e9ration de lissage d&rsquo;une phase formelle d&rsquo;imputation via la m\u00e9thode Series.interpolate(). L&rsquo;application d&rsquo;une interpolation lin\u00e9aire, splinaire ou polynomiale le long de l&rsquo;axe temporel permet de reconstituer une estimation continue et vraisemblable de la trajectoire latente. Cependant, l&rsquo;analyste quantitatif doit imp\u00e9rativement \u00e9valuer le biais m\u00e9thodologique induit par cette reconstitution artificielle, en \u00e9vitant d&rsquo;interpoler des plages lacunaires dont la dur\u00e9e exc\u00e8de l&rsquo;\u00e9chelle des dynamiques physiques ou comportementales sous-jacentes.<\/p>\n<h3>8.3 Comportement asymptotique aux fronti\u00e8res<\/h3>\n<p>Aux extr\u00e9mit\u00e9s d&rsquo;un enregistrement empirique, les propri\u00e9t\u00e9s d&rsquo;invariance par translation des filtres lin\u00e9aires cessent d&rsquo;op\u00e9rer en raison de la troncation nette du domaine de d\u00e9finition. Qu&rsquo;il s&rsquo;agisse de moyennes mobiles causales priv\u00e9es de leur pass\u00e9 au d\u00e9part, ou de moyennes mobiles centr\u00e9es tronqu\u00e9es \u00e0 la fois \u00e0 l&rsquo;origine et au terme de la s\u00e9quence, le comportement statistique des estimateurs subit une distorsion syst\u00e9matique connue sous le nom d&rsquo;effet de bordure ou distorsion de bord.<\/p>\n<p>\u00c0 mesure que la fen\u00eatre se rapproche des fronti\u00e8res physiques des donn\u00e9es, la variance de l&rsquo;estimateur liss\u00e9 tend \u00e0 cro\u00eetre si l&rsquo;algorithme r\u00e9duit la dimension effective de la fen\u00eatre pour compenser la troncature, ou \u00e0 d\u00e9river de fa\u00e7on biais\u00e9e si les donn\u00e9es ext\u00e9rieures manquantes sont arbitrairement remplac\u00e9es par des z\u00e9ros ou des valeurs miroirs artificielles. Dans le cas de fen\u00eatres centr\u00e9es, la perte irr\u00e9versible de la moiti\u00e9 de la fen\u00eatre aux deux extr\u00e9mit\u00e9s impose de documenter formellement la r\u00e9duction d&rsquo;ordre du filtre ou de tronquer proprement les marges de calcul pour ne pas propager d&rsquo;artefacts statistiques dans les analyses inf\u00e9rentielles subs\u00e9quentes.<\/p>\n<p>Les bonnes pratiques en science des donn\u00e9es et en analyse quantitative imposent de formuler explicitement dans les rapports acad\u00e9miques la m\u00e9thodologie retenue pour traiter ces fronti\u00e8res. Que l&rsquo;on opte pour une troncature pure et simple des segments marginaux, pour une renormalisation dynamique des poids par fen\u00eatres tronqu\u00e9es, ou pour un prolongement pr\u00e9dictif autor\u00e9gressif aux limites, chaque choix modifie la structure de covariance des r\u00e9sidus et doit faire l&rsquo;objet d&rsquo;une tra\u00e7abilit\u00e9 algorithmique totale.<\/p>\n<h2>9. Optimisation computationnelle pour s\u00e9ries temporelles massives<\/h2>\n<h3>9.1 Comparaison de performance empirique : Benchmark<\/h3>\n<p>D\u00e8s lors que l&rsquo;on manipule des enregistrements haute fr\u00e9quence ou des bases de donn\u00e9es massives int\u00e9grant des dizaines de millions de lignes, l&rsquo;efficacit\u00e9 computationnelle des diff\u00e9rentes approches de calcul de moyennes mobiles devient un enjeu critique de viabilit\u00e9 syst\u00e8me. Pour quantifier empiriquement ces \u00e9carts de performance, la mise en place d&rsquo;un protocole de profilage rigoureux \u00e0 l&rsquo;aide du module standard <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/docs.python.org\/3\/library\/timeit.html\">timeit<\/a> permet de neutraliser la gigue d&rsquo;ordonnancement syst\u00e8me et d&rsquo;isoler le co\u00fbt algorithmique pur.<\/p>\n<p>Le banc d&rsquo;essai comparatif r\u00e9v\u00e8le des disparit\u00e9s d&rsquo;ordre de grandeur spectaculaires entre les paradigmes d&rsquo;impl\u00e9mentation. Une boucle native standard \u00e9crite en langage Python interpr\u00e9t\u00e9 affiche une p\u00e9nalit\u00e9 de lenteur prohibitive, son temps d&rsquo;ex\u00e9cution augmentant de mani\u00e8re drastique sous l&rsquo;effet du surco\u00fbt de typage dynamique et de l&rsquo;absence de mise en cache vectorielle. \u00c0 l&rsquo;oppos\u00e9, l&rsquo;algorithme bas\u00e9 sur numpy.cumsum d\u00e9montre une rapidit\u00e9 fulgurante sur les structures de donn\u00e9es contigu\u00ebs, surclassant r\u00e9guli\u00e8rement les autres m\u00e9thodes sur des volumes moyens gr\u00e2ce \u00e0 sa vectorisation diff\u00e9rentielle minimale.<\/p>\n<p>L&rsquo;op\u00e9rateur Series.rolling() de Pandas, tout en introduisant un tr\u00e8s l\u00e9ger surco\u00fbt li\u00e9 \u00e0 la gestion des index et des m\u00e9tadonn\u00e9es de s\u00e9ries, offre une stabilit\u00e9 remarquable et un d\u00e9bit d&rsquo;ex\u00e9cution tr\u00e8s \u00e9lev\u00e9 sur les volum\u00e9tries massives gr\u00e2ce \u00e0 ses boucles internes optimis\u00e9es en C. Lorsque la dimension N de la s\u00e9rie franchit les \u00e9chelles sup\u00e9rieures, la consommation m\u00e9moire relative devient le crit\u00e8re discriminant pr\u00e9pond\u00e9rant, disqualifiant les approches de convolution matricielle int\u00e9grale au profit des accumulateurs incr\u00e9mentaux en ligne.<\/p>\n<h3>9.2 Acc\u00e9l\u00e9ration JIT avec Numba<\/h3>\n<p>Lorsque les besoins de l&rsquo;analyse exigent la conception de filtres personnalis\u00e9s non standards int\u00e9grant des conditions non lin\u00e9aires complexes au sein de la fen\u00eatre glissante, la vectorisation pure via NumPy ou Pandas se heurte \u00e0 ses propres limites expressives. Dans cette configuration, le recours \u00e0 la compilation Just-In-Time (JIT) offerte par la biblioth\u00e8que <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/numba.pydata.org\">Numba<\/a> constitue la solution technologique d&rsquo;optimisation la plus radicale et performante de l&rsquo;\u00e9cosyst\u00e8me Python contemporain.<\/p>\n<p>En d\u00e9corant une fonction de boucle it\u00e9rative native avec l&rsquo;attribut @njit (qui impose une compilation en mode no-python strict), Numba compile directement le bytecode Python en instructions machine natives optimis\u00e9es via l&rsquo;infrastructure LLVM. Le code machine r\u00e9sultant \u00e9limine compl\u00e8tement les allers-retours avec l&rsquo;interpr\u00e9teur Python, ex\u00e9cute les boucles \u00e0 des vitesses comparables au C pur et permet un agencement optimal des registres et de la pr\u00e9-lecture de donn\u00e9es dans la m\u00e9moire cache du microprocesseur.<\/p>\n<p>En outre, Numba permet de parall\u00e9liser trivialement le calcul le long de multiples c\u0153urs processeurs en activant l&rsquo;argument parallel=True combin\u00e9 \u00e0 des boucles prange. Cette parall\u00e9lisation multi-c\u0153ur native prend tout son sens lors du traitement conjoint de s\u00e9ries multi-participants ou d&rsquo;enregistrements physiologiques multicanaux, permettant de diviser le temps de lissage global par un facteur quasi proportionnel au nombre de threads mat\u00e9riels disponibles sur la machine h\u00f4te.<\/p>\n<h3>9.3 Vectorisation par fen\u00eatres coulissantes avec NumPy stride_tricks<\/h3>\n<p>L&rsquo;une des fonctionnalit\u00e9s les plus puissantes et \u00e9l\u00e9gantes de NumPy pour l&rsquo;analyse par fen\u00eatres glissantes r\u00e9side dans l&rsquo;exploitation fine de la g\u00e9om\u00e9trie de m\u00e9moire au travers de la fonction sliding_window_view, accessible via le sous-module numpy.lib.stride_tricks. Cette m\u00e9thode permet de g\u00e9n\u00e9rer une vue multidimensionnelle d&rsquo;un tableau unidimensionnel sans effectuer aucune copie physique de donn\u00e9es en m\u00e9moire vive.<\/p>\n<p>Le m\u00e9canisme repose sur la manipulation directe des enjamb\u00e9es m\u00e9moire (strides), qui dictent le nombre d&rsquo;octets que le moteur doit franchir pour passer d&rsquo;un \u00e9l\u00e9ment au suivant selon chaque dimension du tenseur virtuel. En cr\u00e9ant un axe suppl\u00e9mentaire dont les pas m\u00e9moire se chevauchent, NumPy pr\u00e9sente \u00e0 l&rsquo;utilisateur une matrice compl\u00e8te de toutes les sous-fen\u00eatres temporelles successives tout en conservant une empreinte m\u00e9moire strictement identique \u00e0 celle du tableau de d\u00e9part original.<\/p>\n<p>Une fois cette vue virtuelle structur\u00e9e, il devient trivial d&rsquo;appliquer des op\u00e9rations de r\u00e9duction le long du dernier axe, telles que .mean(axis=-1), pour obtenir le vecteur liss\u00e9 instantan\u00e9ment. Il importe n\u00e9anmoins de manier ces manipulations d&rsquo;enjamb\u00e9es avec une extr\u00eame pr\u00e9caution : les tableaux ainsi g\u00e9n\u00e9r\u00e9s sont prot\u00e9g\u00e9s en \u00e9criture seule par d\u00e9faut, toute modification directe d&rsquo;une cellule pouvant modifier simultan\u00e9ment plusieurs \u00e9l\u00e9ments de la vue en raison du chevauchement de m\u00e9moire sous-jacent, risquant d&rsquo;introduire des instabilit\u00e9s d&rsquo;\u00e9tat impr\u00e9vues.<\/p>\n<h2>10. Visualisation graphique des s\u00e9ries chronologiques liss\u00e9es<\/h2>\n<h3>10.1 Repr\u00e9sentation conjointe de la s\u00e9rie brute et des moyennes mobiles<\/h3>\n<p>La validation qualitative d&rsquo;un protocole de lissage temporel repose de mani\u00e8re incontournable sur une inspection graphique minutieuse, permettant \u00e0 l&rsquo;analyste de juger visuellement de la pertinence de la r\u00e9duction de variance sans distorsion excessive de la trajectoire fondamentale. La construction d&rsquo;une figure multi-courbes standardis\u00e9e avec Matplotlib exige une discipline stylistique rigoureuse pour garantir la clart\u00e9 s\u00e9miotique des informations superpos\u00e9es.<\/p>\n<p>La bonne pratique consiste \u00e0 tracer la s\u00e9rie chronologique brute d&rsquo;origine en arri\u00e8re-plan avec un trait fin, une chromatique neutre et une transparence substantielle (via le param\u00e8tre alpha de Matplotlib), transformant les fluctuations stochastiques d&rsquo;\u00e9chantillonnage en un halo discret d&rsquo;observation. En superposition directe, les trajectoires de moyennes mobiles sont trac\u00e9es avec des traits plus \u00e9pais et des couleurs franches distinctes, facilitant l&rsquo;identification imm\u00e9diate des diff\u00e9rentes constantes de temps ou tailles de fen\u00eatres appliqu\u00e9es.<\/p>\n<p>Cette sc\u00e9narisation graphique permet de visualiser instantan\u00e9ment le ph\u00e9nom\u00e8ne de latence temporelle induit par les fen\u00eatres r\u00e9troactives. La comparaison visuelle entre la s\u00e9rie brute et sa moyenne liss\u00e9e met imm\u00e9diatement en \u00e9vidence le d\u00e9calage chronologique lors des inversions de cycle, fournissant \u00e0 l&rsquo;analyste une base d&rsquo;\u00e9valuation empirique directe pour arbitrer entre r\u00e9activit\u00e9 et r\u00e9duction du bruit stochastique.<\/p>\n<h3>10.2 Visualisation de l&rsquo;\u00e9cart dynamique et des r\u00e9sidus<\/h3>\n<p>Au-del\u00e0 de la trajectoire centrale de la moyenne mobile, l&rsquo;inspection m\u00e9thodique de l&rsquo;\u00e9cart dynamique entre le signal observ\u00e9 et la tendance extraite constitue une \u00e9tape indispensable de validation statistique. Cette s\u00e9rie diff\u00e9rentielle, obtenue par simple soustraction entre le signal brut et sa moyenne glissante, repr\u00e9sente le bruit r\u00e9siduel extrait par l&rsquo;op\u00e9rateur de filtrage.<\/p>\n<p>La repr\u00e9sentation conjointe de ces r\u00e9sidus sous la forme d&rsquo;un graphique de dispersion ou d&rsquo;une s\u00e9rie secondaire permet de v\u00e9rifier l&rsquo;homosc\u00e9dasticit\u00e9 du processus sous-jacent. Si la moyenne mobile a correctement captur\u00e9 toute la composante d\u00e9terministe, le r\u00e9sidu doit arborer les propri\u00e9t\u00e9s visuelles et spectrales d&rsquo;un bruit blanc stationnaire, oscillant de mani\u00e8re homog\u00e8ne autour de la ligne de z\u00e9ro sans afficher de motifs p\u00e9riodiques persistants ou d&rsquo;explosion asym\u00e9trique de variance locale.<\/p>\n<p>Pour mat\u00e9rialiser \u00e9l\u00e9gamment la dispersion dynamique autour de la moyenne, la m\u00e9thode plt.fill_between de Matplotlib permet d&rsquo;ombrer l&rsquo;aire d\u00e9limit\u00e9e par la moyenne mobile augment\u00e9e et diminu\u00e9e d&rsquo;un ou deux \u00e9carts-types glissants. Ce trac\u00e9 d&rsquo;enveloppe stochastique met imm\u00e9diatement en exergue les phases de forte instabilit\u00e9 temporelle, alertant l&rsquo;exp\u00e9rimentateur sur les segments temporels o\u00f9 la repr\u00e9sentativit\u00e9 de la moyenne mobile se trouve d\u00e9grad\u00e9e par une dispersion accrue des mesures.<\/p>\n<h3>10.3 Cr\u00e9ation de graphiques interactifs pour l&rsquo;exploration de fen\u00eatres<\/h3>\n<p>La s\u00e9lection rigoureuse d&rsquo;une largeur de fen\u00eatre optimale rel\u00e8ve fr\u00e9quemment d&rsquo;une phase exploratoire d\u00e9licate o\u00f9 l&rsquo;analyste doit \u00e9valuer l&rsquo;impact morphologique de multiples param\u00e8tres temporels. L&rsquo;usage de visualisations purement statiques montre alors rapidement ses limites, imposant des r\u00e9g\u00e9n\u00e9rations de scripts r\u00e9p\u00e9titives et fastidieuses.<\/p>\n<p>L&rsquo;introduction d&rsquo;interfaces dynamiques via des biblioth\u00e8ques telles que Plotly ou l&rsquo;int\u00e9gration de curseurs interactifs avec le module ipywidgets dans les environnements Jupyter permet de manipuler en temps r\u00e9el la taille de la fen\u00eatre k ou le facteur de lissage alpha. Le recalcul instantan\u00e9 de la courbe et la mise \u00e0 jour r\u00e9active du trac\u00e9 offrent un retour visuel imm\u00e9diat sur le compromis entre \u00e9limination des artefacts haute fr\u00e9quence et pr\u00e9servation des pics d&rsquo;amplitude r\u00e9els du signal.<\/p>\n<p>Ces environnements interactifs autorisent \u00e9galement l&rsquo;inspection coordonn\u00e9e du domaine temporel et du domaine spectral via l&rsquo;affichage simultan\u00e9 du p\u00e9riodogramme de Fourier ou de la densit\u00e9 spectrale de puissance du signal liss\u00e9. Enfin, les fonctionnalit\u00e9s d&rsquo;exportation graphique vectorielle int\u00e9gr\u00e9es assurent une transition fluide vers des figures publiables respectant scrupuleusement les chartes typographiques et dimensionnelles des revues scientifiques internationales.<\/p>\n<h2>11. Applications empiriques : analyse comportementale et donn\u00e9es psychophysiologiques<\/h2>\n<h3>11.1 Lissage des temps de r\u00e9action et dynamique attentionnelle<\/h3>\n<p>Dans les paradigmes de psychologie cognitive et de neurosciences comportementales, tels que les t\u00e2ches de Stroop, d&rsquo;attention soutenue ou de d\u00e9tection de signaux, les temps de r\u00e9action individuels enregistr\u00e9s milliseconde par milliseconde constituent une mesure privil\u00e9gi\u00e9e de l&rsquo;efficience des processus ex\u00e9cutifs. Toutefois, ces s\u00e9ries chronologiques sont profond\u00e9ment bruit\u00e9es par des fluctuations d&rsquo;origine motrice, des clignements oculaires, des micro-pauses attentionnelles ou des variations d&rsquo;\u00e9veil physiologique.<\/p>\n<p>L&rsquo;application judicieuse d&rsquo;une moyenne mobile sur ces s\u00e9ries de latences permet d&rsquo;extraire la signature continue de la dynamique attentionnelle au cours de l&rsquo;\u00e9valuation exp\u00e9rimentale. Elle permet de tracer distinctement la trajectoire d&rsquo;\u00e9puisement cognitif caract\u00e9ris\u00e9e par un ralentissement progressif de la vitesse de traitement de l&rsquo;information au fur et \u00e0 mesure que les blocs d&rsquo;essais s&rsquo;encha\u00eenent, ou \u00e0 l&rsquo;inverse de quantifier l&rsquo;effet de chauffe et d&rsquo;automatisation motrice pr\u00e9sent lors des premi\u00e8res phases du protocole.<\/p>\n<p>La principale pr\u00e9caution analytique consiste \u00e0 dimensionner la fen\u00eatre temporelle de sorte qu&rsquo;elle filtre les variations erratiques sans \u00e9craser les micro-ruptures attentionnelles majeures. Une fen\u00eatre trop large masquerait par exemple les d\u00e9faillances br\u00e8ves de vigilance (lapses), qui constituent pr\u00e9cis\u00e9ment la cible s\u00e9miologique de l&rsquo;\u00e9tude neuropsychologique. L&rsquo;usage d&rsquo;une m\u00e9diane glissante ou d&rsquo;une moyenne pond\u00e9r\u00e9e adapt\u00e9e aux distributions asym\u00e9triques des temps de r\u00e9action garantit une estimation robuste exempte de contamination par les valeurs extr\u00eames r\u00e9sultant d&rsquo;erreurs de frappe ou d&rsquo;anticipations motrices inad\u00e9quates.<\/p>\n<h3>11.2 Traitement des signaux physiologiques continus<\/h3>\n<p>L&rsquo;analyse des biosignaux physiologiques continus, tels que les s\u00e9ries de variabilit\u00e9 de la fr\u00e9quence cardiaque (VFC) issues d&rsquo;enregistrements \u00e9lectrocardiographiques ou les signaux de r\u00e9ponse \u00e9lectrodermale (RED\/EDA), mobilise de mani\u00e8re intensive les techniques de filtrage par moyenne mobile. Dans le traitement de la r\u00e9ponse \u00e9lectrodermale, qui quantifie l&rsquo;activit\u00e9 des glandes sudoripares innerv\u00e9es par le syst\u00e8me nerveux autonome sympathique, le signal brut combine une composante tonique lente de niveau basal et des variations phasiques rapides induites par des stimuli \u00e9motionnels discrets.<\/p>\n<p>L&rsquo;application d&rsquo;une moyenne mobile de grande largeur temporelle permet d&rsquo;isoler la trajectoire tonique lente en \u00e9liminant toutes les r\u00e9activit\u00e9s transitoires haute fr\u00e9quence. Par soustraction arithm\u00e9tique subs\u00e9quente de cette composante de base au signal total, le chercheur extrait une s\u00e9rie de r\u00e9sidus correspondant exclusivement au profil phasique pur, facilitant l&rsquo;identification algorithmique du d\u00e9clenchement, de l&rsquo;amplitude de cr\u00eate et du temps de r\u00e9cup\u00e9ration de chaque r\u00e9ponse sympathique individuelle.<\/p>\n<p>De fa\u00e7on analogue, sur les s\u00e9ries d&rsquo;intervalles RR en variabilit\u00e9 cardiaque, la moyenne mobile fait office de d\u00e9tecteur d&rsquo;artefacts d&rsquo;arythmie ou de d\u00e9calages ectopiques. Toute observation ponctuelle divergeant de la moyenne glissante locale d&rsquo;un \u00e9cart exc\u00e9dant un seuil de tol\u00e9rance physiologique pr\u00e9d\u00e9termin\u00e9 peut \u00eatre \u00e9tiquet\u00e9e comme artefactuelle et faire l&rsquo;objet d&rsquo;une imputation ou d&rsquo;une correction automatique avant l&rsquo;\u00e9valuation des m\u00e9triques spectrales de sympathovagale balance.<\/p>\n<h3>11.3 Mod\u00e9lisation des trajectoires d&rsquo;apprentissage<\/h3>\n<p>L&rsquo;acquisition de comp\u00e9tences motrices ou cognitives complexes se traduit exp\u00e9rimentalement par des courbes d&rsquo;apprentissage progressives au sein desquelles les scores de r\u00e9ussite ou les temps d&rsquo;ex\u00e9cution s&rsquo;am\u00e9liorent de mani\u00e8re non lin\u00e9aire au fil des r\u00e9p\u00e9titions de la t\u00e2che. Ces protocoles longitudinaux sont cependant affect\u00e9s par une instabilit\u00e9 intra-individuelle marqu\u00e9e, les performances alternant de mani\u00e8re stochastique entre r\u00e9ussites brillantes et r\u00e9gressions transitoires.<\/p>\n<p>Le recours aux moyennes mobiles permet d&rsquo;aplanir ces rugosit\u00e9s d&rsquo;\u00e9valuation pour formaliser math\u00e9matiquement le profil asymptotique de l&rsquo;apprentissage moteur. En \u00e9liminant la dispersion locale, l&rsquo;analyste peut ajuster avec une convergence statistique optimale des mod\u00e8les th\u00e9oriques exponentiels ou logarithmiques de type loi de puissance de la pratique (Power Law of Practice), et mesurer avec rigueur le taux d&rsquo;assimilation individuelle sans \u00eatre perturb\u00e9 par les al\u00e9as de performance au coup par coup.<\/p>\n<p>En outre, l&rsquo;analyse diff\u00e9rentielle de la moyenne mobile permet d&rsquo;objectiver avec une grande pr\u00e9cision l&rsquo;atteinte d&rsquo;un plateau de performance cognitive, instant charni\u00e8re o\u00f9 la pente de la trajectoire liss\u00e9e devient statistiquement indiscernable de z\u00e9ro. Cette d\u00e9tection algorithmique du plateau renseigne directement l&rsquo;exp\u00e9rimentateur sur l&rsquo;atteinte du plafond d&rsquo;adaptabilit\u00e9 plastique du sujet, signalant l&rsquo;opportunit\u00e9 d&rsquo;introduire des variations de complexit\u00e9 dans la t\u00e2che ou de cl\u00f4turer la phase d&rsquo;entra\u00eenement protocol\u00e9e.<\/p>\n<h2>12. Validation statistique, pi\u00e8ges interpr\u00e9tatifs et bonnes pratiques<\/h2>\n<h3>12.1 Effet Slutsky-Yule et corr\u00e9lations fallacieuses<\/h3>\n<p>L&rsquo;un des pi\u00e8ges \u00e9pist\u00e9mologiques et statistiques les plus redoutables inh\u00e9rents \u00e0 l&rsquo;application des moyennes mobiles r\u00e9side dans le ph\u00e9nom\u00e8ne formellement mis en \u00e9vidence par les statisticiens <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Slutsky%E2%80%93Yule_effect\">Evgeny Slutsky et George Udny Yule<\/a> dans les ann\u00e9es 1920. L&rsquo;<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Slutsky%E2%80%93Yule_effect\">effet Slutsky-Yule<\/a> d\u00e9montre qu&rsquo;en appliquant un op\u00e9rateur de moyenne mobile sur une s\u00e9rie purement stochastique de bruit blanc totalement d\u00e9pourvue de structure temporelle ou de m\u00e9moire, on induit artificiellement une structure de corr\u00e9lation temporelle et des oscillations sinuso\u00efdales cycliques parfaitement fallacieuses.<\/p>\n<p>Ce r\u00e9sultat math\u00e9matique d\u00e9coule directement du fait que les fen\u00eatres glissantes successives partagent une fraction majoritaire de leurs observations. Deux points temporels voisins de la s\u00e9rie liss\u00e9e sont calcul\u00e9s \u00e0 partir d&rsquo;un ensemble de donn\u00e9es presque identique, ce qui introduit m\u00e9caniquement une forte auto-corr\u00e9lation positive d&rsquo;ordre 1, 2, &#8230;, k &#8211; 1 entre les r\u00e9sidus d&rsquo;\u00e9chantillonnage. En r\u00e9p\u00e9tant cette sommation le long du vecteur temporel, le signal filtr\u00e9 prend l&rsquo;apparence visuelle trompeuse d&rsquo;un cycle p\u00e9riodique r\u00e9gulier dot\u00e9 d&rsquo;oscillations fluides, conduisant l&rsquo;exp\u00e9rimentateur na\u00eff \u00e0 postuler l&rsquo;existence de rythmes biologiques ou de cycles \u00e9conomiques sous-jacents qui ne sont rien d&rsquo;autre que des cr\u00e9ations computationnelles de l&rsquo;op\u00e9rateur de calcul lui-m\u00eame.<\/p>\n<p>Pour pr\u00e9venir cette d\u00e9rive interpr\u00e9tative majeure, l&rsquo;analyste quantitatif doit soumettre syst\u00e9matiquement toute cyclicit\u00e9 apparente issue d&rsquo;une s\u00e9rie liss\u00e9e \u00e0 des tests de validation formels. Ces protocoles incluent l&rsquo;examen de l&rsquo;auto-corr\u00e9logramme (ACF) de la s\u00e9rie brute diff\u00e9renti\u00e9e, l&rsquo;\u00e9valuation du p\u00e9riodogramme spectral compar\u00e9 \u00e0 des trajectoires de substitution stochastiques par r\u00e9\u00e9chantillonnage de Monte Carlo (surrogate data testing), et la v\u00e9rification rigoureuse que les harmoniques d\u00e9tect\u00e9es dans la s\u00e9rie filtr\u00e9e \u00e9taient d\u00e9j\u00e0 spectralement significatives dans les donn\u00e9es exp\u00e9rimentales non transform\u00e9es.<\/p>\n<h3>12.2 Sur-lissage et suppression d&rsquo;informations critiques<\/h3>\n<p>Le second \u00e9cueil m\u00e9thodologique classique concerne le ph\u00e9nom\u00e8ne de sur-lissage (over-smoothing), r\u00e9sultant de la s\u00e9lection d&rsquo;une fen\u00eatre d&rsquo;int\u00e9gration excessivement large par rapport aux constantes de temps intrins\u00e8ques du ph\u00e9nom\u00e8ne physique ou psychologique observ\u00e9. En cherchant \u00e0 \u00e9radiquer l&rsquo;int\u00e9gralit\u00e9 du bruit stochastique haute fr\u00e9quence, une fen\u00eatre d\u00e9mesur\u00e9e traite les composantes dynamiques transitoires r\u00e9elles du syst\u00e8me comme de simples perturbations al\u00e9atoires et les \u00e9limine impitoyablement du signal de sortie.<\/p>\n<p>Ce sur-lissage se manifeste concr\u00e8tement par un \u00e9crasement syst\u00e9matique de l&rsquo;amplitude des pics d&rsquo;activit\u00e9 locaux, un comblement artificiel des creux et un \u00e9talement temporel de toutes les transitions abruptes. Dans des protocoles biom\u00e9dicaux, cela peut conduire \u00e0 sous-estimer drastiquement la r\u00e9activit\u00e9 cardiaque d&rsquo;un patient ou \u00e0 manquer l&rsquo;\u00e9mergence d&rsquo;une onde c\u00e9r\u00e9brale transitoire br\u00e8ve. L&rsquo;information structurelle critique est alors irr\u00e9m\u00e9diablement noy\u00e9e dans une inertie d&rsquo;int\u00e9gration globale, faussant les inf\u00e9rences statistiques ult\u00e9rieures.<\/p>\n<p>La s\u00e9lection rigoureuse de la taille de fen\u00eatre ne doit donc pas \u00eatre laiss\u00e9e au seul arbitrage subjectif ou esth\u00e9tique de l&rsquo;utilisateur. Elle doit \u00eatre guid\u00e9e par des crit\u00e8res formels d&rsquo;optimisation statistique, tels que la minimisation de crit\u00e8res d&rsquo;information (AIC, BIC), l&rsquo;\u00e9valuation de l&rsquo;erreur quadratique moyenne par validation crois\u00e9e temporelle par blocs (time-series cross-validation), ou l&rsquo;analyse spectrale pr\u00e9alable identifiant pr\u00e9cis\u00e9ment la fr\u00e9quence de coupure au-del\u00e0 de laquelle l&rsquo;\u00e9nergie spectrale est attribuable au bruit exp\u00e9rimental pur.<\/p>\n<h3>12.3 Guide m\u00e9thodologique et liste de contr\u00f4le pour l&rsquo;analyste<\/h3>\n<p>Pour garantir la rigueur computationnelle, la transparence scientifique et la parfaite reproductibilit\u00e9 des protocoles d&rsquo;analyse int\u00e9grant des moyennes mobiles en environnement Python, l&rsquo;analyste quantitatif gagnera \u00e0 s&rsquo;astreindre \u00e0 une liste de contr\u00f4le syst\u00e9matique articul\u00e9e autour des principes directeurs de l&rsquo;ing\u00e9nierie des donn\u00e9es et de l&rsquo;\u00e9pist\u00e9mologie exp\u00e9rimentale.<\/p>\n<p>Cette d\u00e9marche m\u00e9thodologique impose de suivre scrupuleusement les \u00e9tapes suivantes lors de la mise en \u0153uvre de tout pipeline de traitement :<\/p>\n<ul>\n<li><strong>V\u00e9rification de l&rsquo;homog\u00e9n\u00e9it\u00e9 temporelle :<\/strong> S&rsquo;assurer formellement de l&rsquo;\u00e9quidistance des pas temporels de la s\u00e9rie d&rsquo;entr\u00e9e et op\u00e9rer un r\u00e9\u00e9chantillonnage r\u00e9gulier le cas \u00e9ch\u00e9ant avant tout lissage continu.<\/li>\n<li><strong>Justification th\u00e9orique de l&rsquo;op\u00e9rateur :<\/strong> Documenter explicitement le choix du type de moyenne mobile retenu (SMA, WMA, EMA), en motivant l&rsquo;ad\u00e9quation entre la g\u00e9om\u00e9trie du noyau de pond\u00e9ration et la dynamique suppos\u00e9e du syst\u00e8me sous-jacent.<\/li>\n<li><strong>Transparence de causalit\u00e9 :<\/strong> Sp\u00e9cifier sans ambigu\u00eft\u00e9 si le fen\u00eatrage est r\u00e9troactif ou centr\u00e9, en proscrivant formellement tout fen\u00eatrage centr\u00e9 dans les applications pr\u00e9dictives en ligne ou les mod\u00e8les de d\u00e9cision temps r\u00e9el.<\/li>\n<li><strong>Gestion document\u00e9e des fronti\u00e8res :<\/strong> Exposer explicitement le traitement des valeurs NaN initiales (suppression, compl\u00e9tion arri\u00e8re, min_periods) et quantifier les distorsions potentielles aux extr\u00e9mit\u00e9s de la s\u00e9quence.<\/li>\n<li><strong>\u00c9valuation du r\u00e9sidu stochastique :<\/strong> V\u00e9rifier l&rsquo;homosc\u00e9dasticit\u00e9 et la blancheur des r\u00e9sidus de lissage pour s&rsquo;assurer de l&rsquo;absence d&rsquo;information d\u00e9terministe abandonn\u00e9e dans le terme d&rsquo;erreur.<\/li>\n<li><strong>Contr\u00f4le des artefacts cycliques :<\/strong> R\u00e9aliser des analyses de substitution stochastique pour \u00e9liminer tout risque d&rsquo;interpr\u00e9tation fallacieuse li\u00e9 au redoutable effet Slutsky-Yule.<\/li>\n<li><strong>Optimisation de l&#8217;empreinte logicielle :<\/strong> Adapter le moteur algorithmique (NumPy pur, Pandas rolling, compilation Numba ou fen\u00eatres d&rsquo;enjamb\u00e9es) au volume r\u00e9el des donn\u00e9es pour concilier rigueur math\u00e9matique et efficience mat\u00e9rielle optimale.<\/li>\n<\/ul>\n<p>En respectant rigoureusement ce protocole m\u00e9thodologique, le praticien s&rsquo;assure que le calcul des moyennes mobiles en Python transcende le simple artifice de lissage cosm\u00e9tique pour devenir un v\u00e9ritable instrument d&rsquo;investigation quantitative, capable d&rsquo;extraire la substantifique moelle informationnelle des s\u00e9ries temporelles les plus exigeantes tout en garantissant une int\u00e9grit\u00e9 scientifique absolue.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>Box, G. E., Jenkins, G. M., Reinsel, G. C., &#038; Ljung, G. M. (2015). <em>Time series analysis: forecasting and control<\/em> (5th ed.). John Wiley &#038; Sons. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.wiley.com\/en-us\/Time+Series+Analysis%3A+Forecasting+and+Control%2C+5th+Edition-p-9781118675922\">https:\/\/www.wiley.com\/en-us\/Time+Series+Analysis%3A+Forecasting+and+Control%2C+5th+Edition-p-9781118675922<\/a><\/li>\n<li>Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., &#8230; &#038; Oliphant, T. E. (2020). Array programming with NumPy. <em>Nature<\/em>, 585(7825), 357-362. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1038\/s41586-020-2649-2\">https:\/\/doi.org\/10.1038\/s41586-020-2649-2<\/a><\/li>\n<li>Lam, P. K., Pitrou, A., &#038; Seibert, S. (2015). Numba: A llvm-based python jit compiler. In <em>Proceedings of the Second Workshop on the LLVM Compiler Infrastructure in HPC<\/em> (pp. 1-6). ACM. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1145\/2833157.2833162\">https:\/\/doi.org\/10.1145\/2833157.2833162<\/a><\/li>\n<li>McKinney, W. (2010). Data structures for statistical computing in Python. In <em>Proceedings of the 9th Python in Science Conference<\/em> (Vol. 445, pp. 51-56). Austin, TX. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.25080\/Majora-92bf1922-00a\">https:\/\/doi.org\/10.25080\/Majora-92bf1922-00a<\/a><\/li>\n<li>Oppenheim, A. V., &#038; Schafer, R. W. (2009). <em>Discrete-time signal processing<\/em> (3rd ed.). Pearson Higher Education. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.pearson.com\/en-us\/subject-catalog\/p\/discrete-time-signal-processing\/P200000003254\">https:\/\/www.pearson.com\/en-us\/subject-catalog\/p\/discrete-time-signal-processing\/P200000003254<\/a><\/li>\n<li>Slutsky, E. (1937). The summation of random causes as the source of cyclic processes. <em>Econometrica: Journal of the Econometric Society<\/em>, 5(2), 105-146. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.2307\/1907241\">https:\/\/doi.org\/10.2307\/1907241<\/a><\/li>\n<li>Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., &#8230; &#038; SciPy 1.0 Contributors. (2020). SciPy 1.0: fundamental algorithms for scientific computing in Python. <em>Nature Methods<\/em>, 17(3), 261-272. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1038\/s41592-019-0686-2\">https:\/\/doi.org\/10.1038\/s41592-019-0686-2<\/a><\/li>\n<li>Yule, G. U. (1927). On a method of investigating periodicities in disturbed series, with special reference to Wolfer&rsquo;s sunspot numbers. <em>Philosophical Transactions of the Royal Society of London. Series A<\/em>, 226(636-646), 267-298. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1098\/rsta.1927.0007\">https:\/\/doi.org\/10.1098\/rsta.1927.0007<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour calculer les moyennes mobiles en Python \u00e0 l&rsquo;aide de NumPy, Pandas et SciPy, appliqu\u00e9 \u00e0 l&rsquo;analyse des s\u00e9ries temporelles.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[2141,2465,2464],"tags":[5193,2960,2466,2468,1911],"class_list":["post-3118","psych_stat","type-psych_stat","status-publish","hentry","category-methodologie-quantitative","category-programmation-python","category-science-des-donnees","tag-moyenne-mobile","tag-numpy","tag-pandas","tag-python","tag-series-temporelles"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/3118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3118"}],"version-history":[{"count":0,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/3118\/revisions"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}