0
0

More than 1 year has passed since last update.

データ分析 フラグの立て方

Posted at

--- 内容 ---

  1. よく使うフラグの立て方
  2. 祝日のフラグの立て方(日本)

--- よく使うフラグの立て方 ---

  • maskメソッドを利用します。whereメソッドを利用した方法やfor文とif文を使って強引にやる方法もあるのですが、whereはFalseの時に実行を行うので分かりにくく、for文とif文で強引に行く方法はデータフレームを結合(concat)した際に欠損値が生じるケースがあるので使いにくいです。
    したがってmaskを利用する方が個人的には圧倒的にやりやすかったです。
    [参考]
  • where
  • whereとmaskのQiita記事
  • concat時の不整合

方法

方法は簡単で、初めに全行が0の新しいカラムを作る ➡ 条件に合致する箇所を1に変えるの順番になります。
maskの使い方は

df['column_name'] = 0
df['column_name'].mask(条件式, 代入する値, inplace=True)

代入する値はフラグを立てるだけなので1でいいでしょう。
inplaceはTrueでもFalseでも大丈夫です。(元のdfを変えるかどうかなので)
条件式はand, or, notではなく&, |, ~を使う点に注意してください。

--- 祝日フラグの立て方(日本) ---

  • jpholidayライブラリを使用します。.is_holidayは日付データを与えると祝日かどうかを判定してくれます。
    先ほど同様に全行が0のカラムを新しく作った後にfor文をぶん回して、at関数で代入してあげれば完了です。
    今回は下の様なテーブルを作ったとします。
df['holiday'] = 0
df.head(2)

【出力結果】

datetime holiday
1 2000-01-01 0
2 2000-01-02 0

あとはjpholidayをimportして、for文で行数分だけ代入するだけです。

import jpholiday
for i in range(df.shape[0]):
    df.at[i,'holiday'] = jpholiday.is_holiday(df["datetime"].iloc[i])

【出力結果】

datetime holiday
1 2000-01-01 True
2 2000-01-02 True

jpholidayでは元旦も祝日扱いとなります。
jpholiday
このままでは扱いずらいので、1をかけてあげれば0,1の形式に変わります。
(私の環境だけかもしれませんが、*1をしただけだとobject型のままなのでastypeでint型に直しています。)

df['holiday'] = (df['holiday'] *1).astype(int)

以上です。

0
0
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
0
0