c

codeye

V1

2022/09/23阅读:10主题:默认主题

6 kyu Data Analysis Following Migration

感知器算法如何工作

故事 贵公司将过去20年的重要数据分阶段迁移到一个新的平台。然而,有些事情出了差错:一些重要的时间戳被弄乱了!看起来,一些服务器被设置为使用日/月/年格式。看起来,一些服务器被设置为使用dd/mm/yyyy日期格式,而其他服务器在迁移过程中使用mm/dd/yyyy格式。不幸的是,原始数据库在这个过程中被破坏了,而且没有备份可用...... 现在就看你如何评估损失了。

任务 你将收到以ISO yyyy-mm-dd格式给出的[start_date, end_date]形式的记录列表,你的任务是计算这些记录有多少条。

正确的:日期不能有任何问题,月/日不能混淆,或者它不能以任何其他方式成为一个有效的时间戳;例如

["2015-04-04""2015-05-13"]

可恢复:目前的形式是无效的,但原始的时间戳可以恢复,因为只有一种有效的组合可能;例如

["2011-10-08""2011-08-14"]

不确定:一个或两个日期是模糊的,它们可能会产生多个有效的时间戳,所以不能检索到原始的时间戳;例如:

["2002-02-07""2002-12-10"]

注意:原始记录总是定义一个非负的持续时间

在一个数组中返回你的发现。

[correct_count, recoverable_count, uncertain_count ] 

例子


["2015-04-04""2015-05-13"] --> 正确 
# 这里没有(可能有)错误

["2013-06-18""2013-08-05"] --> 正确 
# 结束日期是不明确的,但这是唯一可能的有效版本

["2001-02-07""2001-03-01"] --> 正确 
# 两个日期都是模糊的,但这是唯一可能的有效版本

["2011-10-08""2011-08-14"] --> 可恢复 
# 开始日期是错误的,但可以被纠正因为只有一个可能的有效版本

["2009-08-21""2009-04-12"] --> 可恢复 
# 结束日期是错误的,但可以修正因为只有一个可能的有效版本

["1996-01-24""1996-03-09"] --> 不确定 
# 结束日期是模糊的(也可能是1996-09-03)

["2000-10-09""2000-11-20"] --> 不确定 
# 开始日期不明确(也可能是2000-09-10)

["2002-02-07""2002-12-10"] --> 不确定 
# 两个日期都是模糊的,并且有 多个可能的有效版本

数据科学经常遇到数据格式问题!

def candidates(ymd):
    y, m, d = ymd.split('-')
    return {ymd, f'{y}-{d}-{m}'}

def check_dates(records):
    result = [0, 0, 0]
    for start, end in records:
        xs = [(dt1, dt2) for dt1 in candidates(start) for dt2 in candidates(end)
              if dt1 <= dt2 and dt1[5:7] <= '12' >= dt2[5:7]]
        i = 2 if len(xs) > 1 else xs[0] != (start, end)
        result[i] += 1  # 2: uncertain, 1(True): recoverable, 0(False): correct
    return result

super!

分类:

后端

标签:

后端

作者介绍

c
codeye
V1