Künstliche Intelligenz: Data science mit Python


 

Einführung

Im ersten Teil meiner Blogserie über "Künstliche Intelligenz" habe ich eine Einführung über die objektorientierte Programmierung in Python gegeben. Dabei wurden die Grundlagen der Programmierung in Python vorgestellt. In diesem zweiten Teil geht es, um die Arbeit mit Daten. Mit "pandas" bietet Python eine geeignete Bibliothek an, die das Handling von Daten von unterschiedlichen Quellen, die aber in strukturierter Form vorliegen, übernimmt. Mit "pandas" werden die Daten in eine geeignete Form gebracht und können dann mit Methoden aus der Bibliothek "matplotlib" ansprechend und in vielfältiger Form visualisiert werden.

Daten liegen in vielfältiger Form vor, oftmals unstrukturiert, teilweise semi-strukturiert und beispielsweise strukturiert, wenn sie aus einem RDBM - System stammen. Daher ist es zwingend auf dem Weg "Künstliche Intelligenz" mit Python zu betreiben, sich mit Daten auseinanderzusetzen, denn letztliches wird auch ein "Neuronales Netz" mit geeigneten Daten gefüttert, die dann interpretiert werden müssen.

Data Warehouse - eine zentrale Quelle

Daten liegen oftmals in unterschiedlicher Form vor und kommen aus den verschiedensten Arten von Quellen. In einer Business-Organisation können Daten aus der Verkaufsabteilung, der Kaufabteilung, der Produkteabteilung etc. stammen. All diese Daten gelangen in ein sogenanntes Daten Warehouse. Ein Daten Warehouse kann man sich als zentrales Repository von integrierten Daten unterschiedlicher Herkkunft vorstellen.

Datenanalyse und Datenvisualisation

Die im Data Warehouse gesammelten Daten, müssen nun je nach Business Zweck in geeigneter Form aufbereitet werden. Dieser Vorgang wird Datenanalyse genannt. Normalerweise können mit der Datenanalyse dann Fragen des Managements einer Organisation beantwortet werden. Personen, die solche Datenanalysen machen, werden Datenanalysten genannt. Nach der Analyse der Daten werden die Daten dann von IT Spezialisten in Form von Bildern oder Grafiken dem Management zur Verfügung gestellt, so dass das Management sie interpretieren kann. Dieser Vorgang heisst Datenvisualisation, dessen primäres Ziel es ist, Informationen klar und effizient mit statistischen Grafiken, Zeichnungen und Diagrammen zu vermitteln.

Zusammenfassend wird der Bereich für Techniken, die im Zusammenhang mit der Extraktion von Daten aus einem Daten Warehouse, der Analyse und der Präsentation für Entscheidungsträger stehen als Daten Wissenschaft bezeichnet. Deshalb wird diser Beruf Datenwissenschaftler (data scientist)
genannt.

Data Analyst und Data Scientist

Der Datenwissenschaftler formuliert die richtigen Fragen für das Business und arbeitet aus, wie diese zu lösen sind. Der Datenanalyst erhält die Fragen des Business Team und liefert Antworten darauf. Er analysiert sie dahingehend und liefert auf Fragen des Business Teams Antworten. Der Wissenschaftler andererseits ist mehr darauf bedacht die Daten, mit seiner Fähigkeit Daten anspruchsvoll darzustellen, in eine Bussiness Story einzubinden. Damit er in der Lage ist dies zu tun, verfügt er über eine guten mathematischen Background in Statistik und beherrscht zudem Programmiersprachen wie Python und R. Die Stärken des Analysten sind mehr im Daten-Warehouse Bereich, dem Konzept von Big Daten, SQL und Business Intelligence zu finden. Datenanalysten schauen auf die bekannten Daten aus einer anderen Perspektive und Daten Scientists leiten unbekannte Informationen aus den bekannten Daten ab.

Pandas Einführung

pandas ist eine Programmbibliothek für die Programmiersprache Python, die Hilfsmittel für die Verwaltung von Daten und deren Analyse anbetet. Insbesondere enthält sie Datenstrukturen und Operatoren für den Zugriff auf numerischen Tabellen und Zeitreihen. Der Name leitet sich übrigens von dem englischen Begriff "Paneldaten" ab.

Ein wesentliches Element von pandas ist der DataFrame. Auf einem DataFrame können dann die verschiedensten Operationen durchgeführt werden. Dies Operationen im Detail anzusehen, ist Zweck dieses Artikels.

