Weiter zum Inhalt

Julia-Programmier-Tutorial für Einsteiger

Ein umfassendes Einsteiger-Tutorial, mit dem du die Grundlagen von Julia meisterst. Lerne Operatoren, Bedingungen, die Arbeit mit DataFrames und mehr kennen.
Aktualisiert 18. Sept. 2026  · 13 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Die Programmiersprache Julia ist eine Sprache für wissenschaftliches Rechnen, die 2012 erstmals vorgestellt wurde. Seitdem hat sich Julia zu einem ernstzunehmenden Kandidaten in der Welt der Datenprogrammiersprachen entwickelt. Dank einfacher Handhabung, hoher Geschwindigkeit und starker Eignung für wissenschaftliche Anwendungsfälle ist Julia für viele Data Scientists heute eine lohnende Wahl.

Dieser Artikel bietet ein ausführliches Tutorial für Einsteiger in Julia und deckt grundlegende Syntax, den Umgang mit verschiedenen Datentypen, Vektoren und Strings, DataFrames und vieles mehr ab.

Warum Julia lernen?

Für Julias Popularität gibt es viele Gründe. Auch wenn Python und R in der Data-Science-Welt weiterhin dominieren, wurde Julia bereits über 35 Millionen Mal heruntergeladen. Die Gründe für dieses Wachstum werden in diesem Artikel ausführlich erläutert. Hier ist eine Kurzfassung der wichtigsten Merkmale und Vorteile:

  • Geschwindigkeit: Einer der Grundsätze bei der Entwicklung von Julia war: so allgemein wie Python, so statistikfreundlich wie R, aber so schnell wie C. Das ermöglicht schnellere Datenworkflows, gerade im wissenschaftlichen Rechnen.
  • Syntax: Auch die Syntax ist ein Pluspunkt. Trotz der hohen Performance ist Julia dynamisch typisiert und damit näher an R und Python als an komplexeren Sprachen. Dadurch ist Julia deutlich zugänglicher und leichter zu lernen als viele High-Performance-Sprachen.
  • Multiple Dispatch: Ohne zu sehr ins Technische zu gehen: Ein weiterer Vorteil ist Multiple Dispatch, also die Fähigkeit von Julia-Funktionen, je nach Typ der übergebenen Argumente unterschiedlich zu reagieren. Das macht die Arbeit sehr flexibel.

Dank dieser Eigenschaften gehörte Julia in der StackOverflow Developer Survey 2022 zu den fünf beliebtesten Sprachen. Das gilt besonders für die wissenschaftliche Community, die von Tools wie Matlab umsteigen möchte.

stackoverflow 2022 developer survey

Screenshot aus der StackOverflow Developer Survey 2022

Dann lass uns jetzt Schritt für Schritt einsteigen und sehen, wie du mit Julia loslegst.

Leg los mit Julia

Beherrsche die Basics von Julia mit unserem interaktiven, praxisnahen Introduction to Julia-Kurs.

Jetzt Starten

Wie installiere und starte ich Julia?

Die Installation von Julia ist unkompliziert. Lade den Installer für dein Betriebssystem auf dieser Seite der Julia-Website herunter und setze das Häkchen, um Julia zum System-PATH hinzuzufügen. Wenn du julia in die Kommandozeile eingibst und folgende Ausgabe erhältst, läuft alles korrekt.

how to install julia.gif

Installation und Start der Programmiersprache Julia

Sowohl PyCharm als auch VSCode bieten Julia-Plugins mit Syntax-Highlighting und Debugging. Da Data Scientists jedoch häufig in JupyterLab arbeiten, lässt sich dort auch leicht ein Julia-Kernel hinzufügen. Öffne im Terminal die julia-Eingabeaufforderung und gib diese zwei Zeilen ein:

using Pkg
add("IJulia")

Der Code installiert das Paket IJulia in deiner Julia-Umgebung. Starte laufende JupyterLab-Sitzungen neu, dann solltest du Julia im Launcher sehen.

Julia in jupyterlab

Julia in JupyterLab

Grundlegende Julia-Syntax

In diesem Abschnitt behandeln wir die Grundlagen der Julia-Syntax, darunter Variablen, Datentypen, Operatoren, Vektoren und mehr.

