Другое решение состоит в том, чтобы выполнить код через последовательный исполнитель nsynjs .
nsynjs будет последовательно оценивать все обещания и ставить обещания результат в свойство data
:
function synchronousCode() {
var getURL = function(url) {
return window.fetch(url).data.text().data;
};
var url = 'https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js';
console.log('received bytes:',getURL(url).length);
};
nsynjs.run(synchronousCode,{},function(){
console.log('synchronousCode done');
});
Шаг 1. Wrap с обратным вызовом в оболочку, совместимую с nsynjs (если у нее есть обещанная версия, вы можете пропустить этот тест):
var ajaxGet = function (ctx,url) {
var res = {};
var ex;
$.ajax(url)
.done(function (data) {
res.data = data;
})
.fail(function(e) {
ex = e;
})
.always(function() {
ctx.resume(ex);
});
return res;
};
ajaxGet.nsynjsHasCallback = true;
Шаг 2. Вставить синхронную логику в функцию:
function process() {
console.log('got data:', ajaxGet(nsynjsCtx, "data/file1.json").data);
}
Шаг 3. Выполнить функцию синхронно через nnsynjs:
nsynjs.run(process,this,function () {
console.log("synchronous function finished");
});
Nsynjs будет оценивать все операторы и выражения шаг за шагом, приостанавливая выполнение в случае, если результат некоторой медленной функции не готов.
Дополнительные примеры здесь: https://github.com/amaksr/nsynjs/tree/master/examples
Поскольку я изначально написал этот ответ, я обновил его многими способами, которые теперь доступны для доступа к наборам образцов данных в Python. Лично я склонен придерживаться любого пакета, который я уже использую (обычно морского или панд). Если вам нужен автономный доступ, установка набора данных с помощью Quilt кажется единственной опцией.
В блестящем графическом пакете seaborn
имеется несколько встроенных наборов данных выборки.
import seaborn as sns
iris = sns.load_dataset('iris')
iris.head()
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
Если вы не хотите импортировать seaborn
, но все же хотите получить доступ к его выборкам данных , вы может использовать подход @ andrewwowens для данных образцов морского судна:
iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
Обратите внимание, что образцы данных, содержащие категориальные столбцы, имеют свой тип столбца , измененный sns.load_dataset()
, и результат может не быть тем же самым, получая его непосредственно из URL.
Так как любой набор данных может быть прочитан через pd.read_csv()
, наборы данных образцов диафрагмы и наконечников также доступны в pandas github repo здесь .
Дополнительные способы загрузки наборов данных выборки R включают statsmodel
import statsmodels.api as sm
iris = sm.datasets.get_rdataset('iris').data
from pydataset import data
iris = data('iris')
scikit-learn
возвращает образцы данных как массивы numpy, а не кадр данных pandas.
from sklearn.datasets import load_iris
iris = load_iris()
# `iris.data` holds the numerical values
# `iris.feature_names` holds the numerical column names
# `iris.target` holds the categorical (species) values (as ints)
# `iris.target_names` holds the unique categorical names
Quilt - это менеджер набора данных, созданный для облегчения управления набором данных. Он включает в себя множество общих наборов данных выборки, таких как несколько из репозитория образцов uciml . На стартовой странице показано, как установить и импортировать набор диафрагмы:
# In your terminal
$ pip install quilt
$ quilt install uciml/iris
После установки набора данных он доступен локально, поэтому это лучший вариант, если вы хотите работать с данными в автономном режиме.
import quilt.data.uciml.iris as ir
iris = ir.tables.iris()
sepal_length sepal_width petal_length petal_width class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
Quilt также поддерживает управление версиями данных и включает краткое описание для каждого набора данных.
Любой общедоступный .csv-файл можно загружать в панды очень быстро, используя свой URL-адрес. Ниже приведен пример использования набора диафрагмы, хранящегося в архиве UCI.
import pandas as pd
file_name = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
df = pd.read_csv(file_name)
df.head()
Выход здесь - это заголовок файла .csv, который вы только что загрузили с данного URL.
>>> df.head()
5.1 3.5 1.4 0.2 Iris-setosa
0 4.9 3.0 1.4 0.2 Iris-setosa
1 4.7 3.2 1.3 0.2 Iris-setosa
2 4.6 3.1 1.5 0.2 Iris-setosa
3 5.0 3.6 1.4 0.2 Iris-setosa
4 5.4 3.9 1.7 0.4 Iris-setosa
Для этого сделан rpy2
модуль:
from rpy2.robjects import r, pandas2ri
pandas2ri.activate()
r['iris'].head()
дает
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
До pandas 0.19 вы могли бы использовать собственный интерфейс rpy
pandas:
import pandas.rpy.common as rcom
iris = rcom.load_data('iris')
print(iris.head())
дает
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
rpy2
также предоставляет способ для преобразования объектов R
в объекты Python :
import pandas as pd
import rpy2.robjects as ro
import rpy2.robjects.conversion as conversion
from rpy2.robjects import pandas2ri
pandas2ri.activate()
R = ro.r
df = conversion.ri2py(R['mtcars'])
print(df.head())
дает
mpg cyl disp hp drat wt qsec vs am gear carb
0 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
1 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
2 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
3 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
4 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2