Chargement de collections d'ensembles de données - Exemples de code Python

Oct 20 2020

Parfois, vous voudrez peut-être vérifier vos idées sur plusieurs ensembles de données. Il existe plusieurs endroits avec des collections de jeux de données.

Question: Veuillez partager quelques scripts Python. Comment télécharger plusieurs jeux de données à partir de ces (ou d'autres) collections de jeux de données?

Idéalement, on devrait être en mesure de: 1) obtenir la liste des ensembles de données 2) sélectionner certains souhaités par les conditions 3) télécharger ceux sélectionnés. Mais si vous avez quelque chose de différent, veuillez quand même le partager.

Pour la base de données "openml" - j'ai un script - voir ma propre réponse. Mais j'en ai pour d'autres collections: Kaggle, uci ...


Voici quelques exemples de collections de jeux de données:

https://www.openml.org/

https://archive.ics.uci.edu/ml/index.php

https://ieee-dataport.org/datasets

Каggle contient de nombreux ensembles de données, il existe également des collections spécifiques: les collections de graphiques voir la liste ici https://mathoverflow.net/a/359449/10446 , de nombreuses données biologiques sont ici: https://www.ncbi.nlm.nih.gov/gds

Réponses

5 Farid Oct 22 2020 at 09:48

Comment récupérer les données Kaggle à partir du code python?

  1. Installez le package kaggle C: \ Users \ TalgatHafiz> pip install kaggle

  2. Connectez-vous à votre compte Kaggle cliquez sur l'icône dans le coin supérieur droit -> Mon compte Faites défiler jusqu'à la section API Cliquez sur "Créer un nouveau jeton API" Le fichier "kaggle.json" est créé et enregistré localement

  3. Créez ".kaggle" dir C: \ Users \ TalgatHafiz> mkdir .kaggle et déplacez "kaggle.json" dans ce répertoire

  4. voir toutes les compétitions actives en exécutant la commande suivante C: \ Users \ TalgatHafiz> kaggle competitions list

  5. Sélectionnez l'un des concours auxquels vous vous êtes inscrit, par exemple https://www.kaggle.com/c/contradictory-my-dear-watson/data#Défiler vers le bas. Juste avant la section "Explorateur de données", il devrait y avoir une ligne API: "kaggle competitions download -c contradictory-my-dear-watson" copiez-le

  6. lancez ces commandes depuis le notebook import kaggle! kaggle competitions download -c contradictory-my-dear-watson

  7. Le fichier de données zippé est téléchargé dans le même répertoire que celui où se trouve votre ordinateur portable: C: \ Users \ TalgatHafiz \ conda \ contradictory-my-dear-watson.zip donc vous pouvez maintenant décompresser et commencer à utiliser les données

Si vous avez encore des questions, veuillez lire https://medium.com/@jeff.daniel77/accessing-the-kaggle-com-api-with-jupyter-notebook-on-windows-d6f330bc6953

3 AlexanderChervov Oct 20 2020 at 02:35

Voici un script pour la collection "openml" d'ensembles de données. Espérons que l'on puisse fournir quelque chose de similaire pour d'autres bases de données.

#see docs: https://docs.openml.org/Python-guide/

!pip install openml
import openml

import numpy as np
import pandas as pd
import time


# Get information on all collection of openml datasets:
datalist = openml.datasets.list_datasets(output_format="dataframe")

# select datasets by some conditions (just pandas) - we will get just 4 such datasets 
datasets_selected = datalist[ (datalist.NumberOfInstances < 2550) & (datalist.NumberOfInstances > 300)& (datalist.NumberOfFeatures > 10000) &  (datalist.NumberOfFeatures < 40000) & \
                     ( datalist.NumberOfFeatures != 10937)    ].sort_values(["NumberOfInstances"], ascending=False)#.head(n=20)
print(datasets_selected.shape)

# load all selected datasets and print short info: 
for i in range(len(datasets_selected)):
  nm = datasets_selected['name'].iloc[i]
  print(nm, i )
  did =  int( datasets_selected['did'].iloc[i] ) # did - dataset_id 
  t0 = time.time()
  data = openml.datasets.get_dataset(did)
  X, y, categorical_indicator, attribute_names = data.get_data(
      dataset_format="array", target=data.default_target_attribute )
  print(X.shape, y.shape, time.time()-t0,'secs passed' )

Voici un exemple encore plus simple pour les ensembles de données intégrés sklearn:

import numpy as np 
from sklearn import  datasets 
import time
list_id =  ['load_boston', 'load_iris', 'load_diabetes', 'load_digits', 'load_linnerud', 'load_wine' , 'load_breast_cancer'] + \
 ['fetch_california_housing', 'fetch_covtype',  'fetch_lfw_people', 'fetch_20newsgroups_vectorized','fetch_olivetti_faces' ]
# 'fetch_rcv1', - too long 
# 'fetch_lfw_pairs' - TypeError fetch_lfw_pairs() got an unexpected keyword argument 'return_X_y
# 'fetch_kddcup99' - sometimes problem happens
for id in list_id:
  print(id)
  t0 = time.time()
  func_load  = getattr(datasets, id )
  X,y = func_load(return_X_y = True)
  print(id, X.shape, time.time()-t0, 'secs passed')
3 JoaquinVanschoren Oct 20 2020 at 16:35

OpenML a une galerie d'exemples de cas d'utilisation différents, y compris la navigation et le téléchargement d'ensembles de données via python, et l'exécution de benchmarks: https://openml.github.io/openml-python/master/examples/index.html

Lorsque vous souhaitez évaluer de nouveaux algorithmes, voici l'essentiel:

import openml
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

suite = openml.study.get_suite('OpenML-CC18') # get benchmark suite
tasks = np.random.choice(suite.tasks, size=10, replace=False) # sample 10 tasks randomly
clf = make_pipeline(SimpleImputer(),RandomForestClassifier()) # simple pipeline
for task_id in tasks:
    task = openml.tasks.get_task(task_id)
    print("Running on task",task.get_dataset().name)
    run = openml.runs.run_model_on_task(clf, task)
    print(run.get_metric_fn(accuracy_score))

Sortie (ce sont des tâches CV de 10 fois):

Running on task credit-approval
[0.928 0.884 0.841 0.768 0.913 0.884 0.884 0.841 0.899 0.884]
Running on task pc1
[0.955 0.919 0.946 0.955 0.937 0.973 0.919 0.928 0.919 0.918]

Vous pouvez également choisir de partager directement le résultat sur OpenML avec run.publish()

Avertissement: je suis l'un des principaux développeurs d'OpenML