Data science. 1С и Python

27.11.22

Разработка - Языки и среды

Это вторая статья из серии Data science. Почему Python? Зачем он может понадобиться 1С-нику.

Для начала ответим на вопрос: зачем нам может понадобиться Python. В предыдущей статье  Data science. Начало (infostart.ru) мы применили регрессионный анализ и построили дерево решений для того, чтобы получить оценку стоимости объекта недвижимости. Мы использовали штатный объект платформы под названием "АнализДанных". Путем некоторых ухищрений нам удалось немного повысить точность прогноза.

Язык программирования Python считается одним из обязательных инструментов для специалистов в области Data science и Data engineering. Попробуем использовать его для решения нашей задачи. Хорошая новость заключается в том, что вам не потребуется что-то скачивать и разбираться с установкой. Облачная среда разработки доступна всем и каждому. Регистрируетесь на Kaggle и создаете т.н. "notebook". 

 

 

Добавляете набор данных. В нашем случае это будет iowa-house-prices. И ваша среда разработки готова 

 

 

Напомню, что в прошлый раз мы начали с того, что построили прогноз, используя 7 колонок из исходных данных. В 1С это выглядело так:

//получение данных
	Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("ИсходныеДанные");
	ТЗМодель=новый ТаблицаЗначений;
	ТЗМодель.Колонки.Добавить("ПлощадьУчастка");
	ТЗМодель.Колонки.Добавить("ГодПостройки");
	ТЗМодель.Колонки.Добавить("Площадь1этажа");
	ТЗМодель.Колонки.Добавить("Площадь2этажа");
	ТЗМодель.Колонки.Добавить("КоличествоПолныхСанузлов");
	ТЗМодель.Колонки.Добавить("КоличествоСпален");
	ТЗМодель.Колонки.Добавить("КоличествоКомнат");
	ТЗМодель.Колонки.Добавить("Цена");
	ТЗПрогноз=ТЗМодель.Скопировать();
	для й=2 по Макет.ВысотаТаблицы цикл
		нстр=ТЗМодель.Добавить();
		нстр.ПлощадьУчастка=число(Макет.Область(й,5).Текст);
		нстр.ГодПостройки=число(Макет.Область(й,20).Текст);
		нстр.Площадь1этажа=число(Макет.Область(й,44).Текст);
		нстр.Площадь2этажа=число(Макет.Область(й,45).Текст);
		нстр.КоличествоПолныхСанузлов=число(Макет.Область(й,50).Текст);
		нстр.КоличествоСпален=число(Макет.Область(й,52).Текст);
		нстр.КоличествоКомнат=число(Макет.Область(й,55).Текст);
		нстр.Цена=число(Макет.Область(й,81).Текст);
		если й<11 тогда
			нстрпрогноз=ТЗПрогноз.Добавить();
			ЗаполнитьЗначенияСвойств(нстрпрогноз,нстр);
		конецесли;	
	конеццикла;
	
	//подготовка
	Анализ=новый АнализДанных;
	Анализ.ТипАнализа=Тип("АнализДанныхДеревоРешений");
	Анализ.ИсточникДанных=ТЗМодель;
	Анализ.Параметры.ТипУпрощения.Значение=ТипУпрощенияДереваРешений.НеУпрощать;
	РДерево=Анализ.Выполнить();
	
	//прогноз
	Прогноз=РДерево.СоздатьМодельПрогноза();
	Прогноз.ИсточникДанных=ТЗПрогноз;
	Результат=Прогноз.Выполнить();
	
	//визуализация
	ТабДок.Очистить();
	ТабДок.УстановитьРастягиваниеПоГоризонтали(Истина);
	для й=1 по Результат.Колонки.Количество()-1 цикл
		ТабДок.Область(1,й).Текст=Результат.Колонки[й-1].Имя;
		ТабДок.Область(1,й).Шрифт=Новый Шрифт(ТабДок.Область(1,й).Шрифт, ,, Истина);
	конеццикла;
	для й=1 по Результат.Количество() цикл
		для ы=1 по Результат.Колонки.Количество()-1 цикл
			ТабДок.Область(й+1,ы).Текст=строка(Результат[й-1][ы-1]);
		конеццикла;
	конеццикла;

 

В Python все то же самое выглядит несколько более компактно:

import pandas as pd
from sklearn.tree import DecisionTreeRegressor

iowa_file_path = '../input/iowa-house-prices/train.csv'

