音や画像が入ったPandasのDataFrame(html)を作る
はじめましての方ははじめまして. sqrt4kaidoです.
pandasにおけるDataFrameの可視化についての小ネタを1つ紹介します.
DataFrameをhtml化することで,音や画像を一緒に可視化する方法です.
方法
pandasにはto_html()というメソッドがあり,任意のDataFrameをhtmlの形式にすることが出来ます.
生成したhtmlは,IPythonのdisplayモジュールを用いてjupyter lab上でプレビューすることが出来ます.
ここに,音や画像のタグを埋め込んでしまおうという作戦です.
では早速,音と画像を組み込んだDataFrameを生成する,htmlに変換するまでのコードの一例です.
path_wavs = ['wav/01.flac', 'wav/02.flac', 'wav/03.flac'] path_imgs = ['img/01.png', 'img/02.png', 'img/03.png'] audio_raw = [] for i in tqdm(range(len(path_wavs))): name = path_wavs[i].split('/')[-1] audio_html = f'<audio controls><source src="{path_wavs[i]}"></audio>' ## audioタグをつける img_html = f'<img src="{path_imgs[i]}">' ## imgタグをつける audio_raw.append([name, audio_html, img_html]) audio_df = pd.DataFrame(audio_raw, columns=['name', 'audio', 'mel']) audio_html = audio_df.to_html(classes=["table", "table-bordered", "table-hover"], escape=False) ## htmlに変換.Bootstrapで少し見た目を整えている
ポイントは,表示したい音へのパスをaudioタグで囲むことと,表示したい画像へのパスにimgタグをつけることです. to_htmlを行うときは,画像がエスケープされてしまうのを防ぐため、to_htmlの引数でescape=Falseを指定します.
これでプレビューしてみると,以下のように音と画像が入ったDataFrameを可視化することが出来ます.
ちなみに,このhtmlをprintしてみると,ちゃんとhtmlが生成されていることがわかります.
<table border="1" class="dataframe table table-bordered table-hover"> <thead> <tr style="text-align: right;"> <th></th> <th>name</th> <th>audio</th> <th>mel</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>01.flac</td> <td><audio controls><source src="wav/01.flac"></audio></td> <td><img src="img/01.png"></td> </tr> <tr> <th>1</th> <td>02.flac</td> <td><audio controls><source src="wav/02.flac"></audio></td> <td><img src="img/02.png"></td> </tr> <tr> <th>2</th> <td>03.flac</td> <td><audio controls><source src="wav/03.flac"></audio></td> <td><img src="img/03.png"></td> </tr> </tbody>
感想
音と,生成したスペクトログラムを可視化,比較するときなどに便利.