nikkie-ftnextの日記

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

イベントレポート | #pyhack にて 退py のコードをオブジェクト指向でリファクタリングするというプロポーザル駆動開発を進めました

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
11/30の pyhack で手を動かした内容を備忘のためにまとめます。

勉強会の概要

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

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

11/30は他のPython勉強会と重なったこともあり、人数は10〜15人くらいで推移し、ゆったりめでした。

やったこと

標題についての解説です。

背景

Pythonを始めたときに『退屈なことはPythonでやらせよう』1(退py2)にお世話になりました。
この本をはじめ、入門書で最初に見たコードを繰り返し真似る中で、同様のコード3が書けるようになりました。

      if width > SQUARE_FIT_SIZE and height > SQUARE_FIT_SIZE:
          # Calculate the new width and height to resize to.
          if width > height:
❶            height = int((SQUARE_FIT_SIZE / width) * height)
              width = SQUARE_FIT_SIZE
          else:
❷            width = int((SQUARE_FIT_SIZE / height) * width)
              height = SQUARE_FIT_SIZE

          # Resize the image.
          print('Resizing %s...' % (filename))
     ❸     im = im.resize((width, height))

こちらのようなコードを書いて自分のやりたいことができるのは非常に嬉しいのですが、仕事でも書く中で変更しにくさを感じるようになりました。
そこで、動作し、かつ、変更しやすいコードをPythonで書けるようになりたいと最近はオブジェクト指向のインプットをしています。

取り組み

退py 17章の画像処理のコード(前掲)をオブジェクト指向で書き直してみます。

オブジェクト指向で書き直すにあたって、増田さんの本や、増田さんの本で言及されている『ThoughtWorksアンソロジー』の「オブジェクト指向エクササイズ」を参考にしました。
インプットした内容の実践です。

なお、単体テストを書いて進めるテスト駆動開発をしています。

成果

画像ファイル1つを渡す場合(MVP)は動作させられました。

# 縮小したい画像のパスを渡すと
$ py-im-process ~/Downloads/pyconjp.jpg
# カレントディレクトリに縮小した画像ができる
$ open pyconjp.jpg

もう少し手を動かしてCfPに落とし込んでいきます。

手を動かす中で気づいたこと

  • Python.gitignoreをコピペでなくwgetすればいいと気づく:wget https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore -O .gitignore4
  • 単体テストで返り値の型を確認するassertIsInstanceメソッドが存在していたことに気づく
    - 長いこと`isinstance`の返り値がTrueか確認していました。恥ずかしい😖
    
  • ファーストクラスコレクションに__iter__メソッドを実装
    • ファーストクラスコレクション自体がfor inに置けるようになる(ファーストクラスコレクションの持つリスト型のプロパティだけでなく)
In [5]: @dataclass
   ...: class Foo:
   ...:     list_: List[int]
   ...:     def __iter__(self):
   ...:         return iter(self.list_)
   ...:

In [6]: l = Foo([1, 2, 3])

In [9]: for i in l.list_:
   ...:     print(i)
   ...:
1
2
3

In [10]: for i in l:
    ...:     print(i)
    ...:
1
2
3

In [5]: iter(l)
Out[5]: <list_iterator at 0x108e035c0>

今後やりたいこと

  • 変更しやすさを体験したい
    • 指定した画像ファイルをグレースケールにもできるようにしたい
    • argparseのadd_subparser
    • main関数がまだ知りすぎている(カプセル化しきれていない)ので修正する
  • 存在する画像ファイルが指定されたことの検証
    • argparseのadd_argumenttypeを使えばできそう
  • 画像ファイル単体でなく、ディレクトリも指定できるようにしたい
  • テストを書いていることを活かしてリファクタリング
    • クラスの分け方、もっとよくできないか試したい

終わりに

久々参加の #pyhack、人が少なめだったので、がっつりやりたい開発ができて満足しています。
必要そうな小さなクラスを作った後、それらを使って1つの処理を組み立てるところで時間がかかるので、設計のときに呼び出し関係を考えた方がよさそうです。

次回12/14は 技書博2 と重なったので、タイムラインから見つめています。 参加者の皆さま、1日ありがとうございました。

PS: 2020年のnikkieへ

新規開発でmypy導入するっ!


  1. 原著(英語版)の2nd Editionが出たようです。100ページ増! ref: What's New in the 2nd Edition of "Automate the Boring Stuff with Python" - The Invent with Python Blog

  2. 一部の熱狂的なファン(私です)による呼称です

  3. 英語版の本文とソースコードは公開されています。続くコードは Automate the Boring Stuff with Python より

  4. ref: gitignore を落としてくれるシェルスクリプト - 私が歌川です

イベントレポート | #engineers_lt の勉強会にて、プロポーザルの書き方を学び、プロポーザル提出に力強く背中を押していただきました

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
11/25に参加したプロポーザルの書き方についての勉強会のレポートをお送りします。
ものすごく素敵な勉強会だったので、後で見返すために感じたことを備忘録としてまとめていきます。

勉強会の概要

「プロポーザルの書き方を学ぼう」登壇の技術を勉強する会 - connpass

カンファレンスへの登壇を申し込む際に必要な「プロポーザルの書き方」をテーマにした勉強会を開催します。

以下のような方に参加いただきたいと考えています。

  • 何度か勉強会で登壇したことがあり、カンファレンス登壇を目指している方
  • カンファレンスに登壇したことがあり、プロポーザルの書き方をさらに良くしたいと考えられている方

開催後ですが、興味のある方へ
ハッシュタグ #engineers_lt で当日の流れが終えるほか、

各セッション内容は写真/動画撮影され、後日任意の媒体にて公開させて頂きます。

とのことですので、楽しみに待ちましょう!

以下には各トークの備忘録(感想含む)が続きます。

エンジニアに幅広く刺さるセッション内容の考え方 / @kondoyuko

翔泳社デブサミにも携わっているゆうこりんさんのトーク
カンファレンスの類型の解説があり、「カンファレンスってそれぞれ持ち味があるんだな」と認識しました。 深く関わったこともあり、カンファレンス=PyConをイメージしがちなのですが、技術を限定しないデブサミなどのカンファレンスもあるのですね。

標題の考え方については、以下の記事 + αで5つ紹介

  • 特定の技術がテーマでも、幅広い対象者をイメージしてほしい
    • 例えば、あるフレームワークでリプレースという題材の場合、そのフレームワークをやっていない人にも分かるように。細かいつまづきポイントよりも、リプレースをテーマに。少し入門的な内容を冒頭に入れる
  • 勉強したことではなく、取り組んだことを話してほしい
    • カンファレンス以外でも知る機会があるため。デブサミでは勉強は求められていない
    • 勉強より個人活動のほうが期待される。更に上は業務
  • セッションの独自性・メッセージを明確に
    • トレンドの技術(例えばサーバレス)だけでは差別化が難しい
    • 独自性として、案件の例。来場者は刺激を求めている
  • なぜあなたがその話をみんなにしますか?
    • トピックを話すのに自分がふさわしいという理由
    • 案件で関わった経験、コミュニティで知見を広げた、など
    • SIerでいろいろな案件を経験したというのも理由になる
    • 同人誌を書いた、ブログで情報発信→クオリティの期待
  • テーマとの親和性があるときれい
    • 来場者もテーマを意識

まとめでは、「売れ線(集客できるトーク)を狙うだけが公募ではない」として、「自分だから言えることを発信しよう。このトークはあなたのセッションが多くの方に伝わるきっかけになれば」と結びました。

求めているものや来場者の実際の期待を明文化するというのは、PyCon JPにも提案してみます。

カンファレンス主催者から見たCfPとプロポーザル / @hiro

OOC主催の@hirodragon112さんによる、主催者にとってのCfP応募の意味の共有トーク

hiroさん自身はプロポーザルの提出経験はないとしながらも、めちゃくちゃエモくて、すごく背中を押された発表でした!(スライド公開が待たれます→11/28 @sogaohさんのレポートで知り、追加しました)

プロポーザルとは

スタッフにとってCfPはとにかく嬉しい!
応募という行為に喜ぶ

  • カンファレンスはを作っている
  • カンファレンスの名前に価値はない
  • コンテンツがない限り成立しない
  • 大規模だと自前でコンテンツを用意できない。自前が全て面白いかはわからない

こんなことをやったらどう?という企画がプロポーザル

プロポーザルとスポンサーの応募がスタッフ活動の支え。
箱に価値を与えてくれる

「自分なんかがプロポーザルを出していいのだろうか?」「見劣りしたら恥ずかしい」

自分の中の考えは、アウトプットした瞬間に評価される。プロポーザルもそう

問いに対して:出していけないなんてことはない。
枠があるので、来たものから取捨選択はする。質の担保はカンファレンス運営がやる
運営が価値があると思った。だから発表者は見劣りのようなことは気にしなくていい。
話したいことを出そう

今の時代、検索すれば分かる。その人は何をやってきて今何を喋りたいのかを来場者は知りたい

OOC採択基準の案

選考で気にしようと思っていることとのことです

  • 質の良い順に上から取るわけではない→したら同じようなものが並ぶだろう
  • いいプロポーザルは概要まとめ力があるということ。だからプロポーザルがすべてではない
  • 実際、目を引くプロポーザルはある
  • 偏りたくない
  • 知名度は影響がある(聴衆が求めていそう。最後に使う基準)
  • 絶対ここで登壇したいという熱意
    • とにかくこれを語ってみたいという想い
    • 70億いたら自分と同じことを感じる人間がいる。つまり聞きたい人がいる。後は熱意

プロポーザル・アンチパターン 〜採択されないプロポーザルの特徴から学ぼう〜 / @fujisaki_hb

タイトル、概要、プロフィールについてアンチパターンを紹介するトーク
July Tech Festaなど多くのカンファレンスに携わっているそうで、説得力がありました。
犯していたものもあり、身を切られてもいました 笑。

まとめスライドをプロポーザルを出す際のチェックリストとして用意していただきました!
プロポーザルを出す際に、度々見返したいなと思います。

登壇者の発言が広まるので、運営側としては「プロフィールを確認してどんな人がわかっているほうがいい」というのは思いもしませんでした。

概要のアンチパターン:不確定要素について

懇親会でfujisakiさんに質問してみたところ、

カンファレンスの立ち位置によるのでは。
手を動かした発表が期待されるカンファレンスなら当日までの開発も許容されるのではないか

重要なのは、プロポーザルに中途半端感を残さないことではないか。
本の企画で出す目次と同じ。ある章は一から調べて書くこともある。
調べるところが残っていたとしても、プロポーザルとしてはやりきっている状態が望ましいと考える

とのことです。
参考になります。
回答ありがとうございます!

私自身はカンファレンス駆動開発をプロポーザル駆動開発に代えて試してみて、かかる負荷や、プロポーザルの温度感を探ってみます💪

個人やサークルとして応募する CfP、あるいは その思い切り / @lulzneko

会社名ではなく所属サークル名で、デブサミをはじめ数々登壇されてきたラルズネコさんによるLT。
重要なのは中身で、会社名の有無で採択は決まらないと強調されていました。

サークル名でドメインを取ってメール受信ということもできるのですね。
12月の技書博に向けてEverlasting Diary立ち上げたわけですし、今後やってみよう。

感想

懇親会では、PythonつながりでNimを教えていただいたり、atmarketに週次で連載している方とつながれたりと大変刺激をいただきました。
CfPに興味ある人が集まった会ということで、様々なアウトプットの経験のある方が多く、勉強会で上がったモチベが更に上がりました。
#pycon_shizu や #ooc_2020 のプロポーザルを準備していきます!
また、PyCon JP 2020にも関わっていくので、他のプロポーザルの事例もアイデア出しに活用させていただきます。

勉強会後のテンションで書ききったのですが、私の認識違いがありましたら、コメントやTwitterでお知らせください。

登壇者、運営者、参加者の皆さま、そしておいしい食べ物・飲み物や素敵な会場で勉強会を盛り上げてくださった、forkwellさん、ソニーさん、Sansanさん、誠にありがとうございました!!

追記(11/28):他の方のレポート

週末ログ | #技書博 2にて頒布するargparseを使ってPythonでコマンドラインツールを作る本を書き進めていました

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
週末11/23-24のログを共有します。

  • argparse本執筆状況
  • PyCon JP 2019のリジェクトコン

執筆状況

先日発信したように、12/14の技書博2にてargparseを扱ったテーマにPython本を頒布します(2F か-01 です)。

土日はモクモク書き進めていました。
現在の目次はこんな感じです(執筆中ですので、頒布物では変更されうる点ご了承ください)。

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

本編を書き上げたので、「当日頒布はできるようになった」という感触です。
ただまだまだ書きたいことは多く、時間との戦いの様相を呈してきました。

  • 1章は25%くらい
  • 2章は100%(いったん書き上げた)
  • 3章は脳内の構成の15%くらい。ただし時間との兼ね合いで全部書き切らないという選択もできる

書いたものをブラッシュアップしたいので、11月いっぱいで書ききるのが現在最優先の目標です!
レビューに協力していただける方を募集します(#pyhack でも聞いてみよう)。

Sphinxで書いた原稿をPDFにビルドする

Ubuntu16.04 × Python3.6 × Sphinx 2 の環境でビルドできるようになったので備忘録がてら共有。

Ubuntu16.04 + Python3.6 + Sphinx2 PDFビルド環境 · GitHub

元にしたのはtokibitoさんが作ったこちらのイメージ:
SphinxでPDFをビルドするためのDockerイメージを作った - 偏った言語信者の垂れ流し

このイメージは

で動いています。
私の執筆環境は、macOS × Python3.7 × Sphinx 2系です。

Sphinxは1→2でcontents.rstがindex.rstにrenameされたらしく1、先のイメージをrunしたところ、「contents.rst not found」エラーに遭遇。
index.rstと同じ内容のcontents.rstを作ったところ、PDFがビルドできました。

Sphinxのメジャーバージョンが違うのか。2系で合わせておいたほうが後々はまらなさそう」と考え、tokibitoさん作成のDockerfileを手元でbuild
すると、Sphinx2系のインストールにはPython3.5以上が必要とpip installでエラー。

そこでUbuntu16.04でPython3系が使えるようにしている情報を探し、aptで入れる方法2を採用してDockerイメージをbuild
このイメージで、先の目次のようにPDFをビルドできています😁

リジェクトコン #rejectpy

浮かんだアイデアを検証するべく、Twitterのアンケートを2つ作りました。
よろしければ、ポチッとお願いします!

執筆を落ち着けて、CfPなど動いていかねば。

以上です。

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


  1. 解釈違いかもしれませんが、「バージョン 2.0 で変更: The default is changed to ‘index’ from ‘contents’.」のような記載が出てきました https://www.sphinx-doc.org/ja/master/usage/configuration.html#confval-master_doc

  2. ソースのtgzをwgetで取得してビルドする方法も見つかったのですが、手順がシンプルなのでaptを選択:dockerでubuntu16+python3.6+mecab(neolog-ipadic)を構築する - メモ帳python -m pipの書き方は覚えておきたいです

告知 | 12/14 #技書博 2にて、argparseを使ってPythonでコマンドラインツールを作る方法について同人誌を頒布します(2F-か01)

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
12月の技書博2で、Pythonコマンドラインツール作成についての薄い本(=同人誌)を頒布します。
現時点の目次や頒布に関する情報をまとめます(随時更新予定)

技書博については公式サイトを参照ください:

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

企画

  • サークル名:Everlasting Diary
  • サークルページ:https://gishohaku.dev/gishohaku2/circles/nklmjjWPhfT6oVdq4Upa
  • 当日の配置:2F-か01
  • 対象者:Python入門者、Python中級者になりたての方
  • タイトル:未定(仮称:argparse本)
  • ページ数:30Pくらいを予定(※増減ありえます)
  • 頒布価格:気軽に買える価格にしたい(※収支考慮の上決定します)
  • 頒布形態:物理本 / 電子本 両対応

構成(案)

Pythonの入門書やレシピブックでPythonスクリプトを動かすことは扱うと思っています。
Pythonスクリプトに引数を渡せるようになれば、Pythonを始めた方のできることが広がる!」と考えたのが、今回のアウトプットのきっかけです。

3部構成

  1. 入門編
    • Python入門者向けのパート。本編に接続するために用意
    • argparseを初めて聞いたという人を想定
    • Django Girls Tutorialの関数1を出発点とする
    • sys.argvを使ってスクリプトに引数を渡す方法を紹介
    • argparse導入:ヘルプメッセージが手に入る
    • コマンドラインツールの位置引数の紹介
    • コマンドラインツールのoptional引数の紹介
    • add_argumentの引数helpやaction、choicesについて
    • 書くにあたってはArgparse チュートリアルに準じるようにする
  2. 本編
    • argparseでコマンドラインツールを作る過程を実例から学ぶパート
    • Pythonコマンドラインツールを作ったことがあるが、argparseは使わなかった(または理解せずに使った)人を想定
    • 題材は"退Py"の17章にある画像縮小のコード2
    • 出発点:指定の画像ファイルの縮小(os.pathでなくpathlib使う)
    • フォルダを指定し、中の画像をすべて縮小できるようにもする
    • mvコマンドにならったコマンドにする
    • type引数に関数をセットする(存在するパスかのチェック目的)
  3. 発展編
    • 私が仕事でPythonを書く中でインプットした知識をアウトプットして整理するためのパート
    • 過去の私に向けて、「このあたりを知っておくと実務で役立つよ」と伝えたい項目を用意
    • イデアを以下に書き出しておく(全部拾いたいが時間と相談)
    • unittestを書く
    • クラスを使って書く
      • ファクトリという考え方
      • singledispatch
    • パッケージ化する

連絡事項

事前に共有した内容からの変更について

9月のみんなのPython勉強会LT『行くぜ、行こうぜ、技書博』で

  • Pythonの環境構築図鑑を執筆予定
  • Python合同誌も企画中

と共有しましたが、これらを変更しました。

環境構築図鑑からargparse本にテーマを変えた理由ですが、環境構築とは別に、Pythonでなにか実装するということを扱いたいと強く思ったからです。
Django Girlsに関わる中で環境構築の問題に気づき、9月のPyCon JP 2019で15分発表しました。
この続編として環境構築図鑑と考えていましたが、PyCon JPを終え、台湾、シンガポールと世界に飛び出して、Pythonのコードを書いた上でアウトプットをしたいというモチベーションが湧き上がってきました。
環境構築図鑑ではPythonのコードをあまり書かないでしょうが、argparse本にすることでPythonをガッツリ書くことができます。
PyCon JPスタッフなどでプライベートでPythonを書く時間が減っていたこともあり、「書きたいものを書く」という信念で、今回はargparseについて書きます。
環境構築図鑑3は今後のアウトプットの機会と自分のモチベーションと相談して実現を考えます。

Python合同誌は、技書博2では見送ります。
合同誌自体を諦めたわけではなく、今後のアウトプットの機会はあると思うので、今回1人で出すという実績を作った上で、機会を狙っていきます。

委託してもらって大丈夫です

Python関係の自分の本を置いてほしい(委託したい)という方がいれば、Twitter DMなどでご連絡ください。
置ける数に限りはあると思いますが、対応します。
これは、技術同人誌即売イベントでPythonカテゴリが盛り上がって欲しいと思っているがゆえの提案です。

おわりに

初のサークル主ということで至らない点は多いかと思います。
「こういう情報が知りたい」という声はTwitter質問箱からお聞かせいただけると嬉しいです。
また、進捗などはTwitterでお伝えしていきます。

当日に本がお渡しできるよう、強行日程ではありますが、執筆に取り組んでいきます!

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


  1. Python入門 · Django Girls Tutorialhi関数を想定。入門編は余裕と思ってもらえるように単純な例を使う

  2. 英語にて Automate the Boring Stuff with Python で確認できます。また、日本語書籍が『退屈なことはPythonにやらせよう』です。

  3. 4月のみんなのPython勉強会で共有した「環境構築方法(python.orgかAnacondaか)に応じて、参照する情報を読み替えよう」という提案を具体例を元に説明するとして考えていました。「伝え切れていないな」という感触があったためです。

登壇報告 | PyCon JP 2019でリジェクトコンをやりたいとLTしてきました & 企画を共有します #rejectpy

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
9月のPyCon JPで当日LTしたリジェクトコンについて、おまたせしました、続報です。
いつやるか、どんな感じでやるかをお伝えし、興味ある方からフィードバックをいただこうと思います。

リジェクトコンとは

PyCon JP 2019には、その場で登壇者が決まる当日LTがあり、そこで「リジェクトコンがやりたい!!」という想いを語ってきました。

もともとPyCon JP 2019のスタッフに応募した時から「リジェクトコンをやりたい」と思っていました。
今年はトークプロポーザルの応募が多く、採択率が18%と低かったこともあり、多くのプロポーザルにアウトプットの機会がないのはもったいないと感じています。
また、PyCon JP 2019としては不採択であっても、取り組みの否定では決してないと思っています!

PyCon JPのあの場で言ったからには開催まで進めます(どんなに険しい道のりであっても!)。
以下では「いつやるか」「どんな感じでやるか」と一人考えていたことを共有します。

ちなみに、過去の例

2017年にはmassaさんによるリジェクトコンがありました:
PyCon JP Reject Conference 2017|IT勉強会ならTECH PLAY[テックプレイ]

企画:PyCon JP Reject Conference 2019(仮)

  • PyCon JPとは無関係にやる(紛らわしくない名前に変える可能性あり)
  • スピーカーになれるのは、PyCon JP 2019に何らかのプロポーザルを出して採択されなかった方
    • 今後応募フォームを用意する
    • トークに限らず、LTやビギナーセッションで不採択となった方も対象
    • 参加者には制約なし
    • トークの時間を短縮し、大勢の方に話していただきたい
  • 最小構成として2017年と同じ感じでできたら
    • 休日の午後半日 or 平日の夜
    • 1トラックを想定
    • 妄想:オープンスペース用意したい(スピーカーと話す、聞いたトークをもとに手を動かす)
    • イベントの中で飲食物提供したいので、参加費1000円くらい?(パーティーまではいかず、みんなのPython勉強会懇親会のイメージ)
  • 開催時期は2020年1月予定
    • 自分のやりたいことと相談して2020年頭という結論
    • 他のやりたいことを進めるために一度離れ、11月末から進めます

お伝えしたいこと

リジェクトコンを発案しましたが、「私は何としてでも年内に開催したい!」という方がいたら、主導していただいて構いません
早く開催した方がいいと思うので、主導したい方は私に遠慮せず名乗りを上げていただけると嬉しいです😆。
そのような方が現れたら、私も可能な限りお手伝いします!(お手伝いするために一言ご連絡いただけると助かります)

そのような方が現れない場合、上記はnikkie1人で開催する場合の構成です。
「手伝ってもいいよ」という方がいたらぜひお力をお貸しください。
「リジェクトコンではこんなことやりたい!」というアイデアがある方も大歓迎です。
一緒にそのアイデアを実現させましょう。
会場も募集しています。
この企画を読んで何か思うところのある方は、以下のフォームよりフィードバックしていただけると助かります(Twitter DMなどでも大丈夫です)

終わりに

勉強会主催は初めてなので、親方さんのワンストップ本でポイントを押さえようと思っています:
ワンストップ勉強会 - oyakata - BOOTH

リジェクトコン運営に興味がある方からの反応をお待ちしています。
それでは!

DS700172

登壇報告 | サポーターズCoLabにてKaggleのタイタニックコンペのハンズオンで登壇しました(質疑録) #spzcolab

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
10/24に渋谷開催の機械学習の入門ハンズオンに登壇してきました。
そこで想定していた以上に質問をいただいたので、文字での情報共有&自分の思考の整理として記事にまとめます。

勉強会の概要

機械学習やKaggleが気になっている方を対象に、入門者向けのコンペであるタイタニック号の生存予測でKaggleを体験するハンズオンです。
詳しくは以下の登壇予告記事をご覧ください:

当日のスライドはこちら:

1時間程度ハンズオンをした後に質疑の時間があったのですが、時間いっぱいになるまで質問をいただきました。

質疑録

業務で何をやっていますか?(言える範囲で)

自然言語処理をやっている1
よくある問題設定で言い換えると、ニュース記事がどんなテーマか(政治かスポーツか)の分類

取り組む手法としてはLDA?それともRNNやLSTM?

業務ではディープラーニングで取り組んでいる(RNNやLSTMが該当)

ただしこれらの手法選択はゴールによると考えている。
機械学習しなくて済む(ルールベースで組める)なら確実なのでそれが一番(参考:『仕事ではじめる機械学習』)
今いる環境はディープラーニングを使うことが多い。
ディープラーニングはデータがいる。
十分なデータがなければLDAなどの古典的な手法が有効と考えている

タイタニックのような入門者用のコンペは他にあるのか?

私はあまりやり込めていないが、House Pricesは入門者用だと思う。
タイタニック分類という問題設定の入門者用で、House Pricesは回帰という問題設定の入門者用。

以下のような日本語のカーネルもあります(存在確認しただけで中身を読めていません):

どうやって今の状態に至ったか? データ分析の勉強はどうやったか

(非常に答えづらい質問でした。回答は個別具体的な例にすぎないので、抽象して得るものがあったなら嬉しいです)

もともと好奇心旺盛なのが利いているのかも。
大学で情報を学んでいた。機械学習の用語も知っていた。
エンジニアとして就職。授業で聞いたことのある機械学習のモデルがプログラミング(Python)で実装できるということで、ハンズオンなど行った。最初はよくわからないけど動く、楽しいという状態。
ハンズオンのコードを自分で書き直せないので、本を読んで体系だった知識を吸収。知識がつながる感じ。
プライベートのそんな取り組みから仕事でチャンス(機械学習案件アサイン)
業務時間も使って機械学習の知識は増えた。ただ案件としてはうまくいかない部分の方が多かった
次うまくやるにはどうするか、悔しさから勉強

業務でうまくいかない→補強するために勉強というのは、今の自分の根底にあると思います

統計2級を取得すれば、機械学習に役立つか

Yesな点もあればNoな点もあると思う。機械学習の分野の中で統計でカバーされない分野もあるため

機械学習には、統計と数学の知識も必要2
古典的なアルゴリズム(ロジスティック回帰や決定木)は統計の範囲と聞いたことがあるので、統計2級は役立つのではないか。
一方ディープラーニングについては統計2級を持っていたとしても勉強が必要だろう

ディープラーニングは今日のハンズオンの延長にあるのか

Yes。モデル作成のところが置き換わると考えてください

# モデルの設定(ニューラルネットワークの層を組んでいる)←タイタニックではLogisticRegressionなどアルゴリズムを設定したところ
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
# モデル作成前に必要な設定(ディープラーニング特有)
model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
# モデル作成(相変わらずわずか1行)
model.fit(train_images, train_labels, epochs=5)

コード例の参考:Basic classification: Classify images of clothing  |  TensorFlow Core

ハイパーパラメータチューニングくらいのモデルでも運用できるのか

目標にもよるがYes。
例えばタイタニックの例で目標が「accuracy 80%」と決まっているなら、ハイパーパラメータチューニングなどで目標を超えたモデルを作って運用する(目標を超えたモデルを作ったということが重要)。

もし研究が主眼(際限なく性能を上げたい)なら、時間もお金もかかるだろう。
かけるコストに対して性能は頭打ちになっていく(性能が上がってくると、以前と同じ時間を使っても全然性能が上がらないこともザラ)と聞いている

機械学習のプロジェクトはどのくらいうまくいくのか

機械学習のプロジェクトは最初に概念検証(PoC, Proof of Concept)でうまくいきそうか評価する。
PoCでうまくいかないことがわかっても収穫。
私がこれまで体験した中では、うまくいくのは半々くらい(注:Nが1桁半ばくらいです)。
ディープラーニングまで踏み込まず、今日扱ったロジスティック回帰や決定木で進めることもあると聞いています。
(ここは意見が分かれるところだと思うので、他の方にも聞いてみてほしいです)

スライドのアップデート事項

Googleアカウント

Googleアカウントでサインインする前に、登録(Register)が必要なようです。

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

Notebookの持ち主はUIが異なる

Notebook作成者の「Edit」というボタンが、Notebook閲覧者には「Copy and Edit」となるようです。
シークレットブラウザでの確認が必要でした。

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

Notebookのコミットが終わらない

これは想定していなかった事態で原因不明です(私の環境で再現させられていません)。
別のタブでKaggleにアクセスして、自分のNotebookを確認するとコミットされているかもしれません(Notebookの一覧へのアクセスはここからのスライドを参考にしてみてください)。

終わりに

当日はshimakaze_softさんにTAをしていただきました。
参加者は10名以上で、1人ではエラー対応しきれなかったので非常に助かりました。
お忙しい中ありがとうございました。

最後に参加者の皆さま、登壇の機会をいただいたサポーターズの皆さまにお礼申し上げます。
ありがとうございました!


  1. コミュニティで会う方は結構ご存知だと思いますが、実は2019年4月からデータサイエンティストに転職しています。PyCon JPスタッフや各種登壇で忙しく、転職エントリは書かずにここまで来ました(年内には「転職してどんな感じかエントリ」を書きたいところ)

  2. このあたりはPyCon TWのチュートリアルで整理されました(PyCon TW 2019 共同筆記 - HackMD

US PyConのトークプロポーザルガイドラインに目を通したところ、プロポーザルを早めに出せばチャンスと気づきました

はじめに

頑張れば、何かがあるって、信じてる。nikkieです。
先日のPyCon JP コンテンツチーム作業日でUS PyConのプロポーザルガイドラインの存在を知りました。
こちらに目を通したところ、US PyConで採択されやすいプロポーザルがおぼろげながら見えてきました。
読みながらとったメモの共有という形でブログ記事にします。

:英語の読み間違いがあるかもしれないので、利用は自己責任でお願いします。
「本当に?」と思うところがあったら、ぜひ原文を確認してみてください
(私が間違えていたら指摘していただけると助かります)

前提

US PyConとは

アメリカで開催されるPythonのカンファレンスです。
詳しくはgihyoのレポートをご確認ください1
第1回 US PyConへの道,1日目キーノート「Pythonこの10年」,注目セッション~日本からのLT参戦:世界最大のPythonカンファレンス「US PyCon 2019」レポート|gihyo.jp … 技術評論社

2020年はカンファレンスを4/17〜19で開催予定です。
2019/12/20 (AoE)までトークプロポーザルを受け付けています2

トークプロポーザルガイドライン

従うとより採択されやすくなるという案内と理解しています。

ガイドラインを読んでのメモ

全般的なこと

  • トピックについて
    • 最近ワクワクしたこと
    • 始めた時に教えてほしかったこと
    • 遅かったりイライラさせられたりしたことで同じ問題に取り組む後続のPython使いへ伝えたいこと
    • 開発者としての経験だけでなく、 記事やブログやツイートもプロポーザルの源となる
  • 誰でも話せる。スピーカー補助の有無はレビューでは無視される
  • メンタリングを新規導入

Good Idea

よい(採択されやすい)プロポーザルにするためのTIPSと受け取りました。

  • プロポーザルを早く出す。レビューチームはプロポーザルをよくしたい
  • 具体的に誰向けか(「Python使い」よりも詳しく)、参加者がトークを聞いて得られるものは何か(トークで何を知ることになる?)
  • 話すことの一覧、時間の見積もり(ざっくりどこに何分か。45分のトークを30分にする場合はどこをどう変えるか)
  • 対象は広く。広い(多くのPython使いに関係する)ほど採択されやすい。自作したパッケージについて話してもいいが、十分に周知されているか確認して
  • 関係するソースコードやブログ記事、ビデオなどリンク添付
  • 過去のPyConの登壇のスライドやビデオのリンク添付

Bad Idea

こういったプロポーザルは採択されないというメッセージと受け取りました。

  • インフォマーシャル(=商品について詳細な情報提供)は避けてください
    • 課題を解決したという共有で聴衆に得るところがあるのは望ましい
    • プロダクトの使い方はNG
  • 不完全なコードでのプロポーザルは避けてください
    • カンファレンス駆動開発には懐疑的
  • 私たちのプロジェクトの状況のトークは避けてください(よく準備されており、聴衆にあるものがあればOK)
  • 詳細なプロポーザルを書いてください(プログラムチーム全員が知っていると思わないで)

感想

「PyCon JPとはたいぶ違うな」という印象です。
「カンファレンス駆動開発には懐疑的」というのは耳が痛いです😣

多くのPython使いに関連するトピックほど採択されやすいというのは、個別具体的な事例より抽象化を好むということだと思います。
PyCon JPは個別具体的な事例が多いと思うので、US PyConの持ち味なのかもしれません。

狭き門だと思うのですが、早めに出すと"巨人の肩に乗れ"そうなので、11月は(他にも手を出してはいるのですが)US PyConの優先度を上げていきます。

  • 早い提出へのフィードバックやメンタリングと、揉んでもらういい機会3
  • 台湾、シンガポールと海外に出て、「今のPythonを取り巻く状況でここが問題じゃない?」という課題意識がある
  • US PyConに向けて登壇先回り開発を進めていけば、US PyConでは採択されなかったとしても他で使えるアウトプットの準備ができそう

終わりに

発表したいと思っている人に対して、「こういうふうに考えてみてよ」という、まさしくガイドラインだと思います。
今後は登壇先回り開発&アウトプットを進めつつ、行き詰まったら、案内されたリンクの中から以下の2つを読んでみます。

それでは!


  1. 更に詳しく知りたい方は、US PyCon 2019 Debrief Session - 資料一覧 - connpass もどうぞ

  2. ref: PyCon US

  3. フリーライドするんじゃなくて、今回メンタリングに申し込む以上は、長期的にはメンタリングする側に行こうと思います