Aspiring Data Science – Telegram
Aspiring Data Science
385 subscribers
465 photos
12 videos
12 files
2.15K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#hardware #tools

У меня дома есть похожий пылесос с док-станцией, правда, Ройдми. Брал за 30, не 130, правда ) Не прошло и полугода как внутри разлетелась турбина. Но радует, что прогресс не стоит на месте.


"Используя технологию обнаружения грязи OmniDirt и интеллектуальную RGB-камеру, робот-пылесос распознаёт различные пятна на полу и тщательно их удаляет. Специальный датчик измеряет степень загрязнения воды для дополнительной промывки швабр, позволяя тем самым эффективно удалять пятна и обеспечивать чистоту в доме.

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

Кроме того, станция обеспечивает автоматическую очистку швабр горячей водой с температурой до 70 °C (можно настроить 4 температурных режима) и поддона для их мытья, используя двойной скребок. Это позволяет убрать остатки грязи, предотвратить возникновение неприятных запахов и обойтись без вмешательства человека для очистки вручную. Станция самостоятельно промывает и сушит вращающиеся швабры тёплым воздухом в течение 2 часов, чтобы предотвратить образование плесени и неприятного запаха, а после очищает поддон для их мытья.

Также Dreame X40 Ultra Complete оснащён улучшенной системой 3D сканирования помещения, что позволяет создать карту помещения, подобрать эффективные маршруты уборки и избегать столкновения с различным предметами на полу (распознаётся до 120 типов предметов, включая обувь, кабели и т.д.).

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

Dreame X40 Ultra Complete имеет систему управления Clean Genius, которая самостоятельно определяет тип комнаты, покрытия и предлагает наиболее оптимальную стратегию уборки. Clean Genius идеально подойдёт владельцам домашних питомцев, так как пылесос автоматически определяет наличие животного в комнате и проводит уборку с учётом безопасности и комфорта вашего любимца. Через приложение Dreamehome можно взаимодействовать домашними животными с помощью функции передачи голоса и контролировать их через встроенную в пылесос камеру.

Цена робота-пылесоса Dreame X40 Ultra Complete для ранних покупателей составит 129 990 руб."

https://3dnews.ru/1109554/flagmanskiy-robotpilesos-7v1dreame-x40-ultra-complete-predstavlen-v-rossii
#yan #feedback #selfcriticism

Feedback helps you learn. When you receive feedback, especially that which contradicts your existing views, you gain a perspective you might not have considered before. Learn from it and perhaps revise your outdated or incorrect knowledge.

“The illiterate of the 21st century will not be those who cannot read and write, but those who cannot learn, unlearn, and relearn. ” — Alvin Toffler

Feedback helps you make better decisions. When you get feedback, you might change your initial opinion or decision. Were you wrong previously? Does this show you didn’t really know what you were talking about? Well, not necessarily. Here’s the advice Jeff Bezos shared with 37signals (now Basecamp):

People who were right a lot of the time were people who often changed their minds. … The smartest people are constantly revising their understanding, reconsidering a problem they thought they’d already solved. They’re open to new points of view, new information, new ideas, contradictions, and challenges to their way of thinking.

Thus, changing your mind could help you arrive at better decisions. It’s kinda like SGD–take a quick decision, get feedback, update decision, repeat. With enough iterations, you arrive at global optima.

https://eugeneyan.com/writing/how-to-apply-crockers-law-for-feedback-and-growth/
1
#series #from

Когда-то давно захватил меня сериал Lost. Но довольно быстро стал раздражать нелогичностями и откровенными тупняками.

С сериалом From (Извне) дела получше, но только после просмотра данного разборчика я понял, насколько же тут более тонкий и продуманный сценарий.

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

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

Крайне советую сериальчик From к просмотру (а потом и этот разбор).

И еще есть 2-я часть с новыми деталями.
#series #from

Ну и основное объяснение того, какие силы играют в городке From. Сначала казалось чушью, потом я понял, что эта индейская мифология с ведьмой и 3 демонами как раз и объясняет все кажущиеся несуразности сериала, и карты, и странные фигуры на заставке, и сценку с вороной и крысами.

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

https://www.youtube.com/watch?v=3fUnlb_p3sQ
#neuralnets #brain

"Ещё в 2014 году женщине с диагнозом эпилепсия была сделана операция по удалению крошечного участка cortex cerebri — ткани серого вещества головного мозга, покрывающей оба полушария тонким слоем. Группа учёных из Гарвардского университета взялась восстановить как можно более точную объёмную карту образца. Для этого ткани насытили тяжёлыми металлами, которые связались с липидным слоем мембран нервных клеток и проявили их для считывания электронным микроскопом. Затем ткани напитали отвердевающим раствором и нарезали на пластинки толщиной по 34 нм, после чего начали сканирование и составление карты.

Объём сырых данных по 2D-срезам составил 1,4 Пбайт. Для обработки информации по сшиванию изображений в один 3D-объект учёные запросили помощи у компании Google. Последняя предоставила ресурсы на основе систем машинного обучения. Кроме этого, учёные вручную раскрашивали ткани в самых сложных случаях и проверяли точность работы модели. Для лучшей визуализации самые маленькие клетки окрасили в синий цвет, а самые больше — в красный. Клетки промежуточных размеров получили свои цвета из обычной спектральной палитры.

На выходе получилась самая подробная на сегодня интерактивная карта объёма ткани мозга человека с субклеточным разрешением. Она выложена в открытый доступ, чтобы любой научный коллектив мог использовать карту для собственных исследований. Карта проявила много удивительного и даже неожиданного. Например, учёные обнаружили расширения нервных клеток в виде яйцевидных клеток-отростков неизвестного назначения, которые раньше науке не были известны. Обнаружены также зеркальные по форме клетки и нейроны, опутавшие нервной тканью сами себя.

Изучение карты нервной ткани позволит прояснить топологию сети и работу её отдельных участков. Это важно не только для понимания работы мозга, что поможет лечить множество связанных с ним заболеваний, но также обещает оказать влияние на развитие технологий искусственного интеллекта. А развить их можно только понимая основы — работу человеческого мозга, которая пока полна загадок."

https://3dnews.ru/1109605/pervaya-subkletochnaya-3dkarta-fragmenta-chelovecheskogo-mozga-okazalas-polna-zagadok-i-obiliem-kletokurodtsev
#python #codegems

Краткий обзор питоновских фич, появившихся после версии 3.6, которые я нашёл полезными и использую.

Python 3.7 (June 2018)
• Data Classes: Introduced dataclasses module for easy creation of classes storing data without needing to write boilerplate code.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p) # Output: Point(x=1, y=2)


Python 3.8 (October 2019)

• Assignment Expressions: Introduced the "walrus operator" (:=) to assign values within expressions.
numbers = [1, 2, 3, 4]
if (n := len(numbers)) > 3:
print(f"List is too long ({n} elements)") # Output: List is too long (4 elements)


• Positional-Only Parameters: Added syntax to specify positional-only parameters in function definitions using /.
def greet(name, /, greeting="Hello"):
return f"{greeting}, {name}!"

print(greet("Alice")) # Output: Hello, Alice!


• f-string Enhancements: f-strings now support the = specifier for self-documenting expressions.
value = 42
print(f"{value=}") # Output: value=42


• TypedDict: Introduced TypedDict in the typing module for creating dictionaries with a fixed set of keys and value types.
from typing import TypedDict

class Movie(TypedDict):
noscript: str
year: int

movie: Movie = {"noscript": "Inception", "year": 2010}


• Improved typing Module: Introduced Literal, Final, and TypedDict in the typing module.

Python 3.9 (October 2020)
• Type Hinting Improvements: Introduced | operator for union types (e.g., int | str), replacing typing.Union.
def add(x: int | float, y: int | float) -> int | float:
return x + y