Operatoren

In Programmiersprachen stehen spezielle Zeichen, sogenannte Operatoren, für bestimmte mathematische oder logische Operationen. Unten siehst du die gebräuchlichsten Operatoren, etwa für Addition, Subtraktion, Multiplikation, Division und mehr.

Hinweis: In Julia werden Kommentare mit einem einzelnen # geschrieben. Alles, was nach dem # steht, wird vom Programm ignoriert (bis zum Zeilenende).

# Addition in Julia
37 + 73
110
# Subtraktion in Julia
17 - 19
-2
# Multiplikation in Julia
29 * 33
957
# Division in Julia
22 / 7
3.142857142857143
# Rückwärtsdivision in Julia, das Obige entspricht 0 / 5.
5 \ 0
0
# Der Restoperator in Julia 
98456 % 23
16
# Potenzieren mit Exponent 2 (Quadrieren)
(22 / 7) ^ 2
9.877551020408163
# Potenzieren mit Exponent 3 (Kubieren)
-7 ^ 3
-343
# Potenzieren mit Exponent 0.5 (Quadratwurzel)
(355 / 133) ^ 0.5
1.633760365638372

Variablen

Wir verwenden Variablen, um Informationen zu speichern. Damit kannst du über einen Namen bequem auf einen Wert verweisen. Im Beispiel speichern wir die Zahl 73 in der Variablen a und den String "Hello world!" in der Variablen word (auf die verschiedenen Datentypen in Julia gehen wir gleich ein). Wenn du den Variablennamen in die Konsole eingibst, wird ihr Wert ausgegeben.

# Die Zahl 73 in der Variablen a speichern
a = 73
a
73
# "Hello world!" in word speichern
word = "Hello world!"
word
Hello world!

Alle Julia-Operatoren und -Funktionen funktionieren genauso mit Variablen.

# Zwei numerische Variablen multiplizieren
a = 73
b = 37
a * b
2701

In Variablennamen kannst du alphanumerische Zeichen inklusive Unterstrichen verwenden. Es gibt jedoch gängige Konventionen. Variablennamen:

  • verwenden lower_snake_case (klein geschrieben, Wörter durch Unterstrich getrennt)
  • dürfen nicht mit einer Zahl beginnen.

Einführung in Datentypen in Julia

Datentypen geben an, welche Werte eine Variable annehmen kann und welche Operationen darauf zulässig sind. Julia kennt viele Datentypen, hier sind die wichtigsten Grundlagen.

Datentyp

Bezeichnung

Beispiele

Beschreibung

Integer

Int64

1, -99

Ganze Zahlen

Floats

Float64

1.23, 4.0

Zahlen mit Dezimalpunkt

Booleans

Bool

true, false

Logische Werte

Strings

String

"Hello", "A", ""

Textdaten mit beliebiger Zeichenlänge

Characters

Char

'A', '$', '\u20AC'

Textdaten mit genau einem Zeichen

Den Datentyp einer Variable ermittelst du mit der Funktion typeof():

# Den Typ von 3.14 abfragen
typeof(3.14)
Float64

Bei Operationen in Julia solltest du die Auswirkungen unterschiedlicher Datentypen im Blick behalten. Zum Beispiel ergibt die Multiplikation eines Floats mit einem Integer wieder einen Float.

# Kontostand als Integer
balance = 100

# Zinssatz als Float
interest_rate = 1.05

# Neuer Kontostand
new_balance = balance * interest_rate

typeof(new_balance)
Float64

Hingegen führen Operationen zwischen Strings und numerischen Datentypen oft zu einem Fehler, wie hier:

# Kontostand als Integer
balance = 100

# Zinssatz als String
interest_rate = “5%”

# Neuer Kontostand
new_balance = balance * interest_rate
ERROR: MethodError:
no method matching *(::Int64, ::String)

Datentypen in Julia konvertieren

In Julia kannst du Datentypen mit eingebauten Funktionen umwandeln. Die folgende Tabelle zeigt gängige Konvertierungen.

Von

Nach

Funktion

Integer

Float

Float64(x)

Float

Integer

Int64(x)

Integer oder Float

String

string(x)

String

Float

parse(Float64, string)

String

