データサイエンス100本ノック(構造化データ加工編)- R Part 1 (Q1 to Q20)の解説です。
参照(Reference) : 「データサイエンティスト協会スキル定義委員」の「データサイエンス100本ノック(構造化データ加工編)」
The Data Scientist Society Github :
Data Science 100 Knocks (Structured Data Processing) URL :
はじめに
- 初めに以下のセルを実行してください
- 必要なライブラリのインポートとデータベース(PostgreSQL)からのデータ読み込みを行います
- 利用が想定されるライブラリは以下セルでインポートしています
- その他利用したいライブラリがあればinstall.packages()で適宜インストールしてください
- 名前、住所等はダミーデータであり、実在するものではありません
require("RPostgreSQL")
require("tidyr")
require("dplyr")
require("stringr")
require("caret")
require("lubridate")
require("rsample")
require("recipes")
require("themis")
host <- "db"
port <- Sys.getenv()["PG_PORT"]
dbname <- Sys.getenv()["PG_DATABASE"]
user <- Sys.getenv()["PG_USER"]
password <- Sys.getenv()["PG_PASSWORD"]
con <- dbConnect(PostgreSQL(), host=host, port=port, dbname=dbname, user=user, password=password)
df_customer <- dbGetQuery(con,"SELECT * FROM customer")
df_category <- dbGetQuery(con,"SELECT * FROM category")
df_product <- dbGetQuery(con,"SELECT * FROM product")
df_receipt <- dbGetQuery(con,"SELECT * FROM receipt")
df_store <- dbGetQuery(con,"SELECT * FROM store")
df_geocode <- dbGetQuery(con,"SELECT * FROM geocode")
Loading required package: RPostgreSQL Loading required package: DBI Loading required package: tidyr Loading required package: dplyr Attaching package: ‘dplyr’ The following objects are masked from ‘package:stats’: filter, lag The following objects are masked from ‘package:base’: intersect, setdiff, setequal, union Loading required package: stringr Loading required package: caret Loading required package: ggplot2 Loading required package: lattice Loading required package: lubridate Attaching package: ‘lubridate’ The following objects are masked from ‘package:base’: date, intersect, setdiff, union Loading required package: rsample Loading required package: recipes Attaching package: ‘recipes’ The following object is masked from ‘package:stringr’: fixed The following object is masked from ‘package:stats’: step Loading required package: themis Registered S3 methods overwritten by 'themis': method from bake.step_downsample recipes bake.step_upsample recipes prep.step_downsample recipes prep.step_upsample recipes tidy.step_downsample recipes tidy.step_upsample recipes tunable.step_downsample recipes tunable.step_upsample recipes Attaching package: ‘themis’ The following objects are masked from ‘package:recipes’: step_downsample, step_upsample
演習問題
R-001: レシート明細データ(df_receipt)から全項目の先頭10件を表示し、どのようなデータを保有しているか目視で確認せよ。
head(df_receipt, n = 10)
sales_ymd | sales_epoch | store_cd | receipt_no | receipt_sub_no | customer_id | product_cd | quantity | amount | |
---|---|---|---|---|---|---|---|---|---|
<int> | <int> | <chr> | <int> | <int> | <chr> | <chr> | <int> | <int> | |
1 | 20181103 | 1541203200 | S14006 | 112 | 1 | CS006214000001 | P070305012 | 1 | 158 |
2 | 20181118 | 1542499200 | S13008 | 1132 | 2 | CS008415000097 | P070701017 | 1 | 81 |
3 | 20170712 | 1499817600 | S14028 | 1102 | 1 | CS028414000014 | P060101005 | 1 | 170 |
4 | 20190205 | 1549324800 | S14042 | 1132 | 1 | ZZ000000000000 | P050301001 | 1 | 25 |
5 | 20180821 | 1534809600 | S14025 | 1102 | 2 | CS025415000050 | P060102007 | 1 | 90 |
6 | 20190605 | 1559692800 | S13003 | 1112 | 1 | CS003515000195 | P050102002 | 1 | 138 |
7 | 20181205 | 1543968000 | S14024 | 1102 | 2 | CS024514000042 | P080101005 | 1 | 30 |
8 | 20190922 | 1569110400 | S14040 | 1102 | 1 | CS040415000178 | P070501004 | 1 | 128 |
9 | 20170504 | 1493856000 | S13020 | 1112 | 2 | ZZ000000000000 | P071302010 | 1 | 770 |
10 | 20191010 | 1570665600 | S14027 | 1102 | 1 | CS027514000015 | P071101003 | 1 | 680 |
解説:
head(df_receipt, n = 10)というコードは、df_receiptというデータフレームの最初の10行を表示するために使用されています。
Rでは、データフレームは、各列が数値、文字、因子などの異なるデータ型を持つことができる表のような構造です。構造化された形式でデータを保存し、操作するためによく使用されます。
Rのhead()関数は、データフレームの最初の数行を表示するために使用されます。デフォルトでは、データフレームの最初の6行が表示されます。しかし、n引数で表示する行数を指定することができる。この場合、n = 10は、df_receiptデータ・フレームの最初の10行を表示するために使用されます。
したがって、このコードが実行されると、出力にはdf_receiptデータ・フレームの最初の10行が表示されます。
R-002: レシート明細データ(df_receipt)から売上年月日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10件表示せよ。
head(df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")], n = 10)
sales_ymd | customer_id | product_cd | amount | |
---|---|---|---|---|
<int> | <chr> | <chr> | <int> | |
1 | 20181103 | CS006214000001 | P070305012 | 158 |
2 | 20181118 | CS008415000097 | P070701017 | 81 |
3 | 20170712 | CS028414000014 | P060101005 | 170 |
4 | 20190205 | ZZ000000000000 | P050301001 | 25 |
5 | 20180821 | CS025415000050 | P060102007 | 90 |
6 | 20190605 | CS003515000195 | P050102002 | 138 |
7 | 20181205 | CS024514000042 | P080101005 | 30 |
8 | 20190922 | CS040415000178 | P070501004 | 128 |
9 | 20170504 | ZZ000000000000 | P071302010 | 770 |
10 | 20191010 | CS027514000015 | P071101003 | 680 |
解説:
head(df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")], n = 10) というコードは、df_receipt というデータフレームの最初の10行を表示するのに使われますが、"sales_ymd", "customer_id", "product_cd", "amount" の列だけを表示します。
Rでは、データフレームは、各列が数値、文字、因子などの異なるデータ型を持つことができるテーブルのような構造です。構造化された形式でデータを保存し、操作するためによく使用されます。
Rのhead()関数は、データフレームの最初の数行を表示するために使用されます。デフォルトでは、データフレームの最初の6行が表示されます。しかし、n 引数を使用して、表示する行数を指定することができます。
この場合、df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] は、df_receipt データフレームをサブセットして、列 "sales_ymd", "customer_id", "product_cd", "amount" のみを選択するのに使用されています。c()関数は、列名をベクトルに連結するために使用されます。
したがって、このコードを実行すると、df_receiptデータフレームの最初の10行が出力されますが、"sales_ymd", "customer_id", "product_cd", "amount "の列のみが表示されます。これは、大きなデータフレームを扱うときに、カラムのサブセットにのみ焦点を当てる必要がある場合に便利です。
R-003: レシート明細データ(df_receipt)から売上年月日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10件表示せよ。ただし、sales_ymdsales_dateに項目名を変更しながら抽出すること。
head(rename(df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")], sales_date = sales_ymd), n = 10)
sales_date | customer_id | product_cd | amount | |
---|---|---|---|---|
<int> | <chr> | <chr> | <int> | |
1 | 20181103 | CS006214000001 | P070305012 | 158 |
2 | 20181118 | CS008415000097 | P070701017 | 81 |
3 | 20170712 | CS028414000014 | P060101005 | 170 |
4 | 20190205 | ZZ000000000000 | P050301001 | 25 |
5 | 20180821 | CS025415000050 | P060102007 | 90 |
6 | 20190605 | CS003515000195 | P050102002 | 138 |
7 | 20181205 | CS024514000042 | P080101005 | 30 |
8 | 20190922 | CS040415000178 | P070501004 | 128 |
9 | 20170504 | ZZ000000000000 | P071302010 | 770 |
10 | 20191010 | CS027514000015 | P071101003 | 680 |
解説:
head(rename(df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")], sales_date = sales_ymd), n = 10) というコードは、df_receipt というデータフレームの最初の10行を表示するために使用しますが、列 "sales_ymd", "customer_id", "product_cd" および "amount" だけを見せて、列 "sales_ymd" を "sales_date" に名前を変えています。
Rでは、データフレームは、各列が数値、文字、因子などの異なるデータ型を持つことができるテーブルのような構造である。構造化された形式でデータを保存し、操作するためによく使用されます。
Rのhead()関数は、データフレームの最初の数行を表示するために使用されます。デフォルトでは、データフレームの最初の6行が表示されます。しかし、引数nで表示する行数を指定することができます。
Rのrename()関数は、データフレーム内の列の名前を変更するために使用されます。この場合、"sales_ymd "という列を "sales_date "にリネームするために使用されます。
このコードでは、df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] を使って、df_receipt データフレームをサブセットして、列 "sales_ymd", "customer_id", "product_cd", "amount" のみを選択しています。c()関数は、列名をベクトルに連結するために使用される。
次に、rename(data_frame, new_column_name = old_column_name) という構文で、サブセットされたデータフレームに rename() 関数が適用されます。その結果、df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] と同じ行と列を持つデータフレームになりますが、列 "sales_ymd" は "sales_date" に改名されています。
最後に、名前を変更したデータフレームにhead()関数を適用して、最初の10行を表示します。
したがって、このコードを実行すると、出力にはdf_receiptデータフレームの最初の10行が表示されますが、列 "sales_date", "customer_id", "product_cd", "amount "のみ表示され、列 "sales_ymd "は "sales_date "に変更されます。
R-004: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] %>% filter(customer_id == "CS018205000001")
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
<int> | <chr> | <chr> | <int> |
20180911 | CS018205000001 | P071401012 | 2200 |
20180414 | CS018205000001 | P060104007 | 600 |
20170614 | CS018205000001 | P050206001 | 990 |
20170614 | CS018205000001 | P060702015 | 108 |
20190216 | CS018205000001 | P071005024 | 102 |
20180414 | CS018205000001 | P071101002 | 278 |
20190226 | CS018205000001 | P070902035 | 168 |
20190924 | CS018205000001 | P060805001 | 495 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
20190216 | CS018205000001 | P040101002 | 218 |
20190924 | CS018205000001 | P091503001 | 280 |
解説:
df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] %>% filter(customer_id == "CS018205000001") というコードを使って、df_receipt データフレームをサブセットして "sales_ymd" 列のみを選択します。"customer_id"、"product_cd"、"amount "の3つのカラムを持つデータフレームを作成し、"customer_id "カラムが "CS018205000001 "と同じ行のみを含むようにフィルターします。
Rでは、データフレームはテーブルのような構造で、各カラムは数値、文字、因子など異なるデータ型を持つことができます。構造化された形式でデータを保存し、操作するためによく使用されます。
Rの%>%演算子はパイプ演算子と呼ばれ、複数の関数を連鎖させて1つの式にするのに使われます。この例では、df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] の出力を filter() 関数に渡すために使用されています。
Rのfilter()関数は、データフレームから特定の条件を満たす行を選択するために使用されます。この場合、"customer_id "カラムが "CS018205000001 "と等しい行のみを含むようにデータフレームをフィルタリングするために使用されます。
したがって、このコードを実行すると、"sales_ymd", "customer_id", "product_cd", "amount "のカラムのみを含み、"customer_id" カラムが "CS018205000001" と同じ行のみを含むデータフレームを出力します。これは、大きなデータフレームを分析するときに、特定の条件を満たす行のサブセットにのみ焦点を当てる必要がある場合に便利です。
R-005: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
- 売上金額(amount)が1,000以上
df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] %>% filter(customer_id == "CS018205000001" & amount >= 1000)
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
<int> | <chr> | <chr> | <int> |
20180911 | CS018205000001 | P071401012 | 2200 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
解説:
df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] %>% filter(customer_id == "CS018205000001" & amount >= 1000) というコードを使って、df_receipt データフレームをサブセットして、列 "sales_ymd" だけを選択します。"customer_id"、"product_cd"、"amount "の3つのデータフレームを作成し、"customer_id "列が "CS018205000001"、"amount "列が1000以上の行のみを含むようにフィルターをかける。
Rでは、データフレームはテーブルのような構造で、各カラムは数値、文字、因子など異なるデータ型を持つことができます。構造化された形式でデータを保存し、操作するためによく使用されます。
Rの%>%演算子はパイプ演算子と呼ばれ、複数の関数を連鎖させて1つの式にするのに使われます。この例では、df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] の出力を filter() 関数に渡すために使用されています。
Rのfilter()関数は、データフレームから特定の条件を満たす行を選択するために使用されます。この場合、"customer_id" 列が "CS018205000001" と等しく、かつ "amount" 列が 1000 以上の行のみを含むようにデータフレームをフィルターするために使用されます。2つの条件を組み合わせるには、&演算子が使用されます。
したがって、このコードを実行すると、"sales_ymd", "customer_id", "product_cd", "amount "のカラムのみを含むデータフレームが出力され、"customer_id" カラムが "CS018205000001" と等しく "amount" カラムが 1000 以上の行のみが含まれます。これは、大きなデータフレームを分析するときに、特定の条件を満たす行のサブセットにのみ焦点を当てる必要がある場合に便利です。
R-006: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上数量(quantity)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
- 売上金額(amount)が1,000以上または売上数量(quantity)が5以上
df_receipt[c("sales_ymd", "customer_id", "product_cd", "quantity", "amount")] %>% filter(customer_id == "CS018205000001" & (amount >= 1000 | quantity >= 5))
sales_ymd | customer_id | product_cd | quantity | amount |
---|---|---|---|---|
<int> | <chr> | <chr> | <int> | <int> |
20180911 | CS018205000001 | P071401012 | 1 | 2200 |
20180414 | CS018205000001 | P060104007 | 6 | 600 |
20170614 | CS018205000001 | P050206001 | 5 | 990 |
20190226 | CS018205000001 | P071401020 | 1 | 2200 |
20180911 | CS018205000001 | P071401005 | 1 | 1100 |
解説:
df_receipt[c("sales_ymd", "customer_id", "product_cd", "quantity", "amount")] %>% filter(customer_id == "CS018205000001" & (amount >= 1000 | quantity >= 5)) というコードを使用して、df_receipt データフレームをサブセットして、列 "sales_ymd", "customer_id", "product_cd" のみ選択します。"quantity"、"amount "の3つのデータフレームを作成し、"customer_id "カラムが "CS018205000001 "と等しく、"amount "カラムが1000以上か、"quantity "カラムが5以上となる行のみを含むようにフィルターします。
Rでは、データフレームは、各列が数値、文字、因子などの異なるデータ型を持つことができる表のような構造です。構造化されたフォーマットでデータを保存し、操作するためによく使われます。
Rの%>%演算子はパイプ演算子と呼ばれ、複数の関数を連鎖させて1つの式にするのに使われます。この例では、df_receipt[c("sales_ymd", "customer_id", "product_cd", "quantity", "amount")] の出力を filter() 関数に渡すために使用されています。
Rのfilter()関数は、データフレームから特定の条件を満たす行を選択するために使用されます。この場合、"customer_id" カラムが "CS018205000001" と等しく、かつ "amount" カラムが 1000 以上または "quantity" カラムが 5 以上の行のみを含むようにデータフレームをフィルターするために使用されます。2つの条件を組み合わせるには&演算子が、OR条件を指定するには|演算子が使用されます。
したがって、このコードを実行すると、「sales_ymd」「customer_id」「product_cd」「quantity」「amount」の列のみを含むデータフレームが出力され、「customer_id」列が「CS018205000001」と同じで「umount」列が1000以上または「quantity」列が5以上ある行のみが含まれます。これは、大きなデータフレームを分析するときに、特定の条件を満たす行のサブセットにのみ焦点を当てる必要がある場合に便利です。
R-007: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
- 売上金額(amount)が1,000以上2,000以下
df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] %>% filter(customer_id == "CS018205000001" & between(amount, 1000, 2000))
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
<int> | <chr> | <chr> | <int> |
20180911 | CS018205000001 | P071401005 | 1100 |
解説:
このコードは、Rのdplyrパッケージを使って、df_receiptというデータフレームを操作しています。以下、コードの内訳です。
df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")]: これは、df_receiptデータフレームを、"sales_ymd", "customer_id", "product_cd", "amount "のカラムのみを含むようにサブセットしています。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができます。
filter(customer_id == "CS018205000001" & between(amount, 1000, 2000)): これは、顧客IDが "CS018205000001 "で、金額が1000から2000の間の行だけを含むように、データフレームをフィルタリングしています。
つまり、このコードは、df_receipt データフレームをサブセットして、"sales_ymd", "customer_id", "product_cd", "amount" 列のみを含むようにし、得られたデータフレームを、顧客 ID が "CS018205000001" で金額が 1000 から 2000 までの行のみを含むようにフィルタリングしていることになる。
R-008: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
- 商品コード(product_cd)が”P071401019″以外
df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")] %>% filter(customer_id == "CS018205000001" & product_cd != "P071401019")
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
<int> | <chr> | <chr> | <int> |
20180911 | CS018205000001 | P071401012 | 2200 |
20180414 | CS018205000001 | P060104007 | 600 |
20170614 | CS018205000001 | P050206001 | 990 |
20170614 | CS018205000001 | P060702015 | 108 |
20190216 | CS018205000001 | P071005024 | 102 |
20180414 | CS018205000001 | P071101002 | 278 |
20190226 | CS018205000001 | P070902035 | 168 |
20190924 | CS018205000001 | P060805001 | 495 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
20190216 | CS018205000001 | P040101002 | 218 |
20190924 | CS018205000001 | P091503001 | 280 |
解説:
このコードは、Rのdplyrパッケージを使って、df_receiptというデータフレームを操作しています。以下、コードの内訳です。
df_receipt[c("sales_ymd", "customer_id", "product_cd", "amount")]: これは、df_receiptデータフレームを、"sales_ymd", "customer_id", "product_cd", "amount "のカラムのみを含むようにサブセットしています。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができます。
filter(customer_id == "CS018205000001" & product_cd != "P071401019"): これは、顧客IDが "CS018205000001 "で、商品コードが "P0714019 "と等しくない行のみを含むようにデータフレームをフィルタリングしています。
つまり、このコードはdf_receiptデータフレームをサブセットして、列 "sales_ymd", "customer_id", "product_cd", "amount "のみを含むようにし、得られたデータフレームを顧客IDが "CS0182050001 "で商品コードが "P0714019 "と同じではない行のみを含むようにフィルターにかけていることになる。
R-009: 以下の処理において、出力結果を変えずにORをANDに書き換えよ。
df_store %>% filter(!(prefecture_cd == "13" | floor_area > 900))
df_store %>% filter(prefecture_cd != "13" & floor_area <= 900)
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <dbl> | <dbl> | <dbl> |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890 |
S12013 | 習志野店 | 12 | 千葉県 | 千葉県習志野市芝園一丁目 | チバケンナラシノシシバゾノイッチョウメ | 047-123-4002 | 140.0220 | 35.66122 | 808 |
解説:
このコードは、Rのdplyrパッケージを使って、df_storeというデータフレームを操作しています。以下、コードの内訳です。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができる。
filter(prefecture_cd != "13" & floor_area <= 900): これは、都道府県コードが "13 "でなく、床面積が900以下である行だけを含むようにデータフレームをフィルタリングしています。
つまり、このコードはdf_storeデータフレームをフィルタリングして、都道府県コードが "13 "でなく、床面積が900以下である行のみを含むようにしています。
R-010: 店舗データ(df_store)から、店舗コード(store_cd)が”S14″で始まるものだけ全項目抽出し、10件表示せよ。
head(df_store %>% filter(startsWith(store_cd, "S14")), n = 10)
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area | |
---|---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <dbl> | <dbl> | <dbl> | |
1 | S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732 |
2 | S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495 |
3 | S14036 | 相模原中央店 | 14 | 神奈川県 | 神奈川県相模原市中央二丁目 | カナガワケンサガミハラシチュウオウニチョウメ | 042-123-4045 | 139.3716 | 35.57327 | 1679 |
4 | S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548 |
5 | S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830 |
6 | S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574 |
7 | S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341 |
8 | S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831 |
9 | S14022 | 逗子店 | 14 | 神奈川県 | 神奈川県逗子市逗子一丁目 | カナガワケンズシシズシイッチョウメ | 046-123-4036 | 139.5789 | 35.29642 | 1838 |
10 | S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890 |
解説:
このコードは、Rのdplyrパッケージを使って、df_storeというデータフレームを操作しています。以下、コードの内訳を説明します。
df_storeです。これは、使用されているデータフレームです。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができる。
filter(startsWith(store_cd, "S14")): store_cd列が "S14 "で始まる行のみを含むようにデータフレームをフィルタリングしています。
head(., n = 10): head()関数を使用して、結果のデータフレームの最初の10行を選択しています。
つまり、このコードは、df_storeデータフレームをフィルタリングして、store_cdカラムが "S14 "で始まる行のみを含むようにし、head()関数を使用して、結果のデータフレームの最初の10行を選択しています。
R-011: 顧客データ(df_customer)から顧客ID(customer_id)の末尾が1のものだけ全項目抽出し、10件表示せよ。
head(df_customer %>% filter(endsWith(customer_id, "1")), n = 10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <date> | <int> | <chr> | <chr> | <chr> | <chr> | <chr> | |
1 | CS037613000071 | 六角 雅彦 | 9 | 不明 | 1952-04-01 | 66 | 136-0076 | 東京都江東区南砂********** | S13037 | 20150414 | 0-00000000-0 |
2 | CS028811000001 | 堀井 かおり | 1 | 女性 | 1933-03-27 | 86 | 245-0016 | 神奈川県横浜市泉区和泉町********** | S14028 | 20160115 | 0-00000000-0 |
3 | CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
4 | CS028314000011 | 小菅 あおい | 1 | 女性 | 1983-11-26 | 35 | 246-0038 | 神奈川県横浜市瀬谷区宮沢********** | S14028 | 20151123 | 1-20080426-5 |
5 | CS039212000051 | 藤島 恵梨香 | 1 | 女性 | 1997-02-03 | 22 | 166-0001 | 東京都杉並区阿佐谷北********** | S13039 | 20171121 | 1-20100215-4 |
6 | CS015412000111 | 松居 奈月 | 1 | 女性 | 1972-10-04 | 46 | 136-0071 | 東京都江東区亀戸********** | S13015 | 20150629 | 0-00000000-0 |
7 | CS004702000041 | 野島 洋 | 0 | 男性 | 1943-08-24 | 75 | 176-0022 | 東京都練馬区向山********** | S13004 | 20170218 | 0-00000000-0 |
8 | CS041515000001 | 栗田 千夏 | 1 | 女性 | 1967-01-02 | 52 | 206-0001 | 東京都多摩市和田********** | S13041 | 20160422 | E-20100803-F |
9 | CS029313000221 | 北条 ひかり | 1 | 女性 | 1987-06-19 | 31 | 279-0011 | 千葉県浦安市美浜********** | S12029 | 20180810 | 0-00000000-0 |
10 | CS034312000071 | 望月 奈央 | 1 | 女性 | 1980-09-20 | 38 | 213-0026 | 神奈川県川崎市高津区久末********** | S14034 | 20160106 | 0-00000000-0 |
解説:
このコードは、Rのdplyrパッケージを使って、df_customerというデータフレームを操作しています。以下、コードの内訳です。
df_customer: df_customer:これは使用されているデータフレームです。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができる。
filter(endsWith(customer_id, "1"))。customer_idカラムの末尾が "1 "の行のみを含むようにデータフレームをフィルタリングしています。
head(., n = 10): head()関数を使用して、結果のデータフレームの最初の10行を選択しています。
つまり、このコードは、df_customerデータフレームをフィルタリングして、customer_idカラムが "1 "で終わる行のみを含むようにし、head()関数を使用して結果のデータフレームの最初の10行を選択していることになります。
R-012: 店舗データ(df_store)から、住所 (address) に”横浜市”が含まれるものだけ全項目表示せよ。
df_store %>% filter(grepl("横浜市", address))
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <dbl> | <dbl> | <dbl> |
S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732 |
S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495 |
S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548 |
S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830 |
S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574 |
S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341 |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890 |
S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657 |
S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044 |
S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886 |
解説:
このコードは、Rのdplyrパッケージを使って、df_storeというデータフレームを操作しています。以下、コードの内訳を説明します。
df_storeです。これは、使用されているデータフレームです。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができる。
filter(grepl("横浜市", address)): 住所欄に「横浜市」という文字列が含まれる行だけを含むように、データフレームをフィルタリングしています。grepl()関数は、address列の各要素にパターン "横浜市 "があるかどうかを示す論理ベクトルを返します。
つまり、このコードはdf_storeデータフレームをフィルタリングして、アドレスカラムに "横浜市 "という文字列が含まれる行のみを含むようにしているのです。
R-013: 顧客データ(df_customer)から、ステータスコード(status_cd)の先頭がアルファベットのA〜Fで始まるデータを全項目抽出し、10件表示せよ。
head(df_customer %>% filter(grepl("^[A-F]", status_cd)), n = 10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <date> | <int> | <chr> | <chr> | <chr> | <chr> | <chr> | |
1 | CS031415000172 | 宇多田 貴美子 | 1 | 女性 | 1976-10-04 | 42 | 151-0053 | 東京都渋谷区代々木********** | S13031 | 20150529 | D-20100325-C |
2 | CS015414000103 | 奥野 陽子 | 1 | 女性 | 1977-08-09 | 41 | 136-0073 | 東京都江東区北砂********** | S13015 | 20150722 | B-20100609-B |
3 | CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
4 | CS029415000023 | 梅田 里穂 | 1 | 女性 | 1976-01-17 | 43 | 279-0043 | 千葉県浦安市富士見********** | S12029 | 20150610 | D-20100918-E |
5 | CS035415000029 | 寺沢 真希 | 9 | 不明 | 1977-09-27 | 41 | 158-0096 | 東京都世田谷区玉川台********** | S13035 | 20141220 | F-20101029-F |
6 | CS031415000106 | 宇野 由美子 | 1 | 女性 | 1970-02-26 | 49 | 151-0053 | 東京都渋谷区代々木********** | S13031 | 20150201 | F-20100511-E |
7 | CS029215000025 | 石倉 美帆 | 1 | 女性 | 1993-09-28 | 25 | 279-0022 | 千葉県浦安市今川********** | S12029 | 20150708 | B-20100820-C |
8 | CS033605000005 | 猪股 雄太 | 0 | 男性 | 1955-12-05 | 63 | 246-0031 | 神奈川県横浜市瀬谷区瀬谷********** | S14033 | 20150425 | F-20100917-E |
9 | CS033415000229 | 板垣 菜々美 | 1 | 女性 | 1977-11-07 | 41 | 246-0021 | 神奈川県横浜市瀬谷区二ツ橋町********** | S14033 | 20150712 | F-20100326-E |
10 | CS008415000145 | 黒谷 麻緒 | 1 | 女性 | 1977-06-27 | 41 | 157-0067 | 東京都世田谷区喜多見********** | S13008 | 20150829 | F-20100622-F |
解説:
このコードは、Rのdplyrパッケージを使って、df_customerというデータフレームを操作しています。以下、コードの内訳です。
df_customer: df_customer:これは使用されているデータフレームです。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができる。
filter(grepl("^[A-F]", status_cd)): これは、status_cd列がA、B、C、D、E、Fの文字で始まる行だけを含むようにデータフレームをフィルタリングしている。grepl()関数は、正規表現「^[A-F]」がstatus_cd列のそれぞれの要素にマッチするかどうかを示す論理ベクトルを返す。正規表現"^[A-F]"は、A、B、C、D、EまたはFで始まるすべての文字列にマッチする。
head(., n = 10): これは、head()関数を使用して、結果のデータフレームの最初の10行を選択しています。
つまり、このコードは、df_customerデータフレームをフィルタリングして、status_cdカラムがA、B、C、D、E、Fで始まる行のみを含むようにし、head()関数を使用して結果のデータフレームの最初の10行を選択しているのです。
R-014: 顧客データ(df_customer)から、ステータスコード(status_cd)の末尾が数字の1〜9で終わるデータを全項目抽出し、10件表示せよ。
head(df_customer %>% filter(grepl("[1-9]$", status_cd)), n = 10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <date> | <int> | <chr> | <chr> | <chr> | <chr> | <chr> | |
1 | CS001215000145 | 田崎 美紀 | 1 | 女性 | 1995-03-29 | 24 | 144-0055 | 東京都大田区仲六郷********** | S13001 | 20170605 | 6-20090929-2 |
2 | CS033513000180 | 安斎 遥 | 1 | 女性 | 1962-07-11 | 56 | 241-0823 | 神奈川県横浜市旭区善部町********** | S14033 | 20150728 | 6-20080506-5 |
3 | CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
4 | CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
5 | CS009315000023 | 皆川 文世 | 1 | 女性 | 1980-04-15 | 38 | 154-0012 | 東京都世田谷区駒沢********** | S13009 | 20150319 | 5-20080322-1 |
6 | CS015315000033 | 福士 璃奈子 | 1 | 女性 | 1983-03-17 | 36 | 135-0043 | 東京都江東区塩浜********** | S13015 | 20141024 | 4-20080219-3 |
7 | CS023513000066 | 神戸 そら | 1 | 女性 | 1961-12-17 | 57 | 210-0005 | 神奈川県川崎市川崎区東田町********** | S14023 | 20150915 | 5-20100524-9 |
8 | CS035513000134 | 市川 美帆 | 1 | 女性 | 1960-03-27 | 59 | 156-0053 | 東京都世田谷区桜********** | S13035 | 20150227 | 8-20100711-9 |
9 | CS001515000263 | 高松 夏空 | 1 | 女性 | 1962-11-09 | 56 | 144-0051 | 東京都大田区西蒲田********** | S13001 | 20160812 | 1-20100804-1 |
10 | CS040314000027 | 鶴田 きみまろ | 9 | 不明 | 1986-03-26 | 33 | 226-0027 | 神奈川県横浜市緑区長津田********** | S14040 | 20150122 | 2-20080426-4 |
解説:
このコードは、Rのdplyrパッケージを使って、df_customerというデータフレームを操作しています。以下、コードの内訳です。
df_customer:これは使用されているデータフレームです。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができる。
filter(grepl("[1-9]$", status_cd)): これは、status_cd列の末尾が1~9の数字である行のみを含むようにデータフレームをフィルタリングしています。grepl()関数は、正規表現「[1-9]$」がstatus_cd列の各要素に一致するかどうかを示す論理ベクトルを返す。正規表現「[1-9]$」は、1~9の数字で終わる文字列にマッチする。
head(., n = 10)を使用しています。これは、head()関数を使用して、結果のデータフレームの最初の10行を選択しています。
つまり、このコードは、df_customerデータフレームをフィルタリングして、status_cdカラムの末尾が1~9の数字である行のみを含むようにし、head()関数を使用して、結果のデータフレームの最初の10行を選択していることになります。
R-015: 顧客データ(df_customer)から、ステータスコード(status_cd)の先頭がアルファベットのA〜Fで始まり、末尾が数字の1〜9で終わるデータを全項目抽出し、10件表示せよ。
head(df_customer %>% filter(grepl("^[A-F].*[1-9]$", status_cd)), n = 10)
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <date> | <int> | <chr> | <chr> | <chr> | <chr> | <chr> | |
1 | CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
2 | CS022513000105 | 島村 貴美子 | 1 | 女性 | 1962-03-12 | 57 | 249-0002 | 神奈川県逗子市山の根********** | S14022 | 20150320 | A-20091115-7 |
3 | CS001515000096 | 水野 陽子 | 9 | 不明 | 1960-11-29 | 58 | 144-0053 | 東京都大田区蒲田本町********** | S13001 | 20150614 | A-20100724-7 |
4 | CS013615000053 | 西脇 季衣 | 1 | 女性 | 1953-10-18 | 65 | 261-0026 | 千葉県千葉市美浜区幕張西********** | S12013 | 20150128 | B-20100329-6 |
5 | CS020412000161 | 小宮 薫 | 1 | 女性 | 1974-05-21 | 44 | 174-0042 | 東京都板橋区東坂下********** | S13020 | 20150822 | B-20081021-3 |
6 | CS001215000097 | 竹中 あさみ | 1 | 女性 | 1990-07-25 | 28 | 146-0095 | 東京都大田区多摩川********** | S13001 | 20170315 | A-20100211-2 |
7 | CS035212000007 | 内村 恵梨香 | 1 | 女性 | 1990-12-04 | 28 | 152-0023 | 東京都目黒区八雲********** | S13035 | 20151013 | B-20101018-6 |
8 | CS002515000386 | 野田 コウ | 1 | 女性 | 1963-05-30 | 55 | 185-0013 | 東京都国分寺市西恋ケ窪********** | S13002 | 20160410 | C-20100127-8 |
9 | CS001615000372 | 稲垣 寿々花 | 1 | 女性 | 1956-10-29 | 62 | 144-0035 | 東京都大田区南蒲田********** | S13001 | 20170403 | A-20100104-1 |
10 | CS032512000121 | 松井 知世 | 1 | 女性 | 1962-09-04 | 56 | 210-0011 | 神奈川県川崎市川崎区富士見********** | S13032 | 20150727 | A-20100103-5 |
解説:
このコードは、Rのdplyrパッケージを使って、df_customerというデータフレームを操作しています。以下、コードの内訳です。
df_customer:これは使用されているデータフレームです。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができる。
filter(grepl("^[A-F].*[1-9]$", status_cd)): これは、status_cd列がA、B、C、D、E、Fのいずれかの文字で始まり、1~9の数字で終わる行のみを含むようにデータフレームをフィルタリングしています。grepl() 関数は、正規表現 "^[A-F].[1-9]$" が status_cd 列の各要素に一致するかどうかを示す論理ベクトルを返す。正規表現"^[A-F].[1-9]$"は、文字A、B、C、D、E、Fで始まり、0文字以上の任意の型が続き、1〜9までの数字で終わる文字列に一致する。
head(., n = 10): これは、head()関数を使用して、結果のデータフレームの最初の10行を選択しています。
つまり、このコードは、df_customerデータフレームをフィルタリングして、status_cd列がA、B、C、D、EまたはFの文字で始まり、1~9の数字で終わる行だけを含むようにし、head()関数を使用して結果のデータフレームの最初の10行を選択していることになります。
R-016: 店舗データ(df_store)から、電話番号(tel_no)が3桁-3桁-4桁のデータを全項目表示せよ。
df_store %>% filter(grepl("^[0-9]{3}-[0-9]{3}-[0-9]{4}$", tel_no))
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <chr> | <dbl> | <dbl> | <dbl> |
S12014 | 千草台店 | 12 | 千葉県 | 千葉県千葉市稲毛区千草台一丁目 | チバケンチバシイナゲクチグサダイイッチョウメ | 043-123-4003 | 140.1180 | 35.63559 | 1698 |
S13002 | 国分寺店 | 13 | 東京都 | 東京都国分寺市本多二丁目 | トウキョウトコクブンジシホンダニチョウメ | 042-123-4008 | 139.4802 | 35.70566 | 1735 |
S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732 |
S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495 |
S14036 | 相模原中央店 | 14 | 神奈川県 | 神奈川県相模原市中央二丁目 | カナガワケンサガミハラシチュウオウニチョウメ | 042-123-4045 | 139.3716 | 35.57327 | 1679 |
S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548 |
S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830 |
S13052 | 森野店 | 13 | 東京都 | 東京都町田市森野三丁目 | トウキョウトマチダシモリノサンチョウメ | 042-123-4030 | 139.4383 | 35.55293 | 1087 |
S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574 |
S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341 |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831 |
S14022 | 逗子店 | 14 | 神奈川県 | 神奈川県逗子市逗子一丁目 | カナガワケンズシシズシイッチョウメ | 046-123-4036 | 139.5789 | 35.29642 | 1838 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890 |
S13016 | 小金井店 | 13 | 東京都 | 東京都小金井市本町一丁目 | トウキョウトコガネイシホンチョウイッチョウメ | 042-123-4015 | 139.5094 | 35.70018 | 1399 |
S14034 | 川崎野川店 | 14 | 神奈川県 | 神奈川県川崎市宮前区野川 | カナガワケンカワサキシミヤマエクノガワ | 044-123-4044 | 139.5998 | 35.57693 | 1318 |
S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657 |
S12007 | 佐倉店 | 12 | 千葉県 | 千葉県佐倉市上志津 | チバケンサクラシカミシヅ | 043-123-4001 | 140.1452 | 35.71872 | 1895 |
S14026 | 辻堂西海岸店 | 14 | 神奈川県 | 神奈川県藤沢市辻堂西海岸二丁目 | カナガワケンフジサワシツジドウニシカイガンニチョウメ | 046-123-4040 | 139.4466 | 35.32464 | 1732 |
S13041 | 八王子店 | 13 | 東京都 | 東京都八王子市大塚 | トウキョウトハチオウジシオオツカ | 042-123-4026 | 139.4235 | 35.63787 | 810 |
S14049 | 川崎大師店 | 14 | 神奈川県 | 神奈川県川崎市川崎区中瀬三丁目 | カナガワケンカワサキシカワサキクナカゼサンチョウメ | 044-123-4052 | 139.7327 | 35.53759 | 962 |
S14023 | 川崎店 | 14 | 神奈川県 | 神奈川県川崎市川崎区本町二丁目 | カナガワケンカワサキシカワサキクホンチョウニチョウメ | 044-123-4037 | 139.7028 | 35.53599 | 1804 |
S13018 | 清瀬店 | 13 | 東京都 | 東京都清瀬市松山一丁目 | トウキョウトキヨセシマツヤマイッチョウメ | 042-123-4017 | 139.5178 | 35.76885 | 1220 |
S14027 | 南藤沢店 | 14 | 神奈川県 | 神奈川県藤沢市南藤沢 | カナガワケンフジサワシミナミフジサワ | 046-123-4041 | 139.4896 | 35.33762 | 1521 |
S14021 | 伊勢原店 | 14 | 神奈川県 | 神奈川県伊勢原市伊勢原四丁目 | カナガワケンイセハラシイセハラヨンチョウメ | 046-123-4035 | 139.3129 | 35.40169 | 962 |
S14047 | 相模原店 | 14 | 神奈川県 | 神奈川県相模原市千代田六丁目 | カナガワケンサガミハラシチヨダロクチョウメ | 042-123-4050 | 139.3748 | 35.55959 | 1047 |
S12013 | 習志野店 | 12 | 千葉県 | 千葉県習志野市芝園一丁目 | チバケンナラシノシシバゾノイッチョウメ | 047-123-4002 | 140.0220 | 35.66122 | 808 |
S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044 |
S12030 | 八幡店 | 12 | 千葉県 | 千葉県市川市八幡三丁目 | チバケンイチカワシヤワタサンチョウメ | 047-123-4005 | 139.9240 | 35.72318 | 1162 |
S14025 | 大和店 | 14 | 神奈川県 | 神奈川県大和市下和田 | カナガワケンヤマトシシモワダ | 046-123-4039 | 139.4680 | 35.43414 | 1011 |
S14045 | 厚木店 | 14 | 神奈川県 | 神奈川県厚木市中町二丁目 | カナガワケンアツギシナカチョウニチョウメ | 046-123-4048 | 139.3651 | 35.44182 | 980 |
S12029 | 東野店 | 12 | 千葉県 | 千葉県浦安市東野一丁目 | チバケンウラヤスシヒガシノイッチョウメ | 047-123-4004 | 139.8968 | 35.65086 | 1101 |
S12053 | 高洲店 | 12 | 千葉県 | 千葉県浦安市高洲五丁目 | チバケンウラヤスシタカスゴチョウメ | 047-123-4006 | 139.9176 | 35.63755 | 1555 |
S14024 | 三田店 | 14 | 神奈川県 | 神奈川県川崎市多摩区三田四丁目 | カナガワケンカワサキシタマクミタヨンチョウメ | 044-123-4038 | 139.5424 | 35.60770 | 972 |
S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886 |
解説:
このコードは、Rのdplyrパッケージを使って、df_storeというデータフレームを操作しています。以下、コードの内訳を説明します。
df_store : これは、使用されているデータフレームです。
%>%: これはdplyrのパイプ演算子で、複数のデータ操作関数を連結することができる。
filter(grepl("^[0-9]{3}-[0-9]{3}-[0-9]{4}$", tel_no)): これは、tel_noカラムが特定の電話番号形式に一致する行のみを含むようにデータフレームをフィルタリングしています。grepl()関数は、正規表現"^[0-9]{3}-[0-9]{3}-[0-9]{4}$"がtel_no列の各要素に一致するかどうかを示す論理ベクトルを返す。正規表現 "^[0-9]{3}-[0-9]{3}-[0-9]{4}$" は、3桁で始まり、ハイフンが続き、さらに3桁、ハイフンが続き、最後に4桁の文字列にマッチします。
head(.) : これは、head()関数を使用して、結果のデータフレームの最初の6行を選択しています。
つまり、このコードは、df_storeデータフレームをフィルタリングして、tel_noカラムが特定の電話番号フォーマットに一致する行のみを含むようにし、head()関数を使用して結果のデータフレームの最初の6行を選択しているのです。
R-017: 顧客データ(df_customer)を生年月日(birth_day)で高齢順にソートし、先頭から全項目を10件表示せよ。
head( df_customer[order(df_customer$birth_day), ], n = 10 )
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <date> | <int> | <chr> | <chr> | <chr> | <chr> | <chr> | |
18818 | CS003813000014 | 村山 菜々美 | 1 | 女性 | 1928-11-26 | 90 | 182-0007 | 東京都調布市菊野台********** | S13003 | 20160214 | 0-00000000-0 |
12329 | CS026813000004 | 吉村 朝陽 | 1 | 女性 | 1928-12-14 | 90 | 251-0043 | 神奈川県藤沢市辻堂元町********** | S14026 | 20150723 | 0-00000000-0 |
15683 | CS018811000003 | 熊沢 美里 | 1 | 女性 | 1929-01-07 | 90 | 204-0004 | 東京都清瀬市野塩********** | S13018 | 20150403 | 0-00000000-0 |
15303 | CS027803000004 | 内村 拓郎 | 0 | 男性 | 1929-01-12 | 90 | 251-0031 | 神奈川県藤沢市鵠沼藤が谷********** | S14027 | 20151227 | 0-00000000-0 |
1682 | CS013801000003 | 天野 拓郎 | 0 | 男性 | 1929-01-15 | 90 | 274-0824 | 千葉県船橋市前原東********** | S12013 | 20160120 | 0-00000000-0 |
7512 | CS001814000022 | 鶴田 里穂 | 1 | 女性 | 1929-01-28 | 90 | 144-0045 | 東京都大田区南六郷********** | S13001 | 20161012 | A-20090415-7 |
2379 | CS016815000002 | 山元 美紀 | 1 | 女性 | 1929-02-22 | 90 | 184-0005 | 東京都小金井市桜町********** | S13016 | 20150629 | C-20090923-C |
4681 | CS009815000003 | 中田 里穂 | 1 | 女性 | 1929-04-08 | 89 | 154-0014 | 東京都世田谷区新町********** | S13009 | 20150421 | D-20091021-E |
6306 | CS012813000013 | 宇野 南朋 | 1 | 女性 | 1929-04-09 | 89 | 231-0806 | 神奈川県横浜市中区本牧町********** | S14012 | 20150712 | 0-00000000-0 |
16071 | CS005813000015 | 金谷 恵梨香 | 1 | 女性 | 1929-04-09 | 89 | 165-0032 | 東京都中野区鷺宮********** | S13005 | 20150506 | 0-00000000-0 |
解説:
このコードは、df_customerデータフレームをbirth_day列で昇順にソートし、head()関数を用いて結果のデータフレームの最初の10行を選択しています。以下、コードの内訳を紹介します。
df_customer: これが使用されているデータフレームです。
[order(df_customer$birth_day),] : これは、df_customerデータフレームをサブセットしてすべての列を含むようにし、birth_day列の昇順で行をソートしています。order() 関数は、birth_day 列を昇順にソートするインデックスのベクトルを返します。これらのインデックスをデータフレームの行に [ 演算子 ] で適用すると、データフレームは誕生日カラムでソートされます。
head(., n = 10): head()関数を用いて、出来上がったデータフレームの最初の10行を選択しているところです。
つまり、このコードはdf_customerデータフレームをbirth_day列で昇順にソートし、head()関数を使用して結果のデータフレームの最初の10行を選択していることになります。このコードは、df_customerデータフレームの中で最も古い顧客を素早く確認したい場合に便利です。
R-018: 顧客データ(df_customer)を生年月日(birth_day)で若い順にソートし、先頭から全項目を10件表示せよ。
head( df_customer[order(df_customer$birth_day, decreasing = TRUE), ], n = 10 )
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd | |
---|---|---|---|---|---|---|---|---|---|---|---|
<chr> | <chr> | <chr> | <chr> | <date> | <int> | <chr> | <chr> | <chr> | <chr> | <chr> | |
15640 | CS035114000004 | 大村 美里 | 1 | 女性 | 2007-11-25 | 11 | 156-0053 | 東京都世田谷区桜********** | S13035 | 20150619 | 6-20091205-6 |
7469 | CS022103000002 | 福山 はじめ | 9 | 不明 | 2007-10-02 | 11 | 249-0006 | 神奈川県逗子市逗子********** | S14022 | 20160909 | 0-00000000-0 |
10746 | CS002113000009 | 柴田 真悠子 | 1 | 女性 | 2007-09-17 | 11 | 184-0014 | 東京都小金井市貫井南町********** | S13002 | 20160304 | 0-00000000-0 |
19812 | CS004115000014 | 松井 京子 | 1 | 女性 | 2007-08-09 | 11 | 165-0031 | 東京都中野区上鷺宮********** | S13004 | 20161120 | 1-20081231-1 |
7040 | CS002114000010 | 山内 遥 | 1 | 女性 | 2007-06-03 | 11 | 184-0015 | 東京都小金井市貫井北町********** | S13002 | 20160920 | 6-20100510-1 |
3671 | CS025115000002 | 小柳 夏希 | 1 | 女性 | 2007-04-18 | 11 | 245-0018 | 神奈川県横浜市泉区上飯田町********** | S14025 | 20160116 | D-20100913-D |
12494 | CS002113000025 | 広末 まなみ | 1 | 女性 | 2007-03-30 | 12 | 184-0015 | 東京都小金井市貫井北町********** | S13002 | 20171030 | 0-00000000-0 |
15978 | CS033112000003 | 長野 美紀 | 1 | 女性 | 2007-03-22 | 12 | 245-0051 | 神奈川県横浜市戸塚区名瀬町********** | S14033 | 20150606 | 0-00000000-0 |
5717 | CS007115000006 | 福岡 瞬 | 1 | 女性 | 2007-03-10 | 12 | 285-0845 | 千葉県佐倉市西志津********** | S12007 | 20151118 | F-20101016-F |
15098 | CS014113000008 | 矢口 莉緒 | 1 | 女性 | 2007-03-05 | 12 | 260-0041 | 千葉県千葉市中央区東千葉********** | S12014 | 20150622 | 3-20091108-6 |
解説:
このコードは、df_customerデータフレームをbirth_day列で降順にソートし、head()関数を使用して結果のデータフレームの最初の10行を選択しています。以下、コードの内訳を紹介します。
df_customer: これが使用されているデータフレームです。
[order(df_customer$birth_day, decreasing = TRUE), ]: これは、df_customer データフレームをサブセットして、すべての列を含むようにしますが、birth_day 列で行を降順にソートしています。order() 関数は、デフォルトでは birth_day 列を昇順でソートするインデックスのベクトルを返しますが、decreasing = TRUE を設定することで、代わりに降順でソートすることができます。これらのインデックスをデータフレームの行に [ 演算子 ] で適用すると、データフレームは birth_day 列で降順にソートされます。
head(., n = 10): head() : 出来上がったデータフレームの最初の10行を選択しているところです。
つまり、このコードはdf_customerデータフレームをbirth_dayカラムで降順にソートし、head()関数を使用して結果のデータフレームの最初の10行を選択していることになります。このコードは、df_customerデータフレームの中で最も若い顧客を素早く確認したい場合に便利です。
R-019: レシート明細データ(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭から10件表示せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合は同一順位を付与するものとする。
df_receipt[c("customer_id", "amount")] %>% mutate(ranking = min_rank(desc(amount))) %>% arrange(ranking) %>% slice(1:10)
customer_id | amount | ranking |
---|---|---|
<chr> | <int> | <int> |
CS011415000006 | 10925 | 1 |
ZZ000000000000 | 6800 | 2 |
CS028605000002 | 5780 | 3 |
CS015515000034 | 5480 | 4 |
ZZ000000000000 | 5480 | 4 |
ZZ000000000000 | 5480 | 4 |
ZZ000000000000 | 5440 | 7 |
CS021515000089 | 5440 | 7 |
CS015515000083 | 5280 | 9 |
CS017414000114 | 5280 | 9 |
解説:
このコードは、df_receipt データフレームから customer_id と amount という列を選択し、ranking という新しい列を追加して、取引金額による各顧客のランキングを示します(最も高い金額をランキング 1 とします)。以下、コードの内訳を紹介します。
df_receipt[c("customer_id", "amount")]: これは、df_receiptデータフレームをサブセットして、customer_idとamountカラムのみを含むようにしたものです。
%>%: これはパイプ演算子で、前の演算の出力を次の演算の入力として渡します。
mutate(ranking = min_rank(desc(amount))): これは、データフレームにrankingという新しい列を追加するもので、取引額による各顧客の順位を示しています。dplyrパッケージのmin_rank()関数は、ベクトル内の各値の最小順位を計算し、同点は任意に解消される。この関数を、マイナス(desc()関数)を取った後の金額列に対して、最高値のランクが1になるように適用することで、取引金額による顧客のランキングを得ることができます。
arrange(ranking) : データフレームをランキングの列で昇順にソートしています。
slice(1:10) : slice()関数を使用して、結果のデータフレームの上位10行を選択しています。
つまり、このコードは、df_receipt データフレームから customer_id と amount 列を選択し、ranking という新しい列を追加して、取引金額による各顧客のランキングを示し、ranking 列によってデータフレームをソートし、結果のデータフレームの上位10行を選択しています。このコードは、df_receiptデータ・フレームの取引金額による上位10人の顧客を素早く確認したい場合に便利です。
R-020: レシート明細データ(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭から10件表示せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合でも別順位を付与すること。
df_receipt[c("customer_id", "amount")] %>% mutate(ranking = row_number(desc(amount))) %>% arrange(ranking) %>% slice(1:10)
customer_id | amount | ranking |
---|---|---|
<chr> | <int> | <int> |
CS011415000006 | 10925 | 1 |
ZZ000000000000 | 6800 | 2 |
CS028605000002 | 5780 | 3 |
CS015515000034 | 5480 | 4 |
ZZ000000000000 | 5480 | 5 |
ZZ000000000000 | 5480 | 6 |
ZZ000000000000 | 5440 | 7 |
CS021515000089 | 5440 | 8 |
CS015515000083 | 5280 | 9 |
CS017414000114 | 5280 | 10 |
解説:
このコードは、"customer_id "と "amount "の列を含むdf_receiptというデータフレームに対して一連の処理を実行します。
以下、このコードが何をするのか、ステップ・バイ・ステップで説明します。
df_receipt[c("customer_id", "amount")] : df_receiptデータフレームから "customer_id "と "amount "のカラムのみを選択します。結果のデータフレームには、この2つのカラムだけが含まれます。
%>%: これはRのパイプ演算子で、データフレームに対する複数の操作を連鎖させるために使用されます。ある操作の出力は、次の操作の入力として渡されます。
mutate(ranking = row_number(desc(amount))): mutate関数を使って、データフレームに "ranking "という新しい列を作成します。ranking」列は「amount」列を基準とし、「amount」の最高値を「1」、2番目に高い値を「2」、といった具合にランク付けされる。desc関数は、"amount "カラムを降順にソートするために使用される。
arrange(ranking):データフレームを "ranking "カラムで昇順(1~n)にソートします。
slice(1:10) : ソートされたデータフレームの最初の10行を選択する(すなわち、"amount "値とそれに対応する "customer_id "値が最も大きい10行を選択する)。slice関数は、データフレームから行をサブセットするために使用されます。
要約すると、このコードは、データフレームから「customer_id」と「amount」列を選択し、「amount」値を降順でランク付けし、ランクによってデータフレームをソートし、上位10行(すなわち、「amount」値が最も高い10人の顧客)を選択する。
Comment