LoginSignup
1
4

More than 3 years have passed since last update.

データサイエンス100本ノック~初心者未満の戦いpart2

Last updated at Posted at 2020-06-23

これはデータサイエンティストの卵がわけもわからないまま100本ノックを行っていく奮闘録である。
完走できるか謎。途中で消えてもQiitaにあげてないだけと思ってください。

100本ノックの記事
100本ノックのガイド

ネタバレも含みますのでやろうとされている方は注意

今回は10~18まで
目次付き初回

今回から、自分で書いたモノが成功してるとは限らず、答えを見ながら書いていたり、失敗例も書いてあります。

10本目

mine10.py
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本目

mine11.py
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本目

mine12.py
df= df_store
df=df[df['address'].str.contains('横浜市')]
df

'''模範解答'''
df_store.query("address.str.contains('横浜市')", engine='python')
mine13.py
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)
mine14.py
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)
mine15.py
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)
mine16.py
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本目

mine17.py
df_customer.sort_values('birth_day', ascending=True).head(10)

唐突に来る別パターン
これに関しては忘れていたので調べながら記述しました。
ascendingはSQLのORDER BY ASCと同じ意味かな?

18本目

mine17.py
df_customer.sort_values('birth_day', ascending=False).head(10)

SQLと違うのはDESCを使うのではなくascending=Falseとする部分。

今回はここまで

ここまではよかったんだ。ここまでは。

1,2は消化試合感もある復習でしたが、ここからは知識を組み合わせられるかが試される問題が増えてきます。
知識が足りてない自分には難しい問題が多かったので、少しゆっくりとしたペースで進みたいです。飛ばす部分もありますが(21,22とか)。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4