print('Auch beim Maschinellen Lernen immer wichtig:' + '\n' +'Aufgabe und Daten umfassend kennenlernen')


"""
Explanation: <h1> Einleitung</h1>
<h2> Warum wollen wir maschinelles Lernen einsetzen?</h2>
<h3>Programmieren können wir doch längst ? </h3>
<h1> <font color="#8888">Es geht nicht nur um Blumen !</font></h1>
<h3> Wo sind die Problemstellungen die wir mit maschinellem Lernen lösen können ?</h3>
<hr>

<h1>Einleitung</h1>
<h2> Warum wollen wir maschinelles Lernen einsetzen?</h2>

<h3>Programmieren können wir doch längst ? </h3>
<h1> <font color="#8888">Es geht nicht nur um Blumen !</font></h1>
<h3> Wo sind die Problemstellungen die wir mit maschinellem Lernen lösen können ?</h3>
<hr>
End of explanation
"""


%matplotlib inline


"""
Explanation: <h2> Deshalb die Daten sich anzeigen lassen (print() etc.)</h2>
<h2> In welchem Format kommen die Daten ? (csv, stream, etc.) </h2>
<h2> Daten plotten mit (matplotlib etc.) </h2>
<h2> Statistische Daten zeigen lassen: Varianz, Mittelwert, Standardabweichung, Maximum, Minimum, Reichweite </h2>
<h2> Hierzu gibt es den Befehl describe(), den werden wir noch kennenlernen.</h2>
<h2> scatter_matrix zeigen lassen !</h2>
<hr>

<h1><font color="#006699"> Warum wollen wir python einsetzen und nicht .....[ Java, C++, R oder andere ? ] </font></h1>
<h2> Welche Antwort finden Sie darauf ?</h2>
<h3> <font color="#8888">Warum wollen Sie python einsetzen ?</font></h3>
<hr>

<h3>Wesentliche Bibliotheken und Werkzeuge</h3>
<hr>

<h3>Programmieren können wir doch längst ? </h3>

<h3>Wo finde ich die Methoden zum Maschinellen Lernen</h3>
<hr>

<h2>url="http://scikit-learn.org/stable/tutorial/machine_learning_map/index.html")


<h3> Arbeiten mit Jupyter Notebooks kennenlernen</h3>
End of explanation
"""


import numpy as np

x = np.array([[1, 2, 3], [4, 5, 6]])
print("x:\n{}".format(x))

"""
Explanation: <h2> Warum setzen wir die Bibliothek Scikit-learn ein ?</h2>
<li> Installation Scikit-learn
<li> Wir bevorzugen eine Anaconda Installation !
<hr>
<h3> <font color="#8888">Warum wollen Sie scikit-learn einsetzen ?</font></h3>
<hr>

<h3> Arbeiten mit NumPy kennenlernen</h3>
End of explanation
"""


from scipy import sparse

# create a 2d NumPy array with a diagonal of ones, and zeros everywhere else
eye = np.eye(4)
print("NumPy array:\n{}".format(eye))

# convert the NumPy array to a SciPy sparse matrix in CSR format
# only the non-zero entries are stored
sparse_matrix = sparse.csr_matrix(eye)
print("\nSciPy sparse CSR matrix:\n{}".format(sparse_matrix))

data = np.ones(4)
row_indices = np.arange(4)
col_indices = np.arange(4)
eye_coo = sparse.coo_matrix((data, (row_indices, col_indices)))
print("COO representation:\n{}".format(eye_coo))

"""
Explanation: <h3> Arbeiten mit SciPy </h3>
End of explanation
"""


%matplotlib inline
import matplotlib.pyplot as plt

# Generierung einer Zahlenreihe von -10 bis 10 in 100 Schritten
x = np.linspace(-10, 10, 100)
# Erzeugen eines Zweiten numpy arrays mit der Funktion sin()
y = np.sin(x)
# The plot function makes a line chart of one array against another
plt.plot(x, y, marker="o", color='brown')
plt.title('Sinus Kurve')
plt.xlabel('x')
plt.ylabel('y')
#plt.legend('sin x','upper left')

%matplotlib inline
import matplotlib.pyplot as plt

# Generierung einer Zahlenreihe von -10 bis 10 in 100 Schritten
x = np.linspace(-20, 20, 100)
# Erzeugen eines Zweiten numpy arrays mit der Funktion sin()
y = np.exp(x)
# The plot function makes a line chart of one array against another
plt.plot(x, y, marker="o", color='green')
plt.title('Exponential Kurve')
plt.xlabel('x')
plt.ylabel('y')

%matplotlib inline
import matplotlib.pyplot as plt
from numpy.random import randn

z = randn(100)

red_dot, = plt.plot(z, "ro", markersize=15)
# Schreibe ein weisses Kruez über einige der Daten.
white_cross, = plt.plot(z[:50], "w+", markeredgewidth=3, markersize=15)

plt.legend([red_dot, (red_dot, white_cross)], ["Attr A", "Attr A+B"])

"""
Explanation: <h3> #matplotlib : Graphische Darstellungen einfach gemacht</h3>
End of explanation
"""


import pandas as pd
from IPython.display import display

# create a simple dataset of people
data = {'Name': ["John", "Anna", "Peter", "Linda"],
        'Location' : ["New York", "Paris", "Berlin", "London"],
        'Age' : [24, 13, 53, 33]
       }

data_pandas = pd.DataFrame(data)
# IPython.display allows "pretty printing" of dataframes
# in the Jupyter notebook
display(data_pandas)

# One of many possible ways to query the table:
# selecting all rows that have an age column greate than 30
display(data_pandas[data_pandas.Age > 30])

"""
Explanation: <h3> Arbeiten mit pandas</h3>
End of explanation
"""


import sys
print("Python version: {}".format(sys.version))

import pandas as pd
print("pandas version: {}".format(pd.__version__))

import matplotlib
print("matplotlib version: {}".format(matplotlib.__version__))

import numpy as np
print("NumPy version: {}".format(np.__version__))

import scipy as sp
print("SciPy version: {}".format(sp.__version__))

import IPython
print("IPython version: {}".format(IPython.__version__))

import sklearn
print("scikit-learn version: {}".format(sklearn.__version__))

"""
Explanation: Python2 versus Python3
Versions Used in this Notebook
End of explanation
"""


from sklearn.datasets import load_iris
iris_dataset = load_iris()

print("Keys of iris_dataset: {}".format(iris_dataset.keys()))

print(iris_dataset['DESCR'][:193] + "\n...")

print("Target names: {}".format(iris_dataset['target_names']))

print("Feature names: {}".format(iris_dataset['feature_names']))

print("Type of data: {}".format(type(iris_dataset['data'])))

print("Shape of data: {}".format(iris_dataset['data'].shape))

print("First five rows of data:\n{}".format(iris_dataset['data'][:5]))

print("Type of target: {}".format(type(iris_dataset['target'])))

print("Shape of target: {}".format(iris_dataset['target'].shape))

print("Shape of target: ")
print(iris_dataset['target'].shape)

print("Target:\n{}".format(iris_dataset['target']))

"""
Explanation: Eine erste Anwendung: Classifikation von Lilien

Schauen wir uns die Daten an
End of explanation
"""


from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
    iris_dataset['data'], iris_dataset['target'], random_state=1)

print("X_train shape: {}".format(X_train.shape))
print("y_train shape: {}".format(y_train.shape))

print("X_test shape: {}".format(X_test.shape))
print("y_test shape: {}".format(y_test.shape))

"""
Explanation: Wie wird der Erfolg gemessen: Training und Test der Daten
End of explanation
"""


import mglearn
# create dataframe from data in X_train
# label the columns using the strings in iris_dataset.feature_names
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
# create a scatter matrix from the dataframe, color by y_train
pd.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o',hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)

"""
Explanation: Immer zuerst: Schauen Sie sich die Daten an
End of explanation
"""


from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)

knn.fit(X_train, y_train)

"""
Explanation: Ihr erstes Machine Learning Modell: k nearest neighbors
Es wurde von n=1 auf n=2 abgeändert
End of explanation
"""


X_new = np.array([[5, 2.9, 1, 0.2]])
print("X_new.shape: {}".format(X_new.shape))

prediction = knn.predict(X_new)
print("Prediction: {}".format(prediction))
print("Predicted target name: {}".format(
       iris_dataset['target_names'][prediction]))

"""
Explanation: Vorhersagen machen
End of explanation
"""


y_pred = knn.predict(X_test)
print("Test set predictions:\n {}".format(y_pred))

print("Test set score: {:.2f}".format(np.mean(y_pred == y_test)))

print("Test set score: {:.2f}".format(knn.score(X_test, y_test)))

"""
Explanation: Evaluation des Modells
End of explanation
"""


X_train, X_test, y_train, y_test = train_test_split(
    iris_dataset['data'], iris_dataset['target'], random_state=0)

knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)

print("Test set score: {:.2f}".format(knn.score(X_test, y_test)))

"""
Explanation: Zusammenfassung und Ausblick
End of explanation
"""


