Schick mir einen Link bei einem Hoster deiner Wahl per PN.
Schreiben sich die Spalten mit kleinem ti101 oder grossem TI101, das ist Case Sensitiv.
Messdaten (100.000+) auswerten, Diagramme erzeugen
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Oh okay, dann gibt es mit dem neuen code schon einen Unterschied.
Neuer Error.
Code: Alles auswählen
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("daten.csv", delimiter="\t")
df[["TI101"]].plot(figsize=(40,10))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-9a464363557d> in <module>
3
4 df = pd.read_csv("daten.csv", delimiter="\t")
----> 5 df[["TI101"]].plot(figsize=(40,10))
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in __call__(self, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
2939 fontsize=fontsize, colormap=colormap, table=table,
2940 yerr=yerr, xerr=xerr, secondary_y=secondary_y,
-> 2941 sort_columns=sort_columns, **kwds)
2942 __call__.__doc__ = plot_frame.__doc__
2943
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in plot_frame(data, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
1975 yerr=yerr, xerr=xerr,
1976 secondary_y=secondary_y, sort_columns=sort_columns,
-> 1977 **kwds)
1978
1979
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in _plot(data, x, y, subplots, ax, kind, **kwds)
1802 plot_obj = klass(data, subplots=subplots, ax=ax, kind=kind, **kwds)
1803
-> 1804 plot_obj.generate()
1805 plot_obj.draw()
1806 return plot_obj.result
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in generate(self)
256 def generate(self):
257 self._args_adjust()
--> 258 self._compute_plot_data()
259 self._setup_subplots()
260 self._make_plot()
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in _compute_plot_data(self)
371 if is_empty:
372 raise TypeError('Empty {0!r}: no numeric data to '
--> 373 'plot'.format(numeric_data.__class__.__name__))
374
375 self.data = numeric_data
TypeError: Empty 'DataFrame': no numeric data to plot
Da stimmt etwas mit deinen Daten nicht: In Excel werden schon einige Zahlen nicht als Zahlen erkannt und deshalb linksbündig ausgerichtet. Ferner ist mir nicht klar, was Komma ist, weil sonst Zahlen für Temperaturen zu groß wären... Möglicherweise musst du noch mal auf die Ursprungsdaten zurückgehen.
Stimmt, das ist merkwürdig. Bei der Auswertung mit Excel ging das noch, ich schaue es mir gerade an.pixewakb hat geschrieben: ↑Sonntag 4. November 2018, 20:21 Da stimmt etwas mit deinen Daten nicht: In Excel werden schon einige Zahlen nicht als Zahlen erkannt und deshalb linksbündig ausgerichtet. Ferner ist mir nicht klar, was Komma ist, weil sonst Zahlen für Temperaturen zu groß wären... Möglicherweise musst du noch mal auf die Ursprungsdaten zurückgehen.
Dateien sind angekommen, schau sie mir gerade an. Gib mir ein wenig Zeit und ich sende dir ein Notebook zurück.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Wie sind denn die Zahlenwerte der Spalten TIxxx zu interpretieren?
Code: Alles auswählen
Date Time TI101 TI102 TI103 TI104 TI105 TI106 TI107 TI108 ... TI148 TI149 TI150 TI151 TI152 TI153 TI154 TI155 TI156 TI157
0 02.11.2018 12:28:57 83.829.002 83.908.996 80.165.001 80.096.001 84.275.002 84.022.003 88.922.996 88.781.998 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
1 02.11.2018 12:28:58 83.626.999 83.765.999 79.987 79.905.998 84.067.001 83.832.001 88.745.003 88.616.997 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
2 02.11.2018 12:29:01 83.115.997 83.244.003 79.392.998 79.300.003 83.443.001 83.252.998 88.156.998 88.037.002 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
3 02.11.2018 12:29:03 82.938.004 82.899.002 78.988.998 78.931.999 83.083 82.825.996 87.758.003 87.653 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
4 02.11.2018 12:29:05 82.628.998 82.566.002 78.621.002 78.528 82.655.998 82.418.999 87.412.002 87.282.997 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Hab die Urdatei nochmal mit notepad bearbeitet und dann nochmal ausprobiert mit dem Ergebnis.
Also wieder der alte Error
Code: Alles auswählen
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("Kopie_Daten.csv", delimiter="\t")
df[["TI101"]].plot(figsize=(40,10))
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-25-7047e00903df> in <module>
3
4 df = pd.read_csv("Kopie_Daten.csv", delimiter="\t")
----> 5 df[["TI101"]].plot(figsize=(40,10))
~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
2680 if isinstance(key, (Series, np.ndarray, Index, list)):
2681 # either boolean or fancy integer index
-> 2682 return self._getitem_array(key)
2683 elif isinstance(key, DataFrame):
2684 return self._getitem_frame(key)
~\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_array(self, key)
2724 return self._take(indexer, axis=0)
2725 else:
-> 2726 indexer = self.loc._convert_to_indexer(key, axis=1)
2727 return self._take(indexer, axis=1)
2728
~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _convert_to_indexer(self, obj, axis, is_setter)
1325 if mask.any():
1326 raise KeyError('{mask} not in index'
-> 1327 .format(mask=objarr[mask]))
1328
1329 return com._values_from_object(indexer)
KeyError: "['TI101'] not in index"
df.head()
Date;Time;TI101;TI102;TI103;TI104;TI105;TI106;TI107;TI108;TI109;TI110;TI111;TI112;TI113;TI114;TI115;TI116;TI117;TI118;TI119;TI120;TI121;TI122;TI123;TI124;TI125;TI126;TI127;TI128;TI129;TI130;TI131;TI132;TI133;TI134;TI135;TI136;TI137;TI138;TI139;TI140;TI141;TI142;TI143;TI144;TI145;TI146;TI147
0 02.11.2018;11:45:18;50,20;36,12;45,20;45,78;40...
1 02.11.2018;11:45:20;50,76;37,00;46,39;46,96;41...
2 02.11.2018;11:45:22;51,95;37,95;47,54;48,02;42...
3 02.11.2018;11:45:24;53,02;38,89;48,59;49,15;43...
4
Sorry, da hat Excel was zerhackt. Es sind im Prinzip Temperaturen, also 83,83 würde voll reichen. Ich weiß nicht, warum Excel da zwei Punkte reingehauen hat.ThomasL hat geschrieben: ↑Sonntag 4. November 2018, 20:50 Wie sind denn die Zahlenwerte der Spalten TIxxx zu interpretieren?Code: Alles auswählen
Date Time TI101 TI102 TI103 TI104 TI105 TI106 TI107 TI108 ... TI148 TI149 TI150 TI151 TI152 TI153 TI154 TI155 TI156 TI157 0 02.11.2018 12:28:57 83.829.002 83.908.996 80.165.001 80.096.001 84.275.002 84.022.003 88.922.996 88.781.998 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372 1 02.11.2018 12:28:58 83.626.999 83.765.999 79.987 79.905.998 84.067.001 83.832.001 88.745.003 88.616.997 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372 2 02.11.2018 12:29:01 83.115.997 83.244.003 79.392.998 79.300.003 83.443.001 83.252.998 88.156.998 88.037.002 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372 3 02.11.2018 12:29:03 82.938.004 82.899.002 78.988.998 78.931.999 83.083 82.825.996 87.758.003 87.653 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372 4 02.11.2018 12:29:05 82.628.998 82.566.002 78.621.002 78.528 82.655.998 82.418.999 87.412.002 87.282.997 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
An dem Computer, wo die Daten herkommen, ist wohl nach amerikanischer norm eingestellt udn deshalb Punkt statt Komma.
Ich habe das jetzt mal mit notepad geöffnet, ersetzt und dann mit Excel geöffnet und zur csv gemacht.
Ich schicke dir nochmal Daten okay?
Was sollen denn diese doppelten eckigen Klammern?
Was passiert bei:?
Was passiert bei:
Code: Alles auswählen
df["TI101"].plot(figsize=(40,10))
@Sirius3: <s>Danke für den Hinweis, wahrscheinlich ein Fragment, was ich von irgendwo mitschleppe.</s> Ich plotte meist mehrere Spalten in einem Durchgang und dann brauche ich die doppelten eckigen Klammern. Das ist der Grund dafür. Im obigen Beispiel kommst du ohne aus; wenn der Threadstarter mal mehrere Spalten plotten will, braucht er das wieder.Sirius3 hat geschrieben: ↑Sonntag 4. November 2018, 21:06 Was sollen denn diese doppelten eckigen Klammern?
Was passiert bei:?Code: Alles auswählen
df["TI101"].plot(figsize=(40,10))
@Mogician: Pandas braucht wahrscheinlich amerikanisches Format, Rest käme auf einen Test an, ob ein Komma auch erkannt würde.
Also ich bekomme immer einen der beiden Error, egal ob ich Komma oder Punkt mache.
Hab eben mal alle anderen TI-Zeilen gelöscht, und die TI101 mit Punkt und Komma ausprobiert, error war immer "TypeError: Empty 'DataFrame': no numeric data to plot".
Hab eben mal alle anderen TI-Zeilen gelöscht, und die TI101 mit Punkt und Komma ausprobiert, error war immer "TypeError: Empty 'DataFrame': no numeric data to plot".
Hat vielleicht noch einer eine Lösung oder ein Beispiel mit einer einfachen Datei, wo es funktioniert?
Danke
edit: Frage nach einem Beispiel besteht jetzt nicht mehr unbedingt, da ThomasL (Danke dafür) das schon macht. Wenn jemand trotzdem einen Einfall hat wäre das natürlich immer noch interessant. Danke an alle!
Danke
edit: Frage nach einem Beispiel besteht jetzt nicht mehr unbedingt, da ThomasL (Danke dafür) das schon macht. Wenn jemand trotzdem einen Einfall hat wäre das natürlich immer noch interessant. Danke an alle!
Falls möglich, stell den Link zur Originaldatei doch gerne hier rein, da ist die Schwelle dir zu helfen für alle niedriger.
Mogician, du hast das Notebook in deinem Postfach
Code: Alles auswählen
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_table('Daten_02112018114518.txt', skiprows=[0,1,2,3,4,5,6,7,8,9,10,11,13], index_col=False)
df.info()
df.head(2)
# zusammenfügen der Spalten DATE und TIME zu einer vom Typ DATETIME
newdate = df['Date'] + ' ' + df['Time']
newdate = pd.to_datetime(newdate, errors='raise')
newdate = pd.DataFrame(newdate, columns=['date_time'])
df = pd.concat([newdate, df], axis=1)
# die DATETIME Spalte als Index definieren
df.set_index('date_time', inplace=True)
df.head(2)
df['TI101'].plot(kind='line', figsize=(10,5), color=['black'], ylim=[40, 140], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22'])
plt.title('TI101')
plt.ylabel('Messwert')
plt.xlabel('Zeitpunkt')
plt.show()
TI101_102 = df[['TI101', 'TI102']]
diff = pd.DataFrame(df.TI101 - df.TI102, columns=['Difference'])
TI101_102 = pd.concat([TI101_102, diff], axis=1)
TI101_102.plot(kind='line', color=['blue', 'green', 'red'], figsize=(18,5), rot=90, xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22'])
plt.title('TI101 und TI102, sowie Differenz der beiden')
plt.ylabel('Messwert')
plt.xlabel('Zeitpunkt')
plt.legend(labels=TI101_102.columns, loc='best')
plt.show()
fig = plt.figure() # create figure
ax0 = fig.add_subplot(1, 2, 1) # add subplot 1 (1 row, 2 columns, first plot)
ax1 = fig.add_subplot(1, 2, 2) # add subplot 2 (1 row, 2 columns, second plot). See tip below**
# Subplot 1:
df[['TI101', 'TI102']].plot(kind='line', figsize=(18,5), ax=ax0, color=['blue', 'green'], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22']) # add to subplot 1
ax0.set_title('T1101 und TI102')
ax0.set_ylabel('Messwerte')
ax0.set_xlabel('Zeitpunkte')
# Subplot 2:
diff = pd.DataFrame(df.TI101 - df.TI102, columns=['Differenz'])
diff.plot(kind='line', figsize=(18, 5), ax=ax1, ylim=[-5,17], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22']) # add to subplot 2
ax1.set_title ('Differenz')
ax1.set_ylabel('Messwerte')
ax1.set_xlabel('Zeitpunkte')
ax1.annotate('Was ist das für eine Spitze?', xy=('2018-02-11 12:01:00', -3))
plt.show()
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Super, der code hilft mir schon massiv weiter. Eine Frage hätte ich jetzt noch.
Wie greife ich einen bestimmten Wertebereich raus auf der x-Achse, also zb wenn die Messung von 12h bis 15h lief, und man nur von 13h-14h plotten möchte?
Für die y-Achse hab ich das geschafft, aber wegen dem Zeitformat noch nicht auf der x-Achse.
Also ich habe probiert den code von ThomasL anzuwenden
und auch
und den letzten dann auch mit diversen xmin und xmax Werten aber im Ergebnis kriege ich immer was ganz anderes auf der x-Achse
Danke
Wie greife ich einen bestimmten Wertebereich raus auf der x-Achse, also zb wenn die Messung von 12h bis 15h lief, und man nur von 13h-14h plotten möchte?
Für die y-Achse hab ich das geschafft, aber wegen dem Zeitformat noch nicht auf der x-Achse.
Also ich habe probiert den code von ThomasL anzuwenden
Code: Alles auswählen
xlim=(['2018-02-11 11:44:50', '2018-02-11 12:25:22'])
Code: Alles auswählen
plt.axis([0, 50, 12, 20])
Danke
Also ich habe jetzt doch die Zeitachse so hinbekommen wie ich wollte, dafür sind aber die Messwerte weg.
edit: Geht jetzt doch, Datum und Uhrzeiten waren bei mir nur etwas anders.
Code: Alles auswählen
plt.figure()
df['TI111'].plot()
df['TI112'].plot()
df['TI113'].plot()
df['TI114'].plot()
df['TI115'].plot()
df['TI116'].plot()
plt.xlim(58800,62000)
plt.legend()
plt.xlabel('Time')
plt.ylabel('Temperature [°C]')
edit: Geht jetzt doch, Datum und Uhrzeiten waren bei mir nur etwas anders.
Code: Alles auswählen
plt.xlim(['2018-11-07 16:10:00', '2018-11-07 17:10:00'])
Freut mich, dass ich dir helfen konnte.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
schau mal hier: https://matplotlib.org/tutorials/text/annotations.html
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png