• Dictionary Merging and Updating: Introduced | and |= operators for merging and updating dictionaries.
dict1 = {'a': 1}
dict2 = {'b': 2}
merged = dict1 | dict2
print(merged) # Output: {'a': 1, 'b': 2}


Python 3.10 (October 2021)
• Structural Pattern Matching: Introduced the match and case statements, allowing for powerful pattern matching similar to switch/case in other languages.
def http_status(status):
match status:
case 200:
return "OK"
case 404:
return "Not Found"
case _:
return "Unknown"

print(http_status(200)) # Output: OK


• Parenthesized Context Managers: Allowed using parentheses to combine multiple context managers in a single with statement.
with (
open('file1.txt') as f1,
open('file2.txt') as f2
):
print(f1.read(), f2.read())


Python 3.11 (October 2022)
• Exception Groups and except*: Introduced Exception Groups and the except* syntax
• Improved Typing: Introduced Self and added better support for typing variadic generics.
from typing import Self

class Builder:
def build(self) -> Self:
return self

b = Builder().build()


С pattern matching они имхо сильно пролажали, конструкцию типа case.. надо было добавлять много лет назад. А теперь, когда все приучились в питоне ставить эти уродливые блоки elif val op cond, они дали юзерам match, в 2021-м году. Ну не козлы? В 3.12 они этот match расширили, как водится в питоне, на какие-то сомнительные конструкции. То же сделали в 3.11 с Exception Groups and except*.

Вообще заметил, что в Питоне так всё делается: если и добавляется, то настолько всратая функциональность на таком гранулярном уровне, что нормальному человеку и в голову не придёт.
Возьмём модуль Logging. Казалось бы, нам нужно простое удобное логирование, но нет - получите цепочки, иерархии, хэндлеры, форматтеры, фильтры, пропагацию. То же и с match. И с модулем typing. И с появившимися в 3.11 Except*. Ну в чью больную голову могла прийти конструкция

try:
raise ExceptionGroup("Example", [ValueError("Bad value"), TypeError("Bad type")])
except* ValueError as e:
print("Caught ValueError:", e) # Output: Caught ValueError: [Bad value]

? А простые полезные вещи могут не делать не то что годами - десятилетиями. Только к версии 3.13 они додумались начать что-то делать с GIL-ом. Хочется выразиться дипломатическим языком Лаврова - "Дэбилы, бл#ть."
5
Forwarded from data hate (Артём Церех)
На заре своей карьеры я работал в компании Pfizer. Сейчас она известна благодаря одноименной вакцине. Но восемь лет назад, когда говорили о Pfizer, многие путали её с брендом шоколадок Fazer.

При онбординге нужно было проходить множество различных тренингов и обучений. Один из них рассказывал о том, что необходимо сообщать компании обо всех случаях незадокументированных эффектов от применения лекарств, производимых Pfizer. Например, если кто-то столкнулся с головной болью, не описанной в побочных эффектах, нужно обязательно сообщить компании. Причем неважно, столкнулся ли с этим я сам, кто-то из моих знакомых или я вычитал об этом в соцсетях.

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

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

С похожими ситуациями я сталкивался при работе с данными. Несколько раз возникала следующая ситуация: я занимаюсь пайплайном обработки данных и замечаю какой-то мелкий косяк — немного дублей или непонятные NaN. Я игнорирую эти мелкие косяки, а через несколько дней нахожу серьезную ошибку в пайплайне обработки данных. Оказывается, что всё неправильно, криво приджойнилось или что-то в таком духе. А те мелкие косяки, которые я видел за несколько дней до этого, могли бы указать на проблему раньше, если бы я обратил на них внимание.

Поэтому я стараюсь обращать внимание даже на мелкие ошибки, потому что они могут быть признаками более существенных проблем.
3
Forwarded from data hate (Artem Tserekh)
Вы наверняка знаете про компания X5 Retail Group. В нее входят Пятерочка и Перекресток. Но не все знают, что раньше этой компании принадлежала торговая сеть “Карусель”. Сейчас эта сеть закрыта, а часть магазинов переделали в Перекресток. Но когда “Карусель”, еще не объявила о своем закрытии я там работал DS’ом в управлении, которое отвечало за целевой маркетинг. Но речь пойдет не про то, как там работалось.

Я как-то лазил по корпоративному порталу и наткнулся на интересную страницу. На ней были регулярно обновляющие фотографии из столовой. По сути это было видео с fps один кадр в 2-3 секунды, но реализовано это было в виде обновляющихся фотографий.

Это была еще доковидная эпоха. Поэтому я ходил в офис, обедал в столовой. В столовой были очереди. Неплохо было бы иметь телеграм бот, который бы информировал об очередях.

Тогда я написал скрипт, который забирает эти картинки с корпоративного портала. Я взял готовую модель, распознающую людей на фото. Все это запустил в бесконечном цикле и добавил сохранения в postgres. Потом я добавил график в Tableau и все готово. До прогноза очередей я не добрался. В телегу из корпоративной сети просто так писать нельзя поэтому я остановился только на сборе данных.

Особо интересных инсайдом не было. Самый большой пик посещаемости был в обед. Еще один поменьше - утром. От погоды зависимости я не обнаружил.
Forwarded from data hate
Как-то давно Яндекс проводил митам, где собирался рассказывать про беспилотники. Даже обещал что-то показать. Из-за ажиотажа и нежелания того, чтобы на митап попали журналисты было тестовое задание. Причем в отличие от других митапов Яндекса это были не совсем простые вопросы на 5 минут, а достаточно сложная задача.

Заключалась она в следующем. Есть “игра” или “среда”, которая представляет собой двумерное поле из клеток. Есть клетки, по которым можно двигаться, есть стены, через которые нельзя двигаться. В этом пространстве двигается ровер - робот доставщик. На поле спавнятся заказы. Эти заказы нужно было быстро доставлять. Чем быстрее доставил, тем больше очков получил. Если не успел доставить заказ за указанное время, то получил 0 очков. Это соревнование проводилось на платформе Яндекс.Контест. Топ N участников по очкам попадали на митап.

Как решать задачу? Для начала нужно представить поле в виде графа. А дальше уже дело техники. Проблема была в том, что из библиотек был только pandas и numpy и ничего для графов. Не было у них библиотеки networkx или аналога. Нужно было писать самому. Пришлось залезть в исходники networkx и по их мотивам реализовать граф и поиск кратчайшего пути. В итоге я написал свой mini-networkx и реализовал свой бейзлайн для движения ровера. Проходили не все тест кейсы, где-то падал по времени, где-то алгоритм ломался при нескольких одновременных заказах. Но где-то в топе я оказался. Кто написал мне на почту с предложением купить этот код. Но я не продался.

В итоге я попал в заветные топ N, но не смог пойти на митап, так как уехал в Сочи.
Forwarded from data hate
Есть такая библиотека pandas-profiling. Её суть в том, что ты берешь датафрейм и она выдает тепе EDA, то есть графики, гистограммы картинки про этот датафрейм по одному клику. Как понятно из названия датафрейм, который она принимает на вход - это pandas dataframe.

Много лет назад я искал аналог для spark'a. Тогда я обнаружил заглушку для библиотеки с названием spark-profiling https://pypi.org/project/spark-profiling. Там было написано To be released. С тех пор я каждые пол года захожу на эту страницу. Жду хоть каких-то обновление. а там все так же:

Released: Apr 27, 2020
Project denoscription: To be released
Forwarded from data hate
Продолжение истории с одного из прошлых мест работы.
Суббота, день. Я бегу по беговой дорожке. Не думаю о работе, погрузился в свои мысли, смотрю на солнечный пейзаж в окне. И тут получаю сообщение от бота c алертами. Проблема при монтировании вольюма. И не просто сообщение, а сообщение, которое тегает меня. А теганье через @ продировается через все мьюты. И ты не можешь его не заменить.

