Sprachstatistik der Schweizer Statistiktage 2021

Wenn man eh grad Zug fährt, kann man sich ja auch mal die aufgezeichneten Videos der Schweizer Statistiktage 2021 anschauen und von Hand alle 75 Vorträge nach Foliensprache, Vortragssprache und Moderationssprache kategorisieren 🙂 Fun. Oder Fönn auf Berndeutsch.

Code, Grafiken und Datensatz gibt’s drüben bei github: https://github.com/datacyclist/sst21 Die Moderationssprache hab ich noch gar nicht mit ausgewertet, aber auch so war’s schon nett, nochmal die gefühlte Sprachmischung in den Zahlen bestätigt zu sehen. Das BfS bzw. OFS hat da häufiger knallhart bilingue durchgezogen.

Deutsch führt vor Englisch und Deutsch_Französisch.
In einem Fünftel der Vorträge haben die Sprache der Folien und die Sprache des Vortrags nicht zusammengepasst. Könnte man noch genauer auswerten.

Interessanterweise hat die Farbskala Set2 von RColorBrewer in den Grafiken oben ziemlich viel Ähnlichkeit mit derjenigen des Statistischen Atlas Schweiz, den ich im letzten Beitrag erwähnt hatte. Und auf die Eignung für Farbenblinde hab ich auch gleich noch geachtet — es steht sogar direkt bei den Farbpaletten mit dabei, man muss es halt nur beachten. Das sind dann wohl zwei wertvolle Take-Home-Points der Konferenz.

Distanzen zwischen PLZ

Ich wurde letzte Woche von einer HSG-Doktorandin angefragt, ob ich denn ein Skript wüsste, was zwischen PLZ-Gebieten in CH die Distanz berechnet. Sie hatte meinen Eintrag zu Hektarrasterzellen zu Postleitzahlen gefunden. Weil ich grad Lust hatte, mal zu schauen, was inzwischen für offizielle Daten so frei verfügbar sind oder ob die alle noch da sind, hab ich’s mal eben programmiert: https://github.com/datacyclist/CH-plz-distance Es ist tatsächlich nicht viel Code geworden und da sind sogar schon drei Distanzen drin:

  • Abstand der Mittelpunkte der Bounding Boxes der PLZ
  • Abstand der Zentroide der PLZ-Polygone und
  • minimaler Abstand der Polygone (d.h. bei räumlich benachbarten PLZ =null)

Fun fact 1: Da könnte man sogar ein Rätsel draus machen, wer die meisten PLZ-Polygone erkennt (es sind über 4000), also die Gemeinde dazusagen kann 🙂

Fun fact 2: die x000-PLZ haben keine Polygone und mein Skript hat eh keine Fehlerbehandlung drin.

Fun fact 3: man schaut sich natürlich naheliegende PLZ zuerst an und stellt fest, dass nicht mal einzelne PLZ räumlich zusammenhängend sein müssen. Aber hey… AI, FR, OW, SO…

Polygon von Wil SG / 9500

Skript-Ausgabe, wenn man 1004 Lausanne und 8050 Zürich nimmt:

plz1: 1004
plz2: 8050
dist_mitte_bbox_meter: 176511.8
dist_centroid_meter: 176860.8
dist_polygone_minimal_meter: 174368.2

Impffortschritt und sonstiges

Am Dienstag 15.06. gab’s für mich pünktlich vier Wochen nach dem ersten Termin die zweite Moderna-Impfung. 11:30 Uhr piks, alles gewohnt effizient, kaum Warteschlange, gut planbar. Acht Stunden lang nichts gemerkt, dann am Abend ging meine Körpertemperatur erst unter die normalen 36°C, in der Nacht dann über 38°C und am Morgen war sie wieder normal und ich hatte einen Brummschädel. Etwa gegen Mittwochabend waren dann die Temperaturprobleme weg, aber seither fühle ich mich so, als ob ich auf 3000 Höhenmeter wohnen würde — häufig mal atemlos vom Treppensteigen, hoher Puls und auch gedankenmässig nicht immer voll beieinander. Aber es wird besser und selbst diese Nebenwirkungen sind immer noch deutlich angenehmer als das volle Krankheitsprogramm. Mal schauen, bis zu welchen griechischen Buchstaben wir mit Corona noch kommen. Wenn die Maskenpflicht im Büro weg ist, ist dann mein Arbeitsalltag auch wieder wie vorher, einfach jetzt ganz offiziell zum Quatschen und Netwörken nach Oerlikon und nach Bern und zum effizienten Arbeiten daheim bleiben.

