Bez kategorii | bmtFx.com Skip to content

Archive

Category: Bez kategorii

Eksploracja tekstu transkrypcji wypowiedzi kandydatów na prezydenta we wstępnych debatach prezydenckich w USA w 2016 r.

Dane

Zestaw danych zawiera transkrypcje każdej Debaty Demokratycznej i Republikańskiej, która odbyła się w pierwszym sezonie 2016 r.

Liczność klas

  • Demokraci: 5
  • Republikanie: 17

Liczba wypowiedzi

  • Demokraci: 1771
  • Republikanie (główne debaty): 3251
  • Republikanie (wszystkie debaty): 3997

Kandydaci

Democratic

  • Chafee: Former Governor Lincoln Chafee (RI)
  • Clinton: Former Secretary of State Hillary Clinton
  • O’Malley: Former Governor Martin O’Malley (MD)
  • Sanders: Senator Bernie Sanders (VT)
  • Webb: Former Senator Jim Webb (VA)

Republican

  • Bush: Former Governor Jeb Bush (FL)
  • Carson: Ben Carson
  • Cruz: Senator Ted Cruz (TX)
  • Kasich: Governor John Kasich (OH)
  • Paul: Senator Rand Paul (KY)
  • Rubio: Senator Marco Rubio (FL)
  • Trump: Donald Trump
  • Walker: Governor Scott Walker (WI)

Republican (Undercard ONLY)

  • Gilmore: Former Governor Jim Gilmore (VA)
  • Graham: Senator Lindsey Graham (SC)
  • Jindal: Governor Bobby Jindal (LA)
  • Pataki: Former Governor George Pataki (NY)
  • Perry: Former Governor Rick Perry (TX)
  • Santorum: Former Senator Rick Santorum (PA)
  • Republican (Main AND Undercard)
  • Christie: Governor Chris Christie (NJ)
  • Fiorina: Carly Fiorina
  • Huckabee: Former Governor Mike Huckabee (AR)

Ponieważ kandydatów z ramienia partii republikańskiej było bardzo dużo, debaty zostały podzielone na dwie części: Debaty główne (czyli Main) nadawane w  czasie wieczorów wyborczych w porze największej oglądalności, oraz debaty „Undercard” nadawane kilka godzin przed debatami głównymi.
W debatach głównych występowali kandydaci główni, natomiast w debatach undercard kandydaci o niższych notowaniach. Do analizy wykorzystane zostały wypowiedzi kandydatów Republikańskich z obydwu części.

Długości wypowiedzi kandydatów

Powyższa ilustracja przedstawia długości wypowiedzi kandydatów względem partii. W górnym rzędzie pokazane są histogramy liczby znaków w wypowiedziach, a w dolnym rzędzie histogramy liczby tokenów po oczyszczeniu i przetworzeniu wypowiedzi (usunięciu znaków, słów ze stoplisty oraz stemmingu). Niebieska linia oznacza wartość średnią. Rozkłady wyglądają podobnie oraz średnia długość wypowiedzi jest dla obu partii praktycznie identyczna i w liczbie znaków i w liczbie tokenów.

Ilustracja pokazuje rozkłady długości wypowiedzi poszczególnych kandydatów. Czerwona linia oznacza wartość średnią. Widać, że występują duże różnice w liczbie i długości wypowiedzi. Perry miał mniej niż 10 wypowiedzi, ale za to bardzo długich. Po drugiej stronie jest Trump, który miał bardzo dużą liczbę wypowiedzi, ale krótkich. Carson mógłby być przykładem kandydata o średniej liczbie wypowiedzi o średniej długości.

Wypowiedzi kandydatów

Powyższe wykresy słupkowe pokazują dla każdego kandydata: liczbę wypowiedzi w debatach oraz średnią długość wypowiedzi i średnią liczbą słów w wypowiedzi po usunięciu wyrazów nieznaczących i po stemmingu. Tutaj widać wyraźniej, że Trump miał najwięcej wypowiedzi, ale najkrótszych, a Perry najmniej, ale średnia długość jego wypowiedzi jest największa.
Na tym wykresie można zobaczyć interesującą zależność porównując wypowiedzi Donalda Trumpa – pierwszy od góry i Hillary Clinton – trzeci rząd od góry. Porównując średnią długość wypowiedzi w liczbie znaków, Clinton ma dużo dłuższe wypowiedzi (prawie dwukrotnie), ale po usunięciu wyrazów nieznaczących, ta tendencja się odwraca.

Chmury wyrazów

Demokraci
Chmury wyrazów używanych w wypowiedziach przez kandydatów obu partii. Obie partie używają najwięcej słów: people”, „will”, „know”, „country”. Demokraci używają częściej słów: think”, „well, a Republikanie: going”, „need.

Republikanie

Analiza sentymentu

Analiza sentymentu pokazała, że zdecydowana większość wypowiedzi kandydatów obu partii ma charakter pozytywny. Rozkład klasyfikacji wypowiedzi pod kątem zabarwienia emocjonalnego jest w zasadzie bardzo podobny dla obu partii.

Interesowało mnie także porównanie rozkładów występowania emocji w wypowiedziach kandydatów i prowadzących debaty. Spodziewałem się innego rozkładu dla prowadzących ze względu na inny charakter ich wypowiedzi czyli głównie pytania, podziękowania za wypowiedź i komentarze. Jednak wyniki są względnie podobne.

Klasyfikacja

  • Partiami: demokratyczna vs republikańska
  • KNN (k-Nearest Neighbors)
  • Odrzuciłem wypowiedzi krótkie (len > 100 char)
  • Usunąłem rzadkie tokeny z TDM (sparseThr <- 0.75)
  • Podział na zbiór uczący i testowy 70% : 30%

Klasyfikacja pod kątem przynależności do partii kandydata od danej wypowiedzi metodą k-najbliższych sąsiadów. Krótkie wypowiedzi zostały odrzucone. Zbiór uczący i testowy podzielone w stosunku 70:30% i zredukowałem wymiarowość usuwając rzadkie słowa.

Wyniki klasyfikacji

Dokładność wynosiła ok 81%. A zbalansowana ze względu na różnice w liczności klas dokładność wyniosła ok 77%. Macierz błędów przedstawiona jest w tabelce. Na zielono zaznaczone są poprawne klasyfikacje, na czerwono błędne. Dobra jest wartość specyficzności 88%. Jako klasę dodatnią przyjąłem tutaj demokratów, co oznacza to, że zdolność wykrywania wypowiedzi republikanów wynosi 88%. Czułość jest gorsza – 66.67%, co oznacza, że dwa z trzech tekstów demokratów są klasyfikowane poprawnie.

Klasyfikacja – Kandydaci

Próba klasyfikacji wypowiedzi dla wszystkich kandydatów indywidualnie. Krótkie wypowiedzi zostały usunięte, a zbiór podzielony na uczący i testowy w stosunku: 70%:30%. Macierz błędu dla tej klasyfikacji przedstawiona jest poniżej. Na zielono zaznaczone są poprawne klasyfikacje. Dokładność klasyfikacji wynosiła to ok 51%. Jest to wartość znacznie niższa niż  w przypadku klasyfikacji wypowiedzi do dwóch klas, jednak biorąc pod uwagę dużą liczbę kandydatów jest dobrym wynikiem.

Miary jakości klasyfikacji dla każdej klasy z osobna. Są klasy dla których klasyfikator daje bardzo złe wyniki np. Chafee czy Gilmore – są to klasy mało liczne, ale są też klasy takie jak: Sanders czy Trump gdzie klasyfikacja jest relatywnie dobra – te klasy są liczne.

data from kaggle

Data were obtained from kaggle: https://www.kaggle.com/gregorut/videogamesales. The dataset contains a list of video games with sales greater than 100,000 copies. It was generated by a scrape of vgchartz.com. Fields include:

  • Rank – Ranking of overall sales
  • Name – The games name
  • Platform – Platform of the games release (i.e. PC,PS4, etc.)
  • Year – Year of the game’s release
  • Genre – Genre of the game
  • Publisher – Publisher of the game
  • NA_Sales – Sales in North America (in millions)
  • EU_Sales – Sales in Europe (in millions)
  • JP_Sales – Sales in Japan (in millions)
  • Other_Sales – Sales in the rest of the world (in millions)
  • Global_Sales – Total worldwide sales.

Global sales

Global Sales by Year_trends

Looking at how the total global sales differed by years, it can be noted that since 1980 sales were continously increasing. But  huge decrease can be observed in last 7 years.

Sales by regions

Global Sales by Region

Looking at the sales by regions, we can see that North America region had the biggest contribution to global sales – almost 50%. NA and EU regions together had over 75%  contribution to global sales.

Sales by regions timeseries

Here we can see how sales in the regions varied over time. In 1995 North America became the biggest market. In 2008 the sales began to decrease in all regions. The biggest relative fall was in North America.

Number of releases

Number of releases by Year

Here we can see how the number of new games releases was changing. It kept growing up to the 2009, when it started to drop rapidly.

Who released the most?

This image shows top publishers by the number of releases. Two companies that made the most releases were: Electronic Arts and Activision.

Releases by Years

Top Publishers by Releases by Years

Here we can see how the releases looked in the time. The top publisher – Electronic Arts – entered the market in 1992 and made the most releases in years: 2005-2009.

Who made the sales?

Top Publishers by Total Global Sales

Electronic Arts and Activision made most releases, but looking at the sales we can see that Nintendo made the best Total Global Sales. Electronic Arts and Activision are right behing Nintendo.

How did the sales look like?

Top Publishers by Global Sales by Years

This image shows how did the sales look in time for different publishers.

Platforms

Releases by Platforms

Here we can see the number of releases for different platforms. Two top platforms were DS and PS2.

Time marks of release dates for all platforms

Platforms by Years legend

This image shows how the distribution of releases for different platform look like. Most releases for DS were in years 2004-2014, and for PS2 in years: 2000-2011. Typical release time window for main platforms lasts ca 10 years. PC had the largest release window.

Number of releases for platforms

Genres by Platforms

The number of releases in different genres for platforms. The top 5 platforms had the most releases in Action category. The most releases were made for PS2 in Sports category.

Number of releases by genres

Number of Releases by Genres

Here we can see number of releases by genres. Action Games had 20% contribution to total number of games released. Just Action and Sport games were 1/3 of all the released games.

Releases by Genres by Years

This plot shows the moving average of releases in years. In 2004 Action games detronized Sport games. Sport games had the biggest relative fall (since 2010). Action games were released the most, but after 2011 also falling.

Global sales by genres

Global Sales by Genres

Action games are top selling category.

Global Sales by Genres by Years

This plot shows the moving average of sales over time. The biggest falls can be observed for two top genres: Action and Sports.

Sales by genres in regions

Sales by Genres by Areas

Sales by Genres by Areas tab

In Japan the most popular genre was Role-Playing (Pokemon series?). In other regions the most popular genre was Action.

Top games by global sales

Top Games by Global Sells

This image shows the best selling games. The top one is Wii Sports. GTA 5 is in the second place.

Top games by global sales in regions

Top Games by Sells

Looking on sales by regions we can see that top game – Wii Sports sales were mostly in North America. GTA 5 was almost 50:50 in EU/NA. In Japan: Pokemon games significantly outperformed other titles in sales.

Final notes

  • Over last few years there is decrease in sales and in numer of releases
  • NA and EU regions had over 75% contribution to global sales
  • Electronic Arts and Activision were the top most releasing publishers
  • Top most selling publisher was Nintendo
  • Most popular genres were: Action and Sports (34.5% of total sales)
  • Wii Sports, GTA 5 and Super Mario Bros and were best selling games

Strona została przeniesiona na nowy serwer. Wszystkie błędy proszę zgłaszać tutaj.

W tym wpisie chciałbym porównać podstawowe cechy dwóch platform do obliczeń naukowych: środowiska Matlab firmy Mathworks i języka Python z dedykowanymi do tego typu zadań bibliotekami. Prosty program obliczający widmo sygnału powinien być odpowiedni do porównania podstawowych cech obu języków, podobieństw i różnic składni, łatwości implementacji, przejrzystości i zrozumiałości kodu.

Poniższy skrypt w języku Matlaba liczy widmową gęstość mocy (PSD) modelowanego sygnału zawierającego dwie składowe harmoniczne o częstotliwościach 30 i 80 Hz. Widmo liczone jest przy wykorzystaniu szybkiej transformaty Fouriera, okienkowanie oknem Hanninga.

tic
 
fs=400; T=10;
 
nfft=512;
overlap=0.5;
 
A1=1; f1=30; fi1=0;
A2=2; f2=80; fi2=2;
An=1.5;
 
t=0:1/fs:T;
t=t(:); % make 't' a column vector
 
sig=A1*cos(2*pi*f1*t+fi1) + A2*cos(2*pi*f2*t+fi2);
noise=An*rand(length(t),1);
 
x=sig+noise;
 
wind=hanning(nfft);
 
noverlap=fix(nfft*overlap);
nadvance=nfft-noverlap;
nrecs=fix((length(t)-noverlap)/nadvance);
 
Pxx=zeros(nfft,1);
ind=1:nfft;
for k=1:nrecs
    xs=x(ind);
    xs=(xs(:)-mean(xs)).*wind;
    Xf=fft(xs,nfft)/nfft;
    Pxx=Pxx+abs(Xf).^2;
    ind=ind+nadvance;
end
 
Pxx=Pxx(1:nfft/2);
f=(0:nfft/2-1)/(nfft/2-1)*(fs/2);
 
figure
plot(f,10*log10(Pxx)) % in dB
xlabel('f [Hz]')
ylabel('PSD [dB]')
saveas(gcf,'fig_PSD_matlab.png','png')
 
% time
czas=toc;
czas_=['Time: ' int2str(fix(czas/3600)) ' hours, ' ...
    int2str(fix(czas/60)-fix(czas/3600)*60) ' min and ' ...
    num2str(mod(czas,60),'%0.2f') ' s.'];
disp(' ');
disp(czas_)

Ten sam program napisany w Pythonie przy wykorzystaniu bibliotek NumPy i Matplotlib wygląda tak:

import numpy, pylab, time
from math import pi
 
tic=time.clock()
 
fs,T=400,10 
 
nfft=512
overlap=0.5
 
A1,f1,fi1 = 1,30,0 
A2,f2,fi2 = 2,80,2 
An=1.5
 
t=numpy.arange(0,T,1./fs)
t=t.transpose()
 
sig=A1*numpy.cos(2*pi*f1*t+fi1) + A2*numpy.cos(2*pi*f2*t+fi2)
noise=An*numpy.random.rand(len(t))
x=sig+noise
 
wind=numpy.hanning(nfft)
 
noverlap=numpy.fix(nfft * overlap)
nadvance=nfft-noverlap
nrecs=numpy.fix((len(t)-noverlap)/nadvance)
 
Pxx=numpy.zeros((nfft))
ind=numpy.arange(0,nfft,1)
for k in range(nrecs):
    xs=x[ind]
    xs=numpy.multiply((xs-numpy.mean(xs)),wind)
    Xf=numpy.fft.fft(xs,nfft)/nfft
    Pxx=Pxx+numpy.square(numpy.abs(Xf))
    ind=ind+int(nadvance)
 
Pxx=Pxx[0:nfft/2]
f=numpy.arange(0.0,nfft/2,1)/(nfft/2-1)*(fs/2)
 
pylab.figure
pylab.plot(f,10*numpy.log10(Pxx),linewidth=0.5) # in dB
pylab.xlabel('f [Hz]')
pylab.ylabel('PSD [dB]')
pylab.savefig("fig_PSD_python.png")  
pylab.show()
 
# time
toc = time.clock()
czas=toc - tic
czas_='Time: '
czas_=czas_ + "%0.*f" %(0,numpy.fix(czas/3600)) + ' hours, '
czas_=czas_ + "%0.*f" %(0,numpy.fix(czas/60)-numpy.fix(czas/3600)*60) + ' min and '
czas_=czas_ + "%0.*f" %(2,numpy.mod(czas,60)) + ' s.'
print(czas_)

Na pierwszy rzut oka widać duże podobieństwo pomiędzy obydwoma programami i wydaje się, że dla użytkownika Matlaba rozpoczęcie pracy z Pythonem przy wykorzystaniu dedykowanych bibliotek powinno być względnie proste. Oba języki są językami wysokiego poziomu, dającymi dużą swobodę w wyborze metody rozwiązania problemu. Biblioteki do obliczeń numerycznych zawierają funkcje o bardzo podobnych nazwach, wywołaniu i działaniu do funkcji znanych użytkownikom Matlaba. Niemniej jednak, po kilku latach używania Matlaba, jest kilka elementów do których się przyzwyczaiłem i których jest mi brak przy pierwszym kontakcie z Pythonem. Na przykład: brak operatorów z kropką wyraźnie określających działania na pojedynczych elementach tablicy, czy przejrzystego i prostego zapisu macierzy w postaci a=[1,2,3;4,5,6].

Poniższy rysunek pokazuje wynik działania funkcji plot() w Matlabie (po lewej) i jej odpowiednika o takiej samej nazwie z biblioteki Matplotlib (po prawej).

Orientacyjny czas wykonania obydwu programów przy kilkukrotnym uruchomieniu jest bardzo zbliżony do siebie. Na przenośnym komputerze z procesorem Intel Core 2 Duo 2GHz wynosi:
Matlab: 0.25 s [0.24-0.26]
Python: 0.26 s [0.25-0.27]

Ciekawostką jest, że wykonanie skryptu Matlaba w środowisku Octave trwało znacznie krócej:
Octave: 0.08 s [0.07-0.09]

Żeby porównać wydajność obu środowisk, należałoby wykonać dużo większą ilość obliczeń. W następnym wpisie przedstawię wyniki takiego zestawienia wykorzystując programy wymagające znacznie większej mocy obliczeniowej.