From ead77c4b8940d6aff6874d3a12daf3da2cf29ed2 Mon Sep 17 00:00:00 2001 From: 13880560530 Date: Fri, 29 Nov 2024 08:53:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E2=80=9C=E6=9C=BA=E5=99=A8?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E2=80=9D=E5=92=8C=E2=80=9C=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=88=86=E6=9E=90=E2=80=9D=E7=9A=84=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default_src/python_mixpy/blocks/data.js | 14 ++-- .../python_mixpy/blocks/sklearn.js | 67 ++++++++++++++++++- .../python_mixpy/generators/data.js | 3 +- .../python_mixpy/generators/sklearn.js | 26 ++++++- boards/default_src/python_mixpy/template.xml | 13 ++-- .../default_src/python_pyodide/template.xml | 44 ++++++++++-- common/msg/blockly/zh-hans.js | 1 + common/msg/blockly/zh-hant.js | 1 + 8 files changed, 141 insertions(+), 28 deletions(-) diff --git a/boards/default_src/python_mixpy/blocks/data.js b/boards/default_src/python_mixpy/blocks/data.js index 24062587..68b9ab7e 100644 --- a/boards/default_src/python_mixpy/blocks/data.js +++ b/boards/default_src/python_mixpy/blocks/data.js @@ -1247,16 +1247,12 @@ export const pandas_drop_columns = { this.appendValueInput('DATAFRAME') .appendField('从数据集'); this.appendValueInput('COLUMNS') - .appendField('中删除列'); - this.appendDummyInput() - .appendField('沿着axis') - .appendField(new Blockly.FieldDropdown([ - ['行', '0'], - ['列', '1'] - ]), 'AXIS'); + .appendField('中删除列') + .setCheck(String); + this.setInputsInline(true); this.setOutput(true); - this.setTooltip('Drops columns from dataframe.'); - } + this.setTooltip('从数据框中删除指定的列。用逗号分隔多个列名。'); + }, }; export const numpy_ones = { diff --git a/boards/default_src/python_mixpy/blocks/sklearn.js b/boards/default_src/python_mixpy/blocks/sklearn.js index 2f2bbf91..97c8db1a 100644 --- a/boards/default_src/python_mixpy/blocks/sklearn.js +++ b/boards/default_src/python_mixpy/blocks/sklearn.js @@ -405,6 +405,49 @@ export const sklearn_GaussianNB = { } }; +//sklearn 初始化PCA降维 +export const sklearn_pca = { + init: function () { + this.appendDummyInput() + .appendField("sklearn 初始化 PCA 算法"); + this.appendValueInput("model_name") + .setCheck(null) + .setAlign(Blockly.inputs.Align.RIGHT) + .appendField(Blockly.Msg.MODEL_NAME); + this.appendValueInput("n_components") + .setCheck(null) + .setAlign(Blockly.inputs.Align.RIGHT) + .appendField(Blockly.Msg.SKLEARN_PCA_N_COMPONENTS); + this.setInputsInline(false); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(SKLEARN_HUE); + this.setTooltip(""); + this.setHelpUrl(""); + } +}; + +//sklearn PCA拟合并转换数据 +export const sklearn_pca_fit_transform = { + init: function () { + this.appendDummyInput() + .appendField("sklearn PCA 降维"); + this.appendValueInput("model_name") + .setCheck(null) + .setAlign(Blockly.inputs.Align.RIGHT) + .appendField(Blockly.Msg.MODEL_NAME); + this.appendValueInput("train_data") + .setCheck(null) + .setAlign(Blockly.inputs.Align.RIGHT) + .appendField(Blockly.Msg.EIGENVALUES); + this.setInputsInline(true); + this.setOutput(true, null); + this.setColour(SKLEARN_HUE); + this.setTooltip(""); + this.setHelpUrl(""); + } +}; + //sklearn 初始化K-均值聚类 export const sklearn_KMeans = { init: function () { @@ -426,11 +469,29 @@ export const sklearn_KMeans = { .setCheck(null) .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.RANDOM_SEED); - this.appendValueInput("n_jobs") + this.setInputsInline(false); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(SKLEARN_HUE); + this.setTooltip(""); + this.setHelpUrl(""); + } +}; + +//sklearn KMeans拟合数据 +export const sklearn_KMeans_fit = { + init: function () { + this.appendDummyInput() + .appendField("sklearn K-均值聚类"); + this.appendValueInput("model_name") .setCheck(null) .setAlign(Blockly.inputs.Align.RIGHT) - .appendField(Blockly.Msg.SKLEARN_THREADS); - this.setInputsInline(false); + .appendField(Blockly.Msg.MODEL_NAME); + this.appendValueInput("train_data") + .setCheck(null) + .setAlign(Blockly.inputs.Align.RIGHT) + .appendField(Blockly.Msg.EIGENVALUES); + this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(SKLEARN_HUE); diff --git a/boards/default_src/python_mixpy/generators/data.js b/boards/default_src/python_mixpy/generators/data.js index 98cc8ed0..6729365e 100644 --- a/boards/default_src/python_mixpy/generators/data.js +++ b/boards/default_src/python_mixpy/generators/data.js @@ -519,8 +519,7 @@ export const pandas_drop_columns = function (block, generator) { generator.definitions_.import_pandas = "import pandas"; var dataframe = generator.valueToCode(block, 'DATAFRAME', generator.ORDER_ATOMIC) || 'df'; var columns = generator.valueToCode(block, 'COLUMNS', generator.ORDER_ATOMIC) || '[]'; - var axis = block.getFieldValue('AXIS') || '0'; - var code = dataframe + '.drop(columns=' + columns + ', axis=' + axis + ')'; + var code = dataframe + '.drop(columns=' + columns + ', axis=1)'; return [code, generator.ORDER_ATOMIC]; } diff --git a/boards/default_src/python_mixpy/generators/sklearn.js b/boards/default_src/python_mixpy/generators/sklearn.js index 1edb5fea..61617a9d 100644 --- a/boards/default_src/python_mixpy/generators/sklearn.js +++ b/boards/default_src/python_mixpy/generators/sklearn.js @@ -147,18 +147,40 @@ export const sklearn_GaussianNB = function (_, generator) { return code; } +// sklearn 初始化PCA降维 +export const sklearn_pca = function (_, generator) { + var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'pca'; + var value_n_components = generator.valueToCode(this, 'n_components', generator.ORDER_ATOMIC) || '2'; + generator.definitions_['import_sklearn_pca'] = 'from sklearn.decomposition import PCA'; + var code = value_model_name + ' = PCA(n_components=' + value_n_components + ')\n'; + return code; +} + +export const sklearn_pca_fit_transform = function(block, generator) { + var value_model_name = generator.valueToCode(block, 'model_name', generator.ORDER_ATOMIC); + var value_train_data = generator.valueToCode(block, 'train_data', generator.ORDER_ATOMIC); + var code = value_model_name + '.fit_transform(' + value_train_data + ')'; + return [code, generator.ORDER_ATOMIC]; +}; + // sklearn 初始K-均值聚类 export const sklearn_KMeans = function (_, generator) { var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model'; var value_n_clusters = generator.valueToCode(this, 'n_clusters', generator.ORDER_ATOMIC) || '8'; var value_max_iter = generator.valueToCode(this, 'max_iter', generator.ORDER_ATOMIC) || '300'; var value_random_state = generator.valueToCode(this, 'random_state', generator.ORDER_ATOMIC) || 'None'; - var value_n_jobs = generator.valueToCode(this, 'n_jobs', generator.ORDER_ATOMIC) || 'None'; generator.definitions_['import_sklearn_KMeans'] = 'from sklearn.cluster import KMeans'; - var code = value_model_name + ' = KMeans(n_clusters = ' + value_n_clusters + ',max_iter = ' + value_max_iter + ',random_state = ' + value_random_state + ',n_jobs = ' + value_n_jobs + ')\n'; + var code = value_model_name + ' = KMeans(n_clusters = ' + value_n_clusters + ',max_iter = ' + value_max_iter + ',random_state = ' + value_random_state + ')\n'; return code; } +export const sklearn_KMeans_fit = function(block, generator) { + var value_model_name = generator.valueToCode(block, 'model_name', generator.ORDER_ATOMIC); + var value_train_data = generator.valueToCode(block, 'train_data', generator.ORDER_ATOMIC); + var code = value_model_name + '.fit(' + value_train_data + ')\n'; + return code; +}; + // sklearn 训练模型 export const sklearn_fit = function (_, generator) { var value_model_name = generator.valueToCode(this, 'model_name', generator.ORDER_ATOMIC) || 'model'; diff --git a/boards/default_src/python_mixpy/template.xml b/boards/default_src/python_mixpy/template.xml index dbc0db8c..9d3eda1d 100644 --- a/boards/default_src/python_mixpy/template.xml +++ b/boards/default_src/python_mixpy/template.xml @@ -2527,12 +2527,6 @@ df - - - columns - - - 0 x @@ -2727,6 +2721,13 @@ + + + + myArray + + + diff --git a/boards/default_src/python_pyodide/template.xml b/boards/default_src/python_pyodide/template.xml index 202ac2c5..0a7d2f43 100644 --- a/boards/default_src/python_pyodide/template.xml +++ b/boards/default_src/python_pyodide/template.xml @@ -2581,11 +2581,10 @@ - - columns + + 列名 - 0 x @@ -3575,6 +3574,30 @@ + + + + pca + + + + + 2 + + + + + + + pca + + + + + X + + + @@ -3586,9 +3609,6 @@ 5 - - - @@ -3620,6 +3640,18 @@ + + + + model + + + + + X + + + diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js index 3f768015..5ccb6ce1 100644 --- a/common/msg/blockly/zh-hans.js +++ b/common/msg/blockly/zh-hans.js @@ -2964,6 +2964,7 @@ ZhHans.SKLEARN_LABELS_AFTER_CLUSTERING = "聚类后标签"; ZhHans.SKLEARN_CLUSTERING_SUM_OF_SQUARED_DISTANCES = "所有点到对应簇中心的距离平方和"; ZhHans.SKLEARN_SAVE_MODEL = "保存模型"; ZhHans.SKLEARN_LOAD_MODEL = "加载模型"; +ZhHans.SKLEARN_PCA_N_COMPONENTS = "主成分个数"; ZhHans.MATH_ROUND = '四舍五入'; ZhHans.MATH_ROUND_NEW_TOOLTIP = '将数值四舍五入保留小数点后指定的位数'; ZhHans.PY_STORAGE_FILE_OBJECT = ",并返回文件对象"; diff --git a/common/msg/blockly/zh-hant.js b/common/msg/blockly/zh-hant.js index e5c2aa13..21073e95 100644 --- a/common/msg/blockly/zh-hant.js +++ b/common/msg/blockly/zh-hant.js @@ -2943,6 +2943,7 @@ ZhHant.SKLEARN_LABELS_AFTER_CLUSTERING = "聚類後標籤"; ZhHant.SKLEARN_CLUSTERING_SUM_OF_SQUARED_DISTANCES = "所有點到對應簇中心的距離平方和"; ZhHant.SKLEARN_SAVE_MODEL = "保存模型"; ZhHant.SKLEARN_LOAD_MODEL = "加載模型"; +ZhHant.SKLEARN_PCA_N_COMPONENTS = "主成分个数"; ZhHant.MATH_ROUND = '四捨五入'; ZhHant.MATH_ROUND_NEW_TOOLTIP = '將數值四捨五入保留小數點後指定的位數'; ZhHant.PY_STORAGE_FILE_OBJECT = ",並返回文件對象";