topimg.jpg


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Linux bashスクリプトでループを実行

Linuxのbashスクリプトで無限ループを実行

1.1行で無限ループコマンドを実行
while true;do [コマンド1];[コマンド2];・・・・;sleep [秒数];done
(例)
1秒間隔で、「日時情報」と「netstatコマンドで確認したTCPコネクション確立数」を1行ごとに表示
while true;do date;netstat|grep "ESTABLISHED"|wc -l;sleep 1;done

スポンサーサイト
  1. 2012/01/26(木) 23:10:20|
  2. Linux/Unix
  3. | トラックバック:0
  4. | コメント:0

Windowsバッチファイルでループ処理を実行する

Windowsでループ処理を実行したい場合

1.カレントディレクトリにあるファイル数分だけループ
●.batファイルに記述する場合
for %%i in (*.csv) do [処理コマンド] %%i

●コマンドプロンプトから直接入力する場合
for %i in (*.csv) do [処理コマンド] %i

※Windowsでは、.batファイルで変数を記述する場合は、%が2個必要なので注意!


参考
炎のコマンドプロンプト入門
http://www.geocities.co.jp/SiliconValley-SanJose/1227/batfor.html
  1. 2012/01/26(木) 23:04:22|
  2. Windows
  3. | トラックバック:0
  4. | コメント:0

SONYのBluetoothワイヤレスキーボードCECH-ZKB1JPを買った

久々にキーボードを買った。
これ↓。



SONYから発売されているPS3用キーボードだが、PCでも当然利用可能。価格.comで一目ぼれした。

購入した理由としては、
①値段が4000円とお手ごろ。
②Bluetoothインターフェースのため汎用性がある。
③デザインが超カッコイイ。流石SONYというところか(ステマじゃないよ)。
④スタックポインタがついているためマウスいらず。

ただ、Amazonや価格.comを見ていると、やや訳あり商品のようだ。
・レスポンスが悪い
・電池が3日で切れる

等、品質としてかなり問題があるようだった。
しかし、2chの同商品のスレをみる限り、上記問題は2012年1月現在既に解決しているようだ。
電池持ちも、同スレでの報告では2.5ヶ月くらいは持つとのこと。これなら、エネループでまあ許せるレベル。

というとで、送料考慮するとamazonが最安だったのでamazonで即効ポチった。
後悔はしていない。


2012年4月22日追記
購入して3ヶ月、今のところ大きな不具合は出ていない。普通の用途には全く問題ない品質。

感想
・レスポンスはいい。例のレスポンス遅延問題はやはり対策されている。
・電池の持ちは1.5~2ヶ月
・BlueToothの接続も良好
問題点
・電源自動オフの間隔が短い。30分くらい?
・電源オン直後のBlueTooth接続中にスタックをグリグリすると、スタックを操作していなくてもマウスカーソルが勝手に動いてしまう

  1. 2012/01/15(日) 04:49:45|
  2. ハードウェア
  3. | トラックバック:0
  4. | コメント:0

統計小ネタ①

●標準偏差(SD)と標準誤差(SE)
・標準偏差→データのバラつき度を示す指標
・標準誤差→求めたデータの平均値から推定されるズレ幅を示す指標
参考
http://rockymuku.sakura.ne.jp/kousyuueisei/SDtoSEtoCI.pdf


●分布
・正規分布→標本の平均値検定に利用。分散が真の値(標本数が多い場合(約30以上))。
・t分布→標本の平均値検定に利用。分散が推定値(標本数が少ない場合(約30未満))。
・χ二乗分布→標本の分散検定に利用(適合性の検定、独立性の検定)。分散が既知。
・F分布→標本の分散検定に利用(適合性の検定、独立性の検定)。分散が未知。
参考
http://www012.upp.so-net.ne.jp/doi/biostat/CT39/distribution.pdf
http://www.geisya.or.jp/~mwm48961/statistics/kai2.htm
  1. 2012/01/09(月) 07:11:47|
  2. 統計
  3. | トラックバック:0
  4. | コメント:0

EXCEL小ネタ①

●文字列結合で改行を入れる
A1,B1に結合したい文字列がある場合、
C1セルに
「=CONCATENATE(A1,CHAR(10),B1)」
という計算式を入力する

●数値をテキストとして表示させる
セルに0.100という数値が入っている場合、グラフのタイトル等に表示させようとすると、0.1と表示されてしまう。
これを0.100と表示させたいときは、TEXT関数を使用し、数値を文字列に変換すればよい。
(例)A1に0.100という数値型の値が入っている場合、A1以外の任意のセルに以下の式を入力すると0.100という文字列で認識される
 =TEXT(A1,"0.000")

●グラフタイトルをセル参照する
仮のグラフタイトルを一旦表示
 ↓
グラフタイトルを選択
 ↓
数式バーに「=」を入力
 ↓
グラフタイトルと連動させたいセルをクリック
 ↓
[Enter]キーを押す

引用元
http://www.relief.jp/itnote/archives/003184.php

●EXCEL2007の保存形式
xlsm・・・マクロが保存される
xlsx・・・マクロが保存されない
これの違いよく理解せずにマクロ作成してて、4時間かけて作ったマクロデータが吹っ飛んだ。

●EXCELのハイパーリンクされたセルを一括無効化
ハイパーリンクされていないセルをコピー
 →形式を選択して貼り付け
  →演算の乗算を選択
  1. 2012/01/09(月) 06:29:32|
  2. MSOffice
  3. | トラックバック:0
  4. | コメント:0

データが存在する数だけ同じフォーマットでグラフ作成するマクロ

指定した位置にあるデータを抽出し、データが存在する数だけ同じフォーマットでグラフ作成するマクロを作成した。
グラフ化1



●マクロ設計方針
1.グラフのデータソースを参照
2.グラフのテンプレートを適用
 →デザインやグラフ種類等、テンプレートに記憶させることができるグラフ情報はテンプレートに持たせ、事前にテンプレートを用意しておく
3.グラフのサイズと配置場所を指定
 →上記情報はテンプレートで保持できないのでマクロで指定する
4.タイトルや軸ラベルをセル参照により挿入
 →上記情報もテンプレートで保持できないのでマクロで指定する
5.標準誤差(エラーバー)を挿入
6.データが存在する場合は1~5をループ

●ノウハウ
①X軸とY軸のセル参照箇所が離れているシートからSetSourceDataメソッドで代入する
Dim XvarCell As Range
Dim YvarCell As Range
Set XvarCell = Range("A1:A3")
Set YvarCell = Range("C1:C3")
Set GraphArea = Union(XvarCell, YvarCell)
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=GraphArea

②グラフのサイズと位置を指定する
With ActiveSheet.ChartObjects(1)
.Width = 50
.Height = 100
.Top = Range("A1").Top
.Left = Range("A1").Left
End With

③グラフのタイトルや軸ラベルを挿入する
ActiveChart.ChartTitle.Characters.Text = "Title"
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "X軸ラベル"
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Y軸ラベル"

④指定した文字列を含むセルの数をカウントする
Dim cnt As Long
cnt = WorksheetFunction.CountIf(ActiveSheet.Range("G1:G1000"), "*.xls*")

⑤標準誤差(エラーバー)をセル参照により棒グラフへ挿入する
こいつはネットで参考情報探しても全くヒットしなかったので、少し解説。
ErrorBarメソッドの引数Amountは、Variant型(何でもOK型)である。
EXCELのヘルプからの引用
Amount
バリアント型 (Variant) 誤差の量を指定します。引数 Type に xlErrorBarTypeCustom が指定されているときは、正の誤差量だけを指定できます。


ただ、系列ごとに複数の値を別々に指定する方法がわからない。そこで、「Variant型だから、そこらへん柔軟に作られているだろう」という推測のもと、試行錯誤してみた。結果的に、Double型の配列作って代入してみたら、なんかうまくいった。ご参考までに。
Dim SEvar(2) As Double
SEvar(0) = 0.1
SEvar(1) = 0.2
SEvar(2) = 0.4
ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:=xlPlusValues, Type:=xlCustom, Amount:=SEvar


●参考(上記ノウハウ番号と対応)
①グラフの参照範囲を変更する
http://officetanaka.net/excel/vba/tips/tips150.htm
②グラフの位置を設定する
http://officetanaka.net/excel/vba/graph/03.htm
③グラフを作成する(1)
http://www.serpress.co.jp/excel/vba026.html
④データをカウントする
http://officetanaka.net/excel/vba/db/db02.htm

