<> = Treffen vom 22. 9. 2016 = * [[http://www.meetup.com/PYUGAT/events/234171711/|Meetup-Seite zu diesem Treffen]] == Agenda == * Begrüßung (heute mal durch bschlapsi) * Vorstellungsrunde: 2 first timers * [[FrontPage|Wiki]], MailingLists, [[https://twitter.com/pyugat|Twitter]], [[http://www.meetup.com/PYUGAT/|Meetup]], [[http://webchat.freenode.net/?channels=%23pyugat|IRC: #pyugat on freenode]], [[https://flattr.com/thing/1804445/Python-User-Group-Austria|Flattr]] * Anwesenheitsliste pflegen * Am Wiki anmelden & [[CategoryHomepage|persönliche Seite]] anlegen (Kontaktinfos, Name, Interessen, Foto,…) * Mögliche Themen in [[FutureTalks]] eintragen * Nächsten Termin festlegen: war schon [[https://metalab.at/calendar/2016/10/|eingetragen]]: 2016-10-27 * Events * https://www.pymunich.com/ * https://cz.pycon.org/ * https://pl.pycon.org/ * Buchbesprechungen? * [[http://shop.oreilly.com/product/0636920032519.do|Fluent Python]] * [[Jobs|Job-Börse]] * Zeiteinteilung für den Abend festlegen * Wer hat Kurzvorträge mitgebracht? * Groben Zeitplan für Hauptvortrag festlegen == Programm == (Notes by daxim, with additions from ibu.) === Modulvorstellung: problog === * [[https://problog.readthedocs.io/|problog]] * Aussagen mit Wahrscheinlichkeiten bewerten * und neue Aussagen daraus generieren * so wie ein Bayessches Netzwerk * `problog`-Kommando vorhanden nach der Installation * Codebeispiel: Verknüpfung und Inferenz von Aussagen, logische Dis- und Konjunktion, `query`-Befehl * Sampling: `problog sample myprogram -N 1000 --with-probability --with-facts --estimate` * Evidenz hinzufügen: Sachen werden als sicher vorausgesetzt, z.B. kommen gewisse Kombinationen nie vor * [[http://www.cs.ru.nl/~marinav/Teaching/BDMinAI/mpe.pdf|mpe.pdf]] Most Probable Explanation hilft beim Verstehen von Implikationen, beim Rückschließen auf Symptome * Erklärung von Deduktion, Induktion und Abduktion * konkretes Beispiel: warum ist der Vortragende nicht zu hören? `problog mpe speaker_silent.pl` {{{ %% why do we understand the speaker so badly 0.7::speaker_loud. 0.95::door_closed. 0.5::window_closed. 0.99::wall_present. 0.9::loud :- speaker_loud. 1.0::loud :- environment_silent. 1.0::environment_silent :- door_closed, window_closed, wall_present. evidence(\+ loud). query(loud). }}} Add more evidence: {{{ evidence(window_closed). evidence(speaker_loud). }}} Exclude most probable and 2nd most probable explanation: {{{ mpe1 :- \+speaker_loud, \+window_closed, wall_present, door_closed. evidence(\+ mpe1). mpe2 :- \+speaker_loud, window_closed, wall_present, door_closed. evidence(\+ mpe2). }}} In general, understanding means mpe ist much more probable than 2nd-mpe. === Exercises with thp++ === ==== dis ==== {{{ >>> import dis >>> help(dis) >>> def example_function(a, b): .. return a + Bayessches >>> example_function >>> dir(example_function) >>> example_function.__code__ >>> dir(example_function.__code__) >>> example_function.__code__.co_code b'|\x00\x00|\x01\x00\x17S' >>> [c for c in example_function.__code__.co_code] [124, 0, 0, 124, 1, 0, 23, 83] >>> example_function(42, 23) 65 >>> dis.dis(example_function) 2 0 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 BINARY_ADD 7 RETURN_VALUES >>> example_function.__code__.co_varnames ('a', 'b') >>> def example2(a, b, c): return a+b/c >>> dis.dis(example2) >>> def example3(a, b): return a // b >>> dis.dis(example3) >>> def foo(): a = 0 b = 1 c = 2 return b/a+c >>> foo() >>> dis.distb() # Dies zeigt den genauen Ort an, wo die Exception auftrat, nicht nur die Zeile. … --> 24 BINARY_TRUE_DIVIDE >>> gen = (x*2 for x in range(10)) >>> gen at 0x…> >>> dis.dis(gen) >>> gen.gi_code >>> gen.gi_frame >>> gen.gi_running >>> next(gen) >>> next(gen) >>> next(gen) … … … >>> next(gen) StopIteration >>> dis.distb() }}} ==== benannte Funktionsparameter ==== {{{ *args, **kwargs und *,foo,bar (Lone Star) Variablen als Default-Parameter werden zur Deklarationszeit angelegt: >>> def collectors_edition(name, gesammelt=[]): gesammelt.append(name) return gesammelt >>> collectors_edition('claus') ['claus'] >>> collectors_edition('dieter') ['claus', 'dieter'] }}} ==== ... (Typ Ellipsis) ==== ==== datetime(0,0) ist False in Py2, True in Py3 ==== === Livecoding === zum Schluss: Livecoding mit dem CSV-Modul extrahieren von Teilen von gewissen Spalten Parser für den Fall, dass ein split auf Komma nicht gelten soll, weil es sich innerhalb von Klammern befindet ---- CategoryShownotes