提交 22ce87b3 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 2a12bcd2
......@@ -27,7 +27,8 @@
"react-dom": "^18.3.1",
"react-markdown": "^10.1.0",
"react-router": "^7.4.0",
"react-syntax-highlighter": "^15.6.1",
"rehype-highlight": "^7.0.2",
"rehype-raw": "^7.0.0",
"remark-gfm": "^4.0.1",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
"zustand": "^5.0.3"
......@@ -4272,6 +4273,18 @@
"node": ">=10.13.0"
}
},
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/es-abstract": {
"version": "1.23.9",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
......@@ -4805,19 +4818,6 @@
"reusify": "^1.0.4"
}
},
"node_modules/fault": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
"integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
"license": "MIT",
"dependencies": {
"format": "^0.2.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/fecha": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
......@@ -5039,14 +5039,6 @@
"node": ">= 6"
}
},
"node_modules/format": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
"integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
"engines": {
"node": ">=0.4.x"
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
......@@ -5434,11 +5426,89 @@
"node": ">= 0.4"
}
},
"node_modules/hast-util-parse-selector": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
"integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
"node_modules/hast-util-from-parse5": {
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
"integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
"devlop": "^1.0.0",
"hastscript": "^9.0.0",
"property-information": "^7.0.0",
"vfile": "^6.0.0",
"vfile-location": "^5.0.0",
"web-namespaces": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/hast-util-from-parse5/node_modules/hast-util-parse-selector": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
"integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/hast-util-from-parse5/node_modules/hastscript": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
"integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"comma-separated-tokens": "^2.0.0",
"hast-util-parse-selector": "^4.0.0",
"property-information": "^7.0.0",
"space-separated-tokens": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/hast-util-is-element": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
"integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/hast-util-raw": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
"integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
"@ungap/structured-clone": "^1.0.0",
"hast-util-from-parse5": "^8.0.0",
"hast-util-to-parse5": "^8.0.0",
"html-void-elements": "^3.0.0",
"mdast-util-to-hast": "^13.0.0",
"parse5": "^7.0.0",
"unist-util-position": "^5.0.0",
"unist-util-visit": "^5.0.0",
"vfile": "^6.0.0",
"web-namespaces": "^2.0.0",
"zwitch": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
......@@ -5471,99 +5541,64 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/hast-util-whitespace": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
"integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
"node_modules/hast-util-to-parse5": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
"integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
"@types/hast": "^3.0.0",
"comma-separated-tokens": "^2.0.0",
"devlop": "^1.0.0",
"property-information": "^6.0.0",
"space-separated-tokens": "^2.0.0",
"web-namespaces": "^2.0.0",
"zwitch": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/hastscript": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
"integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
"license": "MIT",
"dependencies": {
"@types/hast": "^2.0.0",
"comma-separated-tokens": "^1.0.0",
"hast-util-parse-selector": "^2.0.0",
"property-information": "^5.0.0",
"space-separated-tokens": "^1.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/hastscript/node_modules/@types/hast": {
"version": "2.3.10",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz",
"integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==",
"license": "MIT",
"dependencies": {
"@types/unist": "^2"
}
},
"node_modules/hastscript/node_modules/@types/unist": {
"version": "2.0.11",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
},
"node_modules/hastscript/node_modules/comma-separated-tokens": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
"integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
"node_modules/hast-util-to-parse5/node_modules/property-information": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
"integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/hastscript/node_modules/property-information": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
"integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
"node_modules/hast-util-to-text": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
"integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
"license": "MIT",
"dependencies": {
"xtend": "^4.0.0"
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
"hast-util-is-element": "^3.0.0",
"unist-util-find-after": "^5.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/hastscript/node_modules/space-separated-tokens": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
"integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
"node_modules/hast-util-whitespace": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
"integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
"dependencies": {
"@types/hast": "^3.0.0"
},
"node_modules/highlight.js": {
"version": "10.7.3",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
"integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
"license": "BSD-3-Clause",
"engines": {
"node": "*"
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/highlightjs-vue": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz",
"integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
"license": "CC0-1.0"
},
"node_modules/html-url-attributes": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
......@@ -5574,6 +5609,16 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/html-void-elements": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
"integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/hull.js": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/hull.js/-/hull.js-1.0.6.tgz",
......@@ -6399,20 +6444,6 @@
"loose-envify": "cli.js"
}
},
"node_modules/lowlight": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
"integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
"license": "MIT",
"dependencies": {
"fault": "^1.0.0",
"highlight.js": "~10.7.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/lucide-react": {
"version": "0.484.0",
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.484.0.tgz",
......@@ -7635,6 +7666,18 @@
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
},
"node_modules/parse5": {
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
"integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
"license": "MIT",
"dependencies": {
"entities": "^4.5.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
......@@ -7759,15 +7802,6 @@
"node": ">= 0.8.0"
}
},
"node_modules/prismjs": {
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
"integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/property-information": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz",
......@@ -8528,23 +8562,6 @@
}
}
},
"node_modules/react-syntax-highlighter": {
"version": "15.6.1",
"resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz",
"integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.3.1",
"highlight.js": "^10.4.1",
"highlightjs-vue": "^1.0.0",
"lowlight": "^1.17.0",
"prismjs": "^1.27.0",
"refractor": "^3.6.0"
},
"peerDependencies": {
"react": ">= 0.14.0"
}
},
"node_modules/reflect.getprototypeof": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
......@@ -8567,146 +8584,86 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/refractor": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
"integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
"license": "MIT",
"dependencies": {
"hastscript": "^6.0.0",
"parse-entities": "^2.0.0",
"prismjs": "~1.27.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/refractor/node_modules/character-entities": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
"integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
"node_modules/regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
"license": "MIT"
},
"node_modules/refractor/node_modules/character-entities-legacy": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
"integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
"node_modules/regexp.prototype.flags": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
"integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
"dependencies": {
"call-bind": "^1.0.8",
"define-properties": "^1.2.1",
"es-errors": "^1.3.0",
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"set-function-name": "^2.0.2"
},
"node_modules/refractor/node_modules/character-reference-invalid": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
"integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
"engines": {
"node": ">= 0.4"
},
"node_modules/refractor/node_modules/is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
"integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/refractor/node_modules/is-alphanumerical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
"integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
"node_modules/rehype-highlight": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-7.0.2.tgz",
"integrity": "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA==",
"license": "MIT",
"dependencies": {
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
"@types/hast": "^3.0.0",
"hast-util-to-text": "^4.0.0",
"lowlight": "^3.0.0",
"unist-util-visit": "^5.0.0",
"vfile": "^6.0.0"
},
"node_modules/refractor/node_modules/is-decimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
"integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/refractor/node_modules/is-hexadecimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
"node_modules/rehype-highlight/node_modules/highlight.js": {
"version": "11.11.1",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
"integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/refractor/node_modules/parse-entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"node_modules/rehype-highlight/node_modules/lowlight": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz",
"integrity": "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==",
"license": "MIT",
"dependencies": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
"@types/hast": "^3.0.0",
"devlop": "^1.0.0",
"highlight.js": "~11.11.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/refractor/node_modules/prismjs": {
"version": "1.27.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
"integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
"license": "MIT"
},
"node_modules/regexp.prototype.flags": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
"integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
"node_modules/rehype-raw": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
"integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"define-properties": "^1.2.1",
"es-errors": "^1.3.0",
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"set-function-name": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
"@types/hast": "^3.0.0",
"hast-util-raw": "^9.0.0",
"vfile": "^6.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/remark-gfm": {
......@@ -10452,6 +10409,20 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/unist-util-find-after": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
"integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
"license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/unist-util-is": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
......@@ -10582,6 +10553,20 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/vfile-location": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
"integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
"license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/vfile-message": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
......@@ -10700,6 +10685,16 @@
"node": ">=10.13.0"
}
},
"node_modules/web-namespaces": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
"integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/webpack": {
"version": "5.98.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz",
......@@ -10958,15 +10953,6 @@
"node": ">=0.8"
}
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"license": "MIT",
"engines": {
"node": ">=0.4"
}
},
"node_modules/yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
......
......@@ -29,7 +29,8 @@
"react-dom": "^18.3.1",
"react-markdown": "^10.1.0",
"react-router": "^7.4.0",
"react-syntax-highlighter": "^15.6.1",
"rehype-highlight": "^7.0.2",
"rehype-raw": "^7.0.0",
"remark-gfm": "^4.0.1",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
"zustand": "^5.0.3"
......
// 变量定义
$font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
$monospace-font: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
$border-color: #eaecef;
$table-border-color: #d0d7de;
$link-color: #0366d6;
$code-bg-color: rgba(27, 31, 35, 0.05);
$code-color: #e01e5a;
$blockquote-color: #6a737d;
$table-bg-color: #f6f8fa;
// 基础样式
.markdown-render {
font-family: $font-family;
line-height: 1.6;
color: #333;
// 标题样式
h1,
h2,
h3 {
font-weight: 600;
margin: 1em 0;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
border-bottom: 1px solid $border-color;
padding-bottom: 0.3em;
}
h2 {
font-size: 1.5em;
margin: 0.83em 0;
border-bottom: 1px solid $border-color;
padding-bottom: 0.3em;
}
h3 {
font-size: 1.25em;
}
// 段落样式
p {
margin: 1em 0;
}
// 列表样式
ul,
ol {
padding-left: 2em;
margin: 1em 0;
li {
margin: 0.5em 0;
}
}
// 链接样式
a {
color: $link-color;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
// 引用样式
blockquote {
margin: 1em 0;
padding: 0 1em;
color: $blockquote-color;
border-left: 0.25em solid $border-color;
}
// 表格样式
table {
display: block;
width: 100%;
max-width: 100%;
overflow: auto;
margin: 1em 0;
border-spacing: 0;
border-collapse: collapse;
thead,
tbody {
display: table-header-group;
vertical-align: middle;
border-color: inherit;
}
tbody {
display: table-row-group;
}
tr {
display: table-row;
vertical-align: inherit;
border-color: inherit;
background-color: #fff;
&:nth-child(2n) {
background-color: $table-bg-color;
}
}
th,
td {
display: table-cell;
padding: 6px 13px;
border: 1px solid $table-border-color;
text-align: left;
}
th {
font-weight: 600;
background-color: $table-bg-color;
}
td {
vertical-align: top;
}
}
// 代码块样式
pre {
background-color: $table-bg-color;
border-radius: 6px;
padding: 16px;
overflow: auto;
margin: 1em 0;
code {
background-color: transparent;
padding: 0;
border-radius: 0;
font-family: $monospace-font;
font-size: 85%;
line-height: 1.45;
}
}
// 行内代码样式
:not(pre) > code {
color: $code-color;
background-color: $code-bg-color;
padding: 0.2em 0.4em;
border-radius: 3px;
font-family: $monospace-font;
font-size: 85%;
}
// 代码高亮颜色
.hljs {
color: #24292e;
&-keyword,
&-selector-tag,
&-subst {
color: #d73a49;
}
&-string,
&-doctag {
color: #032f62;
}
&-title,
&-section,
&-selector-id {
color: #6f42c1;
}
&-comment,
&-quote {
color: #6a737d;
}
&-number,
&-literal {
color: #005cc5;
}
}
}
import Markdown from 'react-markdown'
import remarkGfm from 'remark-gfm'
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
import { dark } from 'react-syntax-highlighter/dist/esm/styles/prism'
import rehypeHighlight from 'rehype-highlight'
import rehypeRaw from 'rehype-raw'
import './MarkdownRender.scss'
interface MarkdownRenderProps {
children?: string
}
const MarkdownRender = function MarkdownRender({ children }: MarkdownRenderProps) {
if (!children) {
return null
}
export default function MarkdownRender(props: { children?: string }) {
return (
<Markdown
remarkPlugins={[remarkGfm]}
components={{
code(props) {
console.log(props)
const { children, className, ...rest } = props
const match = /language-(\w+)/.exec(className || '')
return match ? (
<SyntaxHighlighter
{...rest}
PreTag="div"
children={String(children).replace(/\n$/, '')}
language={match[1]}
style={dark}
/>
) : (
<code {...rest} className={className}>
<div className="markdown-render">
<Markdown remarkPlugins={[remarkGfm]} rehypePlugins={[rehypeRaw, rehypeHighlight]}>
{children}
</code>
)
},
}}>
{props.children}
</Markdown>
</div>
)
}
export default MarkdownRender
import { Button, Flex, Modal, Spin } from 'antd'
import { useEffect, useState } from 'react'
import { useAI } from '@/hooks/useAI'
import MarkdownRender from '@/components/MarkdownRender'
export default function AIModal({ prompt }: { prompt: string }) {
const [open, setOpen] = useState(false)
const { post, isLoading, message } = useAI()
useEffect(() => {
if (open) {
post({
messages: [{ role: 'user', content: prompt }],
})
}
}, [open, prompt])
return (
<>
<Button type="primary" onClick={() => setOpen(true)}>
AI建议
</Button>
<Modal title="AI建议" open={open} footer={null} width={1000} onCancel={() => setOpen(false)} destroyOnClose>
<MarkdownRender>{message?.content}</MarkdownRender>
<Flex justify="center">
<Spin size="large" spinning={isLoading}></Spin>
</Flex>
</Modal>
</>
)
}
......@@ -9,10 +9,12 @@ export default function DataWrap({
title,
headerRender,
buttons,
extraButtons,
empty,
}: {
title: string
buttons?: ReactNode
extraButtons?: ReactNode
headerRender?: (data: any) => ReactNode
empty?: ReactNode
}) {
......@@ -41,8 +43,11 @@ export default function DataWrap({
<Flex wrap gap={10}>
{buttons}
</Flex>
<Flex wrap gap={10}>
{extraButtons}
<ViewDataFiledButtonModal></ViewDataFiledButtonModal>
</Flex>
</Flex>
)}
<DataRender rowKey={'pk_id'} loading={isPending} dataSource={data.list} columns={columns} />
</>
......
export const prompt = `任务目标
Apriori算法设计需求说明,结构化分析和建模建议
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
核心问题 :该数据集拟解决的业务问题是什么?(例如:发现商品购买关联规则、优化商品推荐策略等)
关联目标:
- 需要挖掘的关联模式类型(如"购买T恤的用户是否常搭配购买牛仔裤")
- 业务价值目标(如"提升交叉销售转化率10%")
2. 特征工程与事务准备
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| 商品名称 | 转为事务列表 | 核心交易项,用于挖掘关联规则 |
| 品类 | 转为事务列表 | 分析品类间的共现模式 |
| 用户ID(可选) | 分组分析 按用户挖掘个性化购买模式 |
排除字段:
| 字段名 | 排除原因 |
| 订单时间 | 无直接关联规则挖掘价值 |
| 物流信息 | 与购买行为无关 |
(2) 特征处理建议:
事务格式要求:
- 数据需转换为\`[[事务1商品列表], [事务2商品列表], ...]\`格式
- 示例:\`[["T恤", "牛仔裤"], ["连衣裙", "帆布鞋"]]\`
缺失值处理:
- 策略:删除空值或填充(如"其他"类别)
数据降维:
- 是否需要合并商品层级?[是/否及理由](如"合并到品类层级以减少项数量")
3. 模型输入设计
事务数据格式:
订单ID | 购买项列表
A123 | [女裤, 泫雅风T恤, 双11优惠]
A456 | [连衣裙, 氨纶材质]
参数配置建议:
\`min_support\`:[建议值及理由](如"设置为0.05以筛选高频项集")
\`min_confidence\`:[建议值及理由](如"设置为0.6以保证规则实用性")
4. 算法实现建议
模型适配性:
是否适合Apriori?[是/否及理由]
若否,推荐调整:
尝试FP-Growth(如"数据规模过大时更高效")
关键参数建议:
\`min_support\`:0.03-0.1(高频商品组合筛选)
\`min_confidence\`:0.5+(保证规则可信度)
\`max_length\`:5(限制规则复杂度)
业务规则过滤:
推荐设置\`min_lift>1.5\`以筛选强关联规则(如"购买T恤的用户更可能购买配套裤子")
计算资源建议:
特征维度>100时,建议先进行商品聚类降维
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述业务问题及目标]
2. 事务构建建议:
- 保留字段:[字段列表及处理方式和理由]
- 排除字段:[字段列表及排除原因]
3. 关键特征分析:
高频项集:
强关联规则:
4. 模型建议:
参数配置:
\`min_support=0.05\`(筛选高频商品组合)
\`min_confidence=0.6\`(保证业务价值)
业务验证方式:
推荐验证方法:人工审核规则合理性(如"是否符合业务常识")
关键评估指标:lift值、置信度、支持度 `
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:Apriori" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap title="数据挖掘:Apriori" buttons={<ButtonModal />} extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
随机森林算法设计需求说明,结构化分析和建模建议
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
1.
核心问题 :该数据集拟解决的业务问题是什么?(例如:预测用户购买品类、识别高价值客户流失风险等)
2.
因变量(目标)选择 :
字段名:[目标变量字段名]
- 选择依据:
- 业务相关性说明(如"直接关联用户购买行为")
- 数据类型匹配(如分类问题需离散变量、回归问题需连续变量)
模型预期 :
预期性能指标(如准确率>85%、F1-score>0.7)
或业务目标(如"将客户流失预测准确率提升15%")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| [字段1] | 标签编码/One-Hot | 与因变量信息增益高、业务逻辑相关 |
| [字段2] | 处理缺失值(如填充/删除) | 数据质量达标(缺失率<5%)、分布合理 |
排除字段:
| 字段名 | 排除原因 |
| [字段X] | 多重共线性(VIF>10)、无关变量、数据噪声 |
(2) 特征处理建议:
分类特征:
- 编码方式:[标签编码/One-Hot](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除/模型内置处理](如"年龄字段缺失率3%,用中位数填充")
异常值处理:
- 策略:[离群值截断/删除](如"销量字段存在极端值,使用IQR法处理")
3. 模型输入设计
请给出最终的模型输入方案 :
自变量(X):
字段列表及预处理方法:
[字段A]:标签编码 → 转换为整数类型
[字段B]:One-Hot编码 → 扩展为N个二元变量
因变量(Y):
字段名:[字段名]
是否需要离散化?[是/否及方法](如"销售额连续值转为高/中/低三类")
4. 算法实现建议
模型适配性:
是否适合随机森林?[是/否及理由]
若否,推荐调整:
尝试XGBoost/梯度提升树(如"特征间交互复杂,需更深度学习")
关键参数建议:
\`n_estimators\`:[建议值及理由](如"设置为100以平衡计算效率与精度")
\`max_depth\`:[建议值及理由](如"防止过拟合,设置为5")
\`max_features\`:[建议值及理由](如"sqrt型特征子集")
\`class_weight\`:[平衡/不均衡](如"类别分布不均衡时设置'balanced'")
计算资源建议:
是否需要特征选择?[是/否及方法](如"使用特征重要性筛选Top 10字段")
验证与评估:
验证策略:[分层5折交叉验证](如"数据类别分布不均衡")
关键指标:[准确率、F1-score、特征重要性图表]
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述]
2. 因变量选择:[字段名] + [选择理由]
3. 自变量选择:
- 保留字段:[字段列表及处理方式]
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称]
- 核心参数建议`
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:随机森林" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap
title="数据挖掘:随机森林"
buttons={<ButtonModal />}
extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
FP-Growth算法设计需求说明,结构化分析和建模建议
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
核心问题 :该数据集拟解决的业务问题是什么?(例如:挖掘商品关联购买模式、优化库存组合、设计推荐系统)
分析目标:
- 需要发现的关联模式类型(如“购买连衣裙的用户常搭配高跟鞋”)
- 业务价值目标(如"提升购物车添加率10%")
2. 特征工程与事务构建
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| 品类 | 直接使用 | 核心商品分类维度 |
| 颜色 | 直接使用 | 影响购买组合的因素 |
| 材质 | 直接使用 | 商品属性关联性分析 |
| 优惠类型 | 直接使用 | 购买决策驱动因素 |
排除字段:
| 字段名 | 排除原因 |
| 订单ID | 无业务解释性 |
| 用户年龄 | 非事务型特征 |
| 交易时间 | 与关联规则无直接关系 |
(2) 数据转换建议:
事务格式要求:
- 将数据转换为\`订单ID→[购买项列表]\`的事务格式(如\`订单A→[连衣裙_红色_氨纶, T恤_白色_棉质]\`)
缺失值处理:
- 策略:[删除/填充](如"空购物车订单需排除")
特征组合建议:
- 是否组合字段?[是/否及示例](如"将'品类+颜色+材质'合并为复合项以提升规则实用性")
3. 模型输入设计
事务数据格式:
订单ID | 购买项列表
A123 | [女裤, 泫雅风T恤, 双11优惠]
A456 | [连衣裙, 氨纶材质]
参数配置建议:
\`min_support\`:[建议值及理由](如"设置为0.03以筛选高频商品组合")
\`min_threshold\`:[建议值及理由](如"设置为0.5以保证规则实用性")
4. 算法实现建议
模型适配性:
是否适合FP-Growth?[是/否及理由]
若否,推荐调整:
尝试Apriori(如"小规模数据或低维度场景")
关键参数建议:
\`min_support=0.03-0.05\`(高频项集筛选)
\`use_collector=True\`(优化内存占用)
业务规则过滤:
推荐设置\`min_confidence>0.5\`和\`lift>2\`筛选强关联规则
计算资源建议:
特征维度>100时,建议先进行商品聚类降维
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述业务问题及目标]
2. 事务构建建议:
- 保留字段:[字段列表及处理方式和理由]
- 排除字段:[字段列表及排除原因]
3. 关键特征分析:
高频项集:
强关联规则:
4. 模型建议:
参数配置:
\`min_support=0.05\`(筛选高频商品组合)
\`min_confidence=0.6\`(保证规则可信度)
业务验证方式:
推荐验证方法:人工审核规则合理性(如"是否符合业务常识")
关键评估指标:lift值、置信度、支持度 `
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:FP-Growth" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap
title="数据挖掘:FP-Growth"
buttons={<ButtonModal />}
extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
层次聚类算法设计需求说明,结构化分析和建模建议
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
核心问题 :该数据集拟解决的业务问题是什么?(例如:识别用户消费行为分群、分析商品品类相似性等)
聚类目标:
- 需要发现的群体类型(如高价值客户群、相似商品类型群)
- 业务价值目标(如"通过分群优化营销策略")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| 销量 | 标准化 | 核心业务指标,量纲统一需求 |
| 实际付款 | 标准化 | 反映消费能力,数值型特征 |
| 品类 | One-Hot编码 | 类别型特征需转化为数值型 |
排除字段:
| 字段名 | 排除原因 |
| 订单ID | 无业务意义,唯一标识符 |
| 省份 | 分类层级过高(与城市字段冗余) |
(2) 特征处理建议:
标准化要求:
- 强制标准化:层次聚类对特征量纲敏感,必须进行标准化(\`StandardScaler\`)
分类特征:
- 编码方式:[One-Hot/标签编码](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除](如"年龄字段缺失率<5%,用均值填充")
降维建议:
- 是否需要 PCA?[是/否及理由](如"特征维度>20时降低计算复杂度")
3. 模型输入设计
请给出最终的模型输入方案 :
自变量(X):
字段列表及预处理方法:
[销量]:标准化 → 均值0,方差1
[实际付款]:标准化 → 均值0,方差1
[品类]:One-Hot编码 → 扩展为N个二元变量
距离度量:
推荐方法:[欧氏距离/余弦相似度](如"数值型特征适合欧氏距离")
4. 算法实现建议
模型适配性:
是否适合层次聚类?[是/否及理由]
若否,推荐调整:
尝试 K-Means(如"数据规模过大时更高效")
关键参数建议:
链接方法:[ward/complete/average](如"ward方法对球形簇效果最佳")
距离度量:[欧氏距离/余弦相似度]
聚类数量:[建议值及理由](如"通过 dendrogram 确定 elbow 点")
计算资源建议:
数据量>1e4时,建议使用近似算法(如"凝聚聚类替代层次聚类")
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述]
2. 特征选择:
- 保留字段:[字段列表及处理方式]
- 排除字段:[字段列表及排除原因]
3. 关键特征分析:
对聚类影响最大的特征:
\`实际付款\`(贡献度:32%)
特征冗余性分析:
\`销量\` & \`销售额\`(VIF=8.5,需删除其一)
4. 模型建议:
算法参数:
链接方法:\`ward\`(最小化簇内方差)
距离度量:\`欧氏距离\`(数值型特征适用)
聚类数量:
建议3-5类(通过 dendrogram 的 elbow 点判断)
可视化建议:
绘制 dendrogram 分析层次结构
使用 t-SNE/PCA 降维后观察聚类分布
5. 有效性验证
推荐验证方式:
内部指标:轮廓系数(Silhouette Score)
业务验证:
检查簇内用户特征一致性(如高付款簇的品类偏好)
对比 K-Means 聚类结果 `
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:层次聚类" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap
title="数据挖掘:层次聚类"
buttons={<ButtonModal />}
extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
Holt-Winters算法设计需求说明,结构化分析和建模建议
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
核心问题 :该数据集拟解决的业务问题是什么?(例如:预测未来30天商品销量、分析销售季节性规律等)
预测目标:
- 需要预测的指标(如"实际付款金额"、"日订单量")
- 业务价值目标(如"提升库存规划准确性")
2. 时间序列特征配置
请分步骤给出建议:
(1) 关键字段选择:
时间列:
字段名:[字段名]
- 处理方式:[标准化为datetime格式、设置频率(如'D'表示日)]
目标列:
字段名:[字段名](如\`实际付款\`、\`销量\`)
- 选择理由:
- 业务目标直接关联(如"预测销售额以优化库存")
- 数据需满足时间序列连续性(无缺失或稀疏时间段)
预测步长:
- 步数:[N步](如预测未来7天)
- 频率单位:[日/周/月]
(2) 数据预处理建议:
平稳性处理:
- 是否需要差分?[是/否及理由](如"存在明显趋势需一阶差分")
- 是否需要Box-Cox变换?[是/否及理由](如"数据呈指数增长")
缺失值处理:
- 策略:[插值/删除](如"用线性插值填充缺失日期")
季节性周期检测:
- 推荐周期:[N个月/周](如"发现12个月的年季节性")
3. 模型输入设计
数据格式要求:
时间列 | 目标列
2023-11-01 | 415.46
2023-11-02 | 514.28
参数配置建议:
\`seasonal='add'/'mul'\`:[建议类型及理由](如"乘法季节性适合销售额")
\`period=12\`:[周期值及检测依据]
4. 算法实现建议
模型适配性:
是否适合Holt-Winters?[是/否及理由]
若否,推荐调整:
尝试ARIMA(如"存在复杂趋势和噪声")
或 Prophet(如"需加入外生变量")
关键参数建议:
\`smoothing_level (α)\`:[建议值及理由](如"0.3捕捉趋势变化")
\`smoothing_trend (β)\`:[建议值及理由](如"0.1平滑趋势波动")
\`smoothing_seasonal (γ)\`:[建议值及理由](如"0.4捕捉季节性")
验证与评估:
推荐验证方法:滚动窗口验证(如"每30天滚动预测未来7天")
关键指标:MAE、RMSE、MAPE
计算资源建议:
数据量>1e4时,建议使用\`statsmodels\`的\`ExponentialSmoothing\`实现
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述业务问题及目标]
2. 时间序列配置:
时间列:\`交易成功时间\`(已转换为\`datetime\`格式,频率为日)
目标列:\`实际付款\`(连续型数值,需进行Box-Cox变换以稳定方差)
预测步长:30步(预测未来30天)
3. 关键特征分析:
季节性周期检测:
周期:12个月(ACF图显示显著峰值)
趋势稳定性:
需一阶差分(ADF检验p<0.05,原序列非平稳)
4. 模型建议:
参数配置:
\`seasonal='mul'\`(乘法季节性适合销售额增长趋势)
\`period=12\`(年季节性周期)
\`α=0.3, β=0.1, γ=0.4\`(通过网格搜索优化)
验证方式:
滚动窗口验证:最后1年数据作为测试集,每30天滚动预测
关键指标:MAPE<15%(业务可接受误差范围)
数据预处理**:
- 执行Box-Cox变换(λ=0.5)以消除异方差性 `
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:Holt-Winters" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap
title="数据挖掘:Holt-Winters"
buttons={<ButtonModal />}
extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
K-Means算法设计需求说明,结构化分析和建模建议
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
核心问题 :该数据集拟解决的业务问题是什么?(例如:客户分群、商品品类聚类、物流路径优化等)
聚类目标:
- 需要发现的群体类型(如高价值客户群、相似商品类型群)
- 业务价值目标(如"通过分群优化营销策略")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| 销量 | 标准化 | 核心业务指标,量纲统一需求 |
| 实际付款 | 标准化 | 消费能力关键指标 |
| 客户年龄 | 标准化 | 与购买行为相关(如年龄分层) |
| 品类 | One-Hot编码 | 类别型特征需转化为数值型 |
排除字段:
| 字段名 | 排除原因 |
| 订单编号 | 无业务意义,唯一标识符 |
| 交易时间 | 非数值型且无直接业务解释性 |
| 物流信息 | 与客户/商品特征无关 |
(2) 特征处理建议:
标准化要求:
- 强制标准化:K-Means对特征量纲敏感,必须进行标准化(\`StandardScaler\`)
分类特征:
- 编码方式:[One-Hot/标签编码](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除](如"年龄字段缺失率<5%,用均值填充")
降维建议:
- 是否需要 PCA?[是/否及理由](如"特征维度>20时降低计算复杂度")
3. 模型输入设计
请给出最终的模型输入方案 :
自变量(X):
字段列表及预处理方法:
[销量]:标准化 → 均值0,方差1
[实际付款]:标准化 → 均值0,方差1
[品类]:One-Hot编码 → 扩展为N个二元变量
距离度量:
推荐方法:欧氏距离(K-Means默认)
4. 算法实现建议
模型适配性:
是否适合K-Means?[是/否及理由]
若否,推荐调整:
尝试层次聚类(如"需要层次结构解释")或DBSCAN(如"存在噪声数据")
关键参数建议:
簇数(n_clusters):[建议值及理由](如"通过肘部法则确定为3类")
初始化方法:[k-means++/随机](推荐k-means++以提高收敛稳定性)
max_iter:[建议值及理由](如"设置为300次迭代以确保收敛")
计算资源建议:
数据量>1e4时,建议使用Mini-Batch K-Means加速
有效性验证:
推荐指标:轮廓系数、Calinski-Harabasz指数
业务验证:检查簇内特征一致性(如高付款簇的品类偏好)
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述]
2. 特征选择:
- 保留字段:[字段列表及处理方式]
- 排除字段:[字段列表及排除原因]
3. 关键特征分析:
对聚类影响最大的特征:
\`实际付款\`(贡献度:32%)
特征冗余性分析:
\`销量\` & \`销售额\`(VIF=8.5,需删除其一)
4. 模型建议:
簇数建议:
推荐3类(肘部法则显示WCSS在k=3时显著下降)
参数配置:
\`init='k-means++'\`(避免随机初始化陷阱)
\`max_iter=300\`(平衡计算效率与收敛性)
有效性验证:
内部指标:轮廓系数(目标>0.7)
业务验证:
检查簇内客户特征一致性(如高付款簇的品类偏好)
对比层次聚类结果 `
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:K-Means" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap title="数据挖掘:K-Means" buttons={<ButtonModal />} extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
线性回归算法设计需求说明,结构化分析和建模建议。
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
1.
核心问题 :该数据集拟解决的业务问题是什么?(例如预测销售额、分析用户行为影响因素等)
2.
因变量(目标)选择 :根据业务目标,选择最适合作为因变量(Y)的字段,并说明选择依据。
3.
模型预期 :预期模型应达到的性能指标(如R²、RMSE等),或业务价值目标(如提升预测准确率10%)。
2. 特征工程与自变量选择
请分步骤给出建议:
(1)特征筛选标准
从数据集中选择适合作为自变量(X)的特征,需满足以下条件:
相关性 :与因变量有显著统计学关联(如皮尔逊相关系数>0.3或p值<0.05);
可解释性 :符合业务逻辑(例如广告投入与销售额应正相关);
数据质量 :无严重缺失值(缺失率<5%)且分布合理(无极端异常值)。
(2)特征处理建议
数值型特征 :是否需要标准化/归一化?(如线性回归对特征量纲敏感)
分类特征 :是否需要独热编码或嵌入处理?(如性别、地区等字段)
交互特征 :是否存在需要组合的特征?(例如广告投入×用户年龄的交互项)
(3)排除特征
列出应排除的特征并说明原因(如多重共线性、冗余字段、无关变量)。
3. 模型输入设计
请给出最终的模型输入方案 :
自变量(X) :具体字段名称及预处理方法;
因变量(Y) :字段名称及是否需要转换(如对数变换)。
4. 算法实现建议
1.
模型适配性 :
线性回归是否适合该数据集?若否,是否需要调整(如添加正则化项变为岭回归/lasso)?
若数据存在非线性关系,是否需要先尝试多项式回归?
1.
计算资源建议 :
特征维度是否需要降维(如PCA)以减少模型计算复杂度?
1.
评估与验证 :
推荐的交叉验证策略(如K折交叉验证);
需要监控的评估指标(如R²、调整R²、F统计量)。
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述]
2. 因变量选择:[字段名] + [选择理由]
3. 自变量选择:
- 保留字段:[字段列表及处理方式]
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称] `
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:线性回归" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap
title="数据挖掘:线性回归"
buttons={<ButtonModal />}
extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
逻辑回归算法设计需求说明,结构化分析和建模建议。
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
输出要求
请以以下结构分点输出,确保结论清晰、逻辑严谨:
1. 问题定义
[一句话描述业务问题及建模目标,例如:"预测用户是否购买高价值商品,以优化营销策略"]
2. 因变量选择
字段名 :[目标变量字段名]
选择理由 :
[业务意义说明,如"该字段直接反映购买行为"]
[数据分布说明,如"二分类/多分类分布均衡"]
3. 自变量选择
保留字段 :
字段名 | 处理方式 | 理由
[字段1] | [标准化/One-Hot等] | [业务相关性/数据质量]
[字段2 | ... | ...
排除字段 :
字段名 | 排除原因
[字段X] | [冗余/强共线性/数据缺失率>30%等]
4. 关键特征分析
相关性最高特征 :
[字段名](与因变量相关系数:[数值],如|r|=0.78)
高共线性特征对 :
[字段A & 字段B](VIF值:[数值],如VIF=8.5,需处理)
5. 模型建议
是否需要正则化 :
[是/否]
理由 :
[如"存在多重共线性(VIF>5),推荐L2正则化"]
[或"特征稀疏且无冗余,无需正则化"]
推荐验证方式 :
[方法名称,如"分层5折交叉验证"]
理由 :
[如"数据量较小且类别分布不均衡"]
6. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述]
2. 因变量选择:[字段名] + [选择理由]
3. 自变量选择:
- 保留字段:[字段列表及处理方式]
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称] `
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:逻辑回归" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap
title="数据挖掘:逻辑回归"
buttons={<ButtonModal />}
extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
支持向量机(SVM)算法设计需求说明,结构化分析和建模建议
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
1.
核心问题 :该数据集拟解决的业务问题是什么?(例如:预测用户购买品类、识别高价值客户流失风险等)
2.
因变量(目标)选择 :
字段名:[目标变量字段名]
- 选择依据:
- 业务相关性说明(如"直接关联用户购买行为")
- 数据类型匹配(如分类问题需离散变量、回归问题需连续变量)
模型预期 :
预期性能指标(如准确率>85%、F1-score>0.7)
或业务目标(如"将客户流失预测准确率提升15%")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| [字段1] | 标签编码/One-Hot | 标准化/One-Hot | 与因变量相关性显著(如|r|=0.5+)、业务逻辑相关 |
| [字段2] | 处理缺失值(如填充/删除) | 数据质量达标(缺失率<5%)、分布合理 |
排除字段:
| 字段名 | 排除原因 |
| [字段X] | 多重共线性(VIF>10)、无关变量、数据噪声 |
(2) 特征处理建议:
标准化要求:
- 强制标准化:SVM对特征量纲敏感,必须进行标准化(\`StandardScaler\`)
分类特征:
- 编码方式:[One-Hot/标签编码](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除/模型内置处理](如"年龄字段缺失率3%,用中位数填充")
异常值处理:
- 策略:[离群值截断/删除](如"销量字段存在极端值,使用IQR法处理")
3. 模型输入设计
请给出最终的模型输入方案 :
自变量(X):
字段列表及预处理方法:
[字段A]:标准化 → 均值0,方差1
[字段B]:One-Hot编码 → 扩展为N个二元变量
因变量(Y):
字段名:[字段名]
是否需要离散化?[是/否及方法](如"销售额连续值转为高/中/低三类")
4. 算法实现建议
模型适配性:
是否适合SVM?[是/否及理由]
若否,推荐调整:
尝试线性SVM(如"高维稀疏数据")或核技巧(如"非线性边界问题用RBF核")
关键参数建议:
\`C\`:[建议值及理由](如"设置为1.0平衡分类边界与误分类惩罚")
\`kernel\`:[linear/rbf/poly等](如"非线性问题推荐RBF核")
\`gamma\`:[建议值或'auto'](如"RBF核时设为'auto'或网格搜索优化")
计算资源建议:
是否需要降维?[是/否及方法](如"特征维度>1e3时用PCA降维")
验证与评估:
验证策略:[分层5折交叉验证](如"数据类别分布不均衡")
关键指标:[准确率、F1-score、AUC-ROC(二分类时)]
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述]
2. 因变量选择:[字段名] + [选择理由]
3. 自变量选择:
- 保留字段:[字段列表及处理方式]
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称]
- 核心参数建议`
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:支持向量机" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap
title="数据挖掘:支持向量机"
buttons={<ButtonModal />}
extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
export const prompt = `任务目标
决策树算法设计需求说明,结构化分析和建模建议
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
1. 问题定义与目标明确
请明确回答以下问题:
1.
核心问题 :该数据集拟解决的业务问题是什么?(例如:预测用户购买品类、识别高价值客户流失风险等)
2.
因变量(目标)选择 :
字段名:[目标变量字段名]
- 选择依据:
- 业务相关性说明(如"直接关联用户购买行为")
- 数据类型匹配(如分类问题需离散变量、回归问题需连续变量)
模型预期 :
预期性能指标(如准确率>85%、F1-score>0.7)
或业务目标(如"将客户流失预测准确率提升15%")
2. 特征工程与自变量选择
请分步骤给出建议:
(1) 特征筛选标准:
保留字段:
| 字段名 | 处理方式 | 保留理由(满足以下条件) |
| [字段1] | 标签编码/One-Hot | 与因变量信息增益高、业务逻辑相关 |
| [字段2] | 处理缺失值(如填充/删除) | 数据质量达标(缺失率<5%)、分布合理 |
排除字段:
| 字段名 | 排除原因 |
| [字段X] | 多重共线性(VIF>10)、无关变量、数据噪声 |
(2) 特征处理建议:
分类特征:
- 编码方式:[标签编码/One-Hot](如"品类字段需One-Hot编码以保留类别信息")
缺失值处理:
- 策略:[填充/删除/模型内置处理](如"年龄字段缺失率3%,用中位数填充")
异常值处理:
- 策略:[离群值截断/删除](如"销量字段存在极端值,使用IQR法处理")
3. 模型输入设计
请给出最终的模型输入方案 :
自变量(X):
字段列表及预处理方法:
[字段A]:标签编码 → 转换为整数类型
[字段B]:One-Hot编码 → 扩展为N个二元变量
因变量(Y):
字段名:[字段名]
是否需要离散化?[是/否及方法](如"销售额连续值转为高/中/低三类")
4. 算法实现建议
模型适配性:
是否适合决策树?[是/否及理由]
若否,推荐调整:
尝试随机森林/梯度提升树(如"特征间交互复杂,需集成学习")
关键参数建议:
\`max_depth\`:[建议值及理由](如"防止过拟合,设置为5")
\`min_samples_split\`:[建议值及理由](如"避免过分割,设置为10")
\`class_weight\`:[平衡/不均衡](如"类别分布不均衡时设置'balanced'")
计算资源建议:
是否需要特征选择?[是/否及方法](如"使用特征重要性筛选Top 10字段")
验证与评估:
验证策略:[分层5折交叉验证](如"数据类别分布不均衡")
关键指标:[准确率、F1-score、特征重要性图表]
5. 输出格式要求
请以以下结构分点输出,便于模型生成清晰结论:
1. 问题定义:[一句话描述]
2. 因变量选择:[字段名] + [选择理由]
3. 自变量选择:
- 保留字段:[字段列表及处理方式]
- 排除字段:[字段列表及排除原因]
4. 关键特征分析:
- 相关性最高特征:[字段名](相关系数值)
- 高共线性特征对:[字段对及VIF值]
5. 模型建议:
- 是否需要正则化?[是/否及理由]
- 推荐验证方式:[方法名称]
- 核心参数建议`
import { lazy } from 'react'
import DataWrap from '@/components/data/DataWrap'
import { prompt } from '../prompt'
const ButtonModal = lazy(() => import('../components/ButtonModal'))
const AIModal = lazy(() => import('@/components/data/AIModal'))
export default function DataProcess() {
return <DataWrap title="数据挖掘:决策树" buttons={<ButtonModal />}></DataWrap>
return (
<DataWrap title="数据挖掘:决策树" buttons={<ButtonModal />} extraButtons={<AIModal prompt={prompt} />}></DataWrap>
)
}
......@@ -7,13 +7,14 @@ import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
interface ResultItem {
key: string
name: string
desc: string
}
export default function ButtonModal() {
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => result.name)
const resultsOptions = results.map((result) => ({ label: result.name, value: result.key }))
const { isLoading, post } = useAI({
onComplete: (message) => {
......@@ -34,7 +35,7 @@ export default function ButtonModal() {
const [open, setOpen] = useState(false)
const [current, setCurrent] = useState(0)
const [value, setValue] = useState(1)
const [value, setValue] = useState('')
const onChange = (e: RadioChangeEvent) => {
setValue(e.target.value)
......@@ -79,7 +80,7 @@ export default function ButtonModal() {
{current > 0 && <Button onClick={() => prev()}>上一步</Button>}
{current < steps.length - 1 && (
<Button type="primary" onClick={() => next()} disabled={!!value}>
<Button type="primary" onClick={() => next()} disabled={!value}>
下一步
</Button>
)}
......
......@@ -7,13 +7,14 @@ import { useAI } from '@/hooks/useAI'
import prompt from '@/utils/prompt'
interface ResultItem {
key: string
name: string
desc: string
}
export default function ButtonModal() {
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => result.name)
const resultsOptions = results.map((result) => ({ label: result.name, value: result.key }))
const { isLoading, post } = useAI({
onComplete: (message) => {
......@@ -34,7 +35,7 @@ export default function ButtonModal() {
const [open, setOpen] = useState(false)
const [current, setCurrent] = useState(0)
const [value, setValue] = useState(1)
const [value, setValue] = useState('')
const onChange = (e: RadioChangeEvent) => {
setValue(e.target.value)
......@@ -72,7 +73,7 @@ export default function ButtonModal() {
{current > 0 && <Button onClick={() => prev()}>上一步</Button>}
{current < steps.length - 1 && (
<Button type="primary" onClick={() => next()} disabled={!!value}>
<Button type="primary" onClick={() => next()} disabled={!value}>
下一步
</Button>
)}
......
......@@ -9,13 +9,14 @@ import prompt from '@/utils/prompt'
const CheckboxGroup = Checkbox.Group
interface ResultItem {
key: string
name: string
desc: string
}
export default function ButtonModal() {
const [results, setResults] = useState<ResultItem[]>([])
const resultsOptions = results.map((result) => result.name)
const resultsOptions = results.map((result) => ({ label: result.name, value: result.key }))
const { isLoading, post } = useAI({
onComplete: (message) => {
......@@ -49,7 +50,7 @@ export default function ButtonModal() {
}
const onCheckAllChange: CheckboxProps['onChange'] = (e) => {
setCheckedList(e.target.checked ? resultsOptions : [])
setCheckedList(e.target.checked ? resultsOptions.map((item) => item.value) : [])
}
const next = () => {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论