Integer

parse(Int64, string)

Mit Zeichen und Strings in Julia arbeiten

Wir haben die Datentypen Char und String schon gesehen. Jetzt schauen wir uns typische Operationen darauf an. Zur Erinnerung: Ein String ist eine geordnete Folge von Zeichen in Anführungszeichen.

# Ein String ist eine Folge von Zeichen
word = "Hello world!"
word
"Hello world!"

Mehrzeilige Strings schreibst du mit dreifachen Anführungszeichen:

multi_line = """
   This is a
   multi-line string.
"""
print(multi_line)
This is a
multi-line string.

Aus Strings kannst du Informationen und Eigenschaften auf verschiedene Arten extrahieren. Klammerindizes greifen einzelne Zeichen oder Bereiche basierend auf ihrer Position ab. Im Beispiel steht 1:3 für die Zahlenfolge von 1 bis 3, inklusive.

text = "Julia is a high-level, dynamic programming language"
# Das erste Zeichen in text per Index auslesen
text[1]
'J': ASCII/Unicode U+004A (category Lu: Letter, uppercase)
# Die ersten drei Zeichen per Index auslesen
text[1:3]
"Jul"

Oben haben wir 1 in die Klammern gesetzt und das erste Zeichen erhalten. Alternativ kannst du auch den speziellen Operator begin verwenden:

# Erstes Zeichen mit dem begin-Operator auslesen
text[begin]
'J': ASCII/Unicode U+004A (category Lu: Letter, uppercase)

Ein einzelnes extrahiertes Zeichen aus einem String hat den Datentyp Char.

# Den Typ des vierten Zeichens ermitteln
typeof(text[4])
Char
# Den Typ des vierten Zeichens ermitteln
typeof(text[4])

Schneidest du mehrere Zeichen aus, ist das Ergebnis wieder ein String.

# Den Typ der ersten 5 Zeichen ermitteln
typeof(text[begin:5])
String

Hier schneiden wir die ersten fünf Zeichen von text aus. Beide Indizes links und rechts vom Doppelpunkt sind inklusive. Anders als in Python werden negative Indizes nicht unterstützt. Stattdessen nutzt du den end-Operator mit einer negativen Zahl. Um z. B. das drittletzte Zeichen zu holen, schreibst du:

# Drittletztes Zeichen im String
text[end-2]
'a': ASCII/Unicode U+0067 (category Ll: Letter, lowercase)

Häufige String-Operationen in Julia

Mit length() zählst du die Anzahl der Zeichen in einem String.

# Anzahl der Zeichen in einem String
length(text)
51

Häufig willst du Strings zusammenfügen. Das geht mit der Funktion string(), der du mehrere Strings durch Kommata getrennt übergibst.

# Einen String aus "Julia", "is", "awesome" zusammensetzen
string("Julia ", "is ", "awesome!")
"Julia is awesome!"

Du kannst Strings auch mit dem *-Operator verketten.

# Einen String durch Multiplikation verketten
"73 " * "is " * "the " * "best " * "prime."
"73 is the best prime."

In beiden Fällen gilt: Leerräume zwischen Wörtern nicht vergessen. Eine weitere Möglichkeit ist, einen String mehrfach zu wiederholen. Das geht mit dem Operator ^ (Potenzieren):

# Einen String mit dem Potenzoperator wiederholen
"Three times the fun!" ^ 3
"Three times the fun! Three times the fun! Three times the fun!"

Arrays in Julia

Ein weiterer zentraler Datentyp in Julia sind Arrays. Sie sind Listen von Werten in eckigen Klammern []. Je nach Dimension heißen sie unterschiedlich:

  • Eindimensionale Arrays heißen Vektoren.
  • Zweidimensionale Arrays heißen Matrizen.
  • Dreidimensionale und höhere heißen einfach Arrays.

In diesem Tutorial konzentrieren wir uns auf Vektoren. Du erstellst sie, indem du Elemente in Klammern setzt:

# Einen Vektor mit drei Integern definieren
x = [1, 2, 3]
3-element Vector{Int64}:
1
2
3
# Den Typ von x abfragen
typeof(x)
Vector{Int64} (alias for Array{Int64, 1})

Der Vektor x hat den Typ Vector, also ein Alias für ein eindimensionales Array (alias for Array{Int64, 1}). Alle Elemente sind vom Typ Int64. Das muss aber nicht immer so sein. Hier ein Vektor mit gemischten Typen:

# Einen Vektor mit verschiedenen Datentypen definieren
array = [1, "Hello", 22/7]
3-element Vector{Any}:
1
"Hello"
3.142857142857143

Wie du siehst, steht im Typparameter Any, was für gemischte Datentypen steht. Du kannst sogar Vektoren in Vektoren schachteln.

# Einen Vektor mit verschiedenen Datentypen, inkl. eines Vektors, definieren
array = [1, 2, 3, ["Hello", 73]]
4-element Array{Any,1}:
1
2
3
Any["Hello", 73]

length() funktioniert bei Vektoren wie bei Strings und zählt die Elemente im Array.

# Die Länge eines Vektors ermitteln
length(array)
3

Auch das Indexieren funktioniert ähnlich — hier greifen wir auf das erste und zweite Element zu.

# Erstes Element eines Vektors holen
array = [1, "Hello", 22/7]
array[begin]
1
# Letztes Element eines Vektors holen
array[end-1]
"Hello"

Boolesche Operatoren und numerische Vergleiche

Programmiersprachen nutzen Boolesche Werte zur Logik. Ein Boolean kann nur true oder false sein. Sie sind besonders nützlich bei numerischen Vergleichen und booleschen Operatoren. Schauen wir uns zuerst numerische Vergleiche an.

Operatoren für numerische Vergleiche in Julia

In der folgenden Tabelle findest du die gebräuchlichsten Vergleichsoperatoren in Julia. Wie die Beispiele zeigen, kannst du damit Booleans, Zahlenobjekte und mehr vergleichen. Beachte: Du kannst kleiner/gleich bzw. größer/gleich mit einem oder zwei Symbolen schreiben. Für die Ein-Symbol-Variante tippe \le und dann TAB bzw. \ge und dann TAB.

Operator

Name

Beispiel

==

Gleichheit

1 == 3 # Ergibt false

!=

Ungleichheit

1 != 3 # Ergibt true

<

kleiner als

1 < 3 # Ergibt true

<=, ≤

kleiner/gleich

length("Hello") <= 5 # Ergibt true

>

größer als

1 > 1 # Ergibt false

>=, ≥

größer/gleich

true >= true # Ergibt true

Boolesche Operatoren in Julia

Neben Vergleichsoperatoren gibt es boolesche Operatoren wie and und or. Damit kombinierst du mehrere Ausdrücke zu einem. Hier sind die wichtigsten Operatoren und ihre Verwendung.

Operator

Name

Beispiele

&&

and-Operator

true && true # Ergibt true


5 > 4 && 3^3 == 27 # Ergibt true

||

or-Operator

73 > 45 || 73 % 2 == 0 # Ergibt true

Fortgeschrittene Julia-Syntax

Bedingungen in Julia

Mit Booleschen Werten und Operatoren schreibst du Bedingungen: Wenn etwas true ist, führe eine Aktion aus, sonst eine andere. Solche Konstrukte heißen if/else-Anweisungen. So schreibst du sie:

if true
   print("Do something")
else
   print("Do something else")
end

Wenn die Bedingung nach dem Schlüsselwort if zu true ausgewertet wird, läuft der if-Block, andernfalls der else-Block. Dieses Beispiel prüft, ob eine Zahl gerade oder ungerade ist.

number = 5

if number % 2 == 0
   print("The number is even")
else
   print("The number is odd")
end
The number is odd

Wir nutzen den Modulo-Operator %, um zu prüfen, ob bei Division durch 2 der Rest 0 ist. Bei 5 ist der Rest 1, daher wird der else-Zweig ausgeführt. Jetzt kombinieren wir boolesche Operatoren und Bedingungen, um zu prüfen, ob eine Zahl positiv, negativ oder null ist.

number = 0

if number > 0
   print("The number is positive.")
elseif number == 0
   print("The number is equal to zero.")
else
   print("The number is negative.")

end
The number is equal to zero.

