飽きるまでやります。

私の私による私のためのメモ。内容に一切の責任を負えません。

Rails Tutorial #3

概要

Rails Tutorial 第3章の日記です。

3.1 セットアップ

rails newしてbundle installしてgit initとかしてheroku createとかしてgit pushする。完全に理解した。

3.2 コントローラのgenerateの話

generategはいいとして

  • console : c
  • server : s
  • test : t
  • bundle install : bundle

はえー。

3.3 テストの話

テストってなんぞや
テストの知識がないので難しかったです。他にどんなことができるのかは分かりませんが現状では勝手に接続テストをやってくれる便利なやつという感じです。

テストは通るんですがdb:migrateがどうとかライブラリがどうとかのエラーメッセージが出てきて邪魔でしたが見なかったことにしました。後になってもmodelの段階になって消えないようなら考えます。

コードの読みにくい箇所はGと同じで1匹見つけたら30匹いると思えらしい、ためになるなあRails Tutorial。

3.4 動的ページの話

静的ページを作る章でしたがテストついでに動的?っぽいやつも作るらしいです。動的というかerbにコードを埋め込みますよみたいな感じでした。時々出てくるRubyだかRailsのメソッドを雰囲気で感じてねみたいな感じだったのがモヤりましたが雰囲気で感じられたのでそんなもんなんでしょう。

コードの変更がrails t一発でわかる。しゅごい。
この節をやってテストの偉大さが分かりました。きっとDjangoにもあったんでしょう…無知は罪。

Progateでは新しいページを作る時

  • ルーティングの設定
  • コントローラでアクションの用意
  • ビューの用意
  • 完成したらブラウザでチェック

という一連の流れを叩き込まれましたが正しくは

  • testを書く
  • route
  • controller
  • view
  • testを回す

って感じなんですかね。なんにせよテストは強い…。

3.5 おわりに

3.6 おまけ

testがGREENだとかREDとか何言ってんのかよくわかんなかったけどminitest-reportersというのを使えばコンソールに色がつくらしいです。

Guardを使えば更新するたびにテストとかできるみたいです。すごい!

おわりに

テストを知らなかった人生を悔い改めます。

Rails Tutorial #2

概要

Rails Tutorial 2章の日記です。

第2章

2.1 model設計の話

WebアプリケーションではまずDBの設計をするらしいです。

2.2 scaffoldで自動生成

これProgateで見たやつだ!!!!
Progateで頑張って作ったTweetApp的なやつはscaffoldという魔法のコマンドで基礎が自動で作れるらしいですすごい。

理解が困難。 scaffoldのコードを理解できるぐらいなら、そもそも本書を読む必要はないでしょう。

scaffoldの自動生成コードが理解できるのでRails Tutorial完全に理解した。

2.3 validateやらなんやら

ProgateではPostモデルにuser_idカラムを持たせて関連付けを行なっていたけど、has_manyだとかbelong_toだとかでモデル間の関連付けができるらしいですッョィ

2.4 最後に

おわりに

Rails Tutorialの前にProgateやっといても損はなさそう。
次回から本番ですかね?

Rails Tutorial #1

概要

ProgateRuby on Railsコースを全クリしてRuby on Rails完全に理解した状態になったので、Rails Tutorial始めました。日記帳なので進捗を載せて行きます。
どうでもいいけどMacはprogateをprobateに勝手に修正しようとして困ります。

動機

お前Pythonはどうしたという感じですが、やっぱRailsは一般教養みたいなものかなという気がしたので始めました。大体夏前くらいから基本だけやっとくかなみたいなことは思っていました。
以前Djangoでなんとも言えないWebアプリケーションを作ったのでWebアプリケーションの仕組みは大体わかる(気になっている)もののRailsは初めてという感じです。

第1章

1.1 はじめに

ググりましょう、という文言にリンクが貼られていてそれを押すとググり方が動画付きで解説されていました。やるなレイルズチュートリアル

1.2 マシンの話

Macの容量少ないしWindowsマシンでやりたくないなーと思っていたらAWSをおすすめしていました。助かる。
SafariじゃCloud9に繋がらなくてChromeなら繋がりました。でもググるChromeはだめだったがSafariなら行けたという記事もあり謎です。

1.3 環境設定とはろーわーるどの話

progateでは"URL" => "controller#action"のルーティングしかしてなかったのでroot"/"の代用ができるのかーという感じでした。単純な割り当てだけでなく記法が色々あって大変そうな雰囲気がありました。頭痛がしてきたのでとりあえず閉じました。

1.4 Gitの話

GitHubが使いたい新しくアカウント作るのは嫌だでもGitに明るくないという5秒の葛藤の末にチュートリアルに従ってBitbucketを使うことにしました。バイト先はGitLabなので3つもGitのサービスを使ってしまった(使えていない)。

ProGitというのが無料公開されていてすごいらしい。そのうち読みたい…。

Gitがわからなくて30分くらいハマってしまいました。リモートリポジトリ作るときについREADMEを一緒に作ってしまったのでリモート側と既にhello_appを作っていたローカル側の整合性が取れなくてエラーが出ていたみたいな話らしい。とてもつらい。でもたくさんググったのでちょっとGitに詳しくなりました。

1.5 herokuの話

ただで使えるってすごい!

1.6 おわりに

感想

量が多いので長い戦いになりそうです。Gitも完全に理解できそうなのでありがたいと思いました。

PyConJP2018に参加した話

概要

PyConJP2018に参加しました。Python界で一番大きいカンファレンスだそうです。
100%感想です。

感想

聞いたセッションの要約をつらつらと書くのもいいんですが、Twitterで発表資料探した方が早そうなのでやめておいてただの感想です。

私のPython歴は4ヶ月くらいで、初心者なのにいきなりこんな大規模なカンファレンスに参加して得るものあるのかという感じでしたが結果として参加して良かったと思います。
Pythonに限らず特定の言語に強い思い入れはないですが(などというほど他言語にも詳しいわけではないですが)、しばらく使っていくし、使っていくなら勉強していきたい、ということで参加した感じです。

とりあえずの感想としてはすごい人の数でした。980人くらいいたみたいです。多すぎて見れないセッションにも何度か遭遇しました。一応大スクリーンで中継してくれていた+YouTubeライブ配信をしていたのでなんとか、という感じでしたが、1つ聞きたいと思ったのが配信もされていなくて残念でした。

聞いたセッションは機械学習(というか深層学習)の利用系のものとDjango関連のものが主でした。この2つは経験があるので聞きたいと思った次第でした。Jupyter Notebook関連のセッションがかなり好評だったようで聞けば良かったなという感じでした。
深層学習系のセッションは特にわからないところもなく聞けたと思います。
Django関連は少し難しい部分がありました。APIの自作とかそういったとこまではやったことがなく、俺はさわりしか知らないんだなーという気持ちでした。

よくわかる話もちょっと難しかった話もありましたが、知らない言葉(技術)はたくさん出てきました。
これはちゃんとメモしておいたので、後日ぐぐって自分のものにするまでが勉強会かなと思います。ので頑張りたいと思います。

企業ブースもたくさんあり、同じ大学から参加した同級生は就活に燃えていました。名刺を持ってきていなくてつらみだったようですが。
ただ就活の場ではあったと思うんですが、中途採用が主だったかなという感じでした。将来ブラック企業に勤めてしまったらここで転職わんちゃんあると思いました。
なんにせよ来年参加の折は話せる武器を用意して名刺を持って参加したいなという感じでした。

僕は技術の理論よりは技術の応用が好きなので、深層学習で競馬(競馬AIの方)だとかアニメ(シンガポールの方)だとかおすすめ機能(ニコニコの方)だとか類似検索(メルカリの方)だとか麻雀(LTの方)だとか、そういった話は特に楽しく聞けました。僕も何かに応用したいという気持ちは高まりました。

Djangoに関しても何かサービスを作りたいと思う気持ちはある反面、全く知らないのもなんか恥ずかしいのでレイルズやろうと思っているということもありどうしようといった感じです。

最後に、Pythonを愛していても愛していなくてもPythonがわかるなら学生は参加しといた方がいいと思いました。社会人枠が全埋まりの中、学生枠は空いていたので行かない手はないかと思います。何聞いても全くわからないというのはさすがにしんどいと思いますが、初級〜上級+ALLの4カテゴリで分かれていて初心者にも優しいと思いました。弁当も美味しいしTシャツもらえるし(?)。

お疲れ様でした。

インターンに参加しました(後半)

概要

インターン後半戦です。

やったこと

Day6

後半インターン課題が発表されました。内容としてはアマz…インターン用に作られた仮装通販ページに対してのWebスクレイピング+分析といったものでした。

まず作戦会議ということで、3人のインターン生で方針決めを行いました。続いてとりあえずデータを使える道具にしなければならなかったので、Webクローリング+スクレイピング班に2人、構文解析班に1人で分かれて作業に取りかかりました。僕は構文解析班ということで、文章を渡したらいろんな形態でデータを返すクラスを書きました。

初心者なので地味にPythonのクラスを書いたことがなかったのでself…thisかな??みたいな感じで書いていました。
これは初日に完成しました。

1つだけやりきれなかった点として、継承クラスで書いたんですが、親クラスの関数への引数の渡し方がわからなくて諦めました。これは後日pandasのplotの公式ドキュメントを読んでいたらわかった気がするので早めに試してみて解決したいです。

Day7-9

ここからはひたすら分析と結果を眺めて憂鬱になる繰り返しでした。色々新しい知見は得られたと思いますがあとでまとめます。

Day10

最終日です。僕はそもそも最終日に分析はしたくないから1日前に終わらそう!!!と言っていたのですが残念ながら成果が得られなかったので最終日も分析をしていました。初期段階の方針の結果は芳しくなく、ただし使えないデータというわけでもなかったため得られたデータを人力で眺めて分析していました。連日の寝不足も相まってなかなかな感じでした。

紆余曲折を経て締め切りの1分前に発表スライドが完成し、なんとか発表と相成りました。

データ分析と課題の特性上、明確な答えが存在しない課題であり結局我々のインターンは成功だったのか失敗だったのかだいぶ謎を残した発表を終えインターンは終了しました。

得られた知見

  • まずデータを眺める
    • 分析の道具となるデータ自体をまず眺めると必ずクライアントが求めている解への仮説が立つ…はず
    • いろんな形にして眺める、これは簡単にできる、そうPandasデータフレームならね
  • 使うデータを絞る
    • 明らかに使えないデータをそぎ落とすのは当然として、そこからさらに仮説を立てて絞る、もしくは絞って仮説を立てる
  • そんな絞ったデータで全体像を語れるの?
    • 全体像を語る必要はなく、こういった条件においてこういった結果になります、というのも一つの分析結果
    • クライアントを納得させることができる材料を揃える
  • データ分析で求められた結果にプラスアルファをおまけするとクライアントがいい印象持つかも

感想

社長さんはとても忙しそうであまり多くの話を聞けなかったのが残念ですがそれでもたくさんの知見を得ることができました。
今後おいおい吸収していきたいと思います。

これは実験や卒研でもそうですが、思った通りの結果にならないのが科学の世界なのかなーと思いました。〆切を過ぎない程度に試行錯誤を重ねていきたいですね。

これは僕個人の勝手な感想なので間違っていたらごめんなさいという感じなのですが、結果の正確性も大事ですが何よりクライアントを納得させることが大事そうな印象を受けました。これはビジネスという感じがしました。

グループワークにおいて、特に締め切りが近い段階では定期的な進度の共有が必須だと感じました。個人間のスキル差も考えないとだし。一応気をつけていたんですが不十分でちょっと大変でした。いろいろ。

今後の課題

とりあえず継承クラスとPandasをやっていきます。特にPandasはPythonを使うようになって初めて思った通りに使えなかったのでここはちょっと克服したいと思います。なんかすごくいい感じのPandasチートシート(?)もらったことだし。データベースの経験があればなーと思いました。継承クラスは多分**kwargsあたりで解決できるはず…。

あと自然言語処理で作りたいものがなんとなく浮かんできたので趣味としてWebスクレイピング自然言語処理はやりたいと思います。画像処理に興味あったはずなんですが画像はどこ行ったんですかね。画像も趣味でやりたいんですけどね。研究もしないとすね。院も決めないと。つら

インターンに参加しました(前半)

概要

沖縄の某社インターンに参加してやったこととかです。
完全に日記です。

いきさつ

インターンというかアルバイトに応募したら、研修で同時期に開催される短期サマーインターンにも参加してねという感じでした。
場所はPythonマスターに誘ってもらった真Pythonマスターがいらっしゃるとこですね。

もっと早くに声はかけてもらってましたが能力が足りず面接で喋る材料がなかったので深層学習の基礎をフルスクラッチで書いたりなどしていました。それも結局CNNまで辿り着く前に学会発表などが入り忙しくしているうちにサマーインターンの時期になってしまい、自信は相変わらずなかったですが時期的にこのタイミングで応募するしかないということになってしまい、応募した次第です。

やったこと

Day1

学会発表でいきなりお休みをいただきました。すみませんでした
夜中にSlackで資料がもらえたので頑張って読みましたが環境構築とPython基礎、Pandas基礎、Webクローリングとスクレイピング基礎といった内容でした。クローリングとスクレイピングが新鮮で面白かったので眠かったが結構頑張ってしまいました。結果追いついたっぽかったので良かったです。
BeautifulSoup4というパッケージを使いました。美味しいスープが作れるように頑張ります。

Day2

午前はスクレイピングの演習問題を解いてました。
午後から新しい資料をもらい、データ分析手法の概要と、scikit-learnを使って例題及び演習を解き始めました。
すなわち相関、回帰、決定木・ランダムフォレスト、k-means法、SVMなどといった内容でした。

SVM以外は一通り知識があったのであまり詰まることなくやれました。scikit-learnが統一したインターフェースを持ってて便利ですごいと思いました(粉ミカン)

ランダムフォレストは5月くらいに読んだ論文に出てきたもので、軽く調べたら決定木がたくさん生えてるからフォレストみたいな感じで面白すぎたのでいつかやりたいと思っていて結局触っていなかったので、今回使えたのは良かったです。

SVMも論文で出てきましたがあんまよく分かっていなかったので分かりやすく知ることができて幸いでした。カーネル法の考えがチートみたいだと思いました。

Day3

前日やり残した問題と、kaggleチュートリアルでもあるタイタニック問題について解いていました。 ここでPandasを完全に理解したと思っていたら結構ガバガバだったことに気がついたので(今まで使った経験はありませんでした)ちょっとちゃんとやらないといけないと思いましたが未だにやっていません。

規定時間終了後、論文輪読会があるらしく拝聴しました。メタラーニングの話でした。ニューラルネットワークを使うにあたって現状の自身のハイパーパラメータ決定の行き当たりばったり感が気持ち悪かったので、この分野はいずれ調べてみたいと思いました。

Day4

タイタニック問題の解法をインターン生がそれぞれ発表して総括といった感じでした。やはり自身のPandasの使えなさが目立つ発表となりました。
決定木の深さの話、葉の話などハイパーパラメータに関する部分の話、扱うデータの話(連続値はクラス分類の際扱いが難しい)、相関関係の話(pd.corr()で出した相関関係が低い≠関係ない、ではない)など、とてもためになる話を聞けたと思います。

Day5

前半最終日は自然言語処理入門でした。
我々の記憶に新しいMeCabを使いました。驚いたのはmecab-python3という形でPythonMeCabパッケージがあるという点でした。なんでもあるわねPython
別に特定の言語の信者ではない(信者になれるほど語れない)ですが文字列の扱いはPythonはだいぶ楽だなという感想でした。
Bag-of-Words、TF-IDFというベクトルの指標などの概念をやったのち演習という形になりました。

画像処理はともかくとして言語処理は本当にやったことがないので新鮮でとても面白いものでした。

終わりに

Pandas頑張ります
f:id:sdr816:20180909220911j:plain

ソートを書いた話

概要

アルゴリズムとデータ構造の試験を完全に理解するために選択ソート、バブルソート、挿入ソート、クイックソートマージソートヒープソートC言語で書きました。

いきさつ

アルゴリズムの講義の最終課題はC言語でソートを実装だって聞いたので、勉強ついでにやってみました。

書いたもの

github.com

主観的実装難易度

選択 = バブル = 挿入 < クイック < ヒープ< マージ
ただ再帰関数が苦手なだけとも。

感想

Pythonと比較してもって感じですがPythonの手軽さに慣れていて久しぶりにCを書くと大変でした。ソート完全に理解した(理解したとは言ってない)