06/11/2018


Python, R, Visual Studio Code, Anaconda

 

Software speelt een belangrijke rol in veel van onze projecten. We gebruiken het zelf voor onze analyses en om onze modellen door te rekenen of het is een vereist resultaat van een project. We ontwikkelen zelf maatwerk, klantspecifieke software en maken (daarbij) gebruik van verschillende Data Science tools. Niet gek dus dat CQM-ers regelmatig de afweging maken wanneer welke tool te gebruiken en wat de voor- en nadelen zijn. En waarom zouden we die inzichten voor onszelf houden? Iedereen die CQM een beetje kent, weet dat wij juist graag onze kennis (en enthousiasme) delen! Hierbij dus een keer een redelijk technisch blog van Jan Willem Bikker.

 

Python

Programmeertaal Python is naar eigen zeggen: “krachtig en snel, vriendelijk en gemakkelijk te leren”. Het is net als R open source (vrij bruikbaar en distribueerbaar) met een ecosysteem van extra functionaliteiten. R is een gratis softwareomgeving voor statistische gegevensverwerking en grafische afbeeldingen. Het is wat meer gericht op traditionele statistiek en Python meer op Machine Learning, big data en Deep Learning. Python is ook een taal om echte applicaties met User Interface (UI) te bouwen.

 

Zowel R als Python kennen een grote community die veel extra functionaliteit ontwikkelt; ik noem dat hier een ecosysteem. De kracht is dat er enorm veel functionaliteit beschikbaar is. Op veel vragen kun je via een Google zoekopdracht wel de antwoorden vinden, vaak op websites als www.stackexchange.com.

De core functionality van R en Python verandert niet snel en is goed backwards-compatible. Maar de interessante analyses en code maken gebruik van de extra packages uit het ecosysteem. Die veranderen sneller en de kans is aanwezig dat een script van een ander bedrijf of van een paar jaar geleden niet meer (goed) werkt. Toch zijn er vaak situaties waarin het wenselijk is dat je de analyse nog kunt draaien na verloop van tijd. Denk aan een kleine uitbreiding of vervolgvraag waarbij de code een tijdje terug op de vorige laptop van een collega is gemaakt.

Python (of R) installeren kan vrij snel gaan, maar in makkelijke varianten heb je van elk package maar één versie op de computer staan. Je moet moeite doen om meerdere versies naast elkaar te laten bestaan of weer terug te kunnen zetten. Anaconda is een systeem dat daarbij helpt.

 

Omgevingen

Er zijn twee soorten omgevingen:

  • IDE (Integrated Development Environment) en
  • Notebooks / markdown (populaire opmaaktaal).

Een IDE is een ontwikkelomgeving die een softwareontwikkelaar ondersteunt bij het ontwikkelen van computersoftware. (Voor het gemak schaar ik een source code editor hier ook even onder.) Het is een UI waarin je meerdere scriptjes open hebt en complexe software kunt bouwen. Je voert een script van begin tot eind uit, en wat minder regel voor regel. Notebooks zitten wat dichter bij de flow van een statistische analyse: data inlezen, verkennen, plaatjes maken, model bouwen, nog meer plaatjes, etc. Typisch iets wat je van voor naar achter, in kleine stapjes uitvoert. Denk aan Maple, Mathematica. Hier volgen een paar voorbeelden.

IDE's: R Studio voor R, PyCharm, Visual Studio Code, Spyder.

Markdown: R studio met markdown (in recente versie krijg je text output en plaatjes in je code), Jupyter Notebook / Jupyter lab.

Sommige functionaliteiten, zoals Deep Learning, hebben veel rekenkracht nodig en misschien zelfs een zware grafische kaart (GPU). CQM heeft een computer ingericht op Linux. Typisch log je vanaf een laptop in op zo'n machine en werk je dan daarop, bijvoorbeeld via Jupyter Notebook.

 

Debugging, auto-completion, help

Idealiter heeft een goede programmeeromgeving minstens drie dingen: debugging, auto-completion en help.  

  • Debugging: Als tijdens het uitvoeren iets misgaat, moet hij stoppen waar hij is en moet je alle locale variabelen/objecten kunnen onderzoeken.
  • Auto-completion van functienamen, variabelen: typ de naam half in, druk op een toets (ctrl-spacebar bijvoorbeeld) en krijg een lijst met zinnige suggesties. Idem voor de argumenten van een functie.
  • Help: zet de cursor op een keyword, druk op F1 o.i.d. en je krijgt direct een zinnige hulppagina te zien. Liefst offline zodat het ook in de trein zonder WiFi werkt.

Maar heel goed zijn de systemen nog niet. Meestal is niet aan al deze voorwaarden voldaan of niet in alle gevallen. Het kan wel, bijvoorbeeld Visual Studio in combinatie met C-sharp in het .NET framework.

Daarnaast is de documentatie in veel packages wat basaal en minder uitgebreid in vergelijking met commerciële systemen, zoals het statistische analysepakket Stata (14.000 pagina's) of eerdergenoemde C-sharp .NET. Nu is een snelle Google opdracht meestal eerste keus, maar soms is het ook fijn om eens grondig door de documentatie te gaan, als die er dus is.

 

Het Python ecosysteem

Voor een nieuweling kan het lastig zijn je weg te vinden. Programmeerervaring helpt. Ervaring met Linux of andersoortig command based programming ook. In het begin ben je misschien wel meer dan 50% van de tijd kwijt aan vragen Google-en waarvan de antwoorden eigenlijk voor de hand liggen. Er zijn een hoop mooie open source spullen maar het kennis-uitgangspunt ligt vaak best hoog. Een hulplijn naar een ervaringsdeskundige kan dan enorm behulpzaam zijn.

Als het eenmaal werkt, is Python wel een prettige programmeertaal. De Nederlandse bedenker wilde dat het leuk was en noemde de nieuwe programmeertaal daarom naar de BBC serie Monty Python. Het goedkope computertje bedoeld voor onderwijs in landen met weinig onderwijsbudget, de Raspberry Pi, is ook geschikt om Python te gebruiken.

Extra functionaliteit (tabellen, graphics, statistiek) krijg je door packages te installeren uit het uitgebreide ecosysteem. Voorbeelden zijn Matplotlib, Seaborn, XGBoost, Pandas.

 

Anaconda

Anaconda is een omgeving om Python en de packages te beheren. Het werkt met environments die je zelf aan kunt maken. Denk aan een aparte environment voor elk project, om de versies kloppend te houden als je met collega's of klanten samenwerkt.

Installeer Anaconda op de voor de hand liggende manier. Het is een grafische schil voor het achterliggende systeem, genaamd "conda". Vanuit Anaconda kun je voor een environment een terminal  openen, in Windows termen: een command window. Dat kan ook vanuit het startmenu. Waarom? Omdat Anaconda pretendeert dat je volledig beheer hebt, maar als de situatie net even anders wordt, heb je meer controle nodig.

Wat voorbeelden uit de praktijk:

  • Wanneer je de namen van environments niet goed differentieert, raakt alles in de war. Alleen een verschil in hoofletter/kleine letter (bijvoorbeeld: "jw" en "JW") is dus onvoldoende.
  • Anaconda/conda: ze hebben een lange lijst van packages (uitbreidingen) die standaard ondersteund worden. Maar voor die ene die jíj net nodig hebt, moet je natuurlijk moeilijke dingen doen.
  • Soms lukte een installatie niet via de UI van Anaconda. Vanuit de terminal kun je een commando geven als conda install nb_conda en dan krijg je tenminste de foutmeldingen te zien.
  • Gebruik bij voorkeur de installatiemogelijkheden van Anaconda/conda en pas zo laat mogelijk de algemene Python functionaliteit via pip, al kom je die vaak tegen als suggestie. Dat laatste zit Anaconda/conda soms in de weg.

Bovendien zijn sommige zaken contra-intuïtief. JupyterLab luistert niet goed naar de environments. De UI suggereert dat je die apart voor elke environment moet installeren. Maar er is ook een concept  als losse kernels. Om dit beter te laten werken moet je nb_conda installeren, maar dat gebeurt niet automatisch. Dit soort zaken zijn dus fundamenteel lastiger dan je zou verwachten.

 

Conclusie

In Data Science en Machine Learning zijn veel goede open source tools beschikbaar. Installatie en vooral de weg vinden kost tijd. Tip 1: toegang tot een persoon die er meer van weet is erg handig. De tools en tips op internet zijn er wel, maar meestal voor een net iets andere uitgangssituatie… Tip 2: reserveer voldoende tijd om de rust te hebben zaken goed uit te zoeken en te gaan begrijpen.

Jan Willem

 

Meer informatie

Heeft u vragen over deze blog of wilt u weten wat CQM (met behulp van maatwerk software) voor ú kan betekenen? Neem dan contact op!

 

Ook interessant om te lezen:

 

Op de hoogte blijven van het laatste nieuws?

Volg ons op LinkedIn of meld u aan en beheer hier de mailing die u van CQM wilt ontvangen.

 

Jan Willem Bikker
Jan Willem Bikker helpt je graag verder Neem contact op