Трансформация данных в pandas ч.2 / pd 12

Число Пи из библиотеки math

Первой важной математической константой является число Пи (π). Оно обозначает отношение длины окружности к диаметру, его значение 3,141592653589793

Чтобы получить к нему доступ, сначала импортируем библиотеку math следующим образом:

Python

import math

1 importmath

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

Python

math.pi

1 math.pi

Вывод

Shell

3.141592653589793

1 3.141592653589793

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

Python

import math

radius = 2
print(‘Площадь окружности с радиусом 2 равна:’, math.pi * (radius ** 2))

1
2
3
4

importmath

radius=2

print(‘Площадь окружности с радиусом 2 равна:’,math.pi*(radius**2))

Вывод

Shell

Площадь окружности с радиусом 2 равна: 12.566370614359172

1 Площадьокружностисрадиусом2равна12.566370614359172

Мы возвели радиус во вторую степень и умножили значение на число Пи, как и следовало сделать в соответствии с формулой πr2.

Анализ временных рядов

В pandas очень удобно анализировать временные ряды. В качестве показательного примера я буду использовать цену на акции корпорации Apple за 5 лет по дням. Файл с данными можно скачать тут.

Здесь мы формируем DataFrame с DatetimeIndex по колонке Date и сортируем новый индекс в правильном порядке для работы с выборками. Если колонка имеет формат даты и времени отличный от ISO8601, то для правильного перевода строки в нужный тип, можно использовать метод pandas.to_datetime.

Давайте теперь узнаем среднюю цену акции (mean) на закрытии (Close):

А если взять промежуток с февраля 2012 по февраль 2015 и посчитать среднее:

А что если нам нужно узнать среднюю цену закрытия по неделям?!

Resampling мощный инструмент при работе с временными рядами (time series), помогающий переформировать выборку так, как удобно вам. Метод resample первым аргументом принимает строку rule. Все доступные значения можно найти в .

Beginners

There’s a ton of information about NumPy out there. If you are new, we’d strongly recommend these:

Tutorials

  • NumPy Quickstart Tutorial
  • SciPy Lectures Besides covering NumPy, these lectures offer a broader introduction to the scientific Python ecosystem.
  • NumPy: the absolute basics for beginners
  • Machine Learning Plus — Introduction to ndarray
  • Edureka — Learn NumPy Arrays with Examples
  • Dataquest — NumPy Tutorial: Data Analysis with Python
  • NumPy tutorial by Nicolas Rougier
  • Stanford CS231 by Justin Johnson
  • NumPy User Guide

Books

  • Guide to NumPy by Travis E. Oliphant This is a free version 1 from 2006. For the latest copy (2015) see here.
  • From Python to NumPy by Nicolas P. Rougier
  • Elegant SciPy by Juan Nunez-Iglesias, Stefan van der Walt, and Harriet Dashnow

You may also want to check out the Goodreads list on the subject of “Python+SciPy.” Most books there are about the “SciPy ecosystem,” which has NumPy at its core.

Videos

Introduction to Numerical Computing with NumPy by Alex Chabot-Leclerc

Что такое библиотека NLP?

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

Для решения проблем NLP создано множество библиотек. Далее мы расскажем о 8 удивительных библиотеках обработки естественного языка Python, которые на протяжении многих лет помогали нам поставлять качественные проекты нашим клиентам.

Форматы данных

CSV

Для чтения и записи файла в формате CSV предназначен модуль .
Этот модуль предназначен для работы с различными диалектами: разделитель-запятая, разделитель — точка с запятой, разделитель — табуляция (Excel).
Простейший пример:

import csv
reader = csv.reader(open("some.csv", "rb"))
for row in reader
    print(row)

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

1 import csv
2 
3 with open("some.csv", "wb") as csv_fh
4     writer = csv.writer(csv_fh, delimiter=':', quoting=csv.QUOTE_MINIMAL, quotechar='`', lineterminator='|')
5     writer.writerows(,
7                       1999, "Chevy", "Venture `Extended Edition`", "", "4900.00"],
8                       1996, "Jeep",  "Grand Cherokee", "air, moon roof, loaded MUST SELL!", "4799.00" 
9                     ])

Работа с файловыми архивами

В стандартной библиотеке имеется поддержка для нескольких форматов архивов в виде следующих модулей: (bzip2), (gzip), (tar), (zip), а также привязки к библиотеке zlib в виде модуля .

Примеры для Python 2.7 и 3.2

В следующем примере в файле archive.zip будет заархивирован файл file.txt, содержащий текст «text in the file». Это ещё один пример использования менеджера контекста.

from zipfile import ZipFile
with ZipFile('archive.zip', 'w') as ziparc
     ziparc.writestr('file.txt', 'text in the file')

Чтение архива происходит аналогично. В следующем примере будут напечатаны имена файлов, содержащиеся в архиве:

from zipfile import ZipFile
with ZipFile('archive.zip', 'r') as ziparc
     for fileinfo in ziparc.filelist
         print(fileinfo.filename)

Конфигурационные файлы

Для чтения и записи конфигурационных файлов предназначен модуль . Этот модуль написан на чистом Python и, следовательно, платформонезависим. Синтаксис конфигурационных файлов похож на тот, что используется в INI-файлах Windows. Например:

# some comment
foodir=%(dir)s/whatever
dir=frob
version: 1.0

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

Read xls with Pandas

Pandas, a data analysis library, has native support for loading excel data (xls and xlsx).The method read_excel loads xls data into a Pandas dataframe:

read_excel(filename)

If you have a large excel file you may want to specify the sheet:

df = pd.read_excel(file, sheetname='Elected presidents')

Related courseData Analysis with Python Pandas

Read excel with PandasThe code below reads excel data into a Python dataset (the dataset can be saved below).

from pandas import DataFrame, read_csvimport matplotlib.pyplot as pltimport pandas as pd file = r'data/Presidents.xls'df = pd.read_excel(file)print(df)

The dataframe can be used, as shown in the example below:

from pandas import DataFrame, read_csvimport matplotlib.pyplot as pltimport pandas as pd file = r'data/Presidents.xls'df = pd.read_excel(file)df = df != 'n/a']print('Min: ', df.min())print('Max: ', df.max())print('Sum: ', df.sum())

DatasetFor purpose of demonstration, you can use the dataset from: depaul.edu.

A large dataset stored in XLS format

What does groupby do?

The idea of groupby() is pretty simple: create groups of categories and apply a function to them. Groupby has a process of splitting, applying and combining data.

  • splitting: the data is split into groups
  • applying: a function is applied to each group
  • combining: the results (data of different datasets is combined after applying groupby, resulting in a new data structure)

If you programmed databases (SQL) before, you may be familiar with a query like this:

SELECT city, count(name)FROM dfGROUP BY cityORDER BY city;

Pandas groupby does a similar thing. But then you’d type

print(df1.groupby()].count())

Моя история построения графиков в Python

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

Matplotlib

Но с построением графиков все происходило ровно наоборот. В начале практически каждый мой график, построенный в Matplotlib, напоминал мне какого-то преступника, сбежавшего из 80-х годов. Более того, чтобы построить такую мерзость, мне приходилось проводить целые часы на Stackoverflow. И даже не напоминайте мне про мультидиаграммы. Конечно, результаты выглядят впечатляюще, и ты чувствуешь себя потрясающе, создавая такие вещи программно. Например, строя 50 диаграмм для разных переменных за один раз. Но для этого нужно проделать кучу работы и запомнить множество бесполезных команд.

Seaborn

Знакомство с Seaborn принесло большое облегчение. С помощью этой библиотеки можно несколько абстрагироваться от тонкой настройки. И с точки зрения эстетики получающихся графиков это большой шаг вперед. Но все же Seaborn построена на базе Matplotlib. И зачастую, для нестандартных настроек, приходится переходить к коду Matplotlib.

Bokeh

На короткий момент времени я было подумал, что моим спасением будет Bokeh. Я наткнулся на эту библиотеку, когда работал над геопространственной визуализацией. Но я очень быстро обнаружил, что Bokeh, хоть и отличается от Matplotlib, но построена так же глупо и запутанно.

Plotly

Некоторое время назад, опять-таки работая над визуализацией геопространственных данных, я попробовал plot.ly (далее везде будем называть ее просто plotly). Тогда эта библиотека показалась мне еще более абсурдной, чем все предыдущие. Вам нужно было завести там аккаунт, войти в него на вашем ноутбуке, и только потом plotly начинает строить графики в онлайн режиме. А затем вам нужно еще загрузить эти графики. Я очень быстро отбросил эту библиотеку. Но недавно я наткнулся на YouTube-видео про библиотеки plotly express и plotly 4.0, в котором в том числе говорилось, что они избавились от этой онлайн-чепухи. Я начал играться с этой библиотекой и в результате появилась эта статья. Как говорится, лучше поздно, чем никогда.

Kepler.gl

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

Мои текущие предпочтения

В конце концов я остановился на библиотеке Pandas для построения графиков на скорую руку, и на Seaborn для презентаций и отчетов (когда визуализация очень важна).

Простая С библиотека, которую можно использовать из Python

Здесь мы рассмотрим все этапы создания и тестирования примеров кода. Небольшое предисловие о самой С библиотеке, перед тем, как мы перейдем к модулю ctypes.

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

C

int simple_function(void) {
static int counter = 0;
counter++;
return counter;
}

1
2
3
4
5

intsimple_function(void){

staticintcounter=;

counter++;

returncounter;

}

