Dask bag'lerde her tür veriyi kullanma

Python ile Dask ile Paralel Programlama

James Fulton

Climate Informatics Researcher

Karma karışık veri biçimleri

Hem video hem de ses içeren bir veri kümesini gösteren bir diyagram.

Python ile Dask ile Paralel Programlama

Bir Dask bag oluşturma

import glob

video_filenames = glob.glob("*.mp4")
print(video_filenames)
['me_at_the_zoo.mp4', 'life_goes_on.mp4', 'guitar.mp4', 'hurt.mp4', ...]
Python ile Dask ile Paralel Programlama

Bir Dask bag oluşturma

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'
Python ile Dask ile Paralel Programlama

Özel veri yükleme

# Tek bir videoyu yükler
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'}
Python ile Dask ile Paralel Programlama

Özel veri yükleme

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'}
Python ile Dask ile Paralel Programlama

Özel veri yükleme

data_bag = filename_bag.map(load_mp4)
# Boş liste oluşturun
data_list = []

# Gecikmeli yüklenen dosyaları listeye ekleyin
for file in video_filenames:
    data_list.append(dask.delayed(load_mp4)(file))
Python ile Dask ile Paralel Programlama

Gecikmeli nesne listesi vs. Dask bag

# Gecikmeli nesne listesini dask bag'e dönüştürün
data_bag = db.from_delayed(data_list)
# Dask bag'i gecikmeli nesne listesine dönüştürün
data_list = data_bag.to_delayed()
Python ile Dask ile Paralel Programlama

İleri analiz

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 ...",
}
Python ile Dask ile Paralel Programlama

İleri analiz

# Konuşma olmayan videoları kaldırmak için özel fonksiyon uygulayın
clean_bag = transcribed_bag.filter(transcript_is_not_blank)

# Transkriptlere duygu analizi uygulayın
sentiment_bag = clean_bag.map(analyze_transcript_sentiment)
# İstenmeyen öğeleri bag'den kaldırın
keys_to_drop = ['video', 'audio']
final_bag = sentiment_bag.map(filter_dictionary, keys_to_drop=keys_to_drop)

# Dask DataFrame'e dönüştürün
df = final_bag.to_dataframe()
Python ile Dask ile Paralel Programlama

Sonuçlar

df.compute()
            filename              transcript        sentiment
0  me_at_the_zoo.mp4  All right, so here ...         positive
...              ...                     ...              ...
Python ile Dask ile Paralel Programlama

.wav dosyalarını kullanma

# .wav dosyaları için scipy modülünü içe aktarın
from scipy.io import wavfile

# Örnekleme frekansını ve ses dizisini yükleyin
sample_freq, audio = wavfile.read(filename)
Python ile Dask ile Paralel Programlama

.wav dosyalarını kullanma

# Saniyedeki örnek sayısı
print(sample_freq)
44100
# Ses verisi
print(audio)
array([ 148,  142,  150, ..., -542, -546, -559], dtype=int16)
Python ile Dask ile Paralel Programlama

Hadi pratik yapalım!

Python ile Dask ile Paralel Programlama

Preparing Video For Download...