Die Klimaanlage tut wie geplant und unauffällig ihren Dienst. Pro zu kühlendes Zimmer 250-300 W elektrische Leistung, d.h. wenn sie 12h am Tag läuft, sind das etwa 3-6kWh und damit 0.75-1.50 Fr. am Tag. Ja, es wäre günstiger, im Keller zu schlafen und zu arbeiten und als Informatiker würde mich da nicht mal jemand schief anschauen 🙂 Auf dem Dachboden waren es auch schon mal 52°C, etwa 10°C über der “normalen” Temperatur, die dort oben sonst herrschen würde. Der Temperaturunterschied zwischen Wil-Altstadt und Rossrüti-Dorf ist bestimmt auch etwa 5°C, man merkt es mit dem Velo deutlich, sobald man rauskommt.

Aussengerät und links der Kondenswasserablauf mit Pumpe nach oben

Bei den TB Wil hab ich mal angefragt, was sie dagegen hätten, wenn ich mir eine fixfertige 300W-Solaranlage für <500 Fr. in den Vorgarten stellen würde und ob das mein Stromzähler zählen könne. Bis 600W ist es eigentlich bewilligungsfrei und nächstes Jahr kommt ja geplant sowieso eine Dachanlage. Den Strom der kleinen Anlage krieg ich mit Eigenverbrauch komplett neutralisiert.

Der Komposter hat seine Arbeit ganz gut getan und den Rest erledigt jetzt die Aussenluft. Die obere Hälfte des Haufens ist jetzt zuunterst wieder im Komposter drin. An dessen Stelle wachsen jetzt Kürbisse und Tomaten, dahinter Himbeeren, Johannisbeeren und Sonnenblumen. Seit gestern alles automatisch tröpfchenbewässert, mit Gardena Kettenschutzrohr microdrip, wie schon vorher in der Kirchgasse auf dem Balkon.

Auf der ersten Velorunde seit der Impfung ging der Schaltgriff in Hittingen schwer… Beim Aufmachen daheim alles wie erwartet verschlissen, nur hatte ich keinen genügend langen Schaltzug im Vorrat. Also umgestiegen auf Postvelo und nur eine kurze Runde gefahren.

Schaltzug mit Spliss

Ganz neu im Gerätebestand ist jetzt ein Boox Note Air — ein grosses Android-Tablet mit E-Ink-Display. Vor ungefähr 12 Jahren hatte ich schon in derselben Grösse und vom selben Hersteller ein E-Ink-Tablet, aber damals mit eigener (schlechter) Firmware und vor allem massiv trägerem E-Ink-Display. Zum Lesen von Büchern (mit un-animiertem Umblättern) gut geeignet, kontrastreich, aber insgesamt schlecht nutzbar. Das Boox ist jetzt wie ein normales Android-Tablet, man kann sämtliche Apps installieren (Google Play Services und Google Services Framework sind _nicht_ standardmässig drauf) und hat dazu eben einen kontrastreichen E-Ink-Bildschirm, den man ermüdungsfrei ohne Hintergrundbeleuchtung wie Papier lesen kann 😀 Und wie ich drauf gekommen bin: Ursula hat mir von https://www.pressreader.com/ erzählt, wobei man den Vollzugang (!) dazu für 30 Fr. im Jahr (!!) via Kantonsbibliothek Vadiana bekommen kann. Im Vergleich dazu: das reguläre NZZ- und NZZaS-Abo kostet 924 Fr. im Jahr, und mit NZZ Geschichte dazu bin ich über 1000 Fr. — ähm… die digitale Version war genau deswegen bisher für mich nicht sinnvoll nutzbar, weil ich keine Lust hab, noch länger am Tag auf ein LCD zu starren. Mein Abo läuft noch bis Ende März 2022. Dazu gibt’s jetzt noch regelmässig Aftenposten, Le Temps, Washington Post, Neues Deutschland und Leipziger Volkszeitung. Tagesanzeiger, Weltwoche und WOZ sind leider nicht drin. Aber ich denke, nach dem Abbestellen des NZZ-Abos kommt dann ein Republik-Abo dazu — auch das hab ich bisher genau deswegen nicht, weil es das nur digital gibt.

