 Guten Tag zusammen und herzlich willkommen zu unserem zweiten Coding Video zum Themenkomplex Fraktale. Ich habe es ja am letzten Video schon angekündigt, dass wir uns nun mit den fraktalen Kurven beschäftigen werden, die wir im Unterricht, ich nenne es jetzt mal Unterricht, in meinem Vortrag kennengelernt haben und wir bedienen uns hier den sogenannten Turtle Package. Das Turtle Package, und da werden einige von Ihnen jetzt vielleicht schmunzeln, ist ursprünglich mal angedacht gewesen, um Kindern das Programmieren beizubringen, um eben die Dinge, die ein Computer tut, bildhaft und nachvollziehbar darzustellen. Es ist aber Roundabout, sage ich mal, ein sehr schönes Grafikpaket, in dem man auch Dinge zeichnen kann. Deswegen verwenden wir das hier auch. Wir beginnen unseren Code natürlich wie immer, indem wir eben dieses Package importieren und dem noch einen kürzeren Namen geben. Ich würde Sie bitten, wenn Sie den Code ausführen, müssen Sie natürlich Turtle noch über die PIP-Applikation installieren. Das habe ich in einem der ersten Coding Videos ja gezeigt, wie das geht. Wir beginnen oder wir fahren fort, indem wir hier erst einmal einige Farben festlegen, also in rot, blau und grün Notation. Die können Sie hier natürlich frei verändern, so wie Sie möchten. Also das steht Ihnen frei, so viele andere Farben hier einzufügen, wie es Ihnen eben beliebt. Was wichtiger ist, ist hier, dass wir hier die Seiten unseres Terragons bestimmen. Also haben wir einfach nur eine Linie, die wir ersetzen wollen, um die klassische Kochkurve zum Beispiel zu erzeugen. Oder wollen wir hier ein Dreieck haben, und der Code ist, das kann ich von vornherein so schon mal sagen, so aufgebaut, dass er immer eine gleichwinkelige Figur erzeugt. Das heißt, wenn ich ein Fünfeck haben will, schreibe ich hier fünf Seiten rein und so weiter. Wenn Sie natürlich den Code mal ins Extrem treiben wollen, und das habe ich natürlich auch schon getan, dann bekommen Sie halt einen Kreis. Das nächste, was Sie einstellen können, ist, wie viele Iterationsschritte denn durchgeführt werden sollen, wenn Sie sich ein Gefühl dafür bekommen möchten, wie denn nun diese Kochterragone zusammengesetzt sind, dann können Sie hier schrittweise mal eine Iteration durchlaufen lassen, zwei und dann mehr Iterationen. Ich kann Ihnen allerdings nicht empfehlen, hier mehr wie vier oder fünf Iterationsschritte durchlaufen zu lassen, weil das wie gesagt ein Demonstrationscode ist, der Ihnen hier noch ein Fenster öffnet und Ihnen zeigt, wie diese Linie gezeichnet wird und wie hier nicht automatisiert Bilder rendern mit Multithreading. Das heißt, wenn Sie hier mehr wie vier oder fünf Iterationsstufen einfügen, dann können Sie sich nebenbei mal ein Kaffee, ein Heißgetränk Ihrer Wahl, oder eben sich anderen Dingen zu widmen, bis das mal fertig gezeichnet hat. Was machen wir? Wir nutzen wie gesagt dieses Turtle Package, indem wir hier uns erstmal ein Screen eröffnen. Das heißt, wir machen hier ein neues Fenster auf, setzen hier den Color Mode. Das bedeutet, dass wir eben diese rot-grün-blauen Notationen, wie wir das eben hier oben schon vordefiniert haben, verwenden möchten. Wir setzen hier unseren Hintergrund, den habe ich hier mal auf Grau gesetzt. Wenn Sie natürlich jetzt ein Quid-Spinken-Hintergrund haben wollen und in knallgelb-Fraktale gemalt haben wollen, müssen Sie sich halt hier die Farben entsprechend aussuchen. Ich habe hier das Fenster mal auf 800 x 800 Pixel festgesetzt. Beim Ankenkurven ist es nötig, dass Sie das Fenster auf Vollbild hochziehen, weil es hier keine Begrenzung gibt. Das heißt, wenn der Graf aus dem Fenster wandert, dann ist er nicht weg, aber dann müssen Sie einfach das Fenster größer machen. Der Code ist nicht sufficient genug, hier eine Grenze eingezogen zu haben. Und was wir hier noch machen, wir sagen, okay, liebes Fenster, du bekommst von uns noch ein Titel. Was wir jetzt hier machen, ich scroll hier mal runter, dass Sie das besser sehen können. Wir definieren hier erstmal wieder eine Funktion. Das heißt, wir machen aus dieser Kochkurvenerzeugung eine Funktion, die wir hier unten quasi dann ausführen werden. Und was machen wir jetzt hier? Ich habe es ja im Video schon gesagt, die Kochkurve hat eine Länge und eine Setzung quasi des mittleren Drittels durch, eben das selbe Drittel in einem anderen Winkel. Und das Einzige, was Sie hier noch machen müssen, ist quasi, dass Sie hier in diesen Feldern den Winkel eingeben, der Ihnen eben beliebt. Ich habe Ihnen hier oben noch mal dazu geschrieben, wie Sie eine Pianokurve bekommen, eine schöne. Da müssen Sie hier das auf 80, 160, 80 ändern. Das machen wir in diesem Video auch noch. Sie können hier auch rumspielen. Sie werden feststellen, wenn Sie die Winkel derart misstalten, dass das nichts mehr mit einer Kochkurve zu tun hat, dann kann es auch durchaus sein, dass Sie nur gekritzelt bekommen oder sich die Kurve im Kreis dreht oder es Ihnen irgendeine Strichmännchen malt. Also hier sind ganz wilde Formen möglich. Das obliegt dann natürlich Ihnen hier entsprechend beliebige Werte einzufügen und ein bisschen rumzuspielen. Ich kann Ihnen empfehlen, hier mal eine Null reinzuschreiben oder mal zu schauen, was passiert denn, wenn hier unterschiedliche Werte drin sind und quasi einfach mal das Verhalten einer fragtalen Kurve für sich selbst zu entdecken. Ich denke, das ist nicht nur kindgerecht wie dem Paket eben entsprechend, sondern das ist auch für Sie selbst sicher nicht gerade verkehrt, dass Sie ein Gefühl dafür bekommen, wie denn die Generation einer fragtalen Kurve denn funktioniert. Und das ist besonders wichtig dahingehend, dass wir auch im Kapitel über stochastische Prozesse mit ähnlichen Konstrukten auch Simulationen machen werden können. Deswegen ist ein Grundverständnis, wie funktioniert dann so eine Iteration gar nicht ganz verkehrt. Wir haben ja noch eine zweite Funktion definiert hier unten. Das bedeutet, wenn wir hier oben mehr wie eine Seite haben, dass wir eben das Gleiche machen können und dass eben wir auch ein hübsches Dreieck bekommen, was über diese Kochkurve etariiert werden kann. Ich habe Ihnen hier schon mal die schnellste Zeichengeschwindigkeit eingestellt. Sie können das natürlich ändern, indem Sie hier drüber hauen, dann sehen Sie, welche Option Sie hier denn haben. Und ich habe Ihnen hier nochmal die Linienlänge mit eingetragen. Das ist so erstmal das Grundsetting, um eben auf spielerische Art und Weise eine Kochkurve zeichnen zu können. Ich hätte gesagt, wir fangen mal ganz harmlos an mit einer Seite und einer Iteration. Beziehungsweise, wir machen es jetzt mal ganz gemein. Ich gebe hier erstmal gar keine Iteration ein und klick mal auf Start. Und dann sehen wir, ja, wir haben eine Linie. Herzlichen Glückwunsch. Das war jetzt nicht unbedingt sehr lehrreich, wenn Sie mich fragen. Also machen wir erstmal eine Iteration hier daraus, dass Sie sehen können, wir ersetzen tatsächlich die Mitte. Und Sie sehen, ja, wir haben hier das mittlere Drittel durch unser Dreieck hier ersetzt. Das ist schon mal ganz gut. Und wir machen jetzt einfach mal die zweite Iteration und sehen, dass wir hier die Kurve gezeichnet bekommen und Sie sehen, was ich in der Vorlesung gemeint habe, damit wir wiederholen diesen Generationsschritt immer und immer und immer wieder. Wir haben jetzt gesehen, wir ersetzen hier das Drittel durch eben diese beiden Seiten und dann machen wir das für das erste Drittel auch. Da wird das Drittel des Drittels ersetzt und so weiter. Und ich gehe jetzt einfach mal auf, machen wir mal vier Iterationen und eine Seiten länger und lasse den Code hier mal laufen und dann sehen Sie hier wirklich schön, wie Ihnen das quasi gezeichnet wird. Das ist eben die Art und Weise, wie das Turtle Package vor Kids quasi funktioniert. Ich finde, es ist aber, um ein Fractal zu lernen, eigentlich ganz interessant, ganz amüsant dazu zu gucken. Es gibt natürlich wesentlich effizientere Wege im Code, diese Kurven zu erzeugen. Macht aber nicht so viel Spaß. Ich hätte gesagt, wir machen uns jetzt mal eine Koch-Schnee-Flocke, damit wir einfach alles, was wir im Kurs gelernt haben, auch tatsächlich mal in grafisch abgebildet bekommen haben. Sie sehen hier, der Zeiger malt und Sie werden jetzt auch feststellen, dafür ist unten diese Schneeflockenfunktionen hier, dass er uns hier tatsächlich ein Dreieck als Ausgangslinie in Anführungszeichen zeichnet und Sie sehen, wir haben hier eine hübsche Schneeflocke gemalt. Mal nach Zahlen in Bund, das ist doch schon mal ein erfolgreiches Erlebnis. Was wir jetzt noch machen können ist, damit ich Ihnen das auch zeigen kann, ich gebe hier einfach mal 10 Seiten ein und schraube die Terration mal auf 2 runter, damit das nicht ganz so lange dauert. Was wir jetzt sehen können ist, der malt uns faktisch einen Kreis. Der ist hier ein bisschen out of bounds, das liegt einfach daran, dass wir das nicht ordentlich spezifiziert haben für so eine große Seitenlänge, aber Sie sehen, dass wir hier eine nette Gugel bekommen haben oder eine nette zackige Kreislinie. Das ist jetzt nicht unbedingt mehr eine Schneeflocke, sondern ein Schneekreis. Suchen Sie sich einen netten Begriff aus. Ich bleibe jetzt hier einfach mal bei meinen 3 Seiten und ich gehe auch mal auf 3 Interaktionen hoch. Ich denke, das sieht man am meisten. Was ich Ihnen hier jetzt gezeigt habe, ist die Kochkurve, also die Schneeflocke, wie wir sie in der Vorlesung auch kennengelernt haben. Ich werde jetzt hier einfach mal die Winkel für die flächendeckende Pianokurve hier reinschreiben und dann führen wir das einfach nochmal aus. Ich mache das mal groß und dann sehen wir hier, das ist zwar ein bisschen kleiner wie das, was Sie im Skript haben, weil wir hier eben, das ist die Variante, in der wir den Kochterragon in die Pianokurve überführen. Sie sehen, dass die Winkel immer, immer schmaler werden und im Grenzwall ist es natürlich so, dass hier diese Dreiecke, die hier nach oben weg zeigen, verschwinden werden und die Kurve tatsächlich die Ebene komplett überdeckt. Wir können das jetzt mal nochmal mitnehmen. Wir haben mal fünf Seiten und mal doch vier Iterationen, kann ich Ihnen das ein bisschen deutlicher zeigen. Klicken wir mal auf Start und Sie sehen hier, dass er natürlich etwas länger braucht, weil er eben vier Iterationsstufen pro Zeitenteil berechnen muss. Aber Sie sehen hier relativ deutlich, dass wir A ein Fünfegg bekommen und dass die Fläche über diesem Fünfeggg schon fast ausgefüllt ist. Also der Begriff flächendeckende Kurve können Sie hier tatsächlich wörtlich nehmen. Ich lasse Sie jetzt einfach mal zuschauen, bis das Ding zu Ende ist. Sehr schön. Sie sehen, wir haben hier ein Fünfegg mit einer Pianokurve, was interessanterweise wieder ein Fünfegg in der Grenze bildet und das war es eigentlich schon für den ersten Teil des Kodes hier. Ich habe Ihnen noch einen zweiten Teil, den ich Ihnen vorstellen möchte. Ich klicke hier einfach mal ein zweiter, und zwar, was habe ich Ihnen hier noch vorgestellt. Wir haben hier wieder unser Turtle for Kids Package und ich habe nochmal das Paket Random importiert. Sie müssen schauen, ob Random jetzt nun in Python direkt enthalten ist oder ob sie es auch über PIP importieren müssen. Und wir haben von der Riesenbibliothek Random eigentlich nur diese Zufalls-Ganzzahl-Funktion hier uns importiert. Der Code hier ist exakt derselbe wie den, den ich Ihnen gerade gezeigt habe. Nur, dass ich hier in dieser Funktion die drei Bewegungsschritte, die wir vorher mit 60, 120 und 60 für das Kochterragon festgelegt haben, randomisiert. Und zwar, ich habe ja einfach mal gesagt, der erste Schritt nimmt eine Ganzzahl zwischen 55 und 80, der zweite Schritt zwischen 115 und 160 und der dritte Schritt zwischen 65 und 75. Das heißt, ich habe mich hier so ein bisschen an den Längen für den Kochterragon und die Piano Kurve orientiert und es ist nun so, dass für jeden einzelnen Schritt, den wir machen, eine andere Länge gewählt wird. Das heißt, wir können das hier zufallslastiger gestalten. Natürlich ist es jetzt so, dass hier aus einer Normalverteilung gezogen wird und das noch nicht ganz so spannend ist. Jetzt stellen Sie sich natürlich vor, dass man hier auch andere Verteilungen zugrunde legen kann, also, dass wir nicht aus einer Normalverteilung ziehen, sondern zum Beispiel aus einer Log-Normalverteilung, aus einer Poissonverteilung oder aus irgendwelchen anderen Verteilungen, die Ihnen eben gerade günstig erscheinen. Natürlich können Sie auch hier die Bandbreiten und, wie die Schrittlängen sind, variieren und kompletten Modellen unterliegen lassen. Das heißt, wir können hier die Generation, wie, welchen Winkel, wie weit hier gegangen wird, natürlich auch aus stochastischen Zufallsprozessen ziehen, die gewissen Verteilungen folgen. Also, da haben Sie eine ganze große Varietät an Möglichkeiten. Wir werden das noch in der Theorie mal kennenlernen, und zwar, wie wir denn diese Koch- und Piano Kurven, in dem Fall, ich rede jetzt mal von der Piano Kurve, weil wir die Kochkurve in die Piano Kurve überführen können. Wir können diese Piano Kurve im Grenzfall, wenn wir das randomisieren, also durch ein Zufallsprozess darstellen, als Brownschirm-Molekular-Bewegung approximieren, das lernen wir noch. Das ist der Teil geistige Flexibilität. Es ist eigentlich auch ziemlich verrückt, dass man das alles so ein bisschen ineinander umwandeln kann, aber das zeige ich Ihnen noch. Wir können auf jeden Fall, wenn wir hier diese Iterationsschritte dem Zufall überlassen, eben eine Brownschirm-Molekular-Bewegung erzeugen, und die Brownschirm-Molekular-Bewegung kann durch einen random Walk approximiert werden. Das heißt, wir können hier schon sehr weit ineinander übergreifen, und das machen wir dann später auch noch. Für den Teil jetzt hier bleiben wir aber erst einmal bei unseren Zufalls ganz zahlen, die wir aus einer Normalverteilung ziehen und die wir hier in feste Grenzen gepackt haben. Warum habe ich das denn gemacht, weil wir hier nur eine fixe Zeichenfläche haben, ohne Grenzen, sage ich das mal, und damit uns die Kurve nicht irgendwie im Gekringel sofort abhaut, habe ich das so eingestellt, dass wir hier auch tatsächlich mal was sehen können. Ich rede jetzt nicht so viel drumherum, sondern glück hier einfach mal auf Start. Und dann sehen wir hier, was sehen wir denn eigentlich? Wir sehen, dass es irgendwie ja schon eine Pianokurve ist oder ein Kochterragon oder eine Mischung aus Beiben, dass halt die Bewegungen jetzt etwas anders verlaufen, wie auf unserem Fünfeck, was wir vorher gesehen haben. Wir haben hier zehn Seiten, das heißt, er fügt uns hier halt zehn Mal eine Linie der Länge von 201. Die Länge dieser Linie können Sie ganz unten im Code festlegen. Und Sie sehen hier an der Seite in der Konsole, wie viele Schritte, wie viele Iterationsschritte denn hier eigentlich durchgeführt werden. Also das ist schon mal eine Ansage. Und Sie sehen natürlich auch, welche Winkel hier oder welche Seitenlänge hier jeweils gewählt worden sind, zufällig, und die bewegen sich natürlich in diesen Intervallen, die wir hier vorgegeben haben. Sie können jetzt jedes Mal, wenn Sie hier auf Start klicken, bekommen Sie eine fällig willkürliche Kurve. Und es ist jetzt auch nicht mehr nur so, wie in der Pianokurve, die einem starren mathematischen Generator folgt, dass die Kurve sich hier nicht überschneiden kann. Ich mache das mal hier ein bisschen größer. Sie sehen, dass es hier Bereiche gibt, wo die Kurve sich einmal selbst schneidet und wo verschiedene Seiten sich quasi überlappen. Es gibt in den Fraktalen eine sogenannte Drachenkurve, in denen das Gang und Gebe ist, dass Fraktale sich schneiden. Da werden aber die mathematischen Eigenschaften schon ziemlich wild. Deswegen ich das hier für ein Data Science Kurs, in dem die Fraktale eigentlich nur eine Brücke zwischen den ganzen Themengebieten darstellen sollen. Wird das einfach zu viel. Deswegen habe ich das rausgelassen für diejenigen, die das interessiert. Sie können sich gerne von Wandelbrot das Buch Fraktale Geometrie der Natur besorgen. Ich kann es Ihnen empfehlen, das Ganze sich auf Englisch anzutun. Da liest sich das auch noch ziemlich verrückt. Aber es ist eingänglich und es liest sich besser wie die deutsche Übersetzung. Das ist zumindest meine persönliche Meinung davon. Da wird dann erklärt, was bedeutet es denn, wenn wir hier Bereiche haben, in denen sich die Kurven selbst überlagern. Was heißt das denn alles? Nachdem wir jetzt ganz viel Spaß hatten, wir haben hier eine Länge von 200. Ich sage mal, ich mache hier mal eine Kurvenlänge von 300 draus. Und wir lassen das hier oben einfach mal so. Und ich hätte gesagt, wir lassen das einfach nochmal laufen. Ich clear hier die Konsole mal nochmal. Lassen wir das zum Abschluss des Videos einfach nochmal laufen und gucken, was passiert. Und wir sehen es passieren ganz andere Dinge wie vorher. Die Kurve, die wir nun malen, ist jetzt ein bisschen länger. Das sehen Sie, das können Sie einstellen, wie Sie gerade möchten. Und Sie sehen, wir haben jetzt hier eine Bewegung nach unten erzeugt. Wir kriegen ein Knoll und jetzt wieder ein Knoll. Also das ist ebenfalls getrieben, aber in dem Fall halt in gewissen Grenzen. Es gibt Zufallsfraktale, deren Bewegung vorher zu sagen eigentlich nicht mehr möglich ist. Sie sehen, ich mache jetzt hier mal das Fenster groß. Unsere Kurve ist aus dem vorgegebenen Fensterrahmen entschwunden. Nenn ich das mal und es kann auch sein, dass diese Kurve hier ganz out of bounds läuft. Es ist eben, weil der Code hier noch nicht so professionell angelegt ist und nicht so komplex gehalten ist, dass man darauf achte, dass er dann bitte ein Rebound macht, wenn er die Bildschirmgrenze erreicht. Das haben wir nicht, aber Sie sehen hier ja sehr schön, wie unsere Kurve sich hier in der Ebene entwickelt hat und gut damit jetzt irgendwie einen Finanzmarkt modellieren zu wollen, macht noch irgendwie keinen Sinn, weil so sieht irgendwie noch keine Aktie aus. Aber ich denke, Sie bekommen die Idee, dass wenn man da gewisse Funktionen und Prozesse hinten anhängt, dass man durchaus damit Finanzen modellieren kann. Das klingt jetzt vielleicht etwas weit hergeholt vor dieser quietschbunden Kurve. Aber ich habe ja gerade gesagt, die Pianokurve kann als Brownshire-Molekular-Bewegung approximiert werden und es ist auch möglich, eine gebrochene Brownshire-Molekular-Bewegung zu erzeugen, mit der man durchaus eben Finanzmärkte modellieren kann. Das sehen wir aber in unserem nächsten Kapitel über stochastische Zufallsprozesse. Ich hätte gesagt, ich lasse es jetzt noch einmal laufen zum Abschluss und dann sind wir mit dem Video eigentlich schon am Ende. Wie gesagt, Sie sehen hier am Rand, wie sich die Seiten und Winkel verändern und Sie sehen hier, das ist ja ein ganz nettes Beispiel hier, wie eben diese Pianokurve hier verzerrt wird durch diese zufälligen Bewegungseinstellungen. Sie können natürlich, wenn Sie hier andere Verteilungsformen wählen möchten, natürlich hier auch andere Pakete importieren und hier andere Operatoren reinschreiben und einfach schauen, was passiert. Wie gesagt, ich habe es am Anfang vom Kurs ja schon gesagt, Sie sind zum Spielen aufgefordert. Also wäre ich Ihnen verbunden, wenn Sie das auch tun würden. Sie können mit dem Kot hier spielen, Sie können den Kot manipulieren, Sie können natürlich hier andere Zahlen reinschreiben oder Sie können natürlich auch völlig andere Datengrundlagen hier einfügen, indem Sie sagen, ich nehme nicht normal verteilte Ziehungen und schau, was dann passiert. Sie sind völlig frei in diesem Kot hier zu experimentieren und in diesem Sinne sind wir mit den Fraktalen fertig. Wir haben die theoretische Vorlesung abgehandelt. Wir haben jetzt das zweite Coding-Video fertig und in diesem Sinne wünsche ich Ihnen alles Gute und bis zum nächsten Video.