LINUX.ORG.RU

R — данные и графики

 , , ,


0

0

По согласованию с редакцией Linux Format выложил в открытый доступ "R — данные и графики" — вторую часть из цикла статей по R. Там же по ссылке лежат исходные коды команд к статьям в Rnw-формате и результаты их выполнения в pdf.

Из Википедии: R — язык программирования для статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом в рамках проекта GNU.

Осенью планируется продолжить цикл (запланировано 4 статьи, начиная с сентября). Если есть пожелания, то их самое время высказать.

P.S. Если в тексте будет найдена ошибка, то дайте знать — исправлю. Сам текст немного отличается от журнальной статьи и в дальнейшем будет развиваться.

>>> Подробности

★★★★★

Проверено: anonymous_incognito ()
Последнее исправление: CYB3R (всего исправлений: 1)

Ответ на: комментарий от garry

2garry
off-topic - конечно. me со-автор http://root.cern.ch/ &
автор http://root.cern.ch/root/html/TASImage.html
так вот у нас это делается так:
TImage img = TImage::Open(file.qq); //qq- поддерживается ~>10 image formats: gif, bmp, png, jpg, tiff, ps, eps, pdf, pcf, ico, xpm ... всеx не помню
unsigned int *array = img->GetArgbArray(); // возвращает массив 32бит величин ARGB (где A - прозрачность, R-red. G-green, B-blue)

Вот и все собстевенно. можно, конечно, превратить 2D массив в
2D histogram, и восползоваться "могучей" ROOT-graphics,
которая несравнено "круче" всего того, что предлагает R.

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

> восползоваться "могучей" ROOT-graphics, которая несравнено "круче" всего того, что предлагает R.

Сам себя не похвалишь - никто тебя не похвалит ;) Я, как постоянный пользователь могучей ROOT-graphics, не могу к сожалению с этим утверждением согласиться.

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от Valeriy_Onuchin

Еще немного критики. Покaпался в CRANe ...
Куча пакетов, целый зоопарк.
Вроде как, все взаимо-независимые.
Вопрос - хорошо это или плохо?
С одной стороны, конечно, хорошо. Но, на самом деле - плохо.
Плохо, что многие "общие" части переписываются каждый раз по-своему
внутри каждого пакета - нет консолидации.
Живой пример, увидел знакомые слова "Mutual information"
"aaMI Mutual information for protein sequence alignments",
где "своим собственным методом" вычисляются joint hists, mutual information. A правильнее было бы иметь "general class hist",
произвести от него класс "joint hist" с вычислением mutual info.
что позволяет воспользоваться имеющимися возможностями от
"general class hist".
Почему, я привел этот пример? Потому что недавно использовал
"Mutual information" по работе.
Есть 2 похожих изображения полученных разными способами,
при этом они могут быть сдвинуты, повернуты и другого масштаба
один относительно другого, не говоря уже об разной интенсивности.

Необхдимо наложить одно на другое наилучшим способом за
кратчайшее выч.время.
Естественно пользовал ROOT, 2D hist class
максимизировал "normalized mutual info" двоих изображений
методами минимизации (их там несколько : simplex, migrad, fumili,
etc.) built in ROOT.

В итоге, получил "компактный скрипт" делающий это за <1сек
Пример скрипта :)

TImage i1, i2;
PCheckupData *data = new PCheckupData(i1, i2);
TImage *rslt = data->Reconstruct();
printf("a=%f x=%f y=%f\n", rslt->GetAngle(), rslt->GetXshift(), rslt->GetYshift());



"сделайте это компактней на любом дургом языке."






Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

1 Постоянно ведется работа по выделению общего кода. Он растет и быстро. Тупо запретить людям писать пакеты новые, значит отказаться от развития. Если видите как заменить в написанном кем то пакете самописные функции на имеющиеся в базовом пакете, то пошлите автору патч или ссылку на замену.

2 Вам дали пример реального счета _статистики_. Пример этот переписать в ROOT Вы не смогли? тогда бы и сравнили где код компактней.

ну или напишите как этот код в R выглядит.

anonymous
()
Ответ на: комментарий от anonymous

> в ROOT Вы не смогли?
к чему это? можешь-неможешь? Уверен, что "можешь", но ...

1. ROOT - toolkit, но не язык программирования.
2. мой изначальный вопрос был - "в чем особенность-специфичность
языка R, которая позволяет делать утеверждение, что он лучше
всего подходит для обработки статистических данных?"

Почему, например, не другой язык? хотя бы тот же PHP,
а ведь в чем-то они очень похожи.

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

> примеры ROOT graphics, годичной давности (много нового появилось за год ),

Посмотрел 2 Мб файл - ничего удивительного не нашёл. Схожую по качеству рюшечек графику выдаёт тот же gnuplot.

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от Evgueni

> не могу к сожалению с этим утверждением согласиться.

Evgueni, на новой работе, переодически сам становлюсь "обычным
пользователем", и соответственно бранюМ многие вещи, которые иногда
через Ж. ... часто разработчики о них и не подозревают,
но тем не менее, надеюсь, что convergency в правильном направлении.
Хотя вижу, что профессиональных людей в команде не прибывает,
а наоборот ... Главный недостаток "бесплатных продуктов" -
тебе за твою работу никто не платит, но зато еще матом покроют :(

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

> Главный недостаток "бесплатных продуктов" - тебе за твою работу никто не платит, но зато еще матом покроют :(

Очень сильно зависит от продукта. Да, я ROOT использую - но он не удобен by design (это с тех пор когда он ещё не был по лицензией GNU) и именно поэтому я до _сих пор_ использую кое-где PAW. На R я не от хорошей жизни заглядываться стал. IMHO если бы ROOT под GNU не отпустили, то он бы просто скопытился во вполне обозримом будущем. А так он держится на плаву и, возможно, всё кончится хэппи эндом: из ROOT возьмут код для работы с ntuplами и прекрутят к R :)

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от Valeriy_Onuchin

>2. мой изначальный вопрос был - "в чем особенность-специфичность
>языка R, которая позволяет делать утеверждение, что он лучше
>всего подходит для обработки статистических данных?"

>Почему, например, не другой язык? хотя бы тот же PHP,
>а ведь в чем-то они очень похожи.


Объясняю в чем преимущества языка R для интерактивного анализа:

1. Динамическая типизация.

2. Функция является first-class value. 

3. Есть замыкания как в Схеме:
   f<-function(x) { n<-1; function() n+1;}
   после этого f(10)() вернет 2. Кстати в S так нельзя ---
   там замыканий нет.

4. Векторизованные операции: с(1,2,3)+1 вернет c(2,3,4),
   с(1,2,3)*c(4,5,6) вернет c(4,10,18).

6. Можно на лету увеличивать размеры векторов 
   n<-c(1,2)
   n[3]<-25
   Получаем: с(1,2,3)

7. Функции с произвольным числом аргументов которые 
   очень легко писать (в отличие от C++) 

8. Именованные аргументы функций.

9. Вектора,матрицы  и списки являются основными структурами
   данных на которых все построено.

10.Есть ООП (значительно более удобное на мой взгляд, чем в C++)      

   
    
  

anonymous
()
Ответ на: комментарий от anonymous

s/Получаем: с(1,2,3)/Получаем: с(1,2,25)/

anonymous
()
Ответ на: комментарий от Valeriy_Onuchin

> Почему, например, не другой язык? хотя бы тот же PHP, а ведь в чем-то они очень похожи.

как профессионал, приведите примеры в чем?

anonymous
()
Ответ на: комментарий от Evgueni

> из ROOT возьмут код для работы с ntuplами и прекрутят к R :)

было бы не плохо, я уже тут как то стонал об этом...

Но все равно расчет матожидания по мегадлинному вектору трудно назвать статистикой или анализом данных. А вот получение перевыборками из мегавектора интервальной оценки матожидания или распределения статистикой уже является. Но что характерны для этого мегадлинные вектроа уже не нужны, хватает интерфейса к sql.

anonymous
()
Ответ на: комментарий от Evgueni

>На сколько я понимаю у профессиональных статистиков R - стандарт

у химиков R расхожий инструмент - наряду с Mopac и Gamess

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> у химиков R расхожий инструмент

