参考
メモ
pacmanをgit bash上で使いたいと思ったのだが、git-sdkはいまいち。
Hyper-VでなくVMwareでDocker for Windows を使う に習った。
手元の環境は Windows + VMWare だったので、Vagrant + VMWareで環境を構築し、その中にDockerをインストールすることにした。
Get Docker Engine - Community for Ubuntu を参考に、dockerをインストールするようにした。 参考までに、Vagrantfileは以下のような感じである。 ubuntu18系をベースとしつつ、プロビジョニングの際にDockerをインストールする。
ただし、以下のVagrantfileのプロビジョニングでは、DockerサービスにTCPで接続することを許可するようにしている。 これはセキュリティ上問題があるため、注意して取り扱うこと。(あくまで動作確認程度に留めるのがよさそう)
Vagrantfile 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Vagrant.configure("2") do |config|
config.vm.define "docker-01" do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.network :private_network, ip: "172.16.19.220"
config.vm.hostname = "docker-01"
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
sed -i "s;fd://;tcp://0.0.0.0:2375;g" /lib/systemd/system/docker.service
SHELL
end
WSLなどから以下のようにすることで、VM内のDockerにアクセスできる。
1 | $ sudo docker --host tcp://172.16.19.220:2375 run hello-world |
環境変数として、DOCKER_HOSTを設定しておいても良いだろう。
kafka.clusterパッケージ以下には、Kafkaクラスタの情報を格納するためのクラス群が存在している。 具体的には以下の通り。
例えば Broker クラスについて。
case classである。
usageを確認すると、例えば以下のように
KafkaServer#createBrokerInfo
メソッド内で用いられている。
kafka/server/KafkaServer.scala:430 1
BrokerInfo(Broker(config.brokerId, updatedEndpoints, config.rack), config.interBrokerProtocolVersion, jmxPort)
わかりやすい例だと、PartitionやReplicaなどが挙げられる。
意外とまとまった説明は Kafka公式ドキュメント や Confluentドキュメント にはない。 Getting startedや運用面のドキュメントに一部含まれている。
丁寧なのは、 Clouderaのドキュメント(Kafka Administration Using Command Line Tools) である。
ConfluentドキュメントのAdminister章 には、ツールとしてのまとまりではなく、 Admin作業単位で説明があり、その中にいくつかツールの説明が含まれている。
kafka.admin
パッケージ以下にAminコマンドの実装が含まれている。
またそれらのクラスは、 bin以下に含まれている。
例えば、 kafka-log-dirs
コマンドでは、kafka.admin.LogDirsCommand
クラスが使われている、など。
6.4 Java Version の通り、JDK1.8の最新リリースバージョンを使うように、とされている。 2019/11/03時点の公式ドキュメントでは、LinkedInでは1.8u5を使っているとされているが…。
このあたりの記述が最も最近でいつ編集されたか、というと、 以下の通り2018/5/21あたり。
1 | commit e70a191d3038e00790aa95fbd1e16e78c32b79a4 |
あまり活発な議論はない。公式ドキュメントを参照せよ、というコメントのみ。 Jay Kepsによると2013年くらいはLinkedInでは1.6を使っていた、ということらしい。 順当に更新されている。
OpenML公式ドキュメント によると、以下の定義。
An open, collaborative, frictionless, automated machine learning environment.
OpenML公式ウェブサイト によると、
のレポジトリが提供されている。 これらはウェブサイトから探索可能。
Datasetが登録されると機械的にアノテーションされたり、分析されたりする。 パット見でデータの品質がわかるようになっている。
データセットに対する目標(と言ってよいのか。つまり識別、回帰など)、学習用、テスト用のデータのスプリット、 どのカラムを目的変数とするか、などが セットになったコンテナである。
機械的に読めるようになっている。
処理パイプラインはFlowとして登録され、再利用可能になる。 特定のTaskに紐づく処理として定義される。
フレームワークにひもづく。
OpenML APIを用いて実行ごとに自動登録される。
Pythonガイド を参考に試してみる。 一通り、Pandas、scikit-learn、openml、pylzmaをインストールする。 なお、あらかじめliblzma-devをインストールしておくこと。 詳しくは以下の「lzmaがインポートできない」節を参照。
実行に用いたpipenvの環境ファイル に用いたライブラリが載っている。
Pythonガイド を眺めながら進めようと思ったが、 https://openml.github.io/openml-python/develop/examples/introduction_tutorial.html のリンクが切れていた。 何となく見るとgithub.ioだったので探索してみたら、 github.ioのPythonガイド が見つかった。
こっちを参考にしてみる。
FlowとRunのチュートリアル を元に、チュートリアルを実施。 また特に、 公式Examples あたりを参考にした。 詳しくは、 dobachi openml_sklearn_example 内のnotebookを参照。
以下の内容のエラーが生じた。
1 | /home/dobachi/.local/share/virtualenvs/openml_sklearn_example-YW762zpK/lib/python3.7/site-packages/pandas/compat/__init__.py:85: UserWarning: Could not import the lzma module. Your installed Python is incomplete. Attempting to use lzma compression will result in a RuntimeError. |
lzma関連のlibをインストールしておいてから、Python環境を構築すること。
つまりpyenvとpipenvで環境構築する前にliblzma-devをインストールしておく。
1
$ sudo apt install liblzma-dev
歴史があり、情報が集まっている。 ドキュメントが中途半端なせいで、初見ではとっつきづらいかもしれないが、ライブラリひとつでデータ発掘・共有に始まり、処理パイプラインの機械化まで対応しているのは有益。
WSL / WSL2にインストールするには、 pyenvのGitHub の通り、以下のようにインストールする。
1 | git clone https://github.com/pyenv/pyenv.git ~/.pyenv |
Common-build-problems に載っているが、前提となるパッケージのインストールが必要なことに注意。
環境構築 - pipenv で Python 環境の構築方法 (2018年11月版) ではpipenvを使う前に、pyenvを使ってPython3最新環境を導入している。
自動インストール に自動インストール手順が記載されている。
上記の参考情報を見て試した。
まずOS標準のPython環境を汚さないため、pyenvを導入した。 導入手段は、 pyenvのインストール手順 を参照。
導入した後、pyenvを使ってPython3.7.5を導入する。 1
2
3$ pyenv install 3.7.5
$ pyenv global 3.7.5
$ pip install pipenv
さて、ここでpipenvを使おうとしたらエラーが生じた。 以下の参考に、 libffi-devを導入してPythonを再インストールしたらうまくいった。
https://stackoverflow.com/questions/27022373/python3-importerror-no-module-named-ctypes-when-using-value-from-module-mul
Pipenvことはじめ に大まかな使い方が載っている。
用途ごとに個別に開発されているライブラリを統合して使えるのは便利。エントリポイントが統一化され、
from automagica import *
ですべての機能が使えるのは画期的である。
しかし以下の点は少し課題を感じた。
docx ライブラリはそうだと思う)OpenWordDocument メソッドの戻り値は
docx.Document クラスのインスタンス。
しかし1個目の課題と関連するが、その使い方を想起させるドキュメントやAPI仕様に見えない。
Word activities以外ではどうなのか、は、細かくは未確認。AutomagicaのGetting started を参考にしつつ、動かしてみる。 Anacondaにはパッケージが含まれていなかった(conda-forge含む)のでpipenvを使って環境づくり。
1 | > pipenv.exe --python 3.7 |
なお、Python3.8系では依存関係上の問題が生じたので、いったん切り分けも兼ねて3.7で環境構築している。 AutomagicaのGetting started では、Tesseract4のインストールもオプションとして示されていたが、いったん保留とする。
Example 1 に載っていた例を動かそうとしたが、一部エラーが生じたので手直しして実行した。
エラー生じた箇所1:
ドキュメント上は、以下のとおり。 1
lookup_terms.append(ExcelReadCell(excel_path, 2, col))
しかし、行と列の番号で指定するAPIは、 ExcelReadRowCol
である。
また、例に示されていたエクセルでは1行目に検索対象文字列が含まれているため、第2引数は
2 ではなく、 1 である。 したがって、
1 | lookup_terms.append(ExcelReadRowCol(excel_path, 1, col)) |
とした。 なお、ExcelReadCellメソッド、ExcelReadRowColメソッドの実装は以下の通り。(2019/10/24現在)
automagica/activities.py:639 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15def ExcelReadCell(path, cell="A1", sheet=None):
'''
Read a cell from an Excel file and return its value.
Make sure you enter a valid path e.g. "C:\\Users\\Bob\\Desktop\\RPA Examples\\data.xlsx".
The cell you want to read needs to be defined by a cell name e.g. "A2". The third variable
is a string with the name of the sheet that needs to be read. If omitted, the
function reads the entered cell of the active sheet.
'''
workbook = load_workbook(path)
if sheet:
worksheet = workbook.get_sheet_by_name(sheet)
else:
worksheet = workbook.active
return worksheet[cell].value
automagica/activities.py:656 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16def ExcelReadRowCol(path, r=1, c=1, sheet=None):
'''
Read a Cell from an Excel file and return its value.
Make sure you enter a valid path e.g. "C:\\Users\\Bob\\Desktop\\RPA Examples\\data.xlsx".
The cell you want to read needs to be row and a column. E.g. r = 2 and c = 3 refers to cell C3.
The third variable needs to be a string with the name of the sheet that needs to be read.
If omitted, the function reads the entered cell of the active sheet. First row is defined
row number 1 and first column is defined column number 1.
'''
workbook = load_workbook(path)
if sheet:
worksheet = workbook.get_sheet_by_name(sheet)
else:
worksheet = workbook.active
return worksheet.cell(row=r, column=c).value
エラーが生じた箇所2:
ドキュメント上では、読み込んだ文字列のリストをそのまま使っているが、
そのままではリスト後半に None が混ざることがある。
そこで、リストをフィルタするようにした。
1 | lookup_terms = list(filter(lambda x: x is not None, lookup_terms)) |
エラーが生じた箇所3:
ドキュメント上では、以下の通り。
1 | ExcelWriteCell(excel_path, row=i+2, col=j+2, write_value=url) |
これも読み込みの場合と同様にAPIが異なる。合わせて引数名が異なる。そこで、
1 | ExcelWriteRowCol(excel_path, r=i+2, c=j+2, write_value=url) |
とした。
日常生活の簡単化のために使用。 【超便利】PythonとSeleniumでブラウザを自動操作する方法まとめ を試す。
Condaを使って環境を作り、seleniumをインストールした。 WebDriverは自分の環境に合わせて、Chrome77向けのものを使用したかっただが、 WSLでChromeを使おうとすると、--no-sandboxをつけないと行けないようだ。 詳しくは、 ブラウザのヘッドレスモードでスクショ 及び 【WSL】にFirefox&Google-Chromeをインストールする方法! を参照。
geckodriver を使うことにした。
また、当初は 【超便利】PythonとSeleniumでブラウザを自動操作する方法まとめ を参考にしようとしたが、 途中から PythonからSeleniumを使ってFirefoxを操作してみる を参考にした。
動作確認ログは、 selenium_getting_started を参照。