12 библиотек для работы с данными в Python


Оглавление (нажмите, чтобы открыть):

Чтение и запись файлов в Python

В этой статье мы рассмотрим операции с файлами в Python: открытие файла, чтение из файла, запись, закрытие файла. А также методы, предназначенные для работы с файлами.

Что такое файл?

Файл – это именованная область диска, предназначенная для длительного хранения данных в постоянной памяти (например, на жёстком диске).

Чтобы прочитать или записать данные в файл, сначала нужно его открыть. После окончания работы файл необходимо закрыть, чтобы освободить связанные с ним ресурсы.

Поэтому в Python операции с файлами выполняются в следующем порядке:

  1. Открытие файла.
  2. Чтение или запись (выполнение операции).
  3. Закрытие файла.

Как открыть файл?

В Python есть встроенная функция open(), предназначенная для открытия файла. Она возвращает объект, который используется для чтения или изменения файла.

При этом можно указать необходимый режим открытия файла: ‘r’- для чтения,’w’ — для записи,’a’ — для изменения. Мы также можем указать, хотим ли открыть файл в текстовом или в бинарном формате.

По умолчанию файл открывается для чтения в текстовом режиме. При чтении файла в этом режиме мы получаем строки.

В бинарном формате мы получим байты. Этот режим используется для чтения не текстовых файлов, таких как изображения или exe-файлы.

Режимы открытия файлов в Python
Режим Описание
‘r’ Открытие файла для чтения. Режим используется по умолчанию.
‘w’ Открытие файла для записи. Режим создаёт новый файл, если он не существует, или стирает содержимое существующего.
‘x’ Открытие файла для записи. Если файл существует, операция заканчивается неудачей (исключением).
‘a’ Открытие файла для добавления данных в конец файла без очистки его содержимого. Этот режим создаёт новый файл, если он не существует.
‘t’ Открытие файла в текстовом формате. Этот режим используется по умолчанию.
‘b’ Открытие файла в бинарном формате.
‘+’ Открытие файла для обновления (чтения и записи).

В отличие от других языков программирования, в Python символ ‘a’ не подразумевает число 97, если оно не закодировано в ASCII (или другой эквивалентной кодировке).

Кодировка по умолчанию зависит от платформы. В Windows – это ‘cp1252’, а в Linux ‘utf-8’.

Поэтому мы не должны полагаться на кодировку по умолчанию. При работе с файлами в текстовом формате рекомендуется указывать тип кодировки.

Как закрыть файл в Python?

Закрытие освободит ресурсы, которые были связаны с файлом. Это делается с помощью метода close(), встроенного в язык программирования Python.

В Python есть сборщик мусора, предназначенный для очистки ненужных объектов, Но нельзя полагаться на него при закрытии файлов.

Этот метод не полностью безопасен. Если при операции возникает исключение, выполнение будет прервано без закрытия файла.

Более безопасный способ – использование блока try…finally.

Это гарантирует правильное закрытие файла даже после возникновения исключения, прерывающего выполнения программы.

Также для закрытия файла можно использовать конструкцию with. Оно гарантирует, что файл будет закрыт при выходе из блока with. При этом не нужно явно вызывать метод close(). Это будет сделано автоматически.

Запись в файл

Чтобы записать данные в файл в Python, нужно открыть его в режиме ‘w’, ‘a’ или ‘x’. Но будьте осторожны с режимом ‘w’. Он перезаписывает файл, если то уже существует. Все данные в этом случае стираются.

Запись строки или последовательности байтов (для бинарных файлов) осуществляется методом write(). Он возвращает количество символов, записанных в файл.

Эта программа создаст новый файл ‘test.txt’. Если он существует, данные файла будут перезаписаны. При этом нужно добавлять символы новой строки самостоятельно, чтобы разделять строки.

Чтение из файла в Python

Чтобы осуществить чтение данных из файла в Python, нужно открыть его в режиме чтения. Для этого можно использовать метод read(size), чтобы прочитать из файла данные в количестве, указанном в параметре size. Если параметр size не указан, метод читает и возвращает данные до конца файла.

Метод read() возвращает новые строки как ‘n’. Когда будет достигнут конец файла, при дальнейших попытках чтения мы получим пустые строки.

Чтобы изменить позицию курсора в текущем файле, используется метод seek(). Метод tell() возвращает текущую позицию курсора (в виде количества байтов).

Мы можем прочитать файл построчно в цикле for.

Извлекаемые из файла строки включают в себя символ новой строки ‘n’. Чтобы избежать вывода, используем пустой параметр end метода print(),.

Также можно использовать метод readline(), чтобы извлекать отдельные строки. Он читает файл до символа новой строки.

Метод readlines() возвращает список оставшихся строк. Все эти методы чтения возвращают пустую строку, когда достигается конец файла.

Методы работы с файлами в Python

Ниже приводится полный список методов для работы с файлами в текстовом режиме.

Методы работы с файлами в Python
Метод Описание
close() Закрытие файла. Не делает ничего, если файл закрыт.
detach() Отделяет бинарный буфер от TextIOBase и возвращает его.
fileno() Возвращает целочисленный дескриптор файла.
flush() Вызывает сброс данных (запись на диск) из буфера записи файлового потока.
isatty() Возвращает значение True, если файловый поток интерактивный.
read(n) Читает максимум n символов из файла. Читает до конца файла, если значение отрицательное или None.
readable() Возвращает значение True, если из файлового потока можно осуществить чтение.
readline(n=-1) Читает и возвращает одну строку из файла. Читает максимум n байт, если указано соответствующее значение.
readlines(n=-1) Читает и возвращает список строк из файла. Читает максимум n байт/символов, если указано соответствующее значение.
seek(offset,from=SEEK_SET) Изменяет позицию курсора.
seekable() Возвращает значение True, если файловый поток поддерживает случайный доступ.
tell() Возвращает текущую позицию курсора в файле.
truncate(size=None) Изменяет размер файлового потока до size байт. Если значение size не указано, размер изменяется до текущего положения курсора.
writable() Возвращает значение True, если в файловый поток может производиться запись.
write(s) Записывает строки s в файл и возвращает количество записанных символов.
writelines(lines) Записывает список строк lines в файл.

Данная публикация представляет собой перевод статьи « Python File IO Read and Write Files in Python » , подготовленной дружной командой проекта Интернет-технологии.ру

Стандартные библиотеки Python

Python — это один из самых популярных языков программирования для написания системных скриптов и программ. Это скриптовый язык, он очень простой для освоения и позволяет писать скрипты максимально быстро. И не только потому, что язык простой, а еще и из-за того, что для него написано множество различных библиотек и скриптов, которые вы можете использовать в своих проектах либо же просто скопировать тот или иной кусок кода в свою программу.

Не менее богата и стандартная библиотека языка. Здесь есть инструменты для решения различных задач, начиная от математических функций, и до работы с регулярными выражениями, сетью, сайтами и многим другим. В этой статье мы рассмотрим стандартные библиотеки python, которые вы можете использовать. Разберем их назначение и кратко возможности.

Стандартная библиотека Python

Эта статья не сможет охватить все модули python потому что их очень много. Поэтому мы поговорим про самые интересные и полезные. Дальше вы сможете понять на что способен этот язык. Список отсортирован по алфавиту.

  • audioop — это библиотека для работы со звуком. Она содержит несколько полезных функций для обработки записей 8, 16, 24 или 32 бит. Модуль поддерживает различные кодировки. Есть поддержка конвертации форматов, настройки битов, и множество других возможностей.
  • base64 — шифрование base64 стало очень популярным в последнее время. Эта библиотека позволяет шифровать бинарные данные в читаемые ASCII символы, а затем обратно раскодировать в бинарные данные. Можно кодировать не только последовательности байт, но и обычные строки.
  • calendar — как следует из названия, этот модуль позволяет работать с календарем. Вы можете выводить календарь, так же как это делает утилита cal в Linux. По умолчанию, началом недели считается понедельник, но можно поменять настройки на воскресение. Вы можете просматривать информацию о днях недели, месяца, года, выводить списки и многое другое.
  • cgi — несмотря на то, что лидером в плане серверного языка программирования является PHP, Python тоже поддерживает такую возможность. Модуль cgi позволяет интерпретатору обрабатывать скрипты по запросу веб-сервера и возвращать ему же результат обработки. С помощью модуля в скрипте мы можем получить переменные, переданные браузером с помощью GET или POST, а также влиять на отправляемые данные.
  • configparser — это простая библиотека, которая позволяет разбирать содержимое простейших конфигурационных файлов формата ini. Такие файлы очень часто используются в Windows. Вы можете не только читать содержимое файлов, но и изменять его.
  • csv — модуль, позволяющий работать с форматом файлов csv (Comma Separated Values). Этот формат очень популярен при импорте и экспорте из различных таблиц или баз данных. Модуль имеет два класса, reader и writer, которые позволяют читать и записывать данные в формат csv.
  • curses — наверное, уже многие слышали про движок псевдографического интерфейса curses. Он позволяет довольно просто реализовать простой графический интерфейс в терминале. С помощью этого модуля такая функция появляется в Python.
  • datetime — как и большинство языков высокого уровня, python позволяет работать с датой и временем. Эта библиотека реализует набор методов для получения информации, преобразования, изменения даты и времени. Можно преобразовать дату в строку или прочитать ее из строк различных форматов. Также можно выполнять арифметические операции с датами и временем.
  • decimal — этот модуль содержит функции для быстрого преобразования чисел с плавающей точкой. Также содержит несколько дополнительных возможностей для встроенного типа float.
  • difflib — эта библиотека содержит набор функций для сравнения различных последовательностей. Например, можно сравнивать файлы, строки, различную информацию в HTML и многое другое.
  • email — python поддерживает обработку email сообщений на уровне языка. Модуль не реализует никаких методов для отправки сообщений через SMTP или NNTP, этим занимаются другие протоколы. Здесь есть функции для разбора структуры email сообщений, проверки списка почты, преобразования и много другого.
  • gettext — этот модуль реализует функции локализации и интернационализации L10N для ваших программ на Python. Поддерживается стандартное API GNU gettext так и свое собственное API на основе классов. Все модули пишутся на вашем нативном языке, а затем к программе прикрепляется каталог для перевода на другие языки.
  • gzip, zlib — библиотеки python для работы со сжатыми данными. Вы можете не только распаковывать и упаковывать файлы, но и работать со строками, а также использовать пароли.
  • hashlib — этот модуль python предоставляет интерфейс для получения различных хэшей для данных. Поддерживаются такие алгоритмы: SHA1, SHA224, SHA256, SHA384, и SHA512, а также MD5.
  • html, http — эти модули работают в одной и той же области. Модуль http позволяет работать с интернет ресурсами по протоколу HTTP, отправлять запросы GET/POST, принимать запросы, обрабатывать Cookie и фактически реализовать свой клиент или сервер на Python. Библиотека html, в свою очередь, позволяет выполнять разбор html страниц.
  • io — это базовая библиотека, которая содержит основные функции для работы с потоками ввода/вывода. Поддерживаются различные виды потоков, текстовые, бинарные и RAW потоки. Каждый поток может иметь несколько атрибутов, это разрешения на только чтение, только запись и чтение запись.
  • itertools — недавно операторы итераций начали появляться в PHP. Язык программирования Python тоже имеет средства для организации итераций, похожих на Haskell, APL и SML. Модуль использует эффективные методы работы с памятью, а также имеет некоторые дополнительные функции.
  • json — библиотека python для работы с очень популярным сейчас форматом передачи данных — json. Есть функции как для разбора формата, так и для создания объектов для отправки.
  • logging — модуль для логирования в программах Python. Библиотека реализует удобную систему логирования, которая используется в стандартных модулях. Ее преимущество в том, что вы можете отключить ведение лога в любой момент одной строчкой или изменить его подробность.
  • match — библиотека содержит стандартные функции для работы с математикой. Вычисление корня, синусов, косинусов и другие подобные функции.
  • os — одна из самых важных библиотек python. Она предназначена для взаимодействия с операционной системой. Через нее вы можете работать с файлами, получить информацию об интерфейсах операционной системы и другое.
  • pathlib — позволяет работать с путями в файловой системе. Можно преобразовывать пути из одного типа в другой, выполнять с ними различные операции.
  • random — модуль реализует генератор псевдо-случайных чисел. Он работает на основе генератора случайности вашей операционной системы.
  • re — очень часто используемый модуль python, который содержит базовый набор функций для работы с регулярными выражениями синтаксиса perl. Есть методы для решения различных задач, таких как поиск, замена, редактирование, удаление и многое другое.
  • socket — python поддерживает работу с сокетами напрямую. Вы можете без модуля http или url подключатся к любому системному или сетевому сокету и использовать его.

  • sqlite — большинство программ в среде веб используют базу данных. Расширение sqlite позволяет вашей программе использовать высокопроизводительную базу данных, которая полностью хранится в одном файле, в папке с программой.
  • ssl — библиотека, которая позволяет работать с сертификатами ssl, используется для получения html страниц по протоколу https.
  • string — еще один часто используемый модуль, который содержит множество функций для работы со строками. Поддерживаются большинство функций, которые есть в других языках, например, слияние строк, удаление лишних символов, замена, поиск и так далее.
  • threading — библиотека реализует поддержку многопоточности для python. Здесь содержатся методы для управления потоками и получения информации о них;
  • time — по возможностях и назначению эта библиотека похожа на datetime. Только ее методы рассчитаны на работу с датой и временем. Здесь реализовано множество функций стандартной библиотеки Си.
  • tkinter — это стандартные библиотеки python 3 для реализации графического интерфейса программ с помощью инструментария Tk GUI. Этот интерфейс будет работать как в Windows, так и в Linux системах.
  • urllib и urllib2 — эти библиотеки python позволяют реализовать простой парсер или браузер на python. Вы можете в несколько строк получать и разбирать содержимое веб-страниц, работу с кукси, заголовками и другими вещами библиотека берет на себя.
  • xml — библиотека, которая помогает анализировать структуры XML, а также добавлять в структуру новые теги, менять значения существующих.
Мастер Йода рекомендует:  SQL. ОБЗОР.

Выводы

В этой статье мы сделали небольшое описание библиотеки Python 3. Как видите, язык имеет множество различных функций уже в стандартной библиотеке, и еще больше в множестве модулей и скриптов доступных на просторах интернета.

Python. Урок 12. Ввод-вывод данных. Работа с файлами

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

Вывод данных в консоль

Один из самых распространенных способов вывести данные в Python – это напечатать их в консоли. Если вы находитесь на этапе изучения языка, такой способ является основным для того, чтобы быстро просмотреть результат свой работы. Для вывода данных в консоль используется функция print.

Рассмотрим основные способы использования данной функции.

По умолчанию, для разделения элементов в функции print используется пробел.

Для замены разделителя необходимо использовать параметр sep функции print.

В качестве конечного элемента выводимой строки, используется символ перевода строки.

Для его замены используется параметр end.

Ввод данных с клавиатуры

Для считывания вводимых с клавиатуры данных используется функция input().

Для сохранения данных в переменной используется следующий синтаксис.

Если считывается с клавиатуры целое число, то строку, получаемую с помощью функции input(), можно передать сразу в функцию int().

Для вывода строки-приглашения, используйте ее в качестве аргумента функции input().

Преобразование строки в список осуществляется с помощью метода split(), по умолчанию, в качестве разделителя, используется пробел.

Разделитель можно заменить, указав его в качестве аргумента метода split().

Для считывания списка чисел с одновременным приведением их к типу int можно воспользоваться вот такой конструкцией.

Работа с файлами

Открытие и закрытие файла

Для открытия файла используется функция open(), которая возвращает файловый объект. Наиболее часто используемый вид данной функции выглядит так open(имя_файла, режим_доступа).

Для указания режима доступа используется следующие символы:

r’ – открыть файл для чтения;

w’ – открыть файл для записи;

x’ – открыть файл с целью создания, если файл существует, то вызов функции open завершится с ошибкой;

a’ – открыть файл для записи, при этом новые данные будут добавлены в конец файла, без удаления существующих;

b’ – бинарный режим;

t’ – текстовый режим;

+’ – открывает файл для обновления.

По умолчанию файл открывается на чтение в текстовом режиме.

У файлового объекта есть следующие атрибуты.

file.closed – возвращает true если файл закрыт и false в противном случае;

file.mode – возвращает режим доступа к файлу, при этом файл должен быть открыт;

file.name – имя файла.

Для закрытия файла используется метод close().

Чтение данных из файла

Чтение данных из файла осуществляется с помощью методов read(размер) и readline().

Метод read(размер) считывает из файла определенное количество символов, переданное в качестве аргумента. Если использовать этот метод без аргументов, то будет считан весь файл.

В качестве аргумента метода можно передать количество символом, которое нужно считать.

Метод readline() позволяет считать строку из открытого файла.

Построчное считывание можно организовать с помощью оператора for.

Запись данных в файл

Для записи данных файл используется метод write(строка), при успешной записи он вернет количество записанных символов.

Дополнительные методы для работы с файлами

Метод tell() возвращает текущую позицию “условного курсора” в файле. Например, если вы считали пять символов, то “курсор” будет установлен в позицию 5.

Метод seek(позиция) выставляет позицию в файле.

Хорошей практикой при работе с файлами является применение оператора with. При его использовании нет необходимости закрывать файл, при завершении работы с ним, эта операция будет выполнена автоматически.

P.S.

Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.

>>

Python библиотек и для работы с данными

20.03.2020
И Разработка
Комментариев нет

NumPy – это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами.
Ссылка

SciPy – это открытая библиотека высококачественных научных инструментов для языка программирования Python. SciPy содержит модули для оптимизации, интегрирования, специальных функций, обработки сигналов, обработки изображений, генетических алгоритмов, решения обыкновенных дифференциальных уравнений и других задач, обычно решаемых в науке и при инженерной разработке. Библиотека разрабатывается для той же аудитории, что MATLAB и Scilab.
Ссылка

Pandas – это библиотека Python,которая является мощным инструментом для анализа данных. Пакет дает возможность строить сводные таблицы, выполнять группировки, предоставляет удобный доступ к табличным данным, а при наличии пакета matplotlib дает возможность рисовать графики на полученных наборах данных. Далее будут показаны основы работы с пакетом, такие как загрузка данных, обращение к полям, фильтрация и построение сводных.
Ссылка