Damit alle Beispiele im Artikel funktionieren, müssen mit pip die notwendigen Bibliotheken installiert werden:

pip install pandas
pip install lxml
pip install ezodf

Die letzten zwei Bibliotheken dienen dazu, Open-Office (Libre-Office) Spreadsheet Dateien einlesen zu können. Excel Dateien werden ad hoc unterstützt:

Format Type Data Description Reader Writer
text CSV read_csv to_csv
text JSON read_json to_json
text HTML read_html to_html
text Local clipboard read_clipboard to_clipboard
binary MS Excel read_excel to_excel
binary HDF5 Format read_hdf to_hdf
binary Feather Format read_feather to_feather
binary Parquet Format read_parquet to_parquet
binary Msgpack read_msgpack to_msgpack
binary Stata read_stata to_stata
binary SAS read_sas
binary Python Pickle Format read_pickle to_pickle
SQL SQL read_sql to_sql
SQL Google Big Query read_gbq to_gbq

So wird beispielsweise ein Excel-Spreadsheet importiert:

import pandas as pd
import xlrd
df = pd.read_excel("/home/myname/data.xlsx", "Sheet1")

Ein geläufiges Format wird wie aus obiger Tabelle ersichtlich wird, nicht unterstützt: Open-/Libre - Office. Folgender Code hilf diese Dokumente zu importieren:


import pandas as pd
import ezodf

doc = ezodf.opendoc('/home/kerle/Documents/data.ods')
sheet = doc.sheets[0]
df_dict = {}
for i, row in enumerate(sheet.rows()):
    # row is a list of cells
    # assume the header is on the first row
    if i == 0:
        # columns as lists in a dictionary
        df_dict = {cell.value: [] for cell in row}
        # create index for the column headers
        col_index = {j:cell.value for j, cell in enumerate(row)}
        continue
    for j, cell in enumerate(row):
        # use header instead of column index
        df_dict[col_index[j]].append(cell.value)


df = pd.DataFrame(df_dict)
print(df) 

       id    name  weight        date
0  1001.0    Bark    22.0  01-02-2016
1  1002.0    Waff    24.0  03-05-2015
2  1003.0  Wuffel    18.0  08-05-2012
3  1004.0   Bello    21.0  04-03-2013
4  1005.0     Kim    19.0  06-07.2018
5  1006.0    Aspo    25.0  02-09-2017

Operationen auf Data Frames

Leider ist es nicht möglich im Rahmen dieses Artikels alle Operationen zu erwähnen. Eine vollständige Liste findet sich unter: http://pandas.pydata.org/pandas-docs/stable/reference/frame.html


Beispiele:


print(df.shape)
# (6,4)
r, c = df.shape
print(r)
# 6
print(df.head())
# Druckt nur die ersten fünf Elemente der Tabelle aus
print(df.tail())
# Druckt die letzten fünf Elemente der Tabelle aus
print(df.head(2))
# Druckt die ersten zwei Elemente aus
print(df.tail(2))
# Druckt die letzten zwei Elemente aus
#        id  name  weight        date
# 4  1005.0   Kim    19.0  06-07.2018
# 5  1006.0  Aspo    25.0  02-09-2017
# OPERATIONEN auf Reihen
print(df[2:5])
# Druckt die zweite bis und mit der 4. Reihe aus
print(df[0::2])
# Druckt jede zweite Reihe aus
print(df[5:0:-1])
# Druckt die Reihen in umgekehrter Reihenfolge aus
# OPERATIONEN auf Spalten
print(df.columns)
# Index(['id', 'name', 'weight', 'date'], dtype='object')
print(df.id)
# 0    1001.0
# 1    1002.0
# 2    1003.0
# 3    1004.0
# 4    1005.0
# 5    1006.0
print(df[['id', 'name']])
# Druckt die Spalten mit der Bezeichnung id und name aus
# MAXIMUM und MINIMUM Werte
print(df['weight'].max())
# 25
print(df['weight'].min())
# 18
# Anzeigen statistischer Infos
print(df['weight'].describe())
# count     6.000000
# mean     21.500000
# std       2.738613
# min      18.000000
# 25%      19.500000
# 50%      21.500000
# 75%      23.500000
# max      25.000000
# Name: weight, dtype: float64
 

Abfragen und Sortieren

#Daten Queries
print(df[df.weight > 22])
#        id  name  weight        date
# 1  1002.0  Waff    24.0  03-05-2015
# 5  1006.0  Aspo    25.0  02-09-2017
print([df.weight == df.weight.max()])
# [0    False
# 1    False
# 2    Fals e
# 3    False
# 4    False
# 5     True
print(df[['id', 'name']][df.weight > 24])
#        id  name
# 5  1006.0  Aspo
 
Die erste Spalte heisst Index-Spalte und wird im Data Frame automatisch erstellt. Es kann aber sein, dass die erste Spalte in der Realität nicht dem Index entspricht. Mit der Methode set_index kann aber eine andere Spalte als Index gesetzt werden. Zusätzlich muss das Flag inplace=True gesetzt werden, damit der aktuelle Data Frame die Änderungen am Index akzeptiert. Mit einem solchen gesetzten Index können dann mit der Funktion loc direkt die Elemente für einen Index angesprochen werden:

print (df.index)
# RangeIndex(start=0, stop=6, step=1)
df.set_index("id", inplace=True)
print(df.loc[1002])
# name            Waff
# weight            24
# date      03-05-2015
# Name: 1002.0, dtype: object
df.reset_index(inplace=True)
# setzt den Index zurück
 

Die Ananconda Distribution

Für den beginnenden Data Scientist ist es unerlässlich, sich die Ananconda Distribution auf https://docs.anaconda.com/ zu besorgen. Anaconda ist einerseits ein Package Manager und andererseits eine Data Science/R Distribution für Python. Zudem beinhaltet die Distribution wählbar mehrere Tausend Open Source Packages. Anaconda bietet auch gleich ein geeignetes Werkzeug, um erste Erfahrungen im Bereich Data Science zu sammeln. Nämlich das Jupiter Notebook. Im Prinzip ist das ein webbasierter Editor, mit dem Python Programme sauber dokumentiert und ausgeführt werden können. Anaconda wird unter Linux folgendermassen installiert:

a) Herunterladen der aktuellen Version auf den eigenen Rechner
b) sudo chmod a+x auf die Shell Datei
c) sudo ./Installationsdateiname.sh

Ist die Installation beendet, kann innerhalb des Home Verzeichnisses von Anaconda in der Ordner bin gewechselt werden und dort der Anaconda Navigator gestartet werden: ./anacando-navigator

Der Navigator hat das eigentliche Ziel, virtuelle Environments für das Arbeiten mit Python zusammenzustellen. Ein virtuelles Environment ist eine Ansammlung von Python Packages, die für die Arbeit an einem spezitischen Projekt verwendet werden müssen.

Wenn in einem Data Science Projekt also Pandas verwendet werden sollen, so kann einfach ein neues virtuelles Environment erstellt werden und das Package über den Anaconda Navigator hinzugefügt werden. Aus diesem virtuellen Environment heraus wird dann entweder die Entwicklungsumgebung für Python gestartet oder aber das Jupiter Notebook, dass dann direkt ohne die Installation mit pip Pandas kennt.

Jupyter Notebook

Das Jupyter Notebook dient dazu in einer webbasierten Oberfläche Python Code zu erstellen, den Code mittels Markdown zu dokumentieren, mit Python erstellte Grafiken direkt inline darzustellen und ist eine einfache Methode, Code mit anderen Data Scientist zu teilen.

Markdown

Wie der Test formatiert werden kann findet sich beispielsweise unter:

https://help.github.com/en/articles/basic-writing-and-formatting-syntax

Hier auszugsweise einige Elemente die häufig verwendet werden:

Überschriften

Überschriften werden mit # eingeleitet und gebildet:
# Grosse Überschrift
### Kleinere Überschrift

Textstyle

**Fetter Text**
*Kursiv*
--Durchgestrichen--
**Fetter Text mit _kursivem Inhalt_**
***Fetter und kursiver Text***

Quotes

> Das ist ein Quote
So wird ein Code Auszug 'mycode' gequotet

Links

Das ist ein Link auf die Homepage von [Google](https://www.google.ch)

Relative Links

[Das ist ein relativer Link](docs/contribution.md)

Listen

- Das ist ein Listenelement

1. Nummerierte Liste

- Das ist das Hauptlistenlement
  - Das ist ein Unterelement
    1. weiteres nummeriertes Unterelement

Aufgaben-Listen

- [x] Das habe ich schon erledigt
- [ ] Das muss noch erledigt werden

Emoji















Keine Kommentare:

Kommentar veröffentlichen