nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | テストを中心にしたトーク・LTが多く盛り上がった #stapy 6月回でした

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
6月のみんなのPython勉強会について、イベントレポートをまとめます。

勉強会の概要

みんなのPython勉強会#46 - connpass

「みんなのPython勉強会」では、Pythonを中心としてプログラミングを仕事、研究、趣味など様々なシーンに生かす方法を一緒に学びます。プログラマ、WEBエンジニアに限らず、初心者からマスターまで様々なレベルの、いろいろな分野の人が集まるので、「みんな」の勉強会です。お気軽にご参加ください。

「いろいろできるぞ、Python!(TDDや自動処理など)」回ということで、Python本の著者3名が集まりました。
私も5月のDjangoCongressのレポートをさせていただき、Pythonはいろいろできるを示せた回だったと感じています。
(質問への回答をまとめた登壇報告を準備中です)
今回はトーク・LTへの感想を簡単に残します。

Pythonで自動化の本を書いた話(中野さん)

以下の本(#dekiru_py)の著者の方によるトークです。

できる 仕事がはかどるPython自動処理 全部入り。 (「できる全部入り。」シリーズ)

できる 仕事がはかどるPython自動処理 全部入り。 (「できる全部入り。」シリーズ)

  • 動機:自動化のレシピ本が増えていいのでは
  • Amazonでは辛口レビュー。原因の1つは、RPAの調査不足
  • 実用・一般・シンプルの両立は難しい
  • レビューは辛口だが、自動化本は需要があり売れているとのこと

自動化は結構具体的なところまで求められるそうで、各自がそれぞれの一推し自動化コードを共有するといいかもと思いました。
私の場合は、Excelファイル製アンケートの集約スクリプトです。
(コマンド一発で集約できたので、意気揚々と仕事していました)

#dekiru_py は2章分レビューしたことで献本いただいていたので、今回買ってプレゼントとして持参しました。
(中野さん、じゃん献本へのご協力、ありがとうございました)

データサイエンティスト養成読本ビジネス活用編のこぼれ話とエンジニアとデータサイエンティストのコラボについて(伊藤さん)

エンジニアとデータサイエンティストとで、「リファクタリング」が噛み合わないというのが印象的でした。

  • データサイエンティストはnotebookをきれいにすることと思う
  • エンジニアとしてはコードを効率化したい

データサイエンティストはテストコードよりテストデータかもしれないというアイデアは「再現性確保できるしなるほど」と思いました。

また、Research Oriented Codeのブログの方が、US PyCon 2019 Debrief Session - connpass で話されるそうなので、お会いするのが楽しみです。

『テスト駆動Python』入門(やっとむさん)

pytestは覚えることが少なく(ルールがシンプル)、使いやすそうな印象を受けました。
素振りして業務に取り入れたいなと思います。
「テストを書く=TDD」ではないというのが印象的でした(たしかに開発してからテストを書くこともありますもんね)

LT: 全世界のMasoniteファンの皆さんおまたせしました!!(medyさん)

setup.pyは『Pythonプロフェッショナルプログラミング 第3版』が参考になるかもしれません。

Pythonプロフェッショナルプログラミング 第3版

Pythonプロフェッショナルプログラミング 第3版

LT: データまえしょりすとのためのpytest入門(komo_frさん)

pytestのお話 in データサイエンス(データの前処理)。
紹介していただいた以下を見て、データサイエンスにおけるテストコードの書き方考えてみます(#mokupyでやろうかな)
Jes Ford - Getting Started Testing in Data Science - PyCon 2019 - YouTube

LT: 職業Pythonista歴半年の私が「君、修正早いね」先輩を唸らせた話(mizzsugarさん)

テストで早い修正を可能にしたというお話。
Djangoでもテストコード書く習慣をつけたいところです。

感想

やっとむさんのトークの影響か、テストが裏テーマだったように思います。
データサイエンスにおけるテストは、今の状況を打破する可能性があり、ちょっと取り組みたいなと思いました。
トークに質問(sli.doで集約)が多く出て、また、LTも目白押しで、すごく盛り上がっていたと思います。
発表者、運営、参加者の皆さん、どうもありがとうございました。
登壇報告は少々お時間ください。

イベントレポート | #pyhack にて PyConJPへのプロポーザル提出に使うpapercallについて、ハマりながら理解してきました

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
PyConJPのトークプロポーザルが6/2締切1ということで、Python界隈はプロポーザル提出ラッシュですね。
プロポーザル提出に使うpapercall.ioというサービス2にハマりやすい点があると #pyhack 中に耳にしました。
手を動かしてみてハマりながら理解したことを共有します。

注:執筆者はPyConJPのスタッフでもありますが、この記事で示す見解はPyConJPを代表するものではありません
また、この記事で示す見解が誤っている可能性もありますので、自己責任でご利用ください。

勉強会の概要

(第99回)Python mini Hack-a-thon - connpass

基本的に毎月開催です。スプリントのゆるい版みたいな感じで各自自分でやりたいことを持ってきて、勝手に開発を進めています。参加費は無料です。 初めての方も常連さんもぜひご参加ください。

papercallについてわかったことを成果発表したので、切り出してブログを書きました。
もちろん、papercallでもくもくしたかったわけではなく、本来やりたかった内容については別途レポートを書くつもりです。

papercall についてわかったこと

  • プロポーザルの提出方法は2通りある
    • Talkを作っておいて提出ページで選び、提出(Submit)する
    • 提出ページから「Write a New talk」してSubmitする
  • トークの公開について
    • Talkは公開できる -Submissionは公開できない
    • 公開したトークNotesの部分も含めてリンクを知っている全員が見られる

プロポーザル提出

f:id:nikkie-ftnext:20190526011221p:plain

Talk作成済みの場合

Talkは、ヘッダーナビゲーションの「My Talks」から作成できます。
作成済みのTalkをイベントごとに調整して提出することができます(図の1の部分で選択すると、Talkの内容がフォームに入力され、編集できます)。
作成済みのTalkを提出すると、Submissionが新規に作られます(ヘッダーナビゲーションの「My Submissions」から確認できます)

提出ページから新規に作成する場合

図の下に続くフォームに沿って入力します。
(作成済みTalkを選択していた場合は、図の2の部分をクリックすると、入力内容をクリアできます)
提出ページから新規作成すると、Submissionの他にTalkも新規に作られます

TalkとSubmissionとは何なのか?

papercallを使い慣れている方に教えていただきました。

  • Talkはテンプレートと考えるとよい
  • テンプレートから提出先ごとにSubmissionを作る(内容を調整可能)3
  • →PyConJP2019にプロポーザルを提出するとは、PyConJP2019というpapercall上のイベントに対してSubmissionを作成することと理解

(1)Talkを編集しても作成済みのSubmissionには影響を与えないこと、(2)Submissionを編集しても元のTalkには影響を与えないことも確認済みです。

(1)Talkを編集した場合:
f:id:nikkie-ftnext:20190526011328p:plain

(2)Submissionを編集した場合:
f:id:nikkie-ftnext:20190526011349p:plain

Talkの公開について

TalkやSubmissionのURLを直接叩いても、作成者でなければ詳細は見られません(ログインを求められます)。
OAuthで別のアカウントとしてログインして404となることを確認しました。 f:id:nikkie-ftnext:20190526011613p:plain

Talk鍵マークの箇所から公開できます。 f:id:nikkie-ftnext:20190526011505p:plain

公開すると、以下のようなURLが発行されます:
https://www.papercall.io/speakers/31396/speaker_talks/136192-papercall
(papercallのログインに使った認証アカウントによっては、speakersの後ろの31396はユーザ名となることもあるようです)

このURLではAbstract、Description、Notesが確認できます(記載されている場合のみのようです)。
Talkの作成画面4には、「Notes will only be seen by reviewers during the CFP process. 」(レビューアーだけが見られる)とありますが、Talk公開すると誰でもNotesが見られる仕様のようです。

ジャストアイデアですが、TalkにはNotesを書かずに公開し、それを元にしたSubmissionにだけNotesを書くと、Notesをレビューアーだけに見せるという運用ができると思います。
ただしDRY原則に反しているので、あまり使い勝手はよくないかもしれません。

終わりに

papercallについて手を動かした内容は以上です。
papercallのFAQページ5がスカスカで、#pyhackでなかったらハマって提出を諦めていたかもしれません。
papercallでハマりやすいポイントや、TalkやSubmissionについての考え方を教えていただき、ありがとうございました。

誤りや「こうやったらもっとpapercallを使いこなせるよ」という情報がありましたら、@ftnext匿名質問箱までお願いいたします。
このブログ記事を見てプロポーザルを提出できた!という方がお一人でもいれば嬉しいです。


  1. PyCon JP Blog: PyCon JP 2019 トーク応募受付開始しました | PyCon JP 2019 Call for talk proposals is now open

  2. こちらから提出できます:https://www.papercall.io/cfps/2160/submissions/new

  3. Submissionを編集する際、ナビゲーションで「MyTalks」がactiveになっているため、Submissionを編集していることがわかりにくいです。papercallに修正の声を送ります

  4. https://www.papercall.io/talks/new

  5. https://papercall.zendesk.com/hc/en-us

イベントレポート | #pyhack にて旦那と彼氏の間に何があるのかをword2vecに聞いてみました

はじめに

いつも心は虹色に! nikkieです。
4/6開催 (第98回)Python mini Hack-a-thon のイベントレポートをお送りします。

注:書かれている感想や考えは4月時点のものです。

勉強会の概要

(第98回)Python mini Hack-a-thon - connpass

基本的に毎月開催です。スプリントのゆるい版みたいな感じで各自自分でやりたいことを持ってきて、勝手に開発を進めています。参加費は無料です。 初めての方も常連さんもぜひご参加ください。

2月回以来の参加となりました。
(3月はstapy長野とブッキング)

取り組んだこと

word2vec入門!

今年はじめに どうしたら「彼女」から「奥さん」になれるかを『Word2Vec』に聞いてみた | 人工知能ニュースメディア AINOW を見て以来、ずっと気になっていたword2vecを触ってみました。

知りたいこと:旦那と彼氏の間に何があるのか?(旦那 - 彼氏)

以下を使って答えを求めてみます:

notebookはこちら:
word2vecで彼氏と旦那の間に何があるのか聞いてみる ライブドアニュースコーパス編 #pyhack 20190406 · GitHub

word2vecとは

単語がベクトルとして表現されるので、単語の足し引きができるようになると理解しています。

f:id:nikkie-ftnext:20190406163345p:plain

よくある例

  • 王様 - 男 + 女 → 女王1
  • 日本 - 東京 + ソウル → 韓国2

詳しくは勉強中です。

コーパス

以下のリンクからダウンロードした「livedoor ニュースコーパス」を使いました。3
https://www.rondhuit.com/download.html

ダウンロードしたtar.gzの解凍:tar -zxvf ldcc-20140209.tar.gz
-vもつけると、解凍したフォルダ・ファイル名がコマンドラインに表示されます)

.
├── ldcc-20140209.tar.gz
└── text
    ├── CHANGES.txt
    ├── README.txt
    ├── dokujo-tsushin
    ├── it-life-hack
    ├── kaden-channel
    ├── livedoor-homme
    ├── movie-enter
    ├── peachy
    ├── smax
    ├── sports-watch
    └── topic-news

形態素解析

Keras MLPの文章カテゴリー分類を日本語のデータセットでやってみる | cedro-blog と同様にjanomeで実施しました。

from janome.tokenizer import Tokenizer
ja_tokenizer=Tokenizer()
line = 'すもももももももものうち'
words = ja_tokenizer.tokenize(line)
for word in words:
    print(word)
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち  名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ

今回は名詞だけを取り出すことにします。

res = []
malist=ja_tokenizer.tokenize(line)
for tok in malist:
    ps=tok.part_of_speech.split(",")[0]
    if not ps in ['名詞']: continue
    w=tok.base_form
    if w=="*" or w=="": w=tok.surface
    if w=="" or w=="\n": continue
    res.append(w)
res.append("\n")
print(res)
# ['すもも', 'もも', 'もも', 'うち', '\n']

取り出した名詞は半角スペースで区切って並べ、テキストファイルに書き出します。
ライブドアニュースのテキストファイルと同じだけ、名詞を取り出したファイルができます。)
名詞で構成されたテキストファイルはtextと同じ階層にwakatiフォルダを作って配置します。

