Хотите сгруппировать набор данных Covid 19 по континентам с помощью pandas, но предполагаемая визуализация неверна в Plotly - PullRequest
2 голосов
/ 14 июля 2020

Я новичок во всем этом, и сейчас я учусь Python. Я знаю основы, но сейчас у меня проблема с набором данных о covid-19, в котором я хочу сгруппировать по континентам, чтобы получить общий уровень смертности в Европе, Азии и т. Д. c. Когда я смотрю на визуализацию, я вижу только «другие» и слишком много линий. Надеюсь, ты поможешь мне и расскажешь, что я делаю не так. Прямо сейчас я думаю, что проблема заключается в l oop.

мой код:

import pandas as pd
import plotly.offline as pyo
import plotly.graph_objs as go

df = pd.read_csv("https://opendata.ecdc.europa.eu/covid19/casedistribution/csv")
df.set_index("continentExp", inplace=True)
del df["countryterritoryCode"], df["Cumulative_number_for_14_days_of_COVID-19_cases_per_100000"], df["geoId"], df["countriesAndTerritories"]

data = []

for name in df.index.unique():
   trace = go.Scatter(
    x = df["dateRep"], 
    y = df["deaths"],
    name = name,
    mode = "lines"
    )
   data.append(trace)

layout = go.Layout(
            title = "Covid-19 Dashboard",
            xaxis = {"title" : "Datum"},
            yaxis = {"title" : "Tote"})

fig = go.Figure(data=data, layout=layout)

pyo.plot(fig)

1 Ответ

2 голосов
/ 14 июля 2020

Мне кажется, у вас проблема с pandas, а не с plotly. Если вы ищете ежедневные смерти по континентам, вам следует использовать groupby.

Упорядочить данные

import pandas as pd
import plotly.express as px
import plotly.graph_objs as go

df = pd.read_csv("https://opendata.ecdc.europa.eu/covid19/casedistribution/csv")

# better to have data as datetime
df["dateRep"] = df["dateRep"].astype("M8")
# the previous is equivalent to
# df["dateRep"] = pd.to_datetime(df["dateRep"])

# now you want to look for the daily deaths 
# for every continent
grp = df.groupby(["continentExp","dateRep"])["deaths"]\
        .sum().reset_index()

используя plotly.express

fig = px.line(grp, 
              x="dateRep", 
              y="deaths", 
              color="continentExp",
              labels={"deaths":"Tote",
                      "dateRep":"Datum"})

fig.update_layout(title="Covid-19 Dashboard",
                  title_x=0.5)

enter image description here

Using plotly.graph_objs

fig = go.Figure()
continents = grp["continentExp"].unique()
for continent in continents:
    ts = grp[grp["continentExp"]==continent]
    fig.add_trace(
    go.Scatter(x=ts["dateRep"],
               y=ts["deaths"],
               name=continent))

fig.update_layout(title="Covid-19 Dashboard",
                  title_x=0.5,
                  xaxis={"title" : "Datum"},
                  yaxis={"title" : "Tote"})

введите описание изображения здесь

...