トップページデータ処理時系列データ時系列データのプロット(Python, matplotlib, seaborn を使用)

時系列データのプロット(Python, matplotlib, seaborn を使用)

numpy の配列に、同一の長さの時系列データが、複数入っているとする。そして、別データで、各時系列データのラベル番号があるとする。 このとき、時系列データを、ラベル番号を使って色分けし、プロットする。

この資料の URL: https://www.kkaneko.jp/data/ts/tsplot.html

目次

  1. Google Colab へのリンク
  2. 前準備
  3. FordA データセットの準備
  4. 時系列データのプロット

【サイト内の関連ページ】

参考Webページ:

1. Google Colab へのリンク

このページの内容は,Google Colaboratory でも実行できる.

そのために,次の URL で,Google Colaboratory のノートブックを準備している.

次のリンクをクリックすると,Google Colaboratoryノートブックが開く. そして,Google アカウントでログインすると,Google Colaboratory のノートブック内のコードを実行することができる.Google Colaboratory のノートブックは書き換えて使うこともできる.このとき,書き換え後のものを,各自の Google ドライブ内に保存することもできる.

https://colab.research.google.com/drive/1tZmdhdUXMoB_rtQM45u-qgDPo75jTnYZ?usp=sharing

2. 前準備(上のリンクを使わずに,自前で動かす場合)

Python の準備

Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う.

あるいは, 開発環境や Python コンソール(Jupyter Qt ConsoleSpyderPyCharmPyScripter など)の利用も便利である.

あるいは,オンラインで動くGoogle Colaboratory のノートブックの利用も,場合によっては便利である.

Google Colaboratory のノートブックを使うか, 自分のパソコンで Python を動かすなどがありえる.

(1) (Google Colaboratory を使う場合Google Colaboratory のノートブックの準備

Google Colaboratory のノートブックを新規作成を行う.

  1. Google Colaboratory のWebページを開く

    https://colab.research.google.com

    Google Colab はオンラインの Python 開発環境. 使用するには Google アカウントが必要

  2. ファイル」で、「ノートブックを新規作成」を選ぶ

    [image]
  3. Google アカウントでのログインが求められたときはログインする

    [image]

    [image]

(2) (自分のパソコンで Python を動かす場合)Python の準備

Python のインストール: 別ページで説明している.,pip と setuptools の更新,Python 開発環境

Python の URL: http://www.python.org/

【Python, pip の使い方】

Python, pip は,次のコマンドで起動できる.

Python 開発環境のインストール】

Python の numpy,pandas,seaborn,matplotlib,pandasql,scikit-learn のインストール

3. FordA データセットの準備

  1. パッケージのインポート
    import numpy as np
    %matplotlib inline
    import matplotlib.pyplot as plt
    import matplotlib.cm as cm
    

    [image]
  2. FordA データセット(TSV 形式ファイル )のロード
    def readucr(filename):
        data = np.loadtxt(filename, delimiter="\t")
        y = data[:, 0]
        x = data[:, 1:]
        return (x, y.astype(int))
    
    root_url = "https://raw.githubusercontent.com/hfawaz/cd-diagram/master/FordA/"
    
    ds_train = readucr(root_url + "FordA_TRAIN.tsv")
    ds_test = readucr(root_url + "FordA_TEST.tsv")
    

    [image]

4. 時系列データのプロット

  1. データの確認
    print(ds_train[0].shape)
    print(ds_train[1].shape)
    print(ds_test[0].shape)
    print(ds_test[1].shape)
    

    [image]
  2. ds_train[1], ds_test[1] からラベル番号を得る.

    このとき重複を除去する.

    classes = np.unique(np.concatenate((ds_train[1], ds_test[1]), axis=0))
    

    [image]
  3. seaborn の準備
    import seaborn as sns
    sns.set()
    

    [image]
  4. 時系列データのプロット
    def plot_ts(x, y, classes, top_k, alpha):
    # ラベル付きの時系列データについて、うち、top_k 個をプロット。色はカラーマップ hsv を使って色付け、alpha は透明度。
        MI = np.min(classes)
        MA = np.max(classes)
        R = 0.8
        plt.figure()
        for c in classes:
            for i in x[y == c][0:top_k]:
                cval = R * (c - MI) / (MA - MI)
                plt.plot(i, alpha=alpha, color=cm.hsv(cval))
    
        plt.legend(loc="best")
        plt.show()
        plt.close()
    
    plot_ts(x = ds_train[0], y = ds_train[1], classes = classes, top_k = 10, alpha = 0.1)
    

    [image]
  5. 設定を変えてプロット
    plot_ts(x = ds_train[0], y = ds_train[1], classes = classes, top_k = 1, alpha = 1)
    

    [image]
  6. 主成分分析の結果である主成分スコアのプロット

    ds_train, ds_test の表示

    ds_train[0], ds_test[0] は主成分分析で2次元にマッピング, ds_train[1], ds_test[1] は色.

    import pandas as pd
    import seaborn as sns
    sns.set()
    import sklearn.decomposition
    # 主成分分析
    def prin(A, n):
        pca = sklearn.decomposition.PCA(n_components=n)
        return pca.fit_transform(A)
    
    # 主成分分析で2つの成分を得る
    def prin2(A):
        return prin(A, 2)
    
    # M の最初の2列を,b で色を付けてプロット
    def scatter_plot(M, b, alpha):
        a12 = pd.DataFrame( M[:,0:2], columns=['a1', 'a2'] )
        a12['target'] = b
        sns.scatterplot(x='a1', y='a2', hue='target', data=a12, palette=sns.color_palette("hls", np.max(b) + 1), legend="full", alpha=alpha)
    
    # 主成分分析プロット
    def pcaplot(A, b, alpha):
        scatter_plot(prin2(A), b, alpha)
    
    pcaplot(ds_train[0], ds_train[1], 0.1)
    

    [image]
    pcaplot(ds_test[0], ds_test[1], 0.1)
    

    [image]