Python Pandas Memo

Ich habe untersucht, wie man Pandas mit Python benutzt, also dieses Memo. Da ich gerade damit begonnen habe, es in Python zu implementieren, gibt es auch ein Memorandum darüber, wie man Python schreibt.

Was Sie im Programm tun. Holen Sie sich den Wert, der mit dem wahren Wert verglichen werden soll. Holen Sie sich den Vektor jeder Zeitachse und überprüfen Sie die Differenz.

Programm von hier Die Nutzungsumgebung ist python3


"""
import pandas as pd
import numpy as np
import math

class Trajectory:
    def __init__(self, csvData: pd.DataFrame):
        self.csvData = csvData
        self.true_x = self.csvData['true_x[m]']
        self.true_y = self.csvData["true_y[m]"]
        self.true_theta = self.csvData["true_theta[deg]"]
        self.tra_x = self.csvData["trajectory_x[m]"]
        self.tra_y = self.csvData["trajectory_y[m]"]
        self.tra_theta = self.csvData["trajectory_theta[deg]"]
        self.time = self.csvData["time"]
        
    def calcRPEData(self):      
        true_length = self.__calcVector(self.true_x,self.true_y)
        tra_length = self.__calcVector(self.tra_x,self.tra_y)
        self.RPEDataLength = pd.Series(np.array(tra_length) - np.array(true_length))
        
        theta = np.diff(self.true_theta.values)
        theta = np.insert(theta, 0, 0)
        #180, weil Theta 0 bis 180 Grad beträgt->Verhindert eine große Änderung, wenn 0 erreicht wird
        theta = np.where(theta > 180 , theta -180, theta)
        theta = np.where(theta < -180 , theta +180, theta)
        
        self.RPEDataTheta = pd.Series(theta)
        
        self.csvData["RPE_LengthError[m]"] = self.RPEDataLength
        self.csvData["RPE_ThetaError[deg]"] = self.RPEDataTheta
        
        self.csvData["RPE_LE_Abs[m]"] = self.RPEDataLength.abs()
        self.csvData["RPE_TE_Abs[m]"] = self.RPEDataTheta.abs()
        
        return  self.RPEDataLength, self.RPEDataTheta
    
    def calcObjectError(self):
        #Länge Fehlerbetrag+LRF-Abstand x tan(Theta-Fehler)
        
        lengthError = np.array(self.RPEDataLength)
        
        thetaError = []
        for theta in self.RPEDataTheta:
            thetaError.append( 30 * math.tan(math.radians(theta)))
        thetaError = np.array(thetaError)
        
        objectError = np.abs(lengthError) + np.abs(thetaError)
        self.objectError = pd.Series(objectError)
        
        self.csvData["RPE_ObjectError[m]"] = self.objectError
        return self.objectError 
        
        
    def __calcVector(self,x :pd.Series, y :pd.Series) -> pd.Series:
        length = []
        #Sequenzlänge-Renne einmal
        length.append(0)
        for colmun in range( len(x)-1 ):
            length.append( ((x[colmun + 1] -x[colmun]) ** 2 + (y[colmun +1] - y[colmun +1]) ** 2 )**(1/2))
        return length
    
    def add_tag(self):
        #Beurteilung der Beschleunigung / Verzögerung
        self.csvData["straightState"] =  self.__judgeStraight()
        self.csvData["curveState"] = self.__judgeCurve()
        
    def __calcVelAndAccel(self):
        #Beurteilung nach wahrem Wert
        #Berechnung der Entfernung
        length = self.__calcVector(self.true_x,self.true_y)
        #Berechnung der Geschwindigkeit Fahrstrecke/In Zeit-np-Typ konvertieren
        vel = np.array(length) / self.time.values
        #Berechnung der Beschleunigung Betrag der Geschwindigkeitsänderung/Zeit
        #Geschwindigkeitsberechnung-->Diesmal Geschwindigkeit-Geschwindigkeit beim letzten Mal/Diesmal-Letztes Mal
        vel_dif = np.diff(vel)
        #print(true_vel)
        #print(true_vel_dif)
        time_dif = np.diff(np.array(self.time))
        #print(self.time)
        #print(time_dif)
        accel = vel_dif / time_dif
        accel = np.insert(accel, 0, 0)
        return vel,accel
    
    def __judgeStraight(self):
        vel,accel = self.__calcVelAndAccel()
        
        
        #Beschleunigung>0 ->Beschleunigung
        #Beschleunigung<0 ->Verlangsamen
        #Geschwindigkeit ist 0 und Geschwindigkeit ist 0, Stopp STOP
        #anders als das->Konstante Geschwindigkeit
        
        straightState = []
        
        print(vel)
        print(accel)
        
        for colmun, item in enumerate(vel):
        
            if accel[colmun] > 0:
                state = "S_Accel"
            elif accel[colmun] < 0:
                state = "S_Decel"
            elif vel[colmun] == 0:
                state = "S_Stop"
            else:
                state = "S_Constant"
        
            straightState.append(state)
        
        return straightState
        
    def __judgeCurve(self):
        vel, accel = self.__calcAngleVelAndAccel()
        
        #Beschleunigung>0 ->Beschleunigung
        #Beschleunigung<0 ->Verlangsamen
        #Geschwindigkeit ist 0 und Geschwindigkeit ist 0, Stopp STOP
        #anders als das->Konstante Geschwindigkeit
        
        State = []
        
        print(vel)
        print(accel)
        
        for colmun, item in enumerate(vel):
        
            if accel[colmun] > 0:
                state = "C_Accel"
            elif accel[colmun] < 0:
                state = "C_Decel"
            elif vel[colmun] == 0:
                state = "C_Stop"
            else:
                state = "C_Constant"
        
            State.append(state)
            
        return State
        
    def __calcAngleVelAndAccel(self):
                #Beurteilung nach wahrem Wert
        #Berechnung der Entfernung
        theta = np.diff(self.true_theta.values)
        theta = np.insert(theta, 0, 0)
        #Berechnung der Geschwindigkeit Fahrstrecke/In Zeit-np-Typ konvertieren
        vel = theta / self.time.values
        #Berechnung der Beschleunigung Betrag der Geschwindigkeitsänderung/Zeit
        #Geschwindigkeitsberechnung-->Diesmal Geschwindigkeit-Geschwindigkeit beim letzten Mal/Diesmal-Letztes Mal
        vel_dif = np.diff(vel)
        #print(true_vel)
        #print(true_vel_dif)
        time_dif = np.diff(np.array(self.time))
        #print(self.time)
        #print(time_dif)
        accel = vel_dif / time_dif
        accel = np.insert(accel, 0, 0)
        return vel,accel

import pandas as pd
import trajectpryEdditer
from pathlib import Path

#Pfadobjekt erstellen
p = Path("./true_trajectory")

#Suchen Sie nach CSV-Dateien
list(p.glob("**/*.csv"))


trajectory = []
for csv in list(p.glob("**/*.csv")):
    trajectoryData =pd.read_csv(csv)
    trajectory.append(trajectpryEdditer.Trajectory(trajectoryData))

trajectory[0].add_tag()

a = trajectory[0].csvData[(trajectory[0].csvData['straightState'] == 'S_Accel') & (trajectory[0].csvData['curveState'] == 'C_Decel') ]

trajectory[0].calcRPEData()
trajectory[0].calcObjectError()




Recommended Posts

Python Pandas Memo
Pandas Notizen
Pandas Selbststudium Memo
Python-Scraping-Memo
Meine Pandas (Python)
Python lernen note_000
Python-Anfängernotizen
Python lernen note_006
Persönliche Notizen zur Vorverarbeitung von Python Pandas-Daten
Python lernen note_005
Python-Grammatiknotizen
Python Library Hinweis
Python lernen note_001
Python-Lernnotizen
Installationshinweise zu Python3.4
Zusammenfassung der persönlichen Notizen von Pandas
fehlende Ganzzahlen Python persönliche Notizen
Hinweise zur Entwicklung von Python-Paketen
Verwendungshinweise für Python Decorator
Python-IP-Adresse Paket Memo
Pandas auf python2.6 installieren
Notizen im Python Pickle-Format
Erstes Python-Memo
Matlab => Python-Migrationsnotizen
Hinweise zur Python3-Zuweisung
Python versuchen / außer Memo
Python-Anwendung: Pandas # 3: Dataframe
Hinweise zur Python-Framework-Flasche
Python Basic - Pandas, Numpy -
Lesen Sie CSV mit Python-Pandas
Python-Anwendung: Pandas Teil 1: Basic
O'Reilly python3 Primer Lernnotiz
[Python] Liste in Pandas konvertieren [Pandas]
Python
Python-Pandas entfernen den Header-Bereich
Hinweise zur Verwendung des Python-Standards unittest
Python-Notizen, die Sie bald vergessen sollten
python * args, ** kwargs Verwendungshinweise
Python-Theorie regulärer Ausdruck Anmerkungen
Pandas
[Python] Hinweise zur Datenanalyse
[Python] Ändere den Typ mit Pandas
Installieren Sie pandas 0.14 auf python3.4 [auf Mac]
Lernnotizen zur Python-Datenanalyse
Hinweise zur Installation von Python auf Ihrem Mac
Python Pandas Studie aktuelle Zusammenfassung
Memorandum @ Python ODER Seminar: Pandas
100 Pandas klopfen für Python-Anfänger
Holen Sie sich Evernote-Notizen in Python
Datenanalyse mit Python-Pandas
Hinweise zur Installation von Python unter CentOS
Die Kraft der Pandas: Python
Hinweise zum Umgang mit großen Datenmengen mit Python + Pandas
[Python] Laden von CSV-Dateien mit Pandas
Hinweise zu Python- und Wörterbuchtypen
[Python] Operationsnotiz von Pandas DataFrame
Hit Schatzdaten von Python Pandas
Hinweise zur Verwendung von MeCab aus Python