PythonのMLライブラリ、PyCaretを使ってみた
はじめに
よく、TwitterやLinkedInでデータサイエンスや機械学習の情報収集をしているのですが、こんなものを見つけました。
Announcing PyCaret 1.0.0
https://towardsdatascience.com/announcing-pycaret-an-open-source-low-code-machine-learning-library-in-python-4a1f1aad8d46
とりあえずどんなライブラリなのかサーっと記事を読んでみると、コードを全然書かなくてもモデルを作ることができる、AutoMLみたいなものだと思いました。
私も使用してみたいと思い、ライブラリをインストールしようとしましたがうまくいかなかったため、インストール方法も含めて使い方をメモとして残すことにしました。
私がPyCaretを動かした環境は、WindowsのローカルのJupyter Notebookです。
今回は、Macのパソコンでも同じ方法でできそうな気がします。
と、その前にまずはPyCaretが何かをもう少し詳しくまとめたいと思います。
PyCaretとは?
上記のサイトの記事のハイライト部分をそのまま翻訳すると...
(PyCaretは、)教師あり学習と教師なし学習のモデルをローコードで学習とデプロイするための、オープンソースのPython機械学習ライブラリ
とのことです。
ローコードという言葉をこのとき初めて見たのですが、最小限のソースコードまたはソースコードなしでソフトウェア開発を高速化するためのITツールのことだそうです。 *1
コードの見本を見てみると、モデルの作成やパラメーターチューニングといった各工程で作成するコードは、たった1行でできます。
公式サイトがあるので、URLのリンクを紹介します。
インストール方法
Anaconda Promptを開き、以下のコマンドを入力します。
pip install pycaret
一度このコマンドを実行すると分かると思いますが、たくさんのライブラリをインストールします。
途中でエラーが起きずに全てインストールできたならば問題ないですが、先に書いた通り、私の環境ではうまくいきませんでした。
最初に上記のコマンドを入力すると、私の環境ではいくつかのライブラリで以下のエラーが起きました。
Cannot uninstall '{library name}'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
新しいバージョンをインストールするときに古いバージョンのものを一度消しますが、その時にどのファイルがアンインストールするためのものかの判断がつかないため、アンインストールができないというエラーみたいです。
解決方法を探してみると、以下のブログを見つけました。
!Warning!:
この方法でもできるのかもしれませんが、私の環境ではうまくいかず、Anacondaの環境が死にました笑
なので、エラーが起きた場合は他の方法で解決することを推奨します。
後ほど紹介する方法の方が無難だと思うので、この段落の最後にURLだけ紹介します。
いくつかのライブラリは、上記のサイトの方法で解決しましたが、1つ問題が起きました。
tbbのライブラリを消したら自分の環境を破壊させてしまったようで、動かなくなってしまいました。
原因を調べてみると、tbbのライブラリを消したときにpandasのmetadataも消えたようです。
pandasを再インストールしてもKernelに接続できず、結局Anacondaの環境を一から作り直しました...笑
解決した後に他の方法も探したところ、環境によりますが以下の方法で解決できるみたいなので、URLだけ貼ります。
https://github.com/tensorflow/tensorflow/issues/30191
次回、同じエラーが起きたら上記のサイトにある方法で試してみようと思います。
使い方
このライブラリにはサンプルのデータセットがあるので、そのデータを使用しました。
まず、データの読み込みをします。
from pycaret.datasets import get_data # get_dataの引数が、用意されているデータセット # ちなみに、diabetesは日本語で糖尿病 diabetes = get_data('diabetes')
このデータはpandas.Dataframeであり、自分が用意したデータフレームももちろん読み込めるとのことです。
データを読み込んだら、次はデータの前処理です。
コードは以下の通りです。
# 今回のタスクは二値分類(分類問題)なので # こちらのモジュールをインポート from pycaret.classification import * # 回帰問題の場合は、代わりに以下の1行をインポート # from pycaret.regression import * # クラスタリングをしたい場合はこちらのモジュールを使用 # from pycaret.clustering import * # setupの第一引数はデータフレーム、第二引数は目的変数 exp1 = setup(diabetes, target = 'Class variable')
コード内のコメントで、何種類かのモジュールを紹介しましたが、公式ドキュメントを読んでみると、自然言語処理用や異常検知用のモジュールもあります。(凄すぎる...!)
上記のコードを入力してしばらく経つと、以下のアウトプットが出てきます。
ここで一度、各カラムのデータ型が正しく読み込めているかを確認します。
問題がなければエンターキーを押し、データ型を変えたい場合は画像の一番下にあるテキストボックスにquitと入力します。
エンターキーを押すと、前処理の結果が表示されます。
実際は、40くらいの項目で表示されますが、上から15の項目を抜粋しました。
画像の通り、最初の項目はデータフレームに関する情報で、欠損値の有無、数値型データの種類数などがあります。
その下の別の項目には、数値型データの欠損の補完方法、正規化したかが表示されています。
全ての項目を紹介しきれないので、ぜひ一度触って確認してみてください。
前処理が終わったら、どのモデルで予測するか決めます。
このとき、とても便利な関数を使用します。
compare_models()
この関数を使うと、各モデルで出したそれぞれの評価指数のスコアを、Accuracyが高い順に表示されます。
これらのスコアはK-foldで交差検証を行ったスコアで、デフォルトのfoldの数は10です。
関数の中に引数を入力することによって、foldの数を変えたり、優先して見る評価指数を指定することができます。
例えば、K-foldの数を5にして、優先して見たい評価指数をAUCとしたい場合は以下のようになります。
compare_models(fold=5, sort="AUC")
スコアを見比べて使用するモデルが決まったら、次はモデルの作成です。
今回は、LightGBMを使用してモデルを作成しました。
コードは以下の通りで、実行するとcompare_model()のときと同様に各評価指数のスコアが表示されます。
# 引数で使用するモデルを指定する lgbm = create_model('lightgbm')
もちろん他のモデルでも作成できるので、作成方法を一部まとめます。
# Logistic Regression logistic = create_model('lr') # Naives Bayes bayes = create_model('nb') # CatBoost catboost = create_model('catboost')
モデルを作成したら、以下のコードでモデルのチューニングを行います。
tuned_lgbm = tune_model('lightgbm')
モデルをチューニングした後にアウトプットとして評価指数の表が表示され、モデルを作成したときより精度が良くなっているのを確認することができます。
作成したモデルをアンサンブルしたり、スタッキングすることもできます。
# まずはモデルの作成 lgbm = create_model('lightgbm') catboost = create_model('catboost') # アンサンブル ensemble_models = blend_models(estimator_list = [lgbm, catboost]) # スタッキング # メタモデルを引数で指定しない場合、ロジスティック回帰モデルになる stacked_models = stack_models(estimator_list= lgbm, meta_model = catboost)
モデルが完成したら、モデルの評価を行います。
先ほどチューニングしたLGBMの評価をしたいと思います。
evaluate_model(tuned_lgbm)
上記のコードを実行すると画像のように15のボタンが表示され、見たい項目をクリックすると画面が切り替わります。
また、モデルの解釈をまとめたサマリーもプロットすることができます。
# こちらも先ほどチューニングしたモデルを使用
interpret_model(tuned_lgbm)
モデルの評価を確認したら、いよいよ予測です。
長々とブログの文章が続いていますが、ここまで書いた実行するのに必要なコードは10行未満です...!
では、モデルを使用して予測したいと思います。
# チューニングしたモデルを使用 # データは指定しなくても、setup()で前処理したものを使用 predictions = predict_model(tuned_lgbm) # 結果を出力 predictions
コードを実行すると、LabelとScoreという列が右側に増えたデータフレームが出力されます。
Labelは予測したラベルで、Scoreは予測値です。
以上で、基本的な使い方の説明は終わりですが、作成したモデルをクラウド上にデプロイしたり、モデルの保存もできるようです。
まとめ
データの読込みから予測まで、10行前後のコードでできました(恐るべし、PyCaret...!)
簡単に予測できるだけでなく、UIのデザインも良くて使いやすいです。
ただし、使用するモデルや評価指数の選択は知識が問われるので、なぜそのモデルを使用したのか、なぜその評価指数を採用したのかが重要になります。
また、最後に出力したデータフレームを見てみると、どうやらそんなに特徴量エンジニアリングはしていないようです。
なので、データサイエンティストという職はまだまだ必要とされそうです(安堵の表情)
AIオンラインLT#0全員リモート!?トライアル開催に参加しました
2020年4月16日、Deep Learning Labが主催したAIオンラインLT#0全員リモート!?トライアル開催というイベントに参加しました。
このイベントはタイトルにもある通り、オンライン(Microsoft Teams)での開催でした。
参加人数は100人以上で、LTのイベントとしては大規模なオンラインイベントかと思いますが、スムーズに進行していて普段のLTと特に変わりなかったです。
また、このイベントのコンセプトは"家にいよう"であり、新型コロナウイルスに感染していても無症状であるため、気付かずに外出して自分が感染源になってしまうことを防ぐ目的で、主催者の方々もオンラインで集まるというイベントでした。
イベントの会場でだけでなく、会場に向かうときに使用する電車などの公共交通機関でも感染のリスクがあるため、とても良い取り組みだと思います。
聞いていて内容が面白かったので、このイベントのLTを発表者ごとに内容をまとめたいと思います。
林 昌弘 さん (ノバシステム株式会社)
タイトル
あるSIerのAI取組報告
内容
- AIで何かやれと言われても、上層部を納得/理解させないといけない
- いざ、案件でAIを使用しようとしても...
1. 課題(目的、データ)がない
2. データがあるとしても、自由に使えない
3. 課題を仮定しても、解決したいことが曖昧
4. BtoBなので、お客さんごとに課題とデータのフォーマットが違う
5. データ分析に詳しい人がいない
- やってきたこと
1. 社内業務改善
オフィス受付の自動化
・はじめはPepperが受付⇒Webアプリ化
・顔検知、音声案内ができる
ドアセキュリティ
・入退室の解錠デバイスを顔認証に切り替えるために作成中
2. 社内案件への活用
社内パッケージのデータを活用
・飲食店向けパッケージには、注文データが蓄積されている
・店舗ごとにデータの質が違うが、それを活かして店舗ごとの解析はできそう
・データ分析用にデータを蓄積していないので、必要な情報が欠落している
3. 社内教育
データサイエンティストの育成
・自社のノウハウを教材としてアウトプット
・AIやデータ解析が分かる人を増やす
www.slideshare.net
スマホで見ている方はこちらからどうぞ↓
https://www.slideshare.net/MasahiroHayashi6/sierai-232143086?ref=https://dllab.connpass.com/event/173273/presentation/
増井 隆治さん (株式会社HACARUS)
タイトル
Deep Learningとスパースモデリング
内容
・Deep Learning・機械学習で学習しているもの = 関数
・予測値をどのように求めるかをデータから学習している
- スパースモデリング
・スパース=少ない、疎という意味
・どのような要因によって得られたかを求める
- スパースモデリングでできること
・Lassoによる特徴量選択
・MRIの高速撮影高精細化
・ブラックホール撮像での応用
- スパースモデリングでできることの例
・レントゲン撮像で本当に骨の部分だけを写す
- Deep Learningとスパースモデリングの融合
・VAE(Variational Autoencoder)のlatent codeをスパースにすることで、
解釈性が高く再利用のしやすいlatent codeになる
・過学習を防ぐことができる
・latent codeは、データの一部が変化しても変化した箇所以外の値は
変わらないというように、人間のような解釈をすることができる
スマホで見ている方はこちらからどうぞ↓
https://speakerdeck.com/hacarus/deep-learning-and-sparse-modelling
女部田 啓太さん (日本マイクロソフト株式会社)
タイトル
Data Drift によるモデル管理
内容
- 時間が経つにつれ、機械学習の精度がどんどん低くなる
理由:
新しいデータに追従できていない
⇒モデルの再構築が必要
- データドリフト = モデルにインプットするデータの変化 *1
- 運用中のモデル精度が分からないとき、データドリフトを見る
- データドリフトが発生するとき
1. データ計測方法の変更
2. データ品質の劣化
3. 季節性などの自然な変化
4. 設備の劣化、嗜好の変化
- Azure Machine Learningでデータドリフトをチェックできる
Azure Machine Learningとは...
・Python やRのコードを複数種類の環境で書ける
・scikit-learnやTensorFlow、Pytorchなどのライブラリが揃っている
- Azure Machine LearningでのData Driftの仕組み
1. 学習データと推論データを調べて、ドリフト検知
2. 検知したら、可視化してアラートを出す
3. 使用者がデータを見て、自分でモデルを改修して精度を上げる
- データドリフトの大きさや、特徴量ごとのドリフトへの影響を確認することができる
www.slideshare.net
スマホで見ている方はこちらからどうぞ↓
https://www.slideshare.net/keitaonabuta/datadrift-in-azure-machine-learning
まとめ
今回のLTでは、AIに関する業務の取り組みや手法、特徴量の変化の確認とモデルの管理方法を学びました。
実務に活かせそうな内容ばかりだったので、非常に為になりました。
PythonでPDFの表を読み込み、ExcelまたはCSVファイルで出力する
きっかけ
Tableauの使い方をマスターするために、埼玉県の公式サイトからデータを持ってきてデータ接続をしようとしました。
公表されているデータを、てっきりCSVファイルでダウンロードできると思っていましたが、ファイルがPDF形式。
表記ゆれを発見した上に、データの表が複数ページにまたがっていたので、Pythonで結合させて前処理をする必要がありました。
しかし、CSVファイルやExcelファイルを読み込んだことはありましたが、PDFファイルを読み込んだことは一度もありませんでした。
read_pdfなんてあるのかな、と思っているそこのあなた!
このブログで明らかになります。
使用するライブラリ
PDFファイルを読み込む方法を調べてみると、tabula-pyというライブラリを見つけました。
サイトにも書いてある通り、PDFにある表をpandasのDataFrameに変換し、CSVファイルやJSONファイルなどで出力できる優れものです。
公式サイトには書いてありませんが、Excelファイルの出力も可能です。(実証済み)
また、Google Colabで試したい方向けにNotebookが用意されています。
今回は、ローカルのJupyter Notebookでtabula-pyを使用したい方向けに、インストール方法、コードの書き方、エラーが起きたときの設定方法を紹介します。
インストール方法
Anaconda Promptを開き、以下のコマンドを入力します。
pip install tabula-py
これでインストールは完了です。
コードの書き方
最初に必要なライブラリを読み込み、read_pdfで読み込みます。
引数で、読み込みたいページ数が設定できます。
from tabula import read_pdf # pageという引数がallなので全てのページが読み込まれる df = read_pdf("sample.pdf", page="all") # この場合は、1~2ページ目と4ページ目が読み込まれる df1 = read_pdf("sample.pdf", page="1-2,4")
自動的に表の部分を読み込んでくれるらしいので、基本的にはページを指定するだけで十分かと思います。
公式ドキュメントを読んでいて、他に便利そうと思った引数があるので紹介します。
どのファイルでもそうですが、重要な情報が入っているPDFファイルには、開くときにパスワードを入力する必要な場合もあるかと思います。
その時に使える引数として、passwordという引数があります。
使い方は、以下の通りです。
from tabula import read_pdf # PDFを開くときに、abcdというパスワードが必要な時は以下で設定 # パスワードを直接入力するので、コードを他人に見せないように注意! df = read_pdf("sample.pdf", page="all", password="abcd")
パスワードつきのPDFをPythonで読み込んだことはないので、機会があればこの引数を使用してみたいです。
DataFrame型で読み込んだ後は、いつも通りPythonでいろいろいじることができます。
read_pdf()でエラーが起きたときの設定方法 (Windows版)
ここからは、read_pdf()で以下のエラーが起きたときの対処法を紹介します。
`java` command is not found from this Python process. Please ensure Java is installed and PATH is set for `java`
そもそも、このライブラリはtabula-javaというJavaのライブラリをPythonでラッパーしたものです。
なので、パソコンの設定でJavaをインストールしないと使えないというわけです。
Javaが入っていない方は、以下のサイトからインストーラーをダウンロードできます。
ダウンロードが完了したらインストールし、Javaのパスの設定をします。
ここから先の設定方法は、Windows向けです。
※ Macのパソコンは持っていなくて、やり方が分からないです...
まず、インストールしたJavaがちゃんと入っているかを確認します。
Windows 10の場合、C:\Program Files\Java にあるとのことです。
ちなみに私のパソコン(Surface Pro)は、C:\Program Files (x86)\Java にありました。
このJavaのフォルダの中に、Javaのバージョンが記載されているフォルダ名があると思います。
その中に、bin というフォルダがあることを確認し、binのフォルダを含めたファイルパスをコピーします。
以下は見本なので、自分の環境のパスをコピーしてください。
C:\Program Files (x86)\Java\jre1.8.0_241\bin
コピーしたら、次にJavaのパスの設定です。
まず、コントロールパネルを開き、以下のパスまで進みます。
コントロール パネル\システムとセキュリティ\システム
システムまで進んだら、ウインドウの左側に4つ項目があるかと思います。
その中の1つの、システムの詳細設定をクリックします。
クリックすると、別ウインドウでシステムのプロパティが設定できます。
開いたら、環境変数のボタンをクリックし、別ウインドウで環境変数を設定することができます。
開かれたウインドウの下半分がシステム環境変数用の設定画面であり、その中の Path (またはPATH) という変数を選択します。
選択したら、編集ボタンをクリックし、パスを追加するために新規をクリックします。
クリックしたらパスが入力できるようになるので、そこに先ほどコピーした binまでのファイルパスを貼り付けます。
貼り付けたら、OKをクリックしてウインドウを閉じ、その後もOKをクリックします。
これで、Javaのパスの設定は完了です!
設定した後は、一度パソコンを再起動させ、Jupyter Notebookを開くとread_pdf()が使えるようになります。
以上、エラーの対処法の説明です。
感想
PDFにある表を読み込む機会は、個人的にはほどんどないかもしれませんが、知っていて損はないライブラリだと思います。
パスの設定はちょっとめんどくさいですが、一度設定すれば基本的に設定をいじることがないかと思います。
あと、読み込んだファイルが前処理しやすいかはPDFファイル次第です笑
私がダウンロードした埼玉県の新型コロナウイルスの陽性確認者数の表は、複数ページにわたっていたので、ページごとにデータフレームが分かれてしまっていて(しかも何故かlist型だった)大変でした笑
Tableauで埼玉県におけるCOVID-19の陽性確認者のデータを可視化をしてみた(4/7/2020 9:40 pm 時点 公表データ)
はじめに
タイトルにある通り、埼玉県における新型コロナウイルスの陽性確認者のデータを可視化しました。
半年くらい前に会社でTableauのセミナーを受講したのですが、最近触っていませんでした。
Tableauは大量のデータを可視化するのに便利なツールなので、使いこなせるようになりたいと思い、この機会に新型コロナウイルスに関するデータを使用して練習、かつ、何か役に立ちたいと考えました。
なぜ、埼玉県のデータ?
ブログ筆者が埼玉県民だからです!
よく、ニュースでは東京都の感染者の情報は聞きますが、埼玉県の感染者についての情報はあまり聞きません。
東京に隣接しており、職場は東京だけど住んでいるのは埼玉という方も多いと思うので(ちなみに私がそうです)、埼玉県の感染者もそれなりにいるのでは、と思います。
全埼玉県民のためにも(?)、2020年4月7日 21時40分 時点で公表されている陽性確認者のデータを可視化しました。
今回使用したデータ
使用したデータは、埼玉県の公式サイトにある、陽性確認者一覧というPDF形式のデータです。
PDFファイルは、陽性確認者が増加するたびに更新されるため、ファイルがあるサイトのURLを貼ります。
データは、陽性確認者というサブタイトルのところに置いてあります。
データの前処理
PDFファイルをダウンロードした後は、Pythonで前処理をしました。
正直、Tableauでの可視化より大変でした...
今回は、Tableauがメインの記事なので、前処理の方法は別の記事で書きます。(今週中には書きます、読んでね)
データを読み込んだあとは表記ゆれを統一するだけで、データ自体はもちろんいじっていません。
Tableauでの可視化
Tableau Publicを使用したので、データはTableauのサイトにあります。
https://public.tableau.com/profile/maho.uchida#!/vizhome/COVID-19inSaitamaApr_72020/sheet3 *1
各グラフのタイトルにある通り、市町村別、日別陽性確認者数、性別×年代別で可視化しています。
グラフにカーソルを合わせると、詳しい数値を確認することができるのでとても便利です。
例えば、日別陽性確認者数のグラフで2020年4月5日の棒グラフ(または折れ線グラフ)にカーソルを合わせると、その日の陽性確認者数とその時点での累計陽性確認者数を見ることができます。
また、市町村別の陽性確認者数は地図で可視化しているため、一目でどの市にどのくらいの感染者がいるかが分かります。
使い方
Tableauの使い方は非常に簡単です。
今回は、Tableauのインストール、データの接続方法、グラフの表示を簡単にまとめます。
最初に、以下のサイトでメールアドレスを入れてTableau Publicをインストールします。
インストールが完了したらアプリケーションを開いて、左側にある"接続"という欄から接続(可視化)したいデータを選択します。
CSVファイルに接続したい場合は、テキストファイルを選びます。
データを選択した後は、各列のデータ型を確認し、必要に応じて列名を書き換えることができます。
データが整ったら、ワークシートに移動し、ワークシート上部にある行・列に、左側にあるディメンションまたはメジャーを入れるとグラフの作成ができます。
グラフの種類を変えたい場合は、右上の表示形式から変更することが可能ですが、変更する前に可視化するための条件に当てはまらないと変更できないようなので注意が必要です。
Tableauの使い方の説明は以上です。
公式サイトの説明は分かりやすく、今回のデータを可視化したときも参考にしたのでおすすめです。
感想
やはり、Tableauは便利だな、というのが正直な感想です。
Pythonではゴリゴリにコードを書かないと表示できないものが、サクサクと短時間で作成できます。
Tableau Publicなら無料で使用できるので、KaggleのデータなどでTableauの使い方をマスターすることもできます。
まだまだTableau初心者なので、これからも勉強します!
*1:追記(2020/9/13): データが古いため、2020/9/13に作成したものを紹介しますpublic.tableau.com
Linuxの便利コマンド、screenコマンドを使ってみた
会社の先輩から教えてもらったscreenコマンドが便利で、リモートワークをするときにとても役立つので、自分のメモとしてまとめます。
screenコマンドの役割と使い方は後述しますが、使ったことがない&初めて知った方はぜひ使ってみてください!
使うようになったきっかけ
新型コロナウイルスが流行し、3月上旬からリモートワークが始まるようになりました。
今まではローカル(Windows)でコードを動かしていたのですが、データに関するセキュリティの観点から、仮想環境(Linux)でコードを動かすことに。
仮想環境を立ち上げると同時に会社のSSHに接続するため(というより接続しないと動かせない)、コードを実行したあとに突然ネットワークの不調でSSHの接続が切れてしまうとなると、コードの実行も止まってしまいます。
業務ではなかなか処理が重いコードを動かしているため、一度接続が切れてしまうとやり直しをするのにも時間がかかっていました。
先週、定時近くにコードを動かしてしまい、SSHが切れないように業務用のノートパソコンの電源をつけっぱなしにしてもいいか会社の先輩に聞いたところ、Linuxのscreenコマンドを教えてもらいました。
screenコマンドとは
screenコマンドを使用すると、以下のことができます。
- シェルのセッションを保存できる
- 1つのSSHセッションで、複数のシェルウィンドウが開ける
- ネットワークが切断しても、シェルは動かしたままにできる
- シェルのセッションをアクティブにし続けていなくても、実行時間が長いプロセスを行うことができる
つまり、screenコマンドを使用してセッションを保存すれば、パソコンの電源を消してもコードを回すことができます。
また、SSHが突然切断してしまってもscreenセッション内で動かしていれば、プログラムの実行が中断されるようなことがなくなります。
後述するインストール方法と使い方では、Linuxのターミナルで動かすコマンドをまとめます。
インストール方法
会社用の仮想環境では既にインストール済み&勝手にいじってもダメなので、自分の仮想環境(Ubuntu)で試してみました。
このコマンドは、Debianでインストールをするときも同様のようです。
$apt install screen
同じLinuxでも、CentOSの場合は以下のコマンドでインストールするようです。
$yum install screen
これで、インストールは完了です。
使い方
インストール方法ではOSによって使用するコマンドが違いましたが、使い方で紹介するコマンドはUbuntu、Debian、CentOS全て共通です。
念のため言っておきますが、スクショの画像は自分のパソコン内の仮想環境のものです!笑
SSHに接続するときは普段通りにSSHコマンドを使用して、screenコマンドを使う前に接続しておきます。
ターミナルを立ち上げて準備ができたら、まず最初に新しいscreenセッションを作成します。
$screen
上記のコマンドを入力してもターミナルに何も変化がないように見えるかもしれませんが、既に新しいscreenセッションの中にいます。
この状態をAttachedといいます。
この状態で普段通りにpythonファイルを実行すると、screenセッション内でプログラムが実行されます。
実行したあとは、Ctrl + a を押し(この時点では画面は何も変わらないです)、dを入力すると以下の画像のように英文(detached from ~)が出てきます。
この英文が出てきたら、screenセッションから離れた状態になったことを表しています。
この状態をDetachedといいます。
Detachedになったら、SSHを切断したりパソコンの電源を消しても、screenセッション内でプログラムが実行し続けます。
作成したscreenセッションがどのような状態か確認したい場合は、以下のコマンドを入力します。
$screen -ls
すると、以下のような画像の文字が出力されます。
画僧の中にある、1800.pts-0.kali や 1765.pts-0.kali は、セッションIDです。
セッションIDは、screenコマンドで新しく作成した分だけ表示されます。
各セッションIDの横にある、(Attached) や (Detached) は、セッションの状態を表しています。
Detachedの状態のものをAttachedにしたい場合、以下のコマンドを入力します。
$screen -r {セッションID}
このコマンドを入力すると、選択したscreenセッションに再び入ることができます。
以上が基本的なscreenコマンドの使い方です。
第2回 データアーキテクト(データ整備人)を”前向きに”考える会に参加しました
2020年2月6日、株式会社エウレカで第2回 データアーキテクト(データ整備人)を”前向きに”考える会というイベントに参加しました。
analytics-and-intelligence.connpass.com
この会は、データ抽出・加工・整備を行うデータアーキテクトと呼ばれるポジションのスキルやノウハウについて発表者が話してみんなで考える会です。
現在、私はデータサイエンティストとして働いていますがデータの抽出や集計も業務の一部として行っているため、とても興味深くてぜひ参加したいと思い、応募しました。
この会は非常に人気なため、抽選でしたが当選したので参加することができました。
実際にお話を聞いてみて、共感したところや勉強になったことが多かったので、発表者ごとに内容をまとめたいと思います。
しんゆう さん
タイトル
抽出や集計の依頼を受ける時に気を付けていること
内容
- データ抽出を行うときは、
1. 依頼内容をしっかり聞き、
2. 具体的な納期を依頼者から確認し、
3. 依頼内容とデータを鵜呑みにしない
- データ抽出の目的は、データを使ってやりたいことを実現すること
- データ抽出の依頼を受けて本当に求められているのが、データ・分析・提案のどれなのか確認する
- データ抽出の依頼を受けたとき、"やっぱりこのデータも欲しい"というのを見越しておく
- データ自体の納期確認だけでなく、依頼者がいつまでに何が知りたいのかも聞く
スマホで見ている方はこちらからどうぞ↓
https://speakerdeck.com/shinu/maemuki-data-seibinin02
mida さん
タイトル
データエンジニアとデータアナリストを兼任して良かったこと
内容
- データの流れは、データソース⇒分析基盤⇒集計・分析⇒意思決定
- 分析要求の流れは、意思決定⇒集計・分析⇒分析基盤⇒データソース
- データエンジニアが担当するのは、データソースを分析基盤に落とすこと
- データアナリストが担当するのは、データの集計と分析を行って意思決定をすること
- データエンジニアとデータアナリストの前提知識が違うため齟齬が発生しやすく、作業のタイムロスが発生してしまう
- データエンジニアとデータアナリストを兼任していると、データを把握しているから、分析をするためのデータ加工や追加のデータ抽出などをスムーズに行うことができる
- チームで作業している場合、メンバーに対してデータの意味や分析の情報を同時に提供できる
www.slideshare.net
sotaron さん
タイトル
データの価値を失わないためのData Reliability Engineeringについて
内容
- データ整備も大事だが、正確な分析をするためにはデータ自体の品質や信頼性(= Reliability)も大事
- Data Reliability Engineering(DRE)の定義はどこかの機関が定めたわけではない
- sotaronさんにとってDREとは、以下を保つこと
1. データの完全性
2. データの一貫性
3. データの新鮮さ
4. データの可用性
- DREは、正しい意思決定をするために必要
- DREをするには、最初にサービスレベルの設計をして、開発・改善・モニタリングを繰り返す
スマホで見ている方はこちらからどうぞ↓
https://speakerdeck.com/tanakarian/detafalsejia-zhi-woshi-wanaitamefalsedata-reliability
ぶんけい さん
タイトル
意思決定に繋がる Intelligence とは
内容
- 世の中のデータ量が増加しているのに対して、国内のIT人材はまだ不足しているのに関わらず、経営者や上司を納得させないと意味がない
- 経営者や上司を納得させるには、+αの価値を提供できるようにする
- データを集めても、意思決定ができないとそのデータの価値は無い
- データを活用するためには、数値データと地図データといったような複数のデータを組み合わせ、誰が見てもすぐに言いたいことが分かるようにする(= Intelligence)
- Intelligence = Insight + Intuition
- ちょっとした工夫や作業でIntelligenceに
まとめ
この会では、各発表者からデータ抽出・加工だけでなく、データの運用や可視化のコツまで学ぶことができました。
今までデータアーキテクトについて深く考えずに業務をこなしてきたので、今回学んだことを活かしていきたいと思います。
ちなみに、connpassでは第3回 データアーキテクト(データ整備人)を”前向きに”考える会の参加者を募集しています。
人気のため抽選となっていますが、おすすめなのでぜひ。
私は次回も抽選枠で応募したので、また当たるのを願うばかりです、、、!
Python + OpenCVの勉強会に参加しました
2020年1月26日、日本マイクロソフト株式会社でPyLadies Tokyoが主催するPython + OpenCVの勉強会に参加してきました。
PyLadiesとは、Pythonが好きな女性のためのコミュニティであり、全世界に各支部があるそうです。
日本には、東京・京都・沖縄の3つの支部があるとご紹介がありました。
今回は、東京支部のmeetupということで、OpenCVをマスターしてインスタグラムやSNOWのように画像を加工して遊ぶという内容でした。
今までOpenCVを使用したことがありませんでしたが、基礎から丁寧に説明してくださったので非常に分かりやすかったです。
OpenCVとは何か、どのようにJupyter Notebook上でPythonコードを書くかを簡単にですがまとめたいと思います。
OpenCVとは
画像処理(色、サイズの編集や画像のnumpy/幾何学変換)や画像解析(特徴・物体検出)のためのオープンソースライブラリです。
加工した画像を、scikit-learnやKerasといった機械学習ライブラリと組み合わせることができ、人物検出などを行うことが可能です。
事前準備
OpenCVを使うためには、まずライブラリをインストールする必要があります。
私の場合は、Anaconda Promptを使用して以下のコマンドでインストールしました。
pip install opencv-python
ライブラリのインポート、ファイル読込みと表示
コードは以下の通りです。
# OpenCVのインポート import cv2 # 読み込んだ画像を表示させるために必要 import matplotlib.pyplot as plt # Jupyter Notebook上でインライン表示させる %matplotlib inline # 画像ファイルの読込 # "imgName.jpg"は読み込みたい画像のファイル名 img = cv2.imread("imgName.jpg") # 色空間の変換 (注1) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 画像ファイルの表示 plt.imshow(img_rgb) plt.show()
(注1) OpenCVはBGR空間(色の情報がBlue, Green, Redの順で保持)であるのに対し、matplotlibはRGB空間(Red, Green, Blue)なので変換が必要です。
変換せずに出力するとどうなるかは、ぜひ試してみてください。
グレースケール空間への変換
cv2.cvtColor()の関数を使用して他の色空間に変換することも可能です。
色空間は様々な種類がありますが、今回はグレースケール空間への変換の方法を紹介します。
画像をグレースケール空間に変換するということは、色の情報が必要のない処理において、色の情報を落とすことによってデータ量と処理を軽くするというメリットがあるとのことです。
上記のコードで読み込んだ画像(変数 img)をグレースケール空間へ変換して出力するコードは以下の通りです。
# 読み込んだ画像をモノクロにする gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # (注2) plt.imshow(cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)) plt.show()
(注2) 変数grayは既にモノクロだから色空間の変換が必要でないように見えますが、おそらくimshow()というBGR空間であるOpenCVの関数で表示させようとしているため、BGR空間からRGB空間に変換する必要があります。
ファイルの書き出し
OpenCVでファイルの書き出しを行うには、imwrite()という関数を使用します。
上記のコードでグレースケール空間に変換した画像を書きだそうと思います。
コードは以下の通りです。
# "gray.jpg"はファイル名、拡張子(.jpg)をつけ忘れない cv2.imwrite("gray.jpg", gray)
これで、モノクロに変換した画像がgray.jpgというファイル名で保存されます。
その他の画像加工テクニック
この記事の先頭の方に書いた通り、今回はOpenCVでインスタグラムやSNOWのように画像を加工するというイベントでした。
なので、画像にフィルターをかけたような色変換をしたり、bit変換を行ってネガポジ反転させる方法も学びました。
それぞれのコードの書きかたは以下の通りです。
# カラーマップ変換 # applyColorMap()関数で他のカラーマップに変換 # 今回はCOLORMAP_INFERNOというカラーマップに変換 # カラーマップは今回教えていただいたものだけでも15種類もある color_map = cv2.applyColorMap(img, cv2.COLORMAP_INFERNO) plt.imshow(cv2.cvtColor(color_map, cv2.COLOR_BGR2RGB)) plt.show()
# ネガポジ反転 # bitwise_not()関数で色の情報を反転 inversion = cv2.bitwise_not(img) plt.imshow(cv2.cvtColor(inversion, cv2.COLOR_BGR2RGB)) plt.show()
機械学習用の画像加工テクニック
勉強会では、エッジ検出のコードの書き方も教えていただきました。
機械学習でエッジ検出を行う場合は前処理をしてからの方が良いとのことです。
エッジ検出のアルゴリズムはいくつかあるみたいで、今回はCanny(キャニー)法を学びました。
OpenCVのサイトに理論が記載されてますので、ご紹介します。
以下がCanny法によるエッジ検出のコードになります。
# 0は最小閾値、80は最大閾値 # 閾値はCanny法検出内ので行われるヒステリシス式閾値処理に利用 # ヒステリシス式閾値処理については上記のサイトを参照 edge = cv2.Canny(img, 0, 80) plt.imshow(cv2.cvtColor(edge, cv2.COLOR_BGR2RGB)) plt.show()