Artur Suchwałko

szkolenia: ryzyko kredytowe, data mining, statystyka, analiza danych

Artur Suchwałko - Blog, kategoria GNU R

Oct
01

Książki o GNU R

Znane wydawnictwa również zauważają rosnącą popularność systemu R. Świadczy o tym fakt, że Springer i Cambridge University Press wydają sporo książek temat systemu R oraz jego zastosowań. Listę książek wydanych przez Springera w poświęconej GNU R serii “UseR” można znaleźć tutaj: Springer Use R. Większość książek dotyczących R wydanych przez Cambridge University Press wymieniona jest tutaj: Cambridge Statistics R.

Moją ulubiona książka dotycząca R to “R Graphics” Paula Murrella. Więcej informacji jest na stronie wydawcy.

Sep
28

Szybkość operacji na macierzach i ramkach danych

Czy podstawowe operacje na ramkach danych i macierzach wykonywane są przez R z taką samą szybkością? To oczywiście zależy od rodzaju operacji. Zrobiłem dzisiaj prosty eksperyment polegający na wybieraniu kolumn o tych samych numerach z macierzy i z ramki danych oraz mierzeniu czasu tych operacji.

To nie jest całkiem akademicki problem. W przypadku dużych zadań obliczeniowych różnice w efektywności reprezentacji danych mogą mieć znaczenie. Podobnie podczas obróbki wstępnej danych do dalszych analiz statystycznych, czy wykonywanych metodami data mining. W tej sytuacji podstawowym obiektem jest ramka danych, ale może okazać się, że pewne operacje wykonywane są szybciej na innego rodzaju obiektach.

x.macierz <- matrix(rnorm(5000*1000), 5000, 1000)
x.ramka.danych <- as.data.frame(x.macierz)


podzbior <- sample(1:1000, 1000, replace=T) # losujemy numery kolumn


czas.pocz <- proc.time()
for (i in 1:10) x.macierz[, podzbior] -> y # wybieramy kolumny
proc.time() - czas.pocz


czas.pocz <- proc.time()
for (i in 1:10) x.ramka.danych[, podzbior] -> y
proc.time() - czas.pocz

A czy w przypadku wyboru wierszy zamiast kolumn szybsza okaże się ta sama reprezentacja danych?

Przy okazji, jak widać z przykładu, macierz na ramkę danych konwertuje się funkcją as.data.frame. Ramkę danych na macierz przekształca się korzystając z as.matrix albo data.matrix.

Sep
28

Standardy kodowania w GNU R

Podczas pisania większych programów w dowolnym języku, zwłaszcza w wieloosobowych grupach, niezmiernie przydatne okazuje się standaryzacja sposobu kodowania (w tym konwencja nazewnictwa typów, zmiennych, stałych itp.).

Jedyna znana mi propozycja standardu kodowania dla języka R dostępna jest tutaj: R Coding Conventions.

Dla innych języków takich propozycji standardów jest wiele i bez trudności można znaleźć dużo materiałów na ten temat. Przykładowa konwencja nazewnictwa dla C++ znajduje się tutaj C++ Programming Style Guidelines.

Z mojego doświadczenia wynika, że stosowanie takich konwencji, nawet podczas pisania średniej wielkości programów, procentuje w przyszłości.

Sep
28

GNU R w instytucjach komercyjnych

Częstą przeszkodą dla firm chcących używać systemu R komercyjnie jest brak wsparcia technicznego. Kilka firm postanowiło ten problem rozwiązać oferując własne wersje R oraz wsparcie dla ich użytkowników.

Znane są mi dwie takie firmy: REvolution Computing oraz Random Technologies, LLC. Pierwsza z nich oferuje dwa produkty: RPro (komercyjnie wspierana wersja GNU R) oraz ParallelR (system umożliwiający obliczenia równoległe z wykorzystaniem GNU R). Random Technologies, LLC oferuje RStat – wersja GNU R ze wsparciem. Zakres wsparcia jest różny, zależnie od rodzaju licencji.

Informację o RPro podał niedawno na przykład Reuters: “REvolution Computing Launches RPro(TM)”.

Powstanie takich produktów świadczy o rosnącej popularności systemu R na świecie, także w zastosowaniach komercyjnych.

Sep
23

Analiza czasu wykonania kodu w R

W poważnych obliczeniach (symulacje, praca na dużych danych) czas ich trwania ma znaczenie. Postanowiłem zacząć od tego tematu, ponieważ w praktyce często spotykam się z obliczeniami, które długo trwają oraz z dużymi zbiorami danych.

Jeśli chcemy oszacować czas działania funkcji (w przykładzie liczymy odchylenie standardowe z próby miliona wylosowanych liczb):

system.time(sd(rnorm(10^6)))

Czas wykonania można również wyznaczać dla fragmentu kodu:

czas.1 <- proc.time()
x <- rnorm(10^6)
hist(x)
czas.2 <- proc.time()
czas.2 - czas.1

Przy okazji warto porównać działanie dwóch wariantów funkcji seq: seq i seq_len. Jak wiadomo, funkcja seq służy do generowania wektorów składających się z równoodległych elementów. Druga funkcja jest jej szybszym wariantem szczególnym.

system.time(seq(1:10^8) -> x)
system.time(seq_len(1:10^8) -> x)

Okazuje się, że można znacznie przyspieszyć działanie kodu dzięki zastosowaniu bardziej starannie dobranych funkcji czy konstrukcji programistycznych. Do wektoryzacji operacji, efektywności kodu i podobnych operacji będę jeszcze wracał.

Do dokładniejszej oceny szybkości działania kodu można skorzystać z dostępnego w R profilera.

Przy okazji, popatrzmy na funkcję seq_along:

seq_along(LETTERS[6:10])

Taka ciekawostka, może się czasem przydać, szczególnie w pętlach.

Sep
23

Na początek

Ten blog będzie dotyczył moich zainteresowań zawodowych: systemu GNU R, analizy danych, statystyki obliczeniowej, data miningu oraz ryzyka kredytowego.

Najprawdopodobniej na blogu będzie dominował system R. Używam go intensywnie od kilku lat. Praktycznie codziennie. Uczę studentów wykorzystania R (data mining, statystyka), wykorzystuję go podczas szkoleń i przygotowywania materiałów szkoleniowych (R ma świetne możliwości graficzne). Z systemu R korzystam także podczas pracy statystyka w banku: do budowy systemów scoringowych, analizy ryzyka kredytowego, do budowy modeli na potrzeby metody zaawansowanej w Basel II oraz do innych celów. System R wykorzystuję także w projektach komercyjnych z bioinformatyki (analiza danych SELDI-ToF) i z innych dziedzin oraz w pracy naukowej.

Bez R nie wyobrażam sobie pracy. Narzędzie jest potężne, elastyczne i wciąż mnie zaskakuje. Wydaje się, że potrafi wszystko: obliczenia rozproszone, obliczenia symboliczne, programowanie obiektowe, integracja z dowolnymi narzędziami i językami programowania. Na serwerach CRAN w oficjalnej dystrybucji jest ponad 1500 pakietów / bibliotek rozszerzających możliwości R.

Z wpisów na blogu nie powstanie raczej kurs systemu R dla początkujących. Będę starał się wybierać głównie ciekawostki oraz potencjalnie przydatne w praktyce elementy. W Sieci można znaleźć bardzo dużo pomocy do nauki R. Potrzeba tylko dobrych chęci i czasu. Początki z R z pewnością będą trudne, ale naprawdę warto zainwestować czas.

Sądzę, że oprócz kwestii związanych z R dosyć często będą pojawiały się wpisy dotyczące data miningu. Będę pisał przede wszystkim o data miningu w kontekście R, ale też o innych darmowych narzędziach oraz o samej metodologii data miningu i algorytmach.



szkolenia | data mining | analiza danych | statystyka | system statystyczny R | predictive modeling

prognozowanie | credit scoring | ryzyko kredytowe | programowanie | eksploracyjna analiza danych

analiza skupień | klasyfikacja | wizualizacja | darmowe oprogramowanie statystyczne | Wrocław