Najszczęśliwsze zdjęcia posłów i posłanek

Jakiś czas temu, na RBloggers pokazano jak z poziomu R używać Microsoft Cognitive Services API. Co to za API? Zbiór usług do pracy z obrazem, wideo lub tekstem. Przykładowo Ben Heubl użył Emotion API aby ocenić emocje na zdjęciach kandydatów na prezydentów USA a David Smith użył Face API aby oceniać płeć i wiek programistów na GitHub na bazie awatarów.

Super zabawka. Miałem chwilę czasu, stwierdziłem, że się nią pobawię.
Tylko skąd wziąć publicznie dostępny zbiór zdjęć?
Z pomocą przyszła strona Sejmu. Można z niej pobrać profilowe zdjęcia posłów i posłanek.

Korzystanie z Microsoft Cognitive Services okazuje się być bardzo proste, wystarczy użyć pakietu xml2 i funkcji read_html().

Emotion API dla każdej twarzy ze zdjęcia wyznacza scory dla ośmiu emocji (anger, contempt, disgust, fear, happiness, neutral, sadness, surprise). Ale dla zdjęć profilowych posłów i posłanek praktycznie jedyne niezerowe scory otrzymuje się w emocjach happiness i neutral. Okazuje się, że niektóre zdjęcia posłów i posłanek zdobywają wyższe skory w obszarze happiness a inne w neutral.
Co ciekawe posłanki mają znacznie częściej zdjęcia wysoko ocenione w skali happiness. Posłowie mają zdjęcia zeskorowane mniej więcej pół na pół jako happy i neutral.

Poniżej wyniki w rozbiciu na kluby. Proszę traktować to jako zabawkę z Cognitive Services i nie wyciągać niewiadomo jakich wniosków. Narzędzie jak narzędzie, ma jakąś niedokładność. W pionie, kluby uporządkowane ze względu na udział procentowy posłów/posłanek zescorowanych na zdjęciach jako najszczęśliwsi.

Screen Shot 2017-01-18 at 08.36.25

14 myśli na temat “Najszczęśliwsze zdjęcia posłów i posłanek”

    1. Każdy kwadrat to jedna osoba. Jeżeli jest wysoki słupek nad 75-100% to znaczy, że było wiele osób z takim scorem.

      1. A może warto znormalizować do liczby posłów w partii – wtedy zobaczylibyśmy “wskaźnik szczęśliwości” wśród posłów, no bo ilościowo .N i Kukiz’15 jest najmniej, a PiS najwięcej. Na oko, to najszczęśliwsi są z Kukiza: nie są partią i nie mają dotacji?).

        1. Można unormować (mozaikowe wykresy to pierwsze co zrobiłem), tylko wtedy cały wykres jest o porównywaniu partii i gubi się informacja o pojedynczych posłach (a tego chciałem uniknąć).

          Teraz przynajmniej każdy poseł ma swoja kropkę i swoje zdjęcie,
          kluby można porównać zestawiając wysokości słupków szarych i zielonych, dla niektórych partii jest wyższy szary dla innych zielony.
          kluby są zresztą uszeregowane, ich kolejność na osi OY to kolejność od tych ze średnio największą liczbą posłów z wysokim skorem happy po tych o niższym skorze.

          Unikałbym jakichś daleko idących wniosków, gdy się ogląda zdjęcia wysoko i nisko zeskorowane nie zawsze jest jasne skąd takie a nie inne wartości liczbowe wygenerowane przez MCS.

  1. Ciekawe. Czy jest szansa zobaczyć kody? Także te do wykresu.

    Warto byłoby zobaczyć czy poziom zadowolenia na zdjęciach zmienia się wraz z faktem bycia w opozycji / większości parlamentarnej. No i zważyć wartości dla klubów liczebnością

    1. Z dokładnością do stałej (trzeba ustawić własne access key) kody wyglądają tak

      Funkcja do wyciągania emocji z dowolnego zdjęcia.

      Strona sejmu próbuje się bronić przed wyciąganiem zdjeć posłów ze strony o posłach, więc trzeba korzystać z dziur.
      Kod poniżej wyciąga scory i kluby posłów/posłanek.

      Powyższy wynik to lista list list, trzeba zrobić porządek (a że na map/walk się nie przestawiłem, więc kilka brudnych sapply). Dla innych emocji podobnie.

      Wykres to odrobina ggplot2, ale większość przesuwania kropek w Adobe Ilustrator.

        1. A, sorry, tam powinien być link do zdjęcia.
          Ta funkcja powinna wyglądać tak:

  2. Temat robiony pod click-bait :)

    Moim zdaniem metodyka bardziej pokazuje, którzy posłowie dbają o takie szczegóły jak dobry fotograf :)

    Temat ciekawy i można byłoby pobawić się w zaciągnięcie zdjęć z profili fb / twittera.

  3. Pozwolę sobie na małe trzy grosze. To API to jakiś fake: ot filmik z mężczyzną brunetem. Obserwując klatka po klatce API przypisuje emocje bazując na kształcie ust i ignoruje fakty. Dlaczego? Facet jest wyraźnie zły, ale w trakcie wypowiedzi API przypisuje mu fazy jak “neutral” czy “surprise”. Przy czym wiadomo, że stan emocjonalny nie zmienia się z sekundy na sekundę. Jakby nawet podliczyć ilość przypisanych stanów to wyszłoby, że wyraźnie zły człowiek najczęściej był “neutral” albo “surprised”.
    To nie jedyna wada. A co z “happiness”? Przecież od dawna wiadomo, że to bardzo złożona emocja a ze stanów wynika, że to raczej “szeroki uśmiech” a nie faktyczne szczęście. Introwertyk zaliczony byłby przez to API jako “neutral” a w rzeczywistości czułby się szczęśliwym człowiekiem.

    Wystarczy podać zdjęcia z oczywistymi emocjami i wychodzi, że ludzie są neutralni. Gdyby ktoś chciał wnioskować o warunkach bytowania ludzi w obozach odosobnienia na podstawie tego, co wywnioskowało to API to uznałby, że warunki w obozach zagłady były neutralne.

    1. MCS ma ograniczoną skuteczność (jak każdy algorytm machine learning), ale aby mówić o tym czy dużą czy małą trzeba by zrobić badania na większym korpusie zdjęć. To, że jedno czy kilka zdjęcie wychodzi inaczej niż byśmy chcieli o niczym nie świadczy.
      Takie badania (zgodności z oceną ludzkiego scorera) byłyby bardzo ciekawe i do zrobienia przy niewielkich środkach (+czas). Więc może ktoś się pokusi.
      Póki co google niewiele pokazuje na hasło: how good are microsoft cognitive services.

      1. Nie widzę szans na to, żeby zwiększona próbka dała inne wyniki bo decyzja API jest oczywista jak tylko zobaczy kształt ust: proste = neutralność. Także usta otwarte (oczy nie wydają się mieć znaczenia nawet).

        Miłego prowadzenia badań, ale moim zdaniem po odjęciu marketingu tu zostaje co najwyżej rozpoznawanie kształtu ust a nie emocji.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">