今日のお弁当

久しぶり

f:id:ita_87:20190423125210j:plain

ポイント

  • 小さいタケノコを買ったのでほぼあく抜きせず、そのまま炊き込む。
  • お米二合にしょうゆ、みりん大さじ2と2分の1、水は炊飯器のラインで。(だしを入れ忘れてあっさり炊き込みに。。)
  • 庭でとれた木の芽を添える。

今日のお弁当

f:id:ita_87:20190205141551j:plain

ポイント

  • パン粉までつけて冷凍していたとんかつを解凍してフライパンに浅めの油で揚げる。
  • 揚げたかつをバットに上げて、余分な油を捨てて玉ねぎを半分薄切りにして炒める。
  • 油が回ったら、フライパンに直接酒、みりん、しょうゆを入れアルコールを飛ばす。
  • 水と顆粒のだしの素を入れ切ったかつをのせる。
  • 卵2個をとき入れて、少し固めに仕上げる。
  • お弁当用なので汁はなるべく少な目に。
  • 15分くらいで完成。

今日のお弁当

  • とんかつ
  • キャベツとニンジンのカレー味噌炒め

f:id:ita_87:20190125125154j:plain

ポイント

  • とんかつは塩コショウ、バッター液とパン粉をつけた状態で冷凍したものを揚げた。
  • 冷凍したからなのか、バッター液だからか衣がカリカリで好み。

  • チキャベツとニンジンのカレー味噌炒め

  • 謎の食べ物が完成してしまった。
  • 生姜のみじん切り、クミンを炒めるて、香りが出たらキャベツとニンジンを入れる。
  • しんなりしたら味噌、カイエンペッパー、ターメリックパウダー、コショウをいれる。
  • 塩で味を調整。
  • カイエンペッパーを入れすぎて激辛になってしまったので、長ネギを入れて調整。

今日のお弁当

  • 豚の角煮
  • チャプチェ

f:id:ita_87:20190121120822j:plain

ポイント

  • 豚の角煮はこちらのサイトをそのまま作成。(豚は800gだけど。)

www.sirogohan.com

  • チャプチェは牛肉、ニンジン、玉ねぎ、シイタケと春雨を炒める。
  • 焼肉のタレ、コショウで味付け。(叙々苑の焼肉のたれを使用。ちょっと甘くなりすぎたかも。)

叙々苑 焼肉のたれ<特製> 240g

叙々苑 焼肉のたれ<特製> 240g

WinAppDriverを利用してExcelを保存する場合の注意点。

Windows Application Driverを利用して、起動中のエクセルを保存するときに
はまったのでまとめておきます。
(環境設定については、いろいろな記事が出てるのでここでは割愛します。)

環境

  • VisualStudio2017Community
  • Office 2016

エクセル操作

テンプレートの取得

GitHubのUIRecorderのページからWinAppDriverのテンプレートプロジェクトを取得します。

WinAppDriver/Tools/UIRecorder/UIRecorderTemplate at master · Microsoft/WinAppDriver · GitHub

XPathの取得

WinAppDriverUiRecorderを起動してエクセルのXPathを取得します。
通常保存時にはこのような保存ダイアログが表示されます。

f:id:ita_87:20190113113334p:plain
保存ダイアログ

開いたディレクトリにそのまま保存する場合には問題ありません。 ただし保存先を変更しようとファイル名にC:\temp\hoge.xlsxなどをSendKeyで入力する必要がありますが、
実行するとファイル名にはC:]temp]hoge.xlsxと入力されてしまいます。

この原因はこちらのブログで紹介されているようにキーボードの問題のようです。

qiita.com

この問題(2018/1現在)は解消していないようなので、別の方法で入力します。 同僚の方に相談したところアドレスバーのパスは/でも行けると教えてもらったので

  1. アドレスバーをクリック
  2. SendKeyでc:/tempと打つ
  3. 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分析とは

こちらのサイトによると『生活者へのリーチが最大になるような商品の組み合わせを得ることができる分析手法』とのこと。

www.macromill.com

R言語で書いてみる

こちらのサイトを参考にTURF分析パッケージのturfRを利用して実際に分析を実施してみます。

on-your-mark.tokyo

開発環境の作成

今回はVS2017Communityを利用するので、まずはVS2017でRを実行できるように、 R Tools for Visual Studioをインストールします。

  1. Visual Studio インストーラーを起動。
  2. [データ サイエンスと分析のアプリケーション] ワークロードを選択。
    f:id:ita_87:20190102234136p:plain
    R Tools for Visual Studioのインストール

プロジェクトの作成

  1. ファイル→新規作成→プロジェクト から新しいプロジェクトを作成。 1.インストール済みからRを選択してRプロジェクトを選択。
    f:id:ita_87:20190103000637p:plain
    プロジェクトの作成

パッケージのインストール

turf分析用パッケージturfRのインストールをします。

  1. R Tools→ウィンドウ→パッケージ もしくはCtrl+7でRパッケージマネージャーを開く。
  2. 検索ボックスにturfRと入力して検索。
  3. turfRを選択してインストールをクリック。
    f:id:ita_87:20190103001440p:plain
    パッケージをインストール。

分析コードを書く。

参考サイトと同様に、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分析をやってみましたが、 これくらいのデータであれば思った以上に簡単に作成できました。