Datenanalyse in Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Code: Alles auswählen

 
from datetime import datetime
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as pldates
import numpy as np

DATA_FILENAME = "SmartCountr.csv"


def main():
	data = pd.read_csv(DATA_FILENAME, delimiter=";")

	# Create linear regression object
	regr = linear_model.LinearRegression()

	x = [datetime.strptime(str(d), '%Y-%m-%d %H:%M:%S') for d in data["zeit"]]
	counter_x = matplotlib.dates.date2num(x)
	formatter = pldates.DateFormatter("%M")
	ax = plt.subplot()
	ax.xaxis.set_major_formatter(formatter)

	# Load the dataset
	counter_y = data['gate.1.in']
	counter_x.shape, counter_y.shape

	# Use only one feature
	counter_x = counter_x[:, np.newaxis, 2]
	counter_x.shape

	# Train the model using the training sets
	regr.fit(counter_x, counter_y)

	# Make predictions using the testing set
	counter_y_pred = regr.predict(counter_x)

	# Plot outputs
	plt.scatter(counter_x, data['gate.1.in'], color='black')
	plt.plot(counter_x, counter_y_pred, color='blue', linewidth=3)

	# plt.xticks(())
	# plt.yticks(())

	axis_label_arguments = {
	"family": "serif",
	"weight": "normal",
	"size": 16,
	"labelpad": 6,
	}
	plt.xlabel("Minutes", color="r", **axis_label_arguments)
	plt.ylabel("Frequency", color="b", **axis_label_arguments)
	plt.suptitle("Sensor measurement errors", fontsize=16)
	plt.legend()
	plt.show()

if __name__ == "__main__":
	main() 
Zuletzt geändert von Wunderkind89 am Sonntag 13. Dezember 2020, 21:16, insgesamt 2-mal geändert.
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Fehler:

Code: Alles auswählen

 C:\Users\iljar\Desktop\UebungenPython\venv\Scripts\python.exe C:/Users/iljar/Desktop/UebungenPython/regression.py
Traceback (most recent call last):
File "C:\Users\iljar\Desktop\UebungenPython\regression.py", line 60, in <module>
main()
File "C:\Users\iljar\Desktop\UebungenPython\regression.py", line 31, in main
counter_x = counter_x[:, np.newaxis, 2]
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed

Process finished with exit code 1



Ja, das sieht schon viel ordentlicher aus. Dankeschön
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

***Nachricht gelöscht
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Wenn ich das hier aus kommentiere (weil da hat mein Programm anscheinend Probleme):

Code: Alles auswählen

# Use only one feature
#counter_x = counter_x[:, np.newaxis, 2]
#counter_x.shape
Dann kriege ich neue Fehlermeldung:

Code: Alles auswählen


C:\Users\iljar\Desktop\UebungenPython\venv\Scripts\python.exe C:/Users/iljar/Desktop/UebungenPython/regression.py
Traceback (most recent call last):
  File "C:\Users\iljar\Desktop\UebungenPython\regression.py", line 60, in <module>
    main()
  File "C:\Users\iljar\Desktop\UebungenPython\regression.py", line 35, in main
    regr.fit(counter_x, counter_y)
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\linear_model\_base.py", line 505, in fit
    X, y = self._validate_data(X, y, accept_sparse=['csr', 'csc', 'coo'],
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\base.py", line 432, in _validate_data
    X, y = check_X_y(X, y, **check_params)
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\utils\validation.py", line 72, in inner_f
    return f(**kwargs)
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\utils\validation.py", line 795, in check_X_y
    X = check_array(X, accept_sparse=accept_sparse,
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\utils\validation.py", line 72, in inner_f
    return f(**kwargs)
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\utils\validation.py", line 619, in check_array
    raise ValueError(
ValueError: Expected 2D array, got 1D array instead:
array=[18566.41498843 18566.415      18566.41501157 ... 18566.59173611
 18566.59174769 18566.59175926].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

Process finished with exit code 1

Ich versuche nur dann zu fragen, wenn ich nicht weiter komme und will so gut es geht möglichst wenig fragen (was leider nicht der Fall ist. In 3 Monaten wage ich zu bezweifeln, dass ich die Sprache Python in dem nötigen Umfang lernen kann ohne den Fokus auf mein Praktikum zu verlieren. Ja, ich bin überfordert). Wenn z.B. solche Fehler auftreten, wo ich keine Ahnung habe, dann wende ich mich an euch, weil die Suche bringt mir auch wenig, weil 1) alles auf Englisch und 2) nimmt mir so viel Zeit weg, dass ich mich mehr mit den Fehlern beschäftige, als mit dem eigentlichen Praktikum und im Praktikum will man auch vorankommen und Zeit ist kostbar.

Alles scheint wichtig zu sein und ich würde am liebsten alles im Detail verstehen aber mangels Zeit muss ich mich nur auf das Wesentliche konzentrieren, was ich persönlich schade finde.

PS: Wenn es geht bitte ich Admin die Codes zu löschen, die diesem ähneln und ohne Tags von mir gepostet wurden.

Grüße
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Zwischenstand: ich hab es geschafft zu plotten. Kleine Änderung wurde vorgenommen:

Code: Alles auswählen

# Use only one feature
    counter_x = counter_x[:, np.newaxis]
Aber so ganz zufrieden bin ich nicht, weil das was ich da geplottet habe ist eine kumulierte Zählung: Mein Sensor schaut jede Sekunde, wie viele Personen reingegangen sind und wen z.B. am Anfang eine Person reingegangen ist, dann ist der Zähler auf 1 also wird jede Sekunde geschaut ob eine weitere Person reingeht (oder mehrere Personen reingehen) und solange keine Person reingeht behält er die 1 also 1,1,1,1,1 für 5 Sekunden und wenn in der 6 Sekunde eine Person reingeht, dann ergibt sich 1,1,1,1,1,2.

Ich hab jetzt die Statistischen Auswertungen anhand von Differenzen gemacht. Nehmen wir an es geht jede Sekunde 1 Person rein. Mein Zähler macht also folgendes: 1,2,3,4,5,6. Um jetzt eine vernünftige statistische Auswertung zu machen (Mittelwert, Median usw.) mache ich folgendes: 2-1, 3-2, 5-4, 6-5 und weiß somit eine 1 Person ist jede Sekunde reingegangen so habe ich zumindest brauchbare Werte. Ich denke so etwas sollte ich auch in meiner linearen Regression berücksichtigen. Ich will später über Residuen meine Ausreißer finden (Ich hab da an OLS Regression gedacht).

Dazu habe ich folgendes gemacht:

Code: Alles auswählen

# Load the dataset
    counter_y = data['gate.1.in']
    counter_x.shape, counter_y.shape

    counter_y = (counter_y.diff()[1:])

    # Use only one feature
    counter_x = counter_x[:,np.newaxis]
    counter_x.shape
Der Rest des Codes ist gleich geblieben (erspare mir hier den kompletten Code erneut zu posten). Jetzt bekomme ich aber eine neue Fehlermeldung:

Code: Alles auswählen

C:\Users\iljar\Desktop\UebungenPython\venv\Scripts\python.exe C:/Users/iljar/Desktop/UebungenPython/regression.py
Traceback (most recent call last):
  File "C:\Users\iljar\Desktop\UebungenPython\regression.py", line 63, in <module>
    main()
  File "C:\Users\iljar\Desktop\UebungenPython\regression.py", line 38, in main
    regr.fit(counter_x, counter_y)
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\linear_model\_base.py", line 505, in fit
    X, y = self._validate_data(X, y, accept_sparse=['csr', 'csc', 'coo'],
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\base.py", line 432, in _validate_data
    X, y = check_X_y(X, y, **check_params)
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\utils\validation.py", line 72, in inner_f
    return f(**kwargs)
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\utils\validation.py", line 812, in check_X_y
    check_consistent_length(X, y)
  File "C:\Users\iljar\Desktop\UebungenPython\venv\lib\site-packages\sklearn\utils\validation.py", line 255, in check_consistent_length
    raise ValueError("Found input variables with inconsistent numbers of"
ValueError: Found input variables with inconsistent numbers of samples: [15137, 15136]

Process finished with exit code 1
[\code]

Grüße
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Quelle: https://scikit-learn.org/stable/auto_ex ... lot-ols-py

Ich hab diesen Code benutzt und versucht auf meinen Anwendungsfall zu übertragen. Dabei konnte ich den Code nicht ganz nachvollziehen. Hier ein Teil des Codes, welches ich nicht so ganz verstehe:

Code: Alles auswählen

# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)

# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)
Also, ich verstehe das Ganze so, dass ich meine Datei sinnvoll splitten muss: einmal der Teil, wo ich mein Modell trainiere (training set) und dann der andere Teil, wo ich mein Modell teste (testing set). Im "training set" schaue ich was ein Ausreißer ist und was nicht. Dazu bilde ich einen Epsilon "Schlauch" um meine lineare Kurve (wir sind ja bei der linearen Regression) um so Ausreißer/ Nichtausreißer zu klassifizieren, d.h. ab einem bestimmten Abstand, den ich mit Hilfe eines Lots messe, gilt ein Punkt als Ausreißer. Wie ich aber sehe muss ich so eine Funktion nicht extra implementieren, weil die Funktion fit(...) dies für mich erledigt. Wenn das der Fall ist, müsste man doch wissen, welche Performance diese Funktion hat, die zwischen Ausreißer/ nicht Ausreißer unterscheidet. Somit wären wir im Bereich supervised learning, weil wir bestimmen vorweg die Zielvariablen (was ist ein Ausreißer/nicht Ausreißer) und trainieren damit unser Modell. Komischerweise hat meine Betreuerin im Praktikum gesagt, dass wir im Bereich des unsupervised learning sind und ich mir "Warteschlangentheorie, Exponentialfunktionen, Satz von Beyes" anschauen soll. Mit einer Exponentialfunktion lassen sich meine Punkte eventuell besser annähern, was das Ganze aber mit Satz von Beyes oder Warteschlangentheorie zu tun hat, verstehe ich nicht. Korrigiert mich, wenn ich falsch liege und wie immer bin ich über jede Hilfe dankbar.

PS: Bitte den Post ab Zwischenstand lesen und den Rest ignorieren.

Grüße
Wunderkind89
User
Beiträge: 66
Registriert: Sonntag 15. November 2020, 01:28

Ich bedanke mich bei allen, die mir geantwortet haben. Ich werde mich mit dieser Thematik noch gründlicher befassen, denn lineare Regression scheint nicht das richtige zu sein (um sagen zu können, welche Datenpunkte valide sind und welche nicht), weil ich habe 4 Sensoren, es sind kumulierte Zähldaten und ich hab die Zeit, die berücksichtig werden muss.

ich lese gerade diese Quelle durch: https://www.sciencedirect.com/science/a ... via%3Dihub

Mein Ziel: Die englische Literatur zu verstehen, mein Problem richtig einordnen und erst dann richtige Verfahren zu finden. Ich melde mich bei euch, sobald ich konkrete und bessere Ergebnisse habe.

Liebe grüße
Antworten