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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

Q&A

解決済

2回答

1540閲覧

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

jun.k

総合スコア28

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

0グッド

0クリップ

投稿2017/11/24 06:31

編集2017/11/24 06:40

下記のような時系列のデータフレーム(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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

python

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

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

投稿2017/11/24 06:44

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jun.k

2017/11/24 08:44

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

2017/11/24 08:46

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

2017/11/24 09:10

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

2017/11/24 10:20

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

0

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

Python

1import pandas as pd 2from io import StringIO 3s = """ 4Index,A,B,C,D,E,F 52017-01-01 00:01:00,125.25,0.125,1.258,12547,2.5,-0.254 62017-01-01 00:02:00,124.23,0.125,1.258,12525,2.5,-0.255 72017-01-01 00:03:00,123.24,0.125,1.258,12503,2.5,-0.256 8""" 9df = pd.read_csv(StringIO(s), index_col='Index', parse_dates=['Index']) 10print(df) 11""" 12 A B C D E F 13Index 142017-01-01 00:01:00 125.25 0.125 1.258 12547 2.5 -0.254 152017-01-01 00:02:00 124.23 0.125 1.258 12525 2.5 -0.255 162017-01-01 00:03:00 123.24 0.125 1.258 12503 2.5 -0.256 17""" 18 19from sklearn.preprocessing import StandardScaler 20sc = StandardScaler() 21df[:] = sc.fit_transform(df) 22print(df) 23""" 24 A B C D E F 25Index 262017-01-01 00:01:00 1.230792 0.0 0.0 1.224745 0.0 1.224745 272017-01-01 00:02:00 -0.012186 0.0 0.0 0.000000 0.0 0.000000 282017-01-01 00:03:00 -1.218606 0.0 0.0 -1.224745 0.0 -1.224745 29"""

投稿2017/11/24 07:22

編集2017/11/24 07:24
can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jun.k

2017/11/24 09:54

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

2017/11/24 10:24

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問