Data version problems

Лев Коваленко — Senior DS Engineer

Python problems

Создадим два множества

a = { 0, 1, None, "a", "b", ""}
b = { None, "a", "b", "", 0, 1,}

Python считает их одинаковыми

a==b
True

А pickle - нет

import pickle
pickle.dumps(a)==pickle.dumps(b)
False

Precision representation

Представление \(\frac{1}{10}\)

format(0.1, ".17g")
'0.10000000000000001'
(0.1).as_integer_ratio()
(3602879701896397, 36028797018963968)

Представление \(\frac{2}{10}\)

format(0.2, ".17g")
'0.20000000000000001'
(0.2).as_integer_ratio()
(3602879701896397, 18014398509481984)

Представление \(\frac{3}{10}\)

format(0.3, ".17g")
'0.29999999999999999'
(0.3).as_integer_ratio()
(5404319552844595, 18014398509481984)

Numpy precision problems

  • Разная точность на 32 битных и 64 битных системах
  • Разная точность на windows и других системах
  • Разные стандартные типы в windows и других системах

В чем проблема то?

На windows у нас тип переполняется

На linux стандартный тип не переполняется

Plotly problems

Создадим два графика

import plotly.graph_objects as go

fig1 = go.Figure(go.Scatter(x=[1,2,3], y=[3,2,1]))
fig2 = go.Figure(go.Scatter(x=[1,2,3], y=[3,2,1]))

Python считает их одинаковыми

fig1==fig2
True

Но при сохранении в html - разные

fig1.to_html()==fig2.to_html()
False

Hot fix

fig1.to_html(div_id="same")==fig2.to_html(div_id="same")
True

Sklearn problems

Создадим две модели и зафиксируем random state

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.datasets import fetch_20newsgroups

data = fetch_20newsgroups()

m1 = TfidfVectorizer(stop_words=["the"]).fit(["Hello world", "Hello, the"])
m2 = TfidfVectorizer(stop_words=["the"]).fit(["Hello world", "Hello, the"])

Они не равны

pickle.dumps(m1)==pickle.dumps(m2)
False

Различия в них

m1._stop_words_id, m2._stop_words_id
(140519623496000, 140518532311040)

Sklearn problems

from sklearn.cluster import KMeans
import numpy as np
from utils import points

for l in range(10):
    kmeans = KMeans(n_clusters=30, n_init=1, random_state=42)
    kmeans.fit(points)

    centroids = kmeans.cluster_centers_
    print('{0:.20f}'.format(kmeans.inertia_))
1028086558.26603019237518310547
1028086558.26603019237518310547
1028086558.26603019237518310547
1028086558.26603019237518310547
1028086558.26603019237518310547
1028086558.26603019237518310547
1028086558.26603019237518310547
1028086558.26603019237518310547
1028086558.26603019237518310547
1028086558.26603019237518310547

Library problems

DL frameworks