home_data = pd.read_csv(iowa_file_path)
feature_names = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = home_data[feature_names]
y = home_data.SalePrice
iowa_model = DecisionTreeRegressor()
iowa_model.fit(X, y)

print(iowa_model.predict(X.head()))
print(y.head().tolist())

 

Но, на самом деле, особой разницы здесь нет. Мне просто лень было писать мало-мальски красивую визуализацию результатов. Я ограничился всего двумя строчками:

print(iowa_model.predict(X.head()))
print(y.head().tolist())

Не так уж и принципиально, сколько строк уходит на выделение 7 колонок. Если оставить саму суть, а именно подготовку модели и прогноз, то в 1С это выглядит так:

 

    //подготовка
	Анализ=новый АнализДанных;
	Анализ.ТипАнализа=Тип("АнализДанныхДеревоРешений");
	Анализ.ИсточникДанных=ТЗМодель;
	Анализ.Параметры.ТипУпрощения.Значение=ТипУпрощенияДереваРешений.НеУпрощать;
	РДерево=Анализ.Выполнить();
	
	//прогноз
	Прогноз=РДерево.СоздатьМодельПрогноза();
	Прогноз.ИсточникДанных=ТЗПрогноз;
	Результат=Прогноз.Выполнить();

А в Python так:

iowa_model = DecisionTreeRegressor()
iowa_model.fit(X, y)

print(iowa_model.predict(X.head()))

Ну да, компактнее, но самое интересное впереди.

Как отмечалось в прошлый раз, такой анализ полностью бесполезен, потому что модель подготавливается и проверяется на одних и тех же данных. Когда данные попадают в руки дата-сатанистасаентиста, он первым делом делит их на две части. В 1С мы делали это так:

	МодельСтроки=новый массив;
	ГСЧ=новый ГенераторСлучайныхЧисел(1969);
	й=0;
	пока й<цел(Макет.ВысотаТаблицы/2) цикл
		сч=ГСЧ.СлучайноеЧисло(2,Макет.ВысотаТаблицы);
		если МодельСтроки.Найти(сч)=неопределено тогда
			МодельСтроки.Добавить(сч);
			й=й+1;
		конецесли;
	конеццикла;
	для й=2 по Макет.ВысотаТаблицы цикл
		если МодельСтроки.Найти(й)=неопределено тогда
			нстр=ТЗПрогноз.Добавить();
		иначе
			нстр=ТЗМодель.Добавить();
		конецесли;
...

В Pyton это будет ровно одна строка

train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 1)

Нет, вру. В случае если вы решили быть аккуратным и не грузить библиотеки целиком, то в начале надо будет загрузить соответствующий раздел библиотеки sklearn

from sklearn.model_selection import train_test_split

Для понимания того, насколько точен оказался наш прогноз, мы рассчитывали т.н. среднюю абсолютную ошибку, MAE, mean absolute error

СуммаОшибок=0;
для каждого стр из Результат цикл
	СуммаОшибок=СуммаОшибок+макс(стр.Цена-стр.ЦенаПрогнозЗначение,стр.ЦенаПрогнозЗначение-стр.Цена);
конеццикла;
СредняяАбсолютнаяОшибка=СуммаОшибок/Результат.количество();

В Python это опять же одна строка кода и одна строка подключения раздела библиотеки

from sklearn.metrics import mean_absolute_error

...

val_mae = mean_absolute_error(val_y,val_predictions)

Полный листинг на Python будет выглядеть так:

import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error

iowa_file_path = '../input/iowa-house-prices/train.csv'

home_data = pd.read_csv(iowa_file_path)
feature_names = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = home_data[feature_names]
y = home_data.SalePrice

train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 1)

iowa_model = DecisionTreeRegressor(random_state = 1)
iowa_model.fit(train_X, train_y)
val_predictions = iowa_model.predict(val_X)
val_mae = mean_absolute_error(val_y,val_predictions)
print(val_mae)

 

 

Становится интереснее, но учтите, что это даже не верхушка айсберга, это снежинка на верхушке айсберга! 

В прошлый раз нас не устроило качество предсказания и мы стали искать способы его улучшить. Напомню, что мы пытались найти наилучшее дерево путем перебора всевозможных  значений количества листьев в одном узле. Мы не будем здесь воспроизводить это решение, потому что есть идеи получше. Вместо того, чтобы искать одно идеальное дерево, мы создадим целый лес деревьев решений и будем использовать для прогноза усредненное значение по всему лесу. Вы можете сами прикинуть, как это сделать в 1С, используя все тот же АнализДанных. Что бы мы ни понаписали в 1С, в Python это уложится, по сути, в одну строку:

rf_model = RandomForestRegressor(random_state = 1)

Полный листинг с загрузкой данных, разделением на части, подготовкой, прогнозированием и выводом результата выглядит так:

import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
from sklearn.ensemble import RandomForestRegressor

iowa_file_path = '../input/iowa-house-prices/train.csv'

home_data = pd.read_csv(iowa_file_path)
feature_names = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = home_data[feature_names]
y = home_data.SalePrice

train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 1)

rf_model = RandomForestRegressor(random_state = 1)
rf_model.fit(train_X,train_y)
rf_val_mae = mean_absolute_error(val_y, rf_model.predict(val_X))

print(rf_val_mae)

 

Но и это еще не все.

То, что я показывал до сих пор, считается учебным материалом. Эти методы слишком просты и не используются в реальной работе. То, что применяется на практике, намного более изощренно, хотя и основывается все на тех же деревьях и лесах деревьев. В конце прошлой статьи я обращал ваше внимание на то, что мы использовали 7 колонок для предсказания, но в исходных данных у нас их вообще-то 80. И тут есть над чем поработать. Один из актуальных алгоритмов работает следующим образом. Берутся все колонки (тут есть один нюанс, но о нем позже). Строится лес деревьев. Вычисляется отклонение. Затем по определенному принципу меняется "вес" той или иной колонки, снова строится лес деревьев и процесс повторяется. Точность прогноза увеличивается шаг за шагом. В DS это называется "бустинг". Сначала появился т.н. градиентный бустинг (или градиентный спуск), а потом XGBoost. Последняя библиотека (XGBoost) в настоящее время считается рабочим инструментом специалиста DS. Внутри у нее серьезная математика: ряды Тейлора, метод Ньютона-Рафсона. В библиотеке, как водится, больше 10 тысяч строк кода (можете сами заглянуть на Git, библиотека, разумеется, открыта). И если простой лес деревьев все еще можно было бы написать на 1С. То в случае с XGBoost это было бы нелепо. Для программиста на Python, как вы уже наверное догадались, все снова сводится к одной строке 

my_model = XGBRegressor(random_state=0)

В полном виде работающий код для нашего набора данных будет выглядеть так:

import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
from sklearn.ensemble import RandomForestRegressor
from xgboost import XGBRegressor

X = pd.read_csv('../input/iowa-house-prices/train.csv', index_col='Id')
X_test_full = pd.read_csv('../input/iowa-house-prices/test.csv', index_col='Id')

X.dropna(axis=0, subset=['SalePrice'], inplace=True)
y = X.SalePrice              
X.drop(['SalePrice'], axis=1, inplace=True)

X_train_full, X_valid_full, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2,
                                                                random_state=0)

low_cardinality_cols = [cname for cname in X_train_full.columns if X_train_full[cname].nunique() < 10 and 
                        X_train_full[cname].dtype == "object"]

numeric_cols = [cname for cname in X_train_full.columns if X_train_full[cname].dtype in ['int64', 'float64']]

my_cols = low_cardinality_cols + numeric_cols
X_train = X_train_full[my_cols].copy()
X_valid = X_valid_full[my_cols].copy()
X_test = X_test_full[my_cols].copy()

X_train = pd.get_dummies(X_train)
X_valid = pd.get_dummies(X_valid)
X_test = pd.get_dummies(X_test)
X_train, X_valid = X_train.align(X_valid, join='left', axis=1)
X_train, X_test = X_train.align(X_test, join='left', axis=1)

my_model = XGBRegressor(random_state=0)
my_model.fit(X_train,y_train)
predictions = my_model.predict(X_valid)
mae = mean_absolute_error(predictions, y_valid)

print(mae)

 

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

Что мы имеем в итоге. Несмотря на то, что в 1С есть такой объект, как АнализДанных, пользоваться им не получится. Сейчас DS одна из самых динамичных областей в ИТ. Тут все развивается достаточно быстро и надо признать, что 1Совский АнализДанных не поспевает за ходом событий. Поэтому, если вы решили заняться DS, то вам придется освоить Python. В этой ситуации есть свои плюсы. Как по мне, так Python один из лучших языков для 1С-ника. Он достаточно прост и он дает максимум возможностей в той сфере, что, на мой взгляд, наиболее близка к 1С. Все 1С-ники так или иначе работают с данными. В сущности, если вдуматься, средний 1С-ник это практически готовый data engineer. Попробовать сделать шаг от data engineer к data scientist выглядит разумно. Задачи, которые вы будете решать в процессе обучения будут выглядеть знакомо. Данные для экспериментов у вас всегда найдутся. Так что, всем рекомендую. А я со своей стороны постараюсь находить время, чтобы делиться с вами интересными моментами на этом пути. 

См. также

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    6764    ROk_dev    56    

38

(Не) Строгая типизация 1С

Языки и среды Платформа 1С v8.3 Бесплатно (free)

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    4205    SeiOkami    21    

55

Простое приложение на Dart

Языки и среды Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    3188    acvatoris    6    

13

Статический анализатор кода 1С на Си

Языки и среды Платформа 1С v8.3 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    2982    prohorp    15    

12

Сквозная задача на Исполнителе - часть первая (IMAP)

Языки и среды Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    1892    0    kembrik    2    

7

1С# - Расширяем код 1С кодом на C#

Языки и среды Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Вставки кода на C# внутри кода на 1С.

7 стартмани

07.04.2023    9282    4    SerVer1C    56    

43

Независимая разработка совместимых компонент на ORM 1С – миф или истина где-то в аннотациях Java?

Языки и среды Платформа 1С v8.3 Бесплатно (free)

При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.

13.03.2023    1024    1CUnlimited    0    

2

xPath в 1С

Файловый обмен (TXT, XML, DBF), FTP Языки и среды Платформа 1С v8.3 Бесплатно (free)

Опыт работы методами языка xPath в 1С.

04.03.2023    4932    DemetrKlim    40    

46
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3033 28.11.22 00:33 Сейчас в теме
По тексту понятно, что на 1С нихрена толком не посчиталось, а на питоне все выстрелило. Остается вопрос: а где картинки? )))

ЗЫ: ну как бы это и так было с самого начала ясно, что все эти объекты нах никому в 1С не нужны, иначе их бы юзали с утра до вечера.
ubnkfl; Glonas73; pav249683; smit1c; maksa2005; Lemmonbri; kondrp; alabait_dnp; DERL; pavlov_dv; sapervodichka; +11 Ответить
3. mkalimulin 1148 28.11.22 07:54 Сейчас в теме
(1) Я думал, что вам самим будет интересно позапускать. Но раз народ просит, картинки добавил, смотрите
А что касается того, нужны ли объекты 1С. Тут как посмотреть. Если бы их юзали с утра до вечера, тогда может быть у них бы тот же XGBoost уже стоял внутри. У этой библиотеки сейчас есть реализации не только на Python но и на С, на Java и т.д. Собственно, она и была изначально написана на C.
36. VKuser924421 29.11.22 10:57 Сейчас в теме
(1) Объекты 1С по прогнозированию очень даже ничего (смотря что прогнозировать):
https://habr.com/ru/post/555066/
2. evgen7938 14 28.11.22 07:31 Сейчас в теме
Здравствуйте!
Тема правильная и очень перспективная. А кто уже сейчас внедряет машинное обучение в ваши процессы? Сколько нас? Как объясняли пользу другим участникам процесса? Что получилось по итогу? Как выделяли результат от оптимизации? Какие интересные кейсы есть?
4. mkalimulin 1148 28.11.22 08:16 Сейчас в теме
(2) Добрый день!
Я сам занялся этой темой несколько месяцев назад. Сейчас в стадии обучения (без отрыва от производства, как водится). Делюсь с коллегами тем, что мне кажется интересным. С удовольствием расскажу о своих кейсах, как только они появятся
marinelle; +1 Ответить
5. evgen7938 14 28.11.22 08:50 Сейчас в теме
(4) тоже по программе 2035 обучаетесь?
6. mkalimulin 1148 28.11.22 09:07 Сейчас в теме
(5) Нет, я больше на английском. Kaggle, курс от IBM. Там как-то понятнее
7. muskul 28.11.22 09:20 Сейчас в теме
(2)А кто уже сейчас внедряет машинное обучение в ваши процессы

на хабре естьклассная статья как внедрили машинное обучение при разгрузке вагонов металолома. вот там прям респект ребятам
8. mkalimulin 1148 28.11.22 09:21 Сейчас в теме
(7) Интересно. Ссылку дадите?
10. mkalimulin 1148 28.11.22 09:32 Сейчас в теме
24. VKuser924421 28.11.22 16:46 Сейчас в теме
(2) Клепаю свой продукт торговли на Московской Бирже. 1С+Python. В свободное от 1С время залипаю на машинном обучение Python
https://vk.link/tradespeculator
В принципе много интересного
11. kser87 2438 28.11.22 10:22 Сейчас в теме
ничего не понятно, но очень интересно=) знаний мне конечно не хватает. Хотя математику очень любил в молодости
19. mkalimulin 1148 28.11.22 13:04 Сейчас в теме
(11) Тут вообще нет математики. Вся математика "под капотом", в библиотеках
12. strelec13 20 28.11.22 11:27 Сейчас в теме
1С-ник применивший питон в своем коде, а то и во всех базах организации и уволился. И ... головная боль руководству организации ищи не только 1С-ка, но еще знающего питона. Нашли такого, а его не устроили условия работы или сама организация, как бывает и в не темы применения питона. Пока не догадаются временно пригласить знатока питона (если найдут такого) , кто бы удалил питона из кода и повысить шанс найти вообще на постсоянно 1С-ка . Или сядут на иглу услуг франчайзи.
websamson; lunjio; +2 Ответить
13. dvsidelnikov 64 28.11.22 11:46 Сейчас в теме
(12) Проблемы индейцев шерифа не волнуют =)
zakiap; starik-2005; +2 Ответить
15. booksfill 28.11.22 11:58 Сейчас в теме
(12)
1С-к - не знал питон, поэтому ничего не сделал с анализом и уволился
1С-к - знал питон, сделал анализ, но не оставил никаких концов, для тех кто его не знает - ни что сделано, ни почему, ни как этот код вызывать
И уволился.
1С-к - знал питон, сделал анализ и оставил достаточно подробные инструкции, для тех, кто даже не зная питон, может что-то со всем этим сделать.
И уволился.

Мне нравится вариант 3. А вам?

Кстати, стандартный вариант - 2. Правда "уволился" надо заменить на "а концов и не было".
Компонента печати штрих-кода, драйверы работы с ККТ - хорошие примеры. Живем же как-то.

Единственное, что я так и не понял, чем так уж хорош именно пион и почему именно его надо учить для data scientist. Потому, что "так сказал преподаватель"? Даже в примере вся суть в библиотеке, работающей и под другими языками. Ну, давайте тогда скажем, что надо учить FORTRAN, с его богатыми мат. библиотеками.
16. strelec13 20 28.11.22 12:08 Сейчас в теме
(15) 3й вариант, если "оставил достаточно подробные инструкции". А Вы оптимист.
Рамзес; +1 Ответить
40. lunjio 66 29.11.22 15:03 Сейчас в теме
(16) Поверил бы в - оставил хоть какие-нибудь комментарии ) ведь они для этого и существуют
18. mkalimulin 1148 28.11.22 13:02 Сейчас в теме
(15) Потому что все самое свежее в области DS появляется в Python. Ну, еще в R. Но R более экзотичен, и будет более непривычен для 1С-ника
26. starik-2005 3033 28.11.22 19:44 Сейчас в теме
(15)
чем так уж хорош именно...
Автор так и не смог пояснить в статье, почему питон лучше 1Са. Даже попытки не сделал. А картинки, которые он вставил - это что? Ошибка? Или прогноз?
В действительности, картинка должна быть такая: анализ и прогноз на 1С слева, анализ и прогноз на питоне справа. Вот это уже картинка, а просто какие-то цифры - это вообще ниочем.
28. mkalimulin 1148 28.11.22 19:50 Сейчас в теме
(26) На картинке "ошибка", разумеется. MAE, mean absolute error. И это как раз "о чем". А десять тысяч строк справа-слева неудобны.
41. lunjio 66 29.11.22 15:08 Сейчас в теме
(26) Зачем их сравнивать ? 1С скорее надо рассматривать как платформу, для построения бизнес приложений, ориентированных на бизнес. Узкая специализация, никаких вам интерфейсов. Автор лишний раз потратил время, чтобы подтвердить описание 1С от самой фирмы в желтых книжках.
25. starik-2005 3033 28.11.22 19:41 Сейчас в теме
(12) Так ща приличного питониста найти проще, чем даже неприличного 1С-нега. Не?
35. strelec13 20 29.11.22 10:48 Сейчас в теме
(25) Так ща приличного питониста найти проще да, если приличный питонист не знает 1С. Не?
37. starik-2005 3033 29.11.22 12:00 Сейчас в теме
(35) А как тут 1с фигурирует? Это просто одна из систем, которая поставлыет данные. Приличный питонист работает с данными, а не с 1С - ему должно быть фиолетово, откуда они презжают в JSON.
48. strelec13 20 30.11.22 14:21 Сейчас в теме
(37) Если читали изначально мой диалог с автором, то дело как раз в питонистах разбирающихся в 1С, что бы после увольения питониста, который навоял в базах организации , руководство нашло хотя бы временно питониста с 1С, который бы удалил этот код и потом проще бы нашли 1С-ка без знаний питона. Иначе найди приличного питониста да еще знающего 1С, что бы он продолжил воять на питоне в базах на платформе 1С.
49. starik-2005 3033 30.11.22 14:38 Сейчас в теме
(48)
(48)
воaять на питоне в базах на платформе 1С
А зачем ваять на платформе 1С в питоне? Вот есть какая-нить виртуалка, на ней какой-нить докер с продкутовым питоном, там и "ваяет" питонист (даже не там, а у себя где-то без привязки к лицухе 1С, закидывая в гит изменения, которые дженкинс деплоит в продуктовый докер), не лазя в 1С. 1С ему поставляет данные для анализа. Сегодня они анализируют по десятку параметров, завтра по сотне, послезавтра по тысяче. В итоге меняется только JSON, который 1С поставляет на какой-нить порт какой-нить машины, а после анализа эта машина возвращает JSON с ответом. Не надо ничего усложнять.
Такой питонист может быть вообще кем угодно, жить где угодно, делать помимо этого вот анализа этому вот клиенту кучу всего другого, никак не связанного. Ему прилетает задача о новом списке параметров для того, чтобы проверить очередную гипотезу. Он проверяет, пропуская по разным вариантам, исследует, рассказывает, что получилось, где лучше, где так себе. В итоге в продуктовую базу едет согласованный метод с согласованными полями и согласованным ответом. "Что тебе еще, собака, надо" (с) )))
61. websamson 306 09.02.23 09:25 Сейчас в теме
(12) ну можно стать Незаменимым (без кавычек) специалистом и назначать себе ЗП :)
14. quazare 3586 28.11.22 11:50 Сейчас в теме
Напишите, какую среду разработки Питон используете? Вроде я не увидел.
17. mkalimulin 1148 28.11.22 13:00 Сейчас в теме
(14) Написал в самом начале статьи. Kaggle. Облачная среда от Google
20. kser87 2438 28.11.22 13:30 Сейчас в теме
(19) нужно умение применять методики и трактовать результаты анализа.
21. mkalimulin 1148 28.11.22 13:37 Сейчас в теме
(20) Совершенно верно. А чтобы это умение появилось, надо решать рабочие задачи
22. kser87 2438 28.11.22 13:40 Сейчас в теме
(21) как и везде. Нужна практика. Ну и без знаний математики никуда
27. starik-2005 3033 28.11.22 19:48 Сейчас в теме
(22)
Ну и без знаний математики никуда
Знаете, когда я в универ пришел работать, то я даже арифметику плохо знал. Лаборатория, в которой я кодил, занималась дендрохронологией. Так вот на освоение математики временных рядов мне потребовалось пару дней всего. Там вообще было пять разных функций: корреляция (из нее автокорреляция), дисперсия/стандартное отклонение, чувствительность, коэффициент синхронности - вроде даже все. Потом во флористике от коэффициента Жаккара до Сьеренса-Чекановского, но это все тоже в виде формулы, которую просто нужно уметь читать - про это рассказывают классе в пятом, а может и раньше.

Т.е. вся эта "математика" - это просто номенклатура понятий. В современном датасьенсе даже не парятся, на сколько ряд подходит для той или иной функции -просто жгут напалмом, мало понимая, что ряды с низкой чувствительностью генерируют более высокие ошибки при анализе и сопоставлении с трендами - в них невысокий разброс значений. И вся эта датасьенс сходится к максимум десятке коэффициентов, которые показывают характеристику ряда и способность его к тем или иным подвигам.
JohnyDeath; kser87; +2 Ответить
34. kser87 2438 28.11.22 23:55 Сейчас в теме
(27) что-то такое и я предполагал. но не хочется быть обезьяной с гранатой
23. gybson 28.11.22 14:36 Сейчас в теме
Проще наверное сразу на гугл и идти

https://colab.research.google.com/
29. mkalimulin 1148 28.11.22 19:52 Сейчас в теме
(27) Дендрохронология - крутая штука. Она Фоменко уделала
30. SerVer1C 748 28.11.22 22:23 Сейчас в теме
Простите, конечно, на как тут связаны 1С и Python ? Было бы неплохо, если, например, в коде 1с можно было бы писать скрипты на питоне (а-ля вставки асма в коде на си)
31. mkalimulin 1148 28.11.22 23:01 Сейчас в теме
(30) Да, было бы неплохо. Но у разработчиков платформы до этого руки пока еще не дошли. Поэтому берете данные из 1С, превращаете их в CSV и кормите этим змейку
60. pm74 199 12.12.22 16:20 Сейчас в теме
(31)
берете данные из 1С, превращаете их в CSV и кормите этим змейку
проще http сервис поднять
32. xlmel 28.11.22 23:03 Сейчас в теме
Делаете на Python модель данных, сохраняете ее на диске, на Flask делаете мини веб-приложение с 2 методами: 1-й переобучает модель, 2-й использует ее. После этого на Web-сервере разворачиваете это приложение и дергаете из 1С обычными get или post запросами, передавая параметры в запросе. У меня получалось раза в 3-4 быстрее, чем запускать Python, положив файл с данными на диск, и затем считывать данные из выходного файла. Я связал таким образом 1С и Python.
33. mkalimulin 1148 28.11.22 23:19 Сейчас в теме
(32) Через память оно всегда быстрее, годный метод. Если Web-сервер не пугает
50. swimdog 765 30.11.22 18:21 Сейчас в теме
(33) А как веб-сервер может напугать? Ставится как обычная программа. Потом базу зарегистрировал на нем и вперед.
51. xlmel 01.12.22 09:31 Сейчас в теме
(50)Никакую базу регистрировать не нужно. Нужно создать веб АПИ на Python и из 1С обращаться к методам этого АПИ
38. xlmel 29.11.22 12:51 Сейчас в теме
Главная проблема - слишком много времени для построения хорошей модели. Я не видел четких рецептов, что если задача такая, то нужно использовать такую модель с такими настройками. Я использовал и логистическую регрессию, и метод k-ближайших, и Случайный лес, и градиентный бустинг и даже нейронные сети. Каждая из моделей имеет несколько параметров, которые нужно устанавливать. В зависимости от них у Вас будет разниться решение. И определить лучшие параметры и лучшую модель можно только практикой. Если у Вас 3 входных параметра, а для каждого будет по 10 дискретных значений, то в итоге 1000 вариантов. И никто Вам не скажет, какой набор лучше. В итоге приходится запускать перестроение модели и затем проверку результатов. А еще и разные виды моделей. Кроме того, есть еще одна проблема - в большинстве случаев не так много данных для построения модели. На ютубе как-то видел ролик, в нем рассказывали, что на Озоне построили модель с 170 входными параметрами для определения закупки. Они как-то интерпретировали договора с контрагентами и условия договоров, взаимодействия с банками. В итоге система ночью готовила заявки на закупку менеджерам у того поставщика, условия с котором лучшие. В простых компаниях скорее всего подготовить серьезный набор данных для обучения не получится.
На практике же, скорее всего какое-то прогнозирование продаж возможно, если есть какая-то периодичность. Но из-за пандемии и войны опираться на данные 2018 и 2019 нельзя. Да и эти 3 года не очень прогнозируются для простых компаний. Во всяком случае, у меня все прогнозные модели пока что ждут лучших времен.
39. mkalimulin 1148 29.11.22 12:55 Сейчас в теме
(38) Можно ведь не зацикливаться на прогнозах. DS несколько шире. Иногда точность вообще не нужна. Достаточно того, что мы выявили связь, о которой до этого никто не думал
42. xlmel 29.11.22 16:09 Сейчас в теме
Ну я занимаюсь программированием не ради академического интереса, а ради зарабатывания денег. Увы, но в большинстве случаев для руководителей предприятий все это машинное обучение не интересно и платить за это не очень хотят.
VasilyErmak; +1 Ответить
43. mkalimulin 1148 29.11.22 18:08 Сейчас в теме
(40) Data scientist уже лет 6 как считается sexiest job. И это не какой-то дядя аналитик говорит, это glassdoor (можно сказать, глас народа).
Бум на DS просто пока еще не докатился до нас. Но судя по тому, что "крупняк" уже во всю балуется этим, бум не за горами. Вы совершенно правы в том, что терять голову не стоит, но и смотреть по сторонам и оценивать ситуацию тоже было бы неплохо.
Руководители не хотят платить за DS? А что вы можете им предложить? Вы же ничего не знаете. Говоря "вы", я не вас лично имею ввиду, а 1С-ника собирательно. Я сам, хоть и потратил уже какое-то время на изучение DS, не знаю почти ничего. Но лично для меня это стимул - узнать как можно больше
54. TerveRus 05.12.22 15:51 Сейчас в теме
(43) есть примеры задач для бизнеса? За что платят DS-у? Вот прям каждый день, чтобы в штат взять?

Обычно делаются отчеты под требования бизнеса, а цифры анализируют финансисты/аналитики/топ менеджеры, а никак не Вася из ИТ-отдела.

Опять же, если есть специализированный сотрудник, то это его работа данными оперировать и анализировать. При чем тут абстрактный DS? Типа спец по любым данным?
58. mkalimulin 1148 05.12.22 16:47 Сейчас в теме
(54) Самому интересно найти ответ на этот вопрос
44. xlmel 29.11.22 18:38 Сейчас в теме
Да я не отговариваю Вас. Я считаю, что необходимо стремиться знать больше. Я просто, опираясь на опыт, сказал, что это требует очень много времени и усидеть на 2 стульях вряд ли удастся. Тут или быть программистом 1с или анализировать данные. А будучи программистом 1с очень тяжело продать кому-то дата сайенс
45. mkalimulin 1148 29.11.22 18:44 Сейчас в теме
(44) Не могу согласиться. Быть программистом 1С и game девелопером, наверное, действительно сложно. А 1Сник, как я говорил в статье, уже готовый Data Engineer. Ему в самый раз двигаться в сторону DS
55. TerveRus 05.12.22 15:52 Сейчас в теме
(45) сразу станем двигаться, если этот самый DS станет кому-то нужен, кроме Яндекса и прочих мегакорпораций.
46. Global__IT 264 30.11.22 00:57 Сейчас в теме
Отличная статья. Но коллега, мне кажется Вы не совсем корректно сравниваете. Это все равно что сравнить написание отчета на чистой платформе и с использованием БСП.
Я на сколько понимаю, если бы была библиотека как на питоне. То и код был бы меньше. Разве нет?
TerveRus; +1 Ответить
56. TerveRus 05.12.22 15:53 Сейчас в теме
(46) ага, подключают сторонние библиотеки с тонной кода и функций, и хвалятся, какой Питон крутой, не то что 1С) Смешно.
57. mkalimulin 1148 05.12.22 16:47 Сейчас в теме
(56) У меня цель не похвалиться, а рассказать вам, что узнал в процессе своего самообучения. Вот есть в 1С АнализДанных. Но вам не стоит тратить на него время, потому что в настоящий момент он устарел. Это просто полезная информация без лишних эмоций. Причем, легко верифицируемая. Открываете первую статью, открываете вторую и сравниваете. Все, что там описано можно легко воспроизвести
TerveRus; +1 Ответить
59. TerveRus 05.12.22 17:24 Сейчас в теме
(57) спасибо, почитаю первую статью. Понятно, что библиотеки функций развиваются быстрее.
1С видимо сделала функции для себя, а не супер универсальные для новых профессий вне рамок 1С.

Но мой коммент про то, что сравнивать платформу и сторонние библиотеки (считай весь Инфостарт) не очень корректно)
47. mkalimulin 1148 30.11.22 07:40 Сейчас в теме
(46) Совершенно верно. Но здесь сравнение не только 1С и Python. Здесь сравнение с предыдущей статьей. Там я выдвинул тезис: "смотрите, есть же в 1С инструмент DS". А в этой уже антитезис: "извините, ошибся, нету". И объясняю почему и как дальше быть
52. 1v7 235 01.12.22 16:28 Сейчас в теме
Недавно тоже столкнулся, что надо было несколько строк написать. Очень выручила такая шпаргалка. Мало ли кому пригодится
websamson; +1 Ответить
53. mkalimulin 1148 01.12.22 17:29 Сейчас в теме
(52) Какая прелесть! Искал что-то подобное. Спасибо!
Оставьте свое сообщение