

データサイエンティスト協会の100本ノックがGitHubに公開しているデータとPythonコードを初心者にでも分かるように解説していきます。
今回は45~51本です。内容は主に、「日付データの処理」について解説していきます。
Pythonの環境設定は以下の記事を参考にして下さい。
【2021年最新】M1 mac でanacondaをインストールする方法
【2021年最新】WindowsでAnacondaをインストールする方法
- 日付データを処理する方法
- P-045: 顧客データフレーム(df_customer)の生年月日(birth_day)は日付型(Date)でデータを保有している。これをYYYYMMDD形式の文字列に変換し、顧客ID(customer_id)とともに抽出せよ。データは10件を抽出すれば良い。
- P-046: 顧客データフレーム(df_customer)の申し込み日(application_date)はYYYYMMDD形式の文字列型でデータを保有している。これを日付型(dateやdatetime)に変換し、顧客ID(customer_id)とともに抽出せよ。データは10件を抽出すれば良い。
- P-047: レシート明細データフレーム(df_receipt)の売上日(sales_ymd)はYYYYMMDD形式の数値型でデータを保有している。これを日付型(dateやdatetime)に変換し、レシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。データは10件を抽出すれば良い。
- P-048: レシート明細データフレーム(df_receipt)の売上エポック秒(sales_epoch)は数値型のUNIX秒でデータを保有している。これを日付型(dateやdatetime)に変換し、レシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。データは10件を抽出すれば良い。
- P-049: レシート明細データフレーム(df_receipt)の売上エポック秒(sales_epoch)を日付型(timestamp型)に変換し、”年”だけ取り出してレシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。データは10件を抽出すれば良い。
- P-050: レシート明細データフレーム(df_receipt)の売上エポック秒(sales_epoch)を日付型(timestamp型)に変換し、”月”だけ取り出してレシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。なお、”月”は0埋め2桁で取り出すこと。データは10件を抽出すれば良い。
- P-051: レシート明細データフレーム(df_receipt)の売上エポック秒(sales_epoch)を日付型(timestamp型)に変換し、”日”だけ取り出してレシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。なお、”日”は0埋め2桁で取り出すこと。データは10件を抽出すれば良い。
日付データを処理する方法
まずは、以下からダウンロードして下さい。
P-045: 顧客データフレーム(df_customer)の生年月日(birth_day)は日付型(Date)でデータを保有している。これをYYYYMMDD形式の文字列に変換し、顧客ID(customer_id)とともに抽出せよ。データは10件を抽出すれば良い。
import pandas as pd df_customer = pd.read_csv("customer.csv") # データを読み込む pd.concat([df_customer["customer_id"], pd.to_datetime(df_customer["birth_day"]).dt.strftime("%Y%m%d")], axis = 1).head(10)
日付データを処理している「pd.to_datetime」を詳しくみてみましょう。
P-046: 顧客データフレーム(df_customer)の申し込み日(application_date)はYYYYMMDD形式の文字列型でデータを保有している。これを日付型(dateやdatetime)に変換し、顧客ID(customer_id)とともに抽出せよ。データは10件を抽出すれば良い。
pd.concat([df_customer["customer_id"], pd.to_datetime(df_customer["application_date"])], axis=1).head(10)
回答にあるコードはこうであるが、実行すると、、、
回答にあるコードを実行しても、出力結果は回答とは違います。
日付だけのデータになっておらず、よく分からない数値になっている。
なので、日付データを明確に指定してみましょう。
上手くいきました。回答にある出力結果と同じになりました。
回答にあるコードと出力結果が違うこともあるみたいですね。ヴァージョンの違いなどがあるかもしれません。
P-047: レシート明細データフレーム(df_receipt)の売上日(sales_ymd)はYYYYMMDD形式の数値型でデータを保有している。これを日付型(dateやdatetime)に変換し、レシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。データは10件を抽出すれば良い。
df_receipt = pd.read_csv("receipt.csv") # データを読み込む pd.concat([df_receipt[["receipt_no","receipt_sub_no"]], pd.to_datetime(df_receipt["sales_ymd"].astype("str"))],axis=1).head(10)
P-048: レシート明細データフレーム(df_receipt)の売上エポック秒(sales_epoch)は数値型のUNIX秒でデータを保有している。これを日付型(dateやdatetime)に変換し、レシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。データは10件を抽出すれば良い。
pd.concat([pd.to_datetime(df_receipt["sales_epoch"],unit="s"), df_receipt[["receipt_no","receipt_sub_no"]]],axis=1).head(10)
出力結果は上のようになります。
もう少し、1行目のコードを詳しくみてみましょう。
エポック数は日付データを数値データとして、足したり引いたりする場合には都合が良いかもしれません。しかし、日付データなのか、エポック数なのかを確認し、分析に応じた処理が必要ですね。
P-049: レシート明細データフレーム(df_receipt)の売上エポック秒(sales_epoch)を日付型(timestamp型)に変換し、”年”だけ取り出してレシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。データは10件を抽出すれば良い。
pd.concat([pd.to_datetime(df_receipt["sales_epoch"],unit="s").dt.year, df_receipt[["receipt_no","receipt_sub_no"]]],axis=1).head(10)
「df.year」を付けるだけで、年だけのデータを抽出できます。
P-050: レシート明細データフレーム(df_receipt)の売上エポック秒(sales_epoch)を日付型(timestamp型)に変換し、”月”だけ取り出してレシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。なお、”月”は0埋め2桁で取り出すこと。データは10件を抽出すれば良い。
pd.concat([pd.to_datetime(df_receipt["sales_epoch"],unit="s").dt.strftime("%m"), df_receipt[["receipt_no","receipt_sub_no"]]],axis=1).head(10)
P-051: レシート明細データフレーム(df_receipt)の売上エポック秒(sales_epoch)を日付型(timestamp型)に変換し、”日”だけ取り出してレシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに抽出せよ。なお、”日”は0埋め2桁で取り出すこと。データは10件を抽出すれば良い。
pd.concat([pd.to_datetime(df_receipt["sales_epoch"],unit="s").dt.strftime("%d"), df_receipt[["receipt_no","receipt_sub_no"]]],axis=1).head(10)
前問にあった月だけの抽出方法と同じですね。”%m” を”%d” に変更するだけです。
データサイエンティスト協会の100本ノックを解説|ダウンロードから読み込みまで
データサイエンティスト協会の100本ノックを解説|データの抽出
データサイエンティスト協会の100本ノックを解説|変数の一部を使ってデータを抽出する
データサイエンティスト協会の100本ノックを解説|ソート(順序で整列)
データサイエンティスト協会の100本ノックを解説|グループ分け
データサイエンティスト協会の100本ノック|新たなデータフレームの作成
コメント