


Utilisez des pandas pour détecter avec précision le mouvement inversé dans les données de coordonnées à 360 degrés
Introduction: défis dans les données de coordonnées en anneau
Lors du traitement de certains types de données, tels que la position d'un corps céleste sur l'éclipse, la lecture d'un capteur d'angle ou la phase d'un signal périodique, nous rencontrons souvent un système de coordonnées à 360 degrés. La caractéristique de ce type de coordonnées est que lorsque la valeur atteint 360 degrés, elle "enroulera" à 0 degrés, ou lorsqu'elle diminuera de 0 degrés à des valeurs négatives, elle "recouvre" à 359 degrés (c'est-à-dire les opérations Modulo 360).
Prenant l'exemple du comportement inverse planétaire, les coordonnées écliptiques de la planète continuent de changer à 360 degrés. Lorsqu'une planète passe de directement à rétrograde, ses coordonnées atteindront un maximum local et commencent ensuite à diminuer; Lorsqu'une planète passe de directement à directe, ses coordonnées atteindront un minimum local, puis commencent à augmenter. Dans un système de coordonnées linéaires conventionnel, nous pouvons identifier ces mouvements inverses en détectant des points extrêmes locaux (comme l'utilisation de Scipy.Signal.arGrelextrema).
Cependant, le système de coordonnées de la bague à 360 degrés présente un défi spécial: il s'agit physiquement d'un mouvement vers l'avant continu lorsque les coordonnées de la planète continuent d'augmenter d'environ 350 degrés, couvrant 360 degrés (c'est-à-dire entrant dans la zone à 0 degrés), puis continue d'augmenter. Mais d'un point de vue numérique, par exemple, de 358 degrés à 0 degrés, il y aura une baisse nette. Si l'algorithme de détection de valeur extrême traditionnelle est directement appliqué, ce phénomène qui traverse la frontière peut facilement être mal jugé comme point de départ d'un mouvement inversé, résultant en un résultat "faux positif".
Considérez les données "Exemple de crash" suivant, qui montre le processus d'écart de coordonnées de 358 degrés à 0 degrés:
Coordonnées de date 17.03.2010 358.41273 # Ce n'est pas le début du mouvement inversé 18.03.2010 0.39843 # Il traverse la frontière 19.03.2010 2.39354
Dans cet exemple, la planète avance en continu, mais en raison de la nature en orbite des coordonnées, une observation directe de la valeur numérique révèlera un "déclin" de 358 à 0, ce qui peut être confondu avec un maximum local. Nous avons besoin d'un moyen de distinguer cette étendue limite du véritable mouvement inversé.
Méthode de base: reconnaissance de mouvement inverse basé sur les pandas
Pour résoudre le problème des erreurs de jugement dans les données de coordonnées des anneaux à 360 degrés, nous pouvons utiliser de puissantes capacités de traitement des données de Pandas pour combiner une stratégie clé: en définissant un seuil de différence absolue pour filtrer les «faux» modifications causées par une durée limite à 360 degrés. Le jugement de valeur extrême n'est pris en compte que lorsque la quantité de variation entre les points continue est dans une petite portée raisonnable.
Les étapes spécifiques sont les suivantes:
- Préparation des données : organiser la date et coordonner les données dans Pandas DataFrame.
- Calculez la différence et définissez le seuil :
- Utilisez la méthode diff () pour calculer la différence entre les coordonnées adjacentes.
- Prenez la valeur absolue de la différence ABS ().
- Définissez un seuil (par exemple, 1 degré) pour filtrer les points de données dont la différence absolue est inférieure ou égale à ce seuil. Cette étape est le noyau, qui peut identifier efficacement des points qui semblent être d'énormes sauts numériques en raison de l'environnement à 360 degrés, mais qui ont de très petits changements physiques, et les exclure des valeurs extrêmes.
- Détecter le maximum local (pic supérieur) :
- Déterminez si la coordonnée actuelle est supérieure à la coordonnée précédente (C.GT (C.Shift ())).
- Déterminez si la coordonnée actuelle est supérieure à la coordonnée suivante (C.GT (C.Shift (-1))).
- Ces deux conditions sont remplies en même temps, indiquant que le point de courant est un maximum local.
- Détecter les valeurs minimales locales (pic inférieur) :
- Déterminez si la coordonnée de courant est plus petite que la coordonnée précédente (C.Lt (C.Shift ())).
- Déterminez si la coordonnée actuelle est plus petite que la coordonnée suivante (C.LT (C.Shift (-1))).
- Ces deux conditions sont remplies en même temps, indiquant que le point actuel est un minimum local.
- Combiné avec les conditions : les conditions de jugement susmentionnées de la valeur maximale locale et de la valeur minimale locale sont logiquement et fonctionnaient avec les conditions de seuil de différence calculées à l'étape 2. En fin de compte, il est marqué comme un point de mouvement inversé uniquement lorsque le montant de la modification est dans le seuil et la condition de valeur extrême locale est remplie.
Implémentation de code
Voici un exemple de code pour implémenter la logique ci-dessus à l'aide de pandas:
Importer des pandas en tant que PD Importer IO # simule data data = "" " Date, coords 13.03.2010,350.60172 14.03.2010,352.53184 15.03.2010, 354.47785 16.03.2010,356.43861 17.03.2010,358.41273 18.03.2010, 0.39843 19.03.2010,2.39354 20.03.2010,4.39545 21.03.2010,6.40106 22.03.2010,8.40673 23.03.2010,10.40828 24.03.2010,12.40098 25.03.2010, 14.37956 26.03.2010, 16.33824 13.08.2010, 166.41245 14.08.2010, 167.00584 15.08.2010, 167.53165 16.08.2010, 167.98625 17.08.2010, 168.36589 18.08.2010, 168.66672 19.08.2010, 168.88494 20.08.2010, 169.01682 21.08.2010, 169.05885 22.08.2010, 169.00792 23.08.2010, 168.86147 24.08.2010, 168.61771 25.08.2010, 168.27591 26.08.2010, 167.83665 "" " df = pd.read_csv (io.stringio (data), parse_dates = ['date']) # Extraire la colonne des coordonnées C = df ['coords'] # Étape 1: Calculez la différence absolue des coordonnées adjacentes et définissez le seuil. # Ici, le seuil est fixé à 1, ce qui signifie que si la différence absolue dans les coordonnées de deux points adjacents est supérieur à 1, # Ensuite, on pense que cela peut être une durée limite et ne doit pas être considéré comme un point extrême de mouvement inversé. # Pour le mouvement planétaire quotidien, il n'y a généralement pas de véritable changement inversé de plus d'un degré en une journée. M0 = C.Diff (). ABS (). Le (1) # Étape 2: détecter le maximum local (pic supérieur), c'est-à-dire que le point de courant est supérieur aux deux points avant et après # en même temps, combinez la condition M0 pour s'assurer que la valeur maximale fausse M1 n'est pas causée par la limite étendue M1 = (C.GT (C.Shift (-1)) & c.gt (C.Shift ()) & M0 # Étape 3: détecter la valeur minimale locale (pic inférieur), c'est-à-dire que le point de courant est plus petit que les deux points avant et après # se combinent également avec la condition M0 pour garantir que la valeur minimale fausse n'est pas causée par la limite étendue M2 = (C.LT (C.Shift (-1)) & C.LT (C.Shift ()) & M0 # Étape 4: fusionnez les conditions minimales maximales et locales locales pour obtenir l'indicateur de mouvement inversé final DF ['inversion'] = M1 | M2 Imprimer (DF)
Exemple d'analyse et vérification des résultats
Exécutez le code ci-dessus et nous obtiendrons un DataFrame contenant la colonne d'inversion. Cette colonne indique si chaque point dans le temps est le point de départ du mouvement inversé par une valeur booléenne (vrai / false).
REVERSION DES CORDS DATE 0 2010-03-13 350.60172 Faux 1 2010-03-14 352.53184 Faux 2 2010-03-15 354.47785 Faux 2010 3 2010-03-16 356.43861 Faux 2010 4 2010-03-17 358.41273 Faux 2010 5 2010-03-18 0.39843 FAUX # # SPEAU DE BONDE IGNORTS SUCTOR 7 2010-03-20 4.39545 Faux 8 2010-03-21 6.40106 Faux 9 2010-03-22 8.40673 Faux 10 2010-03-23 10.40828 Faux 11 2010-03-24 12.40098 Faux 12 2010-03-25 14.37956 Faux 13 2010-03-26 16.33824 Faux 14 2010-08-13 166.41245 Faux 15 2010-08-14 167.00584 Faux 16 2010-08-15 167.53165 Faux 17 2010-08-16 167.98625 Faux 2010 18 2010-08-17 168.36589 faux 19 2010-08-18 168.66672 Faux 20 2010-08-19 168.88494 faux 21 2010-08-20 169.01682 Faux 22 2010-08-21 169.05885 Vrai # Identifiez avec succès le point de départ réel du mouvement inversé 23 2010-08-22 169.00792 FALSE 24 2010-08-23 168.86147 Faux 2010 25 2010-08-24 168.61771 Faux 2010 26 2010-08-25 168.27591 Faux 2010 27 2010-08-26 167.83665 Faux
À partir des résultats de sortie, nous pouvons voir:
- Dans la section "Exemple de crash" (index 0-13), aucun de ces points n'est marqué vrai malgré les coordonnées passant de 358,41273 à 0,39843 car leur différence absolue est bien supérieure à 1 (358,41273 - 0,39843 est approximativement égale à 358), et la condition M0 n'est pas remplie. Cela évite avec succès les erreurs de jugement causées par le passage aux frontières.
- Dans l'exemple normal (index 14-27), les coordonnées ont atteint un maximum local de 169.05885 le 2010-08-21, puis ont commencé à décliner. Étant donné que ses différences adjacentes (par exemple 169.05885 - 169.01682 = 0,04203 et 169.05885 - 169.00792 = 0,05093) sont toutes deux inférieures à 1 et répond à l'état maximum local, ce point est correctement marqué comme vrai.
Notes et meilleures pratiques
- L'importance de la sélection des seuils :
- Threshold = 1 dans le code est un paramètre clé qui détermine la façon dont nous distinguons les changements mineurs "normaux" des étendues de limite "exception".
- Ce seuil doit être déterminé sur la base des caractéristiques réelles des données, de la fréquence d'échantillonnage et du taux de variation normal maximum attendu. Par exemple, pour les coordonnées planétaires quotidiennes, il n'y a généralement pas de véritable changement inverse de plus de 1 degré en une journée, donc 1 degré est une valeur de départ raisonnable. Ce seuil peut devoir être ajusté si les données sont échantillonnées plus intensives ou si le mouvement est plus rapide.
- Choisir un seuil trop petit peut manquer le point inverse réel mais légèrement plus grand; Le choix d'un seuil trop grand peut ne pas filtrer efficacement la mauvaise évaluation provoquée par une durée limite.
- Continuité et tri des données :
- Assurez-vous que les données d'entrée sont triées correctement dans l'ordre chronologique et que les intervalles de temps sont relativement uniformes. La validité des opérations Shift () et Diff () dépend de cette structure des données.
- S'il y a des valeurs manquantes ou des intervalles de temps irréguliers dans les données, l'interpolation ou le rééchantillonnage peut être nécessaire.
- Généralité des scénarios d'application :
- Cette méthode ne se limite pas à la détection rétrograde planétaire, mais s'applique également à tout autre scénario où des changements de tendance réels dans les données annulaires à 360 degrés (ou tout périodique) sont détectées, telles que:
- La direction du vent change dans les données de direction du vent.
- Modifications de la direction de rotation dans les données du capteur d'angle du moteur.
- Point de valeur extrême pour la détection de phase dans le système de communication.
- Cette méthode ne se limite pas à la détection rétrograde planétaire, mais s'applique également à tout autre scénario où des changements de tendance réels dans les données annulaires à 360 degrés (ou tout périodique) sont détectées, telles que:
- Limitation :
- Pour les modifications extrêmement élevés ou la rareté des données, le simple fait de s'appuyer sur Diff () et les seuils fixes peut ne pas être suffisamment robuste. Dans ces cas, des méthodes de statistiques circulaires plus complexes peuvent devoir être prises en compte, ou les données d'angle sont converties en coordonnées cartésiennes (par exemple (COS (angle), sin (angle))) avant analyse.
Résumer
En combinant les fonctions de Pandas (), Shift () et un jugement logique soigneusement conçu, nous pouvons détecter efficacement et avec précision le mouvement inversé dans les données de coordonnées annulaires à 360 degrés. La clé est d'introduire un seuil de différence absolue, qui distingue efficacement le saut numérique causé par l'encerclement des coordonnées des changements de tendance de mouvement réels. Cette méthode peut être utilisée pour traiter les données de séries chronologiques avec des caractéristiques limites périodiques telles que la planète rétrograde, etc.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT
Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Exécutez pipinstall-rrequirements.txt pour installer le package de dépendance. Il est recommandé de créer et d'activer l'environnement virtuel d'abord pour éviter les conflits, s'assurer que le chemin du fichier est correct et que le PIP a été mis à jour et utiliser des options telles que --No-Deps ou --User pour ajuster le comportement d'installation si nécessaire.