Boox Note Air

Zusätzlich gibt’s den Vollzugriff auf die Onleihe des Bibliotheksverbunds, wo ich bei Bedarf auch noch die ZEIT, NZZ Geschichte und anderen Lesestoff ausleihen kann. Für eine dienstliche Präsentation konnte ich da gleich mal zielgruppengerecht (Betrugsbekämpfung) ein Zitat aus “Der Verdacht” von Dürrenmatt einbauen.

Gasverbrauch per Gastherme ermittelt

Der Optolink-Adapter und der dazugehörige Raspi im HWR loggen seit einer Weile einfach mal minütlich alle Parameter der Gastherme in ein File pro Tag. Die Idee war, dass ich dann mal schaue, ob ich aus diesen Werten den Gasverbrauch halbwegs zuverlässig bestimmen kann, weil ich den Gaszähler ja nicht vernünftig automatisiert ausgelesen bekomme. Und weil’s geht.

Diese Grafik meint gutschweizerisch: grundsätzlich möglich. Die zwei Ausreisser geben mir noch ein paar Rätsel auf, interessanterweise sind das zwei aufeinanderfolgende Tage (Sa/So) und in Summe (Sa+So) stimmt es auf beiden Achsen dann wieder. Differenz liegt bei etwa 10kWh.

(kurze Unterbrechung wegen Verdacht…)

Ach herrje… Wenn man beim Blogschreiben das Problem findet 🙂 Es waren natürlich die Ablesedaten. Ich hatte das Zählerbild von 11:57 Uhr mittags abgelesen und in mein CSV eingetragen, und nicht das von 23:57 Uhr — die haben sich ziemlich genau nur in einem Kubikmeter unterschieden, und das macht mit dem Gas-Umrechnungsfaktor von 10.17 dann halt die 10kWh aus.

Interessanterweise muss ich noch schauen, was meine Therme überhaupt für eine maximale Brennerleistung hat, ich hab jetzt aus der Grafik selbst 20kW ermittelt, was so in einem passenden Bereich für das Haus liegen dürfte. Ich könnte die Daten zumindest noch genauer auslesen, also nicht mit 1 Ablesung pro Minute, sondern vielleicht 3/min. Oder ich versuche, mit der mitgeloggten Brennerdauer (in h, mit sechs Nachkommastellen) was zu korrigieren.

Wasserzähler am S0 und Impfung

Irgendwo war ich diese Woche über dieses Projekt hier gestolpert und hab mir direkt den Bausatz des Wasserzählers bestellt. Die Idee ist simpel: der analoge Wasserzähler hat kleine drehende Zeiger und man nimmt sich jetzt den mit der kleinsten Stelligkeit (=1 Liter pro Umdrehung) und erfasst den technisch als Impuls. So, wie also mein Stromzähler pro LED-Blink 1Wh kennzeichnet, krieg ich jetzt vom Wasserzähler pro Impuls 1 Liter als Messwert. Da es ja eh grad alle halbe Stunde regnet und es deswegen nicht auffällt, wenn ich testweise den Vorgarten bewässere, hat sich $heute gut dazu geeignet.