Matplotlib — это библиотека Python для построения качественных двумерных графиков. Matplotlib является гибким, легко конфигурируемым пакетом, который вместе с NumPy, SciPy и IPython предоставляет возможности, подобные MATLAB. В настоящее время пакет работает с несколькими графическими библиотеками, включая wxWindows и PyGTK.
Ссылка

Plotly – это библиотека, с помощью, которой достаточно легко строить интерактивные графики в Jupyter Notebook’e. В Python есть много библиотек для визуализации, среди них и те, которые позволяют строить интерактивные графики, например, bokeh, pygal и plotly, о котором собственно идет речь.
Ссылка

Scikit-learn это библиотека для машинного обучения на языке программирования Python с открытым исходным кодом. С помощью нее можно реализовать различныеалгоритмы классификации, регрессии и кластеризации, в том числе алгоритмы SVM,случайного леса, k-ближайших соседей и DBSCAN, которые построены на взаимодействии библиотек NumPyи SciPy с Python.
Ссылка

13 лучших библиотек глубокого машинного обучения для Python


Когда дело касается задач машинного обучения, искусственного интеллекта, Deep Learning и данных, Python безусловно продолжает лидировать. Согласно builtwith.com , 45% технологических компаний предпочитают использовать Python для реализации ИИ и машинного обучения.

Ниже приведен список 13 самых популярных библиотек Python, используемых при решении многочисленных задач глубокого машинного обучения Конечно, список этот субъективен. Многие библиотеки могут быть легко отнесены к нескольких категориям искусственного интеллекта. Например, TensorFlow включен в наш список, а Keras, наоборот, считается библиотекой Machine Learning. Связано это с тем, что Keras скорее библиотека для «конечного пользователя», такая как SKLearn. Что отличает её от TensorFlow, которая больше привлекает исследователей и «инженеров-машинистов».

Рисунок 1: 13 лучших библиотек Deep Learning на Python, Commits и Contributors . Размер метки пропорционален количеству звезд.

Теперь давайте перейдем непосредственно к списку (цифры с GitHub получены 23 октября 2020 года):

1. TensorFlow

( Contributors — 1 700, Commits — 42 256, ✬✬✬ — 112 591)

TensorFlow — библиотека с открытым исходным кодом для численного расчета с использованием графов потока данных. Узлы графа представляют собой математические операции, а ребра — многомерные массивы данных (тензоры), которые текут между ними. Такая гибкая архитектура позволяет развернуть вычисления на одном или нескольких процессорах или графических процессорах на рабочем столе, сервере или мобильном устройстве без переписывания кода.

2. PyTorch

( Contributors — 806, Commits — 14 022, ✬✬✬ — 20 243)

PyTorch — это пакет Python, который обеспечивает две функции высокого уровня:

  1. Расчет тензора (например, NumPy) с сильным ускорением GPU
  2. Глубокие нейронные сети, построенные на ленточной автоградной системе

Вы можете использовать свои любимые пакеты Python, такие как NumPy, SciPy и Cython для расширения PyTorch при необходимости.

3. Apache MXNet

( Contributors — 628, Commits — 8 723, ✬✬✬ — 15 447)

Apache MXNet (инкубация) — база Deep Learning, ориеннтрованная на эффективность и гибкость. Это позволяет сочетать символическое и императивное программирование для увеличения эффективности и производительности. По своей сути MXNet содержит динамический планировщик зависимостей, который «на лету» автоматически распараллеливает как символические, так и императивные операции.

4. Theano

( Contributors — 329, Commits — 28 033, ✬✬✬ — 8 536)

Theano — библиотека Python, которая позволяет эффективно определять, оптимизировать и оценивать математические выражения, содержащие многомерные массивы. Она может использовать графические процессоры и выполнять эффективную символическую дифференциацию.

5. Caffe

( Contributors — 270, Commits — 4 152, ✬✬✬ — 25 927)

Caffe — база Deep Learning, разработанная с учетом выраженности, скорости и модульности. Разработана в Berkeley AI Research (BAIR) / The Berkeley Vision and Learning Center (BVLC) и их сообществами.

6. fast.ai

( Contributors — 226, Commits — 2 237, ✬✬✬ — 8 872)

Библиотека fastai упрощает обучение быстрым и точным нейронным сетям, используя современные передовые методы. Для начала ознакомьтесь с сайтом fast.ai . Библиотека основана на исследованиях в области передовых методов Deep Learning, проводимых на fast.ai, и включает в себя «из коробки» поддержку моделей видения, текста, таблиц и коллабов (совместная фильтрация).

7. CNTK>/a>

( Contributors — 189, Commits — 15 979, ✬✬✬ — 15 281)

Инструментарий Microsoft Cognitive Toolkit ( https://cntk.ai ) — унифицированный инструментарий Deep Learning, который описывает нейронные сети как серию вычислительных шагов через ориентированный граф. В этом ориентированном графе листовые узлы представляют входные значения или сетевые параметры, тогда как другие узлы представляют собой матричные операции на своих входах. CNTK позволяет пользователям легко реализовывать и комбинировать популярные типы моделей, такие как DNN прямой линии связи, сверточные сети (CNN) и свёрточные сети (RNNs / LSTM).

8. TFLearn

( Contributors — 118, Commits — 599, ✬✬✬ — 8 632)

TFlearn — модульная и прозрачная библиотека Deep Learning, построенная на основе Tensorflow. Она был разработана для предоставления API для TensorFlow более высокого уровня, облегчающий и ускоряющий эксперименты, оставаясь полностью прозрачным и совместимым.

9. Lasagne

( Contributors — 64, Commits — 1 157, ✬✬✬ — 3 534)

Lasagne — легкая библиотека для создания и обучения нейронных сетей в Теано. Она поддерживает сети передачи данных, такие как сверточные нейронные сети (CNN), свёрточные сети, включая Long Short-Term Memory (LSTM) и любую их комбинацию.

10. nolearn

( Contributors — 14, Commits — 389, ✬✬✬ — 909)

Nolearn содержит множество оберток и абстракций вокруг существующих нейронных сетевых библиотек, в первую очередь Lasagne, а также несколько модулей для машинного обучения. Весь код написан для совместимости с scikit-learn.

11. Elephas

( Contributors — 13, Commits — 249, ✬✬✬ — 1 046)

Elephas — это расширение Keras, которое позволяет вам запускать распределенные модели Deep Learning в масштабе с помощью Spark. В настоящее время Elephas поддерживает ряд приложений, в том числе:

  1. Параллельная подготовка моделей Deep Learning
  2. Распределенная оптимизация гиперпараметров
  3. Распределенное обучение ансамблевым моделям
Мастер Йода рекомендует:  Введение в SQLiteite

12. spark-deep-learning

( Contributors — 12, Commits — 83, ✬✬✬ — 1 131)

Deep Learning Pipelines предоставляет высокоуровневые API для масштабируемого Deep Learning на Python с Apache Spark. Библиотека исходит от Databricks и использует Spark для двух самых сильных аспектов:

  1. В духе Spark и Spark MLlib он предоставляет простые в использовании API, которые позволяют осуществлять глубокое обучение в очень немногих строках кода.
  2. Он использует мощный распределенный движок Spark для глубокого изучения массивных наборов данных.

13. Distributed Keras

( Contributors — 5, Commits — 1 125, ✬✬✬ — 523)

Распределенная Keras — это распределенная система Deep Learning, построенная поверх Apache Spark и Keras, с упором на« современные »распределенные алгоритмы оптимизации. Мы разработали структуру таким образом, чтобы новый распределенный оптимизатор мог быть реализован с легкостью, что позволило человеку сосредоточиться на исследованиях.

Следите за следующей частью этой серии, в которой основное внимание уделяется Укреплению знаний и библиотекам эволюционных вычислений, которые будут опубликованы в течение следующих нескольких недель!

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Ограничение ответственности

Информация на сайте предоставляется «как есть», без всяких гарантий, включая гарантию применимости в определенных целях, коммерческой пригодности и т.п. В текстах могут быть технические неточности и ошибки. Автор не может гарантировать полноты, достоверности и актуальности всей информации, не несет ответственности за последствия использования сайта третьими лицами.

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

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

Автор не несет ответственности за убытки, возникшие в результате действий пользователей, явно не соответствующих обычным правилам работы с информацией в сети Интернет.

Пользуясь сайтом, вы принимаете и соглашаетесь со всеми нашими правилами, включая «Ограничение ответственности».

Python библиотек и для работы с данными

20.03.2020
И Разработка
Комментариев нет

NumPy – это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами.
Ссылка

SciPy – это открытая библиотека высококачественных научных инструментов для языка программирования Python. SciPy содержит модули для оптимизации, интегрирования, специальных функций, обработки сигналов, обработки изображений, генетических алгоритмов, решения обыкновенных дифференциальных уравнений и других задач, обычно решаемых в науке и при инженерной разработке. Библиотека разрабатывается для той же аудитории, что MATLAB и Scilab.
Ссылка

Pandas – это библиотека Python,которая является мощным инструментом для анализа данных. Пакет дает возможность строить сводные таблицы, выполнять группировки, предоставляет удобный доступ к табличным данным, а при наличии пакета matplotlib дает возможность рисовать графики на полученных наборах данных. Далее будут показаны основы работы с пакетом, такие как загрузка данных, обращение к полям, фильтрация и построение сводных.
Ссылка

Matplotlib — это библиотека Python для построения качественных двумерных графиков. Matplotlib является гибким, легко конфигурируемым пакетом, который вместе с NumPy, SciPy и IPython предоставляет возможности, подобные MATLAB. В настоящее время пакет работает с несколькими графическими библиотеками, включая wxWindows и PyGTK.
Ссылка

Plotly – это библиотека, с помощью, которой достаточно легко строить интерактивные графики в Jupyter Notebook’e. В Python есть много библиотек для визуализации, среди них и те, которые позволяют строить интерактивные графики, например, bokeh, pygal и plotly, о котором собственно идет речь.
Ссылка

Scikit-learn это библиотека для машинного обучения на языке программирования Python с открытым исходным кодом. С помощью нее можно реализовать различныеалгоритмы классификации, регрессии и кластеризации, в том числе алгоритмы SVM,случайного леса, k-ближайших соседей и DBSCAN, которые построены на взаимодействии библиотек NumPyи SciPy с Python.
Ссылка

Стандартные библиотеки и сторонние библиотеки Python

Стандартная библиотека состоит из множества модулей, объединенных в пакеты,и поставляется в составе Python. Она включает большое количество функций и классов, выполняющих различные типовые задачи программирования. Там мы мо­жем найти инструменты для сложной обработки строк, объявления новых типов данных, средства для обмена данными по сети, шифрования и дешифрования, ра­боты с файлами, разработки многопоточных приложений и многое другое.


Давайте для примера возьмем модуль datetirne. В нем объявлен класс date, позво­ляющий хранить и обрабатывать значения даты:

Импортируем класс date из модуля datetime:

Метод класса today возвращает объект, класса date, хранящий текущее значение даты:

Создаем еще один объект класса date, хранящий дату 27 октября 1970 года:

Получаем количество дней, прошедших между этими датами. (Его хранит свойство days класса date.)

Также в стандартной библиотеке объявлен класс Fraction, который мы рассмотрели ранее.

Вы знали что есть сторонние библиотеки работающие с медиаплеером tronsmart orion r28? Недавно на гитхабе встретил, библиотека совместима с Python 2.7 и Python 3.x.

Стандартная библиотека хранится в папке Lib папки, в которую установлен Python. Полные имена сущностей, объявленных в стандартной библиотеке, формируются относительно этой папки.

Помимо стандартной библиотеки, поставляемой в составе Python, мы можем загру­зить и установить любое количество сторонних библиотек. Они разрабатываются силами сторонних программистов ( отчего и получили свое название ), а существует их столько, что мы можем без труда найти ту, что нам нужна.

Все сторонние библиотеки устанавливаются в папку site-packages, что автоматиче­ски создается в упомянутой ранее папке Lib. Полные имена сущностей, объявлен­ных в сторонних библиотеках, формируются относительно этой папки.

Обработка данных

Обработка данных в Python: pandas, jupyter notebook

Анализ данных с помощью pandas. Часть 8: работа с данными из базы данных SQL

До этого момента, мы получали данные только из csv файлов. Это довольно распространённый способ сохранения данных, но далеко не единственный! Pandas может работать с данными из HTML, JSON, SQL, Excel (. ), HDF5, Stata, и некоторых других вещей. В этой части мы поговорим о работе с данными из баз данных SQL.

Анализ данных с помощью pandas. Часть 7: работа с датами и временем

Часто данные содержат не только числовые или строковые значения, но и даты / время, причём в огромном множестве разных форматов. pandas умеет работать с датами; в этой части будет показано, как.

Анализ данных с помощью pandas. Часть 6: работа с загрязненными данными

Главная проблема загрязненных данных: понять, они загрязнены или нет?

Используем данные NYC 311 service request из одной из прошлых статей, так как их много и они неочевидны.

Анализ данных с помощью pandas. Часть 5: ищем самый снежный месяц

Мы уже видели, что pandas хорошо умеет обращаться с датами. Но он также хорошо умеет работать со строками! Возьмём наши данные из предыдущей части.

Анализ данных с помощью pandas. Часть 4: объединение нескольких dataframe

В конце этой части, мы загрузим данные о погоде в Канаде за весь 2012 год, и сохраним в CSV файл. Мы сделаем это, загрузив каждый месяц в отдельности, а затем сгруппировав все месяцы вместе.

Здесь температура за каждый час в 2012 году!

Анализ данных с помощью pandas. Часть 3: объединение и группировка данных

Эта часть показывает способы группировки, объединения и дополнения данных.

Анализ данных с помощью pandas. Часть 2: Выбор данных и нахождение наиболее частых жалоб

В этой части мы будем использовать новый набор данных, чтобы показать, как быть с большими объёмами данных. Это данные о 311 сервисных запросов (или жалоб) жителей, предоставленные NYC Open Data (скачать данные).

Анализ данных с помощью pandas. Часть 1: Чтение данных из csv файла

Эта часть показывает способ обработки данных, хранящихся в формате csv, а также построение простейших графиков.

Анализ данных с помощью pandas. Часть 0: введение, jupyter (ipython)

pandas — это Python библиотека для анализа и обработки данных. Она действительно быстрая и позволяет вам легко исследовать данные.

Цель этого цикла статей — дать конкретные примеры использования pandas.

Работа с данными Python 3 с помощью pandas

Пакет pandas используется для управления и анализа данных и разработан специально для работы с мечеными или реляционными данными интуитивно понятным путём.

Пакет pandas предлагает функции электронных таблиц, но в Python он намного быстрее и эффективнее, чем традиционные графические программы электронных таблиц.

Данное руководство научит вас визуализировать данные с помощью функций groupby() и pivot_table().

Требования

Это руководство научит вас работать с данными в pandas на локальном компьютере или удалённом сервере.

  • Для работы с объемными данных может потребоваться большой объем памяти, потому для выполнения руководства вам понадобится 2 Гб оперативной памяти минимум.
  • Jupyter Notebook (инструкции по установке можно найти здесь).
  • Среда разработки Python 3 (инструкции для CentOS 7, Windows 10, Mac OS X и Ubuntu 16.04).

Тестовые данные

В руководстве мы используем статистику детских имён с сайта социального обеспечения. Это zip-файл размером 8MB.

Разверните среду разработки Python 3 на локальной машине или на удалённом сервере.

cd environments
. my_env/bin/activate

Создайте новый каталог для проекта (пусть он называется names) и откройте его:

mkdir names
cd names

В этот каталог можно загрузить zip-файл:

curl -O https://www.ssa.gov/oact/babynames/names.zip

После этого нужно установить дополнительные пакеты:

  • numpy для поддержки многомерных массивов;
  • matplotlib для визуализации данных;
  • pandas для анализа данных;
  • seaborn, чтобы улучшить статистические графики Matplotlib.

Если какой-либо из этих пакетов ещё не установлен, установите его:

pip install pandas
pip install matplotlib
pip install seaborn

Запустите Jupyter Notebook:

Получив доступ к веб-интерфейсу Jupyter Notebook, вы увидите файл names.zip.

Чтобы создать новый документ, выберите в верхнем выпадающем меню New → Python 3.

Это откроет документ.

Импортируйте пакет. В начале документа укажите:

import numpy as np
import matplotlib.pyplot as pp
import pandas as pd
import seaborn

Чтобы запустить этот код и перейти к новому блоку, нажмите Alt + Enter.

Чтобы Python Notebook мог встраивать графики, введите:

Чтобы запустить этот код и перейти к новому блоку, нажмите Alt + Enter.

Мастер Йода рекомендует:  devnull не нужен пишем бота на Python, который будет присылать свежие мемасики

Распаковка zip-архива

Чтобы распаковать архив в текущем каталоге, импортируйте модуль zipfile и вызовите функцию ZipFile с именем файла (names.zip).

import zipfile
zipfile.ZipFile(‘names.zip’).extractall(‘.’)

Чтобы запустить этот код и продолжить, нажмите Alt + Enter.


Вернитесь в каталог names, в котором теперь хранятся файлы .txt с данными с 1881 по 2015 годы в формате CSV. Названия всех файлов выбраны по одному шаблону: данные за 2015 год хранятся в yob2015.txt, а данные за 1927 – в yob1927.txt, и т.п.

Чтобы ознакомиться с форматом файла, откройте один из них в Python и запросите первые 5 строк.

Чтобы запустить этот код и продолжить, нажмите Alt + Enter.

[‘Emma,F,20355\n’,
‘Olivia,F,19553\n’,
‘Sophia,F,17327\n’,
‘Ava,F,16286\n’,
‘Isabella,F,15504\n’]

Как видите, сначала в файле указывается имя, затем пол (F – женский, M – мужской) и количество детей, которые получили это имя в указанном году.

Теперь нужно загрузить данные в pandas

Загрузка данных CSV в pandas

Для загрузки значений, разделенных запятыми, в pandas можно использовать функцию pd.read_csv() и передать ей имя текстового файла, а также имена столбцов. Данные можно присвоить переменной (в данном случае names2015).

names2015 = pd.read_csv(‘yob2015.txt’, names = [‘Name’, ‘Sex’, ‘Babies’])

Чтобы запустить этот код и продолжить, нажмите Alt + Enter.

Запросите начало таблицы, чтобы убедиться, что всё работает.

Чтобы запустить этот код и продолжить, нажмите Alt + Enter. После этого вы увидите первые 5 строк таблицы (индексация начинается с 0).

Конкатенация объектов pandas

Конкатенация объектов позволяет работать со всем отдельными текстовыми файлами в каталоге names.

Чтобы объединить данные, инициализируйте список, присвоив переменной пустой список:

Затем используйте цикл for, чтобы проитерировать все файлы по годам в диапазоне 1880-2015. Чтобы включить 2015 в список, добавьте в диапазон +1.

all_years = []
for year in range(1880, 2015+1):

Читайте также: Циклы for в Python 3

Внутри цикла нужно добавить в список каждое значение из текстовых файлов, используя строковый форматтер для обработки имен каждого из этих файлов. Присвойте эти значения переменной year и задайте столбцы Name, Sex и Babies.

all_years = []
for year in range(1880, 2015+1):
all_years.append(pd.read_csv(‘yob<>.txt’.format(year),
names = [‘Name’, ‘Sex’, ‘Babies’]))

Также нужно создать столбец для каждого года, чтобы хранить данные в упорядоченном виде.

all_years = []
for year in range(1880, 2015+1):
all_years.append(pd.read_csv(‘yob<>.txt’.format(year),
names = [‘Name’, ‘Sex’, ‘Babies’]))
all_years[-1][‘Year’] = year

Теперь нужно добавить объект pandas для конкатенации с помощью функции pd.concat(). Присвойте результат переменной all_names.

all_years = []
for year in range(1880, 2015+1):
all_years.append(pd.read_csv(‘yob<>.txt’.format(year),
names = [‘Name’, ‘Sex’, ‘Babies’]))
all_years[-1][‘Year’] = year
all_names = pd.concat(all_years)

Запустите цикл с помощью Alt + Enter и проверьте вывод, вызвав последние строки получившейся таблицы.

Теперь можно приступать к работе с pandas.

Группировка данных

Пакет pandas позволяет группировать данные с помощью функции .groupby(). Набор данных, присвоенный переменной all_names, можно разделить на разные части с помощью groupby().

К примеру, можно сгруппировать данные по году или полу. Введите:

group_name = all_names.groupby([‘Sex’, ‘Year’])

Запустите код с помощью Alt + Enter.

Затем вызовите переменную group_name, чтобы просмотреть результат:

Это объект DataFrameGroupBy, в котором хранятся сведения о группировке данных, но нет никакой информации о визуализации значений.

Чтобы отобразить данные в таблице, можно вычислить .size(), .mean() и .sum().

Запустите код с помощью Alt + Enter. Вы увидите:

Sex Year
F 1880 942
. 1881 938
. 1882 1028
. 1883 1054
. 1884 1172
.

Эти данные удобно читать, но с помощью функции .unstack можно оптимизировать визуализацию.

Запустите код с помощью Alt + Enter. Вы увидите удобную таблицу, данные в которой упорядочены по годам и полам.

Чтобы, например, получить общее количество рожденных детей, используйте функцию .sum(). Чтобы уменьшить объем данных, примените её только к names2015 (данным за 2015 год, которые хранятся в yob2015.txt):

Запустите код с помощью Alt + Enter. Вы увидите таблицу, которая содержит общее число рожденных в 2015 году детей.

Сводные таблицы

Сводные таблицы помогают обобщать данные. Они могут автоматически сортировать и подсчитывать данные, а также вычислять общее или среднее значение в одной таблице. Полученные результаты можно отобразить в новой таблице.

В pandas для этого существует функция pivot_table().

Чтобы создать сводную таблицу, вызовите DataFrame, а затем вызовите и сгруппируйте данные, с которыми хотите работать.

В данном примере используем данные all_names. Отобразите данные Babies, сгруппировав их по Name и Year.

pd.pivot_table(all_names, ‘Babies’, ‘Name’, ‘Year’)

Запустите код с помощью Alt + Enter. Вы увидите объемную таблицу.

Поскольку на данный момент она содержит много пустых значений, лучше использовать Name и Year в качестве столбцов, а не строк. Сгруппируйте данные в квадратных скобках:

pd.pivot_table(all_names, ‘Babies’, [‘Name’, ‘Year’])

Запустите код с помощью Alt + Enter. Вы увидите:

Name Year
Aaban 2007 5.0
. 2009 6.0
. 2010 9.0
. 2011 11.0
. 2012 11.0
. 2013 14.0
. 2014 16.0
. 2015 15.0
Aabha 2011 7.0
. 2012 5.0
. 2014 9.0
. 2015 7.0
Aabid 2003 5.0
Aabriella 2008 5.0
. 2014 5.0
. 2015 5.0

Также можно сгруппировать данные, где в качестве одного измерения будет Name и Sex, а в качестве второго – Year.

pd.pivot_table(all_names, ‘Babies’, [‘Name’, ‘Sex’], ‘Year’)

Запустите код с помощью Alt + Enter. Вы увидите новую большую таблицу.

Визуализация данных

Комбинируя пакет pandas с другими пакетами, например, matplotlib, вы можете визуализировать данные внутри документа.

Давайте попробуем создать график популярности имени. Для этого нужно установить и отсортировать индексы и переработать данные, которые позволят отобразить популярность конкретного имени.

Пакет pandas позволяет выполнить иерархическую или многоуровневую индексацию, которая позволяет сохранять и управлять данными с произвольным числом измерений.

Проиндексируйте данные столбцов Sex, Name и Year, а затем отсортируйте индексы.

Запустите код с помощью Alt + Enter, а затем введите:

Запустите код с помощью Alt + Enter. Вы увидите объемную таблицу, в которой отображается популярность того или иного имени.

Затем нужно написать функцию, которая будет визуализировать популярность имени. Вызовите функцию name_plot и передайте sex и name в качестве параметров.

def name_plot(sex, name):

Создайте переменную data для хранения созданной таблицы. Используйте DataFrame loc, чтобы выбрать строку по значению индекса. В нашем случае loc будет использовать комбинацию полей в MultiIndex, обращаясь к данным sex и name.

Запишите в функцию такую конструкцию:

def name_plot(sex, name):
data = all_names_index.loc[sex, name]

Теперь можно отобразить значения с помощью matplotlib.pyplot, импортированного как pp.

def name_plot(sex, name):
data = all_names_index.loc[sex, name]
pp.plot(data.index, data.values)

Запустите код с помощью Alt + Enter. Теперь можно вызвать функцию и указать любое имя и пол. Например, имя Danica, пол женский (F).

Запустите код с помощью Alt + Enter. На экране появится график популярности данного имени в период с 1900 по 2015 год.

В некоторых системах может появиться предупреждение о замене шрифта, но данные будут отображаться правильно.

Созданная функция позволяет отобразить данные сразу о нескольких именах. Так вы можете увидеть тенденции в выборе имен в то или иное время.

Сначала нужно расширить график:

pp.figure(figsize = (18, 8))

Затем нужно создать список имён, популярность которых нужно визуализировать:

pp.figure(figsize = (18, 8))
names = [‘Sammy’, ‘Jesse’, ‘Drew’, ‘Jamie’]

После этого нужно выполнить итерацию списка с помощью цикла for и визуализировать данные о каждом имени. Выбранные нами имена могут быть как мужскими, так и женскими. Сначала соберите данные о женских именах:

pp.figure(figsize = (18, 8))
names = [‘Sammy’, ‘Jesse’, ‘Drew’, ‘Jamie’]
for name in names:
name_plot(‘F’, name)

pp.figure(figsize = (18, 8))
names = [‘Sammy’, ‘Jesse’, ‘Drew’, ‘Jamie’]
for name in names:
name_plot(‘F’, name)
pp.legend(names)

Запустите код с помощью Alt + Enter. На экране появится график популярности указанных женских имён в период с 1880 по 2015 год.

Теперь попробуйте визуализировать данные о тех же мужских именах.

pp.figure(figsize = (18, 8))
names = [‘Sammy’, ‘Jesse’, ‘Drew’, ‘Jamie’]
for name in names:
name_plot(‘M’, name)
pp.legend(names)

Запустите код с помощью Alt + Enter. На экране появится график популярности заданных мужских имён в период с 1880 по 2015 год.

Попробуйте сами визуализировать данные по популярности или создать свой сценарий для сбора данных для графиков.

Заключение

Данное руководство охватывает основы работы с большими объёмами данных, а именно группировку данных с помощью groupby() и pivot_table(), индексацию данных в MultiIndex и визуализацию с помощью пакетов pandas и matplotlib.

Использование SQL с Python – полное руководство

Главное меню » Информация » Использование SQL с Python – полное руководство

Все компании используют большие или малые базы данных. База данных – это не что иное, как организованный сбор данных. Данные организованы в строки, столбцы и таблицы и индексируются, чтобы упростить поиск необходимой информации. Базы данных предлагают множество функций, с помощью которых можно легко управлять большими объемами информации через Интернет, а также вводить и выводить большие объемы данных через типичный файл, такой как текстовый файл.

СУБД или система управления базами данных – это программное обеспечение для взаимодействия пользователей и баз данных. Эти пользователи не обязательно являются людьми, но могут быть программами или приложениями. Это когда приходит SQL. SQL является языком запросов и очень популярен в базах данных. Это позволяет программе на Python взаимодействовать с базой данных для выполнения запросов.

Существует много библиотек, с помощью которых мы можем связать интерфейс нашего приложения с базой данных. Примерами таких библиотек Python SQL являются SQLite, pymssql, sqlalchemy и другие. Каждая из этих библиотек Python SQL имеет свои плюсы и минусы и содержит функции для заданий Python SQL и генератора запросов Python SQL. Мы объясним одну из таких библиотек Python SQL под названием SQLite, которая доступна в Python. В этом блоге мы увидим, как подключать, хранить и извлекать данные на сервер SQL или простой SQL с Python.

Вы также можете конвертировать CSV в SQL Python и сохранить его в таблице в вашей базе данных. SQL-сервер подключения к базе данных Python выполняется с помощью библиотек SQL-сервера Python на Python. Эти библиотеки запускают задания SQL Python, такие как хранение, извлечение, удаление и помогают Python подключаться к серверу SQL.

Раздел 1: Использование основных функций SQLite

  1. Чтобы сначала использовать SQLite, импортируйте его.
  2. Соединитесь с помощью метода connect() и передайте имя базы данных, с которой вы хотите установить соединение. В противном случае Python создаст файл с заданным именем.
  3. После этого вызывается объект-курсор, чтобы иметь возможность отправлять команды в SQL. Курсор – это управляющая структура, используемая для обхода и извлечения записей базы данных.
  4. Чтобы создать таблицу в базе данных, создайте объект и напишите в нем команду SQL с комментариями.
  5. Чтобы выполнить команду, вызовите метод курсора execute и передайте имя команды sql в качестве параметра. Сохраните несколько команд и выполните их вместе. После выполнения всех действий сохраните изменения в файле, зафиксировав эти изменения, а затем закройте связь.

Некоторый код для представления вышеуказанных шагов:

Python-код для демонстрации создания и вставки таблиц с помощью SQL

Раздел 2: выборка данных

Извлечение данных из базы данных так же просто, как и создание. Метод execute использует ключевое слово «Select» для извлечения данных из таблицы с указанным именем в виде списка списков.

Код Python для демонстрации SQL для извлечения данных.

Раздел 3: Обновление, удаление записей в базе данных

Вы также можете использовать ряд функций, помимо упомянутых выше. К ним относятся обновление, удаление записей, ввод данных пользователем и т. д.

Python-код для отображения обновления и удаления

# Код для отображения графического представления

Раздел 4: Использование методов для запросов к большой базе данных

Ранее количество записей в базе данных было ограниченным, но большие базы данных также можно запрашивать с помощью SQLite. Некоторые методы для этого включают fetchall(), executetescript(), executemany() и т. д.

executetescript(): этот метод выполняет несколько операторов SQL одновременно. Вам необходимо передать скрипт в параметре этого метода.

executemany(): этот метод используется всякий раз, когда executetescript() должен использоваться несколько раз.

Вот и все. Теперь вы можете легко получить доступ к вашему SQL-серверу, используя эту библиотеку Python SQL. Это поможет вам создавать приложения, которым требуется функциональность базы данных, например, система управления библиотекой или что то другое, поскольку они требуют взаимодействия пользователя с внутренней базой данных. Закатите рукава и начните использовать SQL с кодом.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий