bennokress / Scriptable-Scripts

My Scriptable Creations
18 stars 7 forks source link

Error in Script Customization & Data Discrepancy (RKI ↔ JHU / OWID) #1

Closed quer2000 closed 3 years ago

quer2000 commented 3 years ago

Hallo. Habe versucht Ihr Dashboard auf andere Städte bzw. Länder anzupassen. Leider bekomme ich folgende Fehlermeldung. Error on line 167:49: TypeError: undefiniert is Not an object (Evaluation localcasedata Location. Cases7_per_100k Könnten Sie mir bitte sagen was ich hier zu tun habe?

bennokress commented 3 years ago

Das ist ohne die Code-Änderungen schwer zu sagen. Grundsätzlich heißt das erstmal, dass im Cache der RKI-Daten für die Location keine Fallzahlen gefunden wurden. Mein erster Lösungsansatz wäre daher, dass man den Cache bei jedem Durchlauf aktualisiert. Dazu müssten die Zeilen 625 und 654 angepasst werden:

Behebt das die Fehlermeldung noch nicht, dann ist vermutlich das Setup der Orte noch nicht korrekt. Dazu müssen die Werte für location (Zeile 67ff), coordinates (Zeile 74ff), localPopulation (Zeile 81ff) und name (Zeile 88ff) angepasst werden. Ich würde dazu raten, dass die property-Namen vor den Doppelpunkten (kissing, … sowie "FDB", …) jeweils zunächst unverändert bleiben, um Probleme mit einer fehlenden Umbenennung im Laufe des Skripts auszuschließen. Dadurch werden dann der gewünschten Orte zunächst im Code weiterhin als Kissing und "FDB" etc. referenziert, die Daten im Widget sind aber dennoch die des gewünschten Ortes.

Funktioniert auf diese Art mal alles, dann können natürlich auch die Benennungen geändert werden. Anschließend muss dann jedoch noch einmal das Skript mit der Cache-Aktualisierung bei jedem Durchlauf gestartet werden, damit die Namen der Orte korrekt hinterlegt sind. Ist der Cache einmal neu geschrieben, dann können die beiden false in den Zeilen 625 und 654 wieder entfernt werden.

Sollte es weiterhin Probleme geben, dann müsste ich mir die vorgenommenen Änderungen mal ansehen, um weiterhelfen zu können.

quer2000 commented 3 years ago

Ich würde Ihnen gern zuschicken, was ich gemacht habe, wenn das für Sie Ok wäre.

bennokress commented 3 years ago

Klar, am besten mit einem Fork meines Projekts oder einem schnellen Gist 😉

quer2000 commented 3 years ago

Sorry. Weder weiß ich was ein Fork noch ein Gist ist.

quer2000 commented 3 years ago

Soll ich es hier in das Kommentarfeld reinkopieren?

bennokress commented 3 years ago

Soll ich es hier in das Kommentarfeld reinkopieren?

Geht auch, übersichtlicher (und genauso einfach) wäre es vermutlich als Gist: gist.github.com Dort einfach reinkopieren und unten beim grünen Button "Create public Gist" auswählen und den Link hier schreiben. Der Vorteil davon ist, dass der Code dort Zeilennummern hat, auf die ich mich beziehen kann, wenn ich hier wieder antworte.

quer2000 commented 3 years ago

Einen Fehler habe ich bereits verbessert: https://gist.github.com/quer2000/6809b3b7bcaa3e2a03757ea8edf9fe8e

bennokress commented 3 years ago

Alles klar, ich schau's mir am Feierabend genauer an. Beim ersten Durchlauf sehe ich, dass der Fehler schon beim Verarbeiten der Koordinaten auftritt. Alle weiteren Fehler basieren vermutlich darauf. Ich sehe aber noch nicht was an den Koordinaten das Problem sein könnte.

Ich melde mich später ;)

quer2000 commented 3 years ago

Super, danke!

bennokress commented 3 years ago

Kurzes Update: hab doch noch was entdeckt :) Die Namen der Orte in den Zeilen 68ff sind groß geschrieben, dadurch funktioniert z.B. location.ludwisgburg nicht mehr. Das müsste also so geschrieben werden:

let location = {
    ludwisgburg: "LB",
    ebingen: "EB",
    stuttgart: "S",
    burladingen: "BU"
}

Leider tritt dann aber immer noch ein Fehler auf, diesmal bei der Konstruktion der Flagge in Zeile 246 (let flagLabel = canvas.addText(flag[country])). Da hab ich den Fehler noch nicht und wenn ich nicht ganz schnell noch draufkomme, dann wirklich am Feierabend 😄

bennokress commented 3 years ago

Und den anderen Fehler hab ich auch: in den Zeilen 221 und 223 stehen noch canada und usa. Damit läuft das Widget dann schon mal, allerdings klappt die Inzidenz-Berechnung der Länder noch nicht …

bennokress commented 3 years ago

Okay, das letzte Problem ist im aktualisierten Gist schon behoben. Um genaue Zahlen zu bekommen, müsste man allerdings die folgenden Bevölkerungszahlen nehmen:

let countryPopulation = {
    "DE": 83_190_556,
    "HR": 4_105_268,
    "ES": 46_754_783
}

