wojtekw - z poprawnym przeskalowaniem
library(matrixStats)
library(R.methodsS3)
#biblioteki plyr uzyjemy do szybkiego wygenerowania podsumowan
library(plyr)
#do wykresow:
require(ggplot2)
#wyczyść wszystkie zmienne z pamięci
rm(list=ls(all=TRUE))
#run garbage collector
gc()
#wczytanie danych dotyczacych ocen stron przez mturkow
#d_eval<-read.csv("/Users/andi/Desktop/RECONCILE/IBR2.csv", header=TRUE, sep=";")
d_eval<-read.csv("/Users/andi/Desktop/RECONCILE/DANE_evaluations.csv", header=TRUE, sep=";")
#PRZESKALOWANIE DANYCH
konwertuj<-function(df_name,column_name) {
df_name[,column_name][df_name[,column_name]==5]<-NA #zrodlowe 5 zamien na NA (don not know)
df_name[,column_name][df_name[,column_name]==4]<-5 #zrodlowe 4 zamien na 5 (completly credible)
df_name[,column_name][df_name[,column_name]==3]<-4 #zrodlowe 3 zamien na 4 (credible, with some doubt)
df_name[,column_name][df_name[,column_name]==2]<-3 #zrodlowe 2 zamien na 3 (somewhat credible, although with major doubt)
df_name[,column_name][df_name[,column_name]==1]<-2 #zrodlowe 1 zamien na 2 (mostly not credible)
df_name[,column_name][df_name[,column_name]==0]<-1 #zrodlowe 0 zamien na 1 (completly not credible)
return (df_name)
}
#WYKONANIE przeksalowania danych
d_eval<-konwertuj(d_eval,"documentevaluation_credibility")
#przygotowanie danych dla Troi
#z NA
troia_input<-subset(d_eval,select=c(person_id,document_id,documentevaluation_credibility))
write.table(troia_input, file="/Users/andi/Desktop/RECONCILE/troia_input.csv",row.names=FALSE, col.names=FALSE,sep=" ")
#bez NA
troia_input_without_na <- troia_input[!is.na(troia_input$documentevaluation_credibility),]
write.table(troia_input_without_na, file="/Users/andi/Desktop/RECONCILE/troia_input_without_na.csv",row.names=FALSE, col.names=FALSE, sep=" ")
#z 0 zamiast NA
troia_input_with_zeros <- troia_input
troia_input_with_zeros[is.na(troia_input_with_zeros)]<-0
write.table(troia_input_with_zeros, file="/Users/andi/Desktop/RECONCILE/troia_input_with_zeros.csv",row.names=FALSE, col.names=FALSE, sep=" ")
#WYKRESY LICZBY OCEN
#zwroci tabele zawierajaca w pierwszej kolumnie liczbe ile-krotnie strona zostala oceniona, a w drugiej ile stron z calego zbioru dotyczyla tylo-krotna ocena.
#wariant wliczajacy NA
count(count(d_eval,"document_id"),"freq")
b<-barplot(count(count(d_eval,"document_id"),"freq")$freq.1,main="Distribution of number of ratings per page (including 0 - \"don\'t know\")",names.arg=count(count(d_eval,"document_id"),"freq")$freq)
mtext(side = 1, at = b, text = paste("#:",count(count(d_eval,"document_id"),"freq")$freq.1), line = 3)
#wariant pomijajacy NA
count(count(troia_input_without_na,"document_id"),"freq")
b<-barplot(count(count(troia_input_without_na,"document_id"),"freq")$freq.1,main="Distribution of number of ratings per page(without 0 - \"don\'t know\")",names.arg=count(count(troia_input_without_na,"document_id"),"freq")$freq)
mtext(side = 1, at = b, text = paste("#:",count(count(troia_input_without_na,"document_id"),"freq")$freq.1), line = 3)
srednia<-function(lista) {
sum1=0
sum2=0
for (i in 1:length(lista)){
sum1=sum1+reated(lista[i])*notna(lista[i])
sum2=sum2+reated(lista[i])
}
if (sum2!=0){
as.numeric(sum1/sum2)
}
else if(sum1==0){
as.numeric(0)
}
}
wariancja<-function(lista) {
sum1=0
sum2=0
srednia=srednia(lista)
for (i in 1:length(lista)){
sum1=sum1+reated(lista[i])*(notna(lista[i])-srednia)^2
sum2=sum2+reated(lista[i])
}
if (sum2!=0){
as.numeric(sum1/sum2)
}
else if(sum1==0){
as.numeric(0)
}
}
reated <- function(arg){
if(is.na(arg)){
as.numeric(0)
}
else
{
as.numeric(1)
}
}
notna <- function(arg){
if(is.na(arg)) 0 else arg
}
# co najmniej 2 oceny=5 -> strona trafia do klasy HC (Highly Credibly)
# co najmniej 2 oceny=4 -> strona trafia do klasy N (Neutral)
# co najmniej 2 oceny<4 -> strona trafia do klasy HNC (Highly Not Credible)
adamw_classifier<-function(lista){
#zamiana NA na 0
for (i in 1:length(lista)){ lista[i]=notna(lista[i]) }
#stworzenie data frameu z czestosciami wystapien poszczegolnych ocen dla strony
df<-data.frame(table(lista))
if ((5 %in% df$lista) && (df[df$lista==5,]$Freq >= 2)) {
#print("HC was assigned")
return (as.character("HC")) #(3)#
}
else if ((4 %in% df$lista) && (df[df$lista==4,]$Freq >= 2)){
#print("N was assigned")
return (as.character("N")) #(2)#
}
else if (sum(df[as.numeric(levels(df$lista)[df$lista]) < 4,]$Freq) >=2){
#print("HNC was assigned")
return (as.character("HNC")) #(1)#
}
else{
#print("UNDIFINED was assigned")
return (as.character("UNDEFINED")) #(0)#
}
}
#stworzenie słownik klas
klasy_adamw<-c(0,1,2,3)
names(klasy_adamw)<-c("UNDEFINED","HNC","N","HC")
# ZAAGREGOWANIE OCEN, wyliczenie SREDNICH, WARIANCJI, WYZNACZENIE WARTOSCI ADAMW CLASSIFIER
dane<-ddply(troia_input_without_na,.(document_id),summarise,SREDNIA=srednia(documentevaluation_credibility),WARIANCJA=wariancja(documentevaluation_credibility),CLASS_ADAMW=adamw_classifier(documentevaluation_credibility),CLASS_NUM=klasy_adamw[[adamw_classifier(documentevaluation_credibility)]])
dane_without_undefined<-dane[!dane$CLASS_ADAMW=="UNDEFINED",]
# WYKRES WARIANCJI I SREDNIEJ
plot(y=jitter(dane$WARIANCJA,amount=0.2),x=jitter(dane$SREDNIA,amount=0.2),main="WYKRES WARIANCJI i SREDNIEJ")
# WYKRES WARIANCJI I SREDNIEJ + NANIESIENIE WARTOSCI KLASYFIKATORA ADAMAW
qplot(y=jitter(dane$WARIANCJA,amount=0.2), x=jitter(dane$SREDNIA,amount=0.2),colour=dane$CLASS_ADAMW,main="WYKRES WARIANCJI i SREDNIEJ + NANIESIENIE WARTOSCI KLASYFIKATORA ADAMAW")
# WYKRES WARIANCJI I SREDNIEJ + NANIESIENIE WARTOSCI KLASYFIKATORA ADAMAW bez "UNDEFINED"
qplot(y=jitter(dane_without_undefined$WARIANCJA,amount=0.2), x=jitter(dane_without_undefined$SREDNIA,amount=0.2),colour=dane_without_undefined$CLASS_ADAMW,main="WYKRES WARIANCJI I SREDNIEJ + NANIESIENIE WARTOSCI KLASYFIKATORA ADAMAW bez \"UNDIFINED\"")
#K - MEANS
kmeans_data<-matrix(c(dane$SREDNIA, dane$WARIANCJA),ncol=2)
kmeans_result<-kmeans(kmeans_data,length(unique(dane$CLASS_ADAMW))-1)
#WYKRES pokolorwany grupowaniem według K-MEANS
plot(y=jitter(dane$WARIANCJA,amount=0.2),x=jitter(dane$SREDNIA,amount=0.2),main="WYKRES pokolorwany grupowaniem według K-MEANS",col=kmeans_result$cluster)
points(kmeans_result$centers,col=6,pch=10,cex=3)
legend("topleft", legend = paste("Group", 1:3), pch=1, col=2:4)