Я начал использовать Python на первом курсе магистратуры по астрофизике (то есть несколько лет назад :D). Мне нужен был мощный и быстрый инструмент для вычисления интегралов сложных функций без точного решения. В начале я был удивлен тем фактом, что то, что я делал до этого момента, было очень простой задачей с Python, что немного упростило мою докторскую жизнь :D С этого момента Python был основным инструментом, который я использовал для сложных вычислений.

Согласно Википедии:

Python – это высокоуровневый язык программирования общего назначения.

широко используется для очень большого количества задач и уже предустановлен в Linux. Я никогда не делал заметок для этого языка программирования, поскольку всему, что мне было нужно, я научился «на поле». Тем не менее, эта статья будет содержать некоторые примечания, чтобы все было аккуратно и организовано, хотя то, что я покажу, очень мало по сравнению со всей системой функций и функциональных возможностей, которые есть у Python. Обычно для работы с данными я использую IPython, который представляет собой более интерактивную командную оболочку Python.

В любом случае, давайте углубимся в это и помним: возможно, я что-то упустил, когда писал эту статью, но аргументы, обсуждаемые здесь, можно рассматривать как отправную точку для начала!

Доступ, переменные и массивы

Можно получить доступ к IPython из терминала, введя ipython, и выйти из него, введя exit. Оказавшись в среде, можно выполнять команды. Их всегда можно записать в файл (с расширением .py), а затем выполнить его из терминала:

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

список — это вектор элементов, которые можно изменить, в отличие от кортежа, элементы которого изменить нельзя. Вместо этого словарь — это способ определения вещей, состоящих из имени и элемента (или элементов). Переменные могут отображаться несколькими способами:

Функция print используется для отображения объектов различных типов (т. е. чисел, строк и т. д.), а также с указанием количества десятичных знаков (при работе с числами). Массивы — это объекты, которые могут иметь любое измерение, и они широко используются (они могут содержать все типы элементов). Для их определения нужна библиотека numpy (содержащая также множество очень полезных функций для манипулирования данными):

Первая строка импортирует библиотеку numpy и переименовывает ее в np: это означает, что для использования связанных функций можно написать npвместо полного имени. Как и массивы, с помощью той же библиотеки можно определить матрицы (обратите внимание, что матрицы имеют только два измерения). Можно манипулировать и извлекать информацию из массивов и матриц:

Важно: в отличие от других языков программирования (например, Octave, R или Julia), в Python первый элемент объекта представляется (или вызывается) с индексом 0 (а не 1)! Вот список некоторых специальных массивов и матриц:

Выбор и поиск элементов

Доступ к элементам массива можно осуществить, указав соответствующий индекс (или индексы):

При работе с массивами может быть полезно найти определенные элементы с учетом определенного условия (или условий):

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

Основные операции

Библиотека numpy очень полезна для математических операций:

Первая команда работает как для массивов, так и для списков (чисел). Однако эквивалентный x+y работает иначе для списков (т. е. объединяет их, а не суммирует элементы). Обратите внимание, что функции без np не связаны с библиотекой numpy. Другими полезными функциями являются:

Массивы можно комбинировать по-разному и добавлять элементы:

Инструкции if и циклы

Как и во всех языках программирования, операторы If и циклы — очень полезные способы создания условных операций и выполнения нескольких (рекурсивных) задач:

В операторах If можно определить несколько условий, добавив elif; когда присутствует только одно условие, if достаточно (даже без else), что означает, что если условие имеет значение False, ничего не происходит. В циклах while условие обычно относится к счетчику i, который должен присутствовать внутри цикла (разумеется, приращение может быть другим, например, i= i**2, в зависимости от задачи или других условий). Наконец, цикл for очень похож на предыдущий, за исключением отсутствия счетчика: он выполняет задачу для каждого элемента, присутствующего в диапазоне. Если задача не связана с этими элементами, в качестве счетчика используется диапазон элементов.

Функции

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

Операции под имя_функции используют указанные аргументы (a,b,c,…), и всегда есть результат (указанный с помощью return) . Также можно создать функцию множественного вывода:

Если функция (имя_функции) создана и сохранена в файле (имя_файла.py), ее можно импортировать:

и используйте его, вызвав его (file_name не имеет .py в конце!).

Импорт и экспорт данных

Когда данные перечислены в файле, их можно импортировать и работать с ними. Точно так же после создания данных их можно экспортировать и сохранить в выходной файл:

Фреймы данных: определение и информация

Фреймы данных – это таблицы, содержащие данные, организованные в строки (т. е. записи) и столбцы (т. е. функции). В Python есть возможность работать с дата-фреймами, используя библиотеку pandas, содержащую большое количество различных функций. Помните, что после импорта данных с помощью pandas (см. предыдущий раздел) они уже организованы во фрейме данных. Кадр данных может быть определен двумя способами:

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

Последняя строка может быть использована, например, в циклы и операторы принятия решений. Типы «int64» связаны с целыми числами, «float64» — с числами с плавающей запятой, а «object» — со строками.

Фреймы данных: выбор элемента

Как уже было показано в предыдущих разделах, элементы (то есть записи и столбцы) можно выбирать различными способами, указывая соответствующие индексы строк/столбцов. Кроме того, выбор может быть сделан путем добавления определенных условий к данным:

Последняя строка может использоваться для выбора только тех записей, которые соответствуют определенному условию, для определенного столбца или для всего фрейма данных. Важно: разница между iloc и loc объясняется ниже:

Первый используется с индексами элементов в порядке появления (т. е. индекс 1: строка 2, индекс 4: строка 5,…), а второй используется с индексами, указанными в ”index».

Фреймы данных: (пере)именовать столбцы

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

Изменения сохраняются в кадре данных путем определения последнего перед командами (df =), как показано в первых двух строках. Однако это также можно сделать без использования идентификаторов, вставив команду inplace = True, что означает, что модификация применяется непосредственно к фрейму данных (эту команду можно использовать для любых модификаций внутри фрейма данных).

Кадры данных: объединение и слияние

Кадры данных могут быть объединены или объединены, встроены (по вертикали) или в виде столбцов (по горизонтали, один за другим):

Легко видеть, что слияние фреймов данных очень похоже на ту же задачу SQL: строки слева на и справа на определяют ссылочные столбцы двух кадр данных для выбора общих значений. Тип слияния how может быть «внутренним» для классического перехвата, «левым» для перехвата плюс элементы первого кадра данных, «правым» для перехвата плюс элементами второго кадра данных и «внешний» для объединения двух фреймов данных.

Фреймы данных: слияние и сведение

Функция melt очень похожа на функцию, определенную в R. Столбец (или список столбцов) выбирается как «идентификатор», а остальные обрабатываются как переменные вместе с их значениями:

Подобно melt, функция pivot может упорядочивать данные по некоторым столбцам. Существуют индексы (представляющие записи в строках) и столбцы (представляющие функции), значения которых относятся к другому столбцу:

Когда определенное значение отсутствует (например, для типа A нет записей, когда год равен 65), оно заменяется на NaN. Во втором примере два идентификатора объединяются (точнее, объединяются их уникальные значения).

Фреймы данных: добавление, замена и удаление элементов

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

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

Во второй строке, связанной с функцией replacee, два списка должны содержать одинаковое количество элементов. Более того, если замена не применяется к указанным столбцам, она будет сделана для всего фрейма данных!

Команда замены очень полезна для преобразования категориальных строковых значений в числовые значения. Кроме того, определенные замены можно сделать и с помощью команды map:

В этом последнем примере команда проверяет, присутствует ли «string» в каждом элементе указанного столбца, а затем вычисляет сумму всех проверенных условий (т. е. сумму True значения).

Кадры данных: группировка и сортировка

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

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

Другой способ группировки данных — разбить их на бины. Для этой задачи подходит функция cut: для выбранного числового столбца функция находит максимальное и минимальное значения и использует их для разделения диапазона на определенное количество бинов. Например, для массива [1, 2, 3, 4, 5, 6] максимальное и минимальное значения равны 6 и 1 соответственно; предположим разделить массив на 2 сегмента: интервалы будут иметь ширину (6 - 1)/2 = 2,5, поэтому два сегмента будут [1, 3,5] и [3,5, 6].

Итак, два интервала — это [60, 67,5] и [67,5, 75]. Как только это разделение выполнено, можно применять определенные функции. Кроме того, можно пометить каждое значение в соответствии с его интервалом:

Наконец, значения внутри фрейма данных можно отсортировать по определенным столбцам:

Кадры данных: нулевые значения

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

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

Статистика по данным

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

Команды с np и без него (т. е. библиотека numpy) можно использовать как с массивами, так и с фреймами данных, давая одинаковые результаты. Команду fill-diagonal можно использовать в особых случаях, когда только некоторые ячейки диагонали должны быть заполнены значением (например, Регуляризация в регрессионном анализе). или модели классификации). Наконец, Корреляционная матрица очень полезна для изучения коэффициентов корреляции между различными функциями (ее представление также можно сделать с помощью библиотеки Seaborn — см. следующий раздел).