Ce tutoriel détaille comment fusionner efficacement l'adaptateur PEFT LORA avec le modèle de base pour générer un modèle complètement indépendant. L'article souligne qu'il est faux d'utiliser directement Transformers.Automodel pour charger l'adaptateur et fusionner manuellement les poids, et fournit le processus correct pour utiliser la méthode Merge_and_unload dans la bibliothèque PEFT. De plus, le tutoriel souligne également l'importance de traiter les segments de mots et discute des problèmes et des solutions de compatibilité des versions de PEFT.

Python est un outil de test simple et puissant dans Python. Après l'installation, les fichiers de test sont automatiquement découverts en fonction des règles de dénomination. Écrivez une fonction commençant par test_ pour les tests d'assurance, utilisez @ pytest.fixture pour créer des données de test réutilisables, vérifiez les exceptions via PyTest.Rais, prend en charge l'exécution de tests spécifiés et plusieurs options de ligne de commande et améliore l'efficacité des tests.

TheargParsemoduleisthereComMendwaytoHandleCommand-lineargumentsInpython, fournissantRobustParsing, Typevalidation, HelpMessages, AnderrorHling; usys.argvforsimplécasesrequiringminimalsepup.

Cet article vise à explorer le problème commun de la précision de calcul insuffisante des nombres de points flottants dans Python et Numpy, et explique que sa cause profonde réside dans la limitation de représentation des nombres de points flottants 64 bits standard. Pour les scénarios informatiques qui nécessitent une précision plus élevée, l'article introduira et comparera les méthodes d'utilisation, les fonctionnalités et les scénarios applicables de bibliothèques mathématiques de haute précision telles que MPMATH, SYMPY et GMPY pour aider les lecteurs à choisir les bons outils pour résoudre les besoins de précision complexe.

