import IPython
IPython.__version__
Die Informationen in diesem Kapitel bieten eine (subjektive) Auswahl der wichtigsten Punkte und sollen dazu dienen einen Überblick zum Thema Python zu bekommen. Bei detailierteren Fragestellungen sollten unbedingt weitere Quellen herangezogen werden.
Wieso verwenden wir Python und nicht eine andere Sprache?
Kaggle ist eine Online-Community, die sich an Datenwissenschaftler richtet. Kaggle ist im Besitz der Google LLC. Der Hauptzweck von Kaggle ist die Organisation von Data-Science-Wettbewerben. Die Anwendungspalette ist im Laufe der Zeit stetig vergrößert worden. Heute ermöglicht Kaggle es Anwendern unter anderem auch, Datensätze zu finden und zu veröffentlichen, Modelle in einer webbasierten datenwissenschaftlichen Umgebung zu erforschen und zu erstellen und mit anderen Datenwissenschaftlern und Ingenieuren des maschinellen Lernens zusammenzuarbeiten. Kaggle bietet auch eine öffentliche Datenplattform, eine Cloud-basierte Workbench für die Datenwissenschaft und eine Kurzform der KI-Ausbildung an.
Wichtige Eigenschaften der Sprache:
Beispiel Java (objektorientierte Sprache)
public class HelloWorld{
public static void main(String []args){
System.out.println("Hello World");
}
}
Beispiel Python
print('Hello World')
Beispiel Python (objektorientiert)
class HelloWorld:
def __init__(self):
print('Hello World')
verwenden wenn
nicht verwenden wenn
pip
conda
. Unterschiede zu pip:Installiere Anaconda für python 3 von https://www.anaconda.com/products/individual
Öffne den Anaconda Prompt und tippe folgende Befehle ein:
Zeige allg. Informationen:
conda info
Liste alle installierten Pakete:
conda list
Liste alle Umgebungen
conda env list
Erstelle eine neue Umgebung schulung mit Python 3
conda create --name schulung python=3
Aktiviere Umgebung schulung
conda activate schulung
Installiere Pakete
conda install numpy pandas
Lösche Umgebung
conda env remove --name schulung
Navigiere in den Ordner mit der Datei 'env.yml' und installiere vollständige Umgebung erneut (ca. 10 Minuten)
conda env create -f env.yml
Siehe auch das conda Cheat Sheet und den Userguide für mehr Details zu conda.
Achtung: es gibt zwei Versionen: Python 2 und Python 3. Python 3+ ist die aktuelle Version! Infos zur Portierung.)
Es gibt mehrere Umgebungen in denen Python verwendet werden kann
1 + 1
import pandas as pd
df = pd.DataFrame({'a': [1,2], 'b':[3,4]})
python __tmp/hello_world.py
%%writefile __tmp/hello_world.py
print('Hello world!')
allg. Infos, type ?
oder help
def say_this(text):
"""
I am the Docstring.
Prints text to screen.
"""
print('Someone told me I should print {}.'.format(text))
help(say_this)
oder say_this?
standard CLI für interaktive Arbeiten zB. data exploration
Out[1]
oder _i1
, _1
%command
: line magic , ausgeführt in einer Zeile, Zuweisung möglich%%command
: cell magic , ausgführt über mehrere Zeilen, keine Zuweisung möglich%run __tmp/hello_world.py
%alias
%timeit np.arange(1000)
%timeit [i for i in range(1000)]
%%timeit
!sys_command
run system commands -> Achtung: wird in local shell ausgeführt d.h. abhängig davon auf welchem OS (Win, Linux). Beispiele:
!dir
, Linux:!ls -l
!chdir
, Linux:!pwd
Verwendung: Kombination aus Dokumentation und Code zB Datenexploration, Dokumentation oder Präsentation
Notebook starten mit jupyter notebook
Aufzählung 1
1.2 Blubb
Code line: code has back-ticks
Code Block
def func():
"""
Example function.
"""
# function body
pass # this is used as placeholder
LaTeX Code: $ e^{i\pi} = -1$
Links: Mehr über Markdown
Formatierung: fett , kursiv , fett und kursiv
und noch mehr...
Zwei Modes:
Shell Kommandos im Notebook ausführen.
Unter Windows gibt es ein paar Probleme, weil
# !conda list
# %%bash
# conda --version
%%bash
# bash Kommandos ausführen
# ls -l
Die wichtigsten Eigenschaften von Python für die Praxis
Dynamische Typisierung -> keine explizite Typendeklaration -> Problematisch bei komplexen Datentypen zB. Return Wert an REST API. In diesem Fall erst Erkundung des Objects notwendig (in CLI, Dokumentation, Quellcode...).
weitere Punkte siehe unten
Lesender Zugriff auf Elemente iterierbarer Objekte i. d. R. nicht über den Index.
#id0001 live coding: naive loops
#id0002 live coding: pythionic loops
#id0003 live coding: zwei Listen
#id0004 live coding: dicts
Kompakte und schnelle Schreibweise zur Erzeugung von Listen
#id0005 live coding: simple list comprehension
#id0006 live coding: conditional list comprehension
#id0007 live coding: mixed dtypes, complex condition
#id0008 live coding: func call
Schreibe eine Funktion get_intersection(l1, l2)
die die Schnittmenge zweier Listen l1 und l2 berechnet.
x in some_list
um zu überprüfen ob x in der Liste ist.some_list.append(new_entry)
einer Liste hinzufügensome_list = []
Welches Ergebnis erhaltet ihr für die listen l1 = [1, 2, 3, 4, 5]
und l2 = [2, 4, 5, 7, 9]
?
l1 = [0, 1, 2, 3]
#id0009 live coding: slicing start
#id0010 live coding: slicing end
#id0011 live coding: slice it
#id0012 live coding: step
#id0013 live coding: reverse
#id0014 live coding: str
Grundlegende Datenstruktur für numerische Operationen.
#id0100 live coding: numpy intro
Funktionen von Pandas sind sehr umfangreich. Ein erschöpfende Behandlung ist hier nicht möglich. Weitere Informationen auf der Pandas Website bzw. im Internet.
import pandas as pd
#id0015 live coding: create df
import os
#id0016 live coding: os.path.join
#id0017 live coding: os.path.join 2
#id0018 live coding: csv export
#id0019 live coding: csv import
#id0020 live coding: csv import 2
file_path = os.path.join(dir_path, 'df_test.pkl')
file_path
#id0021 live coding: pkl export
#id0022 live coding: pkl import
#id0023 live coding: df col selection
#id0024 live coding: object like access
#id0024 live coding: add col
#id0025 live coding: add more cols
#id0026 live coding: masking 1
#id0027 live coding: masking 2
#id0028 live coding: masking 3
#id0029 live coding: masking 4
#id0030 live coding: masking 4 compact
#id0031 live coding: rows basics
#id0032 live coding: rows and cols
#id0033 live coding: masking 5
#id0034 live coding: masking and cols
"Note that contrary to usual python slices, both the start and the stop are included, when present in the index!"
sehr viele Möglichkeiten, nur die wichtigsten hier
Mehr infos:
#id0035 live coding: recap simple list
#id0036 live coding: recap simple list slicing
#id0037 live coding: pd slicing 1
#id0038 live coding: pd slicing 2
Referenzen müssen von Kopien unterschieden werden um Seiteneffekte zu vermeiden.
df1 = pd.DataFrame({'a': [0, 1]})
df1
#id0039 live coding: reference
Wie bekomme ich eine Kopie?
#id0040 live coding: copy
Ein view df2
auf ein array df1
ist ein array, dass auf eine Teilmenge der Daten von df1
zeigt.
Dieser Unterschied kann bei Schreibzugriffen zu unerwarteten Resultaten führen:
df1 = pd.DataFrame({'a': [0, 1]})
df1
#id0041 live coding: chained indexing
SettingWithCopyWarning entsteht bei Schreibzugriffen, diese können u.U. sehr weit entfernt von der ursächlichen Codezeile liegen.
#id0042 live coding: hidden chaining
Für das debuggen der SettingsWithCopyWarning kann es hilfreich sein nicht nur eine Warnung anzuzeigen, sondern direkt eine Exception zu werfen. In diesem Fall wird sofort die Codezeile deutlich bei der die Warnung auftritt (jedoch nicht die ursächliche Codezeile). Dazu müssen die Einstellungen in Pandas geändert werden mit
pd.options.mode.chained_assignment = 'raise'
Weitere Informationen:
Gegeben ist der unten stehende DataFrame mit zwei Spalten a
und b
:
df = pd.DataFrame({'a': [1, 2, 3, 4],
'b': [1, 1, 1, 1]})
df
Aufgabe: Füge eine neue Spalte c
hinzu deren Werte folgendermaßen bestimmt werden:
a
gerade ist, ist der Wert in c
die Summe der Spalten a
und b
a
ungerade ist, ist der Wert in c
die Differenz der Spalten a
und b
.Berechne die Spalte c
einmal mittels einer for
Schleife und dann ohne eine for
Schleife zu verwenden (vektorisiert).
# helper functions
def _color_groups(row, group_key='group_id'):
cdict = {1: 'red',
2: 'blue',
3: 'green'}
color = cdict.get(row[group_key], 'black')
return ['color: %s' % color] * len(row)
def cprint(df):
"""
Helper function which colors each group.
"""
group_key = 'group_id' if 'group_id' in \
df.columns else 'counter_id'
display(df.style.apply(lambda row: _color_groups(row, group_key),
axis=1))
Pandas ermöglicht es Daten in Tabellen zu gruppieren und Operationen auf diesen Gruppen auszuführen.
#id0043 live coding: groupby
Tabelle df_imp
enthält unplausible Ablesebelege. Hier der Einfacheit halber nur die IDs der Zählwerke (counter_id
).
#id0044 live coding: simple grouping mrv
Berechne den Mittelwert über alle Gruppen in df_hist
und join das Ergbnis in df_imp
. Achte darauf, dass die Ergebnissspalte den Namen 'mean' trägt. Versuche die Operationen in zwei Zeilen auszudrücken.
Lösung:
Hilfreich für die Analyse ist es, sich einzelene Gruppen anzeigen zu lassen. Das geht mit get_group(group_id)
:
selection = grp.get_group(2)
selection
selection
ist ein gewöhnlicher DataFrame auf dem normal Operationen ausgeführt werden können.
selection['daily_cons'].sum()
Diverse Tutorials im Internet und Bücher. Keine spezielle Empfehlung. Eine kleine Auswahl relevanter Quellen:
stackoverflow: Von Entwicklern für Entwickler. Umfangreiche Fragensammlung rund ums Programmieren.
Dive Into Python 3: frei online einsehbares Buch zu Python
Kompakte Python Übersicht, TU-Chemnitz, Holger Trapp