月ごとのデータをよこ軸に集計する方法
たまに下記のような、月ごとのデータを
name | mouth | count |
---|---|---|
Tom | 5 | 2 |
Jhon | 6 | 3 |
Tom | 6 | 3 |
下記のように変換して、
月の遷移を確認したくなることがある。
name | 5 | 6 |
---|---|---|
Tom | 2 | 3 |
Jhon | 0 | 6 |
そういう場合は、Group-Objectを使うと便利
PS > $table = [PSCustomObject]@{name="Jhon";mouth=5;count=2}, [PSCustomObject]@{name="Tom" ;mouth=6;count=3}, [PSCustomObject]@{name="Jhon";mouth=6;count=3} PS > $table name mouth count ---- ----- ----- Jhon 5 2 Tom 6 3 Jhon 6 3 PS > $table | Group-Object -Property name | % { $a = [PSCustomObject]@{name=$_.name} $_.Group | % { $a | Add-Member -NotePropertyMembers @{$_.mouth=$_.count} } $a } name 5 6 ---- - - Jhon 2 3 Tom 3
WebページからBodyのテキストを取得する方法
PowerShellでスクレイピング 後編 HTMLをパースする - PowerShell Scripting Weblog
下記の記事で見つけた。
Invoke-WebRequestの結果は、
IEで解析されBody要素のDOMを扱えるとのことなので、
下記の通りすると、できる
$contents = Invoke-WebRequest $url $contents.ParseHtml.body.innerText
PowerShellすごいなー。
Invoke-RestMethodの文字化け対策
gooラボ 形態素解析APIを試してみる - pierre3のブログ
上のブログに記載されてました。
Invoke-RestMethodは諦めて、下記のようにInvoke-WebRequestを使うようです。
$res = Invoke-WebRequest -Method Post $url -Body $body $con = [System.Text.Encoding]::Utf8.GetString([System.Text.Encoding]::GetEncoding("ISO-8859-1").GetBytes($res.Content)) #JSONの場合は下記のように変換する ConvertFrom-Json $con
transparentネットワークを使う方法
デフォルトで存在するnatネットワークを使って、-pオプションでポートを指定して、
EXPOSEも設定したのだが、うまくつながらなかった。
色々調べたけれど、さっぱりわからなかった。
natにこだわりがあるわけでないので、
natでなくて、物理ネットワークをそのままつなげる方法を
試したところ、うまくいったので、その方法をメモする。
・まずは、transparentのネットワークを作成
docker network create -d transparent transparent
・そのネットワークを指定して起動する
docker run --net=transparenet ... <省略>
この方法に切り替えて、すぐにできたので、はよ切り替えればよかった。
下記を参考にした。
Windows コンテナーのネットワーク | Microsoft Docs
Excelファイルの操作(ImportExcel)
以前よりCOMを使ったexcelの操作方法は知っていたのだが、
覚えられるほど簡単ではなかったのであまり使かうことはなず、
csvファイルで出力し、手作業でxlsやxlsxファイルに変換することが多かった。
先日、PowerShellGetの存在をしり、ImportExcelという
モジュールが提供されていることを知って、結構気になっていて、
調べてみることにした。
PowerShell Gallery | ImportExcel 3.0.1
- gciの結果をexcelファイルへエクスポート
gci | excel-export test.xlsx
期待通りに出力される。
以上
csvの2つ以上の列が同じ行を除去する方法
get-uniqueでプロパティを指定できたら良かったのですが、
できないので、一度、重複判定するための列を追加して、
sort-objectを-uniqueを呼び出して、除去する。
ConvertTo-*コマンドの動作
ConvertTo-で始まるPowerShellのコマンドはいくつかあるので、動作確認結果。
ConvertTo-Xmlはちょっとだけ期待はずれ。
最初はcsv。
> ([PSCustomObject]@{id=1;name="Jhon"},[PSCustomObject]@{id=2;name="Tom"}) | ConvertTo-Csv #TYPE System.Management.Automation.PSCustomObject "id","name" "1","Jhon" "2","Tom"
次にjson
> ([PSCustomObject]@{id=1;name="Jhon"},[PSCustomObject]@{id=2;name="Tom"}) | ConvertTo-Json [ { "id": 1, "name": "Jhon" }, { "id": 2, "name": "Tom" } ]
XML。デフォルトはxmlのオブジェクトになってしまうのでstringで出力。型情報も除去する。
Propertyでなく、idやnameにしたいが、方法は分からなかった。
> ([PSCustomObject]@{id=1;name="Jhon"},[PSCustomObject]@{id=2;name="Tom"}) | ConvertTo-Xml -As string -NoTypeInformation <?xml version="1.0" encoding="utf-8"?> <Objects> <Object> <Property Name="id">1</Property> <Property Name="name">Jhon</Property> </Object> <Object> <Property Name="id">2</Property> <Property Name="name">Tom</Property> </Object> </Objects>
ちなみにHTMLは下記の通り。
> ([PSCustomObject]@{id=1;name="Jhon"},[PSCustomObject]@{id=2;name="Tom"}) | ConvertTo-Ht ml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>HTML TABLE</title> </head><body> <table> <colgroup><col/><col/></colgroup> <tr><th>id</th><th>name</th></tr> <tr><td>1</td><td>Jhon</td></tr> <tr><td>2</td><td>Tom</td></tr> </table> </body></html>