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
Covid19 Infizierte aus CSV auslesen und bearbeiten
-
- 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.
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.
-
- 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)
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)
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:
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‹.
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)
Summieren heißt ja auf englisch ›sum‹.
- __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
-
- 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.
- __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:



“Vir, intelligence has nothing to do with politics!” — Londo Mollari