SlideShare a Scribd company logo
1 of 51
Download to read offline
Руслан Гроховецкий
руководитель группы справочных сервисов
Python
и вычисления
(в Яндекс.Погоде)
Я.Субботник в Екатеринбурге, 06.07.13
Анализ данных
в Яндекс.Погоде
Что вычисляем
3
Яндекс не занимается
гидрометеорологической
деятельностью
4 Станция делает наблюдения раз в 3 часа
5 Прогноз есть на каждый час
6 Погодные данные на основе прогноза
7
Когда вместо устаревшего
наблюдения показывать
прогноз?
8 Станция делает наблюдения раз в 3 часа
9
Как сильно меняется
температура со временем?
NumPy + SciPy + matplotlib
ipython --pylab
Как вычисляем
11
Python — не числодробилка
• Cкриптовая природа;
• простой и элегантный синтаксис;
• высокоуровневые структуры данных;
• интерактивность IPython;
• нет числодробительной силы (.
Нужно добавить числодробительной силы!
А где ее взять?
12
NumPy
• Это расширение СPython
• Поддержка больших массивов и матриц
• Операции над массивами, индексация
• Математические функции, алгоритмы
• Заменяет собой MATLAB
• Много дополняющих пакетов
– SciPy+SciKits, Matplotlib, PyTables, Pandas, StatsModels, Sympy...
• Использует LAPACK (числодроб. сила!)
– Который использует BLAS/ATLAS, написанный на С и Fortran
13
Pylab
• Matplotlib — 2D графики
• NumPy
• IPython
$ ipython --pylab
Welcome to pylab, a matplotlib-based Python environment
For more information, type 'help(pylab)'.
14
Данные
• 12173 города
• ≥20000 станций (метеостанции и аэропорты)
• ≈200 млн. накопленных наблюдений
15
Есть данные наблюдений на метеостанциях, выгруженные из архивной БД.
# timestamp; Temperature
1360270800; 18
1360269000; 18
1360267200; 18
1360265400; 18
1360263600; 18
1360261800; 19
1360260000; 19
1360258200; 19
1360256400; 19
1360254600; 19
1360252800; 19
1360251000; 19
1360249200; 20
1360247400; 20
1360245600; 20
1360243800; 20
...
Наблюдения за температурой
16
>>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32)
>>> data
array([[1334043000, 2],
[1334044800, 2],
[1334046600, 3],
...,
[1372793400, 19],
[1372795200, 18],
[1372797000, 17]], dtype=int32)
Берем в руки pylab
17
>>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32)
>>> data
array([[1334043000, 2],
[1334044800, 2],
[1334046600, 3],
...,
[1372793400, 19],
[1372795200, 18],
[1372797000, 17]], dtype=int32)
>>> data.shape
(21022, 2)
Берем в руки pylab
18
>>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32)
>>> data
array([[1334043000, 2],
[1334044800, 2],
[1334046600, 3],
...,
[1372793400, 19],
[1372795200, 18],
[1372797000, 17]], dtype=int32)
>>> data.shape
(21022, 2)
>>> times, temps = data[:, 0], data[:, 1]
Берем в руки pylab
19
>>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32)
>>> data
array([[1334043000, 2],
[1334044800, 2],
[1334046600, 3],
...,
[1372793400, 19],
[1372795200, 18],
[1372797000, 17]], dtype=int32)
>>> data.shape
(21022, 2)
>>> times, temps = data[:, 0], data[:, 1]
>>> temps.max(), temps.min()
(32, -26)
Берем в руки pylab
20
>>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32)
>>> data
array([[1334043000, 2],
[1334044800, 2],
[1334046600, 3],
...,
[1372793400, 19],
[1372795200, 18],
[1372797000, 17]], dtype=int32)
>>> data.shape
(21022, 2)
>>> times, temps = data[:, 0], data[:, 1]
>>> temps.max(), temps.min()
(32, -26)
>>> plot(times, temps)
Берем в руки pylab
21 >>> plot(times, temps)
22
Векторизация
• Одна операция — много данных
• Нет циклов на Python-е
# python without numpy
>>> [temps[i+1] – temps[i]
for i in xrange(len(temps)-1)]
Разность температур соседних наблюдений
# numpy
>>> temps[1:] - temps[:-1]
23
Векторизация
• Одна операция — много данных
• Нет циклов на Python-е
# python without numpy
>>> [temps[i+1] – temps[i]
for i in xrange(len(temps)-1)]
Разность температур соседних наблюдений
# numpy
>>> temps[1:] - temps[:-1]
>>> diff(temps) # то же самое
24
>>> temp_diff = absolute(diff(temps))
>>> temp_diff.max()
8.0
>>> plot(times[1:], temp_diff)
Разности температур между замерами
25 >>> plot(times[1:], temp_diff)
26 plot(times[:-1], temp_diff)
27 plot(times[:-1], temp_diff)
28
>>> histogram(temp_diff, bins=range(0,9))
(array([13044, 7028, 795, 118, 21, 5, 6, 4]),
Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8]))
>>> hist, scale = _
>>> hist(temp_diff, bins=range(0,9))
Строим гистограмму
29
hist(temp_diff, bins=range(0,9))
Частота ΔT=Ti
в соседних по времени наблюдениях, по интерв. Ti
∈{0..8°},
30
Но нужно получить 8 таких гистограмм,
соответствующих интервалам
в 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5 и 4.0 часа.
31
# кумулятивная сумма абс. разностей температур
>>> cum_temp = temp_diff_ip.cumsum()
>>> plot(time_range[1:], cum_temp)
Кумулятивная сумма по ΔT
32 plot(time_range[1:], cum_temp)
33
>>> cum_temp[1:-7] - cum_temp[:-8] # сдвиг 1
array([1, 0, 0, ..., 0, 2, 0])
>>> cum_temp[8:] - cum_temp[:-8] # сдвиг 8
array([1, 1, 1, ..., 5, 6, 5])
Дельты T в разных интервалах t
34
>>> cum_temp[1:-7] - cum_temp[:-8] # сдвиг 1
array([1, 0, 0, ..., 0, 2, 0])
>>> cum_temp[8:] - cum_temp[:-8] # сдвиг 8
array([1, 1, 1, ..., 5, 6, 5])
>>> temp_diffs = array([
cum_temp[i:(-8+i) or None] - cum_temp[:-8]
for i in range(1,9)])
>>> temp_diffs
array([[1, 0, 0, ..., 0, 2, 0],
[1, 0, 0, ..., 2, 2, 1],
[1, 0, 0, ..., 2, 3, 2],
...,
[1, 0, 0, ..., 4, 5, 3],
[1, 0, 1, ..., 5, 5, 4],
[1, 1, 1, ..., 5, 6, 5]])
Дельты T в разных интервалах t
35
>>> histogram(temp_diffs[0], bins=range(11))
(array([13643, 6997, 750, 104, 18, 3, 5, 2, 0, 0]),
Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
>>> histogram(temp_diffs[1], bins=range(11))
(array([9434, 7722, 3323, 804, 161, 42, 18, 8, 8, 2]),
Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
>>> histograms = array([histogram(d, bins=range(11))[0]
for d in temp_diffs])
Гистограммы для каждого интервала T
36
>>> row_sums = histograms.sum(axis=1)
>>> row_sums
array([21522, 21512, 21492, 21440, 21319, 21065, 20607, 20006])
>>> histograms = histograms.astype(float64)
# broadcasting
>>> histograms / row_sums
ValueError: operands could not be broadcast together with shapes
(8,7) (8)
>>> histograms / row_sums[:, None] # добавляем второе измерение
array([[ 0.6, 0.3, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0.4, 0.4, 0.2, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0.3, 0.3, 0.2, 0.1, 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0.3, 0.3, 0.2, 0.1, 0.1, 0. , 0. , 0. , 0. , 0. ],
[ 0.2, 0.3, 0.2, 0.1, 0.1, 0.1, 0. , 0. , 0. , 0. ],
[ 0.2, 0.2, 0.2, 0.2, 0.1, 0.1, 0. , 0. , 0. , 0. ],
[ 0.1, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0. , 0. , 0. ],
[ 0.1, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1, 0. , 0. ]])
Нормируем гистограммы
37
>>> histograms / row_sums[:, None] * 100 # векторизация!
array([[ 63.4, 32.5, 3.5, 0.5, 0.1, 0. , 0. , 0. , 0. , 0. ],
[ 43.8, 35.9, 15.4, 3.7, 0.7, 0.2, 0.1, 0. , 0. , 0. ],
[ 32.5, 32.9, 20. , 9.6, 3.5, 1. , 0.3, 0.2, 0.1, 0.1],
[ 25.1, 29. , 20.7, 13.2, 7. , 3.1, 1.1, 0.4, 0.2, 0.2],
[ 20. , 25.5, 20. , 14.7, 9.7, 5.6, 2.5, 1.1, 0.5, 0.4],
[ 16.3, 22.6, 18.6, 15. , 11.3, 7.6, 4.4, 2.3, 1.1, 0.7],
[ 13.4, 20.3, 17.1, 15. , 11.5, 9.5, 6. , 3.6, 2.1, 1.6],
[ 11.2, 18.4, 15.8, 14.1, 12. , 9.9, 7.7, 4.9, 3.1, 2.9]])
>>> histogram_percents = _
Нормируем гистограммы
38
>>> histograms / row_sums[:, None] * 100 # векторизация!
array([[ 63.4, 32.5, 3.5, 0.5, 0.1, 0. , 0. , 0. , 0. , 0. ],
[ 43.8, 35.9, 15.4, 3.7, 0.7, 0.2, 0.1, 0. , 0. , 0. ],
[ 32.5, 32.9, 20. , 9.6, 3.5, 1. , 0.3, 0.2, 0.1, 0.1],
[ 25.1, 29. , 20.7, 13.2, 7. , 3.1, 1.1, 0.4, 0.2, 0.2],
[ 20. , 25.5, 20. , 14.7, 9.7, 5.6, 2.5, 1.1, 0.5, 0.4],
[ 16.3, 22.6, 18.6, 15. , 11.3, 7.6, 4.4, 2.3, 1.1, 0.7],
[ 13.4, 20.3, 17.1, 15. , 11.5, 9.5, 6. , 3.6, 2.1, 1.6],
[ 11.2, 18.4, 15.8, 14.1, 12. , 9.9, 7.7, 4.9, 3.1, 2.9]])
>>> histogram_percents = _
>>> histogram_percents.sum(axis=1)
Array([ 100., 100., 100., 100., 100., 100., 100., 100.])
Нормируем гистограммы
39
>>> histograms / row_sums[:, None] * 100 # векторизация!
array([[ 63.4, 32.5, 3.5, 0.5, 0.1, 0. , 0. , 0. , 0. , 0. ],
[ 43.8, 35.9, 15.4, 3.7, 0.7, 0.2, 0.1, 0. , 0. , 0. ],
[ 32.5, 32.9, 20. , 9.6, 3.5, 1. , 0.3, 0.2, 0.1, 0.1],
[ 25.1, 29. , 20.7, 13.2, 7. , 3.1, 1.1, 0.4, 0.2, 0.2],
[ 20. , 25.5, 20. , 14.7, 9.7, 5.6, 2.5, 1.1, 0.5, 0.4],
[ 16.3, 22.6, 18.6, 15. , 11.3, 7.6, 4.4, 2.3, 1.1, 0.7],
[ 13.4, 20.3, 17.1, 15. , 11.5, 9.5, 6. , 3.6, 2.1, 1.6],
[ 11.2, 18.4, 15.8, 14.1, 12. , 9.9, 7.7, 4.9, 3.1, 2.9]])
>>> histogram_percents = _
>>> histogram_percents.sum(axis=1)
Array([ 100., 100., 100., 100., 100., 100., 100., 100.])
>>> imshow(histogram_percents, interpolation="nearest")
Нормируем гистограммы
40
imshow(histogram_percents, interpolation="nearest")
Частота попадания ΔT в интервалы 0..10°, по вр. интервалам
41
>>> imshow(histogram_percents, interpolation="nearest")
>>> ylabel(u'dt (30-минутные интервалы)')
>>> xlabel(u'dT (градусы)')
>>> colorbar()
Наводим красоту
42
imshow(histogram_percents, interpolation="nearest")
Частота попадания ΔT в интервалы 0..10°, по вр. интервалам
43
>>> histogram_percents.cumsum(axis=1)
# ΔT<=0 <=1 <=2 <=3 <=4 <=5 <=6 <=7 <=8 --
array([[63.4, 95.9, 99.4, 99.9,100. ,100. ,100. ,100. ,100. , 100.],
[43.8, 79.7, 95.2, 98.9, 99.6, 99.8, 99.9,100. ,100. , 100.],
[32.5, 65.3, 85.3, 94.9, 98.5, 99.5, 99.7, 99.9, 99.9, 100.],
[25.1, 54.1, 74.9, 88.1, 95.1, 98.2, 99.3, 99.7, 99.8, 100.],
[20. , 45.5, 65.5, 80.2, 89.9, 95.5, 98.1, 99.2, 99.6, 100.],
[16.3, 38.8, 57.5, 72.5, 83.8, 91.5, 95.9, 98.2, 99.3, 100.],
[13.4, 33.7, 50.7, 65.7, 77.2, 86.7, 92.7, 96.3, 98.4, 100.],
[11.2, 29.5, 45.3, 59.5, 71.5, 81.3, 89.1, 94. , 97.1, 100.]])
Кумулятивная гистограмма
44
# отзеркалить, просуммировать кумулятивно, отзеркалить
>>> histogram_percents[:, ::-1].cumsum(axis=1)[:, ::-1]
Array([
#ΔT≥0 ≥1 ≥2 ≥3 ≥4 ≥5 ≥6 ≥7 ≥8 ≥9°
[100., 36.6, 4.1, 0.6, 0.1, 0. , 0. , 0. , 0. , 0. ], # 0.5ч
[100., 56.2, 20.3, 4.8, 1.1, 0.4, 0.2, 0.1, 0. , 0. ], # 1.0ч
[100., 67.5, 34.7, 14.7, 5.1, 1.5, 0.5, 0.3, 0.1, 0.1], # 1.5ч
[100., 74.9, 45.9, 25.1, 11.9, 4.9, 1.8, 0.7, 0.3, 0.2], # 2.0ч
[100., 80. , 54.5, 34.5, 19.8, 10.1, 4.5, 1.9, 0.8, 0.4], # 2.5ч
[100., 83.7, 61.2, 42.5, 27.5, 16.2, 8.5, 4.1, 1.8, 0.7], # 3.0ч
[100., 86.6, 66.3, 49.3, 34.3, 22.8, 13.3, 7.3, 3.7, 1.6], # 3.5ч
[100., 88.8, 70.5, 54.7, 40.5, 28.5, 18.7, 10.9, 6. , 2.9] # 4.0ч
])
>>> histogram_cum = _
>>> savetxt('histogram_cum.txt', histogram_cum)
Кумулятивная гистограмма
45
imshow(histogram_cum, interpolation="nearest")
Частота того, что Δt
T ≤ Ti
, Ti
∈{0..10°}, Δt
∈{0.5..4.0ч}
46
imshow(histogram_cum)
Частота того, что Δt
T ≤ Ti
, Ti
∈{0..10°}, Δt
∈{0.5..4.0ч}
47
Чем больше времени
проходит, тем сильнее
“размывается” температура
48
# Через какое время T изменится на 2° и более,
# с вероятностью 50%?
#ΔT≥0 ≥1 ≥2 ≥3 ≥4 ≥5 ≥6 ≥7 ≥8 ≥9°
[100., 36.6, 4.1, 0.6, 0.1, 0. , 0. , 0. , 0. , 0. ], # 0.5ч
[100., 56.2, 20.3, 4.8, 1.1, 0.4, 0.2, 0.1, 0. , 0. ], # 1.0ч
[100., 67.5, 34.7, 14.7, 5.1, 1.5, 0.5, 0.3, 0.1, 0.1], # 1.5ч
[100., 74.9, 45.9, 25.1, 11.9, 4.9, 1.8, 0.7, 0.3, 0.2], # 2.0ч
[100., 80. , 54.5, 34.5, 19.8, 10.1, 4.5, 1.9, 0.8, 0.4], # 2.5ч
[100., 83.7, 61.2, 42.5, 27.5, 16.2, 8.5, 4.1, 1.8, 0.7], # 3.0ч
[100., 86.6, 66.3, 49.3, 34.3, 22.8, 13.3, 7.3, 3.7, 1.6], # 3.5ч
[100., 88.8, 70.5, 54.7, 40.5, 28.5, 18.7, 10.9, 6. , 2.9] # 4.0ч
Где ответ?
49
После Δt=2.5ч температура
меняется на 2°C и более,
с вероятностью 50%
50
Ссылки
• numpy.org
• matplotlib.org
• habrahabr.ru/search/?q=numpy
• scipy.org
• conference.scipy.org/scipy2013/
• github.com/fonnesbeck/statistical-analysis-python-tutorial
Руслан Гроховецкий
Руководитель группы
справочных сервисов
ruguevara@yandex-team.ru
Спасибо

More Related Content

What's hot

PG Day'14 Russia, Модуль anyarray, Федор Сигаев
PG Day'14 Russia, Модуль anyarray, Федор СигаевPG Day'14 Russia, Модуль anyarray, Федор Сигаев
PG Day'14 Russia, Модуль anyarray, Федор Сигаевpgdayrussia
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)Smolensk Computer Science Club
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Сложности микробенчмаркинга
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркингаAndrey Akinshin
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 

What's hot (13)

Simd
SimdSimd
Simd
 
PG Day'14 Russia, Модуль anyarray, Федор Сигаев
PG Day'14 Russia, Модуль anyarray, Федор СигаевPG Day'14 Russia, Модуль anyarray, Федор Сигаев
PG Day'14 Russia, Модуль anyarray, Федор Сигаев
 
Charming python sc2-8
Charming python sc2-8Charming python sc2-8
Charming python sc2-8
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
dvfu sns spline 2
dvfu sns spline 2dvfu sns spline 2
dvfu sns spline 2
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Progr labrab-4-2013-c++
Progr labrab-4-2013-c++Progr labrab-4-2013-c++
Progr labrab-4-2013-c++
 
Recsys.hse
Recsys.hseRecsys.hse
Recsys.hse
 
South migration
South migrationSouth migration
South migration
 
Сложности микробенчмаркинга
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркинга
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 

Viewers also liked

ошибки аналитика
ошибки аналитикаошибки аналитика
ошибки аналитикаAndrey Verbitsky
 
управление проектами
управление проектамиуправление проектами
управление проектамиAndrey Verbitsky
 
архитектура ис
архитектура исархитектура ис
архитектура исAndrey Verbitsky
 
Управление ожиданиями заинтересованных лиц
Управление ожиданиями заинтересованных лицУправление ожиданиями заинтересованных лиц
Управление ожиданиями заинтересованных лицAndrey Verbitsky
 
Введение в анализ требований
Введение в анализ требованийВведение в анализ требований
Введение в анализ требованийAnton Trukhanyonok
 
HPC vs Big Data (Russian version)
HPC vs Big Data (Russian version)HPC vs Big Data (Russian version)
HPC vs Big Data (Russian version)Irina Fedulova
 
Alternative magazine 10
Alternative magazine 10Alternative magazine 10
Alternative magazine 10zhalevich
 
решения по построению сетей передачи данных фнс полигон 2015
решения по построению сетей передачи данных фнс   полигон 2015решения по построению сетей передачи данных фнс   полигон 2015
решения по построению сетей передачи данных фнс полигон 2015eucariot
 
Роман Постников — «Мегафон» — ICBDA 2015
Роман Постников — «Мегафон» — ICBDA 2015Роман Постников — «Мегафон» — ICBDA 2015
Роман Постников — «Мегафон» — ICBDA 2015rusbase
 
Александр Мигаловский — ГНИВЦ ФНС России — ICBDA 2015
Александр Мигаловский — ГНИВЦ ФНС России — ICBDA 2015Александр Мигаловский — ГНИВЦ ФНС России — ICBDA 2015
Александр Мигаловский — ГНИВЦ ФНС России — ICBDA 2015rusbase
 
Михаил Кечинов — REES46 — ICBDA 2015
Михаил Кечинов — REES46 — ICBDA 2015Михаил Кечинов — REES46 — ICBDA 2015
Михаил Кечинов — REES46 — ICBDA 2015rusbase
 
Данные - Основа Digital революции
Данные - Основа Digital революцииДанные - Основа Digital революции
Данные - Основа Digital революцииDen Reymer
 
Кирилл Чистов — Data-Centric Alliance — ICBDA 2015
Кирилл Чистов — Data-Centric Alliance — ICBDA 2015Кирилл Чистов — Data-Centric Alliance — ICBDA 2015
Кирилл Чистов — Data-Centric Alliance — ICBDA 2015rusbase
 
Роман Постников «Большие данные»
Роман Постников «Большие данные»Роман Постников «Большие данные»
Роман Постников «Большие данные»Moscow Urban Forum
 
Анатолий Левенчук — Техинвест — ICBDA2016
Анатолий Левенчук — Техинвест — ICBDA2016Анатолий Левенчук — Техинвест — ICBDA2016
Анатолий Левенчук — Техинвест — ICBDA2016rusbase
 

Viewers also liked (20)

ошибки аналитика
ошибки аналитикаошибки аналитика
ошибки аналитика
 
управление проектами
управление проектамиуправление проектами
управление проектами
 
Into into UX for business
Into into UX for businessInto into UX for business
Into into UX for business
 
архитектура ис
архитектура исархитектура ис
архитектура ис
 
Pareto principle
Pareto principle Pareto principle
Pareto principle
 
Dead by use case #1
Dead by use case #1Dead by use case #1
Dead by use case #1
 
Dead by use case #2
Dead by use case #2Dead by use case #2
Dead by use case #2
 
Управление ожиданиями заинтересованных лиц
Управление ожиданиями заинтересованных лицУправление ожиданиями заинтересованных лиц
Управление ожиданиями заинтересованных лиц
 
Mishustin rus
Mishustin rusMishustin rus
Mishustin rus
 
Введение в анализ требований
Введение в анализ требованийВведение в анализ требований
Введение в анализ требований
 
HPC vs Big Data (Russian version)
HPC vs Big Data (Russian version)HPC vs Big Data (Russian version)
HPC vs Big Data (Russian version)
 
Alternative magazine 10
Alternative magazine 10Alternative magazine 10
Alternative magazine 10
 
решения по построению сетей передачи данных фнс полигон 2015
решения по построению сетей передачи данных фнс   полигон 2015решения по построению сетей передачи данных фнс   полигон 2015
решения по построению сетей передачи данных фнс полигон 2015
 
Роман Постников — «Мегафон» — ICBDA 2015
Роман Постников — «Мегафон» — ICBDA 2015Роман Постников — «Мегафон» — ICBDA 2015
Роман Постников — «Мегафон» — ICBDA 2015
 
Александр Мигаловский — ГНИВЦ ФНС России — ICBDA 2015
Александр Мигаловский — ГНИВЦ ФНС России — ICBDA 2015Александр Мигаловский — ГНИВЦ ФНС России — ICBDA 2015
Александр Мигаловский — ГНИВЦ ФНС России — ICBDA 2015
 
Михаил Кечинов — REES46 — ICBDA 2015
Михаил Кечинов — REES46 — ICBDA 2015Михаил Кечинов — REES46 — ICBDA 2015
Михаил Кечинов — REES46 — ICBDA 2015
 
Данные - Основа Digital революции
Данные - Основа Digital революцииДанные - Основа Digital революции
Данные - Основа Digital революции
 
Кирилл Чистов — Data-Centric Alliance — ICBDA 2015
Кирилл Чистов — Data-Centric Alliance — ICBDA 2015Кирилл Чистов — Data-Centric Alliance — ICBDA 2015
Кирилл Чистов — Data-Centric Alliance — ICBDA 2015
 
Роман Постников «Большие данные»
Роман Постников «Большие данные»Роман Постников «Большие данные»
Роман Постников «Большие данные»
 
Анатолий Левенчук — Техинвест — ICBDA2016
Анатолий Левенчук — Техинвест — ICBDA2016Анатолий Левенчук — Техинвест — ICBDA2016
Анатолий Левенчук — Техинвест — ICBDA2016
 

Similar to Руслан Гроховецкий — Python и вычисления

Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)Bitworks Software
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
презентация
презентацияпрезентация
презентацияLIANA180
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности PythonPyNSK
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Roman Brovko
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...Iosif Itkin
 
Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
алгебра 7кл алимов решебник_2002 1-801
алгебра 7кл алимов решебник_2002  1-801алгебра 7кл алимов решебник_2002  1-801
алгебра 7кл алимов решебник_2002 1-801narvel666
 
гдз по алгебре 7 класс алимов ш. а. и др
гдз по алгебре 7 класс алимов ш. а. и дргдз по алгебре 7 класс алимов ш. а. и др
гдз по алгебре 7 класс алимов ш. а. и дрYou DZ
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
алгоритмизация
алгоритмизацияалгоритмизация
алгоритмизацияisva69
 
Tugas 1 Matematika Terapan (S2)
Tugas 1 Matematika Terapan (S2)Tugas 1 Matematika Terapan (S2)
Tugas 1 Matematika Terapan (S2)Rahmawaty Er
 
повторение 7кл. алгебра
повторение 7кл. алгебраповторение 7кл. алгебра
повторение 7кл. алгебраLyudmila Yefremova
 
Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"LogeekNightUkraine
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliaminComputer Science Club
 
lab1 math computational
lab1 math computationallab1 math computational
lab1 math computationaldinhtruonglam1
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and ClojureVasil Remeniuk
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#Olga Maksimenkova
 

Similar to Руслан Гроховецкий — Python и вычисления (20)

Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
презентация
презентацияпрезентация
презентация
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.
 
Основы NumPy
Основы NumPyОсновы NumPy
Основы NumPy
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
 
Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)Лекция 1: Амортизационный анализ (Amortized analysis)
Лекция 1: Амортизационный анализ (Amortized analysis)
 
алгебра 7кл алимов решебник_2002 1-801
алгебра 7кл алимов решебник_2002  1-801алгебра 7кл алимов решебник_2002  1-801
алгебра 7кл алимов решебник_2002 1-801
 
гдз по алгебре 7 класс алимов ш. а. и др
гдз по алгебре 7 класс алимов ш. а. и дргдз по алгебре 7 класс алимов ш. а. и др
гдз по алгебре 7 класс алимов ш. а. и др
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
 
алгоритмизация
алгоритмизацияалгоритмизация
алгоритмизация
 
Tugas 1 Matematika Terapan (S2)
Tugas 1 Matematika Terapan (S2)Tugas 1 Matematika Terapan (S2)
Tugas 1 Matematika Terapan (S2)
 
повторение 7кл. алгебра
повторение 7кл. алгебраповторение 7кл. алгебра
повторение 7кл. алгебра
 
Zva
ZvaZva
Zva
 
Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin
 
lab1 math computational
lab1 math computationallab1 math computational
lab1 math computational
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Руслан Гроховецкий — Python и вычисления

  • 1. Руслан Гроховецкий руководитель группы справочных сервисов Python и вычисления (в Яндекс.Погоде) Я.Субботник в Екатеринбурге, 06.07.13
  • 4. 4 Станция делает наблюдения раз в 3 часа
  • 5. 5 Прогноз есть на каждый час
  • 6. 6 Погодные данные на основе прогноза
  • 8. 8 Станция делает наблюдения раз в 3 часа
  • 10. NumPy + SciPy + matplotlib ipython --pylab Как вычисляем
  • 11. 11 Python — не числодробилка • Cкриптовая природа; • простой и элегантный синтаксис; • высокоуровневые структуры данных; • интерактивность IPython; • нет числодробительной силы (. Нужно добавить числодробительной силы! А где ее взять?
  • 12. 12 NumPy • Это расширение СPython • Поддержка больших массивов и матриц • Операции над массивами, индексация • Математические функции, алгоритмы • Заменяет собой MATLAB • Много дополняющих пакетов – SciPy+SciKits, Matplotlib, PyTables, Pandas, StatsModels, Sympy... • Использует LAPACK (числодроб. сила!) – Который использует BLAS/ATLAS, написанный на С и Fortran
  • 13. 13 Pylab • Matplotlib — 2D графики • NumPy • IPython $ ipython --pylab Welcome to pylab, a matplotlib-based Python environment For more information, type 'help(pylab)'.
  • 14. 14 Данные • 12173 города • ≥20000 станций (метеостанции и аэропорты) • ≈200 млн. накопленных наблюдений
  • 15. 15 Есть данные наблюдений на метеостанциях, выгруженные из архивной БД. # timestamp; Temperature 1360270800; 18 1360269000; 18 1360267200; 18 1360265400; 18 1360263600; 18 1360261800; 19 1360260000; 19 1360258200; 19 1360256400; 19 1360254600; 19 1360252800; 19 1360251000; 19 1360249200; 20 1360247400; 20 1360245600; 20 1360243800; 20 ... Наблюдения за температурой
  • 16. 16 >>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32) >>> data array([[1334043000, 2], [1334044800, 2], [1334046600, 3], ..., [1372793400, 19], [1372795200, 18], [1372797000, 17]], dtype=int32) Берем в руки pylab
  • 17. 17 >>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32) >>> data array([[1334043000, 2], [1334044800, 2], [1334046600, 3], ..., [1372793400, 19], [1372795200, 18], [1372797000, 17]], dtype=int32) >>> data.shape (21022, 2) Берем в руки pylab
  • 18. 18 >>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32) >>> data array([[1334043000, 2], [1334044800, 2], [1334046600, 3], ..., [1372793400, 19], [1372795200, 18], [1372797000, 17]], dtype=int32) >>> data.shape (21022, 2) >>> times, temps = data[:, 0], data[:, 1] Берем в руки pylab
  • 19. 19 >>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32) >>> data array([[1334043000, 2], [1334044800, 2], [1334046600, 3], ..., [1372793400, 19], [1372795200, 18], [1372797000, 17]], dtype=int32) >>> data.shape (21022, 2) >>> times, temps = data[:, 0], data[:, 1] >>> temps.max(), temps.min() (32, -26) Берем в руки pylab
  • 20. 20 >>> data = loadtxt('sheremetjevo.csv', delimiter=';', dtype=int32) >>> data array([[1334043000, 2], [1334044800, 2], [1334046600, 3], ..., [1372793400, 19], [1372795200, 18], [1372797000, 17]], dtype=int32) >>> data.shape (21022, 2) >>> times, temps = data[:, 0], data[:, 1] >>> temps.max(), temps.min() (32, -26) >>> plot(times, temps) Берем в руки pylab
  • 22. 22 Векторизация • Одна операция — много данных • Нет циклов на Python-е # python without numpy >>> [temps[i+1] – temps[i] for i in xrange(len(temps)-1)] Разность температур соседних наблюдений # numpy >>> temps[1:] - temps[:-1]
  • 23. 23 Векторизация • Одна операция — много данных • Нет циклов на Python-е # python without numpy >>> [temps[i+1] – temps[i] for i in xrange(len(temps)-1)] Разность температур соседних наблюдений # numpy >>> temps[1:] - temps[:-1] >>> diff(temps) # то же самое
  • 24. 24 >>> temp_diff = absolute(diff(temps)) >>> temp_diff.max() 8.0 >>> plot(times[1:], temp_diff) Разности температур между замерами
  • 28. 28 >>> histogram(temp_diff, bins=range(0,9)) (array([13044, 7028, 795, 118, 21, 5, 6, 4]), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8])) >>> hist, scale = _ >>> hist(temp_diff, bins=range(0,9)) Строим гистограмму
  • 29. 29 hist(temp_diff, bins=range(0,9)) Частота ΔT=Ti в соседних по времени наблюдениях, по интерв. Ti ∈{0..8°},
  • 30. 30 Но нужно получить 8 таких гистограмм, соответствующих интервалам в 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5 и 4.0 часа.
  • 31. 31 # кумулятивная сумма абс. разностей температур >>> cum_temp = temp_diff_ip.cumsum() >>> plot(time_range[1:], cum_temp) Кумулятивная сумма по ΔT
  • 33. 33 >>> cum_temp[1:-7] - cum_temp[:-8] # сдвиг 1 array([1, 0, 0, ..., 0, 2, 0]) >>> cum_temp[8:] - cum_temp[:-8] # сдвиг 8 array([1, 1, 1, ..., 5, 6, 5]) Дельты T в разных интервалах t
  • 34. 34 >>> cum_temp[1:-7] - cum_temp[:-8] # сдвиг 1 array([1, 0, 0, ..., 0, 2, 0]) >>> cum_temp[8:] - cum_temp[:-8] # сдвиг 8 array([1, 1, 1, ..., 5, 6, 5]) >>> temp_diffs = array([ cum_temp[i:(-8+i) or None] - cum_temp[:-8] for i in range(1,9)]) >>> temp_diffs array([[1, 0, 0, ..., 0, 2, 0], [1, 0, 0, ..., 2, 2, 1], [1, 0, 0, ..., 2, 3, 2], ..., [1, 0, 0, ..., 4, 5, 3], [1, 0, 1, ..., 5, 5, 4], [1, 1, 1, ..., 5, 6, 5]]) Дельты T в разных интервалах t
  • 35. 35 >>> histogram(temp_diffs[0], bins=range(11)) (array([13643, 6997, 750, 104, 18, 3, 5, 2, 0, 0]), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) >>> histogram(temp_diffs[1], bins=range(11)) (array([9434, 7722, 3323, 804, 161, 42, 18, 8, 8, 2]), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) >>> histograms = array([histogram(d, bins=range(11))[0] for d in temp_diffs]) Гистограммы для каждого интервала T
  • 36. 36 >>> row_sums = histograms.sum(axis=1) >>> row_sums array([21522, 21512, 21492, 21440, 21319, 21065, 20607, 20006]) >>> histograms = histograms.astype(float64) # broadcasting >>> histograms / row_sums ValueError: operands could not be broadcast together with shapes (8,7) (8) >>> histograms / row_sums[:, None] # добавляем второе измерение array([[ 0.6, 0.3, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ], [ 0.4, 0.4, 0.2, 0. , 0. , 0. , 0. , 0. , 0. , 0. ], [ 0.3, 0.3, 0.2, 0.1, 0. , 0. , 0. , 0. , 0. , 0. ], [ 0.3, 0.3, 0.2, 0.1, 0.1, 0. , 0. , 0. , 0. , 0. ], [ 0.2, 0.3, 0.2, 0.1, 0.1, 0.1, 0. , 0. , 0. , 0. ], [ 0.2, 0.2, 0.2, 0.2, 0.1, 0.1, 0. , 0. , 0. , 0. ], [ 0.1, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0. , 0. , 0. ], [ 0.1, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1, 0. , 0. ]]) Нормируем гистограммы
  • 37. 37 >>> histograms / row_sums[:, None] * 100 # векторизация! array([[ 63.4, 32.5, 3.5, 0.5, 0.1, 0. , 0. , 0. , 0. , 0. ], [ 43.8, 35.9, 15.4, 3.7, 0.7, 0.2, 0.1, 0. , 0. , 0. ], [ 32.5, 32.9, 20. , 9.6, 3.5, 1. , 0.3, 0.2, 0.1, 0.1], [ 25.1, 29. , 20.7, 13.2, 7. , 3.1, 1.1, 0.4, 0.2, 0.2], [ 20. , 25.5, 20. , 14.7, 9.7, 5.6, 2.5, 1.1, 0.5, 0.4], [ 16.3, 22.6, 18.6, 15. , 11.3, 7.6, 4.4, 2.3, 1.1, 0.7], [ 13.4, 20.3, 17.1, 15. , 11.5, 9.5, 6. , 3.6, 2.1, 1.6], [ 11.2, 18.4, 15.8, 14.1, 12. , 9.9, 7.7, 4.9, 3.1, 2.9]]) >>> histogram_percents = _ Нормируем гистограммы
  • 38. 38 >>> histograms / row_sums[:, None] * 100 # векторизация! array([[ 63.4, 32.5, 3.5, 0.5, 0.1, 0. , 0. , 0. , 0. , 0. ], [ 43.8, 35.9, 15.4, 3.7, 0.7, 0.2, 0.1, 0. , 0. , 0. ], [ 32.5, 32.9, 20. , 9.6, 3.5, 1. , 0.3, 0.2, 0.1, 0.1], [ 25.1, 29. , 20.7, 13.2, 7. , 3.1, 1.1, 0.4, 0.2, 0.2], [ 20. , 25.5, 20. , 14.7, 9.7, 5.6, 2.5, 1.1, 0.5, 0.4], [ 16.3, 22.6, 18.6, 15. , 11.3, 7.6, 4.4, 2.3, 1.1, 0.7], [ 13.4, 20.3, 17.1, 15. , 11.5, 9.5, 6. , 3.6, 2.1, 1.6], [ 11.2, 18.4, 15.8, 14.1, 12. , 9.9, 7.7, 4.9, 3.1, 2.9]]) >>> histogram_percents = _ >>> histogram_percents.sum(axis=1) Array([ 100., 100., 100., 100., 100., 100., 100., 100.]) Нормируем гистограммы
  • 39. 39 >>> histograms / row_sums[:, None] * 100 # векторизация! array([[ 63.4, 32.5, 3.5, 0.5, 0.1, 0. , 0. , 0. , 0. , 0. ], [ 43.8, 35.9, 15.4, 3.7, 0.7, 0.2, 0.1, 0. , 0. , 0. ], [ 32.5, 32.9, 20. , 9.6, 3.5, 1. , 0.3, 0.2, 0.1, 0.1], [ 25.1, 29. , 20.7, 13.2, 7. , 3.1, 1.1, 0.4, 0.2, 0.2], [ 20. , 25.5, 20. , 14.7, 9.7, 5.6, 2.5, 1.1, 0.5, 0.4], [ 16.3, 22.6, 18.6, 15. , 11.3, 7.6, 4.4, 2.3, 1.1, 0.7], [ 13.4, 20.3, 17.1, 15. , 11.5, 9.5, 6. , 3.6, 2.1, 1.6], [ 11.2, 18.4, 15.8, 14.1, 12. , 9.9, 7.7, 4.9, 3.1, 2.9]]) >>> histogram_percents = _ >>> histogram_percents.sum(axis=1) Array([ 100., 100., 100., 100., 100., 100., 100., 100.]) >>> imshow(histogram_percents, interpolation="nearest") Нормируем гистограммы
  • 40. 40 imshow(histogram_percents, interpolation="nearest") Частота попадания ΔT в интервалы 0..10°, по вр. интервалам
  • 41. 41 >>> imshow(histogram_percents, interpolation="nearest") >>> ylabel(u'dt (30-минутные интервалы)') >>> xlabel(u'dT (градусы)') >>> colorbar() Наводим красоту
  • 42. 42 imshow(histogram_percents, interpolation="nearest") Частота попадания ΔT в интервалы 0..10°, по вр. интервалам
  • 43. 43 >>> histogram_percents.cumsum(axis=1) # ΔT<=0 <=1 <=2 <=3 <=4 <=5 <=6 <=7 <=8 -- array([[63.4, 95.9, 99.4, 99.9,100. ,100. ,100. ,100. ,100. , 100.], [43.8, 79.7, 95.2, 98.9, 99.6, 99.8, 99.9,100. ,100. , 100.], [32.5, 65.3, 85.3, 94.9, 98.5, 99.5, 99.7, 99.9, 99.9, 100.], [25.1, 54.1, 74.9, 88.1, 95.1, 98.2, 99.3, 99.7, 99.8, 100.], [20. , 45.5, 65.5, 80.2, 89.9, 95.5, 98.1, 99.2, 99.6, 100.], [16.3, 38.8, 57.5, 72.5, 83.8, 91.5, 95.9, 98.2, 99.3, 100.], [13.4, 33.7, 50.7, 65.7, 77.2, 86.7, 92.7, 96.3, 98.4, 100.], [11.2, 29.5, 45.3, 59.5, 71.5, 81.3, 89.1, 94. , 97.1, 100.]]) Кумулятивная гистограмма
  • 44. 44 # отзеркалить, просуммировать кумулятивно, отзеркалить >>> histogram_percents[:, ::-1].cumsum(axis=1)[:, ::-1] Array([ #ΔT≥0 ≥1 ≥2 ≥3 ≥4 ≥5 ≥6 ≥7 ≥8 ≥9° [100., 36.6, 4.1, 0.6, 0.1, 0. , 0. , 0. , 0. , 0. ], # 0.5ч [100., 56.2, 20.3, 4.8, 1.1, 0.4, 0.2, 0.1, 0. , 0. ], # 1.0ч [100., 67.5, 34.7, 14.7, 5.1, 1.5, 0.5, 0.3, 0.1, 0.1], # 1.5ч [100., 74.9, 45.9, 25.1, 11.9, 4.9, 1.8, 0.7, 0.3, 0.2], # 2.0ч [100., 80. , 54.5, 34.5, 19.8, 10.1, 4.5, 1.9, 0.8, 0.4], # 2.5ч [100., 83.7, 61.2, 42.5, 27.5, 16.2, 8.5, 4.1, 1.8, 0.7], # 3.0ч [100., 86.6, 66.3, 49.3, 34.3, 22.8, 13.3, 7.3, 3.7, 1.6], # 3.5ч [100., 88.8, 70.5, 54.7, 40.5, 28.5, 18.7, 10.9, 6. , 2.9] # 4.0ч ]) >>> histogram_cum = _ >>> savetxt('histogram_cum.txt', histogram_cum) Кумулятивная гистограмма
  • 45. 45 imshow(histogram_cum, interpolation="nearest") Частота того, что Δt T ≤ Ti , Ti ∈{0..10°}, Δt ∈{0.5..4.0ч}
  • 46. 46 imshow(histogram_cum) Частота того, что Δt T ≤ Ti , Ti ∈{0..10°}, Δt ∈{0.5..4.0ч}
  • 47. 47 Чем больше времени проходит, тем сильнее “размывается” температура
  • 48. 48 # Через какое время T изменится на 2° и более, # с вероятностью 50%? #ΔT≥0 ≥1 ≥2 ≥3 ≥4 ≥5 ≥6 ≥7 ≥8 ≥9° [100., 36.6, 4.1, 0.6, 0.1, 0. , 0. , 0. , 0. , 0. ], # 0.5ч [100., 56.2, 20.3, 4.8, 1.1, 0.4, 0.2, 0.1, 0. , 0. ], # 1.0ч [100., 67.5, 34.7, 14.7, 5.1, 1.5, 0.5, 0.3, 0.1, 0.1], # 1.5ч [100., 74.9, 45.9, 25.1, 11.9, 4.9, 1.8, 0.7, 0.3, 0.2], # 2.0ч [100., 80. , 54.5, 34.5, 19.8, 10.1, 4.5, 1.9, 0.8, 0.4], # 2.5ч [100., 83.7, 61.2, 42.5, 27.5, 16.2, 8.5, 4.1, 1.8, 0.7], # 3.0ч [100., 86.6, 66.3, 49.3, 34.3, 22.8, 13.3, 7.3, 3.7, 1.6], # 3.5ч [100., 88.8, 70.5, 54.7, 40.5, 28.5, 18.7, 10.9, 6. , 2.9] # 4.0ч Где ответ?
  • 49. 49 После Δt=2.5ч температура меняется на 2°C и более, с вероятностью 50%
  • 50. 50 Ссылки • numpy.org • matplotlib.org • habrahabr.ru/search/?q=numpy • scipy.org • conference.scipy.org/scipy2013/ • github.com/fonnesbeck/statistical-analysis-python-tutorial