これはデータサイエンティストの卵がわけもわからないまま100本ノックを行っていく奮闘録である。
完走できるか謎。途中で消えてもQiitaにあげてないだけと思ってください。
ネタバレも含みますのでやろうとされている方は注意
今回は10~18まで
目次付き初回
今回から、自分で書いたモノが成功してるとは限らず、答えを見ながら書いていたり、失敗例も書いてあります。
#10本目
df=df_store
df[df['store_cd'].str.contains('S14')].head()
'''模範解答'''
df_store.query("store_cd.str.startswith('S14')", engine='python').head(10)
'''失敗例'''
import re
df=df_store
df[None != re.match(r'S14.*',str(df['store_cd']))]
#>(中略)KeyError: False
一目見て「SQLでLIKE使えば一発じゃねぇか!?」と思いました。
とりあえず、心の友reマッチングに突っ込んで解決しようとする。が、文字列型じゃないことに気づいたり、この書き方だと頭1文字マッチングしてもNoneで帰らなかったりそもそもKeyErrorを起こし続けたので別の手段を模索。
すると、df.str.contains
というものを見つけて感動。
内部も正規表現で書けるので無敵感を覚えながら使用したが、模範解答は更にワケノワカラナイメソッドを使用。
engine='python'
はおまじないのようなものらしい[参考]
#11本目
df=df_customer
df[df['customer_id'].str.contains('1$')].head()
'''模範解答'''
df_customer.query("customer_id.str.endswith('1')", engine='python').head(10)
引き続きSQLのありがたさを教えてくれる問題。
記事をある程度書いて復習が終わったらリファレンスを読み直してdf.str
以下のメソッドも調べてみます。
#12~15本目
df= df_store
df=df[df['address'].str.contains('横浜市')]
df
'''模範解答'''
df_store.query("address.str.contains('横浜市')", engine='python')
df=df_customer
df=df[df['status_cd'].str.contains('^[A-F]')]
df.head(10)
'''模範解答'''
df_customer.query("status_cd.str.contains('^[A-F]', regex=True)", engine='python').head(10)
df=df_customer
df=df[df['status_cd'].str.contains('[0-9]$')]
df.head(10)
'''模範解答'''
df_customer.query("status_cd.str.contains('[1-9]$', regex=True)", engine='python').head(10)
df=df_customer
df=df[df['status_cd'].str.contains('^[A-F].*[0-9]$')]
df.head(10)
'''模範解答'''
df_customer.query("status_cd.str.contains('^[A-F].*[1-9]$', regex=True)", engine='python').head(10)
df=df_store
df=df[df['tel_no'].str.contains('[0-9]{3}-[0-9]{3}-[0-9]{4}')]
df.head(10)
'''模範解答'''
df_store.query("tel_no.str.contains('[0-9]{3}-[0-9]{3}-[0-9]{4}', regex=True)", engine='python')
感想が無くてすいません。query使わなくてすいません。お前書きながらエラー吐かないから怖いんだよ
尚、regex=True
は「正規表現を利用する」ということらいしい[参考]
#17本目
df_customer.sort_values('birth_day', ascending=True).head(10)
唐突に来る別パターン
これに関しては忘れていたので調べながら記述しました。
ascending
はSQLのORDER BY ASC
と同じ意味かな?
#18本目
df_customer.sort_values('birth_day', ascending=False).head(10)
SQLと違うのはDESC
を使うのではなくascending=False
とする部分。
#今回はここまで
ここまではよかったんだ。ここまでは。
1,2は消化試合感もある復習でしたが、ここからは知識を組み合わせられるかが試される問題が増えてきます。
知識が足りてない自分には難しい問題が多かったので、少しゆっくりとしたペースで進みたいです。飛ばす部分もありますが(21,22とか)。