В итоге я вышел из этого чата с алертами. Потом правда пришлось незаметно возвращаться, но это уже другая история.

Я прочитал в одном курсе про system design очень важные слова. Алертинг - это всегда призыв к действию. Иначе он не нужен. Как же это точно. Зачем мне этот алерт. Я не шарю что этот алерт значит, надо ли что-то чинить. А если и надо, то я не смогу, потому что я занимаюсь своими делами, И не должен потому что этом мой выходной. А дежурства тогда у нас не были предусмотрены.
Forwarded from data hate
Случай с одного из прошлых мест работы. У нас был пайплан в airflow, который работал каждый час. Однажды у нас этот пайплан сломался. Я уже не помню почему - главное что упал прод. Узнали мы о том, что все упало только в воскресенье. То есть спустся 2 дня. Почему-то не сработал мониторинг, который должен был написать нам в телеграм, что все плохо.

Не сработал он из-за того, что в процессе нижнее подчеркивание сломало сообщение об ошибки. А появилось это сообщение из-за того, что у нас появился новый сотрудник с _ в нике в телега. А в критичных случаях телеграм бот должен тегал всех DS'ов.

Потом я этому коллеге в шутку написал: "из-за тебя сломался мониторинг"
Forwarded from data hate
На 2 курсе бакалавриата у нас был выбор: пойти на обычное программирование или на интересное. В интересном было много курсов, и я выбрал программирование на LabVIEW. LabVIEW - язык программирования на основе блок диаграмм. Но его главная особенность - возможность быстро подключиться к любой железке и быстро набросать интерфейс для взаимодействия с ней. В конце курса каждый студент должен был сделать проект. Мой проект назывался “задача слежения”. Заключалась она в следующем. Имелась камера Logitech Orbit. Она могла поворачиваться влево вправо и наклоняться вверх вниз.

Можно попробовать выбрать объект и следить за ним. Если он не в центре, то необходимо повернуть камеру в нужную сторону. Сегодня эта задача не звучит сложной, но как это сделать если на дворе 2013 год, а код нужно писать на языке LabVIEW. К счастью, все не так плохо, как кажется. Была готовая библиотека, которая по небольшой картинке находит расположение максимально похожее на заданное изображении. За давностью лет я не помню как она работала, но там точно и речи не шло про нейронные сети.

Еще удалось реализовать фичу расчета расстояния от камеры до точки. Делалась это на основе того как смещалось положение объекта в кадре в зависимости от ворота камеры. Тут с со слежением было попроще, потому что окружение объекта не двигалось, а менялся только ракурс. Из-за сильного люфта была очень большая погрешность измерения расстояния. Но отличить 30 см от 1 метра, и метр от 3 метров было реально.

С тех пор к языку LabVIEW больше никогда не возвращался, но еще долго писал его в резюме.
Forwarded from data hate
Есть фраза от которой у меня все полыхает внутри: “История не терпит сослагательного наклонения”. Мол, зачем задумываться, что было бы если бы Наполеон не напал, если бы мы не победили в Сталинградской битве и т.д. Это не случилось вот мы и не знаем, что бы было поэтому и не стоит про это говорить.
Кто там не должен терпеть? Давайте посмотри на определение истории как науки.

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

Как сделать выводы о причинах событий не рассуждая о том куда бы все пришло, если бы не все сложилось иначе. Посмотрим например на Сталинградскую битву. Что было бы если бы мы её проиграли? Предположим, что тогда мы бы проиграли войну. Тогда делаем вывод о причине события: война выиграна, в том числе, благодаря победе в этой битве.
Или если мы считаем, что и без этого была бы одержана победа, то мы вычеркиваем эту битву из причин победы в войне.

Это чем-то похоже на методы оценки экономических эффектов, даже при отсутствии AB теста. Это непросто. Приходится опираться на некоторые предположения и делать допущения. Но можно употребить сослагательное наклонение и сказать, к примеру, если бы не эта рекламная кампания, то продажи были бы такие. Это ничем принципиально не отличается от если бы в истории.