Передать прокси на Seaborn

Я использую seaborn для визуализации данных. Но он не работает с образцами данных, которые есть в документации.

import seaborn as sns
sns.set()
tips = sns.load_dataset("tips")

Traceback (most recent call last):
  File "databaseConnection.py", line 35, in <module>
    tips = sns.load_dataset("tips")
  File "C:\python3.7\lib\site-packages\seaborn\utils.py", line 428, in load_dataset
    urlretrieve(full_path, cache_path)
  File "C:\python3.7\lib\urllib\request.py", line 247, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
  File "C:\python3.7\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\python3.7\lib\urllib\request.py", line 525, in open
    response = self._open(req, data)
  File "C:\python3.7\lib\urllib\request.py", line 543, in _open
    '_open', req)
  File "C:\python3.7\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\python3.7\lib\urllib\request.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:\python3.7\lib\urllib\request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>

Это потому, что я пользуюсь прокси, но как я могу попросить seaborn использовать прокси?


person garg10may    schedule 04.02.2019    source источник


Ответы (2)


Вы можете скачать файл вручную.

Использовать

import seaborn as sns
print(sns.utils.get_data_home())

чтобы узнать папку для ваших морских данных, например. это может выглядеть как C:\Users\username\seaborn-data в Windows.

Загрузите файл https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv в эту папку. Наконец, используйте опцию «кэширования».

sns.load_dataset("tips", cache=True)

Либо загрузите файл в любую другую папку. Используйте путь к этой папке в качестве аргумента data_home

sns.load_dataset(name, cache=True, data_home="path/to/folder")
person ImportanceOfBeingErnest    schedule 04.02.2019
comment
да, это там, возможно, функцию прокси следует добавить в seaborn - person garg10may; 04.02.2019
comment
Я предполагаю, что предоставление примеров данных на самом деле не является ключевой функцией seaborn, для которой потребуется полноценная поддержка. Это скорее хороший способ позволить людям начать использовать seaborn без внешних данных и сделать примеры воспроизводимыми. При необходимости вы можете поместить описанные выше шаги в пользовательскую функцию, чтобы использовать ее вместо load_dataset. - person ImportanceOfBeingErnest; 04.02.2019
comment
В настоящее время (версия 0.9.0) вам нужно избегать расширения .csv из последней строки, потому что оно добавляет его автоматически, а затем выбирает его повторную загрузку (см. github.com/mwaskom/seaborn/blob/v0.9/seaborn/utils.py#L417 ) Вы, вероятно, не видели это потому, что вы не были за прокси во время теста. Возможно, вы могли бы добавить строку tips = pd.read_csv(sns.utils.get_data_home()+"/tips.csv"), потому что load_dataset все равно возвращает pandas.DataFrame. - person Liso; 26.04.2019
comment
@Liso Спасибо, я удалил .csv из ответа. Однако tips = pd.read_csv(sns.utils.get_data_home()+"/tips.csv") не даст того же результата, что и sns.load_dataset, потому что seaborn изменяет типы данных определенных столбцов в возвращаемом фрейме данных (как показано здесь). - person ImportanceOfBeingErnest; 26.04.2019
comment
@ImportanceOfBeingErnest, вы правы, одного и того же типа здесь недостаточно. Спасибо за проверку. - person Liso; 28.04.2019
comment
@ImportanceOfBeingErnest, используя get_data_home, я получаю данные, но как изменить этот путь на мой текущий путь? - person Sujit Dhamale; 12.06.2019

Я понимаю, вопрос немного устарел. Но я искал похожее решение, которое у меня не работало (как-то), упомянутое выше. Итак, я создал аналогичный/повторяющийся вопрос по ссылке ниже:

Не удалось решить проблему (ошибка HTTP 404) с функцией seaborn.load_dataset

И тогда я нашел свое решение путем отладки. Подробности ниже:

load_dataset() доступен в файле библиотеки utils.py, где путь имеет ниже жестко закодированную строку:

path = ("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/{}.csv")

Итак, какое бы имя файла мы ни указывали в функции load_dataset(), python ищет его в Интернете по указанному выше пути. Нет варианта, где мы можем дать нашу собственную онлайн-ссылку на набор данных, кроме указанного выше пути. Второй параметр load_dataset() — это «кэш», который имеет логическое значение по умолчанию «Истина». Таким образом, если набор данных не найден в сети, функция будет искать физический путь, как показано ниже:

<Your Drive>:\Users\<Your User name>\seaborn-data 
    e.g. C:\Users\user1\seaborn-data    

Этот путь должен иметь наш набор данных, если он не найден в Интернете. то есть приведенный ниже код будет работать, если у нас физически присутствует набор данных:

df = sns.load_dataset('FiveYearData')

(Примечание. Но если набор данных найден в сети, то из-за того, что cache=True, он также будет скопирован по указанному выше пути.)

Мы также можем указать другой физический путь для набора данных с помощью третьего параметра (data_home), как показано ниже:

df = sns.load_dataset('FiveYearData',data_home=os.path.dirname(os.path.abspath("FiveYearData")))

Здесь я беру свой текущий рабочий каталог проекта, чтобы иметь свой набор данных.

person WpfBee    schedule 18.07.2019