Функция simple_function просто возвращает подсчитанные числа. Каждый раз, когда она вызывается в счетчике increments, она выдает следующее значение:

C

void add_one_to_string(char *input) {
int ii = 0;
for (; ii < strlen(input); ii++) {
input++;
}
}

1
2
3
4
5
6

voidadd_one_to_string(char*input){

intii=;

for(;ii<strlen(input);ii++){

inputii++;

}

}

Функция add_one_to_string добавляет единицу к каждому символу в переданном массиве char. Мы используем его при рассмотрении неизменяемых строк Python и узнаем, как работать с ними при необходимости.

Python

char * alloc_C_string(void) {
char* phrase = strdup(«I was written in C»);
printf(«C just allocated %p(%ld): %s\n»,
phrase, (long int)phrase, phrase);
return phrase;
}

void free_C_string(char* ptr) {
printf(«About to free %p(%ld): %s\n»,
ptr, (long int)ptr, ptr);
free(ptr);
}

1
2
3
4
5
6
7
8
9
10
11
12

char*alloc_C_string(void){

char*phrase=strdup(«I was written in C»);

printf(«C just allocated %p(%ld):  %s\n»,

phrase,(longint)phrase,phrase);

returnphrase;

}
 

void free_C_string(char*ptr){

printf(«About to free %p(%ld):  %s\n»,

ptr,(longint)ptr,ptr);

free(ptr);

}

Python

clib1.so: clib1.o
gcc -shared -o libclib1.so clib1.o

clib1.o: clib1.c
gcc -c -Wall -Werror -fpic clib1.c

1
2
3
4
5

clib1.soclib1.o

gcc-shared-olibclib1.so clib1.o

clib1.oclib1.c

gcc-c-Wall-Werror-fpic clib1.c

Makefile в repo настроен на создание и запуска демо из scratch. Вам нужно только запустить следующую команду в вашей оболочке:

Python

$ make

1 $make

3.4. Суммы, разности, произведения

Произведение элементов массива по заданной оси.
Сумма элементов массива по заданной оси.
Произведение элементов массива по заданной оси в котором элементы NaN учитываются как 1.
Сумма элементов массива по заданной оси в котором элементы NaN учитываются как 0.
Возвращает накопление произведения элементов по заданной оси, т.е. массив в котором каждый элемент является произведением предшествующих ему элементов по заданной оси в исходном массиве.
Возвращает накопление суммы элементов по заданной оси, т.е. массив в котором каждый элемент является суммой предшествующих ему элементов по заданной оси в исходном массиве.
Возвращает накопление произведения элементов по заданной оси, т.е. массив в котором каждый элемент является произведением предшествующих ему элементов по заданной оси в исходном массиве. Элементы NaN в исходном массиве при произведении учитываются как 1.
Возвращает накопление суммы элементов по заданной оси, т.е. массив в котором каждый элемент является суммой предшествующих ему элементов по заданной оси в исходном массиве. Элементы NaN в исходном массиве при суммировании учитываются как 0.
Возвращает n-ю разность вдоль указанной оси.
Разность между последовательными элементами массива.
Дискретный градиент (конечные разности вдоль осей) массива .
Векторное произведение двух векторов.
Интегрирование массива вдоль указанной оси методом трапеций.

Функции, определенные для массивов¶

Алгебраические функции

