dlinyj: (Default)
[personal profile] dlinyj
Этот пост больше похож на поток новогоднего сознания, нежели на сверхнаучный трактат и полезную информацию. [livejournal.com profile] alex_avr2 может этот пост вообще смело пропускать.

У меня уже более 12 дней трудится и логит мой генератор случайных чисел, в серверной, которая запрятана в плите. За это время он налогал 1,7 гига сырых данных. Файл выглядит примерно вот так:


...
577693
2013.01.01.21.27.06.
2133187
125195
...
277038
202675
2013.01.01.21.27.07.
...

Где длинные строки - это, как можно догадаться, дата в хитром формате: ГГГГ.ММ.ДД.ЧЧ.ММ.СС. . Почему так, не спрашивайте, примерно ответ следующий: нет ничего более постоянного, чем временное. Время выводится ровно каждую секунду. Цифирки - это количество тиков процессора между регистрацией заряженных частиц. Процессор работает примерно на частоте 80 МГц, по сему это очень малые значения.

Файлик можно скачать тута (1,7 ГБ)


Мне было лениво делать обработку конкретно по интервалам (которая подчиняется экспоненциальному распределению) , и я сделал просто обработку событийную (которая подчиняется распределению Пуассона) . Надо отметить, что при таких количествах можно пренебречь распределением Пуассона и считать онное распределение нормальным.

Небольшую программу, которая тупо считает количество событий между временными точками и формирует файл результата. Если отбросить инициализацию переменных, девайны, открытие файлов, то она сводится к следующему:

while(!feof(fp_datafile))
    {
        i=0;
        while(!feof(fp_datafile))
        {
            fscanf(fp_datafile, "%s", exchange_buff);
            if (strrchr(exchange_buff,'.')==NULL) rad_counter++;
            else {
                fprintf(fp_math,"%s\t%d\n",exchange_buff, rad_counter);
                rad_counter=0;
            }
            
            i++;

        }

    }


Читает построчно файл, проверяет есть ли в строке символ '.', если есть, производит запись в файл время и количество вхождений.

После чего, полученный файл можно построить с помощью скрипта

#! /usr/bin/gnuplot -persist
#set terminal postscript eps enhanced color solid
#set output "result.ps"

set terminal png size 800, 600
set output "result.png"
set grid xtics ytics

set xlabel "Time" 
set ylabel "Counter" rotate by 90

set xdata time
set timefmt x "%Y.%m.%d.%H.%M.%S."
set xtics rotate by 270
set xrange ["2012.12.19.23.11.50.":"2013.01.01.21.27.07."]

set style line 1 lt 1 lw 1

plot "math_t.dat" using 1:2 title "График \"тиков\" в секунду" with lines linestyle 3




И получить следующую картинку:


Результирующий шум, распределённый по закону Пуассона


Если бы я был работником RenTV, то я бы озадачился Поиском грубинного смысла в этом графике. Но пока его там нет. И как видно из дат, никаких безумных всплесков в указанные числа не произошло. Но! Если их не видно на глаз, а я не питал иллюзий, что будет всё так просто, это не значит, что распределение в эти моменты ведёт себя как-то не так. Вот тут нужно подключить матан.

Для начала надо будет посчитать математическое ожидание, положим 60 точек (т.е. за минуту), потом взять медианное значение этого математического ожидания (например 10 минут), и потом уже попробовать построить такой график. Говоря более простым языком, я хочу отфильтровать математическое ожидание, чтобы получить более гладкую кривую, а не такой фаршмак.


З.Ы. ЖЖ вечно лежит, хоть переходи на автономный блог. У меня есть такой http://dlinyj.ru , но я не являюсь его хозяином, и его сделал мой друг. Зная моего товарища, не ровен час и эта петрушка перестанет работать. Есть ли советы?

Date: 2013-01-01 09:28 pm (UTC)
wizzard: (фото)
From: [personal profile] wizzard
там эээ домен тот просрочился, самое время зарегать его обратно ;)

блогодвижок можно взять что-то в духе http://octopress.org/

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

Date: 2013-01-02 05:34 am (UTC)
From: [identity profile] ivs1958.livejournal.com
>Для начала надо будет посчитать математическое ожидание, положим 60 точек (т.е. за минуту), потом взять медианное значение этого математического ожидания (например 10 минут), и потом уже попробовать построить такой график. Говоря более простым языком, я хочу отфильтровать математическое ожидание, чтобы получить более гладкую кривую, а не такой фаршмак.

Есть смысл не только "укрупнять" точки, но и уменьшать исследуемые интервалы - например, разбить по суткам. Может, что-нибудь при этом вылезет :)

Date: 2013-01-02 09:49 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Мне нравится, что люди уловили то, чем я занимаюсь :). Спасибо.

Я пробовал такое делать, по сути будет такой же фарш, только с большими интервалами. Тут нужно именно проводить фильтрацию, чтобы установить основныю функцию, на которую уже наложен шум.

Date: 2013-01-02 09:51 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Да, теперь его можно купить на себя (был оформлен на моего друга). С блогдвижками и хостингом "есть нюанс", я совершенно этим никогда не занимался. Я понимаю, что "там всё просто", но так же знаю что там вылезет миллион граблей, которые будешь разгребать месяц.

Date: 2013-01-02 12:28 pm (UTC)
From: [identity profile] belbes.livejournal.com
А не думал например кластеризовать данные(в качестве feature взять например вектор значений между двумя замерами времени), для выделения закономерностей и фильтрации шума?
з.ы. а в чем сокральный смысл использовать C вместо чего-нибудь более скриптового(Perl) при обработке текстовых файлов?

Date: 2013-01-02 06:58 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Не очень понял мысль, конкретно слово "кластеризовать". Я так понимаю имеется в виду апроксимировать данные? Пробовал методом наименьших квадратов, получилось не очень. Но апроксимировать придётся.

Смысл прост: я его знаю, а перл надо изучать.

Date: 2013-01-03 07:29 am (UTC)
From: [identity profile] goodic.livejournal.com
по поводу результатов еще не думал. а вот по переезду "пройдусь".

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

Date: 2013-01-03 11:33 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Твоё негодование мне понятно и близко. Но с дургой стороны, регулярно заходя в ЖЖ видеть, что он не работает - печально

Репост есесна будет, но репост не работает, если ЖЖ лежит.

Date: 2013-01-04 09:56 pm (UTC)
From: [identity profile] belbes.livejournal.com
МНК это для регрессии...а тут мысль в том, что шума наверняка хватает который вероятно можно попытаться отделить через какой-нибудь кластерный алгоритм (k-mean например), а потом на полученных кластерах уже строить регрессию или проверять какие-то статистические гипотезы...Но это только абстрактная мысль...

з.ы. советую Perl изучить, при работе с текстовой информацией вещь незаменимая(да и на базовом уровне изучается в течении получаса). Вообще по практике заметил что C/C++ на задачах обработки данных серьезно проигрывают связке Perl+R/Matlab.

Date: 2013-02-11 01:38 am (UTC)
From: [identity profile] m e (from livejournal.com)
тебе просто не показали, как это делается быстро :-)

cat datafile.txt | perl -Wne 's#\s+$##; if( /\./ ) { print "$_\t$i\n"; $i=0; } else { ++$i; }'

это вместо кучи твоих строчек

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

Edited Date: 2013-02-11 01:55 am (UTC)

Date: 2013-02-11 04:25 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Кратко: ВАУ!!!

Хороший стимул начать учить перл :))))

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 10:10 am
Powered by Dreamwidth Studios