Die zusätzliche Bedingung fügen wir mit elseif ein. elseif nutzt du, wenn du zwei oder mehr Bedingungen in einer festen Reihenfolge prüfen willst.

For-Schleifen

For-Schleifen iterieren über Sequenzen (String, Vektor, Tupel, Set usw.) und führen pro Element Operationen aus. Die Syntax in Julia ist sehr direkt. Beispiel: Wir geben jedes Element eines Vektors aus.

languages = ["Julia", "Python", "R"]

for lang = languages
   println(lang)

end
Julia
Python
R

Die Schleife beginnt mit for. Dann wählen wir einen temporären Variablennamen, hier lang, dessen Wert sich beim Durchlaufen des Vektors languages ändert. Mit dem Zuweisungsoperator = geben wir an, über welche Sequenz iteriert wird.

Im Schleifenrumpf nutzen wir println(), um jedes Element von languages auszugeben. lang ist temporär und nach der Schleife nicht mehr verfügbar.

Hinweis: Der Unterschied zwischen print() und println() ist, dass println() jeweils in einer neuen Zeile ausgibt.

Alles, was du bisher gelernt hast, kannst du in For-Schleifen einsetzen. Erstellen wir z. B. ein Array mit 10 Integern und geben nur die ungeraden Zahlen aus:

integers_vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for i = integers_vector
   # Nur ungerade Zahlen ausgeben
   if i % 2 == 1
       println(i)
   end
end
1
3
5
7
9

Vergiss nicht, sowohl die for-Schleife als auch die if-Anweisung mit end zu schließen.

Du kannst auch über Strings iterieren, da sie ebenfalls Sequenzen sind. Hier geben wir jedes Zeichen in "Julia" aus.

for letter = "Julia"
   println(letter)

end
J
u
l
i
a

Pakete in Julia installieren

Alle bisher genutzten Operatoren (+, -, *, ^), Funktionen (print(), println(), typeof()) und Schlüsselwörter (for, if, else) sind Teil der Julia-Standardinstallation. Für viele Aufgaben brauchst du jedoch zusätzliche Pakete. Pakete sind Bibliotheken mit vorbereitetem Code, den wir zu unserer Julia-Installation hinzufügen, um spezifische Probleme zu lösen.

Wir installieren zum Beispiel die Pakete DataFrames und CSV, mit denen wir CSV-Dateien einlesen und bearbeiten können. So geht’s:

using Pkg
Pkg.add("DataFrames")
Pkg.add("CSV")

Pkg ist der Paketmanager von Julia. Mit add() fügst du neue Pakete hinzu. Um alle Funktionen aus den Bibliotheken zu importieren, schreiben wir am Anfang des Skripts das Schlüsselwort using.

using DataFrames
using CSV

Im nächsten Abschnitt nutzen wir ihre Funktionen.

Erste Schritte mit DataFrames

Ein DataFrame ist ein spezieller Datentyp in Sprachen wie Julia, Python oder R, um mit tabellarischen Daten zu arbeiten. Das gängigste Dateiformat dafür ist CSV (Comma-Separated Values). Mit der DataFrame-Bibliothek können wir solche Dateien laden und die enthaltenen Daten verarbeiten.

CSV-Dateien importieren

Für dieses Tutorial importieren wir den Diamonds-Datensatz. Die Datei diamonds.csv sieht so aus:

diamonds dataset.png

Hier findest du den Diamonds-Datensatz

Die erste Zeile ist der Header mit den Spaltennamen. Laden wir die Datei mit den Paketen CSV und DataFrames:

# Den Diamonds-DataFrame laden
diamonds = DataFrame(CSV.File("data/diamonds.csv"))
typeof(diamonds)
DataFrame

Wir übergeben den Pfad an CSV.File() und das Ergebnis an DataFrame(). Die Ausgabe von typeof() bestätigt den erfolgreichen Import.

Einfache Datenmanipulation

Der erste Schritt bei einem neuen DataFrame ist, sich ein paar Zeilen ausgeben zu lassen. Das machst du mit first().

# Die ersten 7 Zeilen von diamonds ausgeben
first(diamonds, 7)
7 × 10 DataFrame

first 7 rows.png

Die ersten 7 Zeilen des Diamonds-Datensatzes

