Elke data gebruiken in Dask-bags

Parallel programmeren met Dask in Python

James Fulton

Climate Informatics Researcher

Complexe, gemengde dataformaten

Een diagram met een dataset met zowel video als geluid.

Parallel programmeren met Dask in Python

Een Dask-bag maken

import glob

video_filenames = glob.glob("*.mp4")
print(video_filenames)
['me_at_the_zoo.mp4', 'life_goes_on.mp4', 'guitar.mp4', 'hurt.mp4', ...]
Parallel programmeren met Dask in Python

Een Dask-bag maken

import glob

video_filenames = glob.glob("*.mp4")
import dask.bag as db

filename_bag = db.from_sequence(video_filenames)
filename_bag.take(1)[0]
'me_at_the_zoo.mp4'
Parallel programmeren met Dask in Python

Aangepaste data laden

# Laadt één video
load_mp4("video.mp4")
{'video': array(
         [[[ 51,  57,  37, ..., 227, 238, 168],
         ...,
         [ 83, 125, 129, ..., 222, 148, 208]]]),
 'audio': array([   7. ,    9. ,    9.5, ..., -544.5, -551. , -558. ]),
 'filename': 'video.mp4'}
Parallel programmeren met Dask in Python

Aangepaste data laden

data_bag = filename_bag.map(load_mp4)
data_bag.take(1)[0]
{'video': array(
         [126, 162, 203, ...,  63,  58,   8],
         ...,
         [ 58, 222, 170, ..., 234,  63,  81]]]),
 'audio': array([-203.5, -209. , -207. , ..., -222.5, -233. , -248.5]),
 'filename': 'me_at_the_zoo.mp4'}
Parallel programmeren met Dask in Python

Aangepaste data laden

data_bag = filename_bag.map(load_mp4)
# Maak lege lijst
data_list = []

# Voeg uitgestelde geladen bestanden toe aan de lijst
for file in video_filenames:
    data_list.append(dask.delayed(load_mp4)(file))
Parallel programmeren met Dask in Python

Lijst met uitgestelde objecten vs. Dask-bag

# Zet lijst met uitgestelde objecten om naar een Dask-bag
data_bag = db.from_delayed(data_list)
# Zet Dask-bag om naar lijst met uitgestelde objecten
data_list = data_bag.to_delayed()
Parallel programmeren met Dask in Python

Verdere analyse

transcribed_bag = data_bag.map(transcribe_audio)
transcribed_bag.take(1)[0]
{'video': array(
         [126, 162, 203, ...,  63,  58,   8],
         ...,
         [ 58, 222, 170, ..., 234,  63,  81]]]),
 'audio': array([-203.5, -209. , -207. , ..., -222.5, -233. , -248.5]),
 'filename': 'me_at_the_zoo.mp4'
 'transcript': "All right, so here we are in front of the, uh, elephants ...",
}
Parallel programmeren met Dask in Python

Verdere analyse

# Pas aangepaste functie toe om video's zonder gesproken tekst te verwijderen
clean_bag = transcribed_bag.filter(transcript_is_not_blank)

# Voer sentimentanalyse uit op transcripts
sentiment_bag = clean_bag.map(analyze_transcript_sentiment)
# Verwijder ongewenste elementen uit de bag
keys_to_drop = ['video', 'audio']
final_bag = sentiment_bag.map(filter_dictionary, keys_to_drop=keys_to_drop)

# Zet om naar Dask DataFrame
df = final_bag.to_dataframe()
Parallel programmeren met Dask in Python

Resultaten

df.compute()
            filename              transcript        sentiment
0  me_at_the_zoo.mp4  All right, so here ...         positive
...              ...                     ...              ...
Parallel programmeren met Dask in Python

Werken met .wav-bestanden

# Importeer scipy-module voor .wav-bestanden
from scipy.io import wavfile

# Laad samplefrequentie en audio-array
sample_freq, audio = wavfile.read(filename)
Parallel programmeren met Dask in Python

Werken met .wav-bestanden

# Samples per seconde
print(sample_freq)
44100
# De audiodata
print(audio)
array([ 148,  142,  150, ..., -542, -546, -559], dtype=int16)
Parallel programmeren met Dask in Python

Laten we oefenen!

Parallel programmeren met Dask in Python

Preparing Video For Download...