今日のお弁当
- ステーキ
- キャベツとニンジンのカレー味噌炒め(2回目)
ポイント
ステーキは塩コショウ、しょうゆで味付け。お弁当用なのでニンニク入れない。
キャベツとニンジンのカレー味噌炒め(以前のブログ参照)
今日のお弁当
- 豚の角煮
- チャプチェ
ポイント
- 豚の角煮はこちらのサイトをそのまま作成。(豚は800gだけど。)
- チャプチェは牛肉、ニンジン、玉ねぎ、シイタケと春雨を炒める。
- 焼肉のタレ、コショウで味付け。(叙々苑の焼肉のたれを使用。ちょっと甘くなりすぎたかも。)
- 出版社/メーカー: 叙々苑
- メディア: 食品&飲料
- クリック: 2回
- この商品を含むブログを見る
WinAppDriverを利用してExcelを保存する場合の注意点。
Windows Application Driverを利用して、起動中のエクセルを保存するときに
はまったのでまとめておきます。
(環境設定については、いろいろな記事が出てるのでここでは割愛します。)
環境
- VisualStudio2017Community
- Office 2016
エクセル操作
テンプレートの取得
GitHubのUIRecorderのページからWinAppDriverのテンプレートプロジェクトを取得します。
WinAppDriver/Tools/UIRecorder/UIRecorderTemplate at master · Microsoft/WinAppDriver · GitHub
XPathの取得
WinAppDriverUiRecorderを起動してエクセルのXPathを取得します。
通常保存時にはこのような保存ダイアログが表示されます。
開いたディレクトリにそのまま保存する場合には問題ありません。
ただし保存先を変更しようとファイル名にC:\temp\hoge.xlsxなどをSendKeyで入力する必要がありますが、
実行するとファイル名にはC:]temp]hoge.xlsxと入力されてしまいます。
この原因はこちらのブログで紹介されているようにキーボードの問題のようです。
この問題(2018/1現在)は解消していないようなので、別の方法で入力します。 同僚の方に相談したところアドレスバーのパスは/でも行けると教えてもらったので
- アドレスバーをクリック
- SendKeyでc:/tempと打つ
- SendkeyでEnterを打つ
という感じで操作します。
保存時ダイアログのアドレスバーをクリックするコードです。
string xp1 = "/Pane[@Name=\"デスクトップ 1\"][@ClassName=\"#32769\"]/Window[@Name=\"Book1 - Excel\"][@ClassName=\"XLMAIN\"]/Window[@Name=\"名前を付けて保存\"][@ClassName=\"#32770\"]/Pane[@ClassName=\"ReBarWindow32\"]/Pane[@ClassName=\"Address Band Root\"]/ProgressBar[@ClassName=\"msctls_progress32\"]/Pane[@ClassName=\"Breadcrumb Parent\"]/ToolBar[@Name=\"アドレス: ドキュメント\"][@ClassName=\"ToolbarWindow32\"]"; var winElem1 = MyDesktopSession.FindElementByXPath(xp1); if (winElem1 != null) { winElem1.Click(); } else { Console.WriteLine($"Failed to find element {xp1}"); return; }
ちょっとXPathが長いですが、注目するのは最後の
/ToolBar[@Name=\"アドレス: ドキュメント\"][@ClassName=\"ToolbarWindow32\"]"で
Nameの部分に表示時のパスがついてきてしまいます。
Excel起動時にパスが異なると動かないので[@Name=\"アドレス: ドキュメント\"]の部分は削除します。
アドレスバーのクリックからパスの入力までやるこんな感じのコードになります。
string xp1 = "/Pane[@Name=\"デスクトップ 1\"][@ClassName=\"#32769\"]/Window[@Name=\"Book1 - Excel\"][@ClassName=\"XLMAIN\"]/Window[@Name=\"名前を付けて保存\"][@ClassName=\"#32770\"]/Pane[@ClassName=\"ReBarWindow32\"]/Pane[@ClassName=\"Address Band Root\"]/ProgressBar[@ClassName=\"msctls_progress32\"]/Pane[@ClassName=\"Breadcrumb Parent\"]/ToolBar[@ClassName=\"ToolbarWindow32\"]"; var winElem1 = MyDesktopSession.FindElementByXPath(xp1); if (winElem1 != null) { winElem1.Click(); } else { Console.WriteLine($"Failed to find element {xp1}"); return; } string xp2 = "/Pane[@Name=\"デスクトップ 1\"][@ClassName=\"#32769\"]/Window[@Name=\"Book1 - Excel\"][@ClassName=\"XLMAIN\"]/Window[@Name=\"名前を付けて保存\"][@ClassName=\"#32770\"]/Pane[@ClassName=\"ReBarWindow32\"]/Pane[@ClassName=\"Address Band Root\"]/ProgressBar[@ClassName=\"msctls_progress32\"]/ComboBox[@Name=\"アドレス\"][@ClassName=\"ComboBox\"]/Edit[@Name=\"アドレス\"][@ClassName=\"Edit\"]"; var winElem2 = MyDesktopSession.FindElementByXPath(xp2); if (winElem2 != null) { winElem2.SendKeys("c:/work"); winElem2.SendKeys(Keys.Enter); } else { Console.WriteLine($"Failed to find element {xp2}"); }
VS2017でRのTURF分析をやってみた。
最近TURF分析という言葉を初めて聞いたので、VS2017でR言語の環境を作り、 簡単なデータを分析してみました。
TURF分析とは
こちらのサイトによると『生活者へのリーチが最大になるような商品の組み合わせを得ることができる分析手法』とのこと。
R言語で書いてみる
こちらのサイトを参考にTURF分析パッケージのturfRを利用して実際に分析を実施してみます。
開発環境の作成
今回はVS2017Communityを利用するので、まずはVS2017でRを実行できるように、 R Tools for Visual Studioをインストールします。
- Visual Studio インストーラーを起動。
- [データ サイエンスと分析のアプリケーション] ワークロードを選択。
プロジェクトの作成
- ファイル→新規作成→プロジェクト から新しいプロジェクトを作成。 1.インストール済みからRを選択してRプロジェクトを選択。
パッケージのインストール
turf分析用パッケージturfRのインストールをします。
- R Tools→ウィンドウ→パッケージ もしくはCtrl+7でRパッケージマネージャーを開く。
- 検索ボックスにturfRと入力して検索。
- turfRを選択してインストールをクリック。
分析コードを書く。
参考サイトと同様に、turf関数を利用して分析してみます。
今回はサンプルデータではなく下記のようなDataFrameでデータを作成して分析してます。
respid | wgt | item1 | item2 | item3 | item4 | item5 |
---|---|---|---|---|---|---|
1 | 1 | 1 | 0 | 1 | 0 | 0 |
2 | 1 | 1 | 1 | 0 | 0 | 0 |
3 | 1 | 1 | 1 | 0 | 0 | 0 |
4 | 1 | 1 | 1 | 1 | 0 | 1 |
5 | 1 | 0 | 0 | 0 | 1 | 0 |
6 | 1 | 0 | 0 | 0 | 1 | 0 |
7 | 1 | 1 | 1 | 0 | 0 | 0 |
8 | 1 | 1 | 0 | 1 | 0 | 0 |
9 | 1 | 0 | 0 | 0 | 1 | 0 |
10 | 1 | 0 | 0 | 0 | 0 | 1 |
library(turfR) Respid <- 1:10 targetData <- data.frame( respid = Respid, wgt = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), item1 = c(1, 1, 1, 1, 0,0, 1, 1, 0, 0), item2 = c(0, 1, 1, 1, 0, 0, 1, 0, 0, 0), item3 = c(1, 0, 0, 1, 0, 0, 0, 1, 0, 0), item4 = c(0, 0, 0, 0, 1, 1, 0, 0, 1, 0), item5 = c(0, 0, 0, 1, 0, 0, 0, 0, 0, 1) ) ex1 <- turf(targetData , 5, 2) head(ex1$turf[[1]])
実行するにはCtrl+Aでコードを全選択し、Ctrl+Enterで対話型で実行できます。 実行結果はRインタラクティブウィンドウに表示されます。 今回の実行結果は
combo | rchX | frqX | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|---|
3 | 0.9 | 0.9 | 1 | 0 | 0 | 1 | 0 |
4 | 0.7 | 0.8 | 1 | 0 | 0 | 0 | 1 |
6 | 0.7 | 0.7 | 0 | 1 | 0 | 1 | 0 |
1 | 0.6 | 1.0 | 1 | 1 | 0 | 0 | 0 |
2 | 0.6 | 0.9 | 1 | 0 | 1 | 0 | 0 |
5 | 0.6 | 0.7 | 0 | 1 | 1 | 0 | 0 |
となって、Item1とItem4の組み合わせが良さそうです。
感想
始めてVS2017でR言語の環境を作ってTurf分析をやってみましたが、 これくらいのデータであれば思った以上に簡単に作成できました。