【解説】手を動かしながら後方一致と部分一致を学ぶ | データサイエンス100本ノック【問11〜問12 回答】

【解説】手を動かしながら後方一致と部分一致を学ぶ | データサイエンス100本ノック【問11〜問12 回答】




当ページのリンクには広告が含まれています。



目次

この記事の対象者


・ データから任意の文字列に一致するデータの抽出方法を学びたい人

・ データサイエンティストを目指している人



一般社団法人データサイエンティスト協会がGitHubに公開している「データサイエンス100本ノック」の第11問目と12問目を例に、後方一致と部分一致するデータの抽出方法をまとめます。

データサイエンス100本ノックは、自身のPCにDockerを用いて環境構築することが出来ます。

データサイエンス100本ノックの環境構築方法は以下の記事にまとめています。





なお、「前方一致」については、第10問で扱っていますので、興味のある方はそちらも参照ください。

>>前方一致のデータを抽出する方法を学ぶ

では実際に問題を解きながら後方一致と部分一致するデータの抽出方法を学んでいきましょう。

第11問目: 後方一致(str.endswith())

P-011: 顧客データフレーム(df_customer)から顧客ID(customer_id)の末尾が1のものだけ全項目抽出し、10件だけ表示せよ。


「末尾が1となっているcustomer_idのみを抽出」ということなので、特定の条件を満たした行の取り出しを行うquery()メソッドと後方一致を指定するstr.endswith()を使うことを想定しましょう。


queryメソッドについては以下の記事で学んでいますので、復習しましょう。


>>前方一致のデータを抽出する方法を学ぶ



早速、回答であるコードを書いていきます。



query()メソッドで文字列メソッドを使う場合、第2引数にengine='python'を指定しないといけない点に注意しましょう。


1
df_customer.query("customer_id.str.endswith('1')", engine='python').head(10)
1
2
3
4
5
6
7
8
9
10
11
	customer_id	customer_name	gender_cd	gender	birth_day	age	postal_cd	address	application_store_cd	application_date	status_cd
1 CS037613000071 六角 雅彦 9 不明 1952-04-01 66 136-0076 東京都江東区南砂********** S13037 20150414 0-00000000-0
3 CS028811000001 堀井 かおり 1 女性 1933-03-27 86 245-0016 神奈川県横浜市泉区和泉町********** S14028 20160115 0-00000000-0
14 CS040412000191 川井 郁恵 1 女性 1977-01-05 42 226-0021 神奈川県横浜市緑区北八朔町********** S14040 20151101 1-20091025-4
31 CS028314000011 小菅 あおい 1 女性 1983-11-26 35 246-0038 神奈川県横浜市瀬谷区宮沢********** S14028 20151123 1-20080426-5
56 CS039212000051 藤島 恵梨香 1 女性 1997-02-03 22 166-0001 東京都杉並区阿佐谷北********** S13039 20171121 1-20100215-4
59 CS015412000111 松居 奈月 1 女性 1972-10-04 46 136-0071 東京都江東区亀戸********** S13015 20150629 0-00000000-0
63 CS004702000041 野島 洋 0 男性 1943-08-24 75 176-0022 東京都練馬区向山********** S13004 20170218 0-00000000-0
74 CS041515000001 栗田 千夏 1 女性 1967-01-02 52 206-0001 東京都多摩市和田********** S13041 20160422 E-20100803-F
85 CS029313000221 北条 ひかり 1 女性 1987-06-19 31 279-0011 千葉県浦安市美浜********** S12029 20180810 0-00000000-0
102 CS034312000071 望月 奈央 1 女性 1980-09-20 38 213-0026 神奈川県川崎市高津区久末********** S14034 20160106 0-00000000-0

第12問目: 部分一致

P-012: 店舗データフレーム(df_store)から横浜市の店舗だけ全項目表示せよ。


特定の文字列を含んだ列を取り出すには、str.contains()を使用します。



今回は”横浜市”という文字列なので、str.contains("横浜市")とすることで、その条件を満たす行を抽出することが出来ます。



以下のコードで回答が出力できます。

1
df_store.query("address.str.contains('横浜市')", engine='python')


出力
1
2
3
4
5
6
7
8
9
10
11
12
	store_cd	store_name	prefecture_cd	prefecture	address	address_kana	tel_no	longitude	latitude	floor_area
2 S14010 菊名店 14 神奈川県 神奈川県横浜市港北区菊名一丁目 カナガワケンヨコハマシコウホククキクナイッチョウメ 045-123-4032 139.6326 35.50049 1732.0
3 S14033 阿久和店 14 神奈川県 神奈川県横浜市瀬谷区阿久和西一丁目 カナガワケンヨコハマシセヤクアクワニシイッチョウメ 045-123-4043 139.4961 35.45918 1495.0
7 S14040 長津田店 14 神奈川県 神奈川県横浜市緑区長津田みなみ台五丁目 カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ 045-123-4046 139.4994 35.52398 1548.0
9 S14050 阿久和西店 14 神奈川県 神奈川県横浜市瀬谷区阿久和西一丁目 カナガワケンヨコハマシセヤクアクワニシイッチョウメ 045-123-4053 139.4961 35.45918 1830.0
12 S14028 二ツ橋店 14 神奈川県 神奈川県横浜市瀬谷区二ツ橋町 カナガワケンヨコハマシセヤクフタツバシチョウ 045-123-4042 139.4963 35.46304 1574.0
16 S14012 本牧和田店 14 神奈川県 神奈川県横浜市中区本牧和田 カナガワケンヨコハマシナカクホンモクワダ 045-123-4034 139.6582 35.42156 1341.0
18 S14046 北山田店 14 神奈川県 神奈川県横浜市都筑区北山田一丁目 カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ 045-123-4049 139.5916 35.56189 831.0
20 S14011 日吉本町店 14 神奈川県 神奈川県横浜市港北区日吉本町四丁目 カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ 045-123-4033 139.6316 35.54655 890.0
26 S14048 中川中央店 14 神奈川県 神奈川県横浜市都筑区中川中央二丁目 カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ 045-123-4051 139.5758 35.54912 1657.0
40 S14042 新山下店 14 神奈川県 神奈川県横浜市中区新山下二丁目 カナガワケンヨコハマシナカクシンヤマシタニチョウメ 045-123-4047 139.6593 35.43894 1044.0
52 S14006 葛が谷店 14 神奈川県 神奈川県横浜市都筑区葛が谷 カナガワケンヨコハマシツヅキククズガヤ 045-123-4031 139.5633 35.53573 1886.0

まとめ: 後方一致と部分一致データの抽出方法を学びました。

本記事では、「【Python】手を動かしながら後方一致と部分一致を学ぶ | データサイエンス100本ノック【問11〜問12 回答】」というテーマでまとめました。

繰り返しになりますが、query()メソッドで文字列メソッドを使う場合、第2引数にengine='python'を指定しないといけない点に注意しましょう。

>> 続きはこちらから

コメント