Eksterne pakker

Eksempler på eksterne pakker


Enkel installasjon (fungerer av og til)

Installasjon av eksterne moduler trenger man bare gjøre én gang for hver python-installasjon. Under finner du en kodesnutt du kan forsøke å kjøre som prøver å installere noen moduler.

import sys

libs = ['matplotlib', 'numpy', 'pandas', 'requests']
cmd = f"{sys.executable} -m pip install --user {' '.join(libs)}"

ans = input(f"\n\nType 'yes' to try direct install of {libs}: ")
if ans == "yes":
    from subprocess import run
    run(cmd.split())
else:
    print("copy this line into the terminal:\n")
    print(cmd)
    print()
Installasjon med pip

For å installere eksterne pakker og moduler, bruker vi et program som heter pip. Dette er et program som ble installert sammen med python. Dersom du har flere versjoner av python installert på din datamaskin (for eksempel fordi en gammel versjon av python var installert fra før), har du også flere versjoner av pip installert på maskinen din. Når du installerer programmer med pip er det viktig at du bruker den versjonen av pip som matcher den versjonen av python du bruker.

For å installere noe med pip, bruker vi Terminalen og skriver kommandoen:

<python-sti> -m pip install <pakkenavn>

(det er også mulig å skrive <pip-sti> install <pakkenavn>, men den metoden dekker vi ikke her). Et par punkter å passe på:

import sys
print(f"{sys.executable}")
Requests: last ned ting fra internett

https://requests.readthedocs.io/

Requests-pakken kan benyttes dersom man ønsker å laste ned informasjon fra internett (via http/https) som skal brukes i et python-program.

import requests
# Pakke for å laste ned data fra internett

url = "https://tinyurl.com/foo-txt" # Nettsiden som skal lastes ned
headers = {
    # Noen nettsider krever at 'User-Agent' har fått en verdi
    # for at man skal få respons.
    'User-Agent': 'inf100.ii.uib.no abc123', # Noe som forteller hvem du er
}

webpage = requests.get(url, headers=headers)
print(webpage.content) # Innholdet på nettsiden før dekoding: 'byte-streng'

webpage_content = webpage.content.decode('utf-8')
print(webpage_content) # Etter dekoding: en vanlig streng
Matplotlib: visualisering av data

https://matplotlib.org/

Matplotlib er et stort bibliotek med utallige muligheter for å visualisere data på ulike måter. Under viser vi bare et helt enkelt eksempel; se igjennom dokumentasjonen på matplotlib sin hjemmeside for å lære om flere muligheter.

Enkle plot
from matplotlib import pyplot as plt

x_values = [0, 1, 2, 3, 4, 5]
y_values = [10, 9, 4, 1, 5, 8]

plt.plot(x_values, y_values)
plt.show()
Illustrasjon av programmet over
from matplotlib import pyplot as plt

x_values_a = [0, 1, 2, 3, 4, 5]
y_values_a = [10, 9, 4, 1, 5, 8]
plt.plot(
    x_values_a, y_values_a,
    color='red',
    marker='o',
    linestyle='dashed',
    linewidth=2,
    markersize=12,
    label='A',
)

x_values_b = [0, 1, 2, 3, 4, 5]
y_values_b = [4, 5, 6, 5.5, 5, 6]
plt.plot(
    x_values_b, y_values_b,
    color='blue',
    marker='x',
    linestyle='dotted',
    linewidth=10,
    markersize=12,
    alpha=0.5,
    label='B',
)

plt.xlabel(
    'Time',
    fontsize='large',
    fontweight='bold',
    fontname='Comic Sans MS',
    color='green',
)
plt.ylabel('Value')
plt.title('Comparison of A and B')
plt.legend(
    title='Legend of Zelda',
    loc='upper right',
    fontsize='small',
)

plt.show()
Illustrasjon av programmet over
from matplotlib import pyplot as plt
from math import sin, cos

# Eksempeldata som skal visualiseres
# liste med x-verdier
xs = [n / 10 for n in range(101)]
# 2 ulike lister med y-verdier
ys_1 = [sin(x) for x in xs]
ys_2 = [3 * cos(x) for x in xs]

# Opprette et plot
plt.plot(xs, ys_1, "r")
plt.plot(xs, ys_2, "b")

# savefig lagrer filene
plt.savefig("my_plot.svg")  # SVG vektorgrafikk (bra format for figurer!)
plt.savefig("my_plot.pdf")  # PDF
plt.savefig("my_plot.png")  # PNG er egentlig bedre egnet for foto enn for
                            # figurer, men har høy kryss-kompatibilitet

# interaktivt vindu
plt.show()
Illustrasjon av programmet over
Scatterplot
from matplotlib import pyplot as plt

x_values = [0, 1, 2, 3, 4, 5]
y_values = [10, 9, 4, 1, 5, 8]

plt.scatter(x_values, y_values)
plt.show()
Illustrasjon av programmet over

Kombinerte scatterplott og linjediagram, med farge og størrelse og diverse andre innstillinger:

from matplotlib import pyplot as plt

x_values_a = [0, 1, 2, 3, 4, 5]
y_values_a = [10, 9, 4, 1, 5, 8]
sizes_a = [50, 2000, 3000, 4000, 5000, 50000] 
colors_a = ['red', 'blue', 'green', 'yellow', 'purple', 'orange']
alpha_a = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]

plt.scatter(
    x_values_a, y_values_a,
    s=sizes_a,
    c=colors_a,
    alpha=alpha_a,
)

x_values_b = [0, 1, 2, 3, 4, 5]
y_values_b = [4, 5, 6, 5.5, 5, 6]

plt.plot(
    x_values_b, y_values_b,
    color='blue',
    marker='o', # ligner også på et scatterplot
    linestyle='none', # ligner også på et scatterplotx
    markersize=10,
)

plt.show()
Illustrasjon av programmet over
Andre vanlige pakker
Numpy

https://numpy.org/

Numpy er sammen med matplotlib et av de mest bruke eksterne bibliotekene til databehandling. En av grunnene til numpy sin store popluaritet, er at den kan behandle store datamengder svært raskt. Dette gjøres i bunn og grunn ved å omgå noen av Python sine mekanismer for å beskytte utviklere mot seg selv; men samtidig er numpy designet for å gjøre det enkelt å bedrive lineær algebra, hvor datatypene ofte er vektorer og matriser.

Pandas

https://pandas.pydata.org/

Pandas er et slags avansert «excel» for Python, som bygger på numpy og som er integrert med matplotlib. Med dette biblioteket kan man håndtere regneark og andre former for databaser (alt fra csv til json, sql, xlm osv), og utføre en rekke analyser av dissen dataene.