Funktionsprinzip: eine grüne LED mit einer vorgeschalteten Linse beleuchtet einen Punkt im Wasserzähler, der durch den Zeiger überstrichen wird. Das reflektierte Licht wird durch eine Fotodiode aufgenommen. Wenn der Zeiger durch den Lichtstrahl geht, gibt’s weniger reflektiertes Licht — dieses Signal wird dann weitergereicht.

Hier nur zur Illustration der Wasserzähler mit den Zeigern (meine bisherige Endoskopkamera).

Der Bausatz ist schon sein Geld wert, den kann man sogar automatisch an die Helligkeitsunterschiede (Zeiger / nicht-Zeiger) anpassen lassen. Der Rest war simpel, ich konnte alle Skripte vom Stromzähler wiederverwenden, da es prinzipiell so ziemlich dasselbe ist. Im Grafana-Dashboard kommt jetzt rechts nur noch der Tagesverbrauch an Wasser dazu. Ich könnte auch den Durchfluss in Liter/min messen/berechnen, war aber zu faul, mir FluxQL weiter anzuschauen. Ein Kosten-Dashboard ginge natürlich auch, aber ich weiss auch so schon, dass die Kaffeemaschine für etwa 10% meines Stromverbrauchs verantwortlich ist.

Parallel dazu logge ich noch die Brennerstunden der Gastherme — da diese der einzige Gasverbraucher im Haus ist, lässt sich darüber möglicherweise der Gasverbrauch auch direkt automatisch ermitteln, ohne dass ich doch noch die Bilder des Gaszählers auswerten muss. Alle fünf Sonoff-Switches sind auch schon auf Tasmota geflasht, sehr schönes Stück Software, muss ich sagen. Da kommt noch mehr Bastelei.

Grenzaufwand zum Flashen: 3min, Setup etwa 1.5h — drum gleich fünf Stück

Die erste Impfung ist auch schon erledigt. Ich hatte mich am 22.03. schon im Portal angemeldet. Am Sonntag 16.05. kam spätabends der Termin für den 25.05., den ich aber im Impfportal noch eine Woche vorziehen konnte. Die Impfung war unspektakulär, ausser dass das Scannen des Impfanmeldung-QR-Codes so gut getimed war, dass parallel zum Stechen der Nadel die Emails mit “Impfbescheinigung” und “2. Impftermin” kamen. Eigentlich nicht weiter überraschend, weil es ja technisch auch nicht schwierig umzusetzen ist, aber als Informatiker ist man ja nicht gewöhnt, dass sowas auch wirklich dann so funktioniert.

3:30h mit See

Bevor wieder alle draussen rumturnen, hab ich heute gleich den Vormittag für eine 80er-Runde genutzt. Rossrüti-Arbon-Romanshorn-RR, die Höhenmeter kommen erst am Ende. Die letzten Kilometer gehören auch zu meiner erweiterten Tagesrunde und da kenne ich irgendwie schon jeden Schachtdeckel.

Daheim hab ich jetzt meine Haus-Messwerte mal weiter aufgebohrt und diese in ein Live-Dashboard verklappt, mit influxDB und Grafana-Dashboard (beides derzeit noch in den Wolken gespeichert). Ich hab da also in der Küche ein Tablet hängen, was mir den Live-Stromverbrauch anzeigt und alle möglichen anderen Messwerte, die ich gern hätte, z.B. alles, was ich mir von der Heizung an Daten abhole. Wenn ich jetzt beim Solarauto nochmal was neu machen müsste, würde da eine InfluxDB den Job ziemlich gut machen, sämtliche Messwerte vom Auto entgegenzunehmen.

Das Beste ist ja, dass ich den ganzen Kram einfach per CURL-Request in die InfluxDB abkippen kann. Um sämtliche Heizungsmesswerte da reinzuschreiben, sind es wirklich nur vier Zeilen Code in einem bash-script, das ich dann in der crontab jede Minute laufen lasse 🙂

