powershell と SoXによる raw → wavに変換
powershell で複数ファイルをそれぞれ処理する
拡張子の変更がめんどい。batの方が楽?
ls *.pcm | foreach { &'N:\Program Files (x86)\sox-14-4-2\sox.exe' -t raw -b 16 -e signed -c 1 -r 16k $_.name ($_.name -replace "pcm","wav") }
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で解いてみた
#ウィナーフィルタを最小二乗法で解く
]
] =
\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}
# -*- 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<> ''")