●サンプルコード
'変数の宣言
Dim BaseCell As String
Dim GraphArea As Range
Dim XvarCell As Range
Dim YvarCell As Range
Dim Title As String
Dim X_Axis As String
Dim Y_Axis As String
Dim SEvar(2) As Double
Dim TemplateName As String
Dim GraphWidth As Integer
Dim GraphHeight As Integer

Sub MakeGraph()

'適用テンプレートの読み込み
Dim tmpl As Integer
tmpl = Range("B67").Value
TemplateName = Range("B56").Offset(tmpl, 0).Value

'グラフサイズ設定の読み込み
GraphWidth = Range("B70").Value
GraphHeight = Range("B71").Value

'データ抽出で検出した件数をカウント※ノウハウ④
Dim cnt As Long
cnt = WorksheetFunction.CountIf(ActiveSheet.Range("G1:G1000"), "*.xls*")
For i = 0 To cnt - 1

'変数の代入
BaseCell = "G2"
BaseCell = Range(BaseCell).Offset(16 * i, 0).address

'グラフの作成
ActiveSheet.Shapes.AddChart.Select
'X軸の範囲を代入
Set XvarCell = Range(Range(BaseCell).Offset(1, 0), Range(BaseCell).Offset(3, 0))
'Y軸の範囲を代入
Set YvarCell = Range(Range(BaseCell).Offset(1, 2), Range(BaseCell).Offset(3, 2))
'2つのRANGEオブジェクトを結合※ノウハウ①
Set GraphArea = Union(XvarCell, YvarCell)
'データソースに上行のRANGEオブジェクトを格納※ノウハウ①
ActiveSheet.ChartObjects(i + 1).Chart.SetSourceData Source:=GraphArea
'ActiveSheet.ActiveChart.SetSourceData Source:=GraphArea ←EXCELのマクロ記録機能では左記のように記録されるが、これでは動かない
'テンプレートの適用(同マクロファイルと同じディレクトリ配下にテンプレートファイルを置いておく)
ActiveChart.ApplyChartTemplate (ThisWorkbook.Path + "\" + TemplateName)

'グラフの整形※ノウハウ②
With ActiveSheet.ChartObjects(i + 1)
.Width = GraphWidth
.Height = GraphHeight
.Top = Range(BaseCell).Offset(0.6).Top
.Left = Range(BaseCell).Offset(0, 6).Left
End With

'グラフタイトルの挿入、グラフX軸、Y軸ラベルの挿入※ノウハウ③
Title = Range(BaseCell).Offset(1, -1).Value
X_Axis = Range(BaseCell).Offset(2, -1).Value
Y_Axis = Range(BaseCell).Offset(3, -1).Value
ActiveChart.ChartTitle.Characters.Text = Title
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = X_Axis
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Y_Axis

'標準誤差バーの挿入※ノウハウ⑤
SEvar(0) = Range(BaseCell).Offset(1, 5).Value
SEvar(1) = Range(BaseCell).Offset(2, 5).Value
SEvar(2) = Range(BaseCell).Offset(3, 5).Value
ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:=xlPlusValues, Type:=xlCustom, Amount:=SEvar

Next i
End Sub


●サンプルコードおまけ(グラフオブジェクトとデータ入力エリアの一括クリア)
Sub GraphDelete()
Dim ChartObject1
For Each ChartObject1 In ActiveSheet.ChartObjects
ChartObject1.Delete
Next
End Sub

Sub DataDelete()
Dim IntMsg As Integer
IntMsg = MsgBox("本当に抽出データを削除してもよろしいですか?", vbYesNo, "確認")
Select Case IntMsg
Case vbYes
IntMsg = MsgBox("本当に本当によろしいですか?", vbYesNo, "再確認")
Select Case IntMsg
Case vbYes
For k = 0 To 24
Range(Cells(3 + 16 * k, 8), Cells(5 + 16 * k, 12)).ClearContents
Range(Cells(7 + 16 * k, 7), Cells(7 + 16 * k, 12)).ClearContents
Range(Cells(9 + 16 * k, 7), Cells(9 + 16 * k, 12)).ClearContents
Range(Cells(11 + 16 * k, 7), Cells(11 + 16 * k, 12)).ClearContents
Next k
Case vbNo
End Select
Case vbNo
End Select
End Sub


●マクロサンプル
グラフ化ツール
※ダウンロード後、拡張子を.txtから.xlsmに直す必要あり
  1. 2012/01/09(月) 06:18:45|
  2. MSOffice
  3. | トラックバック:0
  4. | コメント:0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。