Сообщения

Показаны сообщения с ярлыком "Python"

Data analysis. NumPy. Часть 2

Изображение
Это вторая статья в серии, где мы знакомимся с базовый набор инструментов для первичного анализа данных с помощью Python. В этой части рассмотрим транслирование(broadcasting), сравнения массивов и маски, "прихотливая" индексация (fancy indexing), сортировки и структурированные данные. Часть 1. Введение в NumPy Часть 2. Подробней о NumPy Часть 3. Первичный анализ. Pandas Часть 4. Визуализация. Matplotlib и Seaborn Часть 5. Немного machine learning с помощью scikit-learn Часть 6. Больше данных. Обучение с Vowpal Wabbit В статье будет описания и различного рода заметки, а примеры с комментариями написаны в  jupyter notebook Транслирование(Broadcasting) (notebook) Еще один способ применения векторизации - использовать возможности транслирования(broadcasting). Это набор правил по применению бинарных универсальных функций к массивам различного размера. Для массивов одного размера бинарные операции выполняются поэлементно. Транслирова...

Data analysis. NumPy. Часть 1

Изображение
Эта статья первая в серии про базовый набор инструментов для первичного анализа данных с помощью Python. В первую очередь рассмотрим базовую библиотеку для работы с многомерными массивами NumPy . Pandas позволяет эффективно работать с неоднородными данными. Удобно загружать, обрабатывать и анализировать табличные данные  с помощью SQL-подобных запросов. С помощью Matplotlib, Seaborn, Plotly реализуется отличная визуализация. Часть 1. Введение в NumPy Часть 2. Подробней о NumPy Часть 3. Первичный анализ. Pandas Часть 4. Визуализация. Matplotlib и Seaborn Часть 5. Немного machine learning с помощью scikit-learn Часть 6. Больше данных. Обучение с Vowpal Wabbit В статье будет описания и различного рода заметки, а примеры с комментариями написаны в jupyter notebook NumPy — это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций дл...

Итерируемый объект, итератор и генератор

У большинства популярных сейчас языков программирования, на уровне языка или стандартной библиотеки, реализованы многие виды коллекций и различные инструменты к ним. Видимо, поэтому, в среднем понимания работы структур данных, как реализованы итераторы и генераторы к ним, сильно страдает. На мой взгляд, самое главное - это фундаментальные знания, и тогда с изучением новых языков/фреймворков и прочими модными тенденциями, проблем не будет. Так как почти всегда, - это или забытое старое или несколько измененное. Что то координатно новое бывает крайне редко. Вообщем, решил написать базовые вещи про итераторы и генераторы на хабре, с примерами на python:  Итерируемый объект, итератор и генератор

Мемоизация и каррирование

Мемоизация (memoization) - это способ оптимизации при котором сохраняется результат выполнения функции и этот результат используется при следующем вызове. Берем рекурсивную реализацию нахождения числа Фибоначчи и смотрим время выполнения @clock def fib (n): if n < 2 : return n return fib(n - 2 ) + fib(n - 1 ) print ( 'fib(20) =' , fib( 20 )) [0.35938287s] fib(20) -> 6765 Время работы будет очень быстро расти при увеличении числа которое нужно найти, плюс возможна ошибка RecursionError. Для оптимизации подобного алгоритма хорошо подходит метод мемоизации, то есть сохранение и повторное использования ранние вычисленных значений. _fib_cache = { 1 : 1 , 2 : 1 } @clock def mem_fib (n): result = _fib_cache . get(n) if result is None : result = mem_fib(n - 2 ) + mem_fib(n - 1 ) _fib_cache[n] = result return result print ( 'mem_fib(200) =' , mem_fib( 200 )) [0.03125453s] mem_fib(200) -...

Декораторы функций в Python

Для понимания декораторов нужно помнить что, функция в Python это объект и функция может быть определена в другой функции. Так же нужно понимания  Области видимости и замыкания в Python . Декоратор функций в общем виде это функция которая принимает функцию и возвращает функцию. Так же возможна реализация через класс и реализацию метода __call__ Главное свойство декораторов -то, что они выполняются сразу после определения декорируемой функции. registry = [] def register (func): print ( 'running register(%s)' % func) registry . append(func) return func @register def f1 (): print ( 'running f1()' ) def f2 (): print ( 'running f2()' ) f2 = register(f2) # эквивалентно @register def f3 (): print ( 'running f3()' ) def main (): print ( 'running main()' ) print ( 'registry -> ' , registry) f1() f2() f3() if __name__ == '__main__' : main() Функция regi...

Область видимости и замыкания в Python

Прежде чем переменной можно будет воспользоваться, ей необходимо присвоить значения. Область видимости переменной определяется местом, где ей было присвоено значение. Правило LEGB L ocal локальная область функции E nclosing область внешней функции G lobal глобальное пространство B uilt-in встроенном (модуль builtis) Если не указаны инструкции, то поиск переменных по пространствам имен происходит с низу верх local->enclosing->global->built-in x = 10 print ( 'Global x =' , x) def fun_enclosing (): print ( 'Enclosing x =' , x) def fun_local (): print ( 'Local x =' , x) fun_local() fun_enclosing() Global x = 10 Enclosing x = 10 Local x = 10 Любое присвоение переменной в функции создает новую локальную переменную x = 10 print ( 'Global x =' , x) def fun_enclosing (): x = 20 # создания новой переменной в пространстве имен fun_enclosing print ( 'Enclosing x =' , x) de...

UnicodeDecodeError при pip install в rus Windows

Если при установки пакета возникает UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 3: invalid continuation byte Находим файл lib\site-packages\pip\compat\__init__.py Ориентировочно на 71 строке находим функцию console_to_str(s) В консоли вводим команду chcp . К примеру она показала  866 В функции console_to_str(s) меняем return s.decode(' utf_8 ') на return s.decode(' 866 ')

Кратко про SQLAlchemy Core

SQLAlchemy Engine это слой абстракции над DB-API. Он содержит DB-API драйвера для разных СУБД, их можно указать в строке подключения. Engine.execute() и Engine.connect() два основных метода. Так же у него есть свой пул соединений. create_engine() - фабричная функция для создания Engine. Metadata это логическая структура базы данных. Она содержит список таблиц(Table), их отношения и другие объекты. Table абстракция таблицы. Содержит колонки(Column) и другие свойства. Таким образом можно иметь одновременно несколько engine с разными драйверами и коннектами, разные metadata, и совместно их использовать. примеры на github from sqlalchemy import MetaData, Table , Column , Integer , Numeric , String, DateTime from datetime import datetime metadata = MetaData() users = Table ( 'users' , metadata, Column ( 'user_id' , Integer (), primary_key = True ), Column ( 'username' , String( 15 ), nullable = False , unique = True ), ...