GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials -08/17- #65

Open GENZITSU opened 2 years ago

GENZITSU commented 2 years ago

Pythonで日本語の感情分析(Google Colab)

pymlaskを用いた感情分析の紹介

ML-Askは入力した文章から感情に関するキーワードを特定し、辞書によるパターンマッチングによって感情を推定 具体的には、「間投詞(例.すごい)」「擬態語(例.わくわく)」「下品な言葉(例.やがる)」「感嘆符(例. !, ?)」、そして「感情表現辞典(中村明 著)」に基づいて独自のデータベースを作成し、それを元にして感情を推定しています。

入出力の例

# from https://qiita.com/konitech913/items/317b452cc6c63894fce3

emotion_analyzer.analyze('ああ、生きているってありがたいこと。家へ帰るってうれしいものね')

{'activation': 'NEUTRAL',
 'emoticon': None,
 'emotion': defaultdict(list, {'yorokobi': ['ありがたい', 'うれしい']}),
 'intensifier': {'interjections': ['ああ']},
 'intension': 1,
 'orientation': 'POSITIVE',
 'representative': ('yorokobi', ['ありがたい', 'うれしい']),
 'text': 'ああ、生きているってありがたいこと。家へ帰るってうれしいものね'}
# from https://qiita.com/konitech913/items/317b452cc6c63894fce3

emotion_analyzer.analyze('あんたなんか大嫌いだわ!あんたみたいに下品で、失礼で、心無しの人、見たこともないわ!')

{'activation': 'NEUTRAL',
 'emoticon': None,
 'emotion': defaultdict(list, {'iya': ['下品', '大嫌い']}),
 'intensifier': {'exclamation': ['!'], 'interjections': ['なんか']},
 'intension': 2,
 'orientation': 'NEGATIVE',
 'representative': ('iya', ['下品', '大嫌い']),
 'text': 'あんたなんか大嫌いだわ!あんたみたいに下品で、失礼で、心無しの人、見たこともないわ!'}

どうもポジネガに加えて、感情の強さも抽出できるようだ。

コメント

このようなライブラリがあることを知らなかった。

出典

元記事

pymlask

GENZITSU commented 2 years ago

Tensorflow/Pytorch モデル移植のススメ

TensorflowとPytorchの対応関係が見やすく/わかりやすくまとめられている。 さすがrishigami...

ほぼ全ての資料を抜粋したいところだが、特に有用だったやつだけまとめておく。

スクリーンショット 2021-08-11 7 59 04 スクリーンショット 2021-08-11 7 59 04 スクリーンショット 2021-08-11 7 59 04 スクリーンショット 2021-08-11 7 59 04 スクリーンショット 2021-08-11 7 59 04 スクリーンショット 2021-08-11 7 59 04

コメント

マジモンっすね。
tfの方が学習が早いみたいなところあるので、使い所ありそうっていうのと、
timmのtf版とか作るのに結構良さげ。

出典

元記事

GENZITSU commented 2 years ago

backbone としての timm 入門

timmの基本的な使い方に加えて、ちょっと複雑なことをやる方法が紹介されていた。

headの無効化やpoolingの無効化をすることができる

スクリーンショット 2021-08-24 20 58 21

自分でモデルを組む際は、featureの情報を参照するのが良さそう。

スクリーンショット 2021-08-24 20 58 46

RGB画像ではないものについても適用可能で、in_chansを指定することでよしなにやってくれる。

スクリーンショット 2021-08-24 20 58 55

featuremapを取り出したり、poolingの仕方を変化させることも可能。

スクリーンショット 2021-08-24 20 59 03

コメント

timmをencoderとして物体検出やsegmentaionモデルをカスタムで作成する際に便利そう。

出典

元記事

GENZITSU commented 2 years ago

継続的なROI創出のためのMLOpsとガバナンス

AI活用の成熟化に伴う課題

スクリーンショット 2021-08-18 22 00 03
  1. シャドーAIの氾濫 スモールスタートゆえにモデル構築/デプロイプロセスが標準化されず、逆に非効率になる問題

各部署に我流・亜流のプロセスでモデルを構築・デプロイすることを許してしまう 部署のプロジェクトオーナーやデータサイエンティスト独自の判断だけで自由に構築されたモデル(シャドー AI)がビジネスに適用される状況となり、企業として AI 運用のリスクを管理できる状態ではなくなります。

  1. 煩雑なモデル管理と監視 モデルのバージョン管理/関しができない問題

複数のモデルがデプロイされるようになると、モデルのバージョニングや、一定の水準を満たした予測精度の監視が極めて困難になります モデル構築環境が異なり、モデルのバージョニングやモデルの管理がバラバラになってしまう 統合的な監視環境が準備できていない企業では、予測精度をそもそも監視することができない

  1. 運用担当者リソースの枯渇

    モデルのリリースは、ピークタイムが発生します。 一方で、運用担当者のリソースは簡単にスケールすることはできないため柔軟性が確保できない 現実解としてピーク時に対応可能な最小リソースで体制を構築する選択を採る企業が多い こうした状況は品質の低下、ガバナンスの崩壊、人材の離職などのリスクを増大させます。

対応策

  1. 信頼性の担保 承認フロー的なのを構築していく必要があるとのこと。

定められたプロセスに則りデプロイされる仕組みを構築する 「いつ、誰が、どのような観点でモデルとそのリスクを評価し、デプロイを判断するのか」というように、役割と責任の定義が明確化されていることが前提 インセンティブの異なるプロジェクトオーナー、プロジェクトマネージャー、データサイエンティスト(DS)、AI エンジニアが相互にチェックし合うプロセスを構築し、自社として標準化することができれば信頼性を十分に担保することができる

  1. 柔軟性の担保 開発環境に依存しない統一的なモデル管理の仕組みが必要

モデル構築に使われた開発環境を問わずに一元的にモデルを管理できる仕組みの構築と、運用中のモデルの精度をリアルタイムで統合的に監視しドリフト検知するためのインターフェースや機能を準備しなければなりません。

  1. 生産性の向上 運用者のタスクをいかにして減らすかが重要

生産性を向上させる鍵となるのは、タスクの自動化とその範囲の拡大 自動化は同時に属人化の排除にもつながり、離職リスクを抑制し、事業継続性を高める AI モデル構築の自動化には AutoML ツールの活用を検討する必要があり、デプロイの自動化には CI/CD といったパイプライン構築が必要

コメント

承認フローに関してはあまり同意できないものの、どういう基準であればデプロイする/しないはプロダクト側としっかり握る必要がありそうだ。

出典

元記事

GENZITSU commented 2 years ago

【ML Tech RPT.】第26回 Crowd Counting (群衆の数え上げ) を学ぶ

群衆の数え上げ問題に対する、代表的な3手法がまとめられている。

cround countingの難しさ

  1. occulusion問題

    相互に occulusion が発生するので、それを考慮した上でモデルを学習する必要がある 従来は、バウンディングボックスを与えて、それを元にモデルを学習していましたが、この方法では occulusion の問題に対処しにくいため、現在では点によるアノテーションのデータを用いることが多い

  2. 遠近効果

    同じ対象物を扱う場合でも、手前に写っている物体は大きく見え、奥に写っている物体は小さく見えることをうまくモデルに落とし込む必要がある

代表的な手法

  1. detection-then-count

    バウンディングボックスによるアノテーションが必須となります。 アノテーションが非常に大変であるという課題がつきまといます。 基本的にまず物体検知を行うため計算量が大きく、occulusion の問題に弱い そのため、対象物が比較的少ない場合にはうまくいく手法

  2. direct count regression

    直接対象物の数を回帰 するアプローチ 点によるアノテーションを用いたり、場合によっては明示的にそうしたアノテーションを利用しなかったりするので、アノテーションコストは detection-then-count の場合よりは抑えられる

  3. density map estimation

    現時点で一番性能が高いとされており主流のアプローチ 点によるアノテーションデータを利用

コメント

density map estimationが終わった後は、最終的に点(頂点?)の数を数えることになるのだろうか。
occulusion問題は点アノテーションで回避できるものの、occulusionしてるところの点とそうでない点も平等に扱うことになるのだろうか...?

出典

元記事

GENZITSU commented 2 years ago

PyTorchでの学習の進み具合をプログレスバーで表示してみる

pytorchの学習ループ中でtqdmを用いる方法の紹介
要点としては

tqdmのバージョンによって動かなくなること

tqdmのバージョンを4.38.0?では、 学習の途中で無限ループのような感じになった。 なので、tqdmのバージョンを上げて、4.43.0で実行すると、 きちんと動くようになった。

tqdmの引数にはエポック数や、分母の単位を設定して、set_postfixにみたい値を設定すれば良い模様。

引数のtotalに繰り返しの合計数などを入れ、繰り返し時にupdate(n)でバーをnだけ進めて行く。 引数のunitは入れた文字で処理速度の単位を変えることができる。 set_description(f"Epoch{epoch}/{num_epochs}")で、 バーの前側の部分に現在のepoch数と最終のepoch数、 trainかtestかを表示 set_postfix({"loss":running_loss.item(),"accuracy":accuracy })でバッチごとに学習またはテストした途中の段階でのlossと精度accuracyを更新

サンプルコード

# from https://www.msdd.info/entry/2020/03/26/190000

                with tqdm(total=len(dataloader[phase]),unit="batch") as pbar:
                    pbar.set_description(f"Epoch[{epoch}/{num_epochs}]({phase})")
                    for imgs,labels in dataloader[phase]:   
                        imgs,labels=imgs.to(device),labels.to(device)
                        output=model(imgs)
                        loss=criterion(output,labels)

                        if phase=="train":
                            optimizer.zero_grad()
                            loss.backward()
                            optimizer.step()

                        predicted=torch.argmax(output,dim=1) ## dimあってる?
                        corrects+=(predicted==labels).sum()
                        total+=imgs.size(0)

                        #loss関数で通してでてきたlossはCrossEntropyLossのreduction="mean"なので平均
                        #batch sizeをかけることで、batch全体での合計を今までのloss_sumに足し合わせる
                        loss_sum+=loss*imgs.size(0) 

                        accuracy=corrects.item()/total
                        running_loss=loss_sum/total
                        pbar.set_postfix({"loss":running_loss.item(),"accuracy":accuracy })
                        pbar.update(1)

コメント

自分で生のtraining loopを書く際に便利そう。
メトリクス監視用のライブラリとか使うことも可能だけどね

出典

元記事

GENZITSU commented 2 years ago

「画像認識機能を誤認させる攻撃」を科学者が実証、自動運転の脅威となる可能性

Optical Adversarial Attack Can Change the Meaning of Road Signsという論文の紹介記事

いわく、

パデュー大学のAbhiram Gnanasambandam氏らは衣類やバスケットボールのように凹凸のある物体や道路標識のように平らな物体に対し、ノイズの混ざった光線を照射して機械学習システムがどう認識するかを確かめる実験を実施

スクリーンショット 2021-08-19 21 14 00

「STOP」と表示された一時停止標識にOPADを行うことで、システムに「Speed 30」という制限速度標識であると認識させることにも成功

スクリーンショット 2021-08-19 21 14 09

100%成功するわけではない上に、光量が増えると攻撃成功率が下がるとのこと

Gnanasambandam氏らの実験では、64回行ったOPADのうち、31回でシステムを誤認させることに成功 Gnanasambandam氏らは「凹凸のある物体でOPADを成功させるのは難しいですが、平らな面のある物体はOPADにとって理想的です」と述べました。 ISO感度を上げて光量を増やすとシステムの認識精度も上がったことから、OPADは周囲が暗い夜間にのみ機能する可能性がある

一応、学習済みモデルにアクセスできる場合とできない場合を試しており、両方成功しているようだ。

今回の実験では、攻撃者がシステムの学習モデルにアクセスできた場合と、アクセスできずに自身で学習を行った場合を想定して行い、両方で成功した

コメント

光線で誤認識させられるのは実用性?高そう。 どこから照射したのかにもよるけど、普通に過ごしてたら気づかないだろうし。
現状、昼間での攻撃性能は低いものの、しばらくすれば昼でも動くものができそうだし...

出典

元記事

GENZITSU commented 2 years ago

Artificial Intelligence Incident Database

これまでのAIのやらかし事例が収集されているサイト。

最近の事例だと10代の黒人がブラックリストの別人と顔認識システムに間違われ、スケートリンクに入れなかった事例が報告されていた。

スクリーンショット 2021-08-19 21 14 09

コメント

結構いろんな事例が見つかるので、面白い。
反面教師としていきたい。

出典

元記事

GENZITSU commented 2 years ago

[ICML2021 論文読み会] A General Framework For Detecting Anomalous Inputs to DNN Classifiers

教師無しでDNNへの異常な入力を検知するフレームワークの提案。

スクリーンショット 2021-08-22 19 26 07

基本的にどのようなNNでも用いることがメタなアルゴリズム。 layer毎にクラスに基づく条件付き統計量を求める。

スクリーンショット 2021-08-22 19 26 18

こちらが提案手法 層毎に条件付き統計量を算出して、p値を計算していく感じ

スクリーンショット 2021-08-22 19 26 41 スクリーンショット 2021-08-22 19 26 54

コメント

教師無しで使えるのは良さそう。
クラスの条件付き統計量となると、segmnetaion系はどうなるんだろうか

出典

元記事

GENZITSU commented 2 years ago

【2020年新人研修資料】ナウでヤングなPython開発入門

poetry + pytest + formatter + mypy + github actionsをふんだんに盛り込んだ開発方針の紹介

スクリーンショット 2021-08-20 10 17 04

poertyでは開発用と配布用のパッケージを分けて管理することが可能

スクリーンショット 2021-08-20 10 18 55

poetryのテストではではカバレッジが出せるっぽい

スクリーンショット 2021-08-20 10 19 18

formatter関連

スクリーンショット 2021-08-20 10 19 37 スクリーンショット 2021-08-20 10 19 44 スクリーンショット 2021-08-20 10 19 51

github actions

スクリーンショット 2021-08-20 10 20 14 スクリーンショット 2021-08-20 10 20 27

コメント

github actionsで全部formatter, testやらせるのよいな...
真似できるところから真似していきたい。

出典

元記事

GENZITSU commented 2 years ago

Jupyter Lab 2.0の導入(2020年3月)

コードフォーマット機能が勉強になった

コードフォーマッターのBlackと、BlackをJupyterLabから利用するためのJupyterLab Code Formatterを導入します。

# from https://dev.infohub.cc/setup-jupyterlab-v200/

pip install black

# JupyterLab Code Formatterの導入
pip install jupyterlab_code_formatter

# JupyterLab Code Formatterのインストール
# 事前にNode.jsの導入が必要
jupyter labextension install @ryantam626/jupyterlab_code_formatter
jupyter serverextension enable --py jupyterlab_code_formatter

この後black用のキャッシュフォルダを作る必要があるとのこと

ただし、ディレクトリ名(19.10b0の部分)はBlackのバージョンによって変わる


# from https://dev.infohub.cc/setup-jupyterlab-v200/

mkdir %LocalAppData%\black\black\Cache\19.10b0


ショートカットの設定は以下のようにするとのこと

> - JupyterLabを起動(ブラウザが開く)
> - Settings> Advanced Settings Editor(Ctrl+,) > Keyboard Shortcutsを選択
> - 右側のUser Preferencesに次のコードを追加して保存

keysのところに好きなショートカットを割り当てれば良い。

from https://dev.infohub.cc/setup-jupyterlab-v200/

{ "shortcuts": [ // JupyterLab Code Formatter (black) { "command": "jupyterlab_code_formatter:black", "keys": [ "Ctrl K", "Ctrl D" ], "selector": ".jp-Notebook.jp-mod-editMode" } ], }



### コメント
jupyterlab上でもcodeformatterを使いたかったので、参考にしていきたい。

### 出典
[元記事](https://dev.infohub.cc/setup-jupyterlab-v200/)
GENZITSU commented 2 years ago

株式会社リクルート エンジニアコース新人研修の内容を公開します!(2021年度版)

毎年恒例の青いR社のエンジニア新卒研修の内容の公開。 昨年と比べてAWS系の研修がかなり多く増えた

気になった研修記事は以下

コメント

気になったものは個別にまとめていく予定。

出典

元記事

GENZITSU commented 2 years ago

AWS研修 VPC

VPCの作成方法や、各構成要素の意味がわかりやすくまとめられている。

スクリーンショット 2021-08-21 15 54 44 スクリーンショット 2021-08-21 15 54 58 スクリーンショット 2021-08-21 15 55 30 スクリーンショット 2021-08-21 15 55 47 スクリーンショット 2021-08-21 15 56 52

ネットワークACLとはインスタンスのセキュリティグループと似てはいるが、以下のような違いがある。
大きなところで言うと

スクリーンショット 2021-08-21 16 05 40 スクリーンショット 2021-08-21 15 57 00 スクリーンショット 2021-08-21 15 57 17

NATゲートウェイとはその名の通り、private IPをpublic IPへ変換するサービスのことを指す。

スクリーンショット 2021-08-21 15 57 33 スクリーンショット 2021-08-21 15 58 06 スクリーンショット 2021-08-21 15 58 33

コメント

めっちゃわかりやすい。

出典

元記事

GENZITSU commented 2 years ago

AWS研修 コンピューティング(EC2)とコンピューティング向けストレージ(EBS)入門

EBSに関して知らなかったことだけ抜粋。

EBSはAZを跨いで利用することができないので、スナップショットを介して持ち出す必要がある。

スクリーンショット 2021-08-21 16 22 52

パフォーマンスに関しては受け手のEC2インスタンス側の性能も大事になってくるとのこと

スクリーンショット 2021-08-21 16 23 10

コメント

ほへー

出典

元記事

GENZITSU commented 2 years ago

AWS研修 Amazon S3を使ったデータ保管

S3に関するアクセス制御方法の紹介がためになった。

スクリーンショット 2021-08-21 16 54 47 スクリーンショット 2021-08-21 16 54 57 スクリーンショット 2021-08-21 16 55 12 スクリーンショット 2021-08-21 16 55 20

意図しない公開を防ぐ仕組みが用意されている。

スクリーンショット 2021-08-21 16 55 43

リソースの外部公開には、大きく分けて2種類の方法がある

スクリーンショット 2021-08-21 16 56 04

使用しなくなったオブジェクトを削除する機構も存在する。

スクリーンショット 2021-08-21 16 56 40

コメント

S3のアクセス制御方法が分かりにくかったので、助かった。

出典

元記事

GENZITSU commented 2 years ago

AWS研修 Amazon RDS

RDSの非機能要件を向上させるための機能が紹介されている。

複数のAZにRDSを配置して、随時レプリケーションを行う。

スクリーンショット 2021-08-21 17 33 42

高性能を実現するためには、単純にスペックをあげるのと、読み込み処理の分散が良い

スクリーンショット 2021-08-21 17 34 23

自動バックアップや、cloud watchとの連携が大事

スクリーンショット 2021-08-21 17 34 36

セキュリティにはVPC対応などが必要

スクリーンショット 2021-08-21 17 34 44

コメント

勉強になる。

出典

元記事

GENZITSU commented 2 years ago

メルカリShopsのML立ち上げ奮闘記

MLチーム立ち上げに関する3つの施策についての紹介

採用

採用には時間がかかるので、メルカリShopsのMLチームでもまず先に採用に取り掛かりました。 社内でその必要性を理解してもらうことからはじめました。

MLに必要なスキルをリストアップし各スキルに対して、Bronze, Silver, Gold のレベルを定義。 同時にMLチームとしてのロードマップも作成。 これによってどの時期にどのようなスキルを持った人材が必要になるかを明確にしました。

スキルマップは採用の解像度を上げるためだけでなく、新しいメンバーが入ってきたときに互いに強みを把握するのにも役立つ

スクリーンショット 2021-08-22 10 12 58

社内でのブランディング

MLが力を発揮できるときに、プロダクトから離れてしまわないように、MLが関われるフェーズの前からブランディングを実施

スクリーンショット 2021-08-22 10 20 43

MLでできることをアピールするにはやはりなんといってもデモ。毎週の全社会のなかでデモの時間が設けられていたので、そこで積極的にMLを使った機能のデモを行いました。

ML基盤の選定・構築 – Vertex AI採用

MLの機能開発を始める前に、まず「時が来たときに最速で開発が行えるためのML基盤」の構築から行うことにしました

撰択肢としてはい以下

スクリーンショット 2021-08-22 10 22 24

たまたまvertex AIが発表されたので、それを使うことにしたとのこと。

コメント

採用に関する戦略が勉強になった。
フェーズごとにどんなスキルが必要になるかを描いておく必要がある。

出典

元記事

GENZITSU commented 2 years ago

M1Mac環境でDockerのMySQLを動かす

M1 Macでdockerを動かすときにbuildできずにはまった。 具体的には以下のようなメッセージがでてbuildが一向に進めなかった。

 => ERROR [internal] load metadata for docker.io/nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04             0.9s
------
 > [internal] load metadata for docker.io/nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: no match for platform in manifest sha256:18226195b9315f1ef7935ffe353159d6f62d89d1da085c776b23497f46d8e8e8: not found

解決方法としては、build時にplatformを明示的に指定する必要があるとのこと。

dockerコマンドの場合は以下を追加

--platform linux/x86_64

Dockerfileに記入する場合は以下

FROM --platform=linux/x86_64 mysql:8.0

docker-composeの場合は

version: "3"
services:
  db:
    image: mysql:8.0
    platform: linux/x86_64

コメント

めっちゃハマっていたので、助かった。

出典

元記事

GENZITSU commented 2 years ago

benabel/jupyter-isort

jupyter notebook上でisortを使うための拡張機能

実は最新のisortでは動かず、4.x.x系列じゃないと動かないのが注意。

コメント

こう言うコードを綺麗にする系の拡張は、入れていきたい。

出典

元記事

GENZITSU commented 2 years ago

drillan / jupyter-black

jupyter notebook上でblack formatterを使うための拡張。 こっちは特に何もせずに使えるようになる。

コメント

特になし

出典

元記事

GENZITSU commented 2 years ago

非deepで異常検知を行う手法の紹介

@shinmura0さんのツイートが勉強になったのでメモっておく。

パワー線図からうまく特徴量を抽出して、one class 異常検知を行うというもの。

・音源をFFT(STFT)して周波数-パワー線図を取得 ・この線図の重心(x,y座標)を取得(図参照) (重心の計算方法は以下参照 http://kakukikaku.com/zusin.html

・重心をプロットし、このプロット上でLOFもしくはIsolationForestを実行 ・図は、プロットの一例(学会で発表済) ・騒音が混じっているため異常音と正常音共通のプロットがあるが、ターゲット音の分布は異なる(矢印部分)

E9cgdODVUAA9jJB

E9chPXXVIAADFIt

重心法は、正常音が安定&一個の場合は強い。 DCASEのように正常音に多様性があり、雑音が支配的な場合は、弱い。

コメント

パワー線図からの特徴量で、やれるときはやれるというのは面白い。

出典

元記事

GENZITSU commented 2 years ago

Data-centricなML開発

Data-centricなML開発とは、モデルに学習させるデータを工夫して精度向上を行なっていく考え方

スクリーンショット 2021-08-23 20 52 43

具体的には各工程で以下のような点に気を付けていくこと

スクリーンショット 2021-08-23 20 53 13 スクリーンショット 2021-08-23 20 53 59 スクリーンショット 2021-08-23 20 54 37 スクリーンショット 2021-08-23 20 54 47 スクリーンショット 2021-08-23 20 55 01

実際のPJTでは以下のように進めていく

データ作成時はいかにアノテータに品質の高いデータを作ってもらうかに焦点を当てる。

スクリーンショット 2021-08-23 20 55 34 スクリーンショット 2021-08-23 20 55 51

エラー分析時は、モデルの予測結果とアノテーション結果を見比べて、改善点を探る。

スクリーンショット 2021-08-23 20 57 06 スクリーンショット 2021-08-23 20 57 27 スクリーンショット 2021-08-23 20 57 39

ML開発にはパラダイムシフトが来ており、データ作成はある種のコーディング作業であり、PJTを通してiterativeに行う必要があると述べられている。

スクリーンショット 2021-08-23 20 58 30

コメント

data-centric!!! とはうえ、データを作成するのには当然コストがかかるので、data-centric / model-centricのバランス感覚が大事。

今後MLチームの競争力は以下のような点になっていくんだろうか

出典

元記事

GENZITSU commented 2 years ago

データフレームに,祝日フラグを追加するライブラリを作成した

日付が含まれるデータフレームを入れると,祝日フラグを与えてデータフレームを返します。

引数には以下

  • 第一引数 => データフレーム
  • 第二引数 => データフレーム内の,日付が入っているカラム名
  • 第三引数 => 新しく作られる祝日フラグのカラム名 (デフォルト値がholiday)

使用感 どうも祝日だけではなく、土日のTrueとなってしまうようだ。 実際に祝日だけを撮りたい場合は、土日かどうかの情報が必要そうだ。

スクリーンショット 2021-08-24 16 39 38

コメント

土日もTrueになってしまうのが少し残念

出典

元記事

github

GENZITSU commented 2 years ago

pandas.DataFrameに祝日の特徴量を作る

jp_holidayの完全上位互換感あるライブラリ。

2021年8月現在でも更新が続いている上に、振替休日や休日の名前まで取得できる。

以下はREADME.mdからの貼り付け。

# from https://github.com/Lalcs/jpholiday

# 指定日の祝日名を取得
import jpholiday
import datetime
jpholiday.is_holiday_name(datetime.date(2017, 1, 1))
> '元日'
jpholiday.is_holiday_name(datetime.date(2017, 1, 2))
> '元日 振替休日'
jpholiday.is_holiday_name(datetime.date(2017, 1, 3))
> None

# 指定日が祝日か判定
import jpholiday
import datetime
jpholiday.is_holiday(datetime.date(2017, 1, 1))
> True
jpholiday.is_holiday(datetime.date(2017, 1, 2))
> True
jpholiday.is_holiday(datetime.date(2017, 1, 3))
> False

# 指定年の祝日を取得
import jpholiday
jpholiday.year_holidays(2017)
>[(datetime.date(2017, 1, 1), '元日'),
 (datetime.date(2017, 1, 2), '元日 振替休日'),
 (datetime.date(2017, 1, 9), '成人の日'),
 (datetime.date(2017, 2, 11), '建国記念の日'),
 (datetime.date(2017, 3, 20), '春分の日'),
 (datetime.date(2017, 4, 29), '昭和の日'),
 (datetime.date(2017, 5, 3), '憲法記念日'),
 (datetime.date(2017, 5, 4), 'みどりの日'),
 (datetime.date(2017, 5, 5), 'こどもの日'),
 (datetime.date(2017, 7, 17), '海の日'),
 (datetime.date(2017, 8, 11), '山の日'),
 (datetime.date(2017, 9, 18), '敬老の日'),
 (datetime.date(2017, 9, 23), '秋分の日'),
 (datetime.date(2017, 10, 9), '体育の日'),
 (datetime.date(2017, 11, 3), '文化の日'),
 (datetime.date(2017, 11, 23), '勤労感謝の日'),
 (datetime.date(2017, 12, 23), '天皇誕生日')]

# 指定月の祝日を取得
import jpholiday
jpholiday.month_holidays(2017, 5)
>[(datetime.date(2017, 5, 3), '憲法記念日'),
 (datetime.date(2017, 5, 4), 'みどりの日'),
 (datetime.date(2017, 5, 5), 'こどもの日')]

# 指定範囲の祝日を取得
import jpholiday
import datetime
jpholiday.between(datetime.date(2017, 1, 1), datetime.date(2017, 5, 3))
>[(datetime.date(2017, 1, 1), '元日'),
 (datetime.date(2017, 1, 2), '元日 振替休日'),
 (datetime.date(2017, 1, 9), '成人の日'),
 (datetime.date(2017, 2, 11), '建国記念の日'),
 (datetime.date(2017, 3, 20), '春分の日'),
 (datetime.date(2017, 4, 29), '昭和の日'),
 (datetime.date(2017, 5, 3), '憲法記念日')]

# 独自の休日を追加
import jpholiday
import datetime

class TestHoliday(jpholiday.OriginalHoliday):
    def _is_holiday(self, date):
        if date == datetime.date(2020, 2, 9):
            return True
        return False

    def _is_holiday_name(self, date):
        return '特別休暇'

jpholiday.is_holiday_name(datetime.date(2020, 2, 9))
> '特別休暇'

jpholiday.is_holiday(datetime.date(2020, 2, 9))
> True

# 独自の休日を削除
import jpholiday
import datetime

jpholiday.OriginalHoliday.unregister(TestHoliday)

コメント

u++さんから教えてもらいましたが、こっちのが良さそう。

出典

元記事

github