質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.34%

  • Python 3.x

    2413questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Jupyter

    57questions

時系列データのsklearnでの標準化について

解決済

回答 2

投稿 2017/11/24 15:31 ・編集 2017/11/24 15:40

  • 評価
  • クリップ 0
  • VIEW 61

jun.k

score 13

下記のような時系列のデータフレーム(dfa)があります。pd.infoは以下の通りです。

A      B      C      D     E        F
Data                        
2017-01-01 00:01:00    125.25    0.125    1.258    12547    2.5    -0.254
2017-01-01 00:02:00    124.23    0.125    1.258    12525    2.5    -0.255
2017-01-01 00:03:00    123.24    0.125    1.258    12503    2.5    -0.256
2017-01-01 00:04:00    125.48    0.125    1.258    12481    2.5    -0.253
2017-01-01 00:05:00    126.25    0.225    1.258    12459    2.5    -0.252
2017-01-01 00:06:00    127.25    1.225    2.258    12460    3.5    0.748
2017-01-01 00:07:00    127.25    0.225    1.258    12437    2.5    -0.254
2017-01-01 00:08:00    130.05    0.225    1.258    12415    2.5    -0.255

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 933505 entries, 2017-01-01 00:01:00 to 2017-09-30 14:59:00
Columns: 200 entries, A to AZ=
dtypes: float64(430)
memory usage: 10.0 MB

上記の通り、indexはDatetime型、columnsは文字列です。元データ表記を少し変えておりますが、カラム銘柄毎の時間毎の値を行方向に並べております。このデータの標準化をsklearnのモジュールを使って行うべく下記コードを実行したところ、Datetimeであるindexも標準化されてしまいました。

sc=StandardScaler()
dfa_std=sc.fit_transform(dfa)

index列を切り分けて標準化し、その後併合すればよいのかもしれませんが、切り分けせずにindex以外を行方向に標準化する方法はございますでしょうか。

よろしくお願いいたします。

p.s 追記です。標準化コード実行は下記の通りの表示となってしまいました。
0        1      2      3      4       5
0    -1.367752 -0.32971 1.868358 -0.931302    0.157813 1.33493
1    -1.367752 -0.33094 1.868358 -0.931302    0.157813 1.33493
2    -1.367752 -0.33197 1.868358 -0.931302    0.157813 1.33493
3    -1.367752 -0.33126 1.868358 -0.931302    0.157813 1.33493
4    -1.367752 -0.3309  1.868358 -0.931302    0.157813 1.33493

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

col = ['A','B','C','D','E','F']
sc = StandardScaler()
dfa.loc[:, col] = sc.fit_transform(dfa.loc[:, col])


とかですか?
新しいdfa_stdのDataFrameがほしいのであれば、これではいけませんが。

投稿 2017/11/24 15:44

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 17:44

    早速のご回答ありがとうございます! 実はcolがかなりの数あるのと、新しいDataFrameがほしいのでちょっと難しそうです。colをdfa.columnsで表示させてコピペしようとしたのですが、省略されてしまい・・・・・。

    キャンセル

  • 2017/11/24 17:46

    col = dfa.columns
    で問題ありませんよ。
    省略は表示だけです。

    キャンセル

  • 2017/11/24 18:10

    あっ。そういえばそうですね。試してみます。

    キャンセル

  • 2017/11/24 19:20

    ありがとうございました!!!。うまくいきました。dfaの場所を指定する必要があるのですね。dfaを上書きしてしまいましたが後は何とかなりそうです。

    キャンセル

+1

全列が標準化対象で、そのまま元のデータフレームに戻してあげたい場合は、以下のようにも記載できます。
参考:pandas dataframe columns scaling with sklearn

import pandas as pd
from io import StringIO
s = """
Index,A,B,C,D,E,F
2017-01-01 00:01:00,125.25,0.125,1.258,12547,2.5,-0.254
2017-01-01 00:02:00,124.23,0.125,1.258,12525,2.5,-0.255
2017-01-01 00:03:00,123.24,0.125,1.258,12503,2.5,-0.256
"""
df = pd.read_csv(StringIO(s), index_col='Index', parse_dates=['Index'])
print(df)
"""
                          A      B      C      D    E      F
Index
2017-01-01 00:01:00  125.25  0.125  1.258  12547  2.5 -0.254
2017-01-01 00:02:00  124.23  0.125  1.258  12525  2.5 -0.255
2017-01-01 00:03:00  123.24  0.125  1.258  12503  2.5 -0.256
"""

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
df[:] = sc.fit_transform(df)
print(df)
"""
                            A    B    C         D    E         F
Index
2017-01-01 00:01:00  1.230792  0.0  0.0  1.224745  0.0  1.224745
2017-01-01 00:02:00 -0.012186  0.0  0.0  0.000000  0.0  0.000000
2017-01-01 00:03:00 -1.218606  0.0  0.0 -1.224745  0.0 -1.224745
"""

投稿 2017/11/24 16:22

編集 2017/11/24 16:24

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 18:54

    ご回答ありがとうございます! 上記試してみます(データが重いのでちょっと時間がかかっております。mkgrei様の結果もふくめて判明次第再度コメントさせていただきますので、少々お待ちください)。

    キャンセル

  • 2017/11/24 19:24

    ありがとうございました!!。うまくいきました。mkgrei様のコードだとfit_transformの引数dfaだけではダメそうでしたが、こちらはよりコードがすっきりしますね。どういうしくみか分かりませんが助かりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.34%

関連した質問

  • 解決済

    特定のカラムの存在確認

    mysqlを利用して特定のカラム(複数)の存在確認をしたいと考えています。 確認したいカラムが一つであれば SHOW COLUMNS FROM hogeTable LIKE 'h

  • 解決済

    Python:2つのデータフレームを比較し,時間が近いものを抜き出す

    前提・実現したいこと いつもお世話になっております。データフレームの取扱が分からず、質問させていただきます。 次の2つのCSVファイルがあるとします。 (本当はソースコー

  • 解決済

    時間ごとに単純移動平均を計算する:Pandas

    前提・実現したいこと お世話になります。時間ごとに区切って単純移動平均を出したいと思っています。 例えばこんなデータがあるとします。 //data.csv time,

  • 解決済

    .net DataTable 列のタイプ指定

    お世話になっております。 現在.netでプログラムを作成しているのですが、作成したDataTableに列を追加した際に、どうも指定した型の列を追加してくれなくて困っています。

  • 解決済

    pandas DateTimeIndex型の時刻のみ指定したデータ抽出について

    下記のようなpandasのDateTimeIndex型のインデックスとなっているデータ:dataで、時刻のみ指定してデータを抽出方法があれば、ご教授頂きたいです。 説明不足でしたの

  • 解決済

    pivotの限界について

    データフレーム化したデータ(df)の行列を再配置すべく、df1=df.pivot('date','ric','price')としたいのですが、エラーで処理されません。 エラーコ

  • 解決済

    どのようにインスタンスを作成すればいいのか?

    2017年09月24日(日) ↑このような形式の日付を ↓このような形式に書き換える関数を作っています。(ネットでググりながら自己流です) 2017-09-24 そこで、エラ

  • 解決済

    Pyhon : k 近傍の混同行列

    前提・実現したいこと k 近傍法の実装の正解率の結果を元に混同行列を作成したいのですがどうすればいいのか。(kの大きさごとに混合行列を作成したいため) 該当のソースコード fr

同じタグがついた質問を見る

  • Python 3.x

    2413questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Jupyter

    57questions