{"id":3868,"date":"2025-08-19T20:55:01","date_gmt":"2025-08-19T12:55:01","guid":{"rendered":"http:\/\/viplao.com\/?p=3868"},"modified":"2025-09-13T23:19:06","modified_gmt":"2025-09-13T15:19:06","slug":"%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86","status":"publish","type":"post","link":"http:\/\/viplao.com\/index.php\/2025\/08\/19\/%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86\/","title":{"rendered":"\u3010Python\u5b9e\u8df5\u6848\u4f8b\u3011\u7535\u5546\u5e73\u53f0\u6570\u636e\u5206\u6790\u548c\u6316\u6398 &#8211; \u7535\u5546\u9500\u552e\u5206\u6790\u5b9e\u4f8b"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_71 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u6587\u7ae0\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"http:\/\/viplao.com\/index.php\/2025\/08\/19\/%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86\/#1_%E9%83%A8%E9%97%A8%E9%94%80%E5%94%AE%E5%88%86%E6%9E%90\" title=\"1. \u90e8\u95e8\u9500\u552e\u5206\u6790\">1. \u90e8\u95e8\u9500\u552e\u5206\u6790<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"http:\/\/viplao.com\/index.php\/2025\/08\/19\/%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86\/#2_%E5%91%98%E5%B7%A5%E7%BB%A9%E6%95%88%E5%88%86%E6%9E%90\" title=\"2. \u5458\u5de5\u7ee9\u6548\u5206\u6790\">2. \u5458\u5de5\u7ee9\u6548\u5206\u6790<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"http:\/\/viplao.com\/index.php\/2025\/08\/19\/%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86\/#3_%E9%94%80%E5%94%AE%E8%B6%8B%E5%8A%BF%E5%88%86%E6%9E%90\" title=\"3. \u9500\u552e\u8d8b\u52bf\u5206\u6790\">3. \u9500\u552e\u8d8b\u52bf\u5206\u6790<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"http:\/\/viplao.com\/index.php\/2025\/08\/19\/%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86\/#4_%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96\" title=\"4. \u6570\u636e\u53ef\u89c6\u5316\">4. \u6570\u636e\u53ef\u89c6\u5316<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"http:\/\/viplao.com\/index.php\/2025\/08\/19\/%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86\/#5_%E5%88%86%E6%9E%90%E7%BB%93%E8%AE%BA\" title=\"5. \u5206\u6790\u7ed3\u8bba\">5. \u5206\u6790\u7ed3\u8bba<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"http:\/\/viplao.com\/index.php\/2025\/08\/19\/%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86\/#%E6%A1%88%E4%BE%8B2\" title=\"\u6848\u4f8b2\">\u6848\u4f8b2<\/a><\/li><\/ul><\/nav><\/div>\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1_%E9%83%A8%E9%97%A8%E9%94%80%E5%94%AE%E5%88%86%E6%9E%90\"><\/span>1. \u90e8\u95e8\u9500\u552e\u5206\u6790<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\u90e8\u95e8<\/td><td>\u603b\u9500\u552e\u989d<\/td><td>\u5e73\u5747\u9500\u552e\u989d<\/td><td>\u4ea4\u6613\u6b21\u6570<\/td><td>\u9884\u7b97\u4f7f\u7528\u7387<\/td><\/tr><tr><td>\u5e02\u573a\u90e8<\/td><td>20,000.00<\/td><td>10,000.00<\/td><td>2<\/td><td>4.00%<\/td><\/tr><tr><td>\u6280\u672f\u90e8<\/td><td>81,000.00<\/td><td>27,000.00<\/td><td>3<\/td><td>10.12%<\/td><\/tr><tr><td>\u9500\u552e\u90e8<\/td><td>30,000.00<\/td><td>5,000.00<\/td><td>6<\/td><td>3.00%<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_%E5%91%98%E5%B7%A5%E7%BB%A9%E6%95%88%E5%88%86%E6%9E%90\"><\/span>2. \u5458\u5de5\u7ee9\u6548\u5206\u6790<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\u59d3\u540d<\/td><td>\u90e8\u95e8<\/td><td>\u603b\u9500\u552e\u989d<\/td><td>\u5e73\u5747\u9500\u552e\u989d<\/td><td>\u9500\u552e\u7b14\u6570<\/td><td>\u9500\u552e\/\u85aa\u8d44\u6bd4<\/td><\/tr><tr><td>\u5f20\u660e<\/td><td>\u9500\u552e\u90e8<\/td><td>17,700.00<\/td><td>5,900.00<\/td><td>3<\/td><td>1.18<\/td><\/tr><tr><td>\u674e\u534e<\/td><td>\u9500\u552e\u90e8<\/td><td>12,300.00<\/td><td>4,100.00<\/td><td>3<\/td><td>1.54<\/td><\/tr><tr><td>\u738b\u82b3<\/td><td>\u6280\u672f\u90e8<\/td><td>18,000.00<\/td><td>18,000.00<\/td><td>1<\/td><td>1.50<\/td><\/tr><tr><td>\u8d75\u521a<\/td><td>\u6280\u672f\u90e8<\/td><td>63,000.00<\/td><td>31,500.00<\/td><td>2<\/td><td>3.50<\/td><\/tr><tr><td>\u5218\u6d0b<\/td><td>\u5e02\u573a\u90e8<\/td><td>20,000.00<\/td><td>10,000.00<\/td><td>2<\/td><td>2.22<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3_%E9%94%80%E5%94%AE%E8%B6%8B%E5%8A%BF%E5%88%86%E6%9E%90\"><\/span>3. \u9500\u552e\u8d8b\u52bf\u5206\u6790<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>\u6700\u9ad8\u5355\u65e5\u9500\u552e\u989d\uff1a131,000.00<\/p>\n\n\n\n<p>\u6700\u4f4e\u5355\u65e5\u9500\u552e\u989d\uff1a131,000.00<\/p>\n\n\n\n<p>\u5e73\u5747\u65e5\u9500\u552e\u989d\uff1a131,000.00<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"4_%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96\"><\/span>4. \u6570\u636e\u53ef\u89c6\u5316<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u9500\u552e\u6570\u636e\u7684\u53ef\u89c6\u5316\u5206\u6790\uff1a<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"5_%E5%88%86%E6%9E%90%E7%BB%93%E8%AE%BA\"><\/span>5. \u5206\u6790\u7ed3\u8bba<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ol type=\"1\">\n<li>&nbsp;\u5404\u90e8\u95e8\u9500\u552e\u60c5\u51b5\u603b\u4f53\u8868\u73b0\u826f\u597d\uff0c\u9884\u7b97\u6267\u884c\u7387\u4fdd\u6301\u5728\u5408\u7406\u6c34\u5e73\u3002<\/li>\n\n\n\n<li>\u5458\u5de5\u9500\u552e\u4e1a\u7ee9\u5206\u5e03\u76f8\u5bf9\u5747\u8861\uff0c\u56e2\u961f\u534f\u4f5c\u6548\u679c\u663e\u8457\u3002<\/li>\n\n\n\n<li>&nbsp;\u9500\u552e\u8d8b\u52bf\u5448\u73b0\u7a33\u5b9a\u589e\u957f\u6001\u52bf\uff0c\u5e02\u573a\u53cd\u5e94\u79ef\u6781\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>SET&nbsp;FOREIGN_KEY_CHECKS&nbsp;=&nbsp;0;SET&nbsp;NAMES utf8mb4;-- departments DDLCREATE&nbsp;TABLE&nbsp;`departments` (`department_id`&nbsp;INT(10)&nbsp;NOT&nbsp;NULL&nbsp;AUTO_INCREMENT,`department_name`&nbsp;VARCHAR(50)&nbsp;CHARACTER&nbsp;SET&nbsp;utf8mb4&nbsp;COLLATE&nbsp;utf8mb4_unicode_ci&nbsp;NULL,`manager_id`&nbsp;INT(10)&nbsp;NULL,`budget`&nbsp;DECIMAL(15,2)&nbsp;NULL,UNIQUE&nbsp;INDEX `department_name`(`department_name`&nbsp;ASC)&nbsp;USING&nbsp;BTREE,PRIMARY&nbsp;KEY (`department_id`)) ENGINE&nbsp;=&nbsp;InnoDB&nbsp;CHARACTER&nbsp;SET&nbsp;=&nbsp;utf8mb4&nbsp;COLLATE&nbsp;=&nbsp;utf8mb4_unicode_ci AUTO_INCREMENT&nbsp;=&nbsp;4&nbsp;ROW_FORMAT&nbsp;=&nbsp;Dynamic;-- employees DDLCREATE&nbsp;TABLE&nbsp;`employees` (`employee_id`&nbsp;INT(10)&nbsp;NOT&nbsp;NULL,`name`&nbsp;VARCHAR(50)&nbsp;CHARACTER&nbsp;SET&nbsp;utf8mb4&nbsp;COLLATE&nbsp;utf8mb4_unicode_ci&nbsp;NOT&nbsp;NULL,`department`&nbsp;VARCHAR(50)&nbsp;CHARACTER&nbsp;SET&nbsp;utf8mb4&nbsp;COLLATE&nbsp;utf8mb4_unicode_ci&nbsp;NULL,`position`&nbsp;VARCHAR(50)&nbsp;CHARACTER&nbsp;SET&nbsp;utf8mb4&nbsp;COLLATE&nbsp;utf8mb4_unicode_ci&nbsp;NULL,`hire_date`&nbsp;DATE&nbsp;NULL,`salary`&nbsp;DECIMAL(10,2)&nbsp;NULL,PRIMARY&nbsp;KEY (`employee_id`)) ENGINE&nbsp;=&nbsp;InnoDB&nbsp;CHARACTER&nbsp;SET&nbsp;=&nbsp;utf8mb4&nbsp;COLLATE&nbsp;=&nbsp;utf8mb4_unicode_ci ROW_FORMAT&nbsp;=&nbsp;Dynamic;-- sales DDLCREATE&nbsp;TABLE&nbsp;`sales` (`sale_id`&nbsp;INT(10)&nbsp;NOT&nbsp;NULL&nbsp;AUTO_INCREMENT,`employee_id`&nbsp;INT(10)&nbsp;NULL,`product`&nbsp;VARCHAR(50)&nbsp;CHARACTER&nbsp;SET&nbsp;utf8mb4&nbsp;COLLATE&nbsp;utf8mb4_unicode_ci&nbsp;NULL,`amount`&nbsp;DECIMAL(10,2)&nbsp;NULL,`sale_date`&nbsp;DATE&nbsp;NULL,INDEX `employee_id`(`employee_id`&nbsp;ASC)&nbsp;USING&nbsp;BTREE,PRIMARY&nbsp;KEY (`sale_id`)) ENGINE&nbsp;=&nbsp;InnoDB&nbsp;CHARACTER&nbsp;SET&nbsp;=&nbsp;utf8mb4&nbsp;COLLATE&nbsp;=&nbsp;utf8mb4_unicode_ci AUTO_INCREMENT&nbsp;=&nbsp;12&nbsp;ROW_FORMAT&nbsp;=&nbsp;Dynamic;-- sales IndexesALTER&nbsp;TABLE&nbsp;`sales`&nbsp;&nbsp;ADD&nbsp;CONSTRAINT&nbsp;`sales_ibfk_1`&nbsp;FOREIGN&nbsp;KEY (`employee_id`)&nbsp;REFERENCES&nbsp;`employees` (`employee_id`)&nbsp;ON&nbsp;DELETE&nbsp;NO&nbsp;ACTION&nbsp;ON&nbsp;UPDATE&nbsp;NO&nbsp;ACTION;-- departments DMLINSERT&nbsp;INTO&nbsp;`departments` (`department_id`,`department_name`,`manager_id`,`budget`)&nbsp;VALUES&nbsp;(1,'\u9500\u552e\u90e8',101,1000000.00),(2,'\u6280\u672f\u90e8',104,800000.00),(3,'\u5e02\u573a\u90e8',105,500000.00);-- employees DMLINSERT&nbsp;INTO&nbsp;`employees` (`employee_id`,`name`,`department`,`position`,`hire_date`,`salary`)&nbsp;VALUES&nbsp;(101,'\u5f20\u660e','\u9500\u552e\u90e8','\u9500\u552e\u7ecf\u7406','2025-08-05',15000.00),(102,'\u674e\u534e','\u9500\u552e\u90e8','\u9500\u552e\u4ee3\u8868','2025-08-05',8000.00),(103,'\u738b\u82b3','\u6280\u672f\u90e8','\u5de5\u7a0b\u5e08','2025-08-05',12000.00),(104,'\u8d75\u521a','\u6280\u672f\u90e8','\u9ad8\u7ea7\u5de5\u7a0b\u5e08','2025-08-05',18000.00),(105,'\u5218\u6d0b','\u5e02\u573a\u90e8','\u5e02\u573a\u4e13\u5458','2025-08-05',9000.00);-- sales DMLINSERT&nbsp;INTO&nbsp;`sales` (`sale_id`,`employee_id`,`product`,`amount`,`sale_date`)&nbsp;VALUES&nbsp;(1,101,'\u7b14\u8bb0\u672c\u7535\u8111',12000.00,'2025-08-05'),(2,102,'\u667a\u80fd\u624b\u673a',6000.00,'2025-08-05'),(3,101,'\u663e\u793a\u5668',2500.00,'2025-08-05'),(4,103,'\u8f6f\u4ef6\u6388\u6743',18000.00,'2025-08-05'),(5,102,'\u5e73\u677f\u7535\u8111',4500.00,'2025-08-05'),(6,104,'\u670d\u52a1\u5668',35000.00,'2025-08-05'),(7,105,'\u5e7f\u544a\u4f4d',8000.00,'2025-08-05'),(8,101,'\u6253\u5370\u673a',3200.00,'2025-08-05'),(9,102,'\u8def\u7531\u5668',1800.00,'2025-08-05'),(10,104,'\u5de5\u4f5c\u7ad9',28000.00,'2025-08-05'),(11,105,'\u63a8\u5e7f\u6d3b\u52a8',12000.00,'2025-08-05');SET&nbsp;FOREIGN_KEY_CHECKS&nbsp;=&nbsp;1;<\/code><\/pre>\n\n\n\n<p><strong>3\u3001\u8be6\u7ec6\u7684\u5b9e\u73b0\u4ee3\u7801<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;pymysql<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;pandas&nbsp;<span class=\"code-snippet__keyword\">as<\/span>&nbsp;pd<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;matplotlib.pyplot&nbsp;<span class=\"code-snippet__keyword\">as<\/span>&nbsp;plt<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;seaborn&nbsp;<span class=\"code-snippet__keyword\">as<\/span>&nbsp;sns<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;datetime&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;datetime, timedelta<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;numpy&nbsp;<span class=\"code-snippet__keyword\">as<\/span>&nbsp;np<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;scipy.interpolate&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;make_interp_spline<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;decimal&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;Decimal<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;matplotlib&nbsp;<span class=\"code-snippet__keyword\">as<\/span>&nbsp;mpl<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;docx&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;Document<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;docx.shared&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;Inches, Pt, RGBColor<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;docx.enum.text&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;WD_ALIGN_PARAGRAPH<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">import<\/span>&nbsp;io<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">from<\/span>&nbsp;matplotlib.patches&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;Patch &nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u8fd9\u884c<\/span><\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"># \u8bbe\u7f6e\u5168\u5c40\u4e2d\u6587\u5b57\u4f53\u652f\u6301<\/span><\/code><code><span leaf=\"\">plt.rcParams&#91;<span class=\"code-snippet__string\">'font.sans-serif'<\/span>] = &#91;<span class=\"code-snippet__string\">'SimHei'<\/span>,&nbsp;<span class=\"code-snippet__string\">'Microsoft YaHei'<\/span>,&nbsp;<span class=\"code-snippet__string\">'KaiTi'<\/span>,&nbsp;<span class=\"code-snippet__string\">'Arial Unicode MS'<\/span>]<\/span><\/code><code><span leaf=\"\">plt.rcParams&#91;<span class=\"code-snippet__string\">'axes.unicode_minus'<\/span>] =&nbsp;<span class=\"code-snippet__literal\">False<\/span><\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">get_conn<\/span>():<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;pymysql.connect(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; host=<span class=\"code-snippet__string\">'localhost'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; user=<span class=\"code-snippet__string\">'root'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; password=<span class=\"code-snippet__string\">'root'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; database=<span class=\"code-snippet__string\">'yggx'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; charset=<span class=\"code-snippet__string\">'utf8mb4'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; cursorclass=pymysql.cursors.DictCursor<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; )<\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">run_query<\/span>(<span class=\"code-snippet__params\">sql<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u6267\u884cSQL\u67e5\u8be2\u5e76\u8fd4\u56deDataFrame\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; conn = get_conn()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">try<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">with<\/span>&nbsp;conn.cursor()&nbsp;<span class=\"code-snippet__keyword\">as<\/span>&nbsp;cursor:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cursor.execute(sql)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = cursor.fetchall()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;pd.DataFrame(result)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">finally<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; conn.close()<\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">convert_decimal_to_float<\/span>(<span class=\"code-snippet__params\">df<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u5c06DataFrame\u4e2d\u7684Decimal\u7c7b\u578b\u8f6c\u6362\u4e3afloat\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;col&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;df.columns:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;df&#91;col].dtype ==&nbsp;<span class=\"code-snippet__built_in\">object<\/span>&nbsp;<span class=\"code-snippet__keyword\">and<\/span>&nbsp;<span class=\"code-snippet__built_in\">any<\/span>(<span class=\"code-snippet__built_in\">isinstance<\/span>(x, Decimal)&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;x&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;df&#91;col]):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; df&#91;col] = df&#91;col].astype(<span class=\"code-snippet__built_in\">float<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;df<\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">analyze_data<\/span>():<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u6267\u884c\u5173\u7cfb\u6570\u636e\u5206\u6790 - \u4fee\u590d\u7248\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u5f00\u59cb\u6570\u636e\u5206\u6790...\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 1. \u83b7\u53d6\u6240\u6709\u6570\u636e<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; employees_df = run_query(<span class=\"code-snippet__string\">\"SELECT * FROM employees\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; sales_df = run_query(<span class=\"code-snippet__string\">\"SELECT * FROM sales\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; dept_df = run_query(<span class=\"code-snippet__string\">\"SELECT * FROM departments\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u8f6c\u6362Decimal\u7c7b\u578b\u4e3afloat<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; employees_df = convert_decimal_to_float(employees_df)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; sales_df = convert_decimal_to_float(sales_df)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; dept_df = convert_decimal_to_float(dept_df)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u5458\u5de5\u6570\u636e (\u524d5\u884c):\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(employees_df.head())<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u9500\u552e\u6570\u636e (\u524d5\u884c):\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(sales_df.head())<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u90e8\u95e8\u6570\u636e:\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(dept_df)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u68c0\u67e5\u6570\u636e\u662f\u5426\u4e3a\u7a7a<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;employees_df.empty&nbsp;<span class=\"code-snippet__keyword\">or<\/span>&nbsp;sales_df.empty&nbsp;<span class=\"code-snippet__keyword\">or<\/span>&nbsp;dept_df.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u9519\u8bef: \u4ece\u6570\u636e\u5e93\u8bfb\u53d6\u7684\u6570\u636e\u4e3a\u7a7a\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;{}<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 2. \u5173\u7cfb\u8fde\u63a5\uff1a\u5458\u5de5\u9500\u552e\u660e\u7ec6<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; sales_detail = pd.merge(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; sales_df,&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; employees_df&#91;&#91;<span class=\"code-snippet__string\">'employee_id'<\/span>,&nbsp;<span class=\"code-snippet__string\">'name'<\/span>,&nbsp;<span class=\"code-snippet__string\">'department'<\/span>,&nbsp;<span class=\"code-snippet__string\">'position'<\/span>]],<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; on=<span class=\"code-snippet__string\">'employee_id'<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; )<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u90e8\u95e8\u9884\u7b97\u4fe1\u606f<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; sales_detail = pd.merge(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; sales_detail,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; dept_df&#91;&#91;<span class=\"code-snippet__string\">'department_name'<\/span>,&nbsp;<span class=\"code-snippet__string\">'budget'<\/span>]],<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; left_on=<span class=\"code-snippet__string\">'department'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; right_on=<span class=\"code-snippet__string\">'department_name'<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ).drop(columns=<span class=\"code-snippet__string\">'department_name'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u9500\u552e\u660e\u7ec6 (\u524d5\u884c):\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(sales_detail.head())<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 3. \u90e8\u95e8\u9500\u552e\u5206\u6790<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; dept_sales = sales_detail.groupby(<span class=\"code-snippet__string\">'department'<\/span>).agg(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; total_sales=(<span class=\"code-snippet__string\">'amount'<\/span>,&nbsp;<span class=\"code-snippet__string\">'sum'<\/span>),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; avg_sale=(<span class=\"code-snippet__string\">'amount'<\/span>,&nbsp;<span class=\"code-snippet__string\">'mean'<\/span>),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; transaction_count=(<span class=\"code-snippet__string\">'sale_id'<\/span>,&nbsp;<span class=\"code-snippet__string\">'count'<\/span>),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; budget=(<span class=\"code-snippet__string\">'budget'<\/span>,&nbsp;<span class=\"code-snippet__string\">'first'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ).reset_index()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; dept_sales&#91;<span class=\"code-snippet__string\">'budget_utilization'<\/span>] = dept_sales&#91;<span class=\"code-snippet__string\">'total_sales'<\/span>] \/ dept_sales&#91;<span class=\"code-snippet__string\">'budget'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u90e8\u95e8\u9500\u552e\u5206\u6790:\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(dept_sales)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 4. \u5458\u5de5\u7ee9\u6548\u5206\u6790<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; employee_performance = sales_detail.groupby(&#91;<span class=\"code-snippet__string\">'employee_id'<\/span>,&nbsp;<span class=\"code-snippet__string\">'name'<\/span>,&nbsp;<span class=\"code-snippet__string\">'department'<\/span>]).agg(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; total_sales=(<span class=\"code-snippet__string\">'amount'<\/span>,&nbsp;<span class=\"code-snippet__string\">'sum'<\/span>),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; avg_sale=(<span class=\"code-snippet__string\">'amount'<\/span>,&nbsp;<span class=\"code-snippet__string\">'mean'<\/span>),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; sales_count=(<span class=\"code-snippet__string\">'sale_id'<\/span>,&nbsp;<span class=\"code-snippet__string\">'count'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ).reset_index()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u5458\u5de5\u85aa\u8d44\u4fe1\u606f<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; employee_performance = pd.merge(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; employee_performance,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; employees_df&#91;&#91;<span class=\"code-snippet__string\">'employee_id'<\/span>,&nbsp;<span class=\"code-snippet__string\">'salary'<\/span>]],<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; on=<span class=\"code-snippet__string\">'employee_id'<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; )<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; employee_performance&#91;<span class=\"code-snippet__string\">'sales_per_salary'<\/span>] = employee_performance&#91;<span class=\"code-snippet__string\">'total_sales'<\/span>] \/ employee_performance&#91;<span class=\"code-snippet__string\">'salary'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u5458\u5de5\u7ee9\u6548\u5206\u6790:\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(employee_performance.sort_values(<span class=\"code-snippet__string\">'total_sales'<\/span>, ascending=<span class=\"code-snippet__literal\">False<\/span>))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 5. \u65f6\u95f4\u5e8f\u5217\u5206\u6790 (\u6700\u8fd130\u5929\u9500\u552e\u8d8b\u52bf)<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u786e\u4fdd\u65e5\u671f\u683c\u5f0f\u6b63\u786e<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; sales_detail&#91;<span class=\"code-snippet__string\">'sale_date'<\/span>] = pd.to_datetime(sales_detail&#91;<span class=\"code-snippet__string\">'sale_date'<\/span>])<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; last_30_days = datetime.now() - timedelta(days=<span class=\"code-snippet__number\">30<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; recent_sales = sales_detail&#91;sales_detail&#91;<span class=\"code-snippet__string\">'sale_date'<\/span>] &gt; last_30_days]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__keyword\">not<\/span>&nbsp;recent_sales.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; daily_sales = recent_sales.groupby(<span class=\"code-snippet__string\">'sale_date'<\/span>)&#91;<span class=\"code-snippet__string\">'amount'<\/span>].<span class=\"code-snippet__built_in\">sum<\/span>().reset_index()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u6700\u8fd130\u5929\u6bcf\u65e5\u9500\u552e\u603b\u989d:\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(daily_sales)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u8b66\u544a: \u6700\u8fd130\u5929\u65e0\u9500\u552e\u6570\u636e\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; daily_sales = pd.DataFrame()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">return<\/span>&nbsp;{<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">'sales_detail'<\/span>: sales_detail,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">'dept_sales'<\/span>: dept_sales,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">'employee_performance'<\/span>: employee_performance,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">'daily_sales'<\/span>: daily_sales<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; }<\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">visualize_results<\/span>(<span class=\"code-snippet__params\">results<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u53ef\u89c6\u5316\u5206\u6790\u7ed3\u679c - \u4fee\u590d\u7248\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u5f00\u59cb\u53ef\u89c6\u5316\u5206\u6790\u7ed3\u679c...\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u521b\u5efa\u5927\u56fe\u8868<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; fig = plt.figure(figsize=(<span class=\"code-snippet__number\">18<\/span>,&nbsp;<span class=\"code-snippet__number\">12<\/span>))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; fig.suptitle(<span class=\"code-snippet__string\">'\u9500\u552e\u6570\u636e\u5206\u6790\u62a5\u544a'<\/span>, fontsize=<span class=\"code-snippet__number\">20<\/span>, fontweight=<span class=\"code-snippet__string\">'bold'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 1. \u90e8\u95e8\u9500\u552e\u5bf9\u6bd4<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ax1 = plt.subplot(<span class=\"code-snippet__number\">2<\/span>,&nbsp;<span class=\"code-snippet__number\">2<\/span>,&nbsp;<span class=\"code-snippet__number\">1<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; dept_sales = results&#91;<span class=\"code-snippet__string\">'dept_sales'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__keyword\">not<\/span>&nbsp;dept_sales.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u4f7f\u7528\u66f4\u7f8e\u89c2\u7684\u989c\u8272<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; colors = plt.cm.viridis_r(np.linspace(<span class=\"code-snippet__number\">0<\/span>,&nbsp;<span class=\"code-snippet__number\">1<\/span>,&nbsp;<span class=\"code-snippet__built_in\">len<\/span>(dept_sales)))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; bars = plt.bar(dept_sales&#91;<span class=\"code-snippet__string\">'department'<\/span>], dept_sales&#91;<span class=\"code-snippet__string\">'total_sales'<\/span>], color=colors)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.title(<span class=\"code-snippet__string\">'\u90e8\u95e8\u9500\u552e\u603b\u989d\u5bf9\u6bd4'<\/span>, fontsize=<span class=\"code-snippet__number\">14<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.ylabel(<span class=\"code-snippet__string\">'\u9500\u552e\u603b\u989d'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.xlabel(<span class=\"code-snippet__string\">'\u90e8\u95e8'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.grid(axis=<span class=\"code-snippet__string\">'y'<\/span>, linestyle=<span class=\"code-snippet__string\">'--'<\/span>, alpha=<span class=\"code-snippet__number\">0.7<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u6570\u503c\u6807\u7b7e<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;bar&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;bars:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height = bar.get_height()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ax1.annotate(<span class=\"code-snippet__string\">f'<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{height:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.0<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\u5143'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xy=(bar.get_x() + bar.get_width() \/&nbsp;<span class=\"code-snippet__number\">2<\/span>, height),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xytext=(<span class=\"code-snippet__number\">0<\/span>,&nbsp;<span class=\"code-snippet__number\">3<\/span>), &nbsp;<span class=\"code-snippet__comment\"># 3 points vertical offset<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;textcoords=<span class=\"code-snippet__string\">\"offset points\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ha=<span class=\"code-snippet__string\">'center'<\/span>, va=<span class=\"code-snippet__string\">'bottom'<\/span>, fontsize=<span class=\"code-snippet__number\">10<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.text(<span class=\"code-snippet__number\">0.5<\/span>,&nbsp;<span class=\"code-snippet__number\">0.5<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u65e0\u90e8\u95e8\u9500\u552e\u6570\u636e'<\/span>, ha=<span class=\"code-snippet__string\">'center'<\/span>, va=<span class=\"code-snippet__string\">'center'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.title(<span class=\"code-snippet__string\">'\u90e8\u95e8\u9500\u552e\u603b\u989d\u5bf9\u6bd4'<\/span>, fontsize=<span class=\"code-snippet__number\">14<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 2. \u5458\u5de5\u9500\u552e\u6392\u540d<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ax2 = plt.subplot(<span class=\"code-snippet__number\">2<\/span>,&nbsp;<span class=\"code-snippet__number\">2<\/span>,&nbsp;<span class=\"code-snippet__number\">2<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; emp_perf = results&#91;<span class=\"code-snippet__string\">'employee_performance'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__keyword\">not<\/span>&nbsp;emp_perf.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; emp_perf = emp_perf.sort_values(<span class=\"code-snippet__string\">'total_sales'<\/span>, ascending=<span class=\"code-snippet__literal\">False<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u4e3a\u6bcf\u4e2a\u90e8\u95e8\u5206\u914d\u4e0d\u540c\u989c\u8272<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; departments = emp_perf&#91;<span class=\"code-snippet__string\">'department'<\/span>].unique()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; color_map = {dept: plt.cm.tab10(i)&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;i, dept&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;<span class=\"code-snippet__built_in\">enumerate<\/span>(departments)}<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; bars = ax2.bar(emp_perf&#91;<span class=\"code-snippet__string\">'name'<\/span>], emp_perf&#91;<span class=\"code-snippet__string\">'total_sales'<\/span>],&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color=&#91;color_map&#91;dept]&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;dept&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;emp_perf&#91;<span class=\"code-snippet__string\">'department'<\/span>]])<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.title(<span class=\"code-snippet__string\">'\u5458\u5de5\u9500\u552e\u6392\u540d'<\/span>, fontsize=<span class=\"code-snippet__number\">14<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.ylabel(<span class=\"code-snippet__string\">'\u9500\u552e\u603b\u989d'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.xlabel(<span class=\"code-snippet__string\">'\u5458\u5de5\u59d3\u540d'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.xticks(rotation=<span class=\"code-snippet__number\">15<\/span>, fontsize=<span class=\"code-snippet__number\">10<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.grid(axis=<span class=\"code-snippet__string\">'y'<\/span>, linestyle=<span class=\"code-snippet__string\">'--'<\/span>, alpha=<span class=\"code-snippet__number\">0.7<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u56fe\u4f8b<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">from<\/span>&nbsp;matplotlib.patches&nbsp;<span class=\"code-snippet__keyword\">import<\/span>&nbsp;Patch<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; legend_elements = &#91;Patch(facecolor=color_map&#91;dept], label=dept)&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;dept&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;departments]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ax2.legend(handles=legend_elements, title=<span class=\"code-snippet__string\">'\u90e8\u95e8'<\/span>, loc=<span class=\"code-snippet__string\">'upper right'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u6570\u503c\u6807\u7b7e<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;bar&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;bars:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height = bar.get_height()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ax2.annotate(<span class=\"code-snippet__string\">f'<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{height:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.0<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\u5143'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xy=(bar.get_x() + bar.get_width() \/&nbsp;<span class=\"code-snippet__number\">2<\/span>, height),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xytext=(<span class=\"code-snippet__number\">0<\/span>,&nbsp;<span class=\"code-snippet__number\">3<\/span>),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;textcoords=<span class=\"code-snippet__string\">\"offset points\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ha=<span class=\"code-snippet__string\">'center'<\/span>, va=<span class=\"code-snippet__string\">'bottom'<\/span>, fontsize=<span class=\"code-snippet__number\">9<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.text(<span class=\"code-snippet__number\">0.5<\/span>,&nbsp;<span class=\"code-snippet__number\">0.5<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u65e0\u5458\u5de5\u9500\u552e\u6570\u636e'<\/span>, ha=<span class=\"code-snippet__string\">'center'<\/span>, va=<span class=\"code-snippet__string\">'center'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.title(<span class=\"code-snippet__string\">'\u5458\u5de5\u9500\u552e\u6392\u540d'<\/span>, fontsize=<span class=\"code-snippet__number\">14<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 3. \u9884\u7b97\u4f7f\u7528\u7387<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ax3 = plt.subplot(<span class=\"code-snippet__number\">2<\/span>,&nbsp;<span class=\"code-snippet__number\">2<\/span>,&nbsp;<span class=\"code-snippet__number\">3<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__keyword\">not<\/span>&nbsp;dept_sales.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; dept_sales = dept_sales.sort_values(<span class=\"code-snippet__string\">'budget_utilization'<\/span>, ascending=<span class=\"code-snippet__literal\">False<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; colors = plt.cm.Pastel1(np.linspace(<span class=\"code-snippet__number\">0<\/span>,&nbsp;<span class=\"code-snippet__number\">1<\/span>,&nbsp;<span class=\"code-snippet__built_in\">len<\/span>(dept_sales)))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u4fee\u590dDecimal\u8f6c\u6362\u95ee\u9898<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; budget_utilization = dept_sales&#91;<span class=\"code-snippet__string\">'budget_utilization'<\/span>].values.astype(<span class=\"code-snippet__built_in\">float<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; total_utilization = budget_utilization.<span class=\"code-snippet__built_in\">sum<\/span>()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; wedges, texts, autotexts = ax3.pie(<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; budget_utilization,&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labels=dept_sales&#91;<span class=\"code-snippet__string\">'department'<\/span>],<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; autopct=<span class=\"code-snippet__keyword\">lambda<\/span>&nbsp;p:&nbsp;<span class=\"code-snippet__string\">f'<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{p:<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.1<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">%\\n(<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{p\/<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">100<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">*total_utilization:<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">)'<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startangle=<span class=\"code-snippet__number\">90<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; colors=colors,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wedgeprops={<span class=\"code-snippet__string\">'edgecolor'<\/span>:&nbsp;<span class=\"code-snippet__string\">'w'<\/span>,&nbsp;<span class=\"code-snippet__string\">'linewidth'<\/span>:&nbsp;<span class=\"code-snippet__number\">1.5<\/span>},<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textprops={<span class=\"code-snippet__string\">'fontsize'<\/span>:&nbsp;<span class=\"code-snippet__number\">10<\/span>}<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; )<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.title(<span class=\"code-snippet__string\">'\u90e8\u95e8\u9884\u7b97\u4f7f\u7528\u7387'<\/span>, fontsize=<span class=\"code-snippet__number\">14<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u4e2d\u5fc3\u6807\u9898<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; ax3.text(<span class=\"code-snippet__number\">0<\/span>,&nbsp;<span class=\"code-snippet__number\">0<\/span>,&nbsp;<span class=\"code-snippet__string\">f'\u603b\u4f7f\u7528\u7387:&nbsp;<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{total_utilization*<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">100<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">:<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.1<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">%'<\/span>,&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ha=<span class=\"code-snippet__string\">'center'<\/span>, va=<span class=\"code-snippet__string\">'center'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>, fontweight=<span class=\"code-snippet__string\">'bold'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.text(<span class=\"code-snippet__number\">0.5<\/span>,&nbsp;<span class=\"code-snippet__number\">0.5<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u65e0\u90e8\u95e8\u9884\u7b97\u6570\u636e'<\/span>, ha=<span class=\"code-snippet__string\">'center'<\/span>, va=<span class=\"code-snippet__string\">'center'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.title(<span class=\"code-snippet__string\">'\u90e8\u95e8\u9884\u7b97\u4f7f\u7528\u7387'<\/span>, fontsize=<span class=\"code-snippet__number\">14<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 4. \u9500\u552e\u8d8b\u52bf\u56fe<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ax4 = plt.subplot(<span class=\"code-snippet__number\">2<\/span>,&nbsp;<span class=\"code-snippet__number\">2<\/span>,&nbsp;<span class=\"code-snippet__number\">4<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; daily_sales = results&#91;<span class=\"code-snippet__string\">'daily_sales'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__keyword\">not<\/span>&nbsp;daily_sales.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; daily_sales = daily_sales.sort_values(<span class=\"code-snippet__string\">'sale_date'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u521b\u5efa\u5e73\u6ed1\u66f2\u7ebf<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">try<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x = np.arange(<span class=\"code-snippet__built_in\">len<\/span>(daily_sales))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y = daily_sales&#91;<span class=\"code-snippet__string\">'amount'<\/span>].values<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u521b\u5efa\u5e73\u6ed1\u66f2\u7ebf<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X_Y_Spline = make_interp_spline(x, y)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X_ = np.linspace(x.<span class=\"code-snippet__built_in\">min<\/span>(), x.<span class=\"code-snippet__built_in\">max<\/span>(),&nbsp;<span class=\"code-snippet__number\">500<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Y_ = X_Y_Spline(X_)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u7ed8\u5236\u5e73\u6ed1\u66f2\u7ebf<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; plt.plot(X_, Y_, color=<span class=\"code-snippet__string\">'royalblue'<\/span>, alpha=<span class=\"code-snippet__number\">0.5<\/span>, label=<span class=\"code-snippet__string\">'\u5e73\u6ed1\u66f2\u7ebf'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u7ed8\u5236\u539f\u59cb\u6570\u636e\u70b9<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; plt.scatter(x, y, color=<span class=\"code-snippet__string\">'royalblue'<\/span>, s=<span class=\"code-snippet__number\">50<\/span>, zorder=<span class=\"code-snippet__number\">5<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">except<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u5982\u679c\u5e73\u6ed1\u5931\u8d25\uff0c\u76f4\u63a5\u7ed8\u5236\u539f\u59cb\u6570\u636e<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; plt.plot(daily_sales&#91;<span class=\"code-snippet__string\">'sale_date'<\/span>], daily_sales&#91;<span class=\"code-snippet__string\">'amount'<\/span>],&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color=<span class=\"code-snippet__string\">'royalblue'<\/span>, label=<span class=\"code-snippet__string\">'\u5b9e\u9645\u9500\u552e\u989d'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6807\u8bb0\u6700\u9ad8\u70b9\u548c\u6700\u4f4e\u70b9<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; max_idx = daily_sales&#91;<span class=\"code-snippet__string\">'amount'<\/span>].idxmax()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; min_idx = daily_sales&#91;<span class=\"code-snippet__string\">'amount'<\/span>].idxmin()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.scatter(daily_sales.loc&#91;max_idx,&nbsp;<span class=\"code-snippet__string\">'sale_date'<\/span>], daily_sales.loc&#91;max_idx,&nbsp;<span class=\"code-snippet__string\">'amount'<\/span>],&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;color=<span class=\"code-snippet__string\">'red'<\/span>, s=<span class=\"code-snippet__number\">100<\/span>, zorder=<span class=\"code-snippet__number\">5<\/span>, label=<span class=\"code-snippet__string\">'\u6700\u9ad8\u70b9'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.scatter(daily_sales.loc&#91;min_idx,&nbsp;<span class=\"code-snippet__string\">'sale_date'<\/span>], daily_sales.loc&#91;min_idx,&nbsp;<span class=\"code-snippet__string\">'amount'<\/span>],&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;color=<span class=\"code-snippet__string\">'green'<\/span>, s=<span class=\"code-snippet__number\">100<\/span>, zorder=<span class=\"code-snippet__number\">5<\/span>, label=<span class=\"code-snippet__string\">'\u6700\u4f4e\u70b9'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u6807\u6ce8<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.annotate(<span class=\"code-snippet__string\">f'\u6700\u9ad8:&nbsp;<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{daily_sales.loc&#91;max_idx,&nbsp;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">\"amount\"<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">]:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.0<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\u5143'<\/span>,&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy=(daily_sales.loc&#91;max_idx,&nbsp;<span class=\"code-snippet__string\">'sale_date'<\/span>], daily_sales.loc&#91;max_idx,&nbsp;<span class=\"code-snippet__string\">'amount'<\/span>]),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xytext=(daily_sales.loc&#91;max_idx,&nbsp;<span class=\"code-snippet__string\">'sale_date'<\/span>] + timedelta(days=<span class=\"code-snippet__number\">1<\/span>),&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;daily_sales.loc&#91;max_idx,&nbsp;<span class=\"code-snippet__string\">'amount'<\/span>] *&nbsp;<span class=\"code-snippet__number\">0.9<\/span>),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arrowprops=<span class=\"code-snippet__built_in\">dict<\/span>(facecolor=<span class=\"code-snippet__string\">'red'<\/span>, shrink=<span class=\"code-snippet__number\">0.05<\/span>))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.annotate(<span class=\"code-snippet__string\">f'\u6700\u4f4e:&nbsp;<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{daily_sales.loc&#91;min_idx,&nbsp;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">\"amount\"<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">]:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.0<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\u5143'<\/span>,&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy=(daily_sales.loc&#91;min_idx,&nbsp;<span class=\"code-snippet__string\">'sale_date'<\/span>], daily_sales.loc&#91;min_idx,&nbsp;<span class=\"code-snippet__string\">'amount'<\/span>]),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xytext=(daily_sales.loc&#91;min_idx,&nbsp;<span class=\"code-snippet__string\">'sale_date'<\/span>] - timedelta(days=<span class=\"code-snippet__number\">2<\/span>),&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;daily_sales.loc&#91;min_idx,&nbsp;<span class=\"code-snippet__string\">'amount'<\/span>] *&nbsp;<span class=\"code-snippet__number\">1.1<\/span>),<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arrowprops=<span class=\"code-snippet__built_in\">dict<\/span>(facecolor=<span class=\"code-snippet__string\">'green'<\/span>, shrink=<span class=\"code-snippet__number\">0.05<\/span>))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.title(<span class=\"code-snippet__string\">'\u6700\u8fd130\u5929\u9500\u552e\u8d8b\u52bf'<\/span>, fontsize=<span class=\"code-snippet__number\">14<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.xlabel(<span class=\"code-snippet__string\">'\u65e5\u671f'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.ylabel(<span class=\"code-snippet__string\">'\u6bcf\u65e5\u9500\u552e\u989d'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.xticks(rotation=<span class=\"code-snippet__number\">45<\/span>, fontsize=<span class=\"code-snippet__number\">9<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.grid(<span class=\"code-snippet__literal\">True<\/span>, linestyle=<span class=\"code-snippet__string\">'--'<\/span>, alpha=<span class=\"code-snippet__number\">0.7<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.legend()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.text(<span class=\"code-snippet__number\">0.5<\/span>,&nbsp;<span class=\"code-snippet__number\">0.5<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u65e0\u8fd1\u671f\u9500\u552e\u6570\u636e'<\/span>, ha=<span class=\"code-snippet__string\">'center'<\/span>, va=<span class=\"code-snippet__string\">'center'<\/span>, fontsize=<span class=\"code-snippet__number\">12<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; plt.title(<span class=\"code-snippet__string\">'\u6700\u8fd130\u5929\u9500\u552e\u8d8b\u52bf'<\/span>, fontsize=<span class=\"code-snippet__number\">14<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u56fe\u8868\u8fb9\u6846<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;ax&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;&#91;ax1, ax2, ax3, ax4]:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;spine&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;ax.spines.values():<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spine.set_visible(<span class=\"code-snippet__literal\">True<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spine.set_edgecolor(<span class=\"code-snippet__string\">'#DDDDDD'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spine.set_linewidth(<span class=\"code-snippet__number\">1.5<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; plt.tight_layout(rect=&#91;<span class=\"code-snippet__number\">0<\/span>,&nbsp;<span class=\"code-snippet__number\">0<\/span>,&nbsp;<span class=\"code-snippet__number\">1<\/span>,&nbsp;<span class=\"code-snippet__number\">0.96<\/span>]) &nbsp;<span class=\"code-snippet__comment\"># \u4e3a\u603b\u6807\u9898\u7559\u51fa\u7a7a\u95f4<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; plt.savefig(<span class=\"code-snippet__string\">'sales_analysis.png'<\/span>, dpi=<span class=\"code-snippet__number\">300<\/span>, bbox_inches=<span class=\"code-snippet__string\">'tight'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; plt.show()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u5206\u6790\u56fe\u8868\u5df2\u4fdd\u5b58\u4e3a 'sales_analysis.png'\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">generate_word_report<\/span>(<span class=\"code-snippet__params\">results<\/span>):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u751f\u6210Word\u62a5\u544a\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc = Document()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u6807\u9898<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_heading(<span class=\"code-snippet__string\">'\u9500\u552e\u6570\u636e\u5206\u6790\u62a5\u544a'<\/span>,&nbsp;<span class=\"code-snippet__number\">0<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u62a5\u544a\u65f6\u95f4<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; current_time = datetime.now().strftime(<span class=\"code-snippet__string\">\"%Y\u5e74%m\u6708%d\u65e5 %H:%M:%S\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">f'\u62a5\u544a\u751f\u6210\u65f6\u95f4\uff1a<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{current_time}<\/span><\/span><span class=\"code-snippet__string\">'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">'='<\/span>*<span class=\"code-snippet__number\">50<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 1. \u90e8\u95e8\u9500\u552e\u5206\u6790<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_heading(<span class=\"code-snippet__string\">'1. \u90e8\u95e8\u9500\u552e\u5206\u6790'<\/span>, level=<span class=\"code-snippet__number\">1<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; dept_sales = results&#91;<span class=\"code-snippet__string\">'dept_sales'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__keyword\">not<\/span>&nbsp;dept_sales.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; table = doc.add_table(rows=<span class=\"code-snippet__number\">1<\/span>, cols=<span class=\"code-snippet__number\">5<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; table.style =&nbsp;<span class=\"code-snippet__string\">'Table Grid'<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; header_cells = table.rows&#91;<span class=\"code-snippet__number\">0<\/span>].cells<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; headers = &#91;<span class=\"code-snippet__string\">'\u90e8\u95e8'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u603b\u9500\u552e\u989d'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u5e73\u5747\u9500\u552e\u989d'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u4ea4\u6613\u6b21\u6570'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u9884\u7b97\u4f7f\u7528\u7387'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;i, header&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;<span class=\"code-snippet__built_in\">enumerate<\/span>(headers):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; header_cells&#91;i].text = header<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;_, row&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;dept_sales.iterrows():<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells = table.add_row().cells<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">0<\/span>].text =&nbsp;<span class=\"code-snippet__built_in\">str<\/span>(row&#91;<span class=\"code-snippet__string\">'department'<\/span>])<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">1<\/span>].text =&nbsp;<span class=\"code-snippet__string\">f\"<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{row&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'total_sales'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">]:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">2<\/span>].text =&nbsp;<span class=\"code-snippet__string\">f\"<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{row&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'avg_sale'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">]:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">3<\/span>].text =&nbsp;<span class=\"code-snippet__built_in\">str<\/span>(row&#91;<span class=\"code-snippet__string\">'transaction_count'<\/span>])<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">4<\/span>].text =&nbsp;<span class=\"code-snippet__string\">f\"<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{row&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'budget_utilization'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">]*<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">100<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">:<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">%\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">'\u65e0\u90e8\u95e8\u9500\u552e\u6570\u636e'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 2. \u5458\u5de5\u7ee9\u6548\u5206\u6790<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_heading(<span class=\"code-snippet__string\">'2. \u5458\u5de5\u7ee9\u6548\u5206\u6790'<\/span>, level=<span class=\"code-snippet__number\">1<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; emp_perf = results&#91;<span class=\"code-snippet__string\">'employee_performance'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__keyword\">not<\/span>&nbsp;emp_perf.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; table = doc.add_table(rows=<span class=\"code-snippet__number\">1<\/span>, cols=<span class=\"code-snippet__number\">6<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; table.style =&nbsp;<span class=\"code-snippet__string\">'Table Grid'<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; header_cells = table.rows&#91;<span class=\"code-snippet__number\">0<\/span>].cells<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; headers = &#91;<span class=\"code-snippet__string\">'\u59d3\u540d'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u90e8\u95e8'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u603b\u9500\u552e\u989d'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u5e73\u5747\u9500\u552e\u989d'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u9500\u552e\u7b14\u6570'<\/span>,&nbsp;<span class=\"code-snippet__string\">'\u9500\u552e\/\u85aa\u8d44\u6bd4'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;i, header&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;<span class=\"code-snippet__built_in\">enumerate<\/span>(headers):<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; header_cells&#91;i].text = header<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;_, row&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;emp_perf.iterrows():<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells = table.add_row().cells<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">0<\/span>].text =&nbsp;<span class=\"code-snippet__built_in\">str<\/span>(row&#91;<span class=\"code-snippet__string\">'name'<\/span>])<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">1<\/span>].text =&nbsp;<span class=\"code-snippet__built_in\">str<\/span>(row&#91;<span class=\"code-snippet__string\">'department'<\/span>])<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">2<\/span>].text =&nbsp;<span class=\"code-snippet__string\">f\"<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{row&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'total_sales'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">]:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">3<\/span>].text =&nbsp;<span class=\"code-snippet__string\">f\"<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{row&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'avg_sale'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">]:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">4<\/span>].text =&nbsp;<span class=\"code-snippet__built_in\">str<\/span>(row&#91;<span class=\"code-snippet__string\">'sales_count'<\/span>])<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row_cells&#91;<span class=\"code-snippet__number\">5<\/span>].text =&nbsp;<span class=\"code-snippet__string\">f\"<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{row&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'sales_per_salary'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">]:,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">'\u65e0\u5458\u5de5\u7ee9\u6548\u6570\u636e'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 3. \u9500\u552e\u8d8b\u52bf\u5206\u6790<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_heading(<span class=\"code-snippet__string\">'3. \u9500\u552e\u8d8b\u52bf\u5206\u6790'<\/span>, level=<span class=\"code-snippet__number\">1<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; daily_sales = results&#91;<span class=\"code-snippet__string\">'daily_sales'<\/span>]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;<span class=\"code-snippet__keyword\">not<\/span>&nbsp;daily_sales.empty:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">f\"\u6700\u9ad8\u5355\u65e5\u9500\u552e\u989d\uff1a<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{daily_sales&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'amount'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">].<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__built_in\">max<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">():,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">f\"\u6700\u4f4e\u5355\u65e5\u9500\u552e\u989d\uff1a<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{daily_sales&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'amount'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">].<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__built_in\">min<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">():,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">f\"\u5e73\u5747\u65e5\u9500\u552e\u989d\uff1a<\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">{daily_sales&#91;<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__string\">'amount'<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">].mean():,<\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\"><span class=\"code-snippet__number\">.2<\/span><\/span><\/span><span class=\"code-snippet__string\"><span class=\"code-snippet__subst\">f}<\/span><\/span><span class=\"code-snippet__string\">\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">'\u65e0\u9500\u552e\u8d8b\u52bf\u6570\u636e'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># 4. \u6dfb\u52a0\u56fe\u8868<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_heading(<span class=\"code-snippet__string\">'4. \u6570\u636e\u53ef\u89c6\u5316'<\/span>, level=<span class=\"code-snippet__number\">1<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u4fdd\u5b58\u5f53\u524d\u7684matplotlib\u56fe\u8868\u5230Word<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_paragraph(<span class=\"code-snippet__string\">'\u4ee5\u4e0b\u662f\u9500\u552e\u6570\u636e\u7684\u53ef\u89c6\u5316\u5206\u6790\uff1a'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u8c03\u7528visualize_results\u751f\u6210\u56fe\u8868\u5e76\u4fdd\u5b58<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; visualize_results(results)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_picture(<span class=\"code-snippet__string\">'sales_analysis.png'<\/span>, width=Inches(<span class=\"code-snippet__number\">6<\/span>))<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6dfb\u52a0\u7ed3\u8bba<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.add_heading(<span class=\"code-snippet__string\">'5. \u5206\u6790\u7ed3\u8bba'<\/span>, level=<span class=\"code-snippet__number\">1<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; conclusions = &#91;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\" \u5404\u90e8\u95e8\u9500\u552e\u60c5\u51b5\u603b\u4f53\u8868\u73b0\u826f\u597d\uff0c\u9884\u7b97\u6267\u884c\u7387\u4fdd\u6301\u5728\u5408\u7406\u6c34\u5e73\u3002\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\u5458\u5de5\u9500\u552e\u4e1a\u7ee9\u5206\u5e03\u76f8\u5bf9\u5747\u8861\uff0c\u56e2\u961f\u534f\u4f5c\u6548\u679c\u663e\u8457\u3002\"<\/span>,<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\" \u9500\u552e\u8d8b\u52bf\u5448\u73b0\u7a33\u5b9a\u589e\u957f\u6001\u52bf\uff0c\u5e02\u573a\u53cd\u5e94\u79ef\u6781\u3002\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; ]<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">for<\/span>&nbsp;conclusion&nbsp;<span class=\"code-snippet__keyword\">in<\/span>&nbsp;conclusions:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; doc.add_paragraph(conclusion, style=<span class=\"code-snippet__string\">'List Number'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u4fdd\u5b58Word\u6587\u6863<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; doc.save(<span class=\"code-snippet__string\">'\u9500\u552e\u6570\u636e\u5206\u6790\u62a5\u544a.docx'<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u5206\u6790\u62a5\u544a\u5df2\u4fdd\u5b58\u4e3a '\u9500\u552e\u6570\u636e\u5206\u6790\u62a5\u544a.docx'\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">def<\/span>&nbsp;<span class=\"code-snippet__title\">main<\/span>():<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__string\">\"\"\"\u4e3b\u51fd\u6570 - \u4fee\u6539\u7248\"\"\"<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"=\"<\/span>*<span class=\"code-snippet__number\">50<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\u5173\u7cfb\u6570\u636e\u5206\u6790\u6f14\u793a\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"=\"<\/span>*<span class=\"code-snippet__number\">50<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># # \u521d\u59cb\u5316\u6570\u636e\u5e93<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># print(\"\\n\u521d\u59cb\u5316\u6570\u636e\u5e93...\")<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># create_tables()<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># insert_sample_data()<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u6267\u884c\u5206\u6790<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u6267\u884c\u6570\u636e\u5206\u6790...\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; results = analyze_data()<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">if<\/span>&nbsp;results:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__comment\"># \u751f\u6210Word\u62a5\u544a<\/span><\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u751f\u6210Word\u62a5\u544a...\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; generate_word_report(results)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__keyword\">else<\/span>:<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u5206\u6790\u5931\u8d25\uff0c\u65e0\u6709\u6548\u6570\u636e\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<\/span><\/code><code><span leaf=\"\">&nbsp; &nbsp;&nbsp;<span class=\"code-snippet__built_in\">print<\/span>(<span class=\"code-snippet__string\">\"\\n\u5173\u7cfb\u6570\u636e\u5206\u6790\u5b8c\u6210!\"<\/span>)<\/span><\/code><code><span leaf=\"\">&nbsp;<\/span><\/code><code><span leaf=\"\"><span class=\"code-snippet__keyword\">if<\/span>&nbsp;__name__ ==&nbsp;<span class=\"code-snippet__string\">\"__main__\"<\/span>:<\/span><\/code><span style=\"background-color: initial; font-family: inherit; font-size: inherit; color: initial;\">&nbsp; &nbsp; main()<\/span><\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%A1%88%E4%BE%8B2\"><\/span>\u6848\u4f8b2<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ol>\n<li><strong>\u6570\u636e\u5e93\u8fde\u63a5 (<code>connect_to_db<\/code>)<\/strong>: \u4f7f\u7528&nbsp;<code>mysql.connector<\/code>&nbsp;\u8fde\u63a5\u5230\u4f60\u7684MySQL\u6570\u636e\u5e93\u3002\u4f60\u9700\u8981\u4fee\u6539&nbsp;<code>DB_CONFIG<\/code>&nbsp;\u5b57\u5178\u4e2d\u7684&nbsp;<code>host<\/code>,&nbsp;<code>user<\/code>,&nbsp;<code>password<\/code>, \u548c&nbsp;<code>database<\/code>&nbsp;\u4e3a\u4f60\u81ea\u5df1\u7684\u914d\u7f6e\u3002<\/li>\n\n\n\n<li><strong>\u90e8\u95e8\u9500\u552e\u5206\u6790 (<code>analyze_department_sales<\/code>)<\/strong>:\n<ul>\n<li>\u6267\u884cSQL\u67e5\u8be2\uff0c\u6309\u90e8\u95e8\u6c47\u603b\u9500\u552e\u989d\u548c\u8ba2\u5355\u6570\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>pandas<\/code>&nbsp;\u5c06\u7ed3\u679c\u6574\u7406\u6210\u8868\u683c\u5e76\u6253\u5370\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>matplotlib<\/code>&nbsp;\u7ed8\u5236\u67f1\u72b6\u56fe\uff0c\u5e76\u4fdd\u5b58\u4e3a&nbsp;<code>department_sales.png<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4f1a\u5458\u8d2d\u4e70\u4e0e\u7231\u597d\u5206\u6790 (<code>analyze_member_behavior<\/code>)<\/strong>:\n<ul>\n<li>\u67e5\u8be2\u4f1a\u5458\u7684\u6d88\u8d39\u603b\u989d\u3001\u8ba2\u5355\u6570\u53ca\u8d2d\u4e70\u7684\u4ea7\u54c1\u54c1\u7c7b\u3002<\/li>\n\n\n\n<li>\uff08\u7b80\u5316\u5904\u7406\uff09\u5047\u8bbe\u67e5\u8be2\u7ed3\u679c\u5df2\u6309\u6d88\u8d39\u989d\u6392\u5e8f\uff0c\u53d6\u6bcf\u4e2a\u4f1a\u5458\u7684\u7b2c\u4e00\u6761\u8bb0\u5f55\u4f5c\u4e3a\u5176\u201c\u6700\u504f\u597d\u54c1\u7c7b\u201d\u3002<\/li>\n\n\n\n<li>\u7edf\u8ba1\u5404\u54c1\u7c7b\u7684\u4f1a\u5458\u6570\u91cf\uff0c\u4f5c\u4e3a\u7231\u597d\u5206\u5e03\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>pandas<\/code>&nbsp;\u6253\u5370\u54c1\u7c7b\u5206\u5e03\u548c\u9ad8\u4ef7\u503c\u4f1a\u5458TOP10\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>matplotlib<\/code>&nbsp;\u7ed8\u5236\u997c\u56fe\u5c55\u793a\u54c1\u7c7b\u504f\u597d\uff0c\u5e76\u4fdd\u5b58\u4e3a&nbsp;<code>member_category_preference.png<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u9500\u552e\u8d8b\u52bf\u5206\u6790 (<code>analyze_sales_trend<\/code>)<\/strong>:\n<ul>\n<li>\u67e5\u8be2\u8fc7\u53bb90\u5929\u5185\u6bcf\u5929\u7684\u603b\u9500\u552e\u989d\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>pandas<\/code>&nbsp;\u6253\u5370\u6700\u8fd1\u7684\u6570\u636e\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528&nbsp;<code>matplotlib<\/code>&nbsp;\u7ed8\u5236\u6298\u7ebf\u56fe\u5c55\u793a\u8d8b\u52bf\uff0c\u5e76\u4fdd\u5b58\u4e3a&nbsp;<code>sales_trend.png<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u751f\u6210\u62a5\u544a (<code>generate_report<\/code>)<\/strong>: \u5c06\u6240\u6709\u5206\u6790\u7ed3\u679c\uff08\u8868\u683c\u6570\u636e\u548c\u56fe\u8868\u8def\u5f84\uff09\u6c47\u603b\u5230\u4e00\u4e2a&nbsp;<code>.txt<\/code>&nbsp;\u6587\u4ef6\u4e2d\u3002<\/li>\n\n\n\n<li><strong>\u4e3b\u51fd\u6570 (<code>main<\/code>)<\/strong>: \u8d1f\u8d23\u8c03\u7528\u4ee5\u4e0a\u6240\u6709\u51fd\u6570\uff0c\u7ba1\u7406\u6570\u636e\u5e93\u8fde\u63a5\u7684\u5f00\u542f\u548c\u5173\u95ed\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>import mysql.connector\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom datetime import datetime, timedelta\nimport os\n\n# --- \u6570\u636e\u5e93\u914d\u7f6e ---\n# \u8bf7\u6839\u636e\u4f60\u7684MySQL\u670d\u52a1\u5668\u4fe1\u606f\u4fee\u6539\u4ee5\u4e0b\u914d\u7f6e\nDB_CONFIG = {\n    'host': 'localhost',\n    'user': 'your_username',      # \u66ff\u6362\u4e3a\u4f60\u7684\u6570\u636e\u5e93\u7528\u6237\u540d\n    'password': 'your_password',  # \u66ff\u6362\u4e3a\u4f60\u7684\u6570\u636e\u5e93\u5bc6\u7801\n    'database': 'ecommerce_db'    # \u66ff\u6362\u4e3a\u4f60\u7684\u6570\u636e\u5e93\u540d\n}\n\n# --- \u62a5\u544a\u751f\u6210\u51fd\u6570 ---\n\ndef connect_to_db():\n    \"\"\"\u5efa\u7acb\u6570\u636e\u5e93\u8fde\u63a5\"\"\"\n    try:\n        connection = mysql.connector.connect(**DB_CONFIG)\n        print(\"\u6210\u529f\u8fde\u63a5\u5230\u6570\u636e\u5e93\")\n        return connection\n    except mysql.connector.Error as err:\n        print(f\"\u6570\u636e\u5e93\u8fde\u63a5\u5931\u8d25: {err}\")\n        return None\n\ndef analyze_department_sales(cursor):\n    \"\"\"\u5206\u6790\u5404\u90e8\u95e8\u9500\u552e\u60c5\u51b5\"\"\"\n    print(\"\\n--- \u90e8\u95e8\u9500\u552e\u5206\u6790 ---\")\n    \n    # \u67e5\u8be2\u5404\u90e8\u95e8\u603b\u9500\u552e\u989d\u548c\u8ba2\u5355\u6570\n    query_dept_sales = \"\"\"\n    SELECT \n        p.department,\n        SUM(oi.quantity * oi.price) AS total_sales,\n        COUNT(DISTINCT o.order_id) AS total_orders\n    FROM \n        orders o\n        JOIN order_items oi ON o.order_id = oi.order_id\n        JOIN products p ON oi.product_id = p.product_id\n    GROUP BY \n        p.department\n    ORDER BY \n        total_sales DESC;\n    \"\"\"\n    \n    cursor.execute(query_dept_sales)\n    dept_sales_data = cursor.fetchall()\n    \n    if not dept_sales_data:\n        print(\"\u672a\u67e5\u8be2\u5230\u90e8\u95e8\u9500\u552e\u6570\u636e\u3002\")\n        return None, None\n        \n    df_dept_sales = pd.DataFrame(dept_sales_data, columns=&#91;'\u90e8\u95e8', '\u603b\u9500\u552e\u989d', '\u603b\u8ba2\u5355\u6570'])\n    print(df_dept_sales.to_string(index=False))\n    \n    # \u7ed8\u5236\u90e8\u95e8\u9500\u552e\u989d\u67f1\u72b6\u56fe\n    plt.figure(figsize=(10, 6))\n    bars = plt.bar(df_dept_sales&#91;'\u90e8\u95e8'], df_dept_sales&#91;'\u603b\u9500\u552e\u989d'], color='skyblue')\n    plt.xlabel('\u90e8\u95e8')\n    plt.ylabel('\u603b\u9500\u552e\u989d (\u5143)')\n    plt.title('\u5404\u90e8\u95e8\u9500\u552e\u989d\u5bf9\u6bd4')\n    plt.xticks(rotation=45, ha='right')\n    \n    # \u5728\u67f1\u72b6\u56fe\u4e0a\u6dfb\u52a0\u6570\u503c\u6807\u7b7e\n    for bar in bars:\n        yval = bar.get_height()\n        plt.text(bar.get_x() + bar.get_width()\/2.0, yval, round(yval, 2), ha='center', va='bottom')\n\n    plt.tight_layout()\n    dept_sales_chart_path = 'department_sales.png'\n    plt.savefig(dept_sales_chart_path)\n    plt.close() # \u5173\u95ed\u56fe\u5f62\uff0c\u91ca\u653e\u5185\u5b58\n    print(f\"\u90e8\u95e8\u9500\u552e\u56fe\u8868\u5df2\u4fdd\u5b58\u81f3: {dept_sales_chart_path}\")\n    \n    return df_dept_sales, dept_sales_chart_path\n\n\ndef analyze_member_behavior(cursor):\n    \"\"\"\u5206\u6790\u4f1a\u5458\u8d2d\u4e70\u4e0e\u7231\u597d\"\"\"\n    print(\"\\n--- \u4f1a\u5458\u8d2d\u4e70\u4e0e\u7231\u597d\u5206\u6790 ---\")\n    \n    # \u67e5\u8be2\u6bcf\u4f4d\u4f1a\u5458\u7684\u603b\u6d88\u8d39\u3001\u8ba2\u5355\u6570\u548c\u6700\u5e38\u8d2d\u4e70\u7684\u54c1\u7c7b\n    query_member_behavior = \"\"\"\n    SELECT \n        c.customer_id,\n        c.name,\n        SUM(oi.quantity * oi.price) AS total_spent,\n        COUNT(DISTINCT o.order_id) AS total_orders,\n        p.department AS favorite_category\n    FROM \n        customers c\n        JOIN orders o ON c.customer_id = o.customer_id\n        JOIN order_items oi ON o.order_id = oi.order_id\n        JOIN products p ON oi.product_id = p.product_id\n    WHERE\n        c.is_member = TRUE\n    GROUP BY \n        c.customer_id, c.name, p.department\n    ORDER BY \n        total_spent DESC, total_orders DESC;\n    \"\"\"\n    \n    cursor.execute(query_member_behavior)\n    member_raw_data = cursor.fetchall()\n    \n    if not member_raw_data:\n        print(\"\u672a\u67e5\u8be2\u5230\u4f1a\u5458\u884c\u4e3a\u6570\u636e\u3002\")\n        return None, None\n        \n    df_member_raw = pd.DataFrame(member_raw_data, columns=&#91;'\u4f1a\u5458ID', '\u59d3\u540d', '\u603b\u6d88\u8d39', '\u603b\u8ba2\u5355\u6570', '\u504f\u597d\u54c1\u7c7b'])\n    \n    # \u4e3a\u4e86\u786e\u5b9a\u6700\u504f\u597d\u54c1\u7c7b\uff0c\u9700\u8981\u6309\u4f1a\u5458\u5206\u7ec4\uff0c\u53d6\u6d88\u8d39\u6700\u9ad8\u7684\u54c1\u7c7b\n    # \u8fd9\u91cc\u7b80\u5316\u5904\u7406\uff0c\u5047\u8bbe\u67e5\u8be2\u7ed3\u679c\u5df2\u7ecf\u6309\u6d88\u8d39\u964d\u5e8f\u6392\u5217\uff0c\u7b2c\u4e00\u4e2a\u5c31\u662f\u6700\u504f\u597d\u7684\n    # \u66f4\u4e25\u8c28\u7684\u505a\u6cd5\u662f\u7528\u7a97\u53e3\u51fd\u6570\u6216\u4e8c\u6b21\u805a\u5408\n    df_member_top_cat = df_member_raw.sort_values(&#91;'\u4f1a\u5458ID', '\u603b\u6d88\u8d39'], ascending=&#91;True, False]).drop_duplicates('\u4f1a\u5458ID')\n    \n    # \u8ba1\u7b97\u5404\u54c1\u7c7b\u7684\u4f1a\u5458\u6570\u91cf\uff08\u4f5c\u4e3a\u7231\u597d\u5206\u5e03\uff09\n    category_counts = df_member_top_cat&#91;'\u504f\u597d\u54c1\u7c7b'].value_counts().sort_values(ascending=False)\n    df_category_dist = category_counts.reset_index()\n    df_category_dist.columns = &#91;'\u54c1\u7c7b', '\u4f1a\u5458\u6570\u91cf']\n    print(\"\u4f1a\u5458\u54c1\u7c7b\u504f\u597d\u5206\u5e03:\")\n    print(df_category_dist.to_string(index=False))\n\n    # \u7ed8\u5236\u4f1a\u5458\u54c1\u7c7b\u504f\u597d\u997c\u56fe\n    plt.figure(figsize=(8, 8))\n    plt.pie(df_category_dist&#91;'\u4f1a\u5458\u6570\u91cf'], labels=df_category_dist&#91;'\u54c1\u7c7b'], autopct='%1.1f%%', startangle=140)\n    plt.title('\u4f1a\u5458\u54c1\u7c7b\u504f\u597d\u5206\u5e03')\n    member_behavior_chart_path = 'member_category_preference.png'\n    plt.savefig(member_behavior_chart_path)\n    plt.close()\n    print(f\"\u4f1a\u5458\u54c1\u7c7b\u504f\u597d\u56fe\u8868\u5df2\u4fdd\u5b58\u81f3: {member_behavior_chart_path}\")\n    \n    # \u663e\u793a\u9ad8\u4ef7\u503c\u4f1a\u5458TOP 10\n    top_members = df_member_top_cat.head(10)\n    print(\"\\n\u9ad8\u4ef7\u503c\u4f1a\u5458TOP 10:\")\n    print(top_members&#91;&#91;'\u4f1a\u5458ID', '\u59d3\u540d', '\u603b\u6d88\u8d39', '\u603b\u8ba2\u5355\u6570', '\u504f\u597d\u54c1\u7c7b']].to_string(index=False))\n    \n    return df_member_top_cat, member_behavior_chart_path\n\n\ndef analyze_sales_trend(cursor):\n    \"\"\"\u5206\u6790\u9500\u552e\u8d8b\u52bf\"\"\"\n    print(\"\\n--- \u9500\u552e\u8d8b\u52bf\u5206\u6790 ---\")\n    \n    # \u67e5\u8be2\u6bcf\u65e5\u9500\u552e\u989d (\u8fc7\u53bb90\u5929)\n    end_date = datetime.now()\n    start_date = end_date - timedelta(days=90)\n    \n    query_sales_trend = f\"\"\"\n    SELECT \n        DATE(o.order_date) AS order_day,\n        SUM(oi.quantity * oi.price) AS daily_sales\n    FROM \n        orders o\n        JOIN order_items oi ON o.order_id = oi.order_id\n    WHERE\n        o.order_date &gt;= '{start_date.strftime('%Y-%m-%d')}' AND\n        o.order_date &lt;= '{end_date.strftime('%Y-%m-%d')}'\n    GROUP BY \n        DATE(o.order_date)\n    ORDER BY \n        order_day;\n    \"\"\"\n    \n    cursor.execute(query_sales_trend)\n    trend_data = cursor.fetchall()\n    \n    if not trend_data:\n        print(\"\u672a\u67e5\u8be2\u5230\u9500\u552e\u8d8b\u52bf\u6570\u636e\u3002\")\n        return None, None\n        \n    df_trend = pd.DataFrame(trend_data, columns=&#91;'\u65e5\u671f', '\u65e5\u9500\u552e\u989d'])\n    print(\"\u8fd1\u671f\u9500\u552e\u8d8b\u52bf (\u90e8\u5206\u6570\u636e):\")\n    print(df_trend.tail(10).to_string(index=False)) # \u663e\u793a\u6700\u8fd110\u5929\n\n    # \u7ed8\u5236\u9500\u552e\u8d8b\u52bf\u6298\u7ebf\u56fe\n    plt.figure(figsize=(12, 6))\n    plt.plot(df_trend&#91;'\u65e5\u671f'], df_trend&#91;'\u65e5\u9500\u552e\u989d'], marker='o', linestyle='-', color='green')\n    plt.xlabel('\u65e5\u671f')\n    plt.ylabel('\u65e5\u9500\u552e\u989d (\u5143)')\n    plt.title('\u8fd190\u5929\u9500\u552e\u8d8b\u52bf')\n    plt.xticks(rotation=45, ha='right')\n    plt.grid(True)\n    plt.tight_layout()\n    sales_trend_chart_path = 'sales_trend.png'\n    plt.savefig(sales_trend_chart_path)\n    plt.close()\n    print(f\"\u9500\u552e\u8d8b\u52bf\u56fe\u8868\u5df2\u4fdd\u5b58\u81f3: {sales_trend_chart_path}\")\n\n    return df_trend, sales_trend_chart_path\n\n\ndef generate_report(dept_df, dept_chart, member_df, member_chart, trend_df, trend_chart):\n    \"\"\"\u751f\u6210\u6587\u672c\u62a5\u544a\"\"\"\n    report_filename = f\"\u7535\u5546\u9500\u552e\u5206\u6790\u62a5\u544a_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt\"\n    \n    with open(report_filename, 'w', encoding='utf-8') as f:\n        f.write(\"========================================\\n\")\n        f.write(\"         \u7535\u5546\u9500\u552e\u5206\u6790\u62a5\u544a\\n\")\n        f.write(f\"         \u751f\u6210\u65f6\u95f4: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\\n\")\n        f.write(\"========================================\\n\\n\")\n\n        f.write(\"--- 1. \u90e8\u95e8\u9500\u552e\u5206\u6790 ---\\n\")\n        if dept_df is not None and not dept_df.empty:\n            f.write(dept_df.to_string(index=False))\n            f.write(f\"\\n\u56fe\u8868: {dept_chart}\\n\")\n        else:\n            f.write(\"\u65e0\u6570\u636e\\n\")\n        f.write(\"\\n\")\n\n        f.write(\"--- 2. \u4f1a\u5458\u8d2d\u4e70\u4e0e\u7231\u597d\u5206\u6790 ---\\n\")\n        if member_df is not None and not member_df.empty:\n             # \u91cd\u65b0\u8ba1\u7b97\u54c1\u7c7b\u5206\u5e03\u7528\u4e8e\u62a5\u544a\u6587\u672c\n             category_counts = member_df&#91;'\u504f\u597d\u54c1\u7c7b'].value_counts().sort_values(ascending=False)\n             df_category_dist = category_counts.reset_index()\n             df_category_dist.columns = &#91;'\u54c1\u7c7b', '\u4f1a\u5458\u6570\u91cf']\n             f.write(\"\u4f1a\u5458\u54c1\u7c7b\u504f\u597d\u5206\u5e03:\\n\")\n             f.write(df_category_dist.to_string(index=False))\n             f.write(f\"\\n\u56fe\u8868: {member_chart}\\n\\n\")\n             \n             f.write(\"\u9ad8\u4ef7\u503c\u4f1a\u5458TOP 10:\\n\")\n             top_members = member_df.head(10)\n             f.write(top_members&#91;&#91;'\u4f1a\u5458ID', '\u59d3\u540d', '\u603b\u6d88\u8d39', '\u603b\u8ba2\u5355\u6570', '\u504f\u597d\u54c1\u7c7b']].to_string(index=False))\n        else:\n            f.write(\"\u65e0\u6570\u636e\\n\")\n        f.write(\"\\n\")\n\n        f.write(\"--- 3. \u9500\u552e\u8d8b\u52bf\u5206\u6790 ---\\n\")\n        if trend_df is not None and not trend_df.empty:\n            f.write(\"\u8fd1\u671f\u9500\u552e\u8d8b\u52bf (\u6700\u540e10\u5929):\\n\")\n            f.write(trend_df.tail(10).to_string(index=False))\n            f.write(f\"\\n\u56fe\u8868: {trend_chart}\\n\")\n        else:\n            f.write(\"\u65e0\u6570\u636e\\n\")\n        f.write(\"\\n\")\n\n        f.write(\"========================================\\n\")\n        f.write(\"              \u62a5\u544a\u7ed3\u675f\\n\")\n        f.write(\"========================================\\n\")\n\n    print(f\"\\n\u5206\u6790\u62a5\u544a\u5df2\u751f\u6210: {report_filename}\")\n\n\ndef main():\n    \"\"\"\u4e3b\u51fd\u6570\"\"\"\n    connection = connect_to_db()\n    if not connection:\n        return\n\n    cursor = connection.cursor()\n\n    # \u6267\u884c\u5206\u6790\n    dept_df, dept_chart = analyze_department_sales(cursor)\n    member_df, member_chart = analyze_member_behavior(cursor)\n    trend_df, trend_chart = analyze_sales_trend(cursor)\n\n    # \u751f\u6210\u62a5\u544a\n    generate_report(dept_df, dept_chart, member_df, member_chart, trend_df, trend_chart)\n\n    # \u5173\u95ed\u8fde\u63a5\n    cursor.close()\n    connection.close()\n    print(\"\\n\u6570\u636e\u5e93\u8fde\u63a5\u5df2\u5173\u95ed\u3002\")\n\n\nif __name__ == \"__main__\":\n    main()<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1. \u90e8\u95e8\u9500\u552e\u5206\u6790 \u90e8\u95e8 \u603b\u9500\u552e\u989d \u5e73\u5747\u9500\u552e\u989d \u4ea4\u6613\u6b21\u6570 \u9884\u7b97\u4f7f\u7528\u7387 \u5e02\u573a\u90e8 20,000.00 1&hellip; <a href=\"http:\/\/viplao.com\/index.php\/2025\/08\/19\/%e3%80%90python10%e5%b9%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93%e3%80%91%e7%94%b5%e5%95%86%e5%b9%b3%e5%8f%b0%e9%94%80%e5%94%ae%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%ae%9e%e8%b7%b5-%e7%94%b5%e5%95%86\/\" class=\"more-link read-more\" rel=\"bookmark\">\u7ee7\u7eed\u9605\u8bfb <span class=\"screen-reader-text\">\u3010Python\u5b9e\u8df5\u6848\u4f8b\u3011\u7535\u5546\u5e73\u53f0\u6570\u636e\u5206\u6790\u548c\u6316\u6398 &#8211; \u7535\u5546\u9500\u552e\u5206\u6790\u5b9e\u4f8b<\/span><i class=\"fa fa-arrow-right\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[28],"views":833,"_links":{"self":[{"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/posts\/3868"}],"collection":[{"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/comments?post=3868"}],"version-history":[{"count":4,"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/posts\/3868\/revisions"}],"predecessor-version":[{"id":3914,"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/posts\/3868\/revisions\/3914"}],"wp:attachment":[{"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/media?parent=3868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/categories?post=3868"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/viplao.com\/index.php\/wp-json\/wp\/v2\/tags?post=3868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}