Skip to content

Instantly share code, notes, and snippets.

@ivanjr0
Last active December 14, 2015 23:19
Show Gist options
  • Save ivanjr0/5165262 to your computer and use it in GitHub Desktop.
Save ivanjr0/5165262 to your computer and use it in GitHub Desktop.
intervalo_de_datas.py
import datetime
from functools import partial
converter_data = lambda d: datetime.datetime.strptime(
d, '%Y-%m-%d %H:%M:%S'
)
DATAS = map(converter_data,
"""2012-09-13 11:30:46
2013-01-28 19:36:31
2007-12-20 00:00:00
2011-09-27 11:29:01
2009-01-30 00:00:00
2013-01-06 19:42:16
2013-02-08 15:20:51
2010-04-28 11:59:12
2010-05-28 21:15:59
2008-05-26 00:00:00
2007-12-28 00:00:00
2011-12-26 20:53:01
2008-10-28 00:00:00
2013-03-04 00:40:48
2008-09-03 00:00:00
2011-04-17 12:22:50
2012-12-27 14:44:23
2012-11-22 03:42:58
2011-06-29 22:55:04
2012-09-13 11:52:33
2010-10-15 11:14:04
2011-05-01 21:13:10
2012-11-22 03:42:01
2013-02-04 08:51:37
2008-05-19 00:00:00
2011-11-05 22:07:38
2012-09-13 11:48:56
2010-12-01 22:40:15
2013-02-19 14:10:11
2010-08-26 12:18:01
2012-09-13 11:44:58
2011-05-30 10:41:31
2012-11-22 03:38:12
2012-09-13 11:50:22
2010-09-17 19:03:53
2007-12-25 00:00:00
2013-01-30 00:39:30
2011-08-30 22:52:49
2010-06-07 00:15:21
2012-11-25 03:12:21
2012-11-22 03:41:36
2011-12-24 22:50:35
2011-03-02 17:23:21
2012-09-13 11:39:10
2013-02-19 23:09:37
2012-09-13 11:43:29
2011-08-05 11:09:19
2005-11-29 00:00:00
2010-10-04 16:07:43
2011-01-25 18:49:12
2012-11-22 03:23:00
2010-09-23 18:50:27
2012-09-13 11:37:20
2010-09-03 00:58:22
2012-11-22 03:38:19
2011-02-22 08:33:10
2012-09-13 11:46:41
2012-11-22 03:38:24
2009-09-18 19:35:29
2009-05-26 00:00:00
2011-02-24 11:37:08
2011-03-17 20:15:21
2007-07-02 00:00:00
2012-11-22 03:44:50
2012-11-22 03:35:05
2009-03-20 00:00:00
2012-09-13 11:39:32
2011-08-09 15:31:55
2012-12-22 09:52:49
2013-01-01 23:19:46
2013-03-03 11:19:07
2008-10-21 00:00:00
2012-11-22 03:43:04
2010-09-20 20:44:47
2006-12-05 00:00:00
2011-12-27 20:44:34
2013-01-24 18:33:12
2012-11-22 03:38:55
2008-08-06 00:00:00
2009-11-27 18:20:25
2010-04-28 14:25:02
2011-03-07 23:35:00
2010-11-17 10:09:08
2009-05-15 00:00:00
2008-06-20 00:00:00
2010-11-13 15:16:57
2012-09-13 11:47:41
2012-12-27 13:53:16
2009-07-23 16:17:35
2009-05-05 00:00:00
2010-05-09 15:17:31
2010-01-15 18:07:44
2011-04-04 19:18:10
2011-05-02 20:05:22
2011-12-06 23:49:39
2013-02-08 23:10:49
2007-06-04 00:00:00
2009-07-21 12:01:04
2006-04-28 00:00:00
2012-12-21 20:15:07
2013-01-30 16:05:41
2013-02-22 09:10:59
2013-02-27 18:17:13
2013-02-26 16:08:07
2009-12-23 16:43:35
2009-10-27 13:16:38
2013-02-07 22:01:55
2012-01-17 15:28:38
2010-03-30 18:23:38
2010-05-01 19:15:49
2010-09-03 08:02:26
2012-09-13 11:27:22
2011-06-24 10:28:53
2011-10-19 00:30:57
2010-11-22 18:56:00
2009-12-04 15:23:21
2011-09-19 12:37:02
2012-12-05 03:12:07
2011-12-11 02:46:28
2008-12-27 00:00:00
2010-05-30 22:18:38
2008-03-18 00:00:00
2010-09-11 15:36:53
2011-05-31 10:13:09
2009-03-30 00:00:00
2010-11-15 14:52:39
2008-03-18 00:00:00
2012-09-13 11:54:31
2012-11-22 03:45:29
2010-07-20 22:20:54
2012-09-13 11:41:32
2007-11-25 00:00:00
2009-03-02 00:00:00
2011-03-23 15:36:51
2011-10-23 09:27:25
2012-11-28 03:12:44
2010-04-01 13:48:35
2006-01-29 00:00:00
2012-11-22 03:43:03
2012-11-22 03:41:15
2012-09-13 11:48:17
2010-01-28 09:36:42
2010-09-20 13:04:40
2010-06-03 15:58:46
2011-11-13 13:07:17
2010-08-24 18:11:47
2009-04-01 00:00:00
2010-07-11 00:44:48
2012-11-22 03:40:35
2008-03-20 00:00:00
2008-12-15 00:00:00
2010-07-27 23:18:01
2013-03-07 20:36:33
2011-08-18 12:38:38
2010-09-17 11:58:06
2013-03-10 18:15:22
2008-02-06 00:00:00
2005-11-22 00:00:00
2011-03-23 16:17:19
2012-09-13 11:48:46
2010-05-11 17:05:10
2011-05-25 10:07:29
2011-01-25 22:02:39
2012-12-29 08:02:26
2008-11-17 00:00:00
2008-10-17 00:00:00
2012-09-13 11:57:30
2010-07-05 04:11:15
2009-05-26 00:00:00
2010-10-03 19:43:48
2011-01-21 13:53:27
2012-01-24 03:44:30
2008-07-24 00:00:00
2009-08-31 09:19:27
2011-04-17 21:34:53
2013-03-13 01:14:44
2009-02-05 00:00:00
2012-09-13 11:33:40
2011-03-23 23:07:07
2009-08-25 23:59:22
2013-02-22 11:28:51
2012-12-04 03:12:14
2010-04-01 11:33:10
2011-03-03 18:38:04
2012-09-13 11:55:56
2011-03-25 12:30:36
2010-12-10 23:18:59
2013-03-05 12:56:17
2007-08-13 00:00:00
2012-09-13 11:40:39
2011-06-09 22:59:49
2011-07-12 00:24:04
2010-10-11 17:23:35
2012-11-22 03:44:23
2013-02-09 12:45:02
2011-12-22 16:14:15
2009-07-07 00:00:00
2012-11-22 03:38:32
2009-10-05 20:02:07
2012-09-13 11:34:02
2010-06-07 01:49:38
2010-09-08 06:22:05
2013-03-10 10:39:18
2010-05-13 13:09:04
2012-09-13 11:46:43
2006-09-29 00:00:00
2009-02-13 00:00:00
2011-02-16 13:43:02
2011-04-13 11:50:17
2012-11-22 03:39:17
2012-09-13 11:41:10
2010-06-02 06:54:25
2008-08-09 00:00:00
2012-09-13 11:39:55
2009-05-03 00:00:00
2008-03-26 00:00:00
2008-12-16 00:00:00
2009-11-21 10:10:38
2012-09-13 11:39:33
2008-01-14 00:00:00
2012-11-22 03:39:01
2010-09-06 21:11:11
2013-03-11 10:25:07
2007-02-09 00:00:00
2010-04-10 11:26:05
2011-07-12 20:28:43
2010-02-04 21:22:14
2012-09-13 11:55:25
2013-01-29 21:25:40
2013-03-07 12:29:48
2009-09-02 08:14:31
2010-08-24 01:27:22
2011-06-01 11:21:19
2013-02-23 11:33:27
2012-09-13 11:33:40
2011-07-11 11:09:17
2012-09-13 11:45:45
2012-11-22 03:36:19
2011-08-02 17:00:51
2012-09-13 11:43:08
2012-09-13 11:33:32
2006-11-27 00:00:00
2009-11-06 16:54:37
2011-10-12 08:59:31
2012-09-13 11:45:32
2012-09-13 11:38:05
2007-11-01 00:00:00
2009-12-06 11:59:40
2012-12-06 03:12:07
2012-01-10 10:32:26
2013-01-20 13:17:03
2010-04-06 05:16:20
2008-01-01 00:00:00
2012-09-13 11:40:39
2011-03-14 19:24:05
2009-01-12 00:00:00
2008-07-09 00:00:00
2012-09-13 11:31:23
2010-10-13 14:50:57
2007-06-25 00:00:00
2007-08-22 00:00:00
2013-03-05 00:59:43
2006-07-05 00:00:00
2010-06-27 14:12:47
2010-05-08 20:40:08
2011-08-15 17:00:01
2008-10-02 00:00:00
2012-09-13 11:45:33
2013-02-07 12:26:44
2012-09-13 11:35:04
2010-02-17 14:20:28
2009-12-06 12:05:23
2009-10-17 23:19:03
2012-11-22 03:34:27
2009-03-10 00:00:00
2010-11-02 00:54:59
2011-12-13 23:50:24
2011-03-26 16:04:28
2007-06-25 00:00:00
2008-02-10 00:00:00
2010-10-06 19:42:06
2011-05-11 20:19:15
2012-09-13 11:38:37
2013-02-05 13:56:47
2007-11-27 00:00:00
2011-01-29 23:04:57
2009-11-05 07:51:47
2012-09-13 11:33:28
2010-11-28 02:55:23
2010-05-28 08:25:14
2009-05-13 00:00:00
2010-09-29 10:05:53
2010-06-23 22:44:13
2012-09-13 11:36:19
2011-02-08 15:36:01
2012-11-22 03:35:48
2012-09-13 11:27:56
2008-11-03 00:00:00
2012-09-13 11:46:20
2007-08-17 00:00:00
2009-06-26 00:00:00
2008-12-18 00:00:00
2012-11-22 03:23:00
2009-09-16 23:26:25
2010-08-26 19:49:03
2010-01-07 20:23:36
2010-04-08 13:49:46
2012-09-13 11:36:16
2012-09-13 11:45:40
2011-02-03 04:16:48
2010-05-28 15:48:02
2009-02-06 00:00:00
2011-07-05 10:14:39
2009-06-28 00:00:00
2012-09-13 11:36:37
2013-01-09 17:24:30
2013-03-02 14:18:03
2008-12-03 00:00:00
2007-11-03 00:00:00
2009-08-08 16:10:20
2012-09-13 11:29:51
2011-11-23 00:25:51
2007-03-17 00:00:00
2010-05-02 12:17:34
2011-04-15 12:03:11
2009-01-21 00:00:00
2013-02-27 01:35:04
2010-05-06 22:28:30
2008-06-22 00:00:00
2010-03-19 16:53:41
2012-09-13 11:39:58
2007-09-25 00:00:00
2010-12-31 20:11:14
2012-09-13 11:38:53
2012-09-13 11:27:56
2009-02-09 00:00:00
2012-09-13 11:34:22
2012-11-22 03:36:32
2011-04-06 16:12:12
2013-02-28 19:26:31
2011-03-30 02:51:44
2011-09-03 02:39:53
2011-11-30 16:58:16
2011-04-14 04:43:34
2013-01-11 17:18:40
2013-01-09 12:58:04
2012-11-22 03:41:17
2012-09-13 11:54:43
2012-09-13 11:37:41
2010-12-18 13:37:35
2012-11-22 03:38:18
2012-11-22 03:41:26
2011-08-07 02:38:42
2012-11-22 03:44:22
2008-05-07 00:00:00
2009-10-23 15:40:28
2010-08-19 10:39:57
2012-09-13 11:47:36
2009-09-27 19:01:54
2013-03-12 16:37:43
2009-08-17 11:55:40
2010-12-25 14:11:52
2011-07-09 22:29:04
2006-11-29 00:00:00
2010-07-01 17:59:32
2012-09-13 11:39:07
2009-09-23 23:10:57
2013-02-16 19:20:47
2009-04-17 00:00:00
2009-06-23 00:00:00
2012-01-07 09:53:05
2013-01-14 23:22:38
2013-01-27 12:16:09
2010-01-12 01:30:29
2011-08-03 19:32:41
2013-03-09 11:28:21
2012-09-13 11:35:35
2012-11-24 03:12:04
2011-06-08 21:52:27
2011-01-11 15:37:13
2010-10-03 21:49:56
2013-03-10 18:29:43
2011-05-11 06:25:08
2008-01-04 00:00:00
2012-09-13 11:25:48
2011-04-20 15:55:41
2010-03-22 11:46:59
2010-01-18 13:30:10
2008-09-24 00:00:00
2008-06-26 00:00:00
2010-05-11 11:59:43
2011-05-24 15:08:04
2009-01-24 00:00:00
2012-11-30 03:12:10
2011-05-06 20:13:16
2012-09-13 11:34:19
2010-05-07 19:39:48
2009-09-29 23:10:39
2011-04-25 14:38:33
2007-04-01 00:00:00
2007-08-23 00:00:00
2010-03-08 11:41:44
2013-01-26 17:18:12
2011-06-03 13:01:38
2008-02-11 00:00:00
2010-05-01 23:55:17
2008-11-21 00:00:00
2013-02-05 10:42:18
2011-01-24 14:23:15
2009-09-19 14:36:26
2010-03-19 16:58:10
2010-07-01 09:03:01
2010-02-04 15:49:36
2012-09-13 11:39:13
2009-07-23 09:36:59
2009-05-29 00:00:00
2012-09-13 11:30:11
2011-04-27 17:17:18
2013-03-09 11:03:15
2010-06-23 01:11:59
2013-03-13 23:13:41
2012-11-22 03:43:33
2011-11-18 17:03:50
2010-05-06 03:38:50
2011-06-29 23:41:00
2010-09-25 00:16:55
2013-03-04 23:40:16
2012-11-22 03:37:31
2012-09-13 11:49:45
2012-09-13 11:29:49
2010-11-10 03:29:30
2010-12-15 19:02:30
2010-12-19 17:19:48
2013-01-10 11:56:18
2012-09-13 11:34:22
2013-01-13 17:42:05
2012-09-13 11:53:42
2012-12-26 21:03:22
2010-09-09 18:50:50
2012-09-13 11:56:41
2008-01-10 00:00:00
2009-06-03 00:00:00
2012-09-13 11:38:04
2012-09-13 11:54:34
2010-06-29 20:12:13
2012-09-13 11:53:23
2011-08-05 15:06:19
2013-03-01 13:31:38
2008-03-30 00:00:00
2010-12-21 19:31:48
2011-04-09 14:06:35
2010-01-21 13:15:09
2010-09-02 15:04:55
2013-01-28 17:10:24
2010-08-10 08:24:06
2012-09-13 11:32:20
2010-08-23 12:17:38
2010-05-21 10:29:50
2012-11-22 03:45:51
2011-11-15 10:05:38
2011-07-13 21:22:59
2013-01-25 03:56:56
2007-10-01 00:00:00
2010-03-10 20:31:33
2012-11-22 03:44:21
2012-09-13 11:30:41
2010-08-25 08:53:34
2010-01-23 14:27:09
2006-04-05 00:00:00
2013-02-05 02:15:20
2011-10-26 22:32:39
2012-09-13 11:55:15
2008-09-11 00:00:00
2012-11-22 03:39:21
2009-09-30 17:50:09
2009-05-05 00:00:00
2011-03-18 21:14:05
2013-02-27 21:41:29
2007-08-01 00:00:00
2009-10-28 19:20:38
2006-03-02 00:00:00
2010-09-04 20:51:08
2013-03-02 09:35:48
2010-01-06 00:21:03
2012-09-13 11:48:45
2012-11-22 03:45:01
2012-09-13 11:57:34
2012-12-23 17:44:14
2012-01-20 09:55:15
2007-10-09 00:00:00
2011-11-21 22:06:38
2010-08-11 23:13:27
2012-09-13 11:39:30
2013-02-14 19:55:37
2012-11-22 03:44:10
2012-11-22 03:35:01""".split('\n'))
def date_range(start, stop, step):
swp, current = None, start
while current < stop:
swp, current = current, step(current)
yield swp
def intervalos(datas, maximo_de_intervalos=4):
if len(datas) == 1:
return [datas]
maior = max(*datas)
menor = min(*datas)
altura = maior - menor
if altura < datetime.timedelta(days=1):
return [datas]
altura_total = datetime.timedelta(days=altura.days)
n_de_intervalos = len(datas)
if n_de_intervalos > maximo_de_intervalos:
n_de_intervalos = maximo_de_intervalos
altura = datetime.timedelta(days=altura_total.days / n_de_intervalos)
def step(d):
d += altura
return d
intervalos = []
pontos = sorted(date_range(menor, maior, step), reverse=True)
for indice, ponto in enumerate(pontos):
try:
proximo = pontos[indice + 1]
except IndexError:
proximo = datetime.datetime.min
for data in datas:
if ponto >= data > proximo:
atual.append(data)
return intervalos
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment