Что самый простой путь состоит в том, чтобы дополнить пустые даты в результатах sql (или на mysql или на конце жемчуга)?

Да, проблема в том, что встроенные наборы данных Keras не определяются с помощью Dataset API, но если вы все еще хотите использовать класс набора данных (который имеет много преимуществ), есть несколько способов (я знаю о ) продолжить.

  1. вы можете создать свой собственный экземпляр класса Dataset, как это было сделано в этого урока
  2. , если вы используете версию TensorFlow> = 1.12.0, Вы можете установить новую библиотеку tensorflow-datasets , которая также имеет Fashion MNIST, уже загруженную как tf.Data.Datasets

Надеюсь, это поможет! : просто заметил, что он не отвечает на ваш вопрос полностью. Вы не сможете использовать конкретную строку кода, о которой вы говорите, так как функция next_batch определена в модуле tf.contrib.learn специально для mnist здесь . Но тогда вы могли бы использовать tf.Data.Iterator, который перебирает набор данных и выполняет ту же функцию.

33
задан user13196 16 September 2008 в 19:58
поделиться

7 ответов

При необходимости в чем-то как этот на стороне сервера Вы обычно составляете таблицу, которая содержит все возможные даты между двумя моментами времени и затем оставила соединение этой таблицей с результатами запроса. Что-то вроде этого:

create procedure sp1(d1 date, d2 date)
  declare d datetime;

  create temporary table foo (d date not null);

  set d = d1
  while d <= d2 do
    insert into foo (d) values (d)
    set d = date_add(d, interval 1 day)
  end while

  select foo.d, count(date)
  from foo left join table on foo.d = table.date
  group by foo.d order by foo.d asc;

  drop temporary table foo;
end procedure

В данном случае было бы лучше поместить немного, проверяют сторону клиента, если текущая дата не является previos+1, поместите некоторые дополнительные строки.

20
ответ дан 27 November 2019 в 18:38
поделиться

Когда я должен был иметь дело с этой проблемой, для заполнения недостающих дат я на самом деле составил ссылочную таблицу, которая просто содержала все даты, которыми я интересуюсь и присоединился к таблице данных в день поле. Это сыро, но это работает.

SELECT DATE(r.date),count(d.date) 
FROM dates AS r 
LEFT JOIN table AS d ON d.date = r.date 
GROUP BY DATE(r.date) 
ORDER BY r.date ASC;

Что касается вывода, я просто использовал бы ВЫБОР В OUTFILE вместо того, чтобы генерировать CSV вручную. Оставляет нас избавленными от волнения по поводу выхода из специальных символов также.

7
ответ дан 27 November 2019 в 18:38
поделиться

не немой, это не что-то, что MySQL делает, вставляя пустые значения даты. Я делаю это в жемчуге с двухступенчатым процессом. Во-первых, загрузите все данные из запроса в хеш, организованный по дате. Затем я создаю Дату:: объект EzDate и инкремент это днем, таким образом...

my $current_date = Date::EzDate->new();
$current_date->{'default'} = '{YEAR}-{MONTH NUMBER BASE 1}-{DAY OF MONTH}';
while ($current_date <= $final_date)
{
    print "$current_date\t|\t%hash_o_data{$current_date}";  # EzDate provides for     automatic stringification in the format specfied in 'default'
    $current_date++;
}

, где окончательный срок является другим объектом EzDate или строкой, содержащей конец Вашего диапазона дат.

EzDate не находится на CPAN прямо сейчас, но можно, вероятно, найти другую модификацию жемчуга, которая сделает, дата выдерживает сравнение, и обеспечьте инкрементор даты.

4
ответ дан 27 November 2019 в 18:38
поделиться

Вы могли использовать объект DateTime:

use DateTime;
my $dt;

while ( my ($date, $sum) = $sth->fetchrow )  {
    if (defined $dt) {
        print CSV $dt->ymd . ",0\n" while $dt->add(days => 1)->ymd lt $date;
    }
    else {
        my ($y, $m, $d) = split /-/, $date;
        $dt = DateTime->new(year => $y, month => $m, day => $d);
    }
    print CSV, "$date,$sum\n";
}

то, Что делает вышеупомянутый код, является им, сохраняет последнюю печатную дату сохраненной в DateTime объект $dt, и когда текущая дата составляет больше чем один день в будущем, он увеличивает $dt на один день (и печатает его строка к CSV), пока он не совпадает с текущей датой.

Этот способ, которым Вам не нужны дополнительные таблицы, и не должными быть выбирать все Ваши строки заранее.

4
ответ дан 27 November 2019 в 18:38
поделиться

Так как Вы не знаете, где разрывы, и все же Вы хотите все значения (по-видимому), от первого свидания в Вашем списке к последнему, сделайте что-то как:

use DateTime;
use DateTime::Format::Strptime;
my @row = $sth->fetchrow;
my $countdate = strptime("%Y-%m-%d", $firstrow[0]);
my $thisdate = strptime("%Y-%m-%d", $firstrow[0]);

while ($countdate) {
  # keep looping countdate until it hits the next db row date
  if(DateTime->compare($countdate, $thisdate) == -1) {
    # counter not reached next date yet
    print CSV $countdate->ymd . ",0\n";
    $countdate = $countdate->add( days => 1 );
    $next;
  }

  # countdate is equal to next row's date, so print that instead
  print CSV $thisdate->ymd . ",$row[1]\n";

  # increase both
  @row = $sth->fetchrow;
  $thisdate = strptime("%Y-%m-%d", $firstrow[0]);
  $countdate = $countdate->add( days => 1 );
}

Хм, который оказался более сложным, чем, я думал, что это будет.. Я надеюсь, что это имеет смысл!

1
ответ дан 27 November 2019 в 18:38
поделиться

Используйте некоторый модуль Perl, чтобы сделать вычисления даты, как рекомендуемый DateTime или Время:: Часть (ядро от 5,10). Просто инкрементная дата и дата печати и 0 до даты будут соответствовать текущий.

0
ответ дан 27 November 2019 в 18:38
поделиться

Я не знаю, работало ли это, но что было бы, если Вы составили новую таблицу, которая содержала все возможные даты (который мог бы быть проблемой с этой идеей, если диапазон дат собирается измениться непредсказуемо...), и затем левое присоединяется на этих двух таблицах? Я предполагаю, что это - сумасшедшее решение, если существует огромное количество возможных дат или никакой способ предсказать первую и последнюю дату, но если диапазон дат или фиксируется или легок удаться, то это могло бы работать.

-1
ответ дан 27 November 2019 в 18:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: