きょうも亀だけど

機械学習やデータサイエンスの勉強記録など

AtCoder M-SOLUTIONS プロコンオープン 2020参戦

A, B, C, Dの4完で終了。PCが起動しなくて初動10分遅れで焦った。Dまでは簡単だったけど少し時間がかかりすぎた。C以上をいかに速く解けるようになるかが次の課題。 また、リストへのアクセスが多いと計算量的にイケると思ってもTLEになってしまう。ループ内でappendする処理になったら少し考えた方がいいかもしれない。

github.com

AtCoder Beginner Contest 171, 172, 173参戦

ABC3つに参加した。

AtCoder Beginner Contest 171

A, B, C, Dの初の4完で終了。Cはアルゴリズムをググって見つけてしまった。DはTLEで苦しんだけど、怪しいところ見つけてギリギリでAC。

TLEからACに到達する際に以下の気付きがあった。 numbersという名前のリストに含まれる各数字の出現回数を算出する処理で、countを使うよりもループで1つずつ見ていく方が早かった。

# intで初期化するため0が返る
cnt = collections.defaultdict(int)
# numbersに含まれる各数字の出現回数を保持
# for i in set(numbers):
#     cnt[i] = numbers.count(i)

# numbers.count(i)だとTLE,以下のループだと時間内に収まる
for i in numbers:
    cnt[i] += 1

できるだけ関数で処理しようとしていたけど、状況によっては愚直に見ていった方がよいことが分かった。

github.com

AtCoder Beginner Contest 172

A, B,の2完で終了。C, DがTLE。Cはやりたいことがわかったけど実装できなかった。Dは確実にTLEだろうなあと思ったらやっぱりTLE。難易度的には緑レベルらしいけど、Cはいけたなあ。

github.com

AtCoder Beginner Contest 173

A, Bの2完で終了。bit全探索なのは分かったけど実装できなかった。難易度的には茶レベルらしい。実装力と実装速度の課題が見えてきた。そしてAでケアレスミスによる1ペナ食らってしまったのがかなりもったいなかった。

github.com

次のコンテストで9回目になり、レート補正がなくなる模様。ちょっと茶色も危ない感じになってきたから、A,Bは丁寧に解く。C以降は過去問で引き出しを増やす。

AtCoder Beginner Contest 169, 170, NOMURA, 東京海上日動 プログラミングコンテスト2020参戦

4つのコンテストに参加した。

NOMURA プログラミングコンテスト2020

A, Bの2完で終了。得点配分を見た上での作戦として、「Bまでを早解きし、Cに手を出せればラッキー」で挑んだ。
前回の反省を踏まえ、コメントや命名よりも早さを意識できたのがよかった。

github.com

AtCoder Beginner Contest 169

A, B, Cの3完で終了。B, CがTLEとWA祭りでテンパる。ギリギリで計算中断と精度誤差に気付きなんとかクリア。いい経験になった。

github.com

東京海上日動 プログラミングコンテスト2020

A, Bの2完で終了。NOMURAと同じ作戦で挑んだ。
Cが意外といけそうだったけどTLEで終了。このあたりの問題は計算量とそれに伴う実装を考えないとダメだ。

github.com

AtCoder Beginner Contest 170

A, B, Cの3完で終了。Dのやりたいことは分かったけど、単純なやり方だと計算量が多すぎることはすぐわかったので、いかにシンプルに進めるかを考えた。結果的にWAでうまくいかず。
コンテスト終了後にACできている人の提出を見て、後追いでACにできた。indexを数列の値とし、値に出現回数を入れるやり方は頻繁に出てきそうなので覚える。

github.com

今回のコンテストで茶色に昇格した。あと4回出ればレート補正がなくなるようなので、7月中にはレートを確定できるといいな。

AtCoderに挑戦開始&AtCoder Beginner Contest 168参戦

AtCoderに挑戦開始した。言語はPythonでやっていく。

先日、最初のコンテストとして「AtCoder Beginner Contest 168」に参戦し、A、B、Cの3完で終了。 過去問を含めた体感としては、「A~Cまでは何とかなる、D以降はアルゴリズムを学ばないと無理」といったところ。

