Author: eFusion

18
Янв
2020

Мнение разработчика: «Стоп! Kotlin — это не только Android»

IT-рекрутеры и новички в разработке ассоциируют Kotlin почти только с мобильной платформой. Мы собрали несколько мнений, противоречащих сложившейся репутации языка.

Берлинский разработчик Жан-Мишель Файард …

16
Янв
2020

Как повысить продуктивность при анализе данных? 25 неочевидных инструментов

Список бесплатных инструментов и библиотек для аналитиков данных. Заслуживающие внимания пакеты, программы и ресурсы, о которых не так часто упоминают, как о NumPy, Pandas или Jupyter.

Ниже представлен сжатый обзор 25 инструментов для самых разнообразных приложений науки о данных. Быстрый скрапинг веб-страниц и визуализация, анализ поведения клиентов и безопасное хранение ключей, работа в команде и развертывание моделей на облачных GPU.

В комментариях к публикации предлагаем поделиться своими любимыми библиотеками и инструментами.

Обзор DS инструментов:

  • Airtable: электронная таблица с мощью базы данных, альтернатива Google Sheets или Microsoft Excel. Отлично работает с Pandas, благодаря Python API. То что нужно для демонстрации результатов.
  • Orange: open source платформа, заточенная под машинное обучение и визуализацию данных, для которой не нужно уметь кодить. Качественная альтернатива Tableau или Power BI.
  • MarkDown: приложение для заметок на Node.js, полноценно работающее в офлайне с возможностью размещения на своём сервере.
  • Deepnote: приложение на базе Jupyter Notebook, созданное для совместной работы в реальном времени.

  • Dash by Plotly: JavaScript инструмент визуализации данных с открытым исходным кодом. Запустите готовую модель на Python или R, а Dash позаботится об остальном. Идеально подходит для создания мелких веб-приложений для показа клиенту.
  • KeeWeb: средство для безопасного хранения API-ключей и паролей.
  • MLxtend (сокр. от Machine Learning Extensions) – библиотека Python инструментов для повседневных задач обработки данных. Создатель – автор книги «Машинное обучение на Python» Себастьян Рашка.
            import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import itertools
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from mlxtend.classifier import EnsembleVoteClassifier
from mlxtend.data import iris_data
from mlxtend.plotting import plot_decision_regions

# Initializing Classifiers
clf1 = LogisticRegression(random_state=0)
clf2 = RandomForestClassifier(random_state=0)
clf3 = SVC(random_state=0, probability=True)
eclf = EnsembleVoteClassifier(clfs=[clf1, clf2, clf3],
                              weights=[2, 1, 1], voting='soft')

# Loading some example data
X, y = iris_data()
X = X[:,[0, 2]]

# Plotting Decision Regions

gs = gridspec.GridSpec(2, 2)
fig = plt.figure(figsize=(10, 8))

labels = ['Logistic Regression', 'Random Forest', 
          'RBF kernel SVM', 'Ensemble']

for clf, lab, grd in zip([clf1, clf2, clf3, eclf],
                         labels,
                         itertools.product([0, 1],
                         repeat=2)):
    clf.fit(X, y)
    ax = plt.subplot(gs[grd[0], grd[1]])
    fig = plot_decision_regions(X=X, y=y,
                                clf=clf, legend=2)
    plt.title(lab)

plt.show() 
        

  • Lifetimes: библиотека для анализа поведения клиентов, прогнозирования прибыли и оттока
  • GitLab: альтернативное GitHub хранилище репозиториев с возможностью скрывать групповые репозитории. Удобно для закрытой командной работы и группового участия в ML-соревнованиях.
  • Draw.io: создания диаграмм для планирования проекта.
  • Spider: простой скраппер для веб-страниц в виде расширения Chrome. Можно скачивать страницы в CSV/JSON формате.
  • Simple Scraper: превратите любой сайт в API.
  • Airbnb Knowledge repo: ресурс для обмена знаниями между специалистами в области обработки данных и других технических профессий. Был создан для решения проблемы распространения знаний в рамках растущей команды.

  • Kyso: сервис помогает создать привлекательное и структурированное портфолио аналитика данных. Вы сможете просматривать чужие портфолио, увидите, как другие представляют себя и свои данные. Бесплатный период 14 дней.
  • LabelImg: графический инструмент для разметки объектов на картинках, добавление подписей и тегов изображений.

  • Reveal.js: фреймворк для создания HTML-презентаций. Многие аналитики используют его на своих выступлениях.
  • PythonAnywhere: простой способ развернуть онлайн лёгкий ML-проект на Python и сопутствующих библиотеках, если пока требуется лишь проверить гипотезу. В случае успеха легко перенести на AWS (руководство).
  • Sheety: превратите Google Sheet в API и моделируйте данные в реальном времени.
  • Jupyterthemes: устали от текущей темы Jupyter Notebook? Есть много других.
  • Light GBM: одна из популярных библиотек для односторонней выборки на основе градиента. В последние годы приобрела большую популярность, особенно на Kaggle.

  • Machine Learning A-Z: Practice Datasets and Codes: большое собрание данных и кода на Python и R, охватывающее популярные алгоритмы машинного обучения.
  • Gradient by Paperspace: запускайте блокноты Jupyter бесплатно на облачной машине, оснащённой графическими процессорами.
  • Glueviz: визуализируйте многомерные наборы данных. Бесплатный инструмент на основе Python (поставляется с Anaconda). Отлично подходит для поиска связей между наборами данных.

  • Hot dog or not hot dog?: мануал, не требующий знаний AI, машинного обучения и даже программирования. Руководство о том, как с IBM Watson написать программу для проверки, является ли объект хот-догом 🌭 или нет. Самый важный ресурс в подборке 😉
  • FloydHub Workspaces: облачная среда разработки для глубокого обучения. Можно запускать блокноты Jupyter, скрипты Python, использовать терминал и многое другое.

О чём-то не упомянули? Напишите, мы дополним статью вашими ссылками

08
Янв
2020

11 типов современных баз данных: краткие описания, схемы и примеры БД

Любые данные где-то хранятся. Будь это интернет вещей или пароли в *nix. Показываем схемы основных типов баз данных, чтобы наглядно представить различия между ними.

Типы баз данных, называемых также моделям…

30
Дек
2019

5 полезных фич Python, о которых знают не все

Python – один из самых популярных и мощных ЯП, скрывающих массу полезностей и фич. Пять из них мы осветили в статье.

Даже если ты
программист, перешедший с других языков, таких как C, в программирование
на Python с более высоким уровнем абстракции – не стоит
пугаться и отступать перед “не таким” кодом. Погнали!

List comprehensions –
компактный код

Многие назвали бы lambda,
map и filter “трюками” Python, которым должен научиться каждый новичок.
Принято считать, что эти функции большую часть времени, не особенно полезны,
поскольку им не хватает гибкости.

Лямбда – это метод
составления функции в одну строку для одноразового использования. Если он
вызывается несколько раз, страдает производительность. С другой стороны, map
применяет функцию ко всем элементам списка, в то время как filter получает
подмножество элементов в наборе, удовлетворяющем пользовательскому условию.

            add_func = lambda z: z ** 2
is_odd = lambda z: z%2 == 1
multiply = lambda x,y: x*y

aList = list(range(10))
print(aList)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
        

List comprehensions – это
лаконичный метод для создания списков из других списков с гибкими выражениями и
условиями. Он выделяется квадратными скобками, в которых определено выражение
или функция. Когда элемент удовлетворяет условию, только в этом
случае действие применяется к каждому элементу списка. Метод также может обрабатывать
вложенные списки продуктивнее, чем использование мапы и фильтра.

            # Syntax of list comprehension
[ expression(x) for x in aList if optional_condition(x) ] 
        
            print(list(map(add_func, aList)))
print([x ** 2 for x in aList])
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

print(list(filter(is_odd, aList)))
print([x for x in aList if x%2 == 1])
# [1, 3, 5, 7, 9]
# [1, 3, 5, 7, 9] 
        

Манипуляции со списками
– циклические списки

Python поддерживает
отрицательную индексацию, где aList[-1] == aList[len(aList)-1]. Исходя из этого,
можно получить второй последний элемент в списке – aList[-2] и так далее.

Также можно нарезать
списки с помощью записи aList[start:end: step], где начальный элемент указан, а
конечный – нет. Поэтому вызов aList[2:5] вернет [2, 3, 4], а вызвав aList[::
-1]
, ты сможешь переставить элементы в списке в обратном порядке – очень элегантная техника.


А еще списки могут
быть распакованы в отдельные элементы или сливать элементы, которые
не влезли в лимит переменных, в подсписок, используя звездочку.

            a, b, c, d = aList[0:4]
print(f'a = {a}, b = {b}, c = {c}, d = {d}')
# a = 0, b = 1, c = 2, d = 3

a, *b, c, d = aList
print(f'a = {a}, b = {b}, c = {c}, d = {d}')
# a = 0, b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9 
        

zip, enumerate и for-loops

Функция zip создает итератор, который агрегирует элементы из
нескольких списков. Он позволяет выполнять параллельный обход списков в цикле for и
параллельную сортировку. Обратное действие (unzip) совершается с помощью звездочки.

            numList = [0, 1, 2]
engList = ['zero', 'one', 'two']
espList = ['cero', 'uno', 'dos']
print(list(zip(numList, engList, espList)))
# [(0, 'zero', 'cero'), (1, 'one', 'uno'), (2, 'two', 'dos')]

for num, eng, esp in zip(numList, engList, espList):
    print(f'{num} is {eng} in English and {esp} in Spanish.')
# 0 is zero in English and cero in Spanish.
# 1 is one in English and uno in Spanish.
# 2 is two in English and dos in Spanish. 
        
            Eng = list(zip(engList, espList, numList))
Eng.sort() # sort by engList
a, b, c = zip(*Eng)

print(a)
print(b)
print(c)
# ('one', 'two', 'zero')
# ('uno', 'dos', 'cero')
# (1, 2, 0) 
        

enumerate может
показаться немного пугающим, но данную функцию удобно
применять во многих ситуациях. Наиболее популярный вариант – автоматический
счетчик для цикла for: больше нет
необходимости создавать и инициализировать переменную счетчика с помощью counter = 0 и counter
+= 1
. enumerate и zip – это два самых мощных инструмента при построении
цикла for.

            upperCase = ['A', 'B', 'C', 'D', 'E', 'F']
lowerCase = ['a', 'b', 'c', 'd', 'e', 'f']
for i, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1):
    print(f'{i}: {upper} and {lower}.')
# 1: A and a.
# 2: B and b.
# 3: C and c.
# 4: D and d.
# 5: E and e.
# 6: F and f. 
        

Генератор –
эффективность использования памяти

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

Они часто используются
при чтении больших файлов или создании бесконечной последовательности при
помощи ключевого слова yield.

            def gen(n):    # an infinite sequence generator that generates integers >= n
    while True:
        yield n
        n += 1
        
G = gen(3)     # starts at 3
print(next(G)) # 3
print(next(G)) # 4
print(next(G)) # 5
print(next(G)) # 6 
        

Виртуальная среда –
изоляция

Самая интересная и
увлекательная штука из подборки.


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

            conda create -n venv pip python=3.7  # select python version
source activate venv
...
source deactivate 
        

Поэтому крайне важно
создать отдельные автономные виртуальные среды venv для каждого приложения, что
и можно сделать с помощью pip или conda.

А
какие фичи в Python
любишь ты?

28
Дек
2019

Как себя вести с хэдхантером? Несколько трюков для разработчиков

Тебе позвонил хэдхантер? Это могут быть происки твоего руководства, либо ты действительно заинтересовал конкурентов. Объясняем, как себя не завалить.

Если ты
не задавался целью стать “жертвой” этих ребят (н…

08
Дек
2019

10 суперполезных плагинов для Visual Studio Code

Максимально упрощай и ускоряй свою работу! Visual Studio Code и прилагающиеся к нему плагины помогут тебе в этом.

Если в качестве IDE ты используешь Visual Studio Code, у тебя есть возможность
сделать свою …

06
Дек
2019

Возвращаем JavaFX к жизни: 21 урок для начинающих

Решил, что пора написать грандиозное многофункциональное приложение на Java, но не знаешь, с чего начать? Держи крутой видеокурс!

Мы собрали новую статью по просьбам трудящихся под этим материалом. Да, Java…

29
Авг
2019

Луковое ПО: используем TOR для анонимного парсинга

Луковое ПО: используем TOR для анонимного парсингаПришло время для анонимного парсинга веб-страниц. В этом тебе поможет мощная команда: TOR, Privoxy, Python, Linux и наша статья. Где можно использовать? В случаях, когда нужно изменить свой IP-адрес при выполнении нескольких запросов за единицу времени без блокировки соединения. Настройка Для успешной разработки парсинг-агента на прокси-сервере нужно установить Linux с такими инструментами: TOR: распределенная, анонимная […]

Запись Луковое ПО: используем TOR для анонимного парсинга впервые появилась Библиотека программиста.

28
Авг
2019

8 методов, с которыми ты точно оценишь срок проекта

8 методов, с которыми ты точно оценишь срок проекта«Эй! А когда все будет готово?» – и ты понимаешь, что все снова затянулось. Давай разберемся, как грамотно оценить срок проекта. Такой подход не даст на 100% точных цифр, но на этапе формирования рамок проекта и разбора требований будет очень кстати. Разберем 8 основных методов, которые можно сочетать для достижения лучшего результата. Метод прогрессивного джипега […]

Запись 8 методов, с которыми ты точно оценишь срок проекта впервые появилась Библиотека программиста.

21
Авг
2019

Утомленные яблоком: причины бросить Mac OS и выбрать Linux

Утомленные яблоком: причины бросить Mac OS и выбрать LinuxВыбираете между Mac OS и Linux? Загляните под кат: мы подробно расписали – продолжать использовать Linux или переключиться на Mac OS. И Linux, и Mac OS являются Unix-подобными ОС и предоставляют доступ к командам Unix, а также к оболочкам bash и прочим. В сравнении с Windows, обе ОС имеют меньше приложений и игр. На этом […]

Запись Утомленные яблоком: причины бросить Mac OS и выбрать Linux впервые появилась Библиотека программиста.