.
├── ldcc-20140209.tar.gz
├── text
│   ├── CHANGES.txt
│   ├── README.txt
│   ├── dokujo-tsushin
│   ├── it-life-hack
│   ├── kaden-channel
│   ├── livedoor-homme
│   ├── movie-enter
│   ├── peachy
│   ├── smax
│   ├── sports-watch
│   └── topic-news
└── wakati
    ├── dokujo-tsushin
    ├── it-life-hack
    ├── kaden-channel
    ├── livedoor-homme
    ├── movie-enter
    ├── peachy
    ├── smax
    ├── sports-watch
    └── topic-news

名詞を取り出す処理は10分くらいかかりました(1万には満たないファイル数です)。4

モデル作成

word2vecのモデルを作る上で、ライブドアニュースから取り出した名詞を1つのファイルに集約する必要がありました。 (gensim.models.word2vec.Text8Corpusに渡すファイルを作る)
以下の記事のシェルスクリプトを利用させていただきました🙏: 【Python】Word2Vecの使い方 - Qiita

find wakati \
| grep -e movie-enter -e it-life-hack -e kaden-channel \
    -e topic-news -e livedoor-homme -e peachy -e sports-watch \
    -e dokujo-tsushin -e smax \
| awk '{system("cat "$0" >> livedoor_wakati.txt")}'

複数のフォルダから集約する必要があったので、grep-eオプション5を使い、「または」検索しました。

彼氏 - 旦那 = ?

足し引きのやり方は、以下の記事を参考にしました:
【Python】🍜ラーメンガチ勢によるガチ勢のためのWord2vec(食べログ口コミコーパスの威力を検証してみた)🍜 - Qiita
引き算はnagetiveに指定すると理解しました(ドキュメントの確認は宿題事項)。

旦那と彼氏の間にあるものは、「農家、土地、畑」か〜😳

他の方の取り組みから

感想

気になっていた記事の内容を試せたので満足です。
複数カテゴリの記事を渡していたり、名詞だけに限定していたりと工夫できそうなポイントがあるので、今後確認したいと思います。

  • janomeは初期設定がMeCabより少なく6、使いやすいですね(MeCabの経験と比較して)
  • ファイルの集約に使ったシェルスクリプト便利ですね。「awkでやっていることって何?」って感じなので早々に調べます
  • ファイルパスの扱いでos.pathの代わりにpathlibを使ったところ、なかなかいい感じです

登壇報告 | #djangocongress にて、Django Girls Tutorialの次に取り組みたいトピックについて共有してきました

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
5/18のDjango Congress カンファレンスデーに参加し、「Django Girls Blogのネクストステップ」と題して、発表してきました。
このブログで登壇報告します。

勉強会の概要

DjangoCongress JP 2019

DjangoCongress JPは日本で開催されるDjango Webフレームワークのカンファレンスです。
DjangoCongress JPは、Djangoでアプリケーションを開発している人、Djangoを学んでいる人などDjangoに関わる全ての人が参加できます。
参加する全ての人がDjangoについて交流し、出会い、学び、楽しみ、深い理解を得ることを目的にしています。

昨年はDjangoを始めたばかりで右も左も分からずに参加したDjango Congress。
1年経て登壇内容を持参しての参加です。

トークDjango Girls Blogのネクストステップ

Django Girls Tutorialを始めとするチュートリアルと、Djangoで作りたいアプリが作れる状態の間にはギャップがあると感じています。
このギャップを解消するために、Django Girls Tutorialの題材のブログアプリを作り直し、得られた知見を共有しました。
スライド内容は、チュートリアルで扱っていない機能の実装方法が中心になっています。

取り上げた機能は、「チュートリアルで扱っていない」かつ「身につけるとDjangoでできることが広がる」という観点で選びました。

  • 他のソースコードを読むときに必要となるであろうクラスベースビュー
  • Djangoにこんな機能があると知ってほしかったカスタムタグ権限

実装方法の紹介が中心ですが、最後に話した実際方法の調べ方が言いたかったことです。
(このスライドで扱っていないDjangoの機能はまだまだ多いです。 調べる際に参考になれば嬉しいです)

  • Google検索などで実装例を探す(Djangoのバージョンが古くてもOK)
    • GitHubの動いているコードを参考にしてもいい1
  • 同時にDjangoのドキュメントの中を検索し、一次情報に当たる
    • Djangoドキュメントは英語で表示して検索(日本語で表示しているとヒットしない)
    • 検索結果を確認する際は日本語に戻して表示
    • ドキュメントに記載されていなければソースコードを見る

これは、トークの題材探しとして手を動かす中で見出していった調べ方です。
発表準備の過程はこちらから:

感想

トークを終えたあとに開いたツイッターには、非常に嬉しいコメントがいくつもありました。
フィードバックいただき、ありがとうございます!

こちらは要確認です(akiyokoさんの発表も参考に):

そして、今回一番感謝したいのはGitPitchのDavid Russellさん!!

GitPitchまわりでだいぶハマったのですが、原因はPITCHME.mdのあるフォルダを指定するpパラメタの指定で、末尾につけていた/が不要とのことでした2
Thanks a lot for your help!

これまでで一番大きいと思われる登壇の機会だったので、書籍の「献辞」にならったスライドを入れました。
ここで会場から拍手をいただき、感激しました。(お付き合いいただきありがとうございました)

裏話

ジャンゴールデンウィークネクストステップのネタを仕入れ、その後1回の週末を挟んで資料を作っていきました。
しかし、これまでの登壇と違って、作業見積もりが当てにならず3、資料の最後のパートができたのが前日21時。
そこから勘違いでGitPitchがうまく使えなくて当日朝練習、ランチの時間にアップデートをして登壇という若さに任せた強行スケジュールでした(苦笑)。
スライドに盛り込んだ内容は抜粋で、手を動かすには情報が不足していると思います。
自分の復習の意味を込めて引き続きアウトプットしていきます。

今後

直近では6/1のDjango Girls Workshopで再演の機会をいただきました。
PythonでWebアプリを作ろう [女性対象/男女コーチ◎] 2019.6 - connpass
ユーザ作成の部分に絞って、クラスベースビューの導入ハンズオンを考えています(これから準備するため、変更になる恐れがあります)

というわけで、今後もネクストステップの試みは続くのです。
Django Congress カンファレンスデー、ご参加の皆さま、運営スタッフの皆さま、会場提供のサイボウズさん、1日ありがとうございました!
お疲れさまでした。


  1. matobaさんも同様のツイートをしていて、ちょっと自信を持ちました:https://twitter.com/mtb_beta/status/1129609044799262720

  2. ドキュメントにも末尾に/はありません:https://gitpitch.com/docs/git/branch-many-slideshows/

  3. 今回の登壇内容は蓄積が少ない分野だったことによるかと考えています(=ストレッチゴール)。情報収集→登壇内容組み立て(スライド&サンプルコード)という流れで準備していきました。これまでは蓄積されていた分野で発表することが多く、内容組み立てが中心でした。

登壇報告&イベントレポート | #PyNyumon の「集い」にて、コミュニティ × Python独学 という経験を共有してきました

はじめに

頑張れば、何かがあるって、信じてる1。nikkieです。
Pythonを始めるきっかけになった #PyNyumon の「集い」(LT会)で経験を共有してきました。
手短に登壇報告を残します。

勉強会の概要

Python入門者の集い #8 - connpass

Python入門者のLT大会&懇親会です。
最近Python始めた方、これからPythonを深めていこうという方、ぜひ集まって「Pythonのここがよかった」「ここが好きになった」「ここがひっかかりやすい」など、Pythonを始めるにあたっての知識を共有しましょう。

スクレイピングハンズオンとLT大会を交互に開催している #PyNyumon。
経験を共有する側として場に立てて、胸にこみ上げてくるものがありました。

トーク:「独学Python in コミュニティ」

キーワードは「独学」と「コミュニティ」です

  • もくもく会に通って独学を進める中で、頻繁に質問に回答いただき、多くのものをいただいたと感じたnikkie
  • いただきっぱなしではなく、Pythonのコミュニティへのお返しとして、教える活動に取り組むようになり、今に至ります
  • (他のお返しの仕方として、アウトプットやカンファレンススタッフなどにも取り組んでいます)
  • できる範囲でコミュニティにお返し した結果、独学にプラスに働きましたと共有しました

komo_frさんトーク

印象に残ったのは結びの言葉:

コードは書かなければ書けるようにならない
とにかくコードを書こう

また、軸を明確に決めて取り組まれておられ、自分の取り組みを見つめ直す機会になりました。
(アウトプットも登壇からブログまで全部は難しい。そこで絞る、というトピック)

私とkomo_frさんのトークは共通している部分(もくもく会)もあれば、二者二様の部分もあります。
Pythonの取り組み方の多様性を示した結果になったと感じており、2軸のうちしっくりきた部分を参考にしていただければと思います。

トークを聞いて:「これが私の生きる道

komo_frさんのお話を聞いて、自分がPythonに関わる中で、大事にしているものがおぼろげながら見えてきました。

私は、わからなかったことがわかる瞬間が好きです。(トークで言及した「伏線回収」)
教えるという活動に夢中になっているのは、

  1. 教える中で自分の理解が足りない箇所が埋まる瞬間があり、
  2. また、他の人にとってのわからなかったことがわかる瞬間に立ち会えているから

のようだと気づきました。
登壇などで教える機会の資料には日本語を使うので、Pythonだけを書いているわけではありません。
それでも教えることを続けているのは「好きだからなんだなあ」と帰り道にしみじみと感じました。

Django Congressを週末に控え、怒涛のアウトプットも一段落しそうです。
Congressが終わったら、アウトプットの連続となったこの半年を振り返ってみようと思います。

LTより

紹介された勉強会(抜粋)

感想

嬉しいフィードバックもいただきました!
発表者冥利に尽きます😆

余談ですが、サブカルエンジニア界隈で流行の兆しを見せている「推しのTシャツ(正装)登壇」を試したところ、「ユーフォ好きです」という方がいらして、やってよかったです😊
(ファーストペンギンのnao_yさん、ありがとうございます)

お越しくださった皆さま、フィードバックくださった方々、運営の皆さま、どうもありがとうございました。
経験を共有する機会をいただけたこと、本当に感謝しています。
今後も精進に励みます!


  1. 冒頭の挨拶、アップデートしました。長らくお世話になった「いつも心は虹色に!」さん、ありがとうございました

  2. この資料がスライドにある「Twitterでうまくいかないとツイートしたら教えていただいた」資料の一つです(多謝)

連休ログ | Congressの発表ドリブンでDjangoを触った「ジャンゴールデンウィーク」でした

はじめに

GWはしっかり休めたかい? nikkieです。
休みつつも私は、タイトルの通り、Djangoを触っている時間が長かったです。
5/18にDjango Congressでの発表が控えており、その準備を進めていました。
「こんなことが話せそう」とアウトラインが決まったので、いったんアウトプットしておきます。

5/18 Django Congress トーク

Django Girls Blogのネクストステップ 〜実務レベルへ橋渡し〜」というタイトルで45分話します。

Django Girls Tutorialや公式ドキュメントの投票アプリチュートリアルは、入門者にとってわかりやすくDjangoの開発フローを学べます。
その一方で、私自身は、実務で開発するDjangoアプリケーションとの間にギャップがあると感じています。
チュートリアルよりフォルダ構成は複雑ですし、カスタムユーザなどチュートリアルで扱っていない内容も登場します。
そこで、Django Girls Tutorialのブログアプリを作り直し、実務でDjangoを使う上で必要と考える知見を共有します。
この発表がチュートリアルと実務の間のギャップの認識、そして解消のきっかけとなれば幸いです。

実は実務でDjangoを使ったことはないのですが、「作りたいアプリをDjangoで作ろう!」と思ったとき、チュートリアルで扱われていない機能が多いと感じています。
Django GirlsのWorkshopにコーチ参加しての感触でもあります)
「作りたいアプリをDjangoで作ろう!」という人が参照できるトークスライドを残したく、GWはDjangoで個人開発みたいなことをして、いろいろとネタを仕入れていました。

nikkieとDjangoの10日間

トークのネタ(ブログアプリの作り直し)はこちらのリポジトリにあります:

書籍にあたったり、Djangoドキュメントや先達のブログ記事にあたったりして、チュートリアルで扱っていない機能を実装していました。
例えば多対多のカテゴリの導入やページネーション、ユーザ登録などです。

f:id:nikkie-ftnext:20190507001556p:plain

別のリポジトリでは、social-auth-app-djangoを 使ってFacebookログインを試してみました。

手を動かしたことで各種OAuthのログインのイメージがつかめました。

Congressトークアウトライン

スライドやソースコードはこれから作っていくので、この内容になると保証はできませんが、ひとまずこんな感じで考えています。

  • はじめに(5分)
  • Django Girls Tutorial クイックツアー(10分)
  • ユーザまわりを実装(10分)
  • この機能、どう作る?(10分)
  • まとめ(5分)
  • 質疑(5分)

詳しくはこちら:
Django Congress 2019 トーク アウトライン(暫定版) · GitHub

「このあたりの機能は経験あるな」という方は、裏のc-bataさんのトークをどうぞ!

トークの対象者は

を想定しています。
「こういうトピックも扱ってほしい」というリクエストがありましたら、@ftnext質問箱までお寄せください(可能な限り取り入れます)。

終わりに

GWはDjango三昧だったと読者の方は思われるかもしれませんが、

  • 映画を見に新幹線で名古屋にいったり、
  • 映画に出ているファミレスの系列店で同じメニューを頼んだり
  • ふだんおろそかにしている片付けという負債を返済したり

と、締切をあまり意識しない穏やかな時間を過ごしていました。

しっかり休んだ後は、再度スイッチを入れて、トークの追い込みなど締切に追われる生活に戻ります。 Congress当日、会場でお会いしましょう!

イベントレポート | #SciPyJapan 1日目、科学計算まわりのPythonのトークを十分に浴びてきました

はじめに

いつも心は虹色に! nikkieです。
皆さん、SciPy Japanはご存知でしょうか?
機会をいただいたので、当日ボランティアとして参加してきました。

イベントの概要

Scipy Japan Conference 2019

SciPy Japan Conferenceは、日本で成長しているScientific Pythonコミュニティを結集させ、最新のプロジェクトを紹介し、参加者が熟練したユーザーや開発者から学ぶことを目的としています。

学問、企業、Pythonコミュニティからの参加者が一堂に会しました。
内訳は、5カ国から90名だそうです。
会場は「マンダリンオリエンタル東京」(超高級ホテル!)です。

Tutorial(Beginner): TensorFlow 2.0 Tutorial

https://storage.googleapis.com/applied-dl/SciPy_Tokyo.pdf

ディープラーニングは画像や長大なテンソルを入力にするという印象を抱いていたのですが、

  • 線形回帰も扱える
  • 構造化データ(CSVで扱われるような表形式のデータ)も扱える

ことがわかりました。
入門の例だけではなく、

  • DCGAN
  • seq2seq

といった応用例も取り上げていただき、TensorFlow2.0のクイックツアーに参加した感触です。

TensorFlowのインターフェース

tensorflow.keras前提です。

  1. 層(Layer)を並べてモデルを定義
  2. モデルをインスタンス
  3. compile
  4. fit
  5. predict

機械学習のポイント:カジノの例

レーニングデータセットとテストデータセットの違い

  • レーニングデータセットはモデルを作成する上で自由に使えるデータ
  • テストデータセットはカジノにある(モデル作成時に自由に使えず、自信のあるモデルをカジノに持って行ってテストデータセットへの性能を試す)

興味深かったのは、TensorFlow.js!
機械学習アプリケーションのデプロイに関心があるのですが、「JSで作ってしまうのはありだな」と思いました。
今度手を動かしてみます。

Advanced TutorialのAdvanced NumPyは公開されるビデオに期待しています。

Keynote: f(x) = a + bi

  • f: future
  • a: Atom
  • bi: Bit
  • →リアルとビットが未来を決める(世の中もエンジニアのキャリアも)

Bit

現在のAIの懸念点(AlphaGoを想定)

  • AIは高価
  • 電力コストを食い過ぎる

→解決策がCognitive Computing

Atom

リアルな世界の技術が必要

成功例:Carbon社
3Dプリンティングの問題をAtomとBitを組合せて解決

高い視座での話を久しぶりに聞いたので、ワクワクしました。
個人的には、これから来るだろう分野で素振りしておいて、チャンスに備えたいですね。

Apache Arrow

Pythonistaへのメリット

  • pickleの代替として使える(PySpark)
  • pandasとVaes(データフレームのライブラリ)は少しArrowを使っている

メモ:pickleはPythonのオブジェクトをバイトに変換したもの1

cross-languageがArrowの魅力とのことです。
多様な言語で使えるようにC++ベースで実装しようという考えが開発者間で共有されているのが、開発に参加したきっかけとおっしゃっていました。

Chainer: A Deep Learning Framework for Fast Research and Applications

  • ChainerはDefine-By-Runのパイオニア
  • ChanierXによるSpeed, Quick deployment
  • Domain Specific add-on packages

GoogleがTensorFlowでいろいろなプロジェクトを進めているのと同様に、PFNはChainerでいろいろなプロジェクトを進めている印象です。
直近では充実のチュートリアルが公開されています。

Scaling Your Python Interactive Applications with Jupyter

Jupyterでの懸念点を解決したそうです。

  • Optimized resource allocation
  • Security(HTTPS、multiuser)

クラウドのリソースを使いやすくする仕組みで、複数人で使わなくてもメリットはあるとのことです。

ドキュメントにチュートリアルがありました:

CuPy: A NumPy-Compatible Library for High Performance Computing with GPU

「ColabもしくはNVIDIA GPU環境で試してみて」:pip install cupy-cuda-101
(ColabではGPUを有効にする必要あり(Select runtime))

  • CuPyはNumPy, SciPy互換
    • コード中のnpをcpに置き換える(import cupy as cpしている前提)
  • NLPで聞いたことのあったspaCyもcupyを使っていた

GitHubにはexamplesも充実しているそうです:
cupy/examples at master · cupy/cupy · GitHub

RAPIDS: GPU Accelerated Data Science

2018年10月のPyDataでも取り上げられたPAPIDS

  • GPUはCPUがないと動かない(CPUからGPUに指示している)
  • CPU-GPU間でデータを送る部分のオーバーヘッドがある
  • 機械学習のはじめから終わりまでGPUで行う(=RAPIDSの世界観)

RAPIDSの世界観ではfail fastで進められるのがいいですね。

構成要素

太字のものをデモ込みで紹介していただきました。

  • GPU上にArrow互換な形式でデータを持つ
  • pandasライクなデータフレームのライブラリcuDF
  • scikit-learnライクな機械学習API cuML
  • グラフ解析→cuGraph
  • ディープラーニングはこれまで通り
  • 可視化→cuXFilter

cuDF, cuMLともに本体をC++実装して性能を確保し、インターフェースをPython実装して、既存パッケージライクなAPIを実現しているそうです。
pip, conda対応しているので、すぐに使えるのもいいですね。

感想

会場の高級感に終始圧倒されていました。
食事も豪華でおいしく、なんとミシュランに載るほどだそうです。

Wi-Fi接続などはホテルのスタッフさんがサーブの中で対応され、実はボランティアの出る幕はあまりありませんでした(十分にトークを聞くことができました)。
あまりに多くをいただきすぎていると感じているので、このレポートブログや、ツイートで盛り上げに貢献できればと思います。
2日目も(途中までですが)よろしくお願いします。