Covid19 Infizierte aus CSV auslesen und bearbeiten

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
schingschank
User
Beiträge: 6
Registriert: Sonntag 7. Juni 2020, 13:25

Guten Tag,
Für ein Python-Projekt muss ich die Anzahl der weltweit mit Covid19 Infizierten mit Python aus einer CSV-Datei auslesen und dann mittels Matplotlib über einen Zeitverlauf grafisch darstellen.

Der Link zu der CSV-Datei ist hier https://github.com/CSSEGISandData/COVID ... global.csv

Problem:Ich muss jetzt die einzelnen Spalten addieren, da in dieser CSV nur die Daten für jedes Land einzeln vorliegen und nicht wie benötigt weltweit pro Tag.
Kann mir jemand sagen wie ich das programmieren kann ?
Es soll zum Schluss eine Grafik entstehen in der die Infizierten weltweit über den zeitlichen Verlauf abgebildet werden.

Vielen Dank im Voraus
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Was hast Du bisher schon versucht? Was sollt Ihr benutzen? Pandas?
schingschank
User
Beiträge: 6
Registriert: Sonntag 7. Juni 2020, 13:25

Hey,
Ja mit Pandas.
Wir können bisher die Datei von der Webseite auslesen und bei uns als CSV lokal auf dem Rechner speichern.

Jetzt müssten wir die CSV bearbeiten, sodass wir alle Zeilen addieren damit wir für jeden Tag den aktuellen Wert weltweit der Infizierten haben.
Vielleicht als neue CSV abspeichern ?
Wissen allerdings nicht wie wir das programmieren.
schingschank
User
Beiträge: 6
Registriert: Sonntag 7. Juni 2020, 13:25

#Importiren der notwendigen Bibliotheken
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas_datareader.data as web
import pandas as pd
import requests
import io

#auslesen der Infizierten aus externer CSV Datei
url = 'https://raw.githubusercontent.com/CSSEG ... global.csv'
s=requests.get(url).content
c=pd.read_csv(io.StringIO(s.decode('utf-8')))


#ablegen in CSV Datei
c.to_csv('Infizierte.csv')

df = pd.read_csv('Infizierte.csv', parse_dates=True, index_col=0)
df.plot()
plt.show()
#ausgeben der Infizierten
print(c)
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Wichtig sind zu allererst gute Variablennamen. s und c sind das garantiert nicht.
datetime, style oder web werden zwar importiert, aber nicht genutzt.
Statt den content selbst zu dekodieren, benutzt man .text, aber statt erst den Text zu lesen und dann wieder in ein File-Ähnliches Objekt mit StringIO zu packen, benutzt man gleich die Tatsache, dass das Response-Objekt von requests sich wie ein File-Objekt verhält. Aber statt erst einen Request selbst zu erzeugen, benutzt man einfach Pandas, das direkt URLs lesen kann:

Code: Alles auswählen

url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv'
time_series = pd.read_csv(url)
Hast Du Dir schon die Dokumentation von so einem Pandas-Dataframe durchgelesen und mal überflogen, welche Methoden es gibt und welche denn für Dein Problem geeignet sein könnte.
Summieren heißt ja auf englisch ›sum‹.
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Übrigens: read_csv() hat auch einen Parameter für die Kodierung, falls das Einlesen mal aufgrund dessen nicht auf Anhieb klappen sollte.

Das Problem hört sich nach einem Fall für cumsum() an.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Nope, da sind nicht die neuen Fälle für jeden Tag, sondern die Gesamtfälle an jedem Tag gelistet. Einfaches `sum()` an der richtigen Stelle reicht. Nach dem man die Spalten losgeworden ist bei denen aufsummieren keinen Sinn macht. Also beispielsweise die Ländernamen und die Längen- und Breitengrade.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Hinweis zu den Daten: Wenn du die Anzahl der aktuell weltweit mit Corona infizierten haben willst (so klingt es im ersten Post), musst du noch die Werte der Datensätze 'deaths' und 'recovered' davon abziehen.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn man das macht, kann man diese Grafik damit erstellen:
Bild
🙂
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten