0

我有一个数据可视化问题,我想得到一些输入。我目前正在使用 python pandas 清理数据集,然后将其上传到 SISENSE 以供使用。我想要做的是可视化根据特定任务的开始和结束日期按周/月分组的活动工作。例如,我有一组具有以下开始日期的作业,在数据框中按行组织:

作业 ID 开始日期 结束日期

工作 1 2020 年 5 月 25 日 2020 年 6 月 7 日

工作 2 2020 年 5 月 25 日 2020 年 5 月 31 日

在 2020 年 5 月 25 日这一周,我有两个在职工作,在 2020 年 6 月 1 日这一周,我有一个在职工作。可视化应该看起来像一个条形图,x 轴是周/时间段,y 轴是活动作业的计数。

我怎样才能最好地将它组织成一个数据框并可视化它?

4

2 回答 2

0

就像是

    df = pd.DataFrame({'Job ID': [1,2], 'Start Date': ['5/25/2020', '5/25/2020'], 'End Date': ['6/7/2020', '5/31/2020']})

然后,您可以应用一个函数来生成一个新列 'week beginning' - 在这里查看 python 中的解决方案Get week start date (Monday) from a date column in Python (pandas)?

import datetime as dt
# Change 'myday' to contains dates as datetime objects
df['Start Date'] = pd.to_datetime(df['Start Date'])  
# 'daysoffset' will container the weekday, as integers
df['daysoffset'] = df['Start Date'].apply(lambda x: x.weekday())
# We apply, row by row (axis=1) a timedelta operation
df['Week Beginning'] = df.apply(lambda x: x['Start Date'] - dt.TimeDelta(days=x['daysoffset']), axis=1)

然后是本周开始的 groupby

counr = df.groupby(df['Week Beginning']).sum()

在此之后,您可以使用

count_by_job_id = count['Job ID']
pd.DataFrame(count_by_job_id).plot.bar()
于 2020-05-27T20:14:04.617 回答
0

您需要在 Sisense elasticube 中使用自定义 SQL 才能轻松完成这项工作。然后,您将使用 dim_dates 加入您的数据框表(来自以下链接的 excel 文件)

这类似于此处描述的场景:https: //support.sisense.com/hc/en-us/articles/230644208-Date-Dimension-File

您的自定义 SQL 将是这样的:

  Select JobID, 
         CAST(startdate as date) as Startdate, 
         CAST(enddate as date) as Enddate,
         C.RECORD_DATE AS week_start
  FROM JOB j
  JOIN tbl_Calendar C ON c.RECORD_DATE BETWEEN j.StartDate and j.EndDate
  WHERE DATENAME(DW,C.RECORD_DATE) = 'MONDAY'

然后您可以创建一个柱形图并将字段week_start(您可以以几种不同的方式格式化)放在类别部分下,并将字段计数(JOBID)放在值部分下。

在此处输入图像描述

于 2020-05-29T18:38:24.287 回答