R stronki

Poniżej umieszczam kilka przydatnych linków do stron internetowych opisujących pewne zagadnienia które często wymagają rozwiązania lub zastosowania podczas badań wspieranych pakietem R project. Na stronach tych można uzyskać informacje na temat:

– sortowania oraz grupowania danych (http://www.ats.ucla.edu/stat/r/faq/sort.htmhttp://stackoverflow.com/questions/1296646/how-to-sort-a-dataframe-by-columns-in-r). Przy czym pierwszy link jest także krótkim kursem wprowadzającym do R,

– profilowania aplikacji napisanych w R, w szczególności tych które wymagają użycia dużych zasobów pamięci. Czasami warto wiedzieć co aktualnie rezyduje na stosie pamięci (http://developer.r-project.org/memory-profiling.htmlhttp://heuristically.wordpress.com/2010/01/04/r-memory-usage-statistics-variable/),

– tworzenia wykresów Pareto informacje można znaleźć na stronie http://www.oga-lab.net/RGM2/func.php?rd_id=qcc:pareto.chart opisującej pakiet i metody które służą do tego celu.

Życzę miłego korzystania z wyżej przedstawionych rozwiązań.

R mapy i R geotagowanie

Ostatnio poszukiwałem rozwiązania do geotagowania. Proces ten chciałem wykonać za pomocą nie API google map dla java scriptu lecz web serwisów i r project. Podyktowane to było tym aby utrzymać jednolite rozwiązanie programistyczne tj. jednolitą platformę eksperymentalną do przetwarzania tekstów w postaci raportów zaimplementowaną w jednym języku, bez różnego rodzaju miksów. Na początku rozpatrywałem użycie PHP i Java Scriptu niemniej po przeszperaniu internetu natknąłem się dość ciekawe rozwiązanie dla r project. Poniżej prezentuje listę linków związanych z zastosowaniem API google map w połączeniu z r project:

– http://www.r-chart.com/2010/07/maps-geocoding-and-r-user-conference.html

– http://cran.r-project.org/web/packages/RgoogleMaps/vignettes/RgoogleMaps-intro.pdf

– http://cran.r-project.org/web/packages/RgoogleMaps/RgoogleMaps.pdf

– http://cran.r-project.org/web/packages/RgoogleMaps/index.html

– http://cran.r-project.org/web/packages/gooJSON/gooJSON.pdf

– http://cran.r-project.org/web/packages/googleVis/vignettes/googleVis.pdf

– http://cran.r-project.org/web/packages/plotGoogleMaps/plotGoogleMaps.pdf

Powodzenia w stosowaniu ww. rozwiązań.

R project – obiektowość

R project posiada trzy systemy obiektowe: S3, S4 i S5. Odniesienia i opisy tych systemów można znaleźć na stronach:

https://github.com/hadley/devtools/wiki/R5 – opisującej nowy system S5,

http://biecek.pl/R/RC/Jakub%20Derbisz%20R%20reference%20card%20classes.pdf, opisującej podstawowe operatory klas,

http://stat.ethz.ch/R-manual/R-devel/library/methods/html/refClass.html, manual opisujący system S5 i funkcję setRefClass() służącą do tworzenia interfejsu klasy,

http://www.youtube.com/watch?v=UZkaZhsOfT4, prezentacja zawierająca opis trzech ww. systemów oraz opis integracji R project z C++ poprzez pakiet Rcpp.

Zainteresowanym życzę miłej lektury. Poniżej natomiast przedtsawiam próbke kodu opisującej interfejs klasy account zaczerpniętej z prezentacji, do której link znajduje się na ostatniej pozycji ww. stron.

account <- setRefClass("Account_R5",
	fields = list(
		balance = "numeric",
		overdraft = "numeric"
	),
	methods = list(
		withdraw = function(amount) {
			print("Compute withdraw...")
		},
		deposit = function(amount) {
			print("Compute deposit...")
		}
	)
)

x <- account$new(balance = 10.0, overdraft = 0.0)

x$withdraw(5)
x$deposit(10)

R strony

Ostatnio szperając  po internecie za materiałami o języku R (w którym aktualnie wytwarzam większość softu do badań i eksperymentów) natknąłem się na świetny blog popularyzujący ten język, czy też platformę do obliczeń statystycznych i nie tylko.  Polecam dla osób zainteresowanych tym tematem wejście na http://www.r-bloggers.com/. Znajdziecie tam najświeższe informacje o zastosowaniach języka R i nie tylko, życzę miłej lektury.

Czas wyruszyć na konferencję – Technologie Eksploracji i Reprezentacji Wiedzy 2011

Jutro 07.08.2011 wyruszam po raz kolejny na konferencję pt. “Technologie Eksploracji i Reprezentacji Wiedzy” osoby zainteresowane tą tematyką mogą odnaleźć materiały konferencyjne na stronie głównej konferencji (http://irys.wi.pb.edu.pl/terw2011/pl/index.html). Osobiście będę prezentował temat pt. “Segmentator regułowy do segmentacji raportów z akcji ratowniczo-gaśniczych PSP: metoda projektowania i ocena rozwiązania”. Tak więc zostanie zaprezentowany kolejny etap prowadzonych przeze mnie badań nad analizą raportów Państwowej Straży Pożarnej (PSP). Streszczenie odczytu który zostanie przeze mnie wygłoszony można znaleźć pod następującym linkiem streszczenie odczytu(referatu).

Binarne miary podobieństwa pół-strukturalnych przypadków zdarzeń

W niniejszym wpisie umieściłem część materiału związane z prezentacją i pochodzeniem wybranych miar binarnych. Prezentowane treści ze względu na ograniczone możliwości redakcyjne musiały zostać usunięte z niektórych publikacji. Niemniej blog nie ma żadnych ograniczeń tak więc zachęcam do zapoznania się z pochodzeniem i z odmianami niektórych miar binarnych oraz z autorskimi wyprowadzeniami niektórych z nich.

Czytaj dalej

Analiza danych tekstowych w projektowaniu wybranego systemu informacyjnego na przykładzie dokumentacji ze zdarzeń krajowego systemu ratowniczo-gaśniczego

Niżej przedstawiam streszczenie referatu jaki zostanie odczytany na seminarium Wydziału Informatyki Politechniki Białostockiej.  Zachęcam do lektury. Ewentualnie streszczenie można odnaleźć na stronie Wydziału Informatyki Politechniki Białostockiej.

Czytaj dalej

Laboratoria nr 14 program nr 2

Pliki tekstowe i binarne. Operacje na plikach tekstowych.

Przyjmijmy, że jest dostępny plik tekstowy txt np. example.txt do którego, z procesu przetwarzania tekstu ze stron internetowych, co 10 minut poprzez Wi-fi zapisywane są dane w postaci łańcuchów znaków do wybranego pliku na serwerze. Przykładowa zawartość tego pliku została pokazana poniżej.

example.txt

s1 s2 s3
s4 s5 s6

Należy napisać program który odczyta zawartość podanego pliku oraz odpowiednio go przetworzy. Przetworzenie polega na obliczeniu i podaniu dla użytkownika:

– ilości linii znajdujących się w pliku,

– ilości liter bez spacji,

– ilości liter ze spacjami

– ilości wyrażeń w postaci słów (tokenów) znajdujących się w pliku.

Przykładowy zrzut z działającego programu przedstawiono poniżej na rysunku 1. Zebrane dane mają zostać, oprócz wyświetlenia ich na standardowym wyjściu konsoli, zapisane do oddzielnego pliku np. save.txt.

image

Rysunek 1. Zrzut działającego programu.

Szkielet przykładowej aplikacji został umieszony poniżej. Szkielet ten zawiera elementy które należy odpowiednio uzupełnić. Oczywiście można zaproponować własne, oryginalne rozwiązania. Poszczególne informacje dotyczące zebranych statystyk z przetworzonego pliku mają zostać umieszczone w strukturze. Z tego względu należy zaprojektować odpowiednie funkcje do wprowadzania oraz wyprowadzania danych tej struktury.

#include "stdafx.h"
#include <iostream>
#include <string>

// Biblioteka dostarczajaca interfejs do zapisu/odczytu danych do pliku
// @see http://www.cplusplus.com/reference/iostream/fstream/
#include <fstream>

using namespace std;

// Struktura przechowujaca informacje o zebranych ststatystychach z analizowanego tekstu
struct statStr {
	std::string text;
	int cLine;
	int ???;
	int cLetter;
	int ???;
};

/**
	Prototyp funkcji do obliczania ilosci liter wraz ze spacjami
*/
int cSpaceLetter(???);

/**
	Prototyp funkcji do obliczania ilosci liter bez spacji
*/
int ???(string s);

/**
	Prototyp funkcji do obliczania ilosci wyrazen
*/
int cToken(????);

/**
	Prototyp funkcji do pokazywania zebranych i zapisanych w strukturze ststystyk
	@note :: UWAGA prosze zastosowac zapis bez modyfikatora const i referencji 
	@note :: UWAGA jesli zastosuja Panstwo modyfikator const i referencje to 
				prosze wyjasnic do czego one sluza (jak dzialaja)
*/
void showStatStr(const statStr &s);

/**
	Prototyp funkcji do zapisywania zebranych i zapisanych w strukturze ststystyk do pliku
	@note :: UWAGA prosze zastosowac zapis bez modyfikatora const i referencji 
	@note :: UWAGA jesli zastosuja Panstwo modyfikator const i referencje to 
				prosze wyjasnic do czego one sluza (jak dzialaja)
*/
void saveStat(const statStr &s);

/**
	Program glowny do prezentujacy mozliwosc odczytywania oraz zapisywania
	danych do wybranych plikow w C++

	@author Marcin Mironczuk
*/
int main()
{
	string line;

	// Utworzenie "uchwytu" do obslugi wybranego pliku
	ifstream myfile;
	// Otwarcie pliku
	myfile.???(???);
  
	// Jesli udalo sie otworzyc plik to rozpocznij jego przetwarzanie
	if (myfile.is_open()) {
		
		double suma = 0;
		int i = 0;
		
		int ccLetter = 0;
		int ccToken = 0;
		int ccSpaceLetter = 0;

		string sLine;

		// Statyczne przydzielenie pamieci na strukture
		statStr s;

		// Przetwarzanie otwartego pliku w petli
		while (myfile.METODA_NADZORUJACA_CZY_OSIAGNIETO_KONIEC_PLIKU()) {
			// Pobranie lini z pliku i zapis do zmiennej line
			getline(???,???);
			
			// Uzycie zdefiniowanych plikow do przetwarzania linii tekstu
			// w celu zebrania odpowiednich ststystyk
			ccLetter += ???(line);
			ccToken += ???;
			??? += cSpaceLetter(line);

			sLine += line + " ";

			i++;
		}
		
		s.cLetter = ???;
		s.??? = i;
		???;
		s.??? = ccToken;
		s.??? = ???;

		// Pokazanie statystyk na wyjsciu konsolii
		showStatStr(s);
		
		// Zapis statystyk do pliku
		saveStat(s);

		// Zamkniecie pliku
		myfile.close();
	} else {
		// Jesli nie udalo sie otworzyc pliku to wyswietl odpowiedni komunikat dla uzytkownika
		cout << "Nieudana proba otwarcia pliku";
	}

	cin.get();

	return 0;
}

int cSpaceLetter(string s) {
	// Algorytm
}

int cLetter(string s) {
	// Algorytm
}

int cToken(string s) {
	// Algorytm
}

void showStatStr(const statStr &s) {
	// Algorytm pokazania pol struktury
}

void saveStat(const statStr &s) {
	ofstream myfile;
	myfile.METODA_DO_OTWIERANIA_PLIKU ("???");

	myfile << "Zebrane statystyki.\n";
	myfile << "Ilosc przetworzonych linii: " << ??? << endl;
	???
	???
	myfile << "Ilosc wyrazen w pliku: " << ??? << endl;
	???;

	myfile.ZAMKNIECIE_PLIKU();
}

Laboratoria nr 14 program nr 1

Pliki tekstowe i binarne. Operacje na plikach tekstowych.

Przyjmijmy, że jest dostępny plik tekstowy txt np. example.txt do którego, z procesu pomiarowego napięcia, co 10 minut poprzez Wi-fi zapisywane są dane pomiarowe. Przykładowa zawartość tego pliku została pokazana poniżej.

example.txt

12.3

12.4

12.3

11.98

11.93

12.3

12.5

12.5

Należy napisać program który odczyta zawartość podanego pliku, wyświetli wyniki pomiarów napięcia na standardowe wyjście konsoli oraz obliczy i poda użytkownikowi wartość średnią napięcia (wartość średnia napięcia ma być obliczana za pomocą funkcji). Plik pomiarowy może zawierać dowolną ilość zarejestrowanych wartości napięć.

Szkielet przykładowej aplikacji został umieszony poniżej. Szkielet ten zawiera elementy które należy odpowiednio uzupełnić. Oczywiście można zaproponować własne, oryginalne rozwiązania.

#include "stdafx.h"

/**
	@note :: Prosze zapoznac sie z nizej podanymi bibliotekami
*/
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>

using namespace std;

/**
	Prototyp funkcji do obliczenia sredniej z pomiarow
*/
double sampleMean(???, ???, ... ???);

/**
	Program C/C++ demonstrujacy mozliwosc pobierania danych z pliku
	w raz z dodatkowym przetwarzaniem tych danych.Przetwarzanie polega
	na obliczeniu wartosci sredniej z pomiarow zapisanych w pobranym pliku.

	@author Marcin Mironczuk
*/
int main()
{
	// Zmienna tymczasowa do przechowywania odczytanej lini z pliku
	string line;

	// Uchwyt do pliku
	ifstream myfile;
	// Otworzenie pliku
	myfile.METODA_DO_OTWERANIA_PLIKU(???);
  
	// Wykonanie zadanego algorytmu do przetwarzania zawartosci pliku
	if (myfile.is_open()) {
		
		double suma = 0;
		int i = 0;

		// Przejzenie zawartosci pliku w petli
		while (myfile.METODA_NADZORUJACA_CZY_OSIAGNIETO_KONIEC_PLIKU()) {
			// Pobranie lini danych
			getline(???,line);
			
			// Pierwszy sposob rzutowania C++
			std::istringstream stm;
			stm.str(line);
			
			// Zmienna do ktorej bedzie przypisywana wartosc z rzutowania 
			double d1;
			stm >> ???;

			// Drugi sposob rzutowania specyficzny dla C
			// Zmienna do ktorej bedzie przypisywana wartosc z rzutowania 
			double d2;
			d2 = FUNCKJA_C_SLUZACA_DO_RZUTOWANIA(line.METODA_DO_PRZEKSZTALCENIA_LANCUCHA_DO_TABLICY_W_STYLU_C());
					
			// Wyswetlenie wartosci
			cout << ??? << endl;
			cout << ??? << endl;
			cout << ??? << endl;

			// Sumowanie zapisanych wartosci
			???;
			i++;
		}
		
		// Wykorzystanie funkcji do obliczenia sredniej z pomiarow ktorych wartosci zostaly zapisane
		// w pliku i wyzej przetworzone
		cout << "Srednia z zarejestrowanych pomiarow wynosi: " << ??? << endl;

		// Zamkniecie pliku
		myfile.close();
	} else {
		// Informacja uzytkownika w przypadku gdy nie udalo sie otworzyc pliku
		cout << "Proba otworzenia pliku nie powiodla sie";
	}

	cin.get();

	return 0;
}

double sampleMean(???) {
	// Algorytm do obliczania sredniej
}

Konferencja BDAS’11

Zakończyła się kolejna edycja konferencji BDAS’11. Wspaniała impreza oraz niepowtarzalna atmosfera. Zachęcam do uczestniczenia w następnych edycjach ludzi którzy jeszcze nie są pewni – naprawdę warto. Niezbędne informacje na temat konferencji jak i materiały prezentowane na sesjach plakatowych jak i planarnych można odnaleźć na stronie konferencji http://zti.aei.polsl.pl/bdas.