first() gibt die ersten n Zeilen eines DataFrames zurück. Hier sehen wir 6 numerische und 3 kategoriale (Text-)Spalten. In Julia-DataFrames wird auch der Index als Spalte gezählt.

Analog dazu gibt es last() für die letzten n Zeilen.

Nützlich ist auch size(). Diese Funktion gibt die Anzahl der Zeilen und Spalten aus.

# Die Dimensionen von diamonds ausgeben
size(diamonds)
(10000, 10)

Unser DataFrame hat also 10.000 Zeilen und 10 Spalten (inklusive Index). 10k Zeilen kann man nicht mit bloßem Auge überblicken. Deshalb nutzen wir Zusammenfassungsstatistiken, um ein Gefühl für die Verteilungen zu bekommen. Dafür verwenden wir describe().

# Zusammenfassende Statistiken für diamonds
describe(diamonds)
10 × 7 DataFrame

describe output.png

Ausgabe der Funktion describe()

Die Ausgabe ist eine Übersichtstabelle mit 7 Spalten. Min, Max, Mittelwert und Median gelten nur für numerische Spalten. In eltype siehst du die Datentypen der Spalten. Die Zahlen hinter String geben die Länge des längsten Strings der Spalte an.

Mit folgender Syntax wählst du einzelne Spalten aus dem DataFrame aus.

# Die ersten 10 Zeilen der Spalte cut extrahieren
diamonds[:, :cut][begin:10]
10-element PooledArrays.PooledArray{String15,UInt32,1,Array{UInt32,1}}:

"Ideal"
"Ideal"
"Ideal"
"Premium"
"Fair"
"Premium"
"Very Good"
"Ideal"
"Ideal"
"Premium"

Der erste Doppelpunkt wählt alle Zeilen, danach folgt nach dem Komma der Spaltenname (ohne Anführungszeichen). Anschließend nutzen wir Indexierung, um die ersten zehn Zeilen zu nehmen. Noch kürzer geht es so, indem wir die ersten zehn Zeilen direkt im ersten Klammerpaar auswählen:

# Die ersten 10 Zeilen der Spalte carat extrahieren
diamonds[1:10, :carat]
10-element PooledArrays.PooledArray{String15,UInt32,1,Array{UInt32,1}}:

"Ideal"
"Ideal"
"Ideal"
"Premium"
"Fair"
"Premium"
"Very Good"
"Ideal"
"Ideal"
"Premium"

Um mehrere Spalten auszuwählen, stellst du die Spaltennamen (mit vorangestelltem Doppelpunkt) in eckige Klammern.

# Die ersten 5 Zeilen der Spalten cut, carat, price extrahieren
diamonds[1:5, [:carat, :cut, :price]]
5 × 3 DataFrame

image2.png

Die ersten 5 Zeilen und 3 Spalten des Diamonds-Datensatzes

Lassen wir describe() nur auf den numerischen Spalten laufen:

# describe() nur auf numerischen Spalten ausführen
describe(diamonds[:, [:carat, :depth, :table, :price, :x, :y]])

describe_numeric.png

describe() nur für numerische Spalten

Um den DataFrame aufsteigend nach einer Spalte zu sortieren, nutzt du sort():

# diamonds sortieren und die ersten 5 Zeilen ansehen
sorted_diamonds = sort(diamonds, :price)
first(sorted_diamonds, 5)

sorted.png

Die sortierte Übersichtstabelle

Für absteigende Sortierung umschließt du den Spaltennamen mit order() und setzt rev=true.

# diamonds absteigend sortieren und die ersten 5 Zeilen ansehen
sorted_diamonds = sort(diamonds, order(:price, rev=true))
first(sorted_diamonds, 5)

sorted descending.png

Die sortierte Übersichtstabelle, absteigend

Stark! Jetzt kannst du DataFrames laden und eine erste Exploration durchführen.

Mehr über Julia lernen

Obwohl Julia noch eine junge Sprache ist, gibt es bereits viele Ressourcen, um sie zu meistern. Hier sind einige davon, um deine Kompetenzen auszubauen:

Leg los mit Julia

Beherrsche die Basics von Julia mit unserem interaktiven, praxisnahen Introduction to Julia-Kurs.

Themen
Julia
Datenwissenschaft