2 урок PYTHON. Урок python 1 Конспект 2 урок python
Скачать 446.46 Kb.
|
> Конспект > 2 урок > PYTHON 1 > Конспект > 2 урок > PYTHON > Оглавление 2 урока Библиотека Считывание csv Атрибуты vs Методы Размеры датафрэйма и типы его колонок Метод describe и переименование колонок Обращение и создание колонок Применение вычислительных методов и цепочка из них Группировка и агрегация Сортировка значений и распределение значений Запросы Запись в файл Использованные в уроке функции Векторизация и None > Конспект > 2 урок > PYTHON 2 Создание функций Время и погрешности в арифметике > Библиотека (модуль/либа/пакет) Библиотека — набор кода, посвящённый определённой цели (математические функции/работа в интернете/обработка текстов). Используется, чтобы облегчить работу, связанную с этой целью. В нашем курсе самый простой пример — библиотека pandas , которая используется для анализа данных. Если есть библиотека, решающая ваша задачу, то почти всегда лучше воспользоваться ей, нежели решать всё самостоятельно с нуля. По умолчанию содержимое библиотек недоступно при работе в python. Чтобы их использовать, необходимо их импортировать: import pandas as pd import — ключевое слово, дающее питону понять, что мы собираемся импортировать библиотеку pandas — название библиотеки as — ключевое слово, означающее, что дальше будет использоваться другое название (элиас, alias) pd — то, какое название мы решили использовать в коде вместо названия этой библиотеки; они произвольны и обычно конвенциональны (в дальнейшем будем использовать название pd ) Более простой вариант импорта без изменения названия: import module module — название нужного вам модуля, далее в коде необходимо использовать его. Существуют и другие способы импорта, но пока что остановимся на этих. pandas > Конспект > 2 урок > PYTHON 3 Библиотека для работы с данными. Без pandas анализ табличных данных в питоне совсем не то. В следующих стэпах поговорим о его возможностях. Документация > Считывание csv pd read_csv ( 'path_to_your.csv' ) # read_excel for reading excel files Считывает csv файл, который лежит по указанному в скобках пути. На Windows пути к файлам содержат символ \ , который является специальным символом в строках во многих языках программирования, включая питон. Поэтому необходимо сделать следующее — либо удвоить все символы \ в строке, содержащей путь, либо поставить r перед строкой: путь на windows - C:\user\docs\Letter.txt cтрока с путём - 'C:\user\docs\Letter.txt' валидная строка с путём - 'C:\\user\\docs\\Letter.txt' или r'C:\user\docs\Letter.txt' На сервере мы работаем с Unix путями, например /home/user/letter.txt . С ними меньше таких проблем — достаточно поместить путь в кавычки, чтобы всё было хорошо. Дополнительные аргументы функции read_csv Аргументы (или параметры) — это настройки, которые мы можем задать для функции. encoding — параметр в read_csv , отвечает за кодировку текста, которая может быть различной. Самая распространённая — utf-8. Пример указания кодировки: pd read_csv ( 'path_to_your.csv' , encoding = 'Windows-1251' ) # now you are reading file e ncoded with Windows-1251 sep — разделитель между ячейками в строке (по умолчанию , ) > Конспект > 2 урок > PYTHON 4 pd read_csv ( 'path_to_your.csv' , encoding = 'Windows-1251' , sep = ';' ) # now you additiona lly specified that fields are separated with ; parse_dates — указывает, стоит ли воспринимать даты как даты? (по умолчанию они воспринимаются пандасом как строки)Параметр с датами может принимать несколько значений: True — пытается перевести в дату первую колонку список колонок — пытается перевести в дату указанные в списке колонки # And create_data, payment_data columns will be treated as data pd read_csv ( 'path_to_your.csv' , encoding = 'Windows-1251' , sep = ';' , parse_dates = [ 'create _data' , 'payment_data' ]) Документация > Атрибуты vs Методы У объектов есть и методы, и атрибуты. В чём же их различие? Прежде всего они отличаются внешним видом: после названия метода идут скобки, в которых могут быть аргументы, а после названия атрибутов скобок нет. Методы являются функциями, связанными с объектом. То есть они что-то вычисляют/сохраняют/загружают. Атрибуты — сохранённые признаки, связанные с объектом. Их значение сохранено и не вычисляется при вызове. Пример с методом head() и атрибутом shape > Конспект > 2 урок > PYTHON 5 Больше информации > Размеры датафрэйма shape — атрибут, хранящий данные о размерах таблицы. Возвращает кортеж (для простоты — воспринимайте его как на неизменяемый список). В случае датафрэйма кортеж содержит 2 значения — число строк и число колонок в нём. Например, в данном случае размер таблицы: 48129 строк и 22 колонки. Документация Типы колонок Чтобы узнать типы колонок в вашем датафрэйме, воспользуйтесь атрибутом dtypes — он возвращает серию с описанием типа каждой колонки. Типы более-менее совпадают с типами в python, однако есть и различия: здесь у типов присутствует описание размера (числа битов) все сложные типы (не числа или логические значения) отображаются как object Информация о типе важна для дальнейшей работы с датафрэймом (например, чтобы не произвести сложение строк, думая, что это числа). Документация > Метод describe describe — удобный метод для вывода описания числовых колонок в датафрэйме: > Конспект > 2 урок > PYTHON 6 describe выводит информацию о числе строк, среднем значении, стандартном отклонении, минимуме, максимуме и значениях по 25-му, 50 му и 75-му квартилям. Он действует только на числах, так как большинство этих параметров неочевидно определяются для других типов данных (например, строк). Документация Переименование колонок В идеале названия колонок осмыслены, актуальны, не содержат пробелов и на английском. Конечно, для каких-то задач, они могут быть и с пробелами, и на другом языке. В любом случае, если вы хотите их переименовать, для этого есть метод rename . Пример переименования колонки x в name, а колонки y в salary: # Rename columns df = df rename ( columns = { 'x' : 'name' , 'y' : 'salary' }) А это пример переименования лэйблов строк из 0 в Ivanov и из 1 в Vasilev: # Rename index (row names) df = df rename ( index = { 0 : 'Ivanov' , 1 : 'Vasilev' }) Один из способов переименования — передать словарь, в котором ключами являются старые названия, а значениями — новые. Документация > Конспект > 2 урок > PYTHON 7 > Обращение к колонкам В пандасе существует множество способов обратиться к колонке датафрэйма. Самый удобный: df column_name df – датафрэйм column_name – название колонки Чтобы это работало, название колонки должно состоять из одного компонента (например, слова), и не должно совпадать с названием методов датафрэйма (имя колонки count не сработает). Для языковой однородности — ещё и на английском, но это не является обязательным. Что делать, если название колонки состоит из 2-х слов? Либо переименовать колонку, либо использовать другой способ доступа: df [ 'column name' ] Работает для всех случаев кроме тех, когда в названии присутствуют одинарные кавычки. Тогда либо используйте вокруг названия двойные, либо поставьте \ перед кавычками внутри. Лучше называть колонки без кавычек. Для получения нескольких колонок передайте внутрь квадратных скобок список с именами желаемых колонок: df [[ 'column1' , 'column2' , 'column3' ]] Документация Создание колонки Делается так же просто, как и задавание нового значения в словаре :) # Create new column in the df with name new_column which is equal to 5 in each cell df [ 'new_column' ] = 5 > Конспект > 2 урок > PYTHON 8 Больше информации > Применение вычислительных методов Существует набор методов, доступных для колонок датафрэймов. Например, есть колонка money в датафрэйме, содержащая полученные объёмы денег. Применив метод sum , можно посчитать их сумму. df money sum () 69120 Ещё несколько примеров: product – перемножение std – среднеквадратичное отклонение var – дисперсия Больше информации Цепочка методов (method chaining) Приём для объединения нескольких действий в одно. Большинство методов датафрэймов возвращают вам результат, который довольно часто тоже является датафрэймом. Следовательно, от него тоже можно вызвать метод. Ванильная запись: df = df query ( 'income >= 1000' ) df = df groupby ([ 'title' , 'status' ], as_index = False ). agg ({ 'income' : 'sum' , 'id' : 'coun t' }) # groupby is usually immediately followed by agg df = df sort_values ([ 'title' , 'status' ]) Сокращённая запись: df = df query ( 'income >= 1000' ). groupby ([ 'title' , 'status' ], as_index = False ). agg ({ 'i ncome' : 'sum' , 'id' : 'count' }). sort_values ([ 'title' , 'status' ]) > Конспект > 2 урок > PYTHON 9 Как можно заметить, эта запись довольно длинная и не очень удобная для чтения. Обычно, такая цепочка оформляется в блок, где каждый метод идёт на своей строке. Есть 2 варианта оформления, какой выбрать — вопрос предпочтения и конвенций в вашей организации: # \ after each nonfinal line to demarcate line continuation for python df = df query ( 'income >= 1000' ) \ groupby ([ 'title' , 'status' ], as_index = False ) \ agg ({ 'income' : 'sum' , 'id' : 'count' }) \ sort_values ([ 'title' , 'status' ]) # Parentheses around the whole expression for the same purpose as backslash in previou s example df = ( df query ( 'income >= 1000' ) groupby ([ 'title' , 'status' ], as_index = False ) agg ({ 'income' : 'sum' , 'id' : 'count' }) sort_values ([ 'title' , 'status' ])) Больше информации > Группировка Часто используемый приём для вычисления чего-либо по данным. Осуществляется с помощью метода groupby – группирует данные в датафрэйме по указанным колонкам: Применение одного метода groupby не даёт видимого эффекта, хотя на самом деле все строки были объединены в группы по значению в колонке company : с одним значением в одну группу, с другим – в другую. groupby обычно используется не сам по себе, а в связке с agg или другим методом. Можно использовать несколько колонок для группировки, передав их в виде списка. Дополнительные параметры as_index – принимает True или False для обозначения того, нужно ли использовать переданные для группировки колонки в качестве > Конспект > 2 урок > PYTHON 10 индекса, по умолчанию True Документация Агрегация agg – функция для агрегирования данных, применяется после группировки методом groupby Как это работает: агрегируем методом agg , указывая на каких колонках какие действия произвести. Существуют разные способы передать в agg что и как вы хотите агрегировать. Самый простой и полный – использовать словарь, в котором ключами являются названия колонок, а значениями — применяемые к ним функции. Чтобы применить несколько функций, используйте список функций. Можно передать как сами функции ( sum ), так и обозначающие их строки ( 'sum' ). В результате агрегации из массива значений (колонка) получается одно значение на каждую агрегирующую функцию. Документация > Сортировка значений Для такой сортировки используется метод sort_values , получающий колонку/список колонок, по которым будет идти сортировка (обратите внимание, заглавные буквы считаются меньше обычныx): > Конспект > 2 урок > PYTHON 11 Дополнительные параметры ascending – принимает логическое значение, показывающее сортировать ли колонку по возрастанию Документация value_counts Метод, который считает, сколько раз встречается каждое уникальное значение переменной. Например, имеется следующий набор данных: > Конспект > 2 урок > PYTHON 12 Посчитать, сколько раз встречается каждое имя ( name ), можно с помощью следующей команды: df [ 'name' ]. value_counts () Результат возвращается в формате pd.Series (серии) : Persik 2 Tolya 1 Barsik 1 Name : name , dtype : int64 Также метод value_counts принимает на вход несколько параметров: normalize – показать относительные частоты уникальных значений (по умолчанию равен False ). dropna – не включать количество NaN (по умолчанию равен True ) bins – сгруппировать количественную переменную (например, разбить возраст на возрастные группы); для использования данного параметра нужно указать, на сколько групп разбить переменную Несколько примеров: 1 Получаем частоту встречаемости (напр. Persik – в 40% наблюдений), также не удаляем из результата NaN df [ 'name' ]. value_counts ( normalize = True , dropna = False ) Persik 0.4 Tolya 0.2 Barsik 0.2 NaN 0.2 Name : name , dtype : float64 2 Разбиваем year на 2 промежутка: df [ 'year' ]. value_counts ( bins = 2 ) > Конспект > 2 урок > PYTHON 13 ( 2017.5 , 2020.0 ] 3 ( 2014.994 , 2017.5 ] 2 Name : year , dtype : int64 Документация > Запросы В пандасе есть возможность фильтровать данные используя SQL-like синтаксис. Для этого нужен метод query , принимающий строку с запросом. Внутри него можно использовать названия колонок (если они без пробелов). При использовании строк внутри запроса экранируйте кавычки \ или используйте другую пару В query также можно передать сразу несколько условий. Условия, которые должны выполняться одновременно, соединяются с помощью and или & : product_data query ( "title == 'Курс обучения «Эксперт»' and status == 'Завершен'" ) Когда должно удовлетворяться одно из условий – or или | : product_data query ( "title == 'Курс обучения «Эксперт»' or status == 'Завершен'" ) Документация > Запись в файл > Конспект > 2 урок > PYTHON 14 Датафрэйм можно записать в различный формат, самый распространённый, пожалуй, csv. Для этого нужно применить к датафрэйму метод to_csv и передать в него путь, по которому вы хотите создать файл. df to_csv ( 'my.csv' ) Дополнительные параметры index – записать индекс датафрэйма в csv как первую колонку sep – используемый при записи разделитель колонок Документация > Использованные функции replace – применяется к строкам, принимает 2 строки: что заменить и на чтоБольше информации strip – применяется к строкам, по умолчанию убирает пробелы слева и справаБольше информации round – применяется к дробным числам, округляет их, можно передать дополнительный аргумент, который означает число знаков после запятойБольше информации > Конспект > 2 урок > PYTHON 15 > Векторизация Векторизация - это специальная техника, позволяющая в пандасе быстро выполнять в одну строчку операции, которые в чистом питоне требуют как минимум одного цикла. Быстрота связана с тем, что код пандаса реализован на более быстром чем питон языке, а в питоне просто представлены функции. Благодаря векторизации, мы можем делать различные операции со всеми колонками целиком, не отвлекаясь на итерирование по элементам Умножим каждый элемент на 3 > Конспект > 2 урок > PYTHON 16 Или выясним для каждого значения больше ли оно чем 3 None None это специальный тип данных в питоне, который имеет только одно одноимённое значение – None . Используется в тех случаях, когда нужно обозначить ничто. Обычно (но совсем необязательно) его возвращают функции, которые как-то изменяют данные xs = [ 1 , 2 , 3 ] a = xs append ( 4 ) ( xs ) [ 1 , 2 , 3 , 4 ] ( a ) None > Конспект > 2 урок > PYTHON 17 Толку от присвоения выше ( a = xs.append(4) ) нет, просто постепенно запоминайте такие функции, и не перезаписывайте ваши данные вызовами типа xs = xs append ( 4 ) Документация > Свои функции Служат для переиспользования кода – вы написали изумительный скрипт, который решает 20% вашей работы. Теперь вам нужно использовать его каждый день на новых данных. Чтобы это упростить, существуют функции. Они позволяют свести весь код к 1-ой строке и менять название поступающих файлов и других параметров только в 1 ом месте. Задавание функций def function ( parameter ): what to do def – ключевое слово, даёт питону понять, что дальше будет задана функция function – название, которое мы выбрали parameter – инпут функции, то, какие данные ей нужны для работы. Параметров может быть 0 (без инпута) или больше. Это может быть почти что угодно: путь к файлу название папки число строк, с которыми нужно работать путь к отчёту, который будет создан what to do – тело функции, функционал, который будет работать > Конспект > 2 урок > PYTHON 18 По умолчанию функция при завершении своей работы ничего не вернёт обратно (в отличие от, например, метода head у датафрэйма). Чтобы она возвращала значение после вызова, добавьте ключевое слово return в теле функции перед переменной, которую хотите вернуть: # 2 simple functions# Without returndef print_a(a, b): ( a ) # With returndef return_a(a, b):return a x = print_a ( 3 , 5 ) # x is None3 y = return_a ( 3 , 5 ) # y is 3 Больше информации > Время Для работы с датой и временем можно использовать модуль datetime Для получения данных о времени в момент вызова функции используйте функцию today в одноимённом подмодуле: import datetime # by convention imports are placed in the head of file and separa ted with 2 blank lines from other code date = datetime datetime today () Само по себе это даст вам специальный тип даты. Чтобы перевести его в строку сделайте следующее: strftime форматирует дату по переданному ему формату: % – обозначает что дальше будет часть даты Y – год 4-мя знаками m – месяц 2-мя знаками > Конспект > 2 урок > PYTHON 19 d – день H – час M – минуты S – секунды Можно использовать только часть фрагментов даты, разделители между ними – на ваше усмотрение (в примере это - и : ). Немного примеров from datetime import datetime # current date and time now = datetime now () ( f'Full time format of now is { now } ' ) Full time format of now is 2020 - 06 - 01 17 : 54 : 40.010540 # Year year = now strftime ( "%Y" ) ( "year:" , year ) year : 2020 # Month month = now strftime ( "%m" ) ( "month:" , month ) month : 06 # Day day = now strftime ( "%d" ) ( "day:" , day ) day : 01 # Time time = now strftime ( "%H:%M:%S" ) ( "time:" , time ) time : 17 : 54 : 40 # Date and time date_time = now strftime ( "%m/%d/%Y, %H:%M:%S" ) > Конспект > 2 урок > PYTHON 20 ( "date and time:" , date_time ) date and time : 06 / 04 / 2020 , 17 : 54 : 40 Документация Погрешность арифметики В компьютере используется двоичная система счисления, в которой не выразить точно любое десятичное число. Из-за этого при выполнении действий может накапливаться ошибка. Обычно это не страшно (она в порядках меньше 5-ого), но бывает нужна точность. Для этого есть специальные библиотеки Документация |