Für den Stromzähler sind es sogar nur zwei Zeilen. D.h. in meinem Stromzähler-Ablesescript hab ich nur ganz unten eine Zeile ergänzt, die bei jedem LED-Blinken einfach noch einen Eintrag nach InfluxDB schreibt. Jedes Blinken entspricht ja 1Wh, einfacher geht’s nicht. Im Grafana musste ich mich noch mit der Flux-Query herumschlagen bzw. ihre Funktionsweise verstehen. Hat ein bisschen was von funktionaler Programmierung 😀

Nächstes Ziel wäre dann, den Stromverbrauch nach negativ zu drücken, aber das kostet erstmal was.

Zu genau gerechnet

Meine halbautomatisch selbsterfassten Zählerwerte stimmen exakt, und zwar sogar zu exakt. Ich hatte für die Quartalsrechnung (Strom/Gas/Wasser) 398 Fr. ermittelt, die TB Wil wollen aber nur 397 Fr. haben. Ja Kunststück, ich rechne beim Wasser litergenau, die TB nur auf Kubikmeter genau. D.h. bei der nächsten Abrechnung ergibt meine Voraussage dann weniger. Ein paar Rundungsdifferenzen gibt es auch noch, aber mit dieser Abweichung kann ich ganz gut leben.

Aktuelle Verbrauchskosten — ja, man kann sich über die anteilmässigen Grundkosten im Mai streiten.

Dann gibt’s noch einen neuen (alten) Gartentisch zu vermelden. Neulich auf der Velorunde entdeckt, weil GRATIS dranstand. Das hab ich hier im Dorf A. geschrieben, sie hat mir angeboten, das Ding gleich mit dem Auto abzuholen UND hat auch gleich noch die Leute im Nachbardorf gebeten, mir den Tisch zu reservieren. Man kennt sich 🙂 Dafür hab ich dann beim Fensterputzen im Pfadiheim Wil geholfen und das auch gleich mal von innen gesehen. Der Tisch ist auch so leicht, den hätte ich in Hittingen auch auf den Hänger laden und die 2km bis nach Hause rollen können.

Neuerdings liefert Amazon wohl sogar versandkostenfrei in die Schweiz (wenn fulfilment by amazon gilt). Ich brauchte Schleifwerkzeug — das identische Werkzeug hätte bei Galaxus 317 Fr. gekostet, bei Amazon nach MwSt-Angleichung nur 230 EUR, genauso schnell geliefert, zollfrei und problemlos. Okay, ich musste noch mal fünf Minuten investieren, um den EU-Stecker abzuschneiden und einen CH-Stecker anzuschrauben, aber das sind mir die 60 Fr. Preisdifferenz wert. Jedenfalls konnte ich damit den Tisch von der alten Farbe befreien. Abgestandenes Leinöl war auch noch da, lange über MHD, das ging zum Einölen ganz gut.

Und das Grundbuchamt war heute für eine amtliche Neubewertung meiner Immobilie vor Ort. Ich hab sie gefragt, wie sie den Zeitpunkt bestimmen und die Antwort war “alle zehn Jahre” bzw. wenn der Verkaufspreis weit vom Steuerwert der Liegenschaft abweicht (ob in beide Richtungen, hab ich nicht mehr gefragt). Da rutsche ich dann möglicherweise wieder etwas eher in die Vermögensteuer rein, falls ich die Hypothek amortisiere. Der Eigenmietwert bleibt voraussichtlich unverändert.

Ungewollte Reparaturfahrt

Schon eine ganze Weile hab ich ein seltsames Knacken im Antrieb, was von der Häufigkeit her eindeutig an der Kette liegt. Bei abgenommener und gereinigter Kette war nichts zu finden, alle Verbindungsglieder waren leichtgängig und das trotz mehrerer verschiedener vernieteter Ketten. Das Knacken war auch nach dem Ölen nicht weg, wurde heute auch etwas stärker. Beim Stoppschild an der Murgstrasse in Münchwilen und dem darauffolgenden unerwartet knackigen Antritt erledigte sich dann die weitere Suche.

Erstmal hab ich die Kette wieder eingefädelt und mit einem Kabelbinder transportfertig wieder verschlossen. Die Frauenfeld-Wil-Bahn hatte ich direkt vor der Nase. Im Nachhinein fiel mir auch ein, dass ich die Liege ja am Bahnhof in Wil gesichert hätte unterstellen und mit dem Bus heimfahren können, inklusive Walk-of-Shame in Klickschuhen auf dem Bahnhofsplatz. Aber auf der Karte gab’s in der Nähe den Veloplace Radsport Löffel — der hatte zwar keinen Kettennieter, auch nicht zum Verkauf, aber eine Nietzange. Die hat er mir dankenswerterweise kurz ausgeliehen und nach zehn Minuten hatte ich zwei Glieder draussen und die Kette wieder verschlossen. Sogar aufs grosse Kettenblatt reicht’s noch, und das Knacken ist komplett verschwunden. Finanziell bedanken konnte ich mich nicht, er meinte nur lächelnd “Ich schick Dir die Rechnung”. Sehr cool 🙂

Damit hatte ich das, was ich eigentlich daheim hätte machen sollen, gleich unterwegs erledigt. Jetzt landet der Kettennieter für unterwegs zumindest wieder im Werkzeug. Die Orchesterpost bringe ich dann ein andermal nach Eschlikon. Jetzt ist Kaffeezeit im hauptsächlich gelben Vorgarten 🙂

Stromzählerwerte passen ja doch

Peinlich peinlich (1): aufgrund der hier gezeigten Grafik hatte ich angenommen, dass sich meine LED-Zähl-Bastelei irgendwie verzählt. Dabei hätte ich schon anhand der Grafik sehen können, dass die Gesamtsumme des Stromverbrauchs stimmt, dass aber Nebentarif (NT) zu tief gezählt hat und Haupttarif (HT) zu hoch. Das schreit ja geradezu nach einem simplen Programmierfehler. Daraus folgt:

Peinlich peinlich (2): wenn die Uhrzeit vom Strom-Haupttarif von 07:00 bis 19:00 geht und ich dazu die Stunden dieser Uhrzeit benutze, um “HT” oder “NT” an den data frame zu hängen, sollte ich natürlich nicht %in% c(7:19), sondern c(7:18) nehmen… Wochentags 18:59:59 ist noch HT, ab 19:00:00 ist NT. Bugfix committed.

Nach dieser 1-Byte-Korrektur im Code stimmen die Zählerstände sehr genau überein und ich muss jetzt wirklich nicht mehr in den Keller zum Ablesen 🙂

Stromzähler mit ansteigendem Offset?

Die Zählererfassungs-Lösung, die die Blinkimpulse der LED am Stromzähler zählt, läuft jetzt schon eine Weile. Zeit für einen Datenvergleich. Ich muss ja nur die abgelesenen Zählerstände mit den errechneten vergleichen.

Hm. Das ist noch nicht so der Hit mit der Genauigkeit. Wo die Unschärfe herkommt, kann ich noch nicht sagen. Auf alle Fälle verpasst die LED-Blink-Erfassung Impulse, also fehlen ihr Wh. Ein konstanter Offset wäre schön (sieht man ja am Anfang der Kurve sowieso). Eine über die Laufzeit zunehmende Abweichung ist nicht schön. Zwischenzeitliche Annäherungen der Kurven sind durch unterschiedliche manuelle Ablesezeiten bedingt.

Vermutung: wenn viel Strombedarf ist, kommt der Fototransistor nicht mehr hinterher mit dem Erfassen der Blinkimpulse. Bei 3.6kW Leistung ist es 1Hz, bei 7.2kW Leistung sind es 2Hz. Herd und Quooker zusammen plus laufender Spüler erreichen das schnell. Nächster Schritt also: maximale Leistungen pro Tag anschauen und prüfen, ob das irgendwie mit den “Wh-Verlusten” zusammenhängt. Im Prinzip funktioniert es aber. Zusätzlich: direkt vor und nach längerer Abwesenheit ablesen und das mit den blink-Werten für den Zeitraum vergleichen. Wenn’s am Transistor liegt, eventuell noch den Widerstand gegen einen kleineren austauschen.