In unserem heutigen Blogeintrag kümmern wir uns um den Aufbau einer - zu Beginn - lokal auf unserem Laptop installierten Umgebung, um Datenanalysen durchzuführen.
Da die Programmiersprache Python hierzu immer populärer wird, aber vor allem, da es sich zur Datenanalyse hervorragend nutzen lässt, basiert unsere Entwicklungsumgebung auf Python.
Nun gibt es mehrere Möglichkeiten Python zu installieren. Und diese sind sogar von Betriebssystem zu Betriebssystem nochmals zu unterscheiden.
Fangen wir vielleicht mit der Basis an, die uns die Python Software Foundation (PSF) über ihre Webseite zum Download anbietet. Hier werden Installationspakete für Windows, Linux und Mac bereitgestellt.
Der Vorteil dieser Pakete ist der direkte Bezug zum Verwalter der Entwicklungsumgebung. Somit ist diese Version vom Funktionsumfang her dem Standard am nächsten. Nach der Installation der Software steht einem aber nur der Python Interpreter und eine funktional nicht sonderlich umfangreiche Entwicklungsumgebung (IDLE) zur Verfügung.
Hinweis: In Zusammenarbeit mit Microsoft ist unter Windows 10 eine Installationsroutine in den Microsoft Store aufgenommen worden, die den Vorteil der sehr einfachen Integration in das Betriebssystem hat. Apple hat sich leider entschlossen aus kommenden MacOS-Systemen Python (und andere Programmiersprachen) zu entfernen. Bei den meisten Linux-Distributionen ist Python bereit Bestandteil der Basisinstallation, da einige Funktionen zur Verwaltung des Betriebssystems in Python programmiert sind.
Da wir uns sehr konkret auf die Datenanalyse konzentrieren, wäre es nun notwendig weitere Frameworks, wie beispielsweise Pandas, über pip zu installieren. Bei pip handelt es sich um den Paketinstaller von Python, der nach der Installation über die Kommandozeile erreicht werden kann, auf Pandas gehen wir später noch näher ein.
pip install pandas
Um den Einstieg in die Datenanalyse allerdings stark zu vereinfachen, aber auch um hinsichtlich der Usability von den Vorteilen einer Distribution zu profitieren, können wir anstatt des Python Interpreters der PSF die Python-Distribution Anaconda nutzen. Hierbei handelt es sich um eine Paketierung, die den Vorteil hat, dass sie sehr viele Frameworks, die wir später einsetzen können, bereits bei der Installation mit einrichtet. Sie stellt aber auch andere Programmiersprachen, wie R oder Julia, über den eigenen Paketmananager (conda) und die eigenen Repositories (anaconda oder conda-forge) bereit.
Da Anaconda Pandas bereits mitliefert, ist es nicht notwendig dieses nachträglich zu installieren. Was sich aber anbietet ist die Verwendung von sogenannten virtuellen Umgebungen, um die Frameworks, mit denen man konkret arbeitet, von den ggf. vielen anderen Frameworks zu isolieren, um entweder eine feste Version zu nutzen oder mal mit noch nicht final freigegebenen Beta-Versionen zu experimentieren. Des Weiteren kann durch die gezielte Isolation der Umfang der speziellen Umgebung exportiert werden, um es Anderen zur Weiterverwendung zur Verfügung zu stellen. In Anaconda kann virtuelle Umgebung wie folgt erstellt werden:
conda create -n NAME_DER_NEUEN_UMGEBUNG python [LISTE_DER_GEWÜNSCHTEN_FRAMEWORKS]
Möchten wir somit eine virtuelle Umgebung mit dem Namen analytics anlegen und dort Python und Pandas bereitstellen, so ist der Aufruf wie folgt:
conda create -n analytics python pandas
Eine dedizierte Version (hier: 0.24) von Pandas kann wie folgt installiert werden:
conda create -n analytics python pandas==0.24
Zur Aktivierung der virtuellen Umgebung muss diese nun noch aktiviert werden, was wr mit conda activate erledigen:
conda activate analytics
Achten Sie hier bitte auf den veränderten Prompt in Ihrer Kommandozeile, der nun den Namen der virtuellen Umgebung (analytics) anzeigen sollte.
Alle Python-Befehle, die wir von nun an hier eingeben, werden mit dem Python-Interpreter der virtuellen Umgebung ausgeführt, nicht mit dem der Anaconda-Basisinstallation. Details hierzu können Sie sich über conda info anzeigen lassen (hier exemplarisch unter Windows 10):
conda info
active environment : analytics
active env location : C:\Users\oroth\Anaconda3\envs\analytics
shell level : 2
user config file : C:\Users\oroth\.condarc
populated config files : C:\Users\oroth\.condarc
conda version : 4.7.11
conda-build version : 3.18.8
python version : 3.7.3.final.0
virtual packages :
base environment : C:\Users\oroth\Anaconda3 (writable)
channel URLs : https://repo.anaconda.com/pkgs/main/win-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/win-64
https://repo.anaconda.com/pkgs/r/noarch
https://repo.anaconda.com/pkgs/msys2/win-64
https://repo.anaconda.com/pkgs/msys2/noarch
package cache : C:\Users\oroth\Anaconda3\pkgs
C:\Users\oroth\.conda\pkgs
C:\Users\oroth\AppData\Local\conda\conda\pkgs
envs directories : C:\Users\oroth\Anaconda3\envs
C:\Users\oroth\.conda\envs
C:\Users\oroth\AppData\Local\conda\conda\envs
platform : win-64
user-agent : conda/4.7.11 requests/2.22.0 CPython/3.7.3 Windows/10 Windows/10.0.18362
administrator : False
netrc file : None
offline mode : False
Da wir nun eine Python-Umgebung haben, in der auch Pandas installiert ist, starten wir mit einer einfachen Auswertung, in dem wir eine CSV mit dem Namen testdaten.csv mit folgendem Aufbau erstellen und nachfolgend einlesen:
id,name,vorname,eine_zahl
1,Rothland,Oliver,5
2,Meyer,Klaus,10
3,Meyer,Marion,7
Folgender Python-Code (testdaten.py) liest die Datei ein, zeigt den Inhalt an und kalkuliert die Summe einer Zahl pro Name.
import pandas as pd
df = pd.read_csv('testdaten.csv')
print(df.head(5))
resultAll = df.groupby('name')['eine_zahl'].sum()
print(result)
Wollen wir beispielsweise nur die Summe des Feldes eine_zahl für die Personen berechnen, die Meyer heißen, so können wir das wie folgt durchführen:
resultMeyer = df[df['name'] == 'Meyer'].groupby('name')['eine_zahl'].sum()
print(resultMeyer)
Um diesen Code zu testen, können Sie diesen mit dem Python-Interpreter der zuvor installierten virtuellen Umgebung ausführen:
python testdaten.py
In der Ausgabe sollten Sie nun nach erfolgreicher Ausführung Folgendes sehen:
name
Meyer 17
Rothland 5
Name: eine_zahl, dtype: int64
name
Meyer 17
Name: eine_zahl, dtype: int64
Die gezeigte Analyse ist natürlich (noch) nicht sonderlich aufwendig oder komplex, aber wir haben eine Basis, auf der wir in weiteren, bald folgenden Artikeln aufbauen können.