btw, мои друг сейчас подрабатывает у биологов-статистиков
Я так понял, что те там ни о чем, кроме как o SPSS и не слышали.
Переодически у него возникают какие-то элементарные
проблемы, о которые SPSS спотыкается, типа -
есть ~100 точек и их необходимо отфитировать 3мя экспонентами
.. и это становиться проблемой, с ошибками !!!
я уже не говорю обо всяких там вычитаний фонов, автоматических нахождений пиков, которая энта GUIевина (SPSS) никогда нормально не
осилит ... хотя на рынке уже тыщу лет и столько же стоит.
Говорю это с чужих слов.

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

>Объясняю в чем преимущества языка R для интерактивного анализа:
-1 - вопрос стоял не про " для интерактивного анализа"
0 - ко всем пунктам - причем тут статистика?
1,2 - ну и что?
3 - не до конца понял
4,6,7, 8, 9, 10 - НИЧЕГО нового, все это уже есть (и в офф-топике [RООТ] в частности/особенности)

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

> Динамическая типизация.

не понимаю, откуда проистекает такой фанатизм
по-поводу "Динамическая типизация".

Вот и сын недавно про PHP - "классно" говорит ...

Это типа "строка <-> число" не надо вызывать atoi, и пр.
но, ведь в C++ есть "overload operator=" ++ всякие там smart pointerы
+++ templates -
что, несомненно, "мощнеее", чем "Динамическая типизация"

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

> -1 - вопрос стоял не про " для интерактивного анализа"

То есть как раз то, что из ROOT выкинули. Типа оно не нужно.

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от Valeriy_Onuchin

>0 - ко всем пунктам - причем тут статистика? 
Просто тут зашла речь о R vs ROOT. И _язык_ R 
никоим образом не привязан к статистике, он
вполне подходит для многих других задач анализа
данных.
 
>1,2 - ну и что?

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

>3 - не до конца понял
Советую почитать SICP 

>4,6,7, 8, 9, 10 - НИЧЕГО нового, все это уже есть (и в офф-топике [RООТ] в частности/особенности) 

Нихрена там (в ROOT) нет, либо есть в уродском виде.
Поясню, что я подразумеваю под уродским видом (относительно
векторизованных операций): недостаточно
просто создать некий класс под названием vector и 
определить для него операторы + и -, необходимо,
чтобы этот vector стал повсеместно используемой структурой
данных во всем пакете ROOT. Иначе этот vector так и 
останется никому не нужным велосипедом.
  
Да, и еще я забыл про сборку мусора, которой в ROOT
тоже нет.


PS. Я не просто так говорю, я пользовался и ROOT и R.
Использовать C++ как скриптовый язык --- это идиотизм.
Хотя надо признать, что PyROOT представляет шаг 
вперед в этом направлении.

 
  

anonymous
()
Ответ на: комментарий от Valeriy_Onuchin

>Это типа "строка <-> число" не надо вызывать atoi, и пр. 

Строка<->число -- это никоим образом не динамическая типизация.

>но, ведь в C++ есть "overload operator=" ++ всякие там smart pointerы>>
>+++ templates -
>что, несомненно, "мощнеее", чем "Динамическая типизация" 

Когда я пишу высокоуровневый код для интерпретатора, то я хочу
сконценитрироваться на решаемой задаче, а не забивать голову 
подобной херней. Overload operator в C++ это костыль. Я не могу 
определить оператор возведения в степень в C++ так, чтобы он
работал со всеми типами для которых определена операция умножения,
и при этом ничего не зная про эти типы. Единственный способ
сделать это с использованием статической типизации --- это
добавить систему вывода типов (типа как в Haskell), которой
в C++ нет.    
Про smart pointerы я уже сказал выше --- мне не нужны пойнтеры в интерпретаторе, мне нужен сборщик мусора.


anonymous
()
Ответ на: комментарий от Valeriy_Onuchin

Да-да, все преимущества ROOT прикручиваются к R на раз...

А вот наоборот ...

"Только PyROOT представляет из себя шаг вперед"

anonymous
()

Насчёт компактности языка R.

