Pokazywanie postów oznaczonych etykietą statistics. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą statistics. Pokaż wszystkie posty

niedziela, 27 lipca 2014

Count lines of code

CLOC to tool do wyliczenia liczby plików różnych formatów oraz wylicza ile jest tych linijek kodu oraz komentarzy w tych plikach.Jest to tool, bardzo prosty w działaniu. Zacząłem pisać wrapper na PowerShella.
Pierwsza funkcja już jest:
function Get-Loc
{
    param($location="."
)
    $commandLine = "$location --csv"
    $clocResult = & $clocPath $location --csv
    $indexOfLineCsvToParse = [array]::IndexOf($clocResult, "")
    if($indexOfLineCsvToParse -lt 0)
    {
        throw "cant get empty line in cloc result"
    }
    $csvToparse = $clocResult[$indexOfLineCsvToParse..($clocResult.Length)]
    $csvFeed = ConvertFrom-Csv $csvToparse -Delimiter ',' | select  files,language,blank,comment,code  

    return  $csvFeed | %{
        return New-Object PSObject  -prop @{
                                    Files = [int]($_.files);
                                    Language = $_.language;
                                    Blank = [int]($_.blank);
                                    Comment = [int]($_.comment);
                                    Code = [int]($_.code);
                               }
                    } 
}
Aby wyświetlić statystykę projektów to wystarczy wywołać:
 Get-Loc "C:\ProjectDir"
Skrypt jest dostępny w github'a.

środa, 5 lutego 2014

Im mniej IE tym mniej morderstw


Natrafiłem na ciekawy wykres. Okazuje się, że jest zależność między popularnością IE, a ilością morderstw w USA.


niedziela, 24 listopada 2013

Wyciągnięta nauka z statystyki

Zastanawiam się, po co te wszystkie metody statycznej analizy danych, szukanie reguł i zależności, grupowanie elementów i inne bardziej lub mniej złożone metody analizy skoro możemy mieć błędne dane. Najważniejszą naukę jaką zdobyłem z analizy danych jest to, że metody analizy dobrze działają, ale dane zostały źle uzyskane.

Znasz to przysłowie:

Statystyka nie kłamie,
ale kłamcy liczą.


albo jak J.Stalin mawiał:
Nieważne, kto głosuje, ważne, kto liczy głosy.

Nawet w dzisiejszych czasach da się oszukać ludzi na wielką skalę.



środa, 13 marca 2013

Wizualizacja społeczeństwa na świecie

Miałem przyjemność zapoznania się z narzędziem, które wizualizuje dane statystyczne. To narzędzie nazywa się GapMinder. Za pomocą tego narzędzia można ciekawe rzeczy wywnioskować np. ilość urodzonych dzieci na jedną matkę jest odwrotnie proporcjonalne do PKB, albo wraz ze wzrostem długości życia wzrasta PKB. Za pomocą tego narzędziu można znaleźć pewną korelację rządzącą światem np. PBK i przeżywalność urodzonych dzieci.



Bardzo zachęcam do pobawienia się narzędziem. Poniżej zamieszczam filmiki pokazujące co można z GapMinderem zrobić.












Zastanawiam się czy można zastosować ten tool w nauczaniu dzieci w polskich szkołach. Jak ja chodziłem do szkoły to nie miałem takich możliwości wizualizacji danych. Gdybym jednak miał taką możliwość, to do tej pory bym został statystykoholikiem :)





Możesz pobrac wersje desktopową GapMindera pod tym adresem


poniedziałek, 27 lutego 2012

Sieć bayesowska w .NET

Sieć bayesowska jest zaawansowaną probabilistyczną metodą odkrywania wiedzy i wnioskowania. Przedstawia ona zależności pomiędzy zdarzeniami bazując na wzorze Bayesa oraz rachunku prawdopodobieństwa. Umożliwia reprezentację probabilistycznych zależności przyczynowych między dowolnymi atrybutami (zdarzeniami). W praktyce sieć bayesowska jest reprezentowana przez skierowany graf acykliczny. Największą korzyścią sieci bayesowskiej jest czytelna i intuicyjna graficzna reprezentacja wiedzy o bezpośrednio zachodzących zależnościach.

Poniżej przedstawiony jest przykład modelu graficznego sieci. Mokra trawa(atrybut WetGrass) jest bezpośrednio uzależniona od dwóch czynników: czy został załączony zraszacz (Sprinkler) oraz od tego czy padał deszcz (Rain). Te dwa czynniki są uzależnione od pochmurności ( atrybut Cloudy). Zgodnie z relacją przechodnią, mokra trawa jest pośrednio zależna od pochmurności. Każdy z atrybutów ma dwie opcje: może zajść lub nie może zajść (T i F). Dla każdej kombinacji przedstawione jest prawdopodobieństwo wystąpienia takiego zdarzenia.


Dajmy na to, że chcemy obliczyć z jakim prawdopodobieństwem padał deszcz (Rain(R)=T) przy zaistnieniu (zaobserwowaniu) mokrej trawy (atrybut WetGrass(W)= T). Czyli mamy do czynienia z prawdopodobieństwem warunkowym P(R|W=T).
Do implementacji takiego modelu z pomocą przychodzi nam projekt o naziwe Infer.NET. Służy on m.in. do wnioskowania dla bayesowskiego modelu graficznego. Implementacja przedstawiona jest poniżej:
#region implementacja modelu
     //pochmurnie
     Variable<bool> cloudy = Variable.Bernoulli(0.5);

     // spryskiwacz 
     Variable<bool> sprinkler = Variable.New<bool>();
     using (Variable.If(cloudy))
            sprinkler.SetTo(Variable.Bernoulli(0.1));

     using (Variable.IfNot(cloudy)) 
            sprinkler.SetTo(Variable.Bernoulli(0.5));

     // deszcz
     Variable<bool> rain = Variable.New<bool>();
     using (Variable.If(cloudy)) 
               rain.SetTo(Variable.Bernoulli(0.8));

     using (Variable.IfNot(cloudy)) 
               rain.SetTo(Variable.Bernoulli(0.2));

    // mokra trawa
    Variable<bool> wetGrass = Variable.New<bool>();
    using (Variable.If(sprinkler))
    {
           using (Variable.If(rain)) 
                  wetGrass.SetTo(Variable.Bernoulli(0.99));

           using (Variable.IfNot(rain)) 
                  wetGrass.SetTo(Variable.Bernoulli(0.9));
    }
    using (Variable.IfNot(sprinkler))
    {
           using (Variable.If(rain)) 
                  wetGrass.SetTo(Variable.Bernoulli(0.9));

           using (Variable.IfNot(rain)) 
                  wetGrass.SetTo(Variable.Bernoulli(0.0));
    }
#endregion

#region wnioskowanie
wetGrass.ObservedValue = true;  //mokra trawa
InferenceEngine ie = new InferenceEngine();
ie.ShowProgress = false;
Console.WriteLine("P(deszcz | trawa jest mokra)=" 
        + ie.Infer(rain));

Console.WriteLine("P(spryskiwacz | trawa jest mokra)=" 
        + ie.Infer(sprinkler));

cloudy.ObservedValue = false; //nie jest pochmurnie
Console.WriteLine("P(deszcz | trawa jest mokra,  nie jest pochmurnie)="
       + ie.Infer(rain));

Console.WriteLine("P(spryskiwacz | trawa jest mokra, nie jest pochmurnie)="
       + ie.Infer(sprinkler));
#endregion


W 60 linijkach mamy zaimplementowany cały model graficzny oraz mechanizm wnioskujący. Dla potrzeb publikacji zamieściłem zdjęcie z okienkiem całej aplikacji oraz prawdopodobieństwa dla paru innych warunków.



Implementacja podanego przykładu można znaleźć pod adresem Bayesian Networks na Codeplex. Więcej o samej sieci bayesowskiej jest na wykładzie pt. Introduction To Bayesian Inference.