windows 10の不要なアプリ削除メモ

自分向けメモ

https://ygkb.jp/471#toc54 から抜粋

Get-AppxPackage Microsoft.3DBuilder | Remove-AppxPackage
Get-AppxPackage Microsoft.Microsoft3DViewer | Remove-AppxPackage
Get-AppxPackage Microsoft.ZuneMusic | Remove-AppxPackage
Get-AppxPackage Microsoft.People | Remove-AppxPackage
Get-AppxPackage Microsoft.XboxApp | Remove-AppxPackage
Get-AppxPackage Microsoft.XboxGameOverlay | Remove-AppxPackage
Get-AppxPackage Microsoft.XboxGamingOverlay | Remove-AppxPackage
Get-AppxPackage Microsoft.XboxIdentityProvider | Remove-AppxPackage
Get-AppxPackage Microsoft.XboxSpeechToTextOverlay | Remove-AppxPackage
Get-AppxPackage Microsoft.WindowsAlarms | Remove-AppxPackage
Get-AppxPackage Microsoft.ZuneVideo | Remove-AppxPackage
Get-AppxPackage Microsoft.WindowsCamera | Remove-AppxPackage
Get-AppxPackage Microsoft.GetHelp | Remove-AppxPackage
Get-AppxPackage Microsoft.WindowsSoundRecorder | Remove-AppxPackage
Get-AppxPackage Microsoft.WindowsMaps | Remove-AppxPackage
Get-AppxPackage *bing* | Remove-AppxPackage
Get-AppxPackage microsoft.windowscommunicationsapps | Remove-AppxPackage
Get-AppxPackage Microsoft.Messaging | Remove-AppxPackage
Get-AppxPackage Microsoft.YourPhone | Remove-AppxPackage
Get-AppxPackage Microsoft.OneConnect | Remove-AppxPackage
Get-AppxPackage Microsoft.Windows.Photos | Remove-AppxPackage
Get-AppxPackage Microsoft.MicrosoftStickyNotes | Remove-AppxPackage
Get-AppxPackage Microsoft.MSPaint | Remove-AppxPackage

ウィナー・ホッフ方程式をPythonで解いてみた

 #ウィナーフィルタを最小二乗法で解く

{\boldsymbol d}=[d_1, \cdots, d_{L_s}]

{\boldsymbol U}=[ {\boldsymbol u}_1, \cdots,  {\boldsymbol u} _ {L _ s}  ] =

\begin{bmatrix} u _ 1 & u _ 2 & \cdots & u _ K & \cdots & u _ {L _ s - 1} & u _ {L _ s} \\ 0 & u _ 1 & \cdots & u _ {K - 1} & \cdots & u _ {L _ s - 2} & u _ {L _ s - 1} \\ \vdots & & \ddots & \vdots & & \vdots & \vdots \\ 0 & 0 & \cdots & u _ 1 & \cdots & u _ {L _ s - K} & u _ {L _ s - K + 1} \\ \end{bmatrix}

\hat{{\boldsymbol R}} _ u = {\boldsymbol U}{\boldsymbol U}^H

\hat{{\boldsymbol r}} _ {ud} = {\boldsymbol U}{\boldsymbol d}^H

\hat{{\boldsymbol \omega}} _ {LS} =  \hat{{\boldsymbol R}_u} ^ {-1}  \hat{{\boldsymbol r}} _ {ud}

# -*- coding: utf-8 -*-
"""
Created on Sat Jun 22 22:14:03 2019

@author: user
"""

import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as sg


z  = np.arange(0, 512)
h0 = 1 / (1 + np.exp(0.0001 * (z - 128) ** 2))
#h0=1/(1+np.exp(0.03*z))

Wref  = h0 / np.sum(h0) * 2
plt.plot(Wref)
plt.title("$\omega_{ref}$")
plt.show()

x  = np.linspace(0, 1, 4096)
#y1 = np.sin(2 * np.pi * x) + 0.2 * np.sin(np.pi * 20 * (x + 0.1))
y1 = np.sin(2 * np.pi * x) + 0.2*np.sin(np.pi * 20 * x + 0.1 * np.pi)
y2 = sg.lfilter(Wref, [1], y1)

plt.plot(x, y1)
plt.plot(x, y2)
plt.legend(["$y1$", "$y2=y1 * \omega_{ref}$"])
plt.show()


Ls  = 1024
K   = 512
U   = np.array([[ y1[l - k] if l >= k else 0 for l in range(0, Ls)] for k in range(0, K)])
Ru  = U @ U.T
d   = y2[:Ls]
rud = U @ d.T
Wls  = np.linalg.solve(Ru, rud)

plt.plot(Wref)
plt.plot(Wls)
plt.legend(["$\omega_{ref}$", "$\omega_{LS}=(U U^T)^{-1} U d^T$"])
plt.show()

plt.plot(Wls - Wref);
plt.legend(["$\omega_{LS}-\omega_{ref}$"])
plt.show()

plt.plot(x, y2);
plt.plot(x, sg.lfilter(Wls, [1], y1))
plt.legend(["$y2$", "$y1 * \omega_{LS}$"])
plt.show()

plt.plot(x, y2 - sg.lfilter(Wls, [1], y1))
plt.legend(["$y2 - y1 * \omega_{LS}$"])
plt.show()

NRKNの資産評価額照会を一括ダウンロードするスクリプト@chrome

var downloadAsTextFile = function(fileName, content) {
    var a = document.createElement('a');
    a.download = fileName;
    a.href = (window.URL || window.webkitURL).createObjectURL(new Blob([new Uint8Array([0xEF, 0xBB, 0xBF]), content]));
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
};

var downloadAsCSVFile = function(fileName, rows) {
  var content = "";
  for(var i in rows) {
    for (var j = 0, m = rows[i].length; j < m; ++j) content += '"' + ("" + rows[i][j]).replace(/"/g, '""') + '"' + (j !== m ? ',' : '');
    content += '\n';
  }
  downloadAsTextFile(fileName, content);
};

var Queue = function() {
  this.promise = Promise.resolve(true);
  this.addAsync = (action) => this.promise = this.promise.then(() => new Promise((resolve) => action(resolve)));
  this.addSync  = (action) => this.addAsync((resolve) => { action(); resolve(); });
  this.delay    = (delay)  => this.addAsync((resolve) => setTimeout(resolve, delay));
};

var q = new Queue();

var header = [
  "照会対象年月日",
  "商品名",
  "商品分類",
  "数量(残高)",
  "基準価額",
  "資産評価額",
  "取得価額累計",
  "解約価額",
  "解約時評価額",
  "損益",
  "基準日",
  "資産比率",
];

var table = [];
table.push(header);

$("input[value='照会']").closest("form").find("select option").each((i, e) => {
  q.addAsync((resolve) => {
    console.log(e.innerHTML);
    $("input[value='照会']").closest("form").find("select").val(e.value);
    
    $.ajax({
      type: "POST",
      url:  "/webapp/nrk/W37S1210_AssetValueSearch.do",
      data: $("input[value='照会']").closest("form").serializeArray()
    }).done((r) => {
      var date = $("p.redTxt.bold", r).text().split(/ /)[1];
      
      $(".infoDetailUnit_02", r).each((i, e) => {
        var data = $("dd", e).map((i, dd) => [[
            $("dt", e).get(i).innerText.trim(), 
            dd.innerText.trim().replace(/円$/, "").replace(/▲/, "-")
          ]]).toArray().reduce((l, [k, v]) => Object.assign(l, { [k]: v} ), {});
        data["照会対象年月日"] = $("p.redTxt.bold", r).text().split(/ /)[1];
        table.push(header.map((k) => data[k]));
      });
      resolve();
    });
  })
});

q.addSync(() => downloadAsCSVFile("table.csv", table));

もうチョイスマートに書けないかな。。。

カテゴリIDのダウンロード,その2

var downloadAsTextFile = function(fileName, content) {
  var a = document.createElement('a');
  a.download = fileName;
  a.href = (window.URL || window.webkitURL).createObjectURL(new Blob([new Uint8Array([0xEF, 0xBB, 0xBF]), content]));
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};

var downloadAsCSVFile = function(fileName, rows) {
  var content = "";
  for(var i in rows) {
    for (var j = 0, m = rows[i].length; j < m; ++j) content += '"' + ("" + rows[i][j]).replace(/"/g, '""') + '"' + (j !== m ? ',' : '');
    content += '\n';
  }
  downloadAsTextFile(fileName, content);
};

var large = {}
for(var [k, v] of category_list_minus.find(".l_c_name").toArray().map((e) => [e.id, e.innerHTML])) {
  large[k] = v;
}
for(var [k, v] of category_list_plus.find(".l_c_name").toArray().map((e) => [e.id, e.innerHTML])) {
  large[k] = v;
}
var middle = {};
for(var [pid, id, name] of category_list_minus.find(".m_c_name").toArray().map((e) => [e.parentNode.parentNode.id, e.id, e.innerHTML])) {
  middle[pid] = middle[pid]||{};
  middle[pid][id] = name;
}
for(var [pid, id, name] of category_list_plus.find(".m_c_name").toArray().map((e) => [e.parentNode.parentNode.id, e.id, e.innerHTML])) {
  middle[pid] = middle[pid]||{};
  middle[pid][id] = name;
}
var list = [];
for(var x in middle) { 
  for(var y in middle[x]) {
    list.push([x, large[x], y, middle[x][y]]);
  }
}
downloadAsCSVFile("category_list.csv", list);

query で Pivot したデータの合計値の列を追加

MMULTIで合計値を計算できるが,色々はまったのでめも。

[月別元データ]シートの内容

=query(
  importrange("スプレッドシートのキー", "マージ!B:S"),
  "Select Col12, sum(Col18), sum(Col17) Where Col7 = '●' Group by Col12 Pivot year(Col1), month(Col1)+1 Label sum(Col18) '元本', sum(Col17) '評価額'"
)
<||

元データを引っ張る。
>||
=offset('月別元データ'!A1, 1, 1, counta('月別元データ'!A2:A), counta('月別元データ'!B1:1)) 

転置して,数値化

=TRANSPOSE( arrayformula( offset('月別元データ'!A1, 1, 1, counta('月別元データ'!A2:A), counta('月別元データ'!B1:1)) * 1))

かけ合わせるベクトルを作る

=ARRAYFORMULA(OFFSET('月別元データ'!A1, 1, 1, counta('月別元データ'!A2:A), 1)^0)

かけ合わせて,転置。合計値行を作る

=transpose(MMULT( TRANSPOSE( arrayformula( offset('月別元データ'!A1, 1, 1, counta('月別元データ'!A2:A), counta('月別元データ'!B1:1)) * 1) ), ARRAYFORMULA(OFFSET('月別元データ'!A1, 1, 1, counta('月別元データ'!A2:A), 1)^0)) )

合計値の列を追加

={offset('月別元データ'!A1, 0, 0, counta('月別元データ'!A:A), counta('月別元データ'!1:1)); 
"合計",transpose(MMULT( TRANSPOSE( arrayformula( offset('月別元データ'!A1, 1, 1, counta('月別元データ'!A2:A), counta('月別元データ'!B1:1)) * 1) ), ARRAYFORMULA(OFFSET('月別元データ'!A1, 1, 1, counta('月別元データ'!A2:A), 1)^0)) )}

年・四半期・月・週の始めの日,終わりの日のデータだけ表示する式

えらい長い式だけど,やっていることはそこまで複雑じゃないはず。
備考録として記載。
あるスプレッドシートの「Record」にA列に日時と,その時のデータの一覧があり,
年・四半期・月・週の始めの日,終わりの日のデータだけ残したい場合の式。
それと,ピボットテーブルで,各年,月等でどのようにデータが変わったか見るために,
どのデータが,年・四半期・月・週の始めの日,終わりの日かわかるようにフラグも残す場合。


始めのQuery はフラグのあるデータのみを残す。フラグだけ付けるだけならいらない。


ARRAYFORMULA は各列のデータを一つの式にまとめるために使用。
Queryでフィルターしないのであれば,列ごとに分けて計算しても問題ないはず。


importrange("スプレッドシートキー", "Record!A:A"), は元の日時の列を参照。


次のif は見出しか否かを判定。見出しは"日時"という文字列でハードコーディング。
ここはもう少しスマートに書きたいが。。。


次のif は 年・四半期・月・週の始めの日,終わりの日 を判定している。
判定方法は,別途query で,日付を year, quarter, month でグルーピングし,
このグループの開始日と終了日だけのテーブルを作り,

このテーブルの日付と今の列の日付が一致するか match で検索し,
マッチすれば,isna がfalse, 見つからな変えれば true なるので,
それで判定。


ただし,週に関しては query でサポートしてる関数に week number を取得する
関数がなく,スプレッドシートのweeknumの関数を使うため,
一時的にARRAYFORMULA で 日時とweeknum の2列のテーブルを作り,
二列目(Col2)のweeknumの値でグループ化し,始めと終わりの日時を調べている。


それを全部まとめると,こんな感じ。


=Query(
  ARRAYFORMULA(
    {
      importrange("スプレッドシートキー", "Record!A:A"),
      if(
        importrange("スプレッドシートキー", "Record!A:A") = "日時",
        "年の初め",
        if(isna(
          match(
            importrange("スプレッドシートキー", "Record!A:A"),
            query(
              importrange("スプレッドシートキー", "Record!A:A"),
              "select min(Col1) group by year(Col1)"),
            0)),
          "",
          "●") ),

      if(
        importrange("スプレッドシートキー", "Record!A:A") = "日時",
        "年の終わり",
        if(isna(
          match(
            importrange("スプレッドシートキー", "Record!A:A"),
            query(
              importrange("スプレッドシートキー", "Record!A:A"),
              "select max(Col1) group by year(Col1)"),
            0)),
          "",
          "●") ),

      if(
        importrange("スプレッドシートキー", "Record!A:A") = "日時",
        "四半期の初め",
        if(isna(
          match(
            importrange("スプレッドシートキー", "Record!A:A"),
            query(
              importrange("スプレッドシートキー", "Record!A:A"),
              "select min(Col1) group by year(Col1), quarter(Col1)"),
            0)),
          "",
          "●") ),

      if(
        importrange("スプレッドシートキー", "Record!A:A") = "日時",
        "四半期の終わり",
        if(isna(
          match(
            importrange("スプレッドシートキー", "Record!A:A"),
            query(
              importrange("スプレッドシートキー", "Record!A:A"),
              "select max(Col1) group by year(Col1), quarter(Col1)"),
            0)),
          "",
          "●") ),

      if(
        importrange("スプレッドシートキー", "Record!A:A") = "日時",
        "月の初め",
        if(isna(
          match(
            importrange("スプレッドシートキー", "Record!A:A"),
            query(
              importrange("スプレッドシートキー", "Record!A:A"),
              "select min(Col1) group by year(Col1), month(Col1)"),
            0)),
          "",
          "●") ),

      if(
        importrange("スプレッドシートキー", "Record!A:A") = "日時",
        "月の終わり",
        if(isna(
          match(
            importrange("スプレッドシートキー", "Record!A:A"),
            query(
              importrange("スプレッドシートキー", "Record!A:A"),
              "select max(Col1) group by year(Col1), month(Col1)"),
            0)),
          "",
          "●") ),

      if(
        importrange("スプレッドシートキー", "Record!A:A") = "日時",
        "週の初め",
        if(isna(
          match(
            importrange("スプレッドシートキー", "Record!A:A"),
            query(
              ARRAYFORMULA({
                importrange("スプレッドシートキー", "Record!A:A"),
                weeknum(importrange("スプレッドシートキー", "Record!A:A"))
              }),
              "select min(Col1) group by Col2"),
            0)),
          "",
          "●") ),

      if(
        importrange("スプレッドシートキー", "Record!A:A") = "日時",
        "週の終わり",
        if(isna(
          match(
            importrange("スプレッドシートキー", "Record!A:A"),
            query(
              ARRAYFORMULA({
                importrange("スプレッドシートキー", "Record!A:A"),
                weeknum(importrange("スプレッドシートキー", "Record!A:A"))
              }),
              "select max(Col1) group by Col2"),
            0)),
          "",
          "●") ),


      importrange("スプレッドシートキー", "Record!B:I")
    }
  ),
  "Where Col2 <> '' OR Col3 <> '' OR Col4 <> '' OR Col5 <> '' OR Col6 <> '' OR Col7 <> '' OR Col8 <> '' OR Col9<> ''")