Featured image of post [R & SQL] 演習問題一覧

[R & SQL] 演習問題一覧

当サイトで紹介している R と SQL の演習問題一覧です。

  • 各設問は、以下の 3 種類のコードを書くというスタイルです。
    • Rコード (データフレーム操作)
    • Rコード (データベース操作)
    • SQLクエリ
  • の数は難易度を表します。(3 種類のコードから総合的に判定しています。)

全て (番号順)

データサイエンス実践ドリル

A-901: 演習問題のサンプル
この問題はデータフレームの結合に関するものです。次の条件を満たすコードを作成してください。

  • 各顧客の最新の購入日を取得する
  • 結果を顧客IDと最新の購入日を含むデータフレームとして出力する

A-902: 演習問題のサンプル
注文データを基に、1日の各時間帯 (0時〜23時) の注文数を集計してください。さらに、以下の条件を満たすようにしてください。

  1. 時間帯ごとの注文数の割合を算出する
  2. 結果を時間ごとに昇順で並べる

A-903 : 演習問題のサンプル
各商品について、一度購入した後に再度購入した顧客の割合 (リピート率) を計算してください。リピート率の高い順に並べ、以下の条件を満たしてください。

  • 購入履歴データを用いる
  • 顧客単位でリピートの有無を判定する

A-904 : 演習問題のサンプル
売上データにおいて、各商品の販売数の中央値から大きく外れている異常値 (中央値の3倍以上) を検出してください。さらに、次の条件を満たしてください。

  1. 異常値を含む商品のIDを取得する
  2. 検出結果をデータフレームとして出力する

A-905 : 演習問題のサンプル
全購入データを基に、特定の期間 (例: 過去3か月) に初めて購入した新規顧客の割合を計算してください。次の条件を満たしてください。

  1. 新規顧客の判定基準を最初の購入日とする
  2. 期間内の総顧客数に対する割合を算出する
顧客データ(customer)の年齢(age)をもとに10歳刻みで年代を算出し、顧客ID(customer_id)、生年月日(birth_day)とともに10件表示せよ。ただし、60歳以上は全て60歳代とすること。年代を表すカテゴリ名は任意とする。

データサイエンス100本ノック+α

レシート明細データ(receipt)に対し、店舗コード(store_cd)ごとに商品コード(product_cd)の最頻値を求め、10件表示させよ。
レシート明細データ(receipt)に対し、顧客ID(customer_id)ごとに売上金額(amount)を合計して全顧客の平均を求め、平均以上に買い物をしている顧客を抽出し、10件表示せよ。ただし、顧客IDが"Z"から始まるものは非会員を表すため、除外して計算すること。
顧客データ(customer)とレシート明細データ(receipt)から、顧客ごとの売上金額合計を求め、10件表示せよ。ただし、売上実績がない顧客については売上金額を0として表示させること。また、顧客は性別コード(gender_cd)が女性(1)であるものを対象とし、非会員(顧客IDが"Z"から始まるもの)は除外すること。
レシート明細データ(receipt)から、売上日数の多い顧客の上位20件を抽出したデータと、売上金額合計の多い顧客の上位20件を抽出したデータをそれぞれ作成し、さらにその2つを完全外部結合せよ。ただし、非会員(顧客IDが"Z"から始まるもの)は除外すること。
全ての店舗と全ての商品を組み合わせたデータを作成したい。店舗データ(store)と商品データ(product)を直積し、件数を計算せよ。
レシート明細データ(receipt)の売上金額(amount)を日付(sales_ymd)ごとに集計し、前回売上があった日からの売上金額増減を計算せよ。そして結果を10件表示せよ。
レシート明細データ(receipt)の売上金額(amount)を日付(sales_ymd)ごとに集計し、各日付のデータに対し、前回、前々回、3回前に売上があった日のデータを結合せよ。そして結果を10件表示せよ。

レシート明細データ(receipt)と顧客データ(customer)を結合し、性別コード(gender_cd)と年代(ageから計算)ごとに売上金額(amount)を合計した売上サマリデータを作成せよ。性別コードは0が男性、1が女性、9が不明を表すものとする。

ただし、項目構成は年代、女性の売上金額、男性の売上金額、性別不明の売上金額の4項目とすること(縦に年代、横に性別のクロス集計)。また、年代は10歳ごとの階級とすること。

043で作成した売上サマリデータ(sales_summary)は性別の売上を横持ちさせたものであった。このデータから性別を縦持ちさせ、年代、性別コード、売上金額の3項目に変換せよ。ただし、性別コードは男性を “00”、女性を “01”、不明を “99” とする。
顧客データ(customer)の生年月日(birth_day)は日付型でデータを保有している。これをYYYYMMDD形式の文字列に変換し、顧客ID(customer_id)とともに10件表示せよ。
レシート明細データ(receipt)の売上日(sales_ymd)はYYYYMMDD形式の数値型でデータを保有している。これを日付型に変換し、レシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに10件表示せよ。
顧客データ(customer)の郵便番号(postal_cd)に対し、東京(先頭3桁が100〜209のもの)を1、それ以外のものを0に二値化せよ。さらにレシート明細データ(receipt)と結合し、全期間において売上実績のある顧客数を、作成した二値ごとにカウントせよ。

レシート明細(receipt)データの売上金額(amount)を顧客ID(customer_id)ごとに合計し、その合計金額の四分位点を求めよ。その上で、顧客ごとの売上金額合計に対して以下の基準でカテゴリ値を作成し、顧客ID、売上金額合計とともに10件表示せよ。カテゴリ値は順に1〜4とする。

最小値以上第1四分位未満 ・・・ 1を付与
第1四分位以上第2四分位未満 ・・・ 2を付与
第2四分位以上第3四分位未満 ・・・ 3を付与
第3四分位以上 ・・・ 4を付与

最終更新 2025-04-18