Zurück

Online Magazine

Die Macht von Modulo in Data Analysis

Der sogenannte Modulo-Operator existiert in verschiedenen Programmiersprachen. Aber wie kann man diesen Operator verwenden, und wozu? In diesem Artikel zeige ich drei praktische Anwendungsfälle.

 

von Salvatore Cagliari

Was ist Modulo?

Kurz gesagt: der Modulo-Operator gibt den Rest einer Division zurück. Die Modulo-Operation wird als "A modulo B", "A mod B" oder "A % B" geschrieben (wobei A der Dividend und B der Divisor ist). Zum Beispiel wäre das Ergebnis von "5 mod 2" 1, weil 5 geteilt durch 2 einen Quotienten von 2 und einen Rest von 1 hat. "9 mod 3" würde 0 ergeben, weil die Division von 9 durch 3 einen Quotienten von 3 und einen Rest von 0 hat.

Viele Programmiersprachen haben einen Operator oder eine Funktion zur Berechnung von Modulo. T-SQL hat zum Beispiel den %-Operator, und DAX hat die Funktion MOD().

Falls du keine Möglichkeit hast, Modulo direkt zu berechnen, kannst du die folgende Formel verwenden, um den Modulo B aus A zu berechnen:

A — A / B * B à A ( ( A / B) * B)

In T-SQL liefert der folgende Ausdruck das gleiche Ergebnis: 11

263%14
SELECT 263-((263/14)*14)

Aber was ist so interessant an Modulo? Wenn du eine Reihe von Zahlen hast und für jede Zahl Modulo 4 berechnest, beginnt das Ergebnis bei 0, geht bis 3 und fängt wieder von vorne an:

 

Dieser Effekt eröffnet eine Vielzahl von Möglichkeiten. Schauen wir uns drei Beispiele aus meiner Arbeit mit meinen Kunden an, bei denen Modulo eine einfache Lösung für ein Problem bot, das normalerweise viel komplexer gelöst werden müsste.

Noob Hacks

Einer meiner Kunden stellte mir die folgende Frage: "Wie kann ich meine Kunden willkürlich segmentieren?"

Mit Modulo war die Lösung leicht: Jeder Kunde hatte eine numerische Kunden-ID. Durch die Berechnung von Modulo für jeden Kunden konnte ich jeden einzelnen problemlos einem beliebigen Segment zuordnen. Falls du keine numerische ID hast, kannst du auch einfach eine Indexspalte hinzufügen, die nach einer oder mehreren beliebigen Spalten geordnet ist. Modulo kann auch auf dieser Grundlage die Segmentierung berechnen:

 

Ein anderer Kunde fragte mich: "Wie kann ich Daten auf der Grundlage der Zeit zu vier Segmenten pro Stunde aggregieren?"

Minute 01–14 → 00

Minute 15–29 → 15

Minute 30–44 → 30

Minute 45–60 → 45

 

Nachdem ich sie auf diese Weise sortiert hatte, konnte ich die in Echtzeit gelieferten Daten mit Hilfe der Spalte 15min_Slice auf 15 Minuten aggregieren.

Durch die Gruppierung seiner Daten konnte mein Kunde die zu speichernde Datenmenge auf die maximal benötigte 15-Minuten-Ebene reduzieren.

Pro Hack

Wenn du mit Power BI arbeitest, kann es hilfreich sein, die geringste Anzahl von unterschiedlichen Werten in deiner Tabelle zu speichern.

Nehmen wir eine Liste von Ereignissen mit einer Spalte für die Werte.

Bei einer sehr grossen Anzahl von Ereignissen hast du möglicherweise Milliarden oder Billionen verschiedener Werte.

Nun kannst du die Anzahl der unterschiedlichen Werte mit Hilfe von Modulo reduzieren:

 

1. Definiere die maximale Anzahl der unterschiedlichen Werte (zum Beispiel 10'000).
2. Teile den Verkaufsbetrag durch 10'000 und speichere das Ergebnis als ganze Zahl.
3. Berechne Modulo durch 10'000 und speichere das Ergebnis als Dezimalzahl.

 

Das Ergebnis ist eine Liste von Werten mit einer geringeren Anzahl unterschiedlicher Werte, die viel effizienter komprimiert werden kann als die ursprüngliche Liste mit Milliarden unterschiedlicher Werte.

Um das Ergebnis abzurufen, musst du das Ergebnis der Division mit 10'000 multiplizieren und das Ergebnis von Modulo addieren.

Da ich nicht über einen solchen Datensatz verfüge, habe ich meinen Beispieldatensatz verwendet, um die Anzahl der unterschiedlichen Werte von fast 3'000 auf 412 Werte und 693 Werte von Modulo zu reduzieren. Da Power BI seine Daten pro Spalte speichert und komprimiert, ist dies ein gutes Ergebnis.

Hier der SQL-Code zur Berechnung der zu speichernden Werte:

SELECT CAST([SalesAmount] / 3.0 AS int) AS [Division]
 ,[SalesAmount] % 3 AS [Modulo]
 FROM [dbo].[V_FactOnlineSales];

Das Ergebnis sieht wie folgt aus:


Um den Originalwert abzurufen, kannst du diesen SQL-Code verwenden:

SELECT CAST(([Division] * 3.0) + [Modulo] AS decimal(10, 4)) AS [Result]
 FROM [Store];

Diese Abfrage liefert folgendes Ergebnis, wobei es sich um genau dieselben Zahlen handelt wie bei den ursprünglichen Daten:

Um diesen Ansatz zu verwenden, musst du ihn sorgfältig mit deinen Daten testen, da eine falsche Konvertierung zu falschen Ergebnissen beim Abrufen der ursprünglichen Werte führen wird.

 

Fazit

Modulo liefert hervorragende Lösungen für bestimmte Probleme. Jedoch müssen die Ergebnisse in jedem Fall anhand der Erwartungen getestet und validiert werden. Insbesondere das dritte Beispiel kann zwar zu grossen Leistungssteigerungen aber auch zu falschen Ergebnissen führen, wenn man es nicht richtig macht.

Abgesehen davon bedingt der Einsatz von Modulo auch eine gewisse Offenheit, Probleme auf eine andere Art zu lösen und sich mit seinen Möglichkeiten auseinanderzusetzen.

In allen drei Fällen, die ich hier beschrieben habe, hat mir Modulo auf jeden Fall geholfen, einfache und effektive Lösungen für Herausforderungen zu finden, die normalerweise viel komplexere Berechnungen erfordern würden.


Du willst dich vertiefter mit dem Thema Business Analytics auseinandersetzen? Dann informiere dich hier!

Deine Ansprechperson

HIER FINDEST DU WEITERE ARTIKEL UNSERER DATA & AI EXPERT*INNEN:

TechTalk
KI-Ethik KI im Business

Tech Talk Audio: Responsible AI Governance
TechTalk
KI-Ethik KI im Business

Tech Talk Audio: Responsible AI einfach erklärt
TechTalk
Digitale Transformation KI im Business

TechTalk Audio: Business Analyst
Gelesen