PyCon JP 2019 カンファレンスレポート

2日目:農業もライブも! ますます広がるPythonの可能性

この記事を読むのに必要な時間:およそ 6 分

注目セッション「知ろう!使おう!HDF5ファイル!」―thinkAmi

(nikkie)

thinkAmi氏による「知ろう!使おう!HDF5ファイル!」をレポートします。

株式会社日本システム技研(所在:長野市)所属のthinkAmi氏は,ブログメモ的な思考的なやDjango Congress JP 2018,2019の登壇などで精力的にアウトプットしています。今回はHDF5ファイルについてのトークでした(ちなみに,thinkAmi氏の他にも日本システム技研のメンバーがIoTやライブコーディング(続くレポート)と多彩な発表でPyCon JPを盛り上げています!⁠⁠。HDF5ファイルは,たとえばKerasを使った機械学習で,モデルの保存に使われますね。

HDF5ファイルについて説明するthinkAmi氏

HDF5ファイルについて説明するthinkAmi氏

最初のパート「知ろう!」は,HDF5ファイルは初めてという方向けの導入でした。HDFはHierarchical Data Formatの略で,階層構造を持ったデータフォーマットを指します。あるディレクトリの下のディレクトリツリーをエクスプローラーやFinderで見ることができますが,HDF5ファイルは,そのディレクトリツリーをまるごとファイルにしたものと理解しました。5というのは現在のバージョンで,過去には4というバージョンもあったそうです。

HDF5ファイルは,次の3つの要素から構成されます。

  • データそのもので,ファイルに相当する「Dataset」
  • Datasetを入れるもので,ディレクトリに相当する「Group」
  • DatasetやGroupの注釈となる「Attribute」

HDF5ファイルの特徴のひとつは,クロスプラットフォームで使えることだそうです。

HDF5ファイルを見るためのツールを紹介した後,⁠使おう!」ということで,いよいよPythonからHDF5ファイルを操作します。サードパーティモジュールh5pyまたはPyTablesで操作できるそうです。画像やExcelファイルを読み込んで,create_datasetメソッドでGroupに保存したり,HDFファイルに含まれるDatasetをvisititemsメソッドで検索してから目的のDatasetを開いたりといった操作の紹介がありました。

HDF5ファイルはローカルに保存するだけではなく,REST APIを介してHDF5ファイルを共有できるサーバ(h5serv)や,サーバの機能をクラウドで使うためのサービス(HSDS)も提供されているそうです。

最後にHDF5ファイルのバージョンについての共有です。現在は1.8系と1.10系があり,1.8系は2020年5月でパッチリリース終了,また,1.10.2以前と1.10.3以降とでは互換性がないそうです。このトークを機に触ってみようという方にとってありがたい情報ですね。

機械学習で登場するHDF5ファイルがいったい何物なのか,このトークを聞いてわかりました。機械学習で使っているHDF5ファイルを覗いてみると,このトークで聞いたことの理解を深められそうです。

注目セッション「Pythonでライブをしよう -FoxDotを使った新時代のPython活用法-」―田中慎太郎

(横山直敬)

株式会社日本システム技研所属の田中慎太郎氏による発表です。

FoxDotとは,音響合成用プログラミング環境・言語のSuperColliderをPythonから操作するためのライブラリです。SuperColliderを用いるとリアルタイムに音響を合成することができます。SuperCollider自体は独自のプログラミング言語ですが,FoxDotによりインタラクティブシェルやJupyter NotebookからPythonの文法でSuperColliderの機能を使うことができます。

田中 慎太郎氏

田中 慎太郎氏

音楽や映像をインタラクティブに生成するパフォーマンスを「ライブコーディング」と呼びます。⁠ライブコーディング」の特徴は,偶然性と即興性のあるアルゴリズミックなアプローチができることです。

田中氏はDTMを趣味にしており「ライブコーディング」の存在自体は知っていましたが,当初はプログラミングする必要性に疑問を持っていたそうです。しかしそのDJたちは「コード」で踊らせる─⁠─人間と機械が⁠共創⁠するアルゴレイヴの世界という記事に触発されてライブコーディングを始めました。

FoxDotで使える音色は大きく分けて3種類です。

  1. play:ドラム音源。文字ごとに別々の音源が割り当てられている。
  2. loop:自前で用意した音声ファイルのループ。
  3. それ以外:シンセサイザーのような音。

FoxDotでは,PlayerObjectと呼ばれるオブジェクトで音色とその設定であるSynthDefsを操作します。SynthDefsでは,属性を編集することで音色や音高,長さを変更できます。

SynthDefsの中では繰り返し表現をしたり時間による変化をつけることができます。繰り返し表現はPatternObjectを使い,listの先頭にPをつけて表します。PatternObjectを使うことで冗長なコードを避けることができます。時間による変化はTimeDependentVariablesを使います。実行ごとに結果を変えることができます。

以下に示すのがFoxDotのコード例です。普段,目にしているPythonの文法とは大きく異なっています。PlayerObjectへのSynthDefsの割り当てにはシフト演算子が使われていますし,PatternObjectはlistが元になっています。この通常のPythonと異なる振る舞いはPythonのオブジェクトが持つ特殊メソッドを使って,元の振る舞いを上書きすることが実現していると説明していました。

d1 >> play("X-O-")
p1 >> pluck([0, 1, 2, 3, 4, 3, 2, 1], dur=1/2, amp=1.5) 
p2 >> pluck(P[[0, 1, 2, 3, 4])

Pythonは主にWeb開発やデータ分析で活躍していますが,これからはそこにライブコーディングも加わっていきそうです。トークセッションでは実際に田中氏がFoxDotを使ったライブコーディングを行う一幕もありました。実際にどのようなパフォーマンスができるのか気になる方はぜひ動画もチェックしてみてください。

著者プロフィール

牛窪翔(うしくぼしょう)

事務局チームでメディアスポンサーを主に担当。PyCon JPにはPyCon JP 2019で初めてスタッフとして参加。Pythonに関しては,大学院にて機械学習,社会人にてDjangoでのシステム開発経験があり,プログラミング言語の中で一番好き。

前職はAndroidアプリエンジニア,現在は株式会社サポーターズにてエンジニア専門の中途エージェントとして転職支援やキャリア相談をしている。また,自社勉強会プラットフォームのサポーターズCoLabでマネージャーとして勉強会やハッカソンの企画・運営・自身の登壇を行っている。

ポートフォリオ:Ussy's portfolio
Twitter:@shoushi12


横山直敬(よこやまなおたか)

コンテンツチームでレビューとポスターセッション(コミュニティ)及びオープニング・クロージングとLTの司会進行を担当。PyCon JP 2017から3年間スタッフとして参加している。

また,毎月開催されている「みんなのPython勉強会」に企画スタッフとして関わり,登壇者の推薦や企画の主催を行っている。

普段は株式会社ビープラウドでPythonエンジニアとして受託開発のプロジェクトに参加する他,オンラインPython学習プラットフォームPyQの問題作成にも携わっている。

Twitter:@NaoY_py


平尾元紀(ひらおもとき)

コンテンツチームでトーク周りのレビューや連絡を担当。PyCon JPにはPyCon JP 2016に初めて一般参加し,2019年は初めてスタッフとして参加。2018年はLT,2019年はポスターで発表と,スタッフとして活動する傍ら発表者としても活動しています。

現在は株式会社いい生活でPythonエンジニアとして日々WebAPIの開発に携わる一方で,外部へのアウトプットを増やすべく技術広報としての活動もしています。ちなみにPyCon JP経由でPythonを書く仕事に転職できたという経歴を持っているため,人々が繋がる場所としてPyCon JPが発展していくよう活動しています。

Twitter:@__yumechi


nikkie(にっきー)

コンテンツチームでトークのレビューやビギナーセッションの企画,会場チームで託児室の準備・運営と,初スタッフながら精力的に活動。株式会社ユーザベース所属のデータサイエンティスト。自然言語処理の研究開発に従事している。

プライベートでは,締め切り駆動で積極的に勉強会で登壇している。また,新橋で毎月開かれる「みんなのPython勉強会」のスタッフをしたり,Django Girls Tutorialの翻訳に参加したりWorkshopでコーチとして教えたりして,Pythonコミュニティへの感謝を表している。

Twitter:@ftnext

バックナンバー

PyCon JP 2019 カンファレンスレポート