Data science. 1С и Python

Публикация № 1674393 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. starik-2005 2797 28.11.22 00:33 Сейчас в теме
По тексту понятно, что на 1С нихрена толком не посчиталось, а на питоне все выстрелило. Остается вопрос: а где картинки? )))

ЗЫ: ну как бы это и так было с самого начала ясно, что все эти объекты нах никому в 1С не нужны, иначе их бы юзали с утра до вечера.
Glonas73; pav249683; smit1c; maksa2005; Lemmonbri; kondrp; alabait_dnp; DERL; pavlov_dv; sapervodichka; +10 Ответить
3. mkalimulin 803 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 8 28.11.22 07:31 Сейчас в теме
Здравствуйте!
Тема правильная и очень перспективная. А кто уже сейчас внедряет машинное обучение в ваши процессы? Сколько нас? Как объясняли пользу другим участникам процесса? Что получилось по итогу? Как выделяли результат от оптимизации? Какие интересные кейсы есть?
4. mkalimulin 803 28.11.22 08:16 Сейчас в теме
(2) Добрый день!
Я сам занялся этой темой несколько месяцев назад. Сейчас в стадии обучения (без отрыва от производства, как водится). Делюсь с коллегами тем, что мне кажется интересным. С удовольствием расскажу о своих кейсах, как только они появятся
marinelle; +1 Ответить
5. evgen7938 8 28.11.22 08:50 Сейчас в теме
(4) тоже по программе 2035 обучаетесь?
6. mkalimulin 803 28.11.22 09:07 Сейчас в теме
(5) Нет, я больше на английском. Kaggle, курс от IBM. Там как-то понятнее
7. muskul 28.11.22 09:20 Сейчас в теме
(2)А кто уже сейчас внедряет машинное обучение в ваши процессы

на хабре естьклассная статья как внедрили машинное обучение при разгрузке вагонов металолома. вот там прям респект ребятам
8. mkalimulin 803 28.11.22 09:21 Сейчас в теме
(7) Интересно. Ссылку дадите?
10. mkalimulin 803 28.11.22 09:32 Сейчас в теме
24. VKuser924421 28.11.22 16:46 Сейчас в теме
(2) Клепаю свой продукт торговли на Московской Бирже. 1С+Python. В свободное от 1С время залипаю на машинном обучение Python
https://vk.link/tradespeculator
В принципе много интересного
11. kser87 2283 28.11.22 10:22 Сейчас в теме
ничего не понятно, но очень интересно=) знаний мне конечно не хватает. Хотя математику очень любил в молодости
19. mkalimulin 803 28.11.22 13:04 Сейчас в теме
(11) Тут вообще нет математики. Вся математика "под капотом", в библиотеках
12. strelec13 18 28.11.22 11:27 Сейчас в теме
1С-ник применивший питон в своем коде, а то и во всех базах организации и уволился. И ... головная боль руководству организации ищи не только 1С-ка, но еще знающего питона. Нашли такого, а его не устроили условия работы или сама организация, как бывает и в не темы применения питона. Пока не догадаются временно пригласить знатока питона (если найдут такого) , кто бы удалил питона из кода и повысить шанс найти вообще на постсоянно 1С-ка . Или сядут на иглу услуг франчайзи.
13. dvsidelnikov 47 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 18 28.11.22 12:08 Сейчас в теме
(15) 3й вариант, если "оставил достаточно подробные инструкции". А Вы оптимист.
Рамзес; +1 Ответить
40. lunjio 65 29.11.22 15:03 Сейчас в теме
(16) Поверил бы в - оставил хоть какие-нибудь комментарии ) ведь они для этого и существуют
18. mkalimulin 803 28.11.22 13:02 Сейчас в теме
(15) Потому что все самое свежее в области DS появляется в Python. Ну, еще в R. Но R более экзотичен, и будет более непривычен для 1С-ника
26. starik-2005 2797 28.11.22 19:44 Сейчас в теме
(15)
чем так уж хорош именно...
Автор так и не смог пояснить в статье, почему питон лучше 1Са. Даже попытки не сделал. А картинки, которые он вставил - это что? Ошибка? Или прогноз?
В действительности, картинка должна быть такая: анализ и прогноз на 1С слева, анализ и прогноз на питоне справа. Вот это уже картинка, а просто какие-то цифры - это вообще ниочем.
28. mkalimulin 803 28.11.22 19:50 Сейчас в теме
(26) На картинке "ошибка", разумеется. MAE, mean absolute error. И это как раз "о чем". А десять тысяч строк справа-слева неудобны.
41. lunjio 65 29.11.22 15:08 Сейчас в теме
(26) Зачем их сравнивать ? 1С скорее надо рассматривать как платформу, для построения бизнес приложений, ориентированных на бизнес. Узкая специализация, никаких вам интерфейсов. Автор лишний раз потратил время, чтобы подтвердить описание 1С от самой фирмы в желтых книжках.
25. starik-2005 2797 28.11.22 19:41 Сейчас в теме
(12) Так ща приличного питониста найти проще, чем даже неприличного 1С-нега. Не?
35. strelec13 18 29.11.22 10:48 Сейчас в теме
(25) Так ща приличного питониста найти проще да, если приличный питонист не знает 1С. Не?
37. starik-2005 2797 29.11.22 12:00 Сейчас в теме
(35) А как тут 1с фигурирует? Это просто одна из систем, которая поставлыет данные. Приличный питонист работает с данными, а не с 1С - ему должно быть фиолетово, откуда они презжают в JSON.
48. strelec13 18 30.11.22 14:21 Сейчас в теме
(37) Если читали изначально мой диалог с автором, то дело как раз в питонистах разбирающихся в 1С, что бы после увольения питониста, который навоял в базах организации , руководство нашло хотя бы временно питониста с 1С, который бы удалил этот код и потом проще бы нашли 1С-ка без знаний питона. Иначе найди приличного питониста да еще знающего 1С, что бы он продолжил воять на питоне в базах на платформе 1С.
49. starik-2005 2797 30.11.22 14:38 Сейчас в теме
(48)
(48)
воaять на питоне в базах на платформе 1С
А зачем ваять на платформе 1С в питоне? Вот есть какая-нить виртуалка, на ней какой-нить докер с продкутовым питоном, там и "ваяет" питонист (даже не там, а у себя где-то без привязки к лицухе 1С, закидывая в гит изменения, которые дженкинс деплоит в продуктовый докер), не лазя в 1С. 1С ему поставляет данные для анализа. Сегодня они анализируют по десятку параметров, завтра по сотне, послезавтра по тысяче. В итоге меняется только JSON, который 1С поставляет на какой-нить порт какой-нить машины, а после анализа эта машина возвращает JSON с ответом. Не надо ничего усложнять.
Такой питонист может быть вообще кем угодно, жить где угодно, делать помимо этого вот анализа этому вот клиенту кучу всего другого, никак не связанного. Ему прилетает задача о новом списке параметров для того, чтобы проверить очередную гипотезу. Он проверяет, пропуская по разным вариантам, исследует, рассказывает, что получилось, где лучше, где так себе. В итоге в продуктовую базу едет согласованный метод с согласованными полями и согласованным ответом. "Что тебе еще, собака, надо" (с) )))
14. quazare 2701 28.11.22 11:50 Сейчас в теме
Напишите, какую среду разработки Питон используете? Вроде я не увидел.
17. mkalimulin 803 28.11.22 13:00 Сейчас в теме
(14) Написал в самом начале статьи. Kaggle. Облачная среда от Google
20. kser87 2283 28.11.22 13:30 Сейчас в теме
(19) нужно умение применять методики и трактовать результаты анализа.
21. mkalimulin 803 28.11.22 13:37 Сейчас в теме
(20) Совершенно верно. А чтобы это умение появилось, надо решать рабочие задачи
22. kser87 2283 28.11.22 13:40 Сейчас в теме
(21) как и везде. Нужна практика. Ну и без знаний математики никуда
27. starik-2005 2797 28.11.22 19:48 Сейчас в теме
(22)
Ну и без знаний математики никуда
Знаете, когда я в универ пришел работать, то я даже арифметику плохо знал. Лаборатория, в которой я кодил, занималась дендрохронологией. Так вот на освоение математики временных рядов мне потребовалось пару дней всего. Там вообще было пять разных функций: корреляция (из нее автокорреляция), дисперсия/стандартное отклонение, чувствительность, коэффициент синхронности - вроде даже все. Потом во флористике от коэффициента Жаккара до Сьеренса-Чекановского, но это все тоже в виде формулы, которую просто нужно уметь читать - про это рассказывают классе в пятом, а может и раньше.

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

https://colab.research.google.com/
29. mkalimulin 803 28.11.22 19:52 Сейчас в теме
(27) Дендрохронология - крутая штука. Она Фоменко уделала
30. SerVer1C 537 28.11.22 22:23 Сейчас в теме
Простите, конечно, на как тут связаны 1С и Python ? Было бы неплохо, если, например, в коде 1с можно было бы писать скрипты на питоне (а-ля вставки асма в коде на си)
31. mkalimulin 803 28.11.22 23:01 Сейчас в теме
(30) Да, было бы неплохо. Но у разработчиков платформы до этого руки пока еще не дошли. Поэтому берете данные из 1С, превращаете их в CSV и кормите этим змейку
60. pm74 216 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 803 28.11.22 23:19 Сейчас в теме
(32) Через память оно всегда быстрее, годный метод. Если Web-сервер не пугает
50. swimdog 741 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 803 29.11.22 12:55 Сейчас в теме
(38) Можно ведь не зацикливаться на прогнозах. DS несколько шире. Иногда точность вообще не нужна. Достаточно того, что мы выявили связь, о которой до этого никто не думал
42. xlmel 29.11.22 16:09 Сейчас в теме
Ну я занимаюсь программированием не ради академического интереса, а ради зарабатывания денег. Увы, но в большинстве случаев для руководителей предприятий все это машинное обучение не интересно и платить за это не очень хотят.
43. mkalimulin 803 29.11.22 18:08 Сейчас в теме
(40) Data scientist уже лет 6 как считается sexiest job. И это не какой-то дядя аналитик говорит, это glassdoor (можно сказать, глас народа).
Бум на DS просто пока еще не докатился до нас. Но судя по тому, что "крупняк" уже во всю балуется этим, бум не за горами. Вы совершенно правы в том, что терять голову не стоит, но и смотреть по сторонам и оценивать ситуацию тоже было бы неплохо.
Руководители не хотят платить за DS? А что вы можете им предложить? Вы же ничего не знаете. Говоря "вы", я не вас лично имею ввиду, а 1С-ника собирательно. Я сам, хоть и потратил уже какое-то время на изучение DS, не знаю почти ничего. Но лично для меня это стимул - узнать как можно больше
54. Terve!R 05.12.22 15:51 Сейчас в теме
(43) есть примеры задач для бизнеса? За что платят DS-у? Вот прям каждый день, чтобы в штат взять?

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

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

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

См. также

Data science. Скажи мне, брат, трансформер...

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

Какой же data science без нейросетей! Тема чрезвычайно большая и местами сложная. Но в данной статье сложностей не будет. То, что я вам расскажу сейчас, можно охарактеризовать следующими словами: Никогда еще столь доступное не было столь важным.

11.12.2022    846    mkalimulin    14    

Космическая Одиссея 2020 года

Мониторинг Периферийные устройства Языки и среды Бесплатно (free) Бесплатно (free)

Организация потокового обмена системы 1С с большим количеством разнородных устройств – нетривиальная задача. О том, как организовать архитектуру такого решения с учетом возможного масштабирования хранимых данных и поддерживаемых интерфейсов, на конференции Infostart Event 2021 Post-Apocalypse рассказал TeamLead и специалист по внедрению компании ИнфоСофт Григорий Шатров.

11.11.2022    1859    G.Shatrov    1    

Опыт использования 1С: Исполнитель (версия 2.0)

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

Дело было так. В субботу рано утром мне не спалось, надо было срочно подкинуть мозгу что-нибудь очень занятное. И тут я вспомнил одну задачу, решение которой мне определенно не нравилось. Если кратко, задача звучит так: надо выкинуть из конфигурации код, который выполняется на клиенте. Ну и сделать так, чтобы он выполнялся в фоне и на клиенте. А пока думал, спать уже и перехотелось...

26.09.2022    3423    vandalsvq    21    

О цикле обратном замолвите слово...

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

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

08.09.2022    4352    DrAku1a    69    

Data science. Начало

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

Для многих 1С-ников (в том числе и достаточно опытных) может быть открытием то, что модные сейчас Data science и Machine learning уже довольно давно присутствуют в платформе. По причинам, которые я постараюсь раскрыть в дальнейшем, эти технологии почти никем не используются. Но лично я убежден, что как минимум базовые навыки в этой области пригодятся любому специалисту 1С. В этой серии статей я попробую достаточно детально, но без лишних сложностей рассказать о том, что это такое и "с чем это едят"

1 стартмани

06.06.2022    5575    2    mkalimulin    24    

Осваиваем протокол gRPC по HTTP/2 в 1С

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

Не так давно на форуме была заведена тема по интеграции с распределенным реестром под 1С, и был выявлен следующий момент, что текущие релизы платформы не поддерживают соединение по HTTP/2 для протокола gRPC. В этой публикации разберем, как удалось решить этот вопрос.

24.05.2022    1354    JetBrain    8    

Познавательный PowerShell

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

Еще немного PowerShell нам в помощь.

13.05.2022    4513    Infostart    17    

С конфигуратора на EDT. Привычки, которые придется поменять

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

Решил перейти на EDT, чтобы повысить эффективность разработки? А теперь приостановись и выдохни! Я расскажу сейчас о том, из-за чего многие новички в EDT (будучи матёрыми кодерами в конфигураторе) воспринимают встречу с новшествами так, будто их с велосипеда пересадили за штурвал Боинга.

16.09.2021    11089    stas_ganiev    19    

Занимательный PowerShell

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

PowerShell. Что, зачем, как и почему? И причем тут 1С?

16.05.2021    14174    Infostart    31    

Чем воспользоваться для распознавания котиков в 1С?

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

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    4515    comol    10    

Использование JavaScript для обработки данных в 1с

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

В статье мы передадим данные в JavaScript и получим результат обратно в 1С-объекты средствами JSON. Также "поиграем" с переданными данными.

02.01.2021    11188    John_d    21    

Приложение двенадцати факторов

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

Тенденции современности - это SaaS и микросервисы. Про SaaS не слышал только ленивый, но на всякий случай, Ленивый, это для тебя: SaaS это облачная модель работы с сервисами по подписке. У 1С это технология 1С:Фреш. Но мы поговорим не о SaaS и не об 1С:Фреш, а о методологии "Приложение двенадцати факторов", которая родилась для облегчения жизни разработчикам SaaS приложений. Вы спросите: "А где здесь про 1С?". Давайте разберемся.

19.11.2020    1180    Lars Ulrich    0    

Hello, Executor! Познакомимся с языком 1С:Исполнитель и сразу попытаемся его усовершенствовать

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

На прошлой неделе произошел долгожданный громкий релиз в мире 1С: вышла бета версия 1С:Исполнителя. И пусть не оправдались все ожидания после анонса, пусть язык еще сырой, что-то сделать на нем очень интересно. Посмотрим, что это такое, и даже произведем небольшую модернизацию языка (Velocity-pad Costilization).

23.06.2020    16410    CyberCerber    294    

Про js и 1С или как я ужа с ежом скрещивал

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

Опыт создания динамического списка для обычной формы на js в html и подводных камнях, которые обязательно встретятся при написании оного.

20.02.2019    7889    ntemny    31    

Прокси soap-сервер. Когда 1С не может в SOAP

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

Думаю, многие сталкивались с проблемой "своеобразной" поддержки SOAP в 1с. То wsdl не парсится, то методы не вызываются, то xdto пакет толком не читается из-за вольностей (к слову, допустимых) в xsd. Ещё хуже дело обстоит, если в soap-сообщение нужно добавить заголовки - так называемые soap-headers, которые есть в стандарте soap 1.2, и которые конечно же не поддерживает 1С. Попробуем решить проблему и написать свой прокси-сервис "за 10 минут".

19.12.2018    14674    nixel    18    

Записки про metadata.js

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

Отличительные особенности разработки на metadata.js

31.07.2018    12663    1c-intelligence    59    

Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II

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

Это продолжение статьи http://infostart.ru/public/534901/ С того времени добавил поддержку методов с параметрами по умолчанию, вызов методов расширений, вывод типов для дженерик методов, поддержка объектов реализующих IDynamicMetaObjectProvider (ExpandoObject,DynamicObject), добавление синонимов к членам типа и асинхронное программирование на 1С!

09.08.2016    15538    Serginio    1    

Metadata.js для построения дешевых высоконагруженных сервисов

WEB-интеграция Языки и среды Бесплатно (free) Бесплатно (free)

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

08.08.2016    40059    unpete    103    

Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux

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

С выходом .Net Core CLR стало возможным использование классов .Net не только на Windows, но и других операционных системах. Это особенно важно в разрезе импортозамещения. И главное - это аналог COM под Linux. Сейчас под Linux для расширения возможностей 1С используются Web сервисы. Данная разработка позволит использовать не только сборки входящие в состав .Net Core, но и пользовательские портативные сборки.

04.07.2016    22582    Serginio    36    

Linq to EF. Практика использования. Часть III

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

Эта статья является продолжением Code First и Linq to EF на примере 1С версии 7.7 и 8.3. Здесь приведены примеры построения запросов и ссылки на интересные материалы

25.09.2015    17682    Serginio    4    

Code First и Linq to EF на примере 1С версии 8.3. Часть II

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

Эта статья - продолжение http://infostart.ru/public/393228/ Там же лежит и обработка для генерации C# файлов. Суть та же, что и для 7.7, но есть особенности.

24.09.2015    19391    Serginio    8    

Опыты с автоматическим переводом кода C# в 1С-код через Roslyn

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

Появилась идея посмотреть, как будет выглядеть объектно-ориентированный подход в 1С, язык которой очень ограничен в средствах и не предусматривает определение классов. Программа по автоматическому переводу определений классов C# в другой язык позволила бы менять генерируемый код по мере появления новых идей. Поиски средств реализации привели к проекту Roslyn - открытому компилятору C#.

26.12.2014    37737    Elisy    15    

C# + 1C. Урок 2. Обращение к 1С из C#

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

В рамках этого урока мы изучим интеграцию 1С языком программирования C# на примере обращения к функционалу 1С из программ на C#

27.06.2013    49052    megabax    10    

Visual C# для чайников. Урок 1. Напишем простейшую программу на C#

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

В этом цикле уроков я постараюсь максимально просто и понятно изложить основы программирования на языке C# на примере Microsoft Visual Studio 2010 или аналогичной среде программирования.

02.04.2013    42878    megabax    59    

Код С# в bat-файле

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

Маленькая забавность о том, как использовать все возможности dotNet в обычных bat-скриптах. Или сделать скриптовый язык из С#.

23.11.2010    17068    Душелов    26    

Способ создания программ .Net из текстового редатора и из 1С - легко!!!

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

А все потому, что в состав .Net SDK входит компилятор CSC.EXE (его качаем с офф. сайта - он бесплатный, по крайней мере пока).

10.03.2009    7787    DGorgoN    38