J'essaie de charger un fichier .arff dans un tableau numpy à l'aide de la bibliothèque liac-arff. ( https://github.com/renatopp/liac-arff )
Ceci est mon code.
import arff, numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset.data)
lors de l'exécution, j'obtiens l'erreur.
ArffLoader.py", line 8, in <module>
data = np.array(dataset.data)
AttributeError: 'dict' object has no attribute 'data'
J'ai vu des discussions similaires, Smartsheet Data Tracker: AttributeError: l'objet 'dict' n'a pas d'attribut 'append' . Je suis nouveau sur Python et je ne parviens pas à résoudre ce problème. Comment puis-je réparer cela?
dataset
est une dict
. Pour un dict
, vous accédez aux valeurs en utilisant la notation d'indexation python, dataset[key]
, où key
pourrait être une chaîne, un entier, un flottant, un tuple ou tout autre type de données immuable intéressé).
Dans votre cas, la clé est sous la forme d'une chaîne. Pour y accéder, vous devez donner la chaîne de votre choix sous forme d'index, comme suit:
import arff
import numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset['data'])
(vous ne devriez pas non plus mettre les importations sur la même ligne, bien que ce soit juste un problème de lisibilité)
dataset
est une dict
qui, dans certaines langues, est appelée map
ou hashtable
. Dans dict
, vous accédez aux valeurs de la même manière que vous indexez dans une liste ou un tableau, sauf que "index" peut être n'importe quel type de données "hashable" (qui est, idéalement, un identifiant unique pour chaque valeur possible) . Cet "index" s'appelle une "clé". En pratique, du moins pour les types intégrés et la plupart des packages majeurs, il ne s'agit que de types de données immuables ou haschaables, mais il n'existe pas de règle réelle exigeant que cela soit le cas.
Vous venez de MATLAB
? Si c'est le cas, vous essayez probablement d'utiliser la technique d'accès MATLAB's
struct
. Vous pourriez imaginer une dict
comme une struct
beaucoup plus rapide et plus flexible, mais la syntaxe d'accès aux valeurs est différente.
Il est facile de charger des données arff dans python avec scipy.
from scipy.io import arff
import pandas as pd
data = arff.loadarff('dataset.arff')
df = pd.DataFrame(data[0])
df.head()