Das sollte ich eigentlich auch in meinem Script mal ändern: die Bevölkerungszahlen in meinem Vorschlag sind die aus den Vaccination-Daten von Our World in Data und daher eigentlich ohnehin schon im Cache vorhanden, daher müsste man die gar nicht oben fest reincoden, sondern könnte in Zeile 392 auch direkt aus dem Cache lesen. Wenn ich mal Zeit finde, dann aktualisiere ich meine Skripte mal so, dass man mehr konfigurieren kann. Aber ich denke mit den Änderungen müsste jetzt alles laufen, oder?

quer2000 commented 3 years ago

Ich habe auch festgestellt, dass nur Landkreise funktionieren und nicht einzelne Städte. Das habe ich jetzt korrigiert. Aber es kommt noch ein Fehler. https://gist.github.com/quer2000/9edaa169f681c70c8ef0be095aced7f2

bennokress commented 3 years ago

Da sind jetzt in Zeile 345 noch die beiden alten Städte drin: ebingen & burladingen

quer2000 commented 3 years ago

Danke für Ihre Mühen. Aber es funktioniert leider immer noch nicht.

quer2000 commented 3 years ago

https://gist.github.com/quer2000/80d730d33b3978ba3ad447357138590d

bennokress commented 3 years ago

Okay, hab noch ein paar:

quer2000 commented 3 years ago

Es funktioniert! Danke. Aber sind die Zahlen von z.B. Deutschland richtig? Die Inzidenz ist doch bei 59 und die Impfquote bei 2,49%. Angezeigt wird 60,2 und 5%.

quer2000 commented 3 years ago

Jetzt weiß ich was der Fehler bei der Impfquote ist. Bei Ihnen wird die Summe aus erst und zweitimpfung genommen. Daher 5%. Könnten Sie das noch korrigieren?

bennokress commented 3 years ago

Sehr gut, freut mich :)

Die Differenz ist leicht zu erklären: Inzidenz 59 und Impfquote 2,49% sind die Daten vom RKI, Inzidenz 60,2 und Impfquote 5% sind Daten der Johns Hopkins Universität bzw. von Our World in Data.

In die Inzidenzwerte der JHU fließen nicht nur die Daten der Gesundheitsämter ein, daher sind die immer ein bisschen unterschiedlich, aber immer in einem recht ähnlichen Bereich. Normalerweise würde ich da für Deutschland auch eher auf die RKI-Daten setzen, aber dann hätte ich keinen stimmigen Vergleich zu den Daten aus Kanada und den USA (bzw. Kroaten und Spanien).

Was die Impfung angeht ist der Grund ähnlich: die in der Presse & vom RKI verwendeten Statistiken sind die der Zweitimpfungen, da nur dann ein Komplettschutz besteht (ist ja auch sinnvoll so). Leider hatte die API von Our World in Data diese Trennung zum Zeitpunkt der Entwicklung noch nicht und gab nur an, wie viele Personen bereits die Erstimpfung erhalten hatten.

Nach Ihrem Hinweis habe ich das eben nochmal geprüft und sehe, dass die Daten inzwischen auch dort weltweit zur Verfügung gestellt werden (interessanterweise ist die Zahl dort nur 1,68% für DE - woher die Diskrepanz kommt weiß ich nicht). Die Änderung am Skript werde ich demnächst vornehmen und anschließend nochmals hier kommentieren, damit Sie diese in Ihre Version übernehmen können 😉

quer2000 commented 3 years ago

Vielen Dank für Ihre Hilfe und den Hinweis. Wäre nett, wenn Sie mir dann noch Bescheid geben, wenn Sie es aktualisiert haben. Wünsche Ihnen noch einen schönen Abend.

bennokress commented 3 years ago

Die neuesten Änderungen nutzen jetzt die Daten zur zweiten Impfung. Außerdem wird in abgesetztem Grau auf der Leiste angezeigt, wie viel Prozent der Bevölkerung bereits die erste Impfung empfangen haben. Außerdem habe ich im Zuge der Änderungen die fest eingetragenen Bevölkerungszahlen (lokal und global) durch Daten aus den APIs ersetzt sowie das Debugging verbessert.

Ich habe eine Anpassung der neuen Version gleich mit den für Sie interessanten Orten und Ländern hier hochgeladen: https://gist.github.com/bennokress/6c39a8de2a74878b24e27222de8f9276

Viel Spaß damit 😉

quer2000 commented 3 years ago

Super! Nochmals vielen Dank für den Aufwand den Sie durch mich hatten. Noch eine Frage. Kann ich einen Landkreis durch ein Bundesland ersetzen?

bennokress commented 3 years ago

Möglich wäre das schon, aber dafür müsste man einiges im Script ändern, da die URL für die Daten eines Bundeslandes eine andere ist. Aus dem gleichen Grund müsste man auch die URL für den Verlauf der Fallzahlen anpassen, um den Trend anzeigen zu können. Und zu guter letzt müsste das dann noch strukturmäßig an den restlichen Cache angepasst werden.

quer2000 commented 3 years ago

Ok. 😅 Das hatte ich mir einfacher vorgestellt.

quer2000 commented 3 years ago

Jetzt gibt es doch noch ein Problem. Beim Hauptlandkreis wird nicht die komplette Inzidenz angezeigt, sondern nur 3... Wie kann ich das beheben?

bennokress commented 3 years ago

Das liegt vermutlich daran, dass der Ortsname länger ist als "Kissing", wodurch das Layout verschoben ist und die Inzidenz nicht genügend Platz bekommt. Mit ein bisschen rumspielen an den Größen in den Zeilen 187/191 bzw. den Schriftgrößen in den Zeilen 189/199 sollte sich das lösen lassen.

quer2000 commented 3 years ago

Danke!