Функця Описание
isreal(x) проверка на действительность (по элементам)
iscomplex(x) проверка на комплексность (по элементам)
isfinite(x) приверка элементов на числовое значение (не бесконечность и не «не число»).
isinf(x) проверка на бесконечность (по элементам)
isnan(x) проверка аргумента на «не число» (NaN), результат – логический массив
signbit(x) истина, если установлен бит знака (меньше нуля)
copysign(x1, x2) меняет знак x1 на знак x2 (по элементам
nextafter(x1, x2) следующее в направлении x2 число, представимое в виде с плавающей точкой (по элементам)
modf(x) дробная и целая часть числа
ldexp(x1, x2) вычисляет y = x1 * 2**x2.
frexp(x) разделение числа на нормированную часть и степень
absolute(x) Calculate the absolute value element-wise.
rint(x) округление элементов массива
trunc(x) отбрасывание дробной части (по элементам)
floor(x) целая часть
ceil(x) минимальное целое большее числа
sign(x) знаки элементов
conj(x) комплексное сопряжение (по элементам).
exp(x) экспонента (по элементам)
exp2(x) 2**элемент (по элементам)
log(x) натуральный логарифм (по элементам)
log2(x) двоичный логарифм (по элементам)
log10(x) десятичный логарифм (по элементам)
expm1(x) exp(x) — 1 (по элементам)
log1p(x) Return the natural logarithm of one plus the input array, element-wise.
sqrt(x) квадратный корень (для положительных) (по элементам)
square(x) квадрат (по элементам)
reciprocal(x) обратная величина (по элементам)
  • x – массив
  • out – место для результата

Тригонометрические функции

Все тригонометрические функции работают с радианами.

Функция Обратная функция Описание
sin(x) arcsin(x) синус (по элементам)
cos(x) arccos(x) косинус (по элементам)
tan(x) arctan(x) тангенс (по элементам)
  arctan2(x1, x2) арктангенс x1/x2 с правильным выбором четверти (по элементам)
hypot(x1, x2)   гипотенуза по двум катетам (по элементам)
sinh(x) arcsinh(x) гиперболический синус (по элементам)
cosh(x) arccosh(x) гиперболический косинус (по элементам)
tanh(x) arctanh(x) гиперболический тангенс (по элементам)
deg2rad(x) rad2deg(x) преобразование градусов в радианы (по элементам)
  • x, x1, x2 – массивы
  • out – место для результата

Функции двух аргументов (бинарные функции)

Для правильной работы с логическими бинарными функциям (AND, OR) необходимо явно их записывать через функции
модуля «NumPy», а не полагаться на встроенные функции питона.

Функция Описание
add(x1, x2) сумма (по элементам)
subtract(x1, x2) разность (по элементам)
multiply(x1, x2) произведение (по элементам)
divide(x1, x2) деление (по элементам)
logaddexp(x1, x2) логарифм суммы экспонент (по элементам)
logaddexp2(x1, x2) логарифм по основанию 2 от суммы экспонент (по элементам)
true_divide(x1, x2) истинное деление (с преобразованием типов)
floor_divide(x1, x2) деление без преобразования типов (целочисленное)
negative(x) обратные элементы (по элементам)
power(x1, x2) элементы первого массива в степени элементов из второго массива (по элементам)
remainder(x1, x2), mod(x1, x2), fmod(x1, x2) остаток от деления (по элементам).
greater(x1, x2) истина, если (x1 > x2) (по элементам).
greater_equal(x1, x2) истина, если (x1 > =x2) (по элементам).
less(x1, x2) истина, если (x1 < x2) (по элементам).
less_equal(x1, x2) истина, если (x1 =< x2) (по элементам).
not_equal(x1, x2) истина, если (x1 != x2) (по элементам).
equal(x1, x2) истина, если (x1 == x2) (по элементам).
logical_and(x1, x2) истина, если (x1 AND x2) (по элементам).
logical_or(x1, x2) истина, если (x1 OR x2) (по элементам).
logical_xor(x1, x2) истина, если (x1 XOR x2) (по элементам).
logical_not(x) истина, если (NOT x1) (по элементам).
maximum(x1, x2) максимум из элементов двух массивов(по элементам).
  • x1, x2 – массивы
  • out – место для результата

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

  • accumulate() Аккумулирование результата.
  • outer() Внешнее «произведение».
  • reduce() Сокращение.
  • reduceat() Сокращение в заданных точках.

Методы accumulate(), reduce() и reduceat() принимают необязательный аргумент — номер размерности, используемой
для соответствующего действия. По умолчанию применяется нулевая размерность.

Numba

Смоделируем типичную ситуацию — нужно добавить новую колонку, применив какую-то функцию к уже существующей с помощью метода .

Как видите, вам не нужно ничего менять в своем коде. Достаточно всего лишь добавить декоратор. А теперь посмотрите на время работы.

Оптимизированная версия быстрее в ~70 раз! Впрочем, в абсолютных величинах, версия от Pandas отстала совсем несильно, поэтому возьмем более сложный кейс. Определим новые функции:

Построим график зависимости времени вычислений от количества строк в датафрейме:

Итоги

  • Возможно добиться ускорения в тысячи раз
  • Иногда нужно переписать код, чтобы использовать Numba
  • Можно использовать далеко не везде, в основном для оптимизации математических операций

10.1. Интерфейс операционной системы

Модуль os (docs.python.org/3/library/os.html#module-os) предоставляет множество функций для взаимодействия с операционной системой:

Обязательно используйте стиль вместо . Это сохранит os.open() (docs.python.org/3/library/os.html#os.open) от перекрытия встроенной функции , которая совсем по-другому работает.

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

Для ежедневных задач по управлению файлами и каталогами модуль shutil (docs.python.org/3/library/shutil.html#module-shutil) предоставляет интерфейс более высокого уровня, который проще в использовании:

Агрегирование в NumPy

Дополнительным преимуществом NumPy является наличие в нем функций агрегирования:

Функциями , и дело не ограничивается.

К примеру:

  • позволяет получить среднее арифметическое;
  • выдает результат умножения всех элементов;
  • нужно для среднеквадратического отклонения.

Это лишь небольшая часть довольно обширного списка функций агрегирования в NumPy.

Использование нескольких размерностей NumPy

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector