In [12]:
%%html
<style>
.text_cell_render * {
   font-family: OfficinaSansCTT;
}
.reveal code {
    font-family: OfficinaSansCTT;
}
.text_cell_render h3 {
   font-family: OfficinaSansCTT;
}
.reveal section img {
    max-height: 500px;
    margin-left: auto;
    margin-right: auto;
}
</style>


Вопросы

  • Назовите несколько видов баз данных и опишите, в чем их суть.
  • Что такое транзакция в терминах баз данных?
  • Что делает следующий запрос?
    SELECT * FROM employees, managers WHERE employees.salary > 100000 AND employees.manager_id = managers.id
    
  • Что такое миграция, если своими словами?
  • В чем преимущества NoSQL баз перед реляционными, если грубо?
  • Для чего нужен Elasticsearch?

Фортран и процессоры

  • SSE, SSE2, SSE3 ...
  • Векторные операции
  • Суровые дяди-ученые с 80 годов пишут библиотеки, которые реализуют основные операции линейной алгебры
  • BLAS, LAPACK, CUDA

Матричные данные

  • Matlab (Octave), R, Julia, Wolfram, ..., Numpy

Примеры с Numpy


In [ ]:
import numpy as np

np.zeros(10) # вектор из 10 нулевых элементов
np.arange(9).reshape(3,3) # матрица 3х3 с числами от 0 до 8
m = np.eye(3) # единичная матрица
m.shape # размеры матрицы
a = np.random.random((3,3,3)) # трехмерная матрица 3x3x3 со случайными значениями

In [ ]:


In [ ]:
# Матрица numpy - многомерный массив и позволяет делать и менять срез по каждому из измерений
a[3, 4:5, 1:20:2]

Вопрос: как сделать “шахматную доску” из нулей и единиц?


In [ ]:

Упражнения

  1. Допустим, у нас есть две двумерные матрицы 5x2 и 3x2 (можно заполнить случайными числами). Нужно посчитать произведение этих матриц. Надо ли транспонировать вторую?
  2. Посчитать коэффициент корреляции Пирсона между первыми двумя колонками первой матрицы. Какая функция numpy в этом поможет?

Pandas

Плюшки

  • Схожий интерфейс с R (для олдскульных аналитиков)
  • Бесшовная интеграция с Numpy и Matplotlib
  • Легкое добавление колонок («фич»)
  • Удобные механизмы для заполнения пробелов в данных

In [ ]:
import pandas as pd
# чтение CSV (крутые параметры: names, chunksize, dtype)
df = pd.read_csv("USlocalopendataportals.csv")
df.columns # названия колонок
df.head(15) # просмотр верхних 15 строчек
df["column"].apply(lambda c: c / 100.0) # применение функции к колонке
df["column"].str.%строковая функция% # работа со строковыми колонками
df["column"].astype(np.float32) # привести колонку к нужному типу
# а как сделать через apply?

df.groupby("column").mean() # операция агрегации

In [ ]:


In [ ]:
# выбор нескольких колонок
df[["Column 1", "Column 2"]]
# создать новую колонку
df["Сolumn"] = a # массив подходящего размера
# переименование колонки
df.rename(
    columns={"Oldname": "Newname"},
    inplace=True
)
# объединение нескольких условий выборки
df[df.col1 > 10 & df.col2 < 100] # можно еще | для OR

In [ ]:

Упражнение

  1. Прочитать файл USlocalopendataportals.csv в Pandas.
    • Сколько различных значений в колонке Location?
    • Сколько порталов принадлежит государству?
  2. Выбрать все записи только для Location, начинающихся с “New York” и “Washington D.C.”.
    • Какой сайт встречается в этих данных дважды?
    • Как это показать кодом?
  3. “Починить” колонку Population и посчитать среднее население для каждой локации.


In [ ]:
# интеграция в IPython
%matplotlib inline
# основной объект
from matplotlib import pyplot as plt

In [ ]:
# столбиковая диаграмма прямо из Pandas
df["Column"].plot(kind="bar")

Упражнения с Matplotlib

  1. По датафрейму, построенному в последнем пункте предыдущего задания, построить график с горизонтальными столбиками
  2. Взять случайную выборку (скажем, 10) по локациям и населению из прошлых упражнений. С помощью объекта pyplot построить круговую диаграмму по ним.

Подсказка - http://bit.ly/1eLirnL

Scikit-Learn

Линейная регрессия


In [ ]:
# http://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html
    
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

# Load the diabetes dataset
diabetes = datasets.load_diabetes()

# Use only one feature
diabetes_X = diabetes.data[:, np.newaxis, 2]

# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]

# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]

# Create linear regression object
regr = linear_model.LinearRegression()

# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)

# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)

# The coefficients
print('Coefficients: \n', regr.coef_)
# The mean squared error
print("Mean squared error: %.2f"
      % mean_squared_error(diabetes_y_test, diabetes_y_pred))
# Explained variance score: 1 is perfect prediction
print('Variance score: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred))

# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test,  color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)

plt.xticks(())
plt.yticks(())

plt.show()

Богатая экосистема

Что бы еще почитать