You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
3.0 KiB
Python
81 lines
3.0 KiB
Python
5 years ago
|
import toml
|
||
|
import os
|
||
|
import db_model as db
|
||
|
from peewee import SqliteDatabase
|
||
|
from peewee import fn
|
||
|
import datetime
|
||
|
|
||
|
|
||
|
def config_laden():
|
||
|
configfile = os.path.join(SKRIPTPFAD, "config.toml")
|
||
|
with open(configfile) as file:
|
||
|
return toml.loads(file.read())
|
||
|
|
||
|
|
||
|
SKRIPTPFAD = os.path.abspath(os.path.dirname(__file__))
|
||
|
CONFIG = config_laden()
|
||
|
QUELLEN = ["jhu", "who", "rki"]
|
||
|
|
||
|
|
||
|
def verdoppelungsrate_ermitteln(quelle, land, confirmed, confirmed_ts):
|
||
|
halbe_infizierte = confirmed / 2
|
||
|
ts_halbe = db.CoronaDaten.select(db.CoronaDaten.ts).where(
|
||
|
(db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land) &
|
||
|
(db.CoronaDaten.confirmed < halbe_infizierte)).order_by(db.CoronaDaten.confirmed.desc()).limit(1).scalar()
|
||
|
try:
|
||
|
verdoppelungstage = (confirmed_ts - ts_halbe).total_seconds()
|
||
|
except TypeError:
|
||
|
verdoppelungstage = None
|
||
|
return verdoppelungstage
|
||
|
|
||
|
|
||
|
def letzte_verdopplungsrate(quelle, land):
|
||
|
query = db.CoronaDaten.select(db.CoronaDaten.ts, fn.max(db.CoronaDaten.confirmed).alias("confirmed")).where(
|
||
|
(db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land)).dicts()
|
||
|
for datensatz in query:
|
||
|
verdoppelung = verdoppelungsrate_ermitteln(quelle, land, datensatz["confirmed"], datensatz["ts"])
|
||
|
print(verdoppelung)
|
||
|
|
||
|
|
||
|
def durchschnittliche_verdoppelungsrate(quelle, land):
|
||
|
query = db.CoronaDaten.select(db.CoronaDaten.ts, db.CoronaDaten.confirmed).where(
|
||
|
(db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land)
|
||
|
).namedtuples()
|
||
|
|
||
|
verdoppelungsraten = []
|
||
|
for datensatz in query:
|
||
|
verdoppelungsrate = verdoppelungsrate_ermitteln(quelle, land, datensatz.confirmed, datensatz.ts)
|
||
|
if verdoppelungsrate is not None:
|
||
|
verdoppelungsraten.append(verdoppelungsrate)
|
||
|
durchschnitt = sum(verdoppelungsraten) / len(verdoppelungsraten)
|
||
|
print(verdoppelungsrate_in_tagen(durchschnitt))
|
||
|
|
||
|
|
||
|
def jede_verdoppelungsrate(quelle, land):
|
||
|
query = db.CoronaDaten.select(db.CoronaDaten.ts, db.CoronaDaten.confirmed).where(
|
||
|
(db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land)
|
||
|
).order_by(db.CoronaDaten.ts.desc()).namedtuples()
|
||
|
for datensatz in query:
|
||
|
verdoppelungsrate = verdoppelungsrate_ermitteln(quelle, land, datensatz.confirmed, datensatz.ts)
|
||
|
print(f"Verdoppelungsrate am {datensatz.ts}: {verdoppelungsrate_in_tagen(verdoppelungsrate)}")
|
||
|
|
||
|
|
||
|
def verdoppelungsrate_in_tagen(verdoppelungsrate):
|
||
|
try:
|
||
|
return verdoppelungsrate / (60 * 60 * 24)
|
||
|
except TypeError:
|
||
|
return None
|
||
|
|
||
|
|
||
|
def main():
|
||
|
db.DATABASE.initialize(SqliteDatabase(os.path.join(SKRIPTPFAD, "corona.db3")))
|
||
|
for quelle in QUELLEN:
|
||
|
query = db.CoronaCountry.select().where(db.CoronaCountry.quelle == quelle)
|
||
|
for datensatz in query:
|
||
|
if quelle == "jhu" and datensatz.country_region == "Germany":
|
||
|
jede_verdoppelungsrate(quelle, datensatz.country_region)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|