Кто куда звонит на вашем предприятии ?

15th Апрель 2010 ;)
Твитнуть

 карта

Задача которую мне дали как эникейщику очень интересная, у меня конечно был выбор – делать или нет, но я фанат обработки больших массивов данных и поэтому с радостью взялся за дело в более менее свободные минуты.

 

Мне дали логи, накопленные за месяц, такого типа:


16/03/10 11:19AM   109 04 <I>                       0’00 00:13’22            TR
16/03/10 11:21AM   138 09 35606                          00:00’24              
16/03/10 11:23AM   138 09 21352                          00:01’07              
16/03/10 11:24AM   151 06 <I>                       0’00 00:08’55            TR
16/03/10 11:27AM   606 07 <I>                       1’02 00:00’00            NA
16/03/10 11:29AM   121 09 83439641811                    00:00’22              
16/03/10 11:31AM   108 08 51687                          00:00’05              
16/03/10 11:31AM   109 09 33938                          00:00’38              
16/03/10 11:33AM   108 08 51687                          00:01’26              
16/03/10 11:34AM   155 09 89226161011                    00:00’39
              

Мучался я мучался в Excel и плюнул в него с расстояния вытянутой руки.  Хотя знаю что там можно сделать было. А задача такая: надо посчитать для каждого номера, сколько было потрачено минут на межгород и на каждого сотового оператора в отдельности.

Для чего анализировать логи ? чтобы выяснить, куда совершается больше звонков, ту часть первой и оптимизировать по расходам.

В итоге я сел за Perl, хотя потом пришел к выводу что надо бы по идее в Python все делать пробовать. Исходный код получился ничего себе, может быть кому-нибудь и пригодиться, выкладываю полностью:

#!perl/bin/perl

# из диапазонов сотовых создадим массив diap_array
open (A,’ru_m.txt’); @diap=<A>; close A;
$i=0;
foreach $diap(@diap){
    @diap_one=split (/\t/, $diap);
    @diap_subnum=split (/-/,$diap_one[3]);
    $diap_start    =$diap_one[2].$diap_subnum[0];
    $diap_end    =$diap_one[2].$diap_subnum[1];
    $diap_name=$diap_one[0];
    $diap_array[$i][0]=$diap_name;
    $diap_array[$i][1]=’8′.$diap_start;
    $diap_array[$i][2]=’8′.$diap_end;
    $i++;
    }
print "Сгенерили хэш диапазонов.";
# пример:
#2825  ARRAY(0x19b00dc)
#   0  ‘ЗАО "Мобиком-Кавказ"’
#   1  89974450000
#   2  89974456999

# из логов сгенерим
open (A,’1.txt’); @a=<A>; close A;
foreach $b(@a)
    {@b=split (/\s+/, $b);
        if (length($b[4])>=11 && $b[4]=~/^\d+$/)
            {$b[5]=~s/’/:/;
            @c=split(/:/,$b[5]);
            $c[1]=$c[1]+$c[0]*60+1;
        if ($b[4]<89000000000) {$m{$b[2]}{‘Межгород’}=$m{$b[2]}{‘Межгород’}+$c[1];}
        else    {foreach $k(@diap_array)
                {if ($b[4]>=$k->[1] && $b[4]<=$k->[2])
                    {$m{$b[2]}{$k->[0]}=$m{$b[2]}{$k->[0]}+$c[1];
                    #print $m{$b[2]}{$k->[0]}."\n";
                    }
                }
            }

            }
    }

#use Dumpvalue;
#$d=Dumpvalue->new;
#$d->dumpValue(\%m);

use Data::Dumper;
print Dumper(\%m);

т.к. пришлось узнавать для каждого исходящего – диапазоны сотовых операторов, поэтому я прикрутил базу этих диапазонов, вида:

Оператор     Регион    код DEF    Диапазон нумерации    дата открытия    Стандарт
ЗАО "Ростовский Сотовый Телефон"    Ростов-на-Дону  Ростовская область    901    0000000-0009999    28.04.2006    NMT-450
ОАО "Краснодарская Сотовая Связь"    Краснодар  Краснодарский край    901    1000000-1009999    01.07.2007    NMT-450
ОАО "Краснодарская Сотовая Связь"    Краснодар  Краснодарский край    901    1010000-1019999    01.01.1980    NMT-450
ОАО "Краснодарская Сотовая Связь"    Краснодар  Краснодарский край    901    1030000-1039999    04.07.2008    NMT-450

Базу я взял из одного из своих старых проектов, а туда мы брали вроде как с МТС сайта, но не буду врать. Ее легко думаю можно обновить.

Вот такая бесплатная софтина получилась, чего с ней делать щас – незнаю, это конечный вариант.

Еще:

  • Тулза для проверки ссылок.
  • Вам 1 по Тиц100 или 10 по Тиц10 ?
  • Освоение MQL5
  • CountDown для рабочего стола v0.3
  • Что такое Google Font API

Подписаться на обновления блога

Вам понравился наш блог, хотите следить за обновлениями? Подпишитесь на RSS рассылку или рассылку по электронной почте. Так же вы можете следить за нами в Twitter.
Введите Ваш E-mail:

Твитнуть

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

GoGetLinks - Я зарабатываю тут
Онлайн Антивирус - Моя разработка
Онлайн Желания - Мой микросервис
Иногда проще Купить сайт
Лучшие материалы
Top WebMoney

КОД

Рубрики

  • Личное (927)
  • Новости (409)

Сайт делает jkeks Яндекс.Метрика