Op de Tableau Partner Summit in London heb ik een sessie bijgewoond over statistics en sets in Tableau. In deze sessie legde Oliver Linder (Sales Consultant bij Tableau) de basics van R integratie in Tableau uit. Tijdens deze presentatie legde hij stap voor stap uit hoe je kunt connecteren met een R server in Tableau en demonstreerde hij kort hoe je een calculated field kan maken waarin je de correlatie tussen twee variabelen kan berekenen met R.

Deze sessie heeft me laten nadenken over de verschillende manieren waarop je de mogelijkheden van R in Tableau kunt toepassen. Een van mijn belangrijkste analytische interesses is corpus analysis. Tableau ondersteund om diverse redenen standaard geen Natural Language Processing (NLP) maar met de R integratie kun je basis text analysis op je set met text uitvoeren. In deze blog zal ik je door de basis van een element van text analysis, set analysis, heen leiden en toelichten hoe je kunt R, R Server en R packages kunt installeren en connecteren. Ik zal gebruik maken van wat Twitter data om sentiment analysis te illustreren.

Wat is Sentiment Analysis?

Om te beginnen, wat is sentiment analysis eigenlijk? We noemen dit het proces van computationeel identificeren, verwerken en categoriseren van text data om meningen/opinies en standpunten ten aanzien van thema’s, onderwerpen, producten etc. te verkrijgen. Er zijn diverse methoden om meningen/opinies en herkennen of te minen, variërend van human analysis tot supervised en unsupervised machine learning met programmeertalen zoals Python en R (“bag of words”). Sentiment analysis kan object/kenmerk gebaseerd zijn als we het uitgedrukte sentiment bepalen op verschillende objecten of entiteiten, of gebaseerd op document level. Het laatste bepaald de polariteit van, bijvoorbeeld, nieuws items of product reviews. Er zijn diverse manieren om sentiment te tonen, van de meest voorkomende drie polariteit niveau’s positief, neutraal en negatief tot polariteit schalen van, bijvoorbeeld -10 tot +10.

Verkrijgen van de data

Nu we het basis principe kennen van sentiment analysis kunnen we dit toepassen op een set met text. Voor deze blog heb ik ruwe Twitter data ge-download uit de API met Alteryx. Ik heb de API call gelimiteerd tot 5.000 tweets en gebruik gemaakt van de keywords “Tableau” en “#Tableau” om de meest recente tweets die deze keywords gebruiken te vinden.

alteryx twitter api

Hoe installeer en configureer ik R?

Dit is zeker niet de meest schone text data set die ik heb gebruikt, of de meest geavanceerde Alteryx workflow, maar dat is ook niet het doel van deze blog. Als Alteryx eenmaal de workflow heeft doorlopn kunnen we verdergaan met het downloaden en installeren van R en RStudio. Je kunt ze resp. hier en hier downloaden. De laatste wordt ook wel een integrated development environment (IDE) voor R genoemd. Na installatie moet je de R Server starten om een connectie te kunnen maken met Tableau. Dit is een server die applicaties toestaat om toegang te krijgen tot R functionaliteit. Je kunt de R Server ook op lokale machine hosten, wat ik heb gedaan voor deze blog. De installatie van beide toepassingen wijst zichzelf en wanneer je RStudio opent moet je de volgende commando’s in de console intypen om RServe te installeren:

install.packages(“Rserve”)
library(Rserve)
Rserve()

Ik heb R en RStudio op een Mac geïnstalleerd en daarom moest ik het laatste commando (dat RServe uitvoert) wijzigen naar Rserve(args=”–no-save”). Je zult een melding krijgen vanuit R met de melding dat RServe gestart wordt en als het starten gereed is kom je weer terug bij de command prompt om evt. meer code in te voeren.

rserve

Nadat je succesvol R en RStudio hebt geïnstalleerd en je Rserver hebt draaien kun je connectie maken met Tableau. De officiële documentatie van Tableau om een connectie op te zetten is helder en eenvoudig. Je kunt connecteren met R door naar het Help Menu in Tableau Desktop te gaan en te kiezen voor Settings and Performance > Manage R Connection.

connectionr

Merk op dat in Tableau 9.3 dit gewijzigd is naar Help > Settings and Performance > Manage External Service Connection. Zoals je kunt zien heeft Tableau Rserve verwijderd uit de dropdown, maar dat betekent niet dat Tableau stopt met de ondersteuning van R. Wanneer de server lokaal draait kun je de connectie instellen zoals in de afbeelding hierboven. Je kunt de connectie testen door te klikken op Test Connection en Tableau zal (als het goed is) een melding geven: “Succesfully connected to the Rserve service”.

R in Tableau

De volgende stap is dat je wilt connecteren naar je text data, in dit geval mijn Twitter corpus met tweets over Tableau. Er zijn vier functies om R expressies te gebruiken in calculated fields:

SCRIPT_BOOL
SCRIPT_INT
SCRIPT_REAL
SCRIPT_STR

Voor text analysis moeten we de laatste gebruiken, SCRIPT_STR. Deze vier R expressies zijn aanwezig in de Table Calculations window. Ze bestaan uit de volgende elementen (R expression, (.arg1, .arg2)’, AGG([Field1]), AGG([Field2]). Je kunt overigens meer dan twee argumenten gebruiken. In dit geval arg1 is Field1 en arg2 is Field2. Zoals je kunt zien moet je een aggregate of constante invoeren om de calculatie valide te maken. Voordat we onze sentiment analysis calculatie kunnen schrijven, moeten we eerst een aantal R packages installeren. Er zijn diverse R packages voor text analysis, maar in deze blog maken we gebruik van tm en Sentiment. Je kunt ze ofwel downloaden (hier en hier) of de volgende scripts draaien in je R console:

 

tm:
install.packages(“tm”)
download.file(“http://cran.cnr.berkeley.edu/src/contrib/Archive/Rstem/Rstem_0.4-1.tar.gz”, “Rstem_0.4-1.tar.gz”)
install.packages(“Rstem_0.4-1.tar.gz”, repos=NULL, type=”source”)

sentiment:
download.file(“http://cran.r-project.org/src/contrib/Archive/sentiment/sentiment_0.2.tar.gz”, “sentiment.tar.gz”)
install.packages(“sentiment.tar.gz”, repos=NULL, type=”source”)

Dit sentiment package is relatief gedateerd wat betekent dat je ook een oudere versie van R geïnstalleerd moet hebben op je machine om dit package te kunnen draaien. Het heeft twee functies:
classify_polarity: classificeren van text als positief, neutraal of negatief.
classify_emotion: analyseer text en classificeren in verschillende emotie types: boosheid, walging, angst, blijdschap, droefheid, and verwondering.

Omdat ik erg een erg ruwe data set uit de Twitter API krijg, betekent dit ook dat ik veel dimensies heb.

Because I have a very raw data set coming out of the Twitter API it also means I have a lof of dimensions. Echter, ik heb maar een dimensie nodig in dit geval, de TweetBody. Deze dimensie bevat de 140 tekens aan text. Er zijn twee manieren om R expressies te laden in Tableau, je kunt ze toevoegen aan de RServe configuratie of je moet de packages laden in je calculatie. In het laatste geval moet je “library(sentiment);” toevoegen aan de calculatie.

Ik heb een calculatie “Sentiment” gemaakt welke classify_polarity aanroept:

calc

Zoals je kunt zien roep ik de R package vanuit Tableau aan en ik gebruik de classify_polarity om positieve, neutrale of negatieve tweets te vinden en ik gebruik slechts een argument, arg1. Dit argument kijkt naar mijn text attribuut.

Dit is hoe de output eruit ziet:

output

Dit is zoals je inmiddels zal verwachten een basic sentiment analysis package wat een aantal minpunten/gebreken kent. Sommige van de negatieve tweets zijn eigenlijk niet negatief. Echter, dit kan worden opgelost in het lexicon van de Sentiment package. Dit R package is gebaseerd op een lexicon, een techniek dat gebruik maakt van een woordenboek om te bepalen of een text positief, neutraal of negatief is. Je kunt de lexicon van deze package vinden in de library folder onder sentiment\data\subjectivity.csv.gz en daar aanpassen hoe het sentiment package de polariteit beoordeelt.

Tableau heeft geen out-of-the-box text analysis aan boord, maar met deze kleine en snelle R package kun je toch je corpus analysis draaien vanuit Tableau. Je kunt ook andere text analytic packages downloaden en de logica om ze toe te passen in Tableau calculaties zal vergelijkbaar zijn met de beschrijving hierboven.

Opmerking: Wanneer je tegen problemen aanloopt met een gedateerde sentiment package kun je stappen volgen in deze blogpost.

Edit: When you encounter problems with an outdated sentiment package you can follow the steps in this post (Engelstalig).


Originele blog van Andre de Vries, TIL UK, geplaatst op 2 maart 2016.
If you prefer to read the original blog in English, click here