8 сентября 2008 г.

A каких файлов больше всего у Вас?

            Мне стало интересно, а каких файлов нынче больше всего у компьютеров.
Вывод к которому я пришел меня удивил. Это файлов весом 0 байт. :) К такому выводу меня привел статистический анализ.
            Я собрал 342125 файлов с 3 компьютеров. Общий вес файлов составил 403 ГБ. В состав этих файлов входило всё: и несколько установок Windows, и инсталяционные файлы, и музыка, и фильмы, и картинки, и дистрибы линукса и т.д.

            После этого занялся статистикой.

            Навороченный SigmaPlot 10.0 (цена лицензии около 1 k$) смог проанализировать первых 66177 значений. :) Excel XP (цена лицензии около 0,2 k$) повел себя ещё хуже. Он согласился анализировать только 65536 значений... :)
Не отказались считать описательную статистику только пакет Statistica 6.0 (цена лицензии около 6 k$) и бесплатная R 2.7.0.

            Был использован для анализа R.
            Вот текст кода:

rm(list=ls(all=TRUE)) #очищаем среду
t1<-Sys.time() #засекаем время
c<-read.table("c:\\i.txt") #читаем данные
d<-as.numeric(c[!is.na(c)]) #переводим в массив
rm(c)
Size<-d[!is.na(d)] #чистим NA ячейки
rm(d)
len<-length(Size) #считаем размер выборки
Size<-sort(Size) #сортируем
summary(Size) #описательная статистика
SizeMB<-Size/1024/1024 #переводим в мегабайты
sd(SizeMB)/sqrt(len)/1024/1024 # SE
hist(SizeMB, ylim=c(0, 200), col=2, breaks=100) #строим график
#text(locator(1),"Отлично виден пик")
#text(locator(1),"в районе 700 МБ.")
#text(locator(1),"Это фильмы.")
length(Size[Size<10*1024])/len*100 #ищем число файлов меньше 100 кб и 1 МБ
length(Size[Size<100*1024])/len*100
median(Size)
hist(Size[1:(len*0.76)]/1024, col=3, breaks=300, xlab="kbytes") #второй график
#text(locator(1),"<5 Кб")
#text(locator(1),"21-22 Кб")
sum(Size[Size<5*1024])/1024/1024 #первый пик
length(Size[Size<5*1024])/len*100
(sum(Size[Size<22*1024])-sum(Size[Size<21*1024]))/1024/1024 #второй пик
(length(Size[Size<22*1024])-length(Size[Size<21*1024]))/len*100
(sum(Size[Size<720*1024*1024])-sum(Size[Size<650*1024*1024]))/1024/1024/1024 #третий пик
(length(Size[Size<720*1024*1024])-length(Size[Size<620*1024*1024]))/len*100
Sys.time()-t1 #останавливаем таймер


            На машине Cel850/256/60 пакет R через 23,5 секунды выдал, что средний файл весит 1,21±0,04 МБ. Минимальный размер файла логично, что составил 0 байт. Максимальный 1,8 ГБ.
Даааа. Тяжело нынче занять компьютер надолго...

            Кроме этого программа успела подсчитать следующее.

            Медиана составила 32557 байт. То есть средний в ряду файл весит именно столько. 50% файлов весят больше него, а 50% меньше.
            94,4% файлов оказалось весят меньше чем 1 МБ.
            76,9% файлов - меньше 100 кБ.
            Пики наблюдались в интервале 0-5 Кб (22% от всех файлов, вес 134 МБ), 21-22 Кб (2% всех файлов, вес 132 МБ) и 620-720 МБ (0,06% от всех файлов, вес 133 ГБ). Легко объяснить пик в районе 700 Мб - это фильмы.

            Статистика позволяет подсчитать количество фильмов на жестком диске. Запросто видно, что фильмов в выборке оказалось около 200 штук. А вот найти пик в районе mp3 записей (2-10 Мб) и картинок (40-500 Кб) не удалось.
            Пик в районе 0-5 Кб тоже объясним, так как самых мелких файликов больше всего, а начинаются они от 0 Кб.

            А вот пик в диапазоне 21-22 Кб непонятен. От соседей он отличается в два с половиной раза.
            20-21 Кб - 0,75% от всех файлов весом 51 МБ.
            21-22 Кб - 1,81% от всех файлов весом 132 МБ.
            22-23 Кб - 0,71% от всех файлов весом 53 МБ.

            Теперь можно сделать выводы.

            Распределение файлов по весу ассиметричное. Больше всего оказалось файлов с минимальным весом. Можно даже сказать, что на компьютерах больше всего файлов с точным весом 0 байт. В моем случае их оказалось 1105.
            А вот наугад взятый файл должен весить несколько килобайт. Скорее всего даже меньше 100 Кб (с вероятностью более 77%). А вот если выбрать случайным образом несколько тысяч файлов, то их вес будет зависеть от среднего значения. То есть от каждых 10 000 файлов следует ожидать, что они будет весить около 12 ГБ.

Ref. Корректор библиографических списков

            Когда я составлял библиографический список к своей диссертации, заметил, что в Ворде (я имею ввиду Word 6.0, Word97, Word2000, WordXP, Word2003) нет средств облегчающих эту работу. При написании текста ссылки формировались и помещались в общий список. После того, как я выровнял список по алфавиту, моя нумерация, а значит и связь с текстом пропала.
            Поиск в интернете не привел ни к чему. Старинные макросы а-ля 97-ые нынче не пашут, WordExpert.ru рекомендовал мне использовать Word2007, который мне использовать запрещают этические, религиозные, практические, правовые и прочие
нормы.
            Наводить порядок вручную, оказалось муторно. Как-никак ссылок было больше чем 200. В итоге я написал, используя RAD Lazarus (Visual FreePascal) маленькую програмку, которая соотносит старую нумерацию с новой.
            Для начала я привел библиографический список к текстовому виду.

1) В конец каждой ссылки поставил её номер.
2) Сделал выравнивание по алфавиту.
3) Сохранил в формате TXT.


В итоге получился файл с таким содержимым:




1. Абуладзе, К.И. Паразитология ... / К.И. Абуладзе и др.; под. ред. К.И. Абуладзе. - 2-е изд., испр. и доп. - М.: Колос, 1982. - 496 с. 196
2. Бабянскас М.А. Иммунологическая ... : дис. … док. вет. наук. / М.А. Бабянскас. - Кайшядорис, 1965. - 619 с. 207
3. Багманова, Н.Н. Комплексная ... : дис. … канд. вет. наук: 03.00.19; 16.00.03 / Н.Н. Багманова. - Самара, 2003. - 113 с. 236



            Где первая нумерация - истинная, а последняя - ложная.

            Программка способна открывать файлы с подобным содержимым, и определять ложную нумерацию. Истинную она подсчитывает сама, поэтому приведенные в примере истинные цифры не обязательны.
            Смотрите только, чтобы в файле не было пустых строк, иначе может не совпасть число ссылок с имеющимся. На всякий случай программа пишет, сколько ссылок она насчитала (Поле "Записи").
            Теперь после загрузки файла можно вводить старую нумерация в поле для ввода. Формат может быть любым, главное, чтобы числа были отделены запятыми.

То есть следующие введенные данные однозначны:

[7, 12, 100]

[7,100, 12]

7,12,100

7 Привет, Лунатикам!!!,,,,, 12, 0100


            Теперь после нажатия кнопки "Обработать", появится результат в таком формате: 41, 43, 120.
            Кроме того, что ссылки будут переведены от ложной к истинной нумерации. Они ещё будут и расставлены по возрастанию.
            При работе программа рисует крупным кеглем число распознанных введенных ссылок. Если число найденных истинных совпадает, то появляется крупный символ "=". В противном случае возникнут символы "<>", что обозначает, что программа столкнулась с ошибкой поиска истинной нумерации, и число найденных истинных номеров не равно оному ложных.

            Скачать сию чудо софтину можно здесь: http://freesoft.ru/?id=675484 [475 kb] [GPL].

            Засим, всё. Sapienti sat! Удачного использования.

            P.S. Программа поставляется с исходным кодом. Так как ещё много вещей можно реализовать, например, автоматическую вставку и извлечение данных из буфера, вместо ручной вбивки. Можно даже сделать процесс фоновым. То есть в Ворде помещаешь текст со ссылками в буфер. Ждешь 100-200 миллисекунд и вставляешь его обратно в исправленном виде.
            P.P.S. А можно сделать выравнивание за счет программы. Скормить ей оба списка с разными нумерациями. И пущай она сама соотносит старую и новую нумерации. Чтобы это было реализовано добровольцем я и вложил исходники к программе.

Негры ночью воруют уголь

            Написал я за 5 минут на Delphi5 игрушку - шутер . Мультимедиа эффекты (звук) взял из шутера Soldiers of Fortune.
            Скачать сие чудо можно здесь: http://freesoft.ru/?id=675301 [240 kb] [GPL].