Data Analysis - Programming - 1

Week 1

Onderwerpen week 1:

  • installatie Python distributie Anaconda (Python 3.5)
  • gebruik Jupyter (voorheen: IPython Notebook)
  • print() functie
  • events in kansrekening en booleaanse algebra

Python 3 - Anaconda

  • in periode 1 heb je Python geprogrammeerd in een webbrowser
  • vanaf deze periode gebruiken we Python 3 (3.4, 3.5, als het maar begint met 3)
  • voor een eenvoudige installatie van Python en veelgebruikte bijbehorende bibliotheken maken we gebruik van Anaconda

Installatie

  • bepaal welk OS je gebruikt (Microsoft Windows, Apple OS-X, Linux)
  • bepaal welke versie van het OS je gebruikt (32-bit of 64-bit),
    gebruik voor Windows eventueel deze instructie om dit te achterhalen,
    OS-X is tegenwoordig altijd 64-bit en
    als je Linux gebruikt, weet je het hopelijk zelf wel
  • zoek de juiste Anaconda installer en download deze
  • installeer Anaconda door de gedownloade installer te runnen,
    gebruik daarbij de standaard instellingen

Met Python werken

  • Python programma's zijn tekstbestanden,
    meestal hebben ze de bestandsextensie .py (vergelijk .docx, .xlsx, .pdf)
  • voor het uitvoeren (runnen) worden de tekstbestanden eenmalig door de computer vertaald naar bytecode
    waarna de instructies in bytecode worden uitgevoerd door een virtual machine
  • deze vertaling en executie wordt gedaan door een interpreter
    die van oudsher vanaf de commandline wordt uitgevoerd
  • een meer recente ontwikkeling is Jupyter (voorheen: IPython Notebook)
  • Jupyter is een programma dat je gebruikt in een webbrowser,
    waarbij de programma's die schrijft 'live' worden uitgevoerd door een Python proces dat op de achtergrond draait
  • in Jupyter kun je programmacode (in Python, R of bijvoorbeeld Julia) schrijven en uitvoeren,
    maar ook mixen met opgemaakte tekst (zoals deze slides), afbeeldingen en video
  • in plaats van volledige programma's schrijf je code in notebooks die direct worden uitgevoerd

Jupyter Notebook

  • start Jupyter Notebook door 'IPython (Py 3.5) Notebook' te kiezen in het startmenu
  • je default browser toont de Home folder voor notebooks
  • in de Home folder kun je nieuwe folders maken
    en nieuwe notebooks:

Opdracht 1

  • start Jupyter Notebook
  • maak een folder genaamd week 01
  • op de folder week 01 en
    maak een nieuw Python 3 notebook
  • noem je notebook college week 1 en
    sla het op

Jupyter Notebook - Python

  • een notebook bestaat uit 'cells'
  • iedere cell bevat ofwel Python code,
    ofwel Markdown code (een opmaaktaal)
  • voor deze cursus heb je alleen code cells nodig
  • je kunt in de actieve cell typen door erop te dubbelklikken
  • de actieve cell wordt 'uitgevoerd' als je Shift+Enter toetst
  • na het uitvoeren, wordt eventuele output getoond onder de cell

Opdracht 2

  • in het notebook college week 1,
    type de volgende code over in de eerste cell en voer uit:
print("Hello world!")

In [30]:
print("Hello world!")


Hello world!

Python - print()

  • turtles?
  • print()

Voorbeelden:

print("Hello world!")
print("x = ", 12.34)
print("Eerste regel\ntweede regel")
print()  # lege regel
for i in range(10):
    print("i =", i)

In [31]:
print("Hello world!")
print("x =", 12.34)
print("Eerste regel\ntweede regel")
print()  # lege regel
for i in range(10):
    print("i =", i)


Hello world!
x = 12.34
Eerste regel
tweede regel

i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9

Verzamelingenleer (1)

  • bij de wiskundige beschrijving van experimenten in kansrekening wordt veel gewerkt met verzamelingen
  • een sample space $S = \{E1, E2, E3, ...\}$ bevat alle mogelijke uitkomsten $E1, E2, E3, ...$ in een kansexperiment
  • een event $E = \{E1, E2, ...\}$ bevat alle mogelijke uitkomsten $E1, E2, ...$ die onder de benoemde gebeurtenis vallen

Bijvoorbeeld:
We trekken, zonder terugleggen, blind 3 knikkers uit een vaas met 10 witte en 10 zwarte knikkers.
Voor de sample space $S$ geldt dan $S = \{WWW, WWZ, WZW, ZWW, WZZ, ZWZ, ZZW, ZZZ\}$
Een mogelijk event $E$ zou kunnen zijn: we trekken minstens twee zwarte knikkers. Dan geldt $E = \{WZZ, ZWZ, ZZW, ZZZ\}$.

Verzamelingenleer (2)

  • de kans dat de event optreedt, wordt genoteerd als $P(E) = 0.5$
  • van een event $E$ kunnen we nu zeggen:
    ofwel de event treedt op, ofwel de event treedt niet op,
    andere uitkomsten zijn niet mogelijk
  • omdat events gedefinieerd zijn als verzamelingen,
    kunnen we de operatoren uit de verzamelingenleer gebruiken om events te combineren

Bijvoorbeeld:
Gegeven twee events, $A$ en $B$,
kunnen we het niet optreden van event $A$ noteren als $\neg{A}$ (ook wel $\overline{A}$),
het optreden van event $A$ of $B$ als $A \cup B$,
het optreden van zowel event $A$ als $B$ als $A \cap B$

Booleaanse algebra (1)

  • de notatie in verzamelingenleer is gerelateerd aan de booleaanse algebra
  • een booleaanse variabele $A$ beschrijft het waarheidsgehalte van een bewering en
    heeft twee mogelijke waarden: onwaar of waar
    (vergelijk: ofwel een event treedt op, ofwel een event treedt niet op)

Bijvoorbeeld:
De variabele $A$ beschrijft het waarheidsgehalte van de bewering "Deze slide bevat 123 karakters."
De bewering kan onwaar zijn, $A = 0$, of waar zijn, $A = 1$.

Booleaanse algebra (2)

  • booleaanse variabelen kunnen worden gecombineerd met de logische operatoren
    or ($A \lor B$), and ($A \land B$) en not ($\neg{A}$).
  • van deze combinaties, of berekeningen, kunnen we waarheidstabellen maken
    om het waarheidsgehalte van de totale expressie vast te stellen:
$A$ $B$ $A\ or\ B$ $A\ and\ B$ $\neg{A}$
False False False False True
False True True False True
True False True False False
True True True True False

Opdracht 3

  • maak nu zelf een waarheidstabel voor de expressie $(\neg{A}) \lor B$
  • en voor de expressie $(A \lor B) \land \neg{(A \land B)}$

Python en booleaanse algebra

  • de waarheidstabellen kunnen we natuurlijk uit laten rekenen door de computer
  • immers, Python heeft een data type bool
    en operatoren om expressies te combineren: or, and en not

In [8]:
## voorbeeld waarheidstabel in Python
for A in [False, True]:
    for B in [False, True]:
        print(A, B, A or B, A and B, not A)


False False False False True
False True True False True
True False True False False
True True True True False
  • we zouden de tabel iets mooier uit kunnen lijnen,
    maar dat komt nog wel

Opdracht 4

  • laat Python de waarheidstabel voor de expressie $(\neg{A}) \lor B$ uitrekenen
  • en voor de expressie $(A \lor B) \land \neg{(A \land B)}$

Oefeningen

  1. Schrijf een Python programma dat de waarheidstabel van de volgende expressie produceert:
    $\neg{(A \lor B)}$ (Quine's Dagger)

  2. De expressies uit opdracht 3 en 4 (in de slides) hebben een eigen naam,
    $(\neg{A}) \lor B$ wordt ook wel implicatie genoemd en genoteerd als $A \implies B$,
    $(A \lor B) \land \neg{(A \land B)}$ wordt ook wel exclusieve of (of xor) genoemd en genoteerd als $A \oplus B$.

    De operator $\Leftrightarrow$ wordt equivalentie (gelijkheid) genoemd.
    De expressie $A \Leftrightarrow B$ levert alleen True op, wanneer de waarde van $A$ gelijk is aan die van $B$.
    Bedenk een expressie in $A$ en $B$ met behulp van de operatoren or, and en not die precies het resultaat van de operator equivalentie oplevert en controleer je expressie met een Python programma.
    $A$$B$$A \Leftrightarrow B$
    FalseFalseTrue
    FalseTrueFalse
    TrueFalseFalse
    TrueTrueTrue




  3. Strikt genomen zijn de extra operatoren uit opgave 2 niet nodig, want je kunt ze namaken met or, and en not.
    Eigenlijk kun je zelfs rondkomen met alleen or en not !
    Bedenk een combinatie van or en not waarbij de waarheidstabel hetzelfde is als die van and. Controleer je expressie met een Python programma.
    $A$$B$$A \land B$
    FalseFalseFalse
    FalseTrueFalse
    TrueFalseFalse
    TrueTrueTrue



  4. Een tautologie is een expressie die altijd waar oplevert, ongeacht de invulling van de variabelen.
    De uitdrukking $A \lor \neg{A}$ is een voorbeeld van een tautologie.
    Schrijf Python programma's om te bepalen of de onderstaande uitdrukkingen tautologieën zijn.
    Let op: de implicatie $A \implies B$ kun je uitrekenen, als in opgave 2 beschreven, met $(\neg{A}) \lor B$
    1. $(A \lor B) \implies (A \lor B)$
    2. $(A \lor B) \implies (A \land B)$
    3. $(\neg{A} \implies B) \land (\neg{A} \implies \neg{B})$
    4. $((A \implies B) \land (B \implies C)) \implies (A \implies C)$