web-dev-qa-db-ja.com

Arff Loader:AttributeError: 'dict' object has no attribute 'data'

Liac-arffライブラリを使用して.arffファイルをnumpy配列にロードしようとしています。 ( https://github.com/renatopp/liac-arff

これは私のコードです。

import arff, numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset.data)

実行すると、エラーが発生します。

ArffLoader.py", line 8, in <module>
data = np.array(dataset.data)
AttributeError: 'dict' object has no attribute 'data'

同様のスレッドを確認しました Smartsheet Data Tracker:AttributeError: 'dict' object has no attribute 'append' 。私はPython=に不慣れで、この問題を解決できません。どうすれば修正できますか?

14
Erdnase

短縮版

datasetdictです。 dictの場合、pythonインデックス表記、dataset[key]を使用して値にアクセスします。ここで、keyは文字列、整数、浮動小数点、タプル、またはその他の不変のデータ型(それよりも少し複雑ですが、興味がある場合は以下を参照してください)。

あなたの場合、キーは文字列の形式です。これにアクセスするには、次のように、必要な文字列をインデックスとして指定する必要があります。

import arff
import numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset['data'])

(これも読みやすさの問題ですが、インポートを同じ行に配置しないでください)

より詳細な説明

datasetdictであり、一部の言語ではmapまたはhashtableと呼ばれます。 dictでは、 "インデックス"が "ハッシュ可能"(理想的には一意の識別子)のデータ型である場合を除いて、リストまたは配列でインデックスを付ける方法と同様の方法で値にアクセスします可能な値ごとに)。この「インデックス」は「キー」と呼ばれます。実際には、少なくとも組み込み型とほとんどの主要なパッケージでは、不変のデータ型またはハッシュ可能のみですが、これが当てはまることを要求する実際の規則はありません。

MATLABの出身ですか?もしそうなら、あなたはおそらくMATLAB'sstructアクセステクニックを使用しようとしています。 dictは、はるかに高速で柔軟なstructと考えることができますが、値にアクセスするための構文は異なります。

19
TheBlackCat

Scipyを使用してarffデータをpythonにロードするのは簡単です。

from scipy.io import arff

import pandas as pd

data = arff.loadarff('dataset.arff')

df = pd.DataFrame(data[0])

df.head()
1
Thirumal Alagu