ich habe eine neue Aufgabe und damit auch neue Probleme und würde mal wieder um eure Hilfe bitten.
Ein Messgerät liefert eine *.csv - Datei mit Messwerten, hier ein Auszug damit man den Aufbau erkennt:
Code: Alles auswählen
"Time","Speed_CNT 4/1 (AVG)","Speed_CNT 4/1 (RMS)","Speed_CNT 4/1 (MIN)","Speed_CNT 4/1 (MAX)","Speed_CNT 4/1","tX1 (AVG)","tX1 (RMS)","tX1 (MIN)","tX1 (MAX)","tX1","tX2 (AVG)","tX2 (RMS)","tX2 (MIN)","tX2 (MAX)","tX2","pD3 (AVG)","pD3 (RMS)","pD3 (MIN)","pD3 (MAX)","pD3","tD3 (AVG)","tD3 (RMS)","tD3 (MIN)","tD3 (MAX)","tD3 ","pD4 (AVG)","pD4 (RMS)","pD4 (MIN)","pD4 (MAX)","pD4 ","tD4 (AVG)","tD4 (RMS)","tD4 (MIN)","tD4 (MAX)","tD4","pX1 (AVG)","pX1 (RMS)","pX1 (MIN)","pX1 (MAX)","pX1","tS4 (AVG)","tS4 (RMS)","tS4 (MIN)","tS4 (MAX)","tS4","pX2 (AVG)","pX2 (RMS)","pX2 (MIN)","pX2 (MAX)","pX2"
"s","rpm","rpm","rpm","rpm","rpm","deg C","deg C","deg C","deg C","deg C","deg C","deg C","deg C","deg C","deg C","bar","bar","bar","bar","bar","Cdeg","Cdeg","Cdeg","Cdeg","Cdeg","bar","bar","bar","bar","bar","Cdeg","Cdeg","Cdeg","Cdeg","Cdeg","bar","bar","bar","bar","bar","Cdeg","Cdeg","Cdeg","Cdeg","Cdeg","bar","bar","bar","bar","bar"
0.000000,,,,,704.425125122070,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.000514090092,,,,,,,,,,0.000514090092
0.001000,,,,,704.394774754842,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.002000,,,,,704.364424387614,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.003000,,,,,704.334074020386,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.004000,,,,,704.303723653158,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.005000,,,,,704.273373285929,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.006000,,,,,704.243022918701,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.007000,,,,,704.212672551473,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.008000,,,,,704.182322184245,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.009000,,,,,704.151971817017,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
0.010000,,,,,704.121621449788,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.000514090092,,,,,,,,,,0.000514090092
Hinter der Spalte steckt folgenes:
Code: Alles auswählen
from pathlib import Path
from icecream import ic
import pandas
CSV_FILE = Path(__file__).parent / "20230221113501.csv"
def main():
data = pandas.read_csv(CSV_FILE, header=[0, 1], low_memory=False)
ic(data['Speed_CNT 4/1'])
ic(data.dtypes)
if __name__ == '__main__':
main()
Code: Alles auswählen
ic| data['Speed_CNT 4/1']: rpm
0 704.425125
1 704.394775
2 704.364424
3 704.334074
4 704.303724
... ...
4515775 0.000000
4515776 0.000000
4515777 0.000000
4515778 0.000000
4515779 0.000000
[4515780 rows x 1 columns]
ic| data.dtypes: Time s float64
Speed_CNT 4/1 (AVG) rpm float64
Speed_CNT 4/1 (RMS) rpm float64
Speed_CNT 4/1 (MIN) rpm float64
Speed_CNT 4/1 (MAX) rpm float64
Speed_CNT 4/1 rpm float64
...
Code: Alles auswählen
from pathlib import Path
import pandas
import matplotlib.pyplot as plt
CSV_FILE = Path(__file__).parent / "20230221113501.csv"
def main():
data = pandas.read_csv(CSV_FILE, header=[0, 1], low_memory=False)
data.plot.scatter(x="Time", y="Speed_CNT 4/1", s=1)
plt.show()
if __name__ == '__main__':
main()
Eine Suche brachte mich auf den Median-Filter und in Verbindung mit Python bin ich dann auf scipy.median_filter gestoßen.
Ich weis aber gar nicht wirklich, ob dass das richtige für mich ist.(?) Habe es auch noch nicht geschafft, dass ich damit was angezeigt bekomme.
Code: Alles auswählen
from pathlib import Path
from icecream import ic
import pandas
import matplotlib.pyplot as plt
from scipy.ndimage import median_filter
CSV_FILE = Path(__file__).parent / "20230221113501.csv"
def main():
data = pandas.read_csv(CSV_FILE, header=[0, 1], low_memory=False)
speed = median_filter(data['Speed_CNT 4/1'], size=(1, 1), output='float64')
data.plot.scatter(x="Time", y=speed, s=1)
plt.show()
if __name__ == '__main__':
main()
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\straub\PycharmProjects\csv\format_csv.py", line 18, in <module>
main()
File "C:\Users\straub\PycharmProjects\csv\format_csv.py", line 13, in main
data.plot.scatter(x="Time", y=speed, s=1)
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\plotting\_core.py", line 1697, in scatter
return self(kind="scatter", x=x, y=y, s=s, c=c, **kwargs)
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\plotting\_core.py", line 945, in __call__
return plot_backend.plot(data, x=x, y=y, kind=kind, **kwargs)
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\plotting\_matplotlib\__init__.py", line 71, in plot
plot_obj.generate()
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 452, in generate
self._make_plot()
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 1261, in _make_plot
data[y].values,
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\core\frame.py", line 3813, in __getitem__
indexer = self.columns._get_indexer_strict(key, "columns")[1]
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\core\indexes\multi.py", line 2626, in _get_indexer_strict
return super()._get_indexer_strict(key, axis_name)
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\core\indexes\base.py", line 6065, in _get_indexer_strict
indexer = self.get_indexer_for(keyarr)
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\core\indexes\base.py", line 6052, in get_indexer_for
return self.get_indexer(target)
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\core\indexes\base.py", line 3953, in get_indexer
return pself.get_indexer(
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\core\indexes\base.py", line 3973, in get_indexer
return self._get_indexer(target, method, limit, tolerance)
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\core\indexes\base.py", line 3994, in _get_indexer
tgt_values = engine._extract_level_codes( # type: ignore[union-attr]
File "pandas\_libs\index.pyx", line 664, in pandas._libs.index.BaseMultiIndexCodesEngine._extract_level_codes
File "C:\Users\straub\PycharmProjects\csv\venv\lib\site-packages\pandas\core\indexes\multi.py", line 137, in _codes_to_ints
codes <<= self.offsets
ValueError: non-broadcastable output operand with shape (4515780,1) doesn't match the broadcast shape (4515780,2)
Irgendwie drehe ich mich gerade im Kreis.
Wenn ich den Filter selbst schreiben müsste, dann müsste ich immer die Differenz zwischen zwei aufeinanderfolgende Werte berechnen und die Differenz die wesentlich höher (wie hoch?) ist fällt dann raus, aber nur wenn die nachfolgenden Werte wieder ähnlich mit denen davor sind.
So jetzt habe ich mal wieder aufgeschrieben was in meinem Kopf so vor sich geht. Vielen Dank für das lesen bis hier her und schon einmal danke für eure Antworten.
Viele Grüße
Dennis