PYPDF2, PDFPLUMBER et FPDF sont les bibliothèques de base pour Python pour traiter PDF. Utilisez le PYPDF2 pour effectuer l'extraction de texte, la fusion, la division et le chiffrement, tels que la lecture de la page via Pdfreader et l'appel extract_text () pour obtenir du contenu; PDFPLUMBER convient plus pour conserver l'extraction de texte de mise en page et la reconnaissance de la table, et prend en charge extract_tables () pour capturer avec précision les données de table; FPDF (FPDF2 recommandé) est utilisé pour générer du PDF, et les documents sont construits et sorties via add_page (), set_font () et cellule (). Lors de la fusion des PDF

L'obtention de l'heure actuelle peut être implémentée dans Python via le module DateTime. 1. Utilisez dateTime.now () pour obtenir l'heure actuelle locale, 2. Utilisez le strftime ("% y-% m-% d% h:% m:% s") pour formater l'année de sortie, le mois, le jour, l'heure, la minute et la seconde, 3. UTCNow () et les opérations quotidiennes peuvent répondre aux besoins en combinant DateTime.now () avec des chaînes formatées.

Importer @ contextManagerfromContextLibandDeFineAgeneratorFonctionnement toTyieldSexactlyOnce, où les actes de championnalsAnterAndCodeLifteryiel