Графики и диаграммы: визуализация данных

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

Вот список основных визуалов и графиков (подробнее и варианты/параметры графиков см. в онлайн-документации):

Приведенные выше визуальные эффекты можно создать с помощью специальной библиотеки Python Seaborn.

Библиотека Seaborn

Эта библиотека основана на matplolib и предоставляет высокоуровневый интерфейс для рисования привлекательных и информативных статистических графиков. Вот список некоторых из них (для получения более подробной информации посетите онлайн-документацию — здесь данные организованы в дата-фреймы, что упрощает использование):

Основы объектно-ориентированного программирования

Прежде чем вдаваться в некоторые подробности об этом, необходимо сделать различие, чтобы иметь более четкое и очень широкое представление об этом виде программирования:

  • Процедурное программирование (PP): что-то делается с помощью функций.
  • Объектно-ориентированное программирование (ООП): что-то делается посредством использования объектов.

В первом случае данные и функции разделены: они обрабатываются отдельно, и для использования функции эту последнюю необходимо сначала импортировать, а затем передать в функцию данные. Вместо этого во втором случае данные и функции обрабатываются вместе: нет необходимости импортировать функцию или передавать в нее данные. Таким образом, код легче сохранить и в него легче внести ошибки. Вот пример «Площадь и периметр прямоугольника»:

  • PP: мы должны определить функцию «Площадь» и функцию «Периметр». Затем передаем данные в функцию «Площадь» и в функцию «Периметр» для получения окончательных результатов.
  • ООП: данные должны быть переданы один раз для вычисления площади и периметра. Все находится внутри так называемого класса.

А. Определение: атрибуты и методы

Класс состоит из двух функций: атрибутов (они являются переменными, например, основание, высота, радиус и т. д.) и методов (они являются функциями, например, «Площадь», «Периметр»,…). Объект, созданный из класса, называется Экземпляр:

В приведенном выше примере Myrect — это экземпляр, созданный из класса Rect, где основание b и высота h указаны.

В следующем примере будет определен класс Test: он будет иметь один атрибут класса (т. е. атрибут, определенный в классе и который может использоваться всеми объектами внутри него). ) и один атрибут экземпляра (т. е. атрибут, прикрепленный к экземпляру класса). Более того, будут определены три функции: функция для печати «Hello», функция для печати имени и функция для возврата квадрата числа:

Функция init необходима для определения атрибутов (self всегда рядом!). При определении функции после self могут быть и другие аргументы (например, в func3). Для печати строк следует использовать функцию print, в противном случае return для отображения атрибута или вывода функции. Помните, что print должен стоять перед return, иначе он не будет отображаться!). Все атрибуты, функции и выходы могут быть вызваны и напечатаны следующим образом:

Внутри класса каждый атрибут может использоваться как self.attribute. В приведенных выше примерах можно изменить значение атрибута экземпляра, но также можно добавить новые атрибуты:

Б. Методы и функции, вызывающие друг друга

Также можно определить метод, который вызывает некоторые другие методы внутри класса:

Функцию self.func1 можно использовать в func2 как переменную. Также возможно определить простые функции (которые не являются методами!) внутри класса:

Чтобы вызвать простую функцию внутри класса, ее имя должно быть написано вместе с именем класса (например, Test.simple_func).

С. Наследование

Когда класс создается на основе другого существующего, мы говорим о наследовании: класс «Прямоугольник» является базовым классом, а класс «Квадрат» можно рассматривать как подкласс (т. е. частный случай, когда основание равно высоте, т. е. b = h). Когда класс строится на нескольких других классах, это называется множественным наследованием. Предположим, мы определили класс «Человек» (т. е. базовый класс) с атрибутом A и методом B:

В этом примере класс «Время» будет иметь те же атрибуты и методы, что и «Человек», без их переопределения. Однако, если новый метод определен во «Time», он может быть вызван только «Time», а не «Person».

Д. Специальные методы

Существуют сотни специальных методов, которые можно определить внутри класса для получения дополнительной информации об атрибутах и ​​выполнения определенных операций. Вот небольшой список:

Е. Импорт курса

Что касается других классов и библиотек (например, math, numpy,…), после создания класса его можно вызвать вместе с его атрибутами и методами:

  • Создайте класс (или классы) class_name и сохраните его (их) в файле file_name.py
  • Вызовите его (их), написав в IPython (или в скрипте Python):
  • На данный момент класс импортирован со всеми его методами и атрибутами.