Генерация случайного времени с интервалами 5 минут - PullRequest
2 голосов
/ 01 августа 2020

Я пытаюсь получить результат, который выглядит примерно так:

12:15
07:55
02:20
04:35

Мне удалось получить следующий результат:

2020-07-03 03:53:32
2020-07-20 08:01:15
2020-07-29 10:04:11
2020-07-07 07:17:24
2020-07-20 12:13:32

с помощью этого кода:

import datetime
import time
import random

MINTIME = datetime.datetime(2020,7,1,0,0,0)
MAXTIME = datetime.datetime(2020,7,31,0,0,0)

mintime_ts = int(time.mktime(MINTIME.timetuple())) #convert date into int
maxtime_ts = int(time.mktime(MAXTIME.timetuple())) #convert date into int

for RECORD in range(100):
    random_ts = random.randint(mintime_ts, maxtime_ts)
    RANDOMTIME = datetime.datetime.fromtimestamp(random_ts)
    print(RANDOMTIME)

Итак, в основном у меня две проблемы. Во-первых, я хочу получить время только в формате (чч: мм). Во-вторых, я хочу, чтобы шаг был 5 минут (что-то вроде 14:50 или 04:35 .. et c).

Спасибо

Ответы [ 6 ]

1 голос
/ 01 августа 2020

Вы можете определить количество 5-минутных интервалов между вашим минимальным и максимальным временем и выбрать один из этих интервалов случайным образом.

Для вывода используйте метод strftime, чтобы получить любой желаемый формат:

import datetime
import time
import random

MINTIME = datetime.datetime(2020,7,1,0,0,0)
MAXTIME = datetime.datetime(2020,7,31,0,0,0)

mintime_ts = int(time.mktime(MINTIME.timetuple())) #convert date into int
maxtime_ts = int(time.mktime(MAXTIME.timetuple())) #convert date into int

nb_slots = (maxtime_ts - mintime_ts)//(5*60)  # number of 5 minutes slots
for RECORD in range(10):
    random_slot = random.randint(0, nb_slots)
    random_ts = mintime_ts + 5*60 * random_slot
    RANDOMTIME = datetime.datetime.fromtimestamp(random_ts)
    print(datetime.datetime.strftime(RANDOMTIME, '%H:%M'))
    

Вывод:

11:20
15:20
11:25
02:10
13:30
08:30
00:45
06:10
17:05
01:00
0 голосов
/ 01 августа 2020

Следующее должно помочь:

# Необходимые пакеты

import datetime
import random
import numpy as np

# Определите диапазон минут (0-55, 60 означает 0) с размером шага 5

minute_range = np.arange(0,59,5)

# Определить диапазон часов (0,23, 24 означает 00)

hour_range = np.arange(0,24,1)

# случайным образом выбрать час и минуту и ​​преобразовать их в объект времени

a = datetime.time(random.choice(hour_range),random.choice(minute_range))

# преобразовать объект в строку

print(a.strftime("%H:%M"))

al oop для демонстрации:

for _ in range(5):
    a = datetime.time(random.choice(hour_range),random.choice(minute_range))
    print(a.strftime("%H:%M"))

# Вывод:

05:25
09:55
07:05
08:05
11:05

Надеюсь, я смогу помочь .

0 голосов
/ 01 августа 2020

Вам не нужно использовать функции datetime, просто используйте случайные функции для генерации случайных целых чисел в указанном интервале:

import random

for RECORD in range(100):
  print(
    #generate random int between 0 and 23 convert to string and pad by '0'
    str(random.randint(0,23)).rjust(2,'0') 
    # add devider
    + ':' + 
    # random int between 0 and 55 with step 5
    str(random.randint(0,11)*5).rjust(2,'0') 
  )
0 голосов
/ 01 августа 2020

Использование pandas

In [15]: import pandas as pd

In [16]: [i.strftime("%H:%M") for i in pd.date_range("01:13", "01:57", freq="5min").time]
Out[16]:
['01:13',
 '01:18',
 '01:23',
 '01:28',
 '01:33',
 '01:38',
 '01:43',
 '01:48',
 '01:53']
0 голосов
/ 01 августа 2020

Вы сохраняете время в секундах, поэтому вы можете просто разделить mintime_ts и maxtime_ts на 300 (60 * 5), а затем умножить результат randint обратно на 300.

С этим, вы случайным образом выбираете 5-минутную временную метку между минимальным и максимальным, который вы определили.

random_ts = random.randint(mintime_ts//300, maxtime_ts//300)*300

Для части форматирования вы можете использовать datetime strftime

print(RANDOMTIME.strftime("%H:%M"))

Сноска : вы также можете использовать random.choices для выборки случайных чисел с заменой (это означает, что число может быть выбрано более одного раза). Преимущество состоит в том, что вы можете указать функции, чтобы она выдавала вам все нужные числа сразу.

random.choices(
    # Define the population of numbers you want it to select from.
    # In your case this is any number that is a multiple of 300 (because of the 5 min)
    population=range(mintime_ts//300*300, maxtime_ts, 300),
    k=100 # Define how many numbers you want
)
0 голосов
/ 01 августа 2020
import datetime
import time
import random

MINTIME = datetime.datetime(2020,7,1,0,0,0)
MAXTIME = datetime.datetime(2020,7,31,0,0,0)

mintime_ts = int(time.mktime(MINTIME.timetuple())) #convert date into int
maxtime_ts = int(time.mktime(MAXTIME.timetuple())) #convert date into int

scale = 5*60

for RECORD in range(100):
    random_ts = random.randint(mintime_ts//scale, maxtime_ts//scale)*scale
    RANDOMTIME = datetime.datetime.fromtimestamp(random_ts)
    print(RANDOMTIME.strftime('%H:%M'))
...