谁能帮我解决这个问题?我试图在 Jupyter Notebook 中使用 Dash 制作日期选择器范围,但没有出现如下图所示的数字。如果有错误,任何人都可以纠正我的代码吗?请赐教。
我正在使用这个数据集 数据集
这是我的代码,如下所示
collisions = (
pd.read_csv("NYC_Collisions.csv")
.astype({"ACCIDENT_DATE": "datetime64[ns]"})
.loc[:,["ACCIDENT_DATE", "BOROUGH", "COLLISION_ID"]]
.groupby(["ACCIDENT_DATE", "BOROUGH"], as_index=False)
.count()
.rename(columns={
"COLLISION_ID":"COLLISIONS",
"ACCIDENT_DATE":"DATE"})
)
collisions.head()
from datetime import datetime
from datetime import date
app = Dash(__name__)
app.layout = html.Div([
dcc.DatePickerRange(
id="date picker",
min_date_allowed=collisions["DATE"].min(),
max_date_allowed=collisions["DATE"].max(),
initial_visible_month=collisions["DATE"].max(),
start_date=collisions["DATE"].min(),
end_date=date(2022,1,1),
),
dcc.Graph(id="graph")
])
@app.callback(Output("graph", "figure"),
[Input("date picker", "start_date"),
Input("date picker", "end_date"),])
def plot_collisions_bar(start_date, end_date):
fig = px.bar(
(collisions
.loc[collisions["DATE"].between(start_date, end_date)]
.groupby("BOROUGH", as_index=False)
.sum()
)
,
x="COLLISIONS",
y="BOROUGH",
title=f"Traffic Accidents in NYC between {start_date[:10]} and {end_date[:10]}"
)
return fig
if __name__ == "__main__":
app.run_server(mode="inline", port=8001, width="60%")
我认为问题来自:
fig = px.bar(
(collisions
.loc[collisions["DATE"].between(start_date, end_date)]
.groupby("BOROUGH", as_index=False)
.sum()
)
所以也许你应该更改你的代码如下以使其工作:
collisions = (
pd.read_csv("NYC_Collisions.csv")
.astype({"ACCIDENT_DATE": "datetime64[ns]"})
.loc[:,["ACCIDENT_DATE", "BOROUGH", "COLLISION_ID"]]
.groupby(["ACCIDENT_DATE", "BOROUGH"], as_index=False)
.count()
.rename(columns={
"COLLISION_ID":"COLLISIONS",
"ACCIDENT_DATE":"DATE"})
)
collisions.head()
from datetime import datetime
from datetime import date
app = Dash(__name__)
app.layout = html.Div([
dcc.DatePickerRange(
id="date picker",
min_date_allowed=collisions["DATE"].min(),
max_date_allowed=collisions["DATE"].max(),
initial_visible_month=collisions["DATE"].max(),
start_date=collisions["DATE"].min(),
end_date=date(2022,1,1),
),
dcc.Graph(id="graph")
])
@app.callback(Output("graph", "figure"),
[Input("date picker", "start_date"),
Input("date picker", "end_date"),])
def plot_collisions_bar(start_date, end_date):
df2 = collisions[collisions["DATE"].between(start_date, end_date)]
df3 = pd.pivot_table(df2, index='BOROUGH', values='COLLISIONS', aggfunc=np.sum).reset_index()
fig = px.bar(df3,
x="COLLISIONS",
y="BOROUGH",
title=f"Traffic Accidents in NYC between {start_date[:10]} and {end_date[:10]}"
)
return fig
if __name__ == "__main__":
app.run_server(mode="inline", port=8001, width="60%")