コメントや可読性を重視してしまう傾向にあるので、競プロは割り切ってスピードに特化した方がいいかもしれない。その過程でスピードと可読性を両立できるようになればいいと思う。

まずは茶色を目指そう。

github.com

Jupyter Notebookの起動ドライブを切り替える

Jupyter Notebookを初期ディレクトリ以外のドライブで起動したいことがある。
その場合は、コマンドプロンプトで起動したいドライブに移動してからJupyter Notebookを起動すればいい。

C:\> cd E:\hoge
E:\hoge> jupyter notebook

【参考】
github.com

Python 3 エンジニア認定データ分析試験に合格しました

先日、 Pythonエンジニア育成推進協会の「Python 3 エンジニア認定データ分析試験」のベータ試験を受験し、無事合格しました。
次回受ける方の参考に、そして己の振り返りとして書きます。

受験時のスペック

  • データサイエンスや機械学習セミナーには数回参加
  • 業務でPythonを使った分析はしたことがない

G検定に合格してからしばらく経ちますが、相変わらず業務で分析はしていません。 その間にE資格に合格しています(後で記事にしたい)。

受験理由

1. 分析と名のつく試験を受けたかった
分析に特化した資格はまだ少ないため、簡単に他者に分析力をアピールできるこの資格は貴重だと思います。資格を取れば一定のスキルの証明になると考えました。

2. 他者へのアピール
1.と関連しますが、スキルを証明することで他者へアピールできると考えました。G検定を取得してから徐々にですが、先輩や上司、他部署のメンバーから「こいつは分析や機械学習のスキルを持ってるんだな」と認知されるようになりました。さらにアピールをするいい手段だと考えました。

3. スキルアップが面白い
いつもの動機です。徐々に取得資格が増えてきたので、どれをアピールするか悩むようになってきました。順調に使える呪文が増えているので楽しいです。

4. ライブラリの機能を広く知りたかった
Numpyやpandas、Matplotlibの機能は必要に応じて調べることで徐々に習得してきました。ただ、一般的には基本とされる機能も自分が使う機会がないとそもそも調べないので、抜け落ちている部分も多いんだろうと感じていました。どこまでをまずは把握しておくとよいかの指針を知りたいと思いました。

勉強方法

主教材である以下の書籍を購入しました。
https://www.shoeisha.co.jp/book/detail/9784798158341

試験チケットとセットで売っていたものを買いました。データエンジニアの役割や数学の章は知識として固まっていると感じたので流し読みしました。Numpy、pandas、Matplotlib、scikit-learnの章はざっくりと全体を把握し、自分が知らなかった機能を中心に読み込みました。できればJupyter Notebookですべて写経したかったのですが、サボってしまいほとんどできませんでした。試験当日早朝に慌てて叩き込みました。

試験について

思ったよりも簡単で、時間が余りました。満点も十分狙えたと思います。Twitterで受験報告している方も大体8割以上は取っていたようです。
正直、「これに受かったからバリバリ分析できるぜ!」とはならないと思いました。どちらかというと、「分析を行うにあたってこういう基本的なことを知っておいてね」というレベルだと感じました。今後、上位資格が出てくることを期待したいなと思います。

今回はベータ試験ということもあり、試験後にアンケートがありました。問題の誤記や違和感があるところを試験中にメモし、アンケートに回答する形でした。入力文字数が制限されていたので、メモした内容すべてを記入できなかったのが残念でした。今回のアンケートをもとに試験の精度が上がっていくのだと思います。

合格後の効果

知識の幅が広がった
勉強の過程で初めて知った機能がいくつかありました。こういう機能があるというインデックスを貼れたのは良かったと思います。

これから

次は専門統計調査士を受けるつもりです。今年こそリベンジし、専門統計調査士の認定証をゲットします。

LightGBMではOne-hot encodingは不要

blog.amedama.jp

orizuru.io

LightGBMではpandasのカテゴリ列の型をcategoryにしてあげれば、数値変換するだけでカテゴリとしての分岐をしてくれるとのこと。

One-hot encodingだるいと思ってたけど、とても便利。
is or is notで分岐するという仕組みも分かったので良かった。