静粛に、只今統計勉強中

仕事でデータ分析をすることになったバリバリ文系アラフィフのおっさんが、独学で統計の勉強を始めました。

【備忘録】MS AccessのテーブルにUTF-8のCSVをインポートするときに生じる不具合コンボの切り抜け方3

ここまで、AccessのテーブルにUTF-8CSVをインポートする際に生じる不具合の回避策として、

  1. CSVANSI規格で保存しなおしてからインポート
  2. UTF-8(ボム付)のCSVExcelで開いてExcel形式で保存してからインポート

という2つの方法があるが、どちらも万全とは言えない、というお話をしてきました。

以下では、少々手間はかかりますが、制約なし&Acccess上で完結できる解決法をお示ししたいと思います。

続きを読む

【備忘録】MS AccessのテーブルにUTF-8のCSVをインポートするときに生じる不具合コンボの切り抜け方2

前回は、MS AccessCSVのインポート時に、自動判別してくれるはずの「長いテキスト」を判別してくれず、インポートエラーになった。というお話をしました。

自動判別してくれないのなら、しかたがないから自分でフィールドのデータ型を設定しましょう。 

 

テキストインポートウィザードで文字化けを解消するところまでは、前回と同じです。

以下の画面に遷移したら、スクロールバーで右にスクロールさせていき、データ型を変更するフィールドが表示されたら、フィールド名をクリックして選択します。

f:id:cyclo-commuter:20201117140700p:plain

続きを読む

【備忘録】MS AccessのテーブルにUTF-8のCSVをインポートするときに生じる不具合コンボの切り抜け方1

AccessのテーブルにUTF-8CSVをインポートしようとしたら、謎の不具合が連続して現れたので、対処方法を備忘録的に書き留めておくことにしました。

 

まず、UTF-8CSVを用意します。今回は以下からダウンロードしてみました。

続きを読む

Excel VBAでコレログラムを作成するマクロを作ってみた3

前回までの2回で、Excelで自己相関係数を計算し、コレログラムを作成するところまでできましたので、今回は、この一連の手順をVBAマクロで自動化したいと思います。

といっても、計算はたいしてややこしいものではありませんし、グラフ作成の自動化も前に何度もやってますから、これといって新機軸はありません。

ので、ソースコードを、さらっと。

'時系列データからコレログラムを作成する
Sub CORRELOGRAM()

    Dim Lag
    Dim n As Integer
    Dim Avg As Double
    Dim i As Integer, j As Integer
    Dim Mat1, Mat2
    Dim CLM As Integer
    Dim Acov
    
    Lag = InputBox("自己相関係数を計算するラグ(時間差)の数を整数で入力してください。" & vbCrLf & _
        vbCrLf & "ただし、下限を[2]、上限を[選択範囲の行数-1]とします。", "コレログラム")

    n = Selection.Rows.Count    'データ数をnに格納

    Select Case Lag
    Case 2 To n - 1
        Avg = WorksheetFunction.Average(Selection)  '平均値をAvgに格納
        
        ReDim Mat1(1 To n)  '動的配列変数Mat1を初期化
        ReDim Acov(Lag)     '動的配列変数Acovを初期化
        
        For j = 1 To n
            Mat1(j) = Selection(j).Value - Avg  'Mat1にラグ0の偏差を格納
        Next
        Acov(0) = WorksheetFunction.SumSq(Mat1) / n 'Acov(0)にラグ0の分散を格納
        
        'ワークシートに自己相関係数を記述する(見出しとラグ0)
        CLM = Selection.Column + 2
        Cells(1, CLM).Value = "ラグ(時間差)"
        Cells(1, CLM + 1).Value = "自己相関係数"
        Cells(2, CLM).Value = "'0"
        Cells(2, CLM + 1).Value = 1
        
        For i = 1 To Lag
            ReDim Mat2(1 To n)  '動的配列変数Mat2を初期化
            For j = 1 To n - i
                Mat2(j) = Selection(i + j).Value - Avg  'Mat2にラグiの偏差を格納
            Next
            Acov(i) = WorksheetFunction.SumProduct(Mat1, Mat2) / n  'Acov(i)にラグ0とラグiの自己共分散を格納
            'ワークシートに自己相関係数を記述する(ラグi)
            Cells(i + 2, CLM).Value = "'" & i
            Cells(i + 2, CLM + 1).Value = Acov(i) / Acov(0)
        Next
        
        '自己相関係数の表に基づき、棒グラフを作成する
        ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
        With ActiveChart
            .SetSourceData Source:=Range(Cells(2, CLM), Cells(Lag + 2, CLM + 1))
            .ChartTitle.Delete
            .Axes(xlCategory).TickLabelPosition = xlLow
            .Axes(xlValue).MinimumScale = -1
            .Axes(xlValue).MaximumScale = 1
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Text = "自己相関係数"
            .Axes(xlCategory, xlPrimary).AxisTitle.Text = "時間差"
        End With
    Case vbNullString
    Case Else
        MsgBox "自己相関係数を計算するラグの数を整数で入力してください。" & vbCrLf & _
            vbCrLf & "ただし、下限を[2]、上限を[選択範囲の行数-1]とします。", vbCritical, "コレログラム"
    End Select

End Sub
続きを読む

Excel VBAでコレログラムを作成するマクロを作ってみた2

前回は、 

統計学入門 (基礎統計学Ⅰ)

統計学入門 (基礎統計学Ⅰ)

 

と 

現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~

現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~

 

で自己相関係数を求める計算式が違って吃驚! というところで終わりました。

前者が

 自己相関係数=\dfrac{偏差積和/(n-h)}{偏差平方和/n}

としていたのに対し、後者は

 自己相関係数=\dfrac{偏差積和}{偏差平方和}

としていたのです。

続きを読む