Girl with python: Girl plays with giant python 4 times her size in viral VIDEO — RT UK News
Введение · HonKit
Это руководство распространяется под международной лицензией Creative Commons Attribution-ShareAlike 4.0
Чтобы ознакомиться с содержанием этой лицензии, посети: https://creativecommons.org/licenses/by-sa/4.0/
Вступительное слово
Добро пожаловать в руководство Django Girls! Мы рады тебя здесь видеть 🙂 В этом руководстве мы заглянем за кулисы веб-технологий и дадим
базовое представление о тех вещах, которые собираются в общую картину веба таким, каким мы его знаем.
Как и с любой незнакомой темой – это будет приключением. Но не волнуйся, тебе уже хватило смелости оказаться здесь, так что всё будет хорошо 🙂
Введение
Ты когда-нибудь чувствовала, что мир становится все более и более технологичным, в то время как ты остаёшься где-то позади? Ты задумывалась о том, как создать веб-сайт, но мотивации начать никогда не хватало? Приходило ли тебе в голову, что мир программного обеспечения слишком сложен, чтобы пробовать сделать что-то самой?
Тогда у нас есть для тебя хорошие новости! Программирование – не такая уж сложная задача, как кажется, и мы покажем тебе, как весело это может быть.
Это руководство не превратит тебя волшебным образом в программиста. Если ты хочешь добиться мастерства, то потребуются месяцы, а может быть и годы обучения и практики. Однако, мы хотим показать тебе, что программирование или создание веб-сайтов не настолько сложная задача как может показаться. Мы постараемся объяснить все настолько хорошо, насколько сможем, чтобы ты не чувствовала себя запуганной техническими деталями.
Надеемся, что ты полюбишь информационные технологии также, как мы любим их!
Что ты узнаешь из этого руководства?
После прохождения руководства у тебя будет простое работающее веб-приложение: свой собственный блог. Мы покажем, как разместить его онлайн, чтобы другие увидели твою работу!
Он будет выглядеть следующим образом (более или менее):
Если ты будешь работать над учебником самостоятельно и без тренера, который смог бы помочь при необходимости, то у нас есть для тебя чат: . Мы попросили наших тренеров и успешно прошедших обучение участников заглядывать туда время от времени и помогать остальным! Не стесняйся задавать там свои вопросы!
Хорошо, давай начнем с начала. ..
Прохождение руководства дома
Принимать участие в воркшопе Django Girls – это потрясающе, но мы понимаем, что не всегда есть такая возможность. Поэтому мы приветствуем прохождение
данного руководства дома. В настоящий момент мы готовим видео, которое поможет следовать руководству самостоятельно. Работа над ними ещё не закончена,
но все больше и больше тем скоро будут разобраны на YouTube-канале
Изучаем Django c Djangogirls / Песочница / Хабр
Djangogirls — это некоммерческая организация, учрежденная двумя польскими девушками (Ola Sitarska и Ola Sendecka) в 2014 году, основная цель которой — популяризация программирования, в частности Python и Django, среди представительниц слабого пола путем организации семинаров и предоставления сопутствующих материалов по теме.
За год, прошедший с основания, организация пережила настоящий бум, проведя десятки семинаров по всему миру, собрав внушительное сообщество, обзаведясь спонсорами и получив положительные отзывы в том числе и от Гвидо ван Россума. Ключевым камнем обучения (помимо организаторских талантов основательниц) стало отличное открытое руководство по Django для начинающих (мальчиков тоже пускают). Чуть больше подробностей под катом.
Руководство доступно на шести языках (английский, польский, украинский, испанский, французский и бразильский-португальский) и представляет собой поэтапные инструкции по подготовке рабочего места (установка необходимого ПО, краткий вводный курс в синтаксис Python, virtualenv, git и т.д.), созданию сайта (на примере блога) и его развертыванию его на хостинге.
Содержание:
- Установка
- Как работает Интернет
- Введение в командную строку
- Установка Python
- Редактор кода
- Введение в Python
- Что такое Django?
- Установка Django
- Твой первый Django проект
- Модели в Django
- Администрирование в Django
- Развертывание
- URL-адреса в Django
- Представления в Django
- Введение в HTML
- Django ORM (Querysets)
- Динамически изменяющиеся данные в шаблонах
- Шаблоны в Django
- CSS
- Расширение возможностей шаблона
- Расширяем приложение
- Формы в Django
Руководство относительно простое, справиться должен даже полный новичок, при этом все шаги подробно объясняются, авторы стараются свести «магию» к минимуму, а на случай неразрешимых затыков открыт чат. По завершению получаем работающий (хоть и весьма минималистичный) блог:
Полный текcт учебника выложен на Github. Перевод на русский язык (и многие другие) проходит на открытой площадке crowdin. Любая помощь в этом направлении будет весьма кстати (сейчас особенно требуется вычитка готового текста и голосование за доступные варианты перевода).
Djangogirls постоянно ищут партнеров и энтузиастов для организации своих мероприятий, если вам интересна эта тема, то стучитесь сюда: djangogirls.org/organize
В заключение, запомнившаяся многим презентация Djangogirls на EuroPython 2015:
Парсеры (краулеры) сайтов на Python
Введение
Примеры
Базовый пример использования запросов и lxml для очистки некоторых данных
# For Python 2 compatibility.
from __future__ import print_function
import lxml. html
import requests
def main():
r = requests.get("https://httpbin.org")
html_source = r.text
root_element = lxml.html.fromstring(html_source)
# Note root_element.xpath() gives a *list* of results.
# XPath specifies a path to the element we want.
page_title = root_element.xpath('/html/head/title/text()')[0]
print(page_title)
if __name__ == '__main__':
main()
Ведение веб-сессии с запросами
Это хорошая идея , чтобы поддерживать веб-соскоб сессии упорствовать печенье и другие параметры. Кроме того, это может привести в повышению производительности , так как requests.Session
повторно использует ТСР — соединение с узлом:
import requests
with requests.Session() as session:
# all requests through session now have User-Agent header set
session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}
# set cookies
session. get('http://httpbin.org/cookies/set?key=value')
# get cookies
response = session.get('http://httpbin.org/cookies')
print(response.text)
Соскоб с использованием основы Scrapy
Сначала вы должны создать новый проект Scrapy. Введите каталог, в котором вы хотите хранить свой код, и запустите:
scrapy startproject projectName
Чтобы очистить нам нужен паук. Пауки определяют, как будет очищен определенный сайт. Вот код для паука , который следует ссылки на верхнюю проголосовали вопросы по StackOverflow и соскребают некоторые данные из каждой страницы ( источник ):
import scrapy
class StackOverflowSpider(scrapy.Spider):
name = 'stackoverflow' # each spider has a unique name
start_urls = ['https://codecamp.ru/questions?sort=votes'] # the parsing starts from a specific set of urls
def parse(self, response): # for each request this generator yields, its response is sent to parse_question
for href in response. css('.question-summary h4 a::attr(href)'): # do some scraping stuff using css selectors to find question urls
full_url = response.urljoin(href.extract())
yield scrapy.Request(full_url, callback=self.parse_question)
def parse_question(self, response):
yield {
'title': response.css('h2 a::text').extract_first(),
'votes': response.css('.question .vote-count-post::text').extract_first(),
'body': response.css('.question .post-text').extract_first(),
'tags': response.css('.question .post-tag::text').extract(),
'link': response.url,
}
Сохраните классы паукообразных в projectName\spiders
каталога. В данном случае — projectName\spiders\stackoverflow_spider.py
.
Теперь вы можете использовать свой паук. Например, попробуйте запустить (в каталоге проекта):
scrapy crawl stackoverflow
Изменить пользовательский агент Scrapy
Иногда по умолчанию Scrapy агент пользователя ( "Scrapy/VERSION (+http://scrapy. org)"
) блокируется хостом. Чтобы изменить пользователя по умолчанию агента открытым settings.py в, раскомментируйте и отредактируйте следующую строку к тому , что вы хотите.
#USER_AGENT = 'projectName (+http://www.yourdomain.com)'
Например
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
Выскабливание с использованием BeautifulSoup4
from bs4 import BeautifulSoup
import requests
# Use the requests module to obtain a page
res = requests.get('https://www.codechef.com/problems/easy')
# Create a BeautifulSoup object
page = BeautifulSoup(res.text, 'lxml') # the text field contains the source of the page
# Now use a CSS selector in order to get the table containing the list of problems
datatable_tags = page.select('table.dataTable') # The problems are in the <table> tag,
# with class "dataTable"
# We extract the first tag from the list, since that's what we desire
datatable = datatable_tags[0]
# Now since we want problem names, they are contained in <b> tags, which are
# directly nested under <a> tags
prob_tags = datatable. select('a > b')
prob_names = [tag.getText().strip() for tag in prob_tags]
print prob_names
Соскоб с использованием Selenium WebDriver
Некоторые сайты не любят, когда их вычищают. В этих случаях вам может понадобиться симулировать реального пользователя, работающего с браузером. Selenium запускает и контролирует веб-браузер.
from selenium import webdriver
browser = webdriver.Firefox() # launch firefox browser
browser.get('https://codecamp.ru/questions?sort=votes') # load url
title = browser.find_element_by_css_selector('h2').text # page title (first h2 element)
questions = browser.find_elements_by_css_selector('.question-summary') # question list
for question in questions: # iterate over questions
question_title = question.find_element_by_css_selector('.summary h4 a').text
question_excerpt = question.find_element_by_css_selector('.summary .excerpt').text
question_vote = question.find_element_by_css_selector('.stats .vote .votes . vote-count-post').text
print "%s\n%s\n%s votes\n-----------\n" % (question_title, question_excerpt, question_vote)
Селен может сделать гораздо больше. Он может изменять файлы cookie браузера, заполнять формы, имитировать щелчки мышью, делать скриншоты веб-страниц и запускать пользовательский JavaScript.
Простая загрузка веб-контента с помощью urllib.request
Стандартный модуль библиотеки urllib.request
может быть использована для загрузки веб — контента:
from urllib.request import urlopen
response = urlopen('https://codecamp.ru/questions?sort=votes')
data = response.read()
# The received bytes should usually be decoded according the response's character set
encoding = response.info().get_content_charset()
html = data.decode(encoding)
Аналогичный модуль также доступен в Python 2 .
Соскоб с завитком
импорт:
from subprocess import Popen, PIPE
from lxml import etree
from io import StringIO
Загрузка:
user_agent = 'Mozilla/5. # начало строки
\[font # тег font
(?:=(?P<size> # опционально [font=+size]
[-+][0-9]{1,2} # определение размера
))?
\] # конец тега
(.*?) # содержимое тега
\[/font\] # закрывающий тег
""", re.DEBUG|re.VERBOSE|re.DOTALL)
Выражения-генераторы
В Python есть очень удобные генераторы коллекций (списков, множеств, словарей), которые позволяют легко и быстро создавать отфильтрованные коллекции значений. Например, вот так можно создавать Python списки:
numbers = range(10) x = [n for n in numbers if n % 2 == 0] print(x) # 0 2 4 6 8
А еще есть выражения-генераторы, которые не загружают коллекцию в память целиком, а выдают лишь один элемент по требованию. В некоторых случаях это позволяет существенно сэкономить расходы памяти. Единственное отличие в синтаксисе – это круглые скобки:
y = (n for n in numbers if n % 2 == 0) print(y) # <generator object>
Ряд особенностей Python генераторов:
- невозможно получить их длину;
- нельзя сделать срез элементов, перемотать или получить случайный элемент по его индексу;
- функция print выводит объект генератора, а не список элементов.
Зато их удобно использовать в различных конструкциях, где требуется итерируемый объект. В выражения-генераторы можно включать множественные условия отбора значений и сочетать несколько циклов:
n = ((a,b) for a in range(0,2) for b in range(4,6)) for i in n: print(i) # (0, 4) # (0, 5) # (1, 4) # (1, 5)
Подводные камни дефолтных аргументов
Устанавливая значение аргументов функции по умолчанию, будьте очень осторожны:
def foo(x = []): x.append(1) print(x) foo() # [1] foo() # [1, 1] foo() # [1, 1, 1]
Вряд ли вы хотели, чтобы список x изменялся при каждом вызове функции. Так происходит из-за того, что дефолтные параметры хранятся в неизменном кортеже в атрибуте foo.__defaults__
, который создается в момент определения функции.
Вместо мутабельных списков лучше использовать значение None
, а список присваивать в x
уже внутри функции:
def foo2(x=None): if x is None: x=[] x.append(1) print(x) foo2() # [1] foo2() # [1] foo2() # [1]
Передача значений в генератор
Язык программирования Python поддерживает генераторы – функции со множественными точками входа. В генератор можно передать значение на каждом шаге работы, что очень удобно, если приходится работать с динамическими данными:
def my_generator(): a = 5 # значение, которое вернется при первом вызове while True: f = (yield a) # вернуть a и получить новое значение f if f is not None: a = f # сохранить новое значение
Это бессмысленная в целом функция, которая просто сохраняет полученное значение и возвращает его при следующем вызове.
В старом стандарте языка был метод my_generator.next(value)
, который сразу возвращал текущее значение генератора и принимал новое. В Python 3 необходимо использовать два метода: next(my_generator)
и my_generator.send(value)
.
g = my_generator() # создать новый генератор print(next(g)) # первый возврат по умолчанию (5) g.send(100) # передача нового значения в f print(next(g)) # получение переданного ранее значения (100) g.send(42) print(next(g)) # 42
Встроенная функция breakpoint()
Хотя мы и хотим писать идеальный код, правда в том, что это невозможно. Но такие фичи, как новая встроенная функция breakpoint()
, пришедшая с Python 3.7, существенно облегчают жизнь питонистов. Нет, это не добавляет принципиально новой функциональности в язык программирования Python, зато делает дебагинг более гибким и понятным.
Шаг среза
Третий аргумент slice-оператора в Python определяет шаг среза. По умолчанию он равен единице, поэтому в итоговый срез попадают все элементы диапазона подряд.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(a[2:8:]) # [3, 4, 5, 6, 7, 8]
А можно взять, например, каждый второй элемент:
print(a[2:8:2]) # [3, 5, 7]
Если передать третьим параметром -1
, счет пойдет в обратном порядке. Так можно легко развернуть список или строку.
print(a[::-1]) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Декораторы
Декоратор – это обертка для функции, позволяющая изменить некоторым образом ее поведение. Например, просто распечатать аргументы перед вызовом:
def print_args(function): def wrapper(*args, **kwargs): print('args:', args) print('kwargs:', kwargs) return function(*args, **kwargs) return wrapper
Теперь необходимо передать функции print_args
другую функцию, аргументы которой необходимо распечатать:
def write(a, b): print(a, b) write_with_print = print_args(write) write_with_print('foo', 'bar') # args: ('foo', 'bar') # kwargs: {} # foo bar
Все работает правильно, но приходится создавать новую функцию и вызывать именно ее.
В Python работа с декораторами устроена гораздо удобнее. Вы можете сохранить исходное имя функции и ее подпись при интроспеции:
@print_args def write(a, b): print(a, b) write('foo', 'bar') # args: ('foo', 'bar') # kwargs: {} # foo bar
Отсутствующие элементы словарей
В Python 2.M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
Кроме того, совпадения можно именовать:
p = re.compile(r'(?P<word>\b\w+\b)') m = p.search( '(((( Lots of punctuation )))' ) m.group('word') # 'Lots'
Распаковка аргументов
Параметры можно передать в функцию в виде списка или словаря и распаковать их автоматически, используя синтаксис *
и **
.
def draw_point(x, y): # do some magic point_foo = (3, 4) point_bar = {'y': 3, 'x': 2} draw_point(*point_foo) draw_point(**point_bar)
Эта фича языка очень полезна, так как в Python списки, кортежи и словари широко используются в качестве контейнеров.
Динамическое создание типов
Программирование на Python допускает создание новых типов прямо во время выполнения программы.
NewType = type("NewType", (object,), {"x": "hello"}) n = NewType() print(n.x) # "hello"
Это то же самое, что и:
class NewType(object): x = "hello" n = NewType() print(n.x) # "hello"
Это не самая полезная и часто используемая из особенностей Python, но полезно знать, что она существует. Например, ее можно использовать для динамического определения набора необходимых атрибутов.
Метод словарей get
Если вы обратитесь к несуществующему ключу словаря dict[key]
, то получите исключение. Эту проблему можно решить с помощью метода
, который вернет dict.get(key)
None
для несуществующих ключей. Вторым параметром ему можно передать значение по умолчанию:
dict = { "a": 1, "b": 2 } print(dict.get("c")) # None print(dict.get("c", 0)) # 0
Это удобно, например, при арифметических операциях.
Дескрипторы
Атрибуты можно превратить в дескрипторы, изменив их стандартное поведение с помощью методов __get__
, __set__
или __delete__
. Таким образом можно, например, запретить перезапись или удаление свойства.
Создадим такой дескриптор, используя для удобства декоратор:
class MyDescriptor(object): def __init__(self, fget): self.fget = fget def __get__(self, obj, type): print("__get__({}, {})".format(obj, type)) return self.fget(obj) class MyClass(object): @MyDescriptor def foo(self): print("Foo!") obj = MyClass() obj.foo # __get__(<__main__.MyClass object ...>, <class '__main__.MyClass'>) # Foo!
Теперь при обращении через точку к дескриптору foo
, управление передается его методу __get__
, который сначала печатает строчку с данными дескриптора, а затем вызывает его "родной" геттер (выполняется код функции foo
).
Дескрипторы – довольно сложная фича, но вам стоит разобраться в ней, чтобы глубже понимать как работает язык программирования Python.
Doctest: документация + юнит-тестирование
Модуль doctest
находит в коде фрагменты, похожие на интерактивные сессии, и выполняет их, чтобы проверить заявленный результат. Фактически, с его помощью можно создать "исполняемую документацию".
Вот официальный пример работы doctest
:
""" Это модуль-пример. Этот модуль предоставляет одну функцию - factorial(). Например, >>> factorial(5) 120 """ def factorial(n): """Возвращает факториал числа n, которое является числом >= 0. Если результат умещается в int, возвращается int. Иначе возвращается long. >>> [factorial(n) for n in range(6)] [1, 1, 2, 6, 24, 120] >>> [factorial(long(n)) for n in range(6)] [1, 1, 2, 6, 24, 120] >>> factorial(30) 265252859812191058636308480000000L >>> factorial(30L) 265252859812191058636308480000000L >>> factorial(-1) Traceback (most recent call last): ... ValueError: n must be >= 0 Можно вычислять факториал числа с десятичной частью, если она равна 0: >>> factorial(30.1) Traceback (most recent call last): ... ValueError: n must be exact integer >>> factorial(30.0) 265252859812191058636308480000000L Кроме того, число не должно быть слишком большим: >>> factorial(1e100) Traceback (most recent call last): ... OverflowError: n too large """ import math if not n >= 0: raise ValueError("n must be >= 0") if math.floor(n) != n: raise ValueError("n must be exact integer") if n+1 == n: # перехватываем значения типа 1e300 raise OverflowError("n too large") result = 1 factor = 2 while factor <= n: result *= factor factor += 1 return result if __name__ == "__main__": import doctest doctest.testmod()
Чтобы увидеть результат, запустите этот модуль прямо из командной строки с флагом -v
. Вы получите нечто вроде:
$ python example.py -v Trying: factorial(5) Expecting: 120 ok Trying: [factorial(n) for n in range(6)] Expecting: [1, 1, 2, 6, 24, 120] ok
Именованное форматирование строк
В Python 3 для форматирования строк используется метод format:
print("The {} is {}".format('answer', 42))
Передаваемые в строку параметры можно именовать для удобства:
print("The {foo} is {bar}".format(bar=42, foo='answer'))
Поиск модулей
Путь поиска импортируемых модулей в Python выглядит так:
- Домашний каталог программы, который может отличаться от текущего рабочего каталога
- Адреса из переменной окружения PYTHONPATH.
- Каталоги стандартной Python библиотеки, которые устанавливаются автоматически.
- Директории, перечисленные в *.pth файлах.
- Каталог site-packages, в котором автоматически размещаются все сторонние расширения.
try-except-else
В конструкцию try-except
можно добавить также блок else
. Он отработает только в случае выполнения кода без ошибок:
try: a = float(input("Введите число: ")) print(100 / a) except ValueError: print ("Это не число!") except ZeroDivisionError: print ("На ноль делить нельзя!") except: print ("Неожиданная ошибка.") else: print ("Код выполнился без ошибок")
Использовать блок else
предпочтительнее, чем добавлять дополнительный код в блок try
. Это позволяет избежать случайного перехвата исключений, которые не были вызваны кодом, защищенным конструкцией try-except
.
Ререйз исключений
Применив оператор raise
без параметров внутри обработчика ошибок, вы можете повторно "поднять" пойманное исключение с сохранением его оригинальной трассировки стека. Это полезно, если пойманное исключение должно обрабатываться на верхних уровнях программы:
try: some_operation() except SomeError as e: if is_fatal(e): raise handle_nonfatal(e)
Оригинальную трассировку можно получить с помощью sys.exc_info()
.
Автодополнение для интерактивного интерпретатора
Одна из немногочисленных неприятных особенностей Python консоли: отсутствие встроенного автодополнения вводимых команд. Эту проблему решает модуль rlcompleter
:
try: import readline except ImportError: print "Unable to load readline module." else: import rlcompleter readline.parse_and_bind("tab: complete")
Теперь с помощью клавиши TAB вы можете быстро подобрать нужные атрибуты:
>>> class myclass: ... def function(self): ... print "my function" ... >>> class_instance = myclass() >>> class_instance.<TAB> class_instance.__class__ class_instance.__module__ class_instance.__doc__ class_instance.function >>> class_instance.f<TAB>unction()
import this
Главный священный текст любого питониста всегда даст ценный совет, подкинет полезную идею и подбодрит уставшего разработчика. Просто выполните команду import this
.
Надеемся, вы узнали что-то новое о возможностях и особенностях Python. Своими открытиями делитесь в комментариях.
Лучшие материалы и книги по Python
Руководство для начинающих по машинному обучению на Python - Python 3 | Data Science | Нейронные сети | AI
Содержание страницы
Машинное обучение — важная тема в области искусственного интеллекта, находится в центре внимания уже довольно давно. Эта область может предложить привлекательную возможность, и начать карьеру в ней не так сложно, как может показаться на первый взгляд. Даже если у вас нет опыта в математике или программировании , это не проблема. Самый важный элемент вашего успеха — это ваш личный интерес и мотивация изучать все эти вещи.
Если вы новичок, вы не знаете, с чего начать обучение и зачем вам машинное обучение, и почему оно приобретает все большую популярность в последнее время, вы попали в нужное место! Я собрал всю необходимую информацию и полезные ресурсы, чтобы помочь вам получить новые знания и выполнить ваши первые проекты.
Если ваша цель превращается в успешного программиста, вам нужно знать много вещей. Но для машинного обучения и науки о данных вполне достаточно освоить хотя бы один язык программирования и уверенно использовать его. Итак, успокойся, тебе не нужно быть гением программирования.
Для успешного обучения машинному обучению необходимо выбрать подходящий язык кодирования с самого начала, так как ваш выбор определит ваше будущее. На этом этапе вы должны продумать стратегически и правильно расставить приоритеты и не тратить время на ненужные вещи.
Мое мнение — Python является идеальным выбором для начинающих, чтобы сосредоточиться на том, чтобы перейти в области машинного обучения и науки о данных. Это минималистичный и интуитивно понятный язык с полнофункциональной библиотечной линией (также называемой фреймворками), которая значительно сокращает время, необходимое для получения первых результатов.
Машинное обучение — это обучение, основанное на опыте. Например, это похоже на человека, который учится играть в шахматы через наблюдение, как играют другие. Таким образом, компьютеры могут быть запрограммированы путем предоставления информации, которую они обучают, приобретая способность идентифицировать элементы или их характеристики с высокой вероятностью.
Прежде всего, вам необходимо знать, что существуют различные этапы машинного обучения :
- сбор информации
- сортировка данных
- анализ данных
- разработка алгоритма
- сгенерированный алгоритм проверки
- использование алгоритма для дальнейших выводов
Для поиска шаблонов используются различные алгоритмы, которые делятся на две группы :
- Неконтролируемое обучение
- Контролируемое обучение
При неконтролируемом обучении ваша машина получает только набор входных данных. После этого аппарат включается, чтобы определить взаимосвязь между введенными данными и любыми другими гипотетическими данными. В отличие от контролируемого обучения, когда машина снабжена некоторыми проверочными данными для обучения, независимое неконтролируемое обучение подразумевает, что сам компьютер найдет шаблоны и взаимосвязи между различными наборами данных. Самостоятельное обучение можно разделить на кластеризацию и ассоциацию.
Контролируемое обучение подразумевает способность компьютера распознавать элементы на основе предоставленных образцов. Компьютер изучает его и развивает способность распознавать новые данные на основе этих данных. Например, вы можете настроить свой компьютер для фильтрации спам-сообщений на основе ранее полученной информации.
Некоторые контролируемые алгоритмы обучения включают в себя:
- Деревья решений
- Машина опорных векторов
- Наивный байесовский классификатор
- k-ближайшие соседи
- линейная регрессия
Человек, работающий в области ИИ и МЛ, который не знает математику, похож на политика, который не умеет убеждать. У обоих есть неизбежная область для работы!
Так что да, вы не можете иметь дело с проектами ML и Data Science без минимальной математической базы знаний. Тем не менее, вам не нужно иметь степень по математике, чтобы преуспеть. По моему личному опыту, посвящение по крайней мере 30–45 минут каждый день принесет много пользы, и вы быстрее поймете и изучите продвинутые темы Python для математики и статистики.
Вам необходимо прочитать или обновить основную теорию. Не нужно читать весь учебник, просто сосредоточьтесь на ключевых понятиях .
Вот 3 шага для изучения математики, необходимой для анализа и машинного обучения:
1 — Линейная алгебра для анализа данных: скаляры, векторы, матрицы и тензоры
Например, для метода главных компонентов вам нужно знать собственные векторы, а регрессия требует умножения матриц. Кроме того, машинное обучение часто работает с многомерными данными (данными со многими переменными). Этот тип данных лучше всего представлен матрицами.
2 — Математический анализ: производные и градиенты
Математический анализ лежит в основе многих алгоритмов машинного обучения. Производные и градиенты будут необходимы для задач оптимизации. Например, одним из наиболее распространенных методов оптимизации является градиентный спуск.
Для быстрого изучения линейной алгебры и математического анализа я бы порекомендовал следующие курсы:
Хан Академия предлагает короткие практические занятия по линейной алгебре и математическому анализу. Они охватывают самые важные темы.
MIT OpenCourseWare предлагает отличные курсы для изучения математики для ML. Все видео лекции и учебные материалы включены.
3 — градиентный спуск: построение простой нейронной сети с нуля
Одним из лучших способов изучения математики в области анализа и машинного обучения является создание простой нейронной сети с нуля. Вы будете использовать линейную алгебру для представления сети и математический анализ для ее оптимизации. В частности, вы создадите градиентный спуск с нуля. Не стоит слишком беспокоиться о нюансах нейронных сетей. Это хорошо, если вы просто следуете инструкциям и пишете код.
Вот несколько хороших прохождений:
Нейронная сеть на Python — это отличный учебник, в котором вы можете создать простую нейронную сеть с самого начала. Вы найдете полезные иллюстрации и узнаете, как работает градиентный спуск.
Короткие учебники, которые также помогут вам шаг за шагом освоить нейронные сети:
Как построить свою собственную нейронную сеть с нуля в Python
Реализация нейронной сети с нуля на Python — введение .
Машинное обучение для начинающих: введение в нейронные сети — еще одно хорошее простое объяснение того, как работают нейронные сети и как реализовать их с нуля в Python.
Хорошие новости: вам не нужен полный курс обучения, так как Python и анализ данных не являются синонимами.
Прежде чем начать углубляться в синтаксис, я хочу поделиться одним проницательным советом, который может свести к минимуму ваши возможные сбои.
Научиться плавать, читая книги по технике плавания, невозможно, но чтение их параллельно с тренировками в бассейне приводит к более эффективному приобретению навыков.
Аналогичное действие происходит при изучении программирования. Не стоит фокусироваться исключительно на синтаксисе. Просто так вы рискуете потерять интерес.
Вам не нужно запоминать все. Делайте маленькие шаги и не бойтесь совмещать теоретические знания с практикой. Сосредоточьтесь на интуитивном понимании, например, какая функция подходит в конкретном случае и как работают условные операторы. Вы будете постепенно запоминать синтаксис, читая документацию и в процессе написания кода. Вскоре вам больше не придется гуглить такие вещи.
Если у вас нет понимания программирования, я рекомендую прочитать статью «Автоматизировать скучные вещи с помощью Python» . Книга предлагает объяснить практическое программирование для начинающих и учить с нуля. Прочитайте главу 6 «Манипулирование строками» и завершите практические задания для этого урока. Этого будет достаточно.
Вот еще несколько полезных ресурсов для изучения:
Codecademy — учит хороший общий синтаксис
Изучите Python трудный путь — блестящая книга, похожая на руководство, которая объясняет как основы, так и более сложные приложения.
Dataquest — этот ресурс учит синтаксису, а также обучает науке о данных
The Python Tutorial — официальная документация
И помните: чем раньше вы начнете работать над реальными проектами, тем раньше вы это освоите. В любом случае, вы всегда можете вернуться к синтаксису, если вам это нужно.
Дальнейшим этапом является пересмотр и добавление части Python, которая применима к науке о данных. И да, пора изучать библиотеки или фреймворки. Как указывалось ранее, Python обладает огромным количеством библиотек. Библиотеки — это просто набор готовых функций и объектов, которые вы можете импортировать в свой скрипт, чтобы тратить меньше времени.
Как использовать библиотеки? Вот мои рекомендации:
- Откройте Блокнот Jupyter (см. Ниже).
- Просмотрите документацию библиотеки примерно через полчаса.
- Импортируйте библиотеку в свой блокнот Jupyter.
- Следуйте пошаговому руководству, чтобы увидеть библиотеку в действии.
- Изучите документацию, чтобы увидеть, на что еще она способна.
Я не рекомендую немедленно погружаться в изучение библиотек, потому что вы, вероятно, забудете большую часть того, что узнали, когда начнете использовать их в проектах. Вместо этого попытайтесь выяснить, на что способна каждая библиотека.
#Jupyter Notebook
Jupyter Notebook — это облегченная среда разработки, которая пользуется популярностью среди аналитиков. В большинстве случаев установочный пакет для Python уже включает в себя Jupyter Notebook. Вы можете открыть новый проект через Anaconda Navigator, который входит в пакет Anaconda. Посмотрите это вступительное видео .
Документация
Краткое руководство
NumPy сокращен от Numeric Python, это самая универсальная и универсальная библиотека как для профессионалов, так и для начинающих. Используя этот инструмент, вы сможете легко и комфортно работать с многомерными массивами и матрицами. Такие функции, как операции линейной алгебры и числовые преобразования также доступны.
Документация
Краткое руководство
Pandas — это хорошо известный и высокопроизводительный инструмент для представления кадров данных. С его помощью вы можете загружать данные практически из любого источника, вычислять различные функции и создавать новые параметры, создавать запросы к данным с использованием агрегатных функций, похожих на SQL. Более того, существуют различные функции преобразования матриц, метод скользящего окна и другие методы получения информации из данных. Так что это совершенно незаменимая вещь в арсенале хорошего специалиста.
Документация
Краткое руководство
Matplotlib — это гибкая библиотека для создания графиков и визуализации. Это мощный, но несколько тяжелый вес. На этом этапе вы можете пропустить Matplotlib и использовать Seaborn для начала работы (см. Seaborn ниже).
Документация
Краткое руководство
Я могу сказать, что это самый хорошо разработанный пакет ML, который я когда-либо наблюдал. Он реализует широкий спектр алгоритмов машинного обучения и позволяет использовать их в реальных приложениях. Здесь вы можете использовать целый ряд функций, таких как регрессия, кластеризация, выбор модели, предварительная обработка, классификация и многое другое. Так что это абсолютно стоит изучить и использовать. Большим преимуществом здесь является высокая скорость работы. Поэтому неудивительно, что такие ведущие платформы, как Spotify, Booking.com, JPMorgan, используют scikit-learn.
Как только вы освоите базовый синтаксис и изучите основы библиотек, вы уже можете начать создавать проекты самостоятельно. Благодаря этим проектам вы сможете узнавать о новых вещах, а также создавать портфолио для дальнейшего поиска работы.
Есть достаточно ресурсов, которые предлагают темы для структурированных проектов.
Dataquest — Интерактивно обучает Python и науке о данных. Вы анализируете серию интересных наборов данных, начиная с документов Центрального разведывательного управления и заканчивая статистикой игр Национальной баскетбольной ассоциации. Вы будете разрабатывать тактические алгоритмы, которые включают нейронные сети и деревья решений.
Python для анализа данных — книга, написанная автором многих работ по анализу данных на Python.
Scikit — документация — Основная компьютерная обучающая библиотека на Python.
CS109 — Курсы Гарвардского университета наук о данных.
Вы можете найти много нового, но важно найти те проекты, которые пробудят в вас свет. Однако прямо перед этим счастливым моментом поиска работы своей мечты вы должны научиться превосходно обрабатывать ошибки в своих программах. Среди наиболее популярных полезных ресурсов для этой цели можно выделить следующие:
StackOverflow — многофункциональный сайт с кучей вопросов и ответов, где люди обсуждают все возможные проблемы. Кроме того, это самое популярное место, поэтому вы можете спросить о своих ошибках и получить ответ от огромной аудитории
Документация Python — еще одно хорошее место для поиска справочного материала
Само собой разумеется, вы также не должны пренебрегать любой возможностью или сотрудничеством, о котором вас просят. Участвуйте во всех возможных мероприятиях, связанных с Python, и находите людей, которые работают над интересными проектами. Изучите новые проекты, которые были сделаны другими людьми, кстати, Github — отличное место для этой цели. Узнайте о новых и следите за обновлениями в теме — все это определенно будет способствовать повышению уровня вашей игры!
Вы, возможно, спросите: «Почему я должен погрузиться в сферу машинного обучения? возможно, уже есть много других хороших специалистов.
Знаешь что? Я тоже попал в эту ловушку и теперь смело могу сказать — такое мышление не принесет вам ничего хорошего. Это огромный барьер для вашего успеха.
Согласно закону Мура число транзисторов в интегральной схеме удваивается каждые 24 месяца. Это означает, что с каждым годом производительность наших компьютеров растет, а это означает, что ранее недоступные границы знаний снова «сдвигаются вправо» — есть место для изучения больших данных и алгоритмов машинного обучения!
Кто знает, что нас ждет в будущем. Возможно, эти цифры увеличатся еще больше, и машинное обучение станет более важным? И, скорее всего, да!
Чувак, самое ужасное, что ты можешь сделать, это предположить, что твое место уже занято другим специалистом.
Источник статьи: https://towardsdatascience.com/beginners-guide-to-machine-learning-with-python-b9ff35bc9c51
0
0
голос
Рейтинг статьи
Навигация по записям
Девушка играет с гигантским питоном в 4 раза больше ее в вирусном ВИДЕО - RT UK News
Интернет разделил удивительное видео, на котором маленькая девочка играет с 13-футовым желтым питоном. Можно увидеть, как питон Шер встречается лицом к лицу с пятилетней девочкой, прежде чем ее ласково поглаживает.
Девушка, которую, кажется, совершенно не смущает присутствие огромного сетчатого питона, способного проглотить ее целиком, сняли на видео на стене дома в Суррее.Видео было размещено в сети Эд Таока, который делится десятками видео своих змей «Сонни» и «Шер» в социальных сетях.
Под вирусным видео, которое с момента публикации в понедельник было просмотрено 386 000 раз на Facebook и 76 000 раз на YouTube, Таока написал: «Друзья на всю жизнь! Сетчатый питон: мне просто нужны ваши чипсы ».
Видео Таока на Facebook и YouTube часто собирают тысячи просмотров, в том числе одна из его дочерей дремлет на диване, пока чудовищная змея скользит рядом с ней.В своей биографии на YouTube Таока указывает, что «змей - не кровожадные монстры» , но «часто неправильно изображаются в СМИ как вызывающие панику и паранойю».
«Эти видеоролики подчеркивают чрезвычайно спокойный характер того, что на самом деле происходит при уходе за ухоженными рептилиями в домашних условиях», - сказал он. Таока также перечисляет количество укусов животных его дочери за 2012-2018 годы. Теперь умершая семейная кошка укусила ее 4673 раза, их черепаха укусила ее один раз, а у Сонни и Шер в общей сложности не осталось укусов.
В то время как некоторые пользователи YouTube заявили, что посчитали видеозапись «красивой», другие задались вопросом, насколько безопасно иметь такую массивную змею вокруг маленького ребенка. Один сказал : «Может ли кто-нибудь объяснить мне, как это безопасно?» , а другой прокомментировал: «Когда вы приходите домой и питон убил вашего ребенка, помните, что это питон, и именно это питоны делают».
Сетчатые питоны - самые длинные змеи в мире.Несмотря на то, что они не являются ядовитыми, существует множество задокументированных случаев, когда люди были проглочены или задушены питонами до смерти.
В июне в Индонезии 54-летнюю женщину проглотил сетчатый питон. В 2017 году пропал 25-летний фермер, которого в конце концов обнаружили в брюхе сетчатого питона.
Думаете, вашим друзьям будет интересно? Поделись этой историей!
Алгоритм K-ближайших соседей в Python и Scikit-Learn
Алгоритм K-ближайших соседей (KNN) - это тип контролируемых алгоритмов машинного обучения.KNN чрезвычайно легко реализовать в самой простой форме, но при этом выполняет довольно сложные задачи классификации. Это алгоритм ленивого обучения, поскольку в нем нет специальной фазы обучения. Скорее, он использует все данные для обучения при классификации новой точки данных или экземпляра. KNN - это непараметрический алгоритм обучения, что означает, что он ничего не предполагает о базовых данных. Это чрезвычайно полезная функция, поскольку большая часть реальных данных не соответствует никаким теоретическим предположениям. E.грамм. линейная разделимость, равномерное распределение и т. д.
В этой статье мы увидим, как KNN может быть реализован с помощью библиотеки Python Scikit-Learn. Но перед этим давайте сначала исследуем теорию, лежащую в основе KNN, и посмотрим, каковы некоторые плюсы и минусы этого алгоритма.
Теория
Интуиция, лежащая в основе алгоритма KNN, является одним из самых простых из всех алгоритмов контролируемого машинного обучения. Он просто вычисляет расстояние от новой точки данных до всех других точек данных обучения.Расстояние может быть любого типа, например Евклидово или Манхэттенское и т. Д. Затем выбираются K-ближайшие точки данных, где K может быть любым целым числом. Наконец, он присваивает точку данных классу, к которому принадлежит большинство K точек данных.
Давайте посмотрим на этот алгоритм в действии на простом примере. Предположим, у вас есть набор данных с двумя переменными, которые при построении графика выглядят так, как показано на следующем рисунке.
Ваша задача - отнести новую точку данных с 'X' к классу «Синий» или «Красный».Значения координат точки данных: x = 45 и y = 50. Предположим, что значение K равно 3. Алгоритм KNN начинается с вычисления расстояния точки X от всех точек. Затем он находит 3 ближайшие точки с наименьшим расстоянием до точки X. Это показано на рисунке ниже. Обведены три ближайшие точки.
Последний шаг алгоритма KNN - присвоить новую точку классу, которому принадлежит большинство из трех ближайших точек. Из рисунка выше мы видим, что две из трех ближайших точек относятся к классу «Красный», который
Python 列表 (Список) |菜鸟 教程
Python 中 最基本 的 数据 结构。 序列 中 的 每个 元素 都 分配 一个 数字 - 它 的 位置 , 或 索引 , 第 一个 索引 0 第二 个 索引 是 1 , 依此 类推。
Python 有 6 个 序列 的 内置 类型 , 但 最 常见 的 是 列表 和 元 组。
序列 都 可以 进行 的 操作 包括 索引 , 切片 , 加 , 乘 , 检查 成员。
Python 已经 内置 确定 序列 的 长度 以及 确定 最大 和 最小 的 元素 的 方法。
是 最 常用 的 Python 数据 类型 , 它 可以 作为 一个 方 括号 内 的 逗号 分隔 值 出现。
列表 的 数据 项 不需要 具有 相同 的 类型
一个 列表 , 只要 把 逗号 分隔 的 不同 的 数据 项 使用 方 括号 括 起来 如下 所示 :
list1 = ['физика', 'химия', 1997, 2000]
list2 = [1, 2, 3, 4, 5]
list3 = ["a", "b", "c", "d"]
字符串 的 索引 一样 , 列表 索引 从 0 开始。 列表 可以 进行 截取 、 组合 等。
访问 列表 中 的 值
下 索引 来 访问 列表 中 的 值 , 同样 你 也 可以 使用 方 括号 的 形式 截取 字符 , 如下 所示 :
实例 (Python 2.0+)
list1 = ['физика', 'химия', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7]
напечатать "список1 [0]:", список1 [0]
напечатайте "список2 [1: 5]:", список2 [1: 5]
以上 实例 输出 结果 :
list1 [0]: физика list2 [1: 5]: [2, 3, 4, 5]
更新 列表
对 列表 的 数据 项 进行 修改 或 更新 , 你 也 可以 append () 方法 来 添加 列表 项 所示 :
实例 (Python 2.0+)
список = []
list.append ('Google')
list.append ('Runoob')
распечатать список
: 我们 会 在 接下来 的 章节 讨论 append () 方法 的 使用
以上 实例 输出 结果 :
['Google', 'Runoob']
删除 列表 元素
可以 使用 del 语句 来 删除 列表 的 元素 , 如下 实例 :
实例 (Python 2.0+)
list1 = ['физика', 'химия', 1997, 2000]
распечатать список1
del list1 [2]
print "После удаления значения в индексе 2:"
распечатать список1
以上 实例 输出 结果 :
[«физика», «химия», 1997, 2000] После удаления значения в индексе 2: [«физика», «химия», 2000 г.]
我们 会 在 接下来 的 章节 讨论 remove () 的 使用
Python 列表 脚本 操作 符
列表 对 + 和 * 的 操作 符 与 字符串 相似。 + 号 用于 组合 列表 , * 号 用于 重复 列表。
如下 所示 :
Python 表达式 | 结果 | 描述 |
---|---|---|
len ([1, 2, 3]) | 3 | 长度 |
[1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 组合 |
[«Привет!»] * 4 | [«Привет!», «Привет!», «Привет!», «Привет!»] | 重复 |
3 дюйма [1, 2, 3] | Истинно | 元素 是否 存在 于 中 中 |
для x в [1, 2, 3]: распечатать x, | 1 2 3 | 迭代 |
Python 列表 截取
Python 的 列表 截取 实例 如下 :
>>> L = ['Google', 'Runoob', 'Taobao']
>>> L [2]
"Таобао"
>>> L [-2]
'Runoob'
>>> L [1:]
['Runoob', 'Taobao']
>>>
描述
Python 表达式 | 结果 | 描述 |
---|---|---|
L [2] | 'Taobao' | 读取 列表 中 第三 个 |
L15 [-2] | 读取 列表 中 倒数 第二 个 元素 | |
L [1:] | ['Runoob', 'Taobao'] | 从 第二 个 元素 开始 列表 |
Python 列表 列表& 方法
Python 函数:
Python 方法:
Как найти длину списка в Python?
Список в Python - это тип данных коллекции, который можно упорядочивать и изменять.Список также может иметь повторяющиеся записи. Метод Python len () используется для определения длины любого объекта. В этой статье мы узнаем, как найти длину списка в Python в следующей последовательности:
Список в Python
Список в Python реализован для хранения последовательности различных типов данных. Однако в Python есть шесть типов данных, которые могут хранить последовательности, но наиболее распространенным и надежным типом является список.
Список определяется как набор значений или элементов разных типов.Элементы в списке разделяются запятой (,) и заключаются в квадратные скобки [].
Он определяется следующим образом:
list1 = ['edureka', 'python', 2019]; список2 = [1, 2, 3, 4, 5]; list3 = ["а", "б", "в", "г"];
Как найти длину списка в Python?
Существует два наиболее часто используемых и основных метода, которые используются для определения длины списка в Python:
Метод Len ()
Существует встроенная функция под названием len () для получения общей суммы. количество элементов в списке, кортеже, массивах, словаре и т. д.Метод len () принимает аргумент, в котором вы можете указать список, и возвращает длину данного списка.
Метод len () - один из наиболее часто используемых и удобных способов определения длины списка в Python. Это самая обычная техника, принятая сегодня всеми программистами.
Синтаксис:
len (список)
Параметр List - это список, для которого необходимо подсчитать количество элементов. Возвращает количество элементов в списке.
Пример:
ListName = [«Привет», «Эдурика», 1, 2, 3] print ("Количество элементов в списке =", len (ListName))
Вывод: 5
Наивный метод
Метод len () является наиболее часто используемым методом для определения длины списка в Python.Но есть еще один базовый метод, определяющий длину списка.
В методе Naive можно просто запустить цикл и увеличить счетчик до последнего элемента списка, чтобы узнать его счетчик. Это самая основная стратегия, которую можно использовать при отсутствии других эффективных методов.
Пример:
ListName = ["Hello", "Edureka", 1,2,3] print ("Список:" + str (ListName)) counter = 0 для i в ListName: counter = counter + 1 print ("Длина списка с использованием простого метода:" + str (counter))
Вывод:
Список: ["Hello", "Edureka", 1,2,3] Длина списка с использованием наивного метода: 5
Все дело в том, чтобы найти длину списка в Python.Метод len () - самый популярный метод. Принимая во внимание, что вы также можете использовать базовый метод определения длины с помощью Наивного метода.
На этом мы подошли к концу нашей статьи. Надеюсь, вы поняли, как найти длину любого списка в Python.
Чтобы получить глубокие знания о Python и его различных приложениях, вы можете записаться на курс по сертификации Python в реальном времени с круглосуточной поддержкой и пожизненным доступом.
Есть к нам вопрос? Пожалуйста, укажите это в разделе комментариев этого блога «Длина списка в Python», и мы свяжемся с вами как можно скорее.
DjangoGirls / руководство - Gitter
☹
Час за часом, я все более разочарован. Пожалуйста помоги!!!
(venv) $ pa_autoconfigure_django.py --python = 3.6 https://github.com/cornishonPL/my-first-blog.git --nuke
/ \
| Обновление файла wsgi на |
| / var / www / cornishonpl_eu_pythonanywhere_com_wsgi.ру |
\ /
-------------------------------------------------- ----------------------------
\
~ <: >>>>>>>>>
<Обновление settings.py>
\
~ <: >>>>>>>>>
<Запуск collectstatic>
\
~ <: >>>>>>>>>
Отслеживание (последний вызов последний):
Файл "/ home / CornishonPL / cornishonpl.eu.pythonanywhere.com/manage.py ", строка 21, в
основной()
Файл "/home/CornishonPL/cornishonpl.eu.pythonanywhere.com/manage.py", строка 17, в основном
выполнить_from_command_line (sys.argv)
Файл "/home/CornishonPL/.virtualenvs/cornishonpl.eu.pythonanywhere.com/lib/python3.6/site-packages/django/core/management/__init__.py", строка 401, в execute_from_command_line
Утилита.execute ()
Файл "/home/CornishonPL/.virtualenvs/cornishonpl.eu.pythonanywhere.com/lib/python3.6/site-packages/django/core/management/__init__.py ", строка 345, выполняется
settings.INSTALLED_APPS
Файл "/home/CornishonPL/.virtualenvs/cornishonpl.eu.pythonanywhere.com/lib/python3.6/site-packages/django/conf/__init__.py", строка 83, в __getattr__
self._setup (имя)
Файл "/home/CornishonPL/.virtualenvs/cornishonpl.eu.pythonanywhere.com/lib/python3.6/site-packages/django/conf/__init__.py", строка 70, в _setup
self._wrapped = Настройки (settings_module)
Файл "/home/CornishonPL/.virtualenvs/cornishonpl.eu.pythonanywhere.com/lib/python3.6 / site-packages / django / conf / __ init__.py ", строка 177, в __init__
mod = importlib.import_module (self.SETTINGS_MODULE)
Файл "/home/CornishonPL/.virtualenvs/cornishonpl.eu.pythonanywhere.com/lib/python3.6/importlib/__init__.py", строка 126, в import_module
вернуть _bootstrap._gcd_import (имя [уровень:], пакет, уровень)
Файл «<замороженный importlib._bootstrap>», строка 994, в _gcd_import
Файл "<замороженный importlib._bootstrap>", строка 971, в _find_and_load
Файл "<замороженный importlib._bootstrap>", строка 955, в _find_and_load_unlocked
Файл "<замороженный importlib._bootstrap> ", строка 665, в _load_unlocked
Файл «<замороженный importlib._bootstrap_external>», строка 678, в exec_module
Файл «<замороженный importlib._bootstrap>», строка 219, в _call_with_frames_removed
Файл "/home/CornishonPL/cornishonpl.eu.pythonanywhere.com/mysite/settings.py", строка 125, в
MEDIA_ROOT = Путь (BASE_DIR / 'media')
NameError: имя "Путь" не определено
Отслеживание (последний вызов последний):
Файл "/home/CornishonPL/.local/bin/pa_autoconfigure_django.py", строка 47, в
main (arguments [''], arguments ['- domain'], arguments ['- python'], nuke = arguments.получить ('- ядерное оружие'))
Файл "/home/CornishonPL/.local/bin/pa_autoconfigure_django.py", строка 37, в основном
project.run_collectstatic ()
Файл "/home/CornishonPL/.local/lib/python3.6/site-packages/pythonanywhere/django_project.py", строка 99, в run_collectstatic
'--noinput',
Файл "/usr/lib/python3.6/subprocess.py", строка 311, в check_call
поднять CalledProcessError (retcode, cmd)
subprocess.CalledProcessError: Команда '[' /home/CornishonPL/.virtualenvs/cornishonpl.eu.pythonanywhere.com/bin/python ',' / home / CornishonPL / cornishonpl.eu.pythonanywhere.com/manage.py
',' collectstatic ',' --noinput ']' вернул ненулевой статус выхода 1.
.