Pull to refresh
7
Karma
0
Rating
Alexander Butakov @AlexanderButakov

User

  • Followers 5
  • Following
  • Posts
  • Comments

Внедрение зависимостей the Python way

Python *Programming *
Зачем нужно внедрение зависимостей? Оно уменьшает связанность компонентов в приложение и упрощает тестирование. У некоторых разработчиков есть мнение, что внедрение зависимостей нужно только в больших проектах и что оно сильно усложняет программы. Думаю, это исторически сложилось из-за популярный фрейморков вроде Спринга или Джуса в Джаве. Особенно из-за Спринга, который является невероятным комбайном.

Python-inject — это небольшая библиотека для внедрения зависимостей в Питоне. Третья версия написана в unix-стиле, т.е. она прекрасно выполняет только одну функцию и не пытается быть всем. В отличие от уже упомянутых Спринга и Джуса Инжект не ворует конструкторы классов у разработчиков, не навязывает разработчикам необходимость писать приложение в каком-то определенном стиле и не пытается управлять всем графом объектов приложения.

Инжект практически не требует конфигурации (об этом подробнее подкатом) и очень прост в использовании.
Например в тестах
# Возможные зависимости
class Db(object): pass
class Mailer(object): pass

# Внедряем зависимости в класс пользователя
class User(object):
    db = inject.attr(Db)
    mailer = inject.attr(Mailer)
    
    def __init__(self, name):
        self.name = name
    
    def register(self):
        self.db.save(self)
        self.mailer.send_welcome_email(self.name)


 # Используем в тестах inmemory базу данных и моки.
class TestUser(unittest.TestCase):
    def setUp(self):
        inject.clear_and_configure(lambda binder: binder \
            .bind(Db, InMemoryDb()) \
            .bind(Mailer, Mock()))
        
        self.mailer = inject.instance(Mailer)
    
    def test_register__should_send_welcome_email(self):
        # Пример теста.
        user = User('John Doe')
        
        # Регистрируем нового пользователя.
        user.register()
        
        # Должно отправиться письмо с приветствием.
        self.mailer.send_welcome_email.assert_called_with('John Doe')


Читать дальше →
Total votes 31: ↑27 and ↓4 +23
Views 31K
Comments 38

Как это сделано: парсинг статей

Mail.ru Group corporate blog Search engines *


Для меня всегда было некоей магией то, как Getpocket, Readability и Вконтакте парсят ссылки на страницы и предлагают готовые статьи к просмотру без рекламы, сайдбаров и меню. При этом они практически никогда не ошибаются. А недавно подобная задача назрела и в нашем проекте, и я решил копнуть поглубже. Сразу скажу, что это «белый» парсинг, вебмастеры сами добровольно пользуются нашим сервисом.
Читать дальше →
Total votes 123: ↑112 and ↓11 +101
Views 79K
Comments 36

Программирование на Python — курс для желающих узнать о нём больше или изучить ещё один язык программирования

Образовательные проекты JetBrains corporate blog Python *Programming *
Tutorial
"The joy of coding Python should be in seeing short, concise, readable classes that express a lot of action in a small amount of clear code — not in reams of trivial code that bores the reader to death."
Guido van Rossum

Python — язык программирования, на котором приятно писать и который приятно читать. Мы предлагаем тринадцать лекций осеннего курса CS центра, чтобы посмотреть вглубь языка и попробовать понять, как пользоваться всеми его возможностями. Лекции читает Сергей Лебедев, разработчик в компании JetBrains и преподаватель в Computer Science Center.

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

Фотография сделана осенью 2014 года в Страсбурге, за две недели до начала первого прочтения этого курса.
Открыть лекции курса
Total votes 45: ↑42 and ↓3 +39
Views 120K
Comments 32

Чтение больших объемов данных в Python/Postgresql

Python *PostgreSQL *
Sandbox
Стек рассматриваемых технологий: Postgresql 9.3, Python 2.7 с установленным модулем «psycopg2».

Проблема


Как часто в вашей практике приходилось сталкиваться с задачей обработки таблиц большого объема (более 10 млн. записей)? Думаю вы согласитесь, что данная задача является довольно ресурсоемкой как в плане времени обработки, так и задействованных ресурсов системы. Сегодня я постараюсь показать альтернативный способ решения задачи.

Предложение:


В СУБД Postgresql есть прекрасный оператор для работы с большими объемами информации, а именно «COPY». Применение данного оператора позволяет нам читать и записывать огромные объемы информации в таблицу. В данной статье мы будем рассматривать режим чтения.

