Файл: Тема Основы языка Python.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.12.2023

Просмотров: 133

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Тип формата
Описание данных
Функция writers
Текст
CSV to_csv
Текст
JSON to_json
Текст
HTML to_html
Текст
Локальный буфер обмена / Local clipboard to_clipboard
MS Excel to_excel
Двоичный
OpenDocument to_excel
Двоичный
HDF5 Format to_hdf
Двоичный
Stata to_stata
SQL
SQL to_sql
SQL
Google BigQuery to_gbq
При помощи методов pandas.DataFrame.to_csv и pandas.DataFrame.to_excel можно записать полученный после объединения таблиц результат в файл с расширением .csv и .xlsx. При этом, если первоначальные значения были получены из файла .xlsx, при помощи pandas они могут быть записаны в файл с другим расширением, например, .csv (рис.
181).
Рис. 181. Запись во внешний файл
Данные экспортируются в файл указанного формата. Методы содержат параметры для указания пути к файлу, наличия разделителя данных, перечня записываемых колонок и др.

136
Для pandas.DataFrame.to_csv путь к файлу – это аргумент
«path_or_buf», для «pandas.DataFrame.to_excel» – «excel_writer». Идентичные параметры: «columns», «header», «index», «index_label».
Мы рассмотрели основные, но далеко не все методы библиотеки
Pandas. Более подробно с ними можно познакомиться в официальной документации: https://pandas.pydata.org/pandas-docs/stable/index.html.
3.2. Python NumPy
NumPy – библиотека Python для хранения и обработки данных, анализа данных, машинного обучения и научных вычислений – облегчает обработку векторов и матриц.
Основной объект NumPy – однородный многомерный массив
(numpy.ndarray). Это многомерный массив элементов (обычно чисел) одного типа.
Главными атрибутами объектов ndarray являются:
− ndarray.ndim – число измерений (чаще их называют «оси») массива;
− ndarray.shape – размеры массива, его форма. Это кортеж натуральных чисел, показывающий длину массива по каждой оси. Для матрицы из n строк и m столбов, shape будет (n,m). Число элементов кортежа shape равно ndim;
− ndarray.size – количество элементов массива. Очевидно, равно произведению всех элементов атрибута shape;
− ndarray.dtype – объект, описывающий тип элементов массива.
Можно определить dtype, используя стандартные типы данных Python.
NumPy здесь предоставляет целый букет возможностей, как встроенных, например bool_, character, int8, int16, int32, int64, float8, float16, float32, float64, complex64, object_, так и возможность определить собственные типы данных, в том числе и составные;
− ndarray.itemsize – размер каждого элемента массива в байтах;

137
− ndarray.data – буфер, содержащий фактические элементы массива. Обычно не нужно использовать этот атрибут, так как обращаться к элементам массива проще всего с помощью индексов.
NumPy используется многими пакетами Python как основной элемент инфраструктуры, среди них Scikit-Learn, SciPy, Pandas и Tenorflow.
При обращении к библиотеке Pandas может быть использовано сокращение np: import numpy as np.
Возможности библиотеки NumPy могут быть использованы при создании объектов pandas, таких как Series и DataFrame. Посмотрим простой пример, когда при помощи NumPy создается массив данных ndarray и записывается в качестве значений индексов в таблице набора данных pandas
(рис. 182).
Рис. 182. Создание объекта DataFrame с использованием NumPy
Метод np.arange возвращает равномерно распределенные значения в заданном интервале. Значения генерируются в пределах полуоткрытого интервала. В данном случае стартовое значение 0 или 1, окончание – значение 10, с шагом 2.
Объекты Series и DataFrame могут быть преобразованы в массив
NumPy. Для этого существует два основных метода библиотеки pandas:
Series.to_numpy() и DataFrame.to_numpy() (рис. 183).


138
Рис. 183. Преобразование объектов pandas – в массив NumPy
В результате выполнения кода мы получаем массив и информацию о типе содержащихся в нем данных. Столбцы объекта DataFrame становятся, соответственно, столбцами двумерного массива.
По умолчанию Python имеет следующие типы данных:
− strings – используется для представления текстовых данных, текст указывается в кавычках, например, "ABCD" или ‘абвгд’;
− integer – используется для представления целых чисел, например: –1,
0, 2;
− float – используется для представления реальных чисел, например:
1.5, 10.90;
− boolean – используется для представления True или False;
− complex – используется для представления комплексных чисел, например: 1.0 + 2.0j, 1.5 + 2.5j.
NumPy имеет несколько дополнительных типов данных и ссылается на типы данных одним символом, например: i – для целых чисел, u – для целых чисел без знака и т. д. Некоторые типы данных NumPy:
− i – целое число;
− b – логическое значение;
− u – целое число без знака;
− f – число с плавающей точкой;

139
− c – комплексное число;
− M – дата и время;
– объект;
− S – строка;
− U – строка в кодировке Юникод.
Массивы, матрицы и арифметические операции NumPy
В NumPy существует много способов создать массив. Один из наиболее простых – создать массив из обычных списков или кортежей
Python, используя функцию numpy.array() (рис. 184).
Рис. 184. Создание простых массивов
Мы видим несколько простых массивов, созданных при помощи библиотеки NumPy. В качестве элементов списка могут быть переданы данные любого типа.
Функция array() трансформирует вложенные последовательности в многомерные массивы. Тип элементов массива зависит от типа элементов исходной последовательности, но можно и переопределить его в момент создания (рис. 185).

140
Рис. 185. Переопределение типа данных при создании массива
Кроме функции array(), в NumPy существуют другие способы создавать массивы. Если элементы массива вначале неизвестны, а массив, в котором они будут храниться, уже нужен, можно воспользоваться несколькими функциями для того, чтобы создавать массивы с каким-то исходным содержимым (по умолчанию тип создаваемого массива – float64).
Функция zeros() создает массив из нулей, а функция ones() – массив из единиц. Обе функции принимают кортеж с размерами массива и аргумент dtype. По умолчанию тип данных созданного массива – float (рис. 186, 187).
Рис. 186. Создание массива функцией zeros()


141
Рис. 187. Создание массива функцией ones()
Получить тип данных массива, содержащего строки, можно при помощи атрибута .dtype (рис. 188).
Рис. 188. Получение типа данных массива
Если указан тип, в котором элементы не могут быть преобразованы, то
NumPy вызовет ValueError. В Python ValueError вызывается, когда тип

142 передаваемого аргумента функции является неожиданным или неправильным.
Например, нецелочисленная строка, такая как «a», не может быть преобразована в целое число (вызовет ошибку) (рис. 189).
Рис. 189. Ошибки при создании массивов
Лучший способ изменить тип данных существующего массива – это сделать копию массива с помощью метода .astype(). Функция создает копию массива и позволяет указать тип данных в качестве параметра (рис. 190).
Тип данных может быть указан с использованием строки («f'» для
«float», «i» для целого числа и т. д.), или можно использовать тип данных напрямую («float» для «float» и «int» для целого числа).

143
Рис. 190. Изменение типа данных массива
В рассмотренном случае массив был скопирован при помощи метода astype(). В библиотеке NumPy есть и другие методы для создания копии данных, содержащихся в массиве – это copy() и view().
Между copy() и view() есть разница. copy() – это новый массив, а view()
– это просто представление исходного массива.
Копия (copy()) хранит данные, и любые изменения, внесенные в копию, не влияют на исходный массив, а любые изменения, внесенные в исходный массив, не влияют на копию (рис. 191).
Представление (view()) не хранит данные, и любые изменения, внесенные в представление, влияют на исходный массив, а любые изменения, внесенные в исходный массив, влияют на представление.

144
Рис. 191. Метод copy()
Рассмотрим пример подробно. При помощи метода array() создается целочисленный одномерный массив a (вектор). Затем хранящиеся в нем данные копируются в переменную x. В следующей строке кода первый элемент массива заменяется новым значением.
Выводим оба массива и смотрим на результат. Первый массив, в котором был заменен элемент с индексом [0], выводится с новыми значениями. Массив x, в который мы передали копию первоначальных данных, содержит неизмененное значение первого элемента.

145
Рис. 192. Метод view()
Посмотрим работу метода view() (рис. 192). Мы передали наш одномерный массив в новую переменную и сделали замену первого элемента. Запускаем код и в результате получаем два одинаковых массива.
То же самое происходит, когда заменяется элемент второго массива.
Атрибут .base позволяет посмотреть, хранятся ли в новых массивах данные (рис. 193).
Рис. 193. Атрибут .base
Как видно из результатов выполнения программы, возвращено значение None и исходный массив.
Метод .eye возвращает многомерный массив (матрицу) с единицами по диагонали и нулями в остальных местах (рис. 194).
Рис. 194. Создание массива методом .eye


146
Функция arange() в
NumPy предназначена для создания последовательностей чисел. Функция принимает три аргумента – начало интервала, конец и интервал между последовательностями. При использовании arange() с аргументами типа float сложно быть уверенным в том, сколько элементов будет получено (из-за ограничения точности чисел с плавающей запятой). Поэтому в таких случаях обычно лучше использовать функцию linspace(), которая вместо шага в качестве одного из аргументов принимает число, равное количеству нужных элементов (рис. 195).
Рис. 195. Методы .arange() и .linspace()
После создания над массивами можно производить арифметические операции. Например, операцию сложения одномерных и многомерных массивов (рис. 196).

147
Рис. 196. Сложение массивов
При сложении массивов складываются значения каждого ряда, в матрицах складываются значения столбцов. Матрицы должны быть одного и того же размера. Помимо сложения, можно выполнять и другие простые операции: вычитание, умножение, деление (рис. 197, 198, 199).

148
Рис. 197. Вычитание массивов
При вычитании массивов также вычитаются значения каждого ряда. В матрицах, соответственно, вычитаются значения столбцов. Так же, как при операции сложения, здесь матрицы должны быть одного и того же размера.

149
Рис. 198. Умножение массивов

150
Рис. 199. Деление массивов
Массив можно нарезать и проиндексировать. Принцип работы похож на то, как это происходит со списками Python (рис. 200).
Рис. 200. Нарезка и индексация массива
Преимуществом NumPy является наличие в нем функций агрегирования: min(), max(), sum(), mean(), prod(), std() и др.
Рис. 201. Создание одномерного массива (вектора), содержащего последовательность из трех элементов
Рис. 202. Максимальное значение массива

151
Рис. 203. Минимальное значение массива
Рис. 204. Сумма значений функции
Рис. 205. Среднее арифметическое массива
Рис. 206. Среднеквадратическое отклонение массива
Рис. 207. Результат умножения всех элементов массива
В представленных примерах (рис. 201–207) использован одномерный массив (вектор). При работе с многомерным массивом (матрицей) можно указать, по какой оси нужно вычислить функцию агрегирования. Например, найти максимальное значение в каждом столбце, указав ось axis = 0 или axis
= 1 (рис. 208).

152
Рис. 208. Максимальное значение массива в каждом столбце
Арифметические операции над матрицами разных размеров возможны в том случае, если размерность одной из матриц равна одному. Это значит, что в матрице только один столбец или один ряд. В таком случае для выполнения операции NumPy используют правила трансляции (рис. 209).
Рис. 209. Сложение матриц разных размеров
В некоторых случаях необходимо перевернуть матрицу. Это может потребоваться при вычислении скалярного произведения двух матриц. В
NumPy каждая матрица может использовать метод dot(), который применяется для проведения скалярных операций (рис. 210).


153
Рис. 210. Скалярное произведение матриц
Тогда возникает необходимость наличия совпадающих размерностей.
У массивов NumPy есть полезное свойство T – транспонирование матрицы
(рис. 211).
Рис. 211. Транспонирование матрицы
Некоторые более сложные ситуации требуют возможности переключения между размерностями рассматриваемой матрицы. В этом случае подходит метод reshape(). Здесь требуется только передать новые размерности для матрицы. Для размерности можно передать –1, и NumPy выведет ее верное значение, опираясь на данные рассматриваемой матрицы
(рис. 212).

154
Рис. 212. Изменение размерности матрицы
Для добавления, удаления и сортировки элементов матрицы в NumPy есть методы: .append(), .delete() и .sort() (рис. 213).
Рис. 213. Добавление, удаление и сортировка элементов массива
Форму и размер массива можно узнать при помощи следующих атрибутов:
− ndarray.ndim() – показывает количество осей или размеров массива
(рис. 214, 215);

155
− ndarray.size() – выводит общее количество элементов массива (рис.
216);
− ndarray.shape() – выводит кортеж целых чисел, которые указывают количество элементов, хранящихся вдоль каждого измерения массива (рис.
217).
Рис. 214. Количество осей и размеров массива
Рис. 215. Количество осей и размеров нулевой матрицы

156
Рис. 216. Общее количество элементов массива
Рис. 217. Количество элементов, хранящихся вдоль каждого измерения массива
Метод ndarray.itemsize позволяет узнать размер каждого элемента массива в байтах (рис. 218). Например, для массива из элементов типа float64 значение itemsize равно 8 (=64/8), а для complex32 этот атрибут равен 4
(=32/8).

157
Рис. 218. Размер каждого элемента массива в байтах
При помощи методов NumPy .concatenate и .array_split можно объединять и разделять массивы.
Объединение (рис. 219) означает помещение содержимого двух или более массивов в один массив. В SQL объединение таблиц происходит на основе ключа, в NumPy массивы объединяются по осям. Мы передаем последовательность массивов, которые хотим присоединить функцией
.concatenate(), вместе с осью. Если ось не передана явно, она принимается за
0.

158
Рис. 219. Объединение двух массивов
Разделение (рис. 220) является обратной операцией присоединения.
Функция .concatenate() объединяет несколько массивов в один, а разделение разбивает один массив на несколько. Используя array_split() для разделения массивов, мы передаем ему массив, который хотим разделить, и количество разделений:
Рис. 220. Разделение массивов
В NumPy есть возможность извлекать элементы из массива.
Извлечение некоторых элементов из существующего массива и создание из них нового массива называется фильтрацией (filtering) (рис. 221).
В NumPy вы фильтруете массив, используя список логических индексов. Список логических индексов – это список логических индексов, соответствующих индексам в массиве.