今月入社した会社さんは、いわいるデータサイエンティストを職とした感じで、Python、R、SQLを主に使うとのこと。
その中で「ほほー」と思ったこと(だけ)を書く。
ちなみに、大した内容ではなく自分だけのメモでおいておく。
任意の数値区切り別にグルーピングするSQL
例えば年齢のカラムがあるとして、10, 20, 30と10区切りでグルーピングしてそれぞれ合計を出してしてください。つー課題がありました。
まず、10で区切るということは、どこからどこまでが10で、どこからどこまでが20と数字の用意と分岐を用意しなければいけないと思いました。
最初Case文を書こうとしましたが、それは無理とすぐに気づく。なぜならCaseは記述しないといけないので、例えば、70歳まであるとしたら7つ分岐をかかないといけない。これはスマートじゃない。
「うーん」と悩んでいる内に回答がきたので残念でした。
で、やり方としては「整数除算」というプログラミング言語同じみの機能を使えばできることがわかりました。
Pythonで試してみると15という数字は10区切りだと、「10(代)」に当てはまります。それを求めるには
>>> 15 // 10 * 10
何故かこれで求まります。詳細を説明すると、15 // 10
を計算すると1.5
になるのかなと思いますが、プログラムの場合は型で判断されるので、除算されます。なので、1
となります。それに1 * 10
となり、15の区切りの開始数値は10
となります。
当時色々勘違いしてしまい、「15を10で割ったら1.5で掛けたら15に戻るじゃん!!?」ってずっと意味不明にタイプしていましたorz プログラマぁ
ちなみに、Pythonの場合だと15 / 10
は1.5
となりますので、//
を使っています。
また、「どこから」の数字がわかったので、今度は「どこまで」の数字を求めます。
>>> (15 // 10 + 1) * 10 -1
()
の中は、「どこから」の求める式の15 // 10
は一緒ですが、そこに+ 1
が入っています。15 // 10
だと、値は1
となりますが、これに+ 1
することで10区切り値が繰り上がります。今回は2
となり「20(代)」に入る準備ができました。
しかし求めたい値は「どこまで」なので、今回は19
です。なので、その2
を区切り値で掛けて20
とします。そこから1
引けば19
となるため、求めたい値を取得することができる式ができました。
SQLで書くとこんな感じ。
select age / 10 * 10 as from, (age / 10 + 1) * 10 - 1 as to, count(*) as count from age_tables group by from, to
結果は、、、と思ったけど、データ用意するのが面倒なので、PythonのPandasでやります。
>>> import numpy as np >>> import pandas as pd # 30個ぐらいnumpyで適当にデータを用意する # 0 ~ 100のint数値を30個ランダムで作ってくれます >>> a = np.random.randint(0, 100, 30) # それをDataFrameにする >>> _data = pd.DataFrame({'age': a}) >>> _data.head() age 0 67 1 31 2 23 3 84 4 40 # 「どこから」の値を作成する >>> _data['from'] = _data['age'] // 10 * 10 # 「どこまで」の値を作成する >>> _data['to'] = (_data['age'] // 10 + 1) * 10 - 1 >>> _data.head() age from to 0 67 60 69 1 31 30 39 2 23 20 29 3 84 80 89 4 40 40 49 # グルーピングする。pandasってほとんどsqlと同じことできるよね。すごい >>> _group = _data.groupby(['from', 'to']) # countする >>> _group.count() age from to 0 9 2 10 19 6 20 29 2 30 39 3 40 49 2 50 59 1 60 69 6 70 79 4 80 89 2 90 99 2
ほえー。すごい。
素数を求める
エラトステネスの篩(ふるい)というのがあるとのことでした。
これを使ったら素数を求められました! 以前、同じことをやろうとして自分で実装しようとしたけど、こんなのあったのね(°ω°
まぁこれは仕事関係なさそうだけど
雑感想
最初の研修は知っていることが多く、1時間もするとすぐだれて、「早く仕事したい」なんて思っていたけど、SQLで死んだ。
SQLの達人の本は持っているが、実家においたままで、今日本屋へいって立ち読みしてみたが、すごく知りたい情報が詰まっている感じだった。サボらなかればよかったとちょっとだけ後悔(´・ω・`)
またオススメされた本を購入してきたので、今日から勉強します。あと統計も。。。これが一番の難題やorz
- 作者: 加嵜長門,田宮直人,丸山弘詩
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/03/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る