整数にカテゴリ変数を再コーディングLabelEncoderスピードアップする方法:私はこのフォームで行ごとに2つの文字列を持つ大規模なCSVファイルを持っている
g,k
a,h
c,i
j,e
d,i
i,h
b,b
d,d
i,a
d,h
は、私が最初の2列に読み込み、次のように整数に文字列を再コーディング:
import pandas as pd
df = pd.read_csv("test.csv", usecols=[0,1], prefix="ID_", header=None)
from sklearn.preprocessing import LabelEncoder
# Initialize the LabelEncoder.
le = LabelEncoder()
le.fit(df.values.flat)
# Convert to digits.
df = df.apply(le.transform)
このコードはhttps://stackoverflow.com/a/39419342/2179021です。
コードは非常にうまく動作しますが、dfが大きい場合は遅くなります。私は各ステップをタイムリーに行い、その結果は私にとって驚くべきものでした。
pd.read_csv
が約40秒かかる。le.fit(df.values.flat)
は約30秒である。df = df.apply(le.transform)
は約250秒かかる。
この最後のステップをスピードアップする方法はありますか?それは彼らのすべての最速のステップでなければならないように感じる!
maxymooによってRAM 4GBの
以下の答えを持つコンピュータ上で再コード化ステップのためのより多くのタイミングが速いですが、正しい答えを与えるものではありません。
0 1
0 4 6
1 0 4
2 2 5
3 6 3
4 3 5
5 5 4
6 1 1
7 3 2
8 5 0
9 3 4
「D」は第二に、最初の列における3が、2にマッピングされていることに注意してください。問題の上から例CSVを取って、それはそれを翻訳します。
私はhttps://stackoverflow.com/a/39356398/2179021から解決策を試して、以下を取得しました。
df = pd.DataFrame({'ID_0':np.random.randint(0,1000,1000000), 'ID_1':np.random.randint(0,1000,1000000)}).astype(str)
df.info()
memory usage: 7.6MB
%timeit x = (df.stack().astype('category').cat.rename_categories(np.arange(len(df.stack().unique()))).unstack())
1 loops, best of 3: 1.7 s per loop
は、その後、私は10
df = pd.DataFrame({'ID_0':np.random.randint(0,1000,10000000), 'ID_1':np.random.randint(0,1000,10000000)}).astype(str)
df.info()
memory usage: 76.3+ MB
%timeit x = (df.stack().astype('category').cat.rename_categories(np.arange(len(df.stack().unique()))).unstack())
MemoryError Traceback (most recent call last)
の要因によりデータフレームのサイズを増加し、この方法は、それがクラッシュし、この比較的小さなデータフレームを翻訳しようとしているので、多くのRAMを使用するように表示されます。
また、10万行の大きなデータセットでLabelEncoderをタイムリーにしました。それはクラッシュすることなく実行されますが、フィットラインだけでも50秒かかりました。 df.apply(le.transform)のステップには約80秒かかりました。
はどうすればよい:
- はmaxymooの答えのおおよその速度とLabelEncoderのおおよそのメモリ使用量の何かを取得しますが、データフレームは、2つの列を持つ場合、それは正しい答えを与えます。
- (LabelEncoderで可能なように)別のデータに再利用できるようにマッピングを保存しますか?
あなたのCSVどのくらいです - 行と列は?いくつのファイルがありますか? – wwii
@wwii約10百万行と百万個のle.classes。 – eleanora
'' 'groupby ....' 'は何を達成するのですか? – wwii