Согласно документации оператора «COPY» нам доступны несколько режимов чтения в файл либо в поток STDOUT, а также различные форматы, в том числе и «csv». Как раз его мы и постараемся использовать с максимальной пользой.
Читать дальше →
Total votes 21: ↑19 and ↓2 +17
Views 21K
Comments 15

Внутреннее устройство Python list

Python *Programming *
Sandbox
Предлагаю вашему вниманию статью, основанную на публикации Laurent Luce о реализации работы со списками в CPython. Она может быть полезна начинающим программистам на Python, либо готовящимся к собеседованию. Функции C показаны в сокращенном варианте и с моими комментариями. Полный текст функций можно найти в исходниках CPython 2.7.

Эта статья описывает реализацию объекта списка в CPython, наиболее популярной реализации Python. Списки в Python — это мощный инструмент, и интересно узнать, как они устроены внутри. Взгляните на простой скрипт, который добавляет несколько целых значений в список и выводит их:

>>> l = []
>>> l.append(1)
>>> l.append(2)
>>> l.append(3)
>>> l
[1, 2, 3]
>>> for e in l:
...   print e
...
1
2
3

Как вы можете видеть, список является итерируемым объектом.

C-структура объекта списка

Объект списка в CPython представлен нижеследующей структурой в C. ob_item — это список указателей на элементы списка, allocated — количество выделенной памяти.

typedef struct {
    PyObject_VAR_HEAD
    PyObject **ob_item;
    Py_ssize_t allocated;
} PyListObject;
Читать дальше →
Total votes 21: ↑17 and ↓4 +13
Views 32K
Comments 11

Введение в машинное обучение с помощью Python и Scikit-Learn

MLClass corporate blog Python *Data Mining *Big Data *
Sandbox
Привет, хабр!



Меня зовут Александр, я занимаюсь машинным обучением и анализом веб-графов (в основном — теоретическим), а также разработкой Big Data продуктов в одном из операторов Большой Тройки. Это мой первый пост — прошу, не судите строго!)

В последнее время ко мне все чаще стали обращаться люди, которые хотят научиться разрабатывать эффективные алгоритмы и участвовать в соревнованиях по машинному обучению с вопросом: «С чего начать?». Некоторое время назад я руководил разработкой инструментов Big Data для анализа медиа и социальных сетей в одном из учреждений Правительства РФ, и у меня остался некоторый материал, по которому обучалась моя команда и которым можно поделиться. Предполагается, что у читателя есть хорошее знание математики и машинного обучения (в команде были в основном выпускники МФТИ и студенты Школы Анализа Данных).
Читать дальше →
Total votes 53: ↑50 and ↓3 +47
Views 311K
Comments 13

Обзор наиболее интересных материалов по анализу данных и машинному обучению №33 (26 января — 1 февраля 2015)

Data Mining *Big Data *

Представляю вашему вниманию очередной выпуск обзора наиболее интересных материалов, посвященных теме анализа данных и машинного обучения.
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Views 12K
Comments 7

Тестирование. Начало

Python *

Привет. В этой серии постов я попробую рассказать про тестирование кода на питоне, в частности проектов django. Мы рассмотрим модульное тестирование (юнит-тесты), статический анализ кода и некоторые подводные камни тестирования веб-сайтов.

Вводную часть о пользе тестирования опустим — код, покрытый тестами, становится мягким и шелковистым, про это только ленивый еще не читал / писал.
Читать дальше →
Total votes 130: ↑119 and ↓11 +108
Views 111K
Comments 15

Как устроен мир семантической микроразметки

Яндекс corporate blog Microformats *Semantics *
Я работаю в команде семантического веба в Яндексе. Мы занимаемся тем, что создаем продукты на основе семантической разметки, делаем свои расширения и участвуем в развитии стандарта Schema.org.

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



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

Микроразметка состоит из словаря и синтаксиса.
Что и как, подробно...
Total votes 109: ↑100 and ↓9 +91
Views 151K
Comments 69

В чем разница между наукой о данных, анализом данных, большими данными, аналитикой, дата майнингом и машинным обучением

.io corporate blog System Analysis and Design *Data Mining *Big Data *
В последнее время слово big data звучит отовсюду и в некотором роде это понятие стало мейнстримом. С большими данными тесно связаны такие термины как наука о данных (data science), анализ данных (data analysis), аналитика данных (data analytics), сбор данных (data mining) и машинное обучение (machine learning).

Почему все стали так помешаны на больших данных и что значат все эти слова?

image
Читать дальше →
Total votes 29: ↑20 and ↓9 +11
Views 36K
Comments 8

ACM SIGIR 2015: ключевые тренды развития поисковых технологий

Textocat corporate blog Search engines *Semantics *Data Mining *Machine learning *



С 9 по 13 августа в г. Сантьяго (Чили) прошла 38я международная научная конференция по информационному поиску ACM SIGIR. Представляем вашему вниманию основные события данного мероприятия и ключевые тренды развития области информационного поиска как с точки зрения академической среды, так и индустрии.
Читать дальше →
Total votes 11: ↑9 and ↓2 +7
Views 5K
Comments 6

Подборка: Более 70 источников по машинному обучению для начинающих

ITMO University corporate blog Website development *Python *Professional literature Machine learning *


Индикатор кулачкового аналогового компьютера / Wiki

В нашем блоге мы уже рассказывали о разработке системы квантовой связи и о том, как из простых студентов готовят продвинутых программистов. Сегодня мы решили вернуться к теме машинного обучения и привести адаптированную (источник) подборку полезных материалов.
Читать дальше →
Total votes 35: ↑31 and ↓4 +27
Views 99K
Comments 16

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

Data Mining *Big Data *Mathematics *Machine learning *
Сегодня, когда во всех деревнях и сёлах идёт нейрореволюция, мы всё больше убеждаемся, что нейросети — это чистая магия и манна-небесная. Их стали использовать везде и всюду, и даже встроили в Excel. Неявно, при виде сложной задачи многим представляется следующая картина:



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

Представьте, вы работаете аналитиком в какой-нибудь компании, которой важен её облик на Хабре (условно назовём её Почта.com). И тут к вам приходит девушка из PR-отдела и говорит: "Мы с менеджерами определили в качестве важного KPI нашего бренда Хабра-рейтинг компании. У нас есть бюджет и мы хотим понять, как его распределить, чтобы максимизировать Хабра-индекс. Нам нужно, чтобы ты определил ключевые факторы, которые на него влияют и вывел наиболее разумную стратегию. Попробуй там какие-нибудь нейросети".

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

  • Q1: Какие ключевые факторы влияют на Хабра-индекс компании?
  • Q2: Где найти данные?
  • Q3: Какой будет оптимальная стратегия согласно восстановленной эмпирической зависимости?

Структура статьи

  1. Определяем потенциальные факторы
  2. Сбор данных
  3. Эффект кармы и рейтинга подписчиков и работников
  4. Финальная формула
  5. Анализ применимости нейросетей
  6. Анализ оптимальной стратегии
Узнать, чем же это всё закончится
Total votes 27: ↑26 and ↓1 +25
Views 24K
Comments 30

Big Data от А до Я. Часть 1: Принципы работы с большими данными, парадигма MapReduce

Big Data *
Tutorial

Привет, Хабр! Этой статьёй я открываю цикл материалов, посвящённых работе с большими данными. Зачем? Хочется сохранить накопленный опыт, свой и команды, так скажем, в энциклопедическом формате – наверняка кому-то он будет полезен.



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



Начинать надо от простого к сложному, поэтому первая статья – о принципах работы с большими данными и парадигме MapReduce.


Читать дальше →
Total votes 58: ↑51 and ↓7 +44
Views 432K
Comments 35

Введение в анализ социальных сетей на примере VK API

Programming *Data Mining *VK API *

Данные социальных сетей — неисчерпаемый источник исследовательских и бизнес-возможностей. На примере Вконтакте API и языка Python мы сегодня разберем пару практических примеров, которы помогут узнать:
  • азы работы с библиотекой Python — networkx;
  • как обращаться к Вконтакте API из языка Python посредством стандартных библиотек, в частности, получать список друзей и членов групп;
  • некоторые возможности программы Gephi.

Disclaimer: данная статья не претендует на какую-либо новизну, а лишь преследует цель помочь интересующимся собраться с силами и начать претворять свои идеи в жизнь.

(волосяной шар для привлечения внимания)
Читать дальше →
Total votes 29: ↑26 and ↓3 +23
Views 44K
Comments 9

Сравниваем цены в книжных интернет магазинах c помощью python, pandas и matplotlib

Python *Data Mining *
Сегодня мы попробуем найти самый дешевый и самый дорогой интернет магазин книг.
Сравнивать будем бумажные книги, которые есть в наличии. В разных магазинах очень разное количество книг. Где-то менее 1000, а где-то более 200 000 книг.



Кстати, гистограмма настоящая. Как она построена и другие интересные закономерности под катом.
Читать дальше
Total votes 26: ↑24 and ↓2 +22
Views 29K
Comments 28

Введение в анализ сложности алгоритмов (часть 1)

Algorithms *
Translation
Tutorial
От переводчика: данный текст даётся с незначительными сокращениями по причине местами излишней «разжёванности» материала. Автор абсолютно справедливо предупреждает, что отдельные темы покажутся чересчур простыми или общеизвестными. Тем не менее, лично мне этот текст помог упорядочить имеющиеся знания по анализу сложности алгоритмов. Надеюсь, что он будет полезен и кому-то ещё.
Из-за большого объёма оригинальной статьи я разбила её на части, которых в общей сложности будет четыре.
Я (как всегда) буду крайне признательна за любые замечания в личку по улучшению качества перевода.


Введение


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

Тем не менее, знание теории тоже имеет свои преимущества и может оказаться весьма полезным. В этой статье, предназначенной для программистов, которые являются хорошими практиками, но имеют слабое представление о теории, я представлю один из наиболее прагматичных программистских инструментов: нотацию «большое О» и анализ сложности алгоритмов. Как человек, который работал как в области академической науки, так и над созданием коммерческого ПО, я считаю эти инструменты по-настоящему полезными на практике. Надеюсь, что после прочтения этой статьи вы сможете применить их к собственному коду, чтобы сделать его ещё лучше. Также этот пост принесёт с собой понимание таких общих терминов, используемых теоретиками информатики, как «большое О», «асимптотическое поведение», «анализ наиболее неблагоприятного случая» и т.п.
Читать дальше →
Total votes 106: ↑98 and ↓8 +90
Views 322K
Comments 27

Основы статистики: просто о сложных формулах

Stepik.org corporate blog Data Mining *R *
Sandbox

Статистика вокруг нас


Статистика и анализ данных пронизывают практически любую современную область знаний. Все сложнее становится провести границу между современной биологией, математикой и информатикой. Экономические исследования и регрессионный анализ уже практически неотделимы друг от друга. Один из известных методов проверки распределения на нормальность — критерий Колмогорова-Смирнова. А вы знали, что именно Колмогоров внес огромный вклад в развитие математической лингвистики?

Еще будучи студентом психологического факультета СПбГУ, я заинтересовался когнитивной психологией. Кстати, Иммануил Кант не считал психологию наукой, так как не видел возможности применять в ней математические методы. Мои текущие исследования посвящены моделированию психических процессов, и я надеюсь, что такие направления в современной когнитивной психологии, как вычислительные и коннективисткие модели, смягчили бы его отношение!
Читать дальше →
Total votes 51: ↑48 and ↓3 +45
Views 211K
Comments 14

Data Mining: Первичная обработка данных при помощи СУБД. Часть 1

SQL *Data Mining *Big Data *
Tutorial
О чем статья

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

С этой точки зрения, очень интересным будет ресурс Kaggle[1], который превращает исследование данных в спорт. Там проводят соревнования по анализу данных. Некоторые соревнования — с обучающими материалами и предназначены для начинающих. Вот именно обучению анализу данных, на примере решения одной из обучающих задач, и будет посвящён цикл статей. Первая статья будет о подготовке данных и использованию СУБД для этой цели. Собственно, о том, как и с чего начать. Предполагается что читатель понимает SQL.
Читать дальше →
Total votes 36: ↑33 and ↓3 +30
Views 56K
Comments 17

Простой метод для извлечения соотношений и фактов из текста

MeanoTek corporate blog Website development *Semantics *Machine learning *
Ранее мы писали об анализе отзывов о ресторанах, с целью извлечения упоминаний разных аспектов (еды, обстановки, и подобного). Недавно в комментариях возник вопрос о извлечении из текста фактической информации, т.е. можно ли, например, из отзывов об автомобилях извлечь факты, например «быстро ломается коробка передач» => ломается(коробка передач, быстро), чтобы с этими фактами можно было потом работать. В этой статье мы опишем один из подходов к решению такой проблемы.



Метод, о котором мы расскажем, опирается на ряд упрощений, он не самый точный, но зато легок в реализации и позволяет быстро создать прототип приложения, в котором он должен использоваться. В ряде случаев его будет и вполне достаточно, а для других можно ввести усовершенствования, не отступая от основного принципа.
Читать дальше →
Total votes 17: ↑14 and ↓3 +11
Views 15K
Comments 7

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity