(no subject)

Благодаря kassian прочитал http://gaidar.center/articles/da-da-net-da.htm

Табличку удобно поместить в жж, а обсуждение таблички в фейсбук.






total


city


part


first_da


second_da


third_da


fourth_da


city_part


first_pred


first_diff


m


Республика Ингушетия
472776 195255 75.5 2.4 2.8 93.7 6.5 41.299685 34.259788 -31.859788 1


Республика Дагестан
3015660 1358268 74.0 14.2 14.1 74.8 31.5 45.040489 37.102538 -22.902538 1


Смоленская область
958630 689979 71.2 40.2 37.2 61.4 56.4 71.975528 57.571292 -17.371292 0


Кемеровская область
2717627 2330942 57.3 52.5 47.6 52.8 66.2 85.771226 68.055062 -15.555062 0


Белгородская область
1550137 1039639 77.6 39.6 36.1 62.6 58.1 67.067556 53.841575 -14.241575 0


Чувашская Республика
1236628 758064 71.0 36.9 33.5 60.7 53.4 61.300892 49.459313 -12.559313 0


Ульяновская область
1257621 939781 68.2 47.5 43.7 58.4 64.1 74.726885 59.662132 -12.162132 0


Курская область
1120019 754187 70.1 42.1 38.7 60.1 55.2 67.336983 54.046321 -11.946321 0


Республика Мордовия
807453 499419 70.0 38.0 35.0 59.8 51.2 61.851154 49.877473 -11.877473 0


Брянская область
1225741 856899 67.8 44.4 40.9 59.6 57.8 69.908651 56.000610 -11.600610 0


Амурская область
805689 542240 60.5 43.2 39.7 60.2 56.3 67.301403 54.019283 -10.819283 0


Республика Башкортостан
4071064 2515900 70.5 39.6 35.9 60.1 53.6 61.799569 49.838272 -10.238272 1


Пензенская область
1348703 920885 70.8 45.3 41.1 58.8 57.5 68.279302 54.762418 -9.462418 0


Карачаево-Черкесская Респ.
467797 199840 72.2 25.9 24.6 69.4 43.6 42.719385 35.338661 -9.438661 1


Саратовская область
2487529 1874042 68.0 51.8 47.6 55.0 63.8 75.337494 60.126152 -8.326152 0


Новосибирская область
2762237 2174868 62.5 54.6 48.3 52.2 68.6 78.735749 62.708590 -8.108590 0


Волгоградская область
2545937 1951818 64.8 53.7 49.0 53.0 67.4 76.664034 61.134230 -7.434230 0


Рязанская область
1130103 807392 78.5 49.8 45.1 56.3 64.4 71.444107 57.167449 -7.367449 0


Калужская область
1009772 768770 71.6 53.4 48.2 53.1 66.7 76.133028 60.730703 -7.330703 0


Орловская область
759721 505864 68.4 46.3 42.6 59.7 59.9 66.585497 53.475244 -7.175244 0


Псковская область
646374 455883 72.8 49.7 44.7 56.7 63.1 70.529291 56.472253 -6.772253 0


Кабардино-Балкарская Респ.
862254 450167 57.9 35.8 33.2 63.1 53.8 52.208166 42.549474 -6.749474 1


Тверская область
1304744 984166 69.5 53.9 49.2 52.9 64.7 75.429816 60.196311 -6.296311 0


Тамбовская область
1050295 631716 74.5 44.0 40.2 58.7 61.1 60.146530 48.582078 -4.582078 0


Республика Марий Эл
685865 449492 65.9 48.1 42.2 52.8 61.3 65.536512 52.678089 -4.578089 0


Иркутская область
2412800 1905217 58.7 58.6 51.6 50.6 69.1 78.962906 62.881213 -4.281213 0


Воронежская область
2333477 1566923 72.3 49.7 45.1 55.6 64.3 67.149708 53.904005 -4.204005 0


Сахалинская область
487293 397429 55.9 60.9 51.4 48.9 68.0 81.558528 64.853705 -3.953705 0


Самарская область
3205975 2570835 62.9 60.9 55.1 49.0 68.6 80.188866 63.812857 -2.912857 0


Липецкая область
1156093 742492 68.8 49.2 44.6 56.4 58.4 64.224245 51.680857 -2.480857 0


Кировская область
1297474 985194 68.7 58.6 51.1 51.0 66.1 75.931695 60.577704 -1.977704 0


Омская область
1978466 1431811 68.3 56.1 49.7 51.1 66.7 72.369755 57.870877 -1.770877 0


Калининградская область
976439 758802 63.4 60.3 54.0 48.4 69.4 77.711152 61.929967 -1.629967 0


Магаданская область
146345 139785 57.5 74.4 64.8 40.2 75.7 95.517442 75.461507 -1.061507 0


Костромская область
651450 465858 70.4 56.6 49.6 53.6 65.3 71.510937 57.218235 -0.618235 0


Мурманская область
762173 704954 59.4 72.8 63.9 39.8 75.2 92.492649 73.162876 -0.362876 0


Ивановская область
1029838 837243 70.0 64.7 58.3 47.2 69.9 81.298515 64.656113 0.043887 0


Московская область
7318647 5971811 65.0 65.2 59.1 42.9 72.7 81.597200 64.883093 0.316907 0


Нижегородская область
3260267 2590817 62.4 63.6 56.3 47.8 70.0 79.466406 63.263838 0.336162 0


Курганская область
861896 532610 70.6 50.3 45.4 54.6 62.6 61.795159 49.834920 0.465080 0


Ростовская область
4236000 2872160 65.1 55.5 51.3 52.3 66.4 67.803588 54.400909 1.099091 0


Республика Карелия
629875 503379 62.5 65.0 56.5 47.9 68.3 79.917285 63.606475 1.393525 0


Оренбургская область
1994762 1195812 65.1 50.1 45.8 55.4 63.2 59.947603 48.430907 1.669093 0


Республика Хакасия
536781 369367 56.7 57.9 51.8 50.8 66.0 68.811489 55.166843 2.733157 0


Приморский край
1929008 1485802 55.1 64.3 56.6 45.9 69.7 77.024149 61.407893 2.892107 0


Удмуртская Республика
1517164 994504 61.0 55.9 48.9 50.8 65.7 65.550198 52.688489 3.211511 0


Еврейская автономная область
166120 113891 58.7 58.6 52.8 50.0 65.4 68.559475 54.975330 3.624670 0


Владимирская область
1397168 1088982 69.6 65.8 58.2 49.7 68.4 77.942094 62.105467 3.694533 0


Ярославская область
1271912 1039276 67.0 68.8 61.3 47.8 70.1 81.709741 64.968616 3.831384 0


Тульская область
1506446 1125612 64.7 63.5 57.7 51.5 70.6 74.719705 59.656675 3.843325 0


Республика Бурятия
982284 579350 62.9 51.8 46.1 53.2 60.8 58.979888 47.695511 4.104489 0


Красноярский край
2866490 2206005 61.2 65.7 59.1 45.6 68.7 76.958406 61.357932 4.342068 0


Хабаровский край
1334552 1093945 58.1 70.2 62.3 45.2 70.2 81.970954 65.167119 5.032881 0


Республика Адыгея
451480 213542 63.7 43.9 40.8 59.3 58.9 47.298219 38.818256 5.081744 0


Ставропольский край
2801597 1632068 68.0 52.3 48.0 53.8 65.4 58.254917 47.144583 5.155417 0


Республика Татарстан
3868730 2956100 22.6 66.4 61.4 43.5 70.1 76.410088 60.941249 5.458751 1


Вологодская область
1187685 854791 69.1 63.3 56.6 52.9 69.8 71.971188 57.567994 5.732006 0


Челябинская область
3500716 2891138 60.2 71.5 65.5 42.0 72.9 82.587048 65.635308 5.864692 0


Тюменская область без АО
1454626 949657 59.8 58.4 51.9 51.1 68.5 65.285304 52.487188 5.912812 0


Республика Коми
856831 667146 58.6 69.0 59.9 44.6 70.5 77.862029 62.044623 6.955377 0


Архангельская область
1174078 908861 66.0 68.9 60.0 46.8 70.0 77.410615 61.701580 7.198420 0


Астраханская область
1018626 677741 59.1 60.7 55.0 49.5 68.1 66.534822 53.436735 7.263265 0


Ленинградская область
1778857 1142395 64.1 59.9 52.8 47.4 68.2 64.220733 51.678188 8.221812 0


Камчатский край
316116 246021 60.2 70.3 61.4 40.7 75.3 77.826178 62.017379 8.282621 0


Томская область
1076762 777257 60.7 66.8 59.4 43.1 71.1 72.184661 57.730219 9.069781 0


Краснодарский край
5513804 2994914 62.4 53.8 49.3 53.8 65.2 54.316657 44.151780 9.648220 0


Респ. Северная Осетия-Алания
703745 451441 70.5 63.3 56.0 50.0 67.5 64.148378 51.623203 11.676797 0


Республика Тыва
315637 171156 68.5 56.1 50.4 51.1 59.8 54.225582 44.082569 12.017431 0


Республика Саха (Якутия)
959689 627752 70.4 68.1 60.7 45.4 68.0 65.412024 52.583486 15.516514 0


Пермский край
2634409 1991998 60.6 76.5 68.5 40.3 73.3 75.614607 60.336738 16.163262 0


Свердловская область
4330006 3658043 66.8 84.4 76.2 33.1 78.9 84.481246 67.074767 17.325233 0


Чукотский автономный округ
50157 34720 67.4 74.2 63.5 40.3 75.6 69.222641 55.479290 18.720710 0


Республика Алтай
215161 62861 69.4 48.4 43.4 54.6 58.8 29.215797 25.076874 23.323126 0


Ненецкий автономный округ
43838 31738 62.8 82.8 74.0 36.4 78.5 72.398376 57.892627 24.907373 0


Республика Калмыкия
278733 125974 66.2 67.1 63.9 43.1 70.4 45.195223 37.220125 29.879875 0
'
WMinlos

use apply!

В книге А.Б. Шипунова и др. по R на стр. 241 приводятся данные о хронометрировании с помощью system.time(). Там получается, что циклы чуть ли не в 2 раза быстрее, чем sapply.
Ну вот сегодня у меня была рабочая необходимость применить пару нетривиальных функций (моя функция с некоторым строковым преобразованием и levenshteinSim) к реальным данным (таблица из 179000 строк), циклы зависали навсегда, а sapply/mapply давали результат за пару секунд.
  • Tags
WMinlos

количество носителей и количество стран: есть ли корреляция?

На страничке http://www.ethnologue.com/statistics/size находим сведения о количестве носителей язков и количестве стран, в которых на этих языках говорят.
Гипотеза состоит в том, что эти значения коррелируют (скажем, по-английски говорит очень много людей в большом количестве стран, а по-японски сравнительно мало людей всего в трех странах).
Collapse )
  • Tags
WMinlos

лекция 3 (РГГУ)

Файл, примерно соответствующий лекции №3.
В лекциях 1-2 описывалась грамматика R, в лекции 3 разбираем что-то более-менее жизненное (в частности, проверяем Ципфа на Навальном).
https://app.box.com/s/71q7mrqqc7obbsqxr0tp

Оказывается, ссылки на box открываются только пользователям box.net.
Вот ссылки на яндекс-диск
http://yadi.sk/d/0pPuaJvmNvDWo (лекция 3)
http://yadi.sk/d/Pd9BmAG7NvDX6 (1-2)
  • Tags
гвоздь

окуджава query

Разыскивается стихотворение Окуджавы (не позднее 67 года), под предположительным названием «Мои Боги». Есть только перевод на польский двух первых четверостиший:
Jak grosz miedziany cała Ziemia, / a gdzieś tam, na niebiosach
krążą Bogowie ponade mną, / czytając w moich losach
i Ksiąg Żywota tom ogromny / wertują pomalutku.
Po tych stronicach chodzę skromnie - / ślepy i wesolutki.
(Bułat Okudżawa, „Moi bogowie”, przekład Seweryn Pollak)

Условный перевод:
А вся земля как медный грош/ и где-то там, на небесах,
Кружатся боги надо мной/и обсуждают жребий мой,
Листают потихоньку страницы огромного тома из книги моей жизни...
А я по тем страницам хожу - слепой и веселый(...)
в зубах

The R purgatory

Когда начинаешь писать на R, возникает устойчивое ощущение, что R - это ад. На самом деле, настоящий ад могут вполне осознать только продвинутые программисты на R (ср. книгу Бёрнса "The R Inferno", для продвинутых). То, с чем сталкиваешься вначале скорее похоже на чистилище, в ад попадаешь - вопреки средневековым представлениям - только после чистилища.

Конечно, особенность R в том, что начинающие скорее пользуются R как статистическим инструментом, не вникая в особенности языка (многие вводные книги именно на такое восприятие и направлены). Можно очень быстро научиться писать на R совсем короткие скрипты (5-20 строк), не пытаясь сделать ничего другого, потому что дальше - адъ.

Важная идеология Python - principle of least astonishment. Почти всё работает так, как можно предположить, даже не читая мануала. Или не работает, если не угадал.
Прелесть языка R - principle of most astonishment. Всё работает не так, как ты предполагаешь, при этом может даже выдавать некий удивительный результат.

Вот из моего персонального чистилища R (возможно, у других другие любимые неожиданности):

1) Длина строки. Функция length('John') возвращает значение 1 (а не 4). Потому что в R нет строк. 'John' - это вектор строк длиной 1.

2) Доступ к элементам списка (list) через доллар. К элементам списка есть 2 формы доступа - стандартное индексирование с квадратными скобками и доллар (например, my.list$something). Так вот, на месте something может стоять только литерал. Если писать там переменную (скажем, внутри цикла), R просто выдаст нулевое значение (NULL). Переменные могут быть только внутри стандартного индекса.

3) Конкатенация объектов. Самый простой объект в R - это вектор, он создается конкатенацией литералов, например my.vector = c(1, -9, 50). Естественное желание, казалось бы - использовать вектор как контейнер для каких-то созданных объектов (скажем, матриц или таблиц, с которыми в R в основном и работают). Операция типа super.vector = c(matrix1, matrix2, matrix3) отлично работает, только она распаковывает все элементы этих матриц в один вектор.

Ну есть еще индексирование элементов списка, оно бывает с одинарными скобками (my.list[1]) и с двойными (my.list[[1]]), вместо нужных двойных можно употребить одинарные, что приведет, опять же, не к ошибке, а к прикольным эффектам.

Короче, enjoy.
Чем дальше - тем больше мне нравится этот язык.
  • Tags
гвоздь

R stemming

В R есть 2 пакета, которые позволяют выделять "основу" (stem) у словоформы: RStem и SnowballC.

RStem
Документации практически нет, см. http://www.omegahat.org/Rstem/.
Видимо, есть только 2 функции:
Функция getStemLanguages() выдает список поддержанных языков, на данный момент их 11 штук:
[1] "french" "english" "spanish" "portuguese" "german"
[6] "dutch" "swedish" "norwegian" "danish" "russian"
[11] "finnish"
Функция wordStem(words, language = your_choice) принимает в качестве основного аргумента вектор словоформ words, значение второго аргумента (язык) по умолчанию - 'english'). Функция возвращает вектор основ.

Разделить текст на словоформы
Таким образом, прежде чем осуществлять стемминг, нужно вручную разделить текст на словоформы.
string = "I'm looking for everything related to manga books"
Нужно понимать некоторые особенности функции strsplit().
У нее 2 основных аргумента - строка и разделители. Один разделитель может быть задан символом:
strsplit(string, " ")
В данном случае очевидно, что нужно учитывать два разделителя (пробел и апростроф). На самом деле, второй аргумент strsplit по умолчанию является регулярным выражением. Соответственно, чтобы делить по пробелу или ', можно написать
strsplit(string, "[' ]")
(в квадратных скобках в регулярных выражениях задается множество вариантов, из которых годится любой)
Кроме того, функция strsplit возвращает не вектор, а довольно необычный объект list (ничего похожего на список в языке типа Python). Чтобы сделать вектор из списка, нужна функция unlist.
Таким образом, возможный код такой:
words = unlist(strsplit(string, "[' ]"))
Этот код ничего не делает с пунктуацией, т.е. пунктуаторы остаются приклеены к словам: "language.". Скорее всего, от пунктуации нужно предварительно просто избавиться. Избавиться от всего кроме букв, чисел, пробелов и апострофа, можно с помощью такой строки, использующей регулярное выражение:
clean_string = sub("[^[:alnum:][:space:]']", "", dirty_string)
Дальшейшее зависит от конкретных целей (например, быть может, нужно избавиться от заглавных букв).

Итак, стемминг с RStem
Предположим, вектор словоформ находится в переменной words. Если вектор английский, можно использовать команду
wordStem(words) без дополнительного аргумента, задающего язык.
Результатом вызова при описанном значении words будет такой вектор:
[1] "I" "m" "look" "for" "everyth" "relat" "to"
[8] "manga" "book"
Стеммер относительно агрессивно отрезает то, что похоже на окончание, но при этом не возводит словоформу к какой-то правильной лексеме, потому что не содержит никакого словаря лексем. Т.е. он правильно отрезает окочания от look.ing, relat.ed и book.s, но еще и отрезает -ing от everything, что является сомнительным результатом (с другой стороны, не заменяет, например, m на be).

SnowballC
В принципе, почти то же самое, там только используется немного другой алгоритм. Поддерживает 16 языков:
>getStemLanguages()
[1] "danish" "dutch" "english" "finnish" "french" "german" "hungarian" "italian" "norwegian" "porter" "portuguese" "romanian" "russian" "spanish"
[15] "swedish" "turkish"
Т.е. чуть лучше RStem - поддерживает шведский, венгерский, итальянский, румынский и некий porter.
Что в точности значит в данном контексте porter, не знаю (вероятно, что речь идет об алгоритме Портера без настройки на конкретных язык?)
Те же 2 функции, что и в RStem. В данном случае есть описание: http://cran.r-project.org/web/packages/SnowballC/index.html

Пример
Нам нужен какой-то текст. Я сохранил крымскую речь Путина (http://www.kremlin.ru/transcripts/20603) в файл на диске.
Запоминаем имя файла, например
>fname = "D:/MyRFiles/Putin.txt"
В R, как кажется, нет вполне прямого пути прочитать весь файл как одну строку.
Рекомендуется следующая команда:
>singleString = paste(readLines(fname, encoding = 'UTF-8'), collapse = " ")
Далее, удаляем пунктуаторы:
>clean_string = gsub('[".,/!/?:–«»]', '', singleString)
Заменяем все заглавные буквы строчными:
>clean_string = tolower(clean_string)
Составляем список слов:
>words = unlist(strsplit(clean_string, "[ ]"))
Наконец, стеммируем:
>stemmedPutin = wordStem(words, language = 'russian')
Частотный словарик основ можно составить с помощью стандартной функции table():
>dict = table(stemmedPutin)
Посмотреть самые частотные основы можно отсортировав полученный датафрейм:
>sort(dict)
Если отбросить союзы, местоимения и т.п., самые частотные такие:
"Крым" 63, "Украин" 48, "Росс" 44, "русск" 23, "люд" 22, "стран" 20, "народ" 20, "Севастопол" 17, "прав" 16.
Основываться на словоформах в подобном изучении было бы явно неуклюжим решением.
  • Tags