Было дело пару лет назад реализовал на R метод глобальной оптимизации на основе ядерного сглаживания (авторства моего научника и его аспиранта). Не используя пакеты с этим самым сглаживанием, а просто используя стандартные вещи R --- работу с векторами и массивами. И что бы вы думали? Этот метод, который в процедурных языках занимает кучу места, занял у меня 2 машинописных листа, вместе с комментариями и пустыми строками. А тот самый аспирант реализовывал его долго и упорно на процедурном языке.

PS: реализация "по книжке" и отладка заняла часа 2.

Ay49Mihas ★★★★
()
Ответ на: комментарий от Valeriy_Onuchin

Как Вы думаете, зачем люди ходят в зоопарк? Там же зоопарк полный... ;-)
Более по существу: если бы были более строгие ограничения, то пакеты было бы писать сложнее, и многие бы просто не сделали пакетов, которые сейчас есть на CRAN. Разумеется, за это платят "зоопарком". Хотя есть CRAN Task Views -- http://cran.r-project.org/web/views .

plantago
()
Ответ на: комментарий от plantago

> есть CRAN Task Views

не увидел там "Медицинская физика", "image processing",
хотя среди полного списка пакетов подобные есть, типа
чтение DICOM файлов, PET, fMRI, и что-то по image filters.

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Ay49Mihas

> А тот самый аспирант реализовывал его долго ...

на то он и аспирант, ему ведь еще и учиться надо,
а возможно, еще и где-нибудь подрабатывать.

по-поводу "ядерного сглаживания"
ftp://ftp.asu.ru/incoming/pasha/LectureNotes/09-Estimation.ppt
это оно?

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

>по-поводу "ядерного сглаживания"

>это оно?

А зачем спрашиваешь? Это ядерное сглаживание, но "не оно". Ибо принцип один, а вариаций много. Тот метод основан на непараметрической оценке регрессии --- оценке Надарая-Ватсона. Если что. Более того, я в то время был более молодым аспирантом, и использование R позволило мне на порядки сократить время разработки и отладки и в своём комплексе. Троллинг не приветствуется.

Ay49Mihas ★★★★
()
Ответ на: комментарий от Ay49Mihas

> 2Ay49Mihas
нужна помощь по статистике (не мне. я писал про друга, который
"обрабатывает крыс по 100$ каждая" ) в форме вопрос/ответ. Поможите?
Мой e-mail: Valeri.Onoutchine@cern.ch

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

>нужна помощь по статистике. Поможите?

Не, я изрядно поглупел с тех пор --- сказывается зацикленность на линуксе/программинге/Ниве :-D

Точнее, могу поразмыслить над вопросом, но ответ дам скорее всего неправильный :) мыло моё --- ${мой-ник}@inbox.ru

Ay49Mihas ★★★★
()
Ответ на: комментарий от Valeriy_Onuchin

публикуй сюда, если секретное шли p2004r на гмайл

anonymous
()
Ответ на: комментарий от anonymous

> публикуй сюда

дружище запил и крыс на "бабу променял" :)
все, отбой.

Valeriy_Onuchin ★★
()

Список книг:

Baayen R. Analyzing Linguistic Data - A Practical Introduction to Statistics using R.pdf
Chambers J. Software for Data Analysis - Programming with R.pdf
Crawley M. The R Book.pdf
Dalgaard P. Introductory statistics with R.pdf
Everitt B. et al. A Handbook of Statistical Analyses Using R.pdf
Kause A. et al. The Basics of S and S-Plus.pdf
Maindonald J. et al. Data Analysis and Graphics Using R.djvu
Marques J. Applied Statistics Using SPSS, STATISTICA, MATLAB and R.pdf
Murrell P. R Graphics.pdf
Sarkar D. Lattice - Multivariate Data Visualization with R.pdf
Seefeld K. et al. Statistics Using R with Biological Examples.pdf
Spector P. Data Manipulation with R.pdf
Venables W. et al. Modern applied statistics with S.pdf
Venables W. et al. S Programming.pdf
Venables W., Smith D. An Introduction to R.pdf 

http://ifolder.ru/7501417

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.