Update(blocks): python新增一些pandas图形块,多语言将在稳定后进行

新增pandas API如下:
1. 值排序: sort_values()
2. 获取前 / 后n行数据: head() / tail()
3. 根据所给条件筛选数据
4. 通过给定标签分组: groupby()
5. 常用聚合函数
This commit is contained in:
王立帮
2024-09-16 02:52:18 +08:00
parent 4570a2e9ab
commit b573250af6
4 changed files with 665 additions and 345 deletions

View File

@@ -1456,3 +1456,108 @@ export const py_sum = {
this.setTooltip('Returns the sum of the iterable.'); this.setTooltip('Returns the sum of the iterable.');
} }
}; };
export const dataframe_sort_values = {
init: function () {
this.setColour(DATA_HUE);
this.appendValueInput('DICT')
.setAlign(Blockly.inputs.Align.RIGHT)
.setCheck('Dict');
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('值排序');
this.appendValueInput('KEY')
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('标签');
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('排序方式')
.appendField(new Blockly.FieldDropdown([
['升序', 'True'],
['降序', 'False']
]), 'AS_CENDING');
this.setOutput(true);
this.setInputsInline(true);
this.setTooltip('');
}
}
export const dataframe_head_tail = {
init: function () {
this.setColour(DATA_HUE);
this.appendValueInput('DICT')
.setAlign(Blockly.inputs.Align.RIGHT)
.setCheck('Dict');
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('获取')
.appendField(new Blockly.FieldDropdown([
['前几行', 'head'],
['最后几行', 'tail']
]), 'TYPE');
this.appendValueInput('LINES')
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('行数');
this.setOutput(true);
this.setInputsInline(true);
this.setTooltip('');
}
}
export const dataframe_select = {
init: function () {
this.setColour(DATA_HUE);
this.appendValueInput('DICT')
.setAlign(Blockly.inputs.Align.RIGHT)
.setCheck('Dict');
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('筛选数据');
this.appendValueInput('KEY')
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('满足条件');
this.setOutput(true);
this.setInputsInline(true);
this.setTooltip('');
}
}
export const dataframe_groupby = {
init: function () {
this.setColour(DATA_HUE);
this.appendValueInput('DICT')
.setAlign(Blockly.inputs.Align.RIGHT)
.setCheck('Dict');
this.appendValueInput('KEY')
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('通过标签');
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('分组');
this.setOutput(true);
this.setInputsInline(true);
this.setTooltip('');
}
}
export const dataframe_aggregate_func = {
init: function () {
this.setColour(DATA_HUE);
this.appendDummyInput()
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldDropdown([
['求最小值', 'min'],
['求最大值', 'max'],
['求和', 'sum'],
['求平均值', 'mean'],
['求中位数', 'median'],
['求标准差', 'std']
]), 'TYPE');
this.appendValueInput('DICT')
.setAlign(Blockly.inputs.Align.RIGHT)
.setCheck('Dict');
this.setOutput(true);
this.setInputsInline(true);
this.setTooltip('');
}
}

View File

@@ -645,3 +645,40 @@ export const py_sum = function (block, generator) {
var code = 'sum(' + array + ')'; var code = 'sum(' + array + ')';
return [code, generator.ORDER_ATOMIC]; return [code, generator.ORDER_ATOMIC];
} }
export const dataframe_sort_values = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const key = generator.valueToCode(block, 'KEY', generator.ORDER_ATOMIC) || '\'tag\'';
const ascending = block.getFieldValue('AS_CENDING');
const code = `${dict}.sort_values(by=${key}, ascending=${ascending})`;
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_head_tail = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const lines = generator.valueToCode(block, 'LINES', generator.ORDER_ATOMIC) || '1';
const type = block.getFieldValue('TYPE');
const code = `${dict}.${type}(${lines})`;
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_select = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const key = generator.valueToCode(block, 'KEY', generator.ORDER_ATOMIC) || 'df[\'tag\'] > 1';
const code = `${dict}[${key}]`;
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_groupby = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const key = generator.valueToCode(block, 'KEY', generator.ORDER_ATOMIC) || '\'tag\'';
const code = `${dict}.groupby(by=${key})`;
return [code, generator.ORDER_ATOMIC];
}
export const dataframe_aggregate_func = function (block, generator) {
const dict = generator.valueToCode(block, 'DICT', generator.ORDER_ATOMIC) || 'df';
const type = block.getFieldValue('TYPE');
const code = `${dict}.${type}()`;
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -2835,6 +2835,95 @@
</shadow> </shadow>
</value> </value>
</block> </block>
<block type="dataframe_sort_values">
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<shadow type="text">
<field name="TEXT">tag</field>
</shadow>
</value>
</block>
<block type="dataframe_head_tail">
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="LINES">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="dataframe_select">
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<block type="logic_compare">
<field name="OP">GT</field>
<value name="A">
<block type="dataframe_get">
<field name="MODE">column</field>
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<shadow type="text">
<field name="TEXT">tag</field>
</shadow>
</value>
</block>
</value>
<value name="B">
<block type="math_number">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
</block>
<block type="dataframe_groupby">
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<shadow type="text">
<field name="TEXT">tag</field>
</shadow>
</value>
</block>
<block type="dataframe_aggregate_func">
<field name="TYPE">min</field>
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
<block type="dataframe_get">
<field name="MODE">column</field>
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<shadow type="text">
<field name="TEXT">tag</field>
</shadow>
</value>
</block>
</value>
</block>
<block type="pl_plot_easy"> <block type="pl_plot_easy">
<value name="SER"> <value name="SER">
<shadow type="variables_get"> <shadow type="variables_get">

View File

@@ -2578,6 +2578,95 @@
</shadow> </shadow>
</value> </value>
</block> </block>
<block type="dataframe_sort_values">
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<shadow type="text">
<field name="TEXT">tag</field>
</shadow>
</value>
</block>
<block type="dataframe_head_tail">
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="LINES">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="dataframe_select">
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<block type="logic_compare">
<field name="OP">GT</field>
<value name="A">
<block type="dataframe_get">
<field name="MODE">column</field>
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<shadow type="text">
<field name="TEXT">tag</field>
</shadow>
</value>
</block>
</value>
<value name="B">
<block type="math_number">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
</block>
<block type="dataframe_groupby">
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<shadow type="text">
<field name="TEXT">tag</field>
</shadow>
</value>
</block>
<block type="dataframe_aggregate_func">
<field name="TYPE">min</field>
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
<block type="dataframe_get">
<field name="MODE">column</field>
<value name="DICT">
<shadow type="variables_get">
<field name="VAR">df1</field>
</shadow>
</value>
<value name="KEY">
<shadow type="text">
<field name="TEXT">tag</field>
</shadow>
</value>
</block>
</value>
</block>
<block type="pl_plot_easy"> <block type="pl_plot_easy">
<value name="SER"> <value name="SER">
<shadow type="variables_get"> <shadow type="variables_get">