Sunday, 29 January 2017

Déplacement Moyenne Données Pures

Je joue à nouveau en Python, et j'ai trouvé un bon livre avec des exemples. Un des exemples est de tracer quelques données. J'ai un fichier. txt avec deux colonnes et j'ai les données. J'ai tracé les données très bien, mais dans l'exercice il dit: Modifier votre programme plus loin pour calculer et tracer la moyenne courante des données, définie par: où r5 dans ce cas (et le yk est la deuxième colonne dans le fichier de données) . Demandez au programme de tracer à la fois les données d'origine et la moyenne courante sur le même graphique. Jusqu'à présent, j'ai ceci: Comment puis-je calculer la somme Dans Mathematica sa simple depuis sa manipulation symbolique (Sumi, par exemple), mais comment calculer la somme en python qui prend tous les dix points dans les données et les moyennes, et le fait Jusqu'à la fin des points, j'ai regardé le livre, mais n'a trouvé rien qui pourrait expliquer cela: heltonbikers code a fait l'affaire: D Merci beaucoup :) Il ya un problème avec la réponse acceptée. Je pense que nous devons utiliser valide au lieu de même ici - retournez numpy. convolve (interval, window, same). A titre d'exemple, testez l'AM de cet ensemble de données 1,5,7,2,6,7,8,2,2,7,8,3,7,3,7,3,15,6 - le résultat Devrait être de 4,2,5,4,6,0,5,0,5,0,5,2,5,4,4,4,5,4,5,6,5,6,4,6,7,0,6,8. Mais en ayant la même nous donne une sortie incorrecte de 2.6.3.0,4.2,5.4,6.0,5.0,5.0,5.2,5.4,4.4,5.4,5.6,5.6, 4.6,7.0,6.8,6.2,4.8 Code rouillé pour essayer ceci -: Essayez ceci avec l'ampli valide même et voyez si la mathématique a un sens. J'ai essayé ceci dehors, mais je regarde dedans, il a été un temps depuis que j'ai codé en Python. Ndash dingod Oct 29 14 at 7:07 dingod Pourquoi ne pas essayer rapidement avec le code rouillé (et l'échantillon de données-set (comme une simple liste), j'ai posté. Pour certaines personnes paresseux (comme j'avais été au début) - il masque le fait que la moyenne mobile est incorrecte. Probablement, vous devriez envisager d'éditer votre réponse originale. J'ai essayé juste hier et la double vérification m'a sauvé le visage de regarder mal à signaler au niveau Cxo. Tout ce que vous devez faire, c'est d'essayer Votre même moyenne mobile une fois avec quotvalidquot et autre fois avec quotsamequot - et une fois que vous êtes convaincu me donner un peu d'amour (aka-up-vote) ndash ekta Oct 29 14 à 7: 16Rolling 12 Mois Moyenne en DAX Calcul de la moyenne mobile de 12 mois Dans DAX ressemble à une tâche simple, mais il cache une certaine complexité. Cet article explique comment écrire la meilleure formule évitant les pièges courants en utilisant les fonctions de l'intelligence du temps. Nous commençons avec le modèle de données AdventureWorks habituel, avec des produits, A été marqué comme une table de calendrier (il est nécessaire de travailler avec n'importe quelle fonction de renseignement de temps) et nous avons construit une hiérarchie simple année-mois-date. Avec cette mise en place, il est très facile de créer un premier tableau croisé dynamique montrant les ventes au fil du temps: Lors de l'analyse des tendances, si les ventes sont sujettes à la saisonnalité ou, plus généralement, si vous souhaitez supprimer l'effet des pics et des baisses de ventes, La technique courante est celle de calculer la valeur sur une période donnée, habituellement 12 mois, et de la moyenne. La moyenne mobile sur 12 mois fournit un indicateur régulier de la tendance et il est très utile dans les graphiques. Compte tenu d'une date, nous pouvons calculer la moyenne mobile de 12 mois avec cette formule, qui a encore quelques problèmes que nous allons résoudre plus tard: Le comportement de la formule est simple: il calcule la valeur de Ventes après avoir créé un filtre sur le calendrier qui Indique exactement une année complète de données. Le noyau de la formule est le DATESBETWEEN, qui retourne un ensemble inclusif de dates entre les deux frontières. Le plus bas est: Le lire du plus profond: si nous montrons des données pour un mois, par exemple juillet 2007, nous prenons la dernière date visible en utilisant LASTDATE, qui retourne le dernier jour en juillet 2007. Puis nous utilisons NEXTDAY pour prendre le 1er D'août 2007 et nous utilisons finalement SAMEPERIODLASTYEAR pour le décaler d'un an, le 1er août 2006. La limite supérieure est simplement LASTDATE, c'est-à-dire fin juillet 2007. Si nous utilisons cette formule dans un tableau croisé dynamique, le résultat semble très bien, mais nous Un problème pour la dernière date: en fait, comme vous pouvez le voir dans la figure, la valeur est correctement calculée jusqu'en 2008. Ensuite, il n'y a pas de valeur en 2009 (ce qui est correct, nous n'avons pas de ventes en 2009), mais il ya Une valeur surprenante sur Décembre 2010, où notre formule montre le grand total au lieu d'une valeur vierge, comme on s'y attend. En fait, en décembre, LASTDATE retourne le dernier jour de l'année et NEXTDAY devrait revenir le 1er Janvier 2011. Mais NEXTDAY est une fonction d'intelligence de temps et il est prévu de retourner des ensembles de dates existantes. Ce fait n'est pas très évident et il vaut quelques mots plus. Les fonctions d'intelligence temporelle n'effectuent pas de calculs sur les dates. Si vous souhaitez prendre le jour après une date donnée, vous pouvez simplement ajouter 1 à n'importe quelle colonne de date, et le résultat sera le jour suivant. Au lieu de cela, les fonctions de renseignement temporel changent de date et de retour dans le temps. Ainsi, NEXTDAY prend son entrée (dans notre cas une table à une rangée avec le 31 décembre 2010) et le décale un jour plus tard. Le problème est que le résultat devrait être le 1er janvier 2011 mais, comme la table Calendrier ne contient pas cette date, le résultat est BLANK. Ainsi, notre expression calcule les ventes avec une limite inférieure vierge, ce qui signifie le début du temps, ce qui donne comme résultat le grand total des ventes. Pour corriger la formule, il suffit de changer l'ordre d'évaluation de la limite inférieure: Comme vous pouvez le voir, maintenant NEXTDAY est appelé après le décalage d'un an de retour. De cette façon, nous prenons 31 décembre 2010, déplacer au 31 Décembre 2009 et prendre le lendemain, qui est le 1er Janvier 2010: une date existante dans le tableau calendrier. Le résultat est maintenant attendu: à ce stade, il suffit de diviser ce nombre par 12 pour obtenir la moyenne mobile. Mais, comme vous pouvez facilement l'imaginer, nous ne pouvons pas toujours le diviser par 12. En fait, au début de la période, il n'y a pas 12 mois à agréger, mais un nombre inférieur. Nous devons calculer le nombre de mois pour lesquels il ya des ventes. Cela peut être réalisé en utilisant le filtrage croisé de la table de calendrier avec la table des ventes après que nous avons appliqué le nouveau contexte de 12 mois. Nous définissons une nouvelle mesure qui calcule le nombre de mois existants au cours de la période de 12 mois: Vous pouvez voir dans la figure suivante que la mesure Months12M calcule une valeur correcte: Il vaut la peine de noter que la formule ne fonctionne pas si vous choisissez une période Plus de 12 mois, car le nom CalendarMonthName n'a que 12 valeurs. Si vous avez besoin de périodes plus longues, vous aurez besoin d'utiliser une colonne YYYYMM pour être en mesure de compter plus de 12. La partie intéressante de cette formule qui utilise le filtrage croisé est le fait qu'il calcule le nombre de mois disponibles, même lorsque vous filtre en utilisant d'autres les attributs. Si, par exemple, vous sélectionnez la couleur bleue à l'aide d'une trancheuse, les ventes commencent en juillet 2007 (pas en 2005, comme c'est le cas pour de nombreuses autres couleurs). En utilisant le filtre croisé sur les ventes, la formule calcule correctement qu'en juillet 2007, il ya un seul mois de ventes disponibles pour Blue: à ce stade, la moyenne mobile est juste un DIVIDE loin: quand nous l'utilisons dans une table pivotante, nous avons encore Ont un petit problème: en fait, la valeur est calculée également pour les mois pour lesquels il n'y a pas de ventes (c'est-à-dire les mois à venir): Cela peut être résolu à l'aide d'une instruction IF pour empêcher la formule de montrer les valeurs lorsqu'il n'y a pas de ventes. Je n'ai rien contre la FI, mais pour les adeptes de la performance parmi vous, il vaut toujours la peine de se rappeler que la FI pourrait être un tueur de performance, car elle pourrait forcer le moteur DAX formule à kick in. , En règle générale, la meilleure façon de supprimer la valeur lorsqu'il n'y a pas de vente est de s'appuyer sur des formules de moteur de stockage pur comme celui-ci: Comparer un graphique en utilisant le Avg12M avec un autre qui montre les ventes, vous pouvez facilement apprécier comment la moyenne mobile Décrit les tendances d'une manière beaucoup plus propre: Me tenir au courant des articles à venir (bulletin). Décochez pour télécharger librement le fichier.


No comments:

Post a Comment