├── 第1课_机器学习入门基础 ├── FirstPgm.ipynb ├── Scikit-Learn降维算法示例.ipynb ├── 漏斗分析.ipynb ├── 直播带货.csv ├── 直播带货.py └── 直播带货AI实战5部曲.ipynb ├── 第2课_数据探索和数据可视化 ├── 医疗数据可视化.ipynb └── 某地乳腺检查数据.csv ├── 第3课_回归算法与生命周期价值预测 ├── 回归算法预测LTV.ipynb └── 电商历史订单.csv ├── 第4课_分类算法在医疗诊断中的应用 ├── 医疗数据分类.ipynb └── 某地乳腺检查数据.csv ├── 第5课_聚类算法与电商用户价值分组 ├── 电商历史订单.csv └── 电商用户RFM聚类分析.ipynb ├── 第6课_降维算法在商品分析中的应用 ├── .ipynb_checkpoints │ └── PCA-checkpoint.ipynb ├── PCA.ipynb └── 品类降维.csv ├── 第7课_深度学习初探图像识别与时序预测 ├── AppRNN.csv ├── CNN_OwnNet_CIFAR10.py ├── CNN_ResNet_CIFAR10.py ├── PyTorch_目标检测_Inference.ipynb ├── RNN_TimeSeries.ipynb ├── RNN_TimeSeries.py ├── Read_Local_Image.py └── dog_bike_car.jpg └── 第8课_大语言模型与基于垂直行业的问答系统 ├── LangChain_DocQA.ipynb └── OneFlower ├── .ipynb_checkpoints ├── 易速鲜花员工手册-checkpoint.pdf └── 花语大全-checkpoint.txt ├── 易速鲜花员工手册.pdf ├── 易速鲜花运营指南.docx └── 花语大全.txt /第1课_机器学习入门基础/FirstPgm.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "49dd42c0", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "a = 1" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "id": "5cc13bde", 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "b = 1" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "id": "c6a135eb", 26 | "metadata": {}, 27 | "source": [ 28 | "这是一段说明文字\n" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": null, 34 | "id": "d45c6bd3", 35 | "metadata": {}, 36 | "outputs": [], 37 | "source": [] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 3, 42 | "id": "a3e703e3", 43 | "metadata": {}, 44 | "outputs": [ 45 | { 46 | "name": "stdout", 47 | "output_type": "stream", 48 | "text": [ 49 | "1\n" 50 | ] 51 | } 52 | ], 53 | "source": [ 54 | "print(a)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "id": "0e4eaaad", 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [] 64 | } 65 | ], 66 | "metadata": { 67 | "kernelspec": { 68 | "display_name": "Python 3 (ipykernel)", 69 | "language": "python", 70 | "name": "python3" 71 | }, 72 | "language_info": { 73 | "codemirror_mode": { 74 | "name": "ipython", 75 | "version": 3 76 | }, 77 | "file_extension": ".py", 78 | "mimetype": "text/x-python", 79 | "name": "python", 80 | "nbconvert_exporter": "python", 81 | "pygments_lexer": "ipython3", 82 | "version": "3.10.11" 83 | } 84 | }, 85 | "nbformat": 4, 86 | "nbformat_minor": 5 87 | } 88 | -------------------------------------------------------------------------------- /第1课_机器学习入门基础/Scikit-Learn降维算法示例.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "939644b5", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "from sklearn import datasets # 导入数据集\n", 11 | "iris = datasets.load_iris() # 加载数据\n", 12 | "X = iris.data # 特征\n", 13 | "y = iris.target # 标签" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "id": "cf448561", 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "from sklearn.decomposition import PCA # 导入PCA算法\n", 24 | "pca = PCA(n_components=2) # 初始化模型\n", 25 | "X_r = pca.fit(X).transform(X) # 进行数据降维" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 3, 31 | "id": "87fbc4ee", 32 | "metadata": {}, 33 | "outputs": [ 34 | { 35 | "data": { 36 | "text/plain": [ 37 | "
" 38 | ] 39 | }, 40 | "execution_count": 3, 41 | "metadata": {}, 42 | "output_type": "execute_result" 43 | }, 44 | { 45 | "data": { 46 | "image/png": "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lO4lTao777yTD37wgxQVFTFz5kw+8YlPsGfPnnQva9L8x3/8B6eddlq8MdvixYv5/e9/n+5lpc2dd96JoijccMMNE34tCV7S4KKLLuK///u/2bNnD0888QTvvPMOn/70p9O9rEnx9ttvY1kW999/P2+99RY//vGPue+++7j11lvTvbRJE4lE+MxnPsOXvvSldC9lUjz++OPccMMN3Hbbbbz++uucf/75rFixgkOHDqV7aSnX1dXFBz7wAX72s5+leylp8fzzz/OVr3yFl19+mWeffRbDMLjkkkvo6upK99ImxXHHHcf/+3//j1dffZVXX32Viy++mI9//OO89dZb6V7apPvLX/7CAw88wGmnnZacF7RF2v3mN7+xFUWxI5FIupeSFt///vft6urqdC9j0q1fv94uKSlJ9zJS7uyzz7avvfbaPo8tWLDA/ta3vpWmFaUHYD/55JPpXkZaHTt2zAbs559/Pt1LSZuysjL7P//zP9O9jEkVCATs2tpa+9lnn7UvvPBC+2tf+9qEX1N2XtKstbWVDRs2cO655+JyudK9nLRob2/H5/OlexkiBSKRCK+99hqXXHJJn8cvueQSdu7cmaZViXRpb28HmJLf76Zp8thjj9HV1cXixYvTvZxJ9ZWvfIV/+Id/YNmyZUl7TQle0uTmm2+moKCAadOmcejQIX7zm9+ke0lp8c477/DTn/6Ua6+9Nt1LESnQ3NyMaZqUl5f3eby8vJympqY0rUqkg23b3HjjjXz4wx/mlFNOSfdyJs2bb75JYWEhHo+Ha6+9lieffJKTTjop3cuaNI899hh//etfufPOO5P6uhK8JMnatWtRFGXYj1dffTV+/Te/+U1ef/11/vCHP6BpGldccQV2Fjc7Huv7B2hsbOSjH/0on/nMZ/jCF76QppUnx3je/1SiKEqf+7ZtD3hM5LbrrruON954g1/96lfpXsqkOvHEE9m1axcvv/wyX/rSl7jyyiv5+9//nu5lTYqGhga+9rWv8eijj+L1epP62jIeIEmam5tpbm4e9pp58+YN+hf43nvvUVVVxc6dO7N2O3Gs77+xsZGLLrqIc845h4ceeghVze44ejx//w899BA33HADfr8/xatLn0gkQn5+Pr/+9a9ZuXJl/PGvfe1r7Nq1i+effz6Nq5tciqLw5JNP8olPfCLdS5l0X/3qV9m0aRMvvPAC1dXV6V5OWi1btowTTjiB+++/P91LSblNmzaxcuVKNE2LP2aaJoqioKoq4XC4z+fGQk/WIqe66dOnM3369HE9NxY/hsPhZC5pUo3l/R8+fJiLLrqIRYsWsX79+qwPXGBif/+5zO12s2jRIp599tk+wcuzzz7Lxz/+8TSuTEwG27b56le/ypNPPsn27dunfOACzp9JNv9bPxZLly7lzTff7PPY1VdfzYIFC7j55pvHHbiABC+T7pVXXuGVV17hwx/+MGVlZbz77rvU1dVxwgknZO2uy1g0NjayZMkS5syZww9+8APef//9+OdmzZqVxpVNnkOHDtHa2sqhQ4cwTZNdu3YBUFNTQ2FhYXoXlwI33ngja9as4ayzzmLx4sU88MADHDp0aErkOXV2dlJfXx+/v3//fnbt2oXP52POnDlpXNnk+MpXvsLGjRv5zW9+Q1FRUTzPqaSkhLy8vDSvLvVuvfVWVqxYQVVVFYFAgMcee4zt27ezefPmdC9tUhQVFQ3Ib4rlek4472nC9UpiTN544w37oosusn0+n+3xeOx58+bZ1157rf3ee++le2mTYv369TYw6MdUceWVVw76/p977rl0Ly1l7r33Xnvu3Lm22+22zzzzzClTKvvcc88N+nd95ZVXpntpk2Ko7/X169ene2mT4v/+3/8b/+9+xowZ9tKlS+0//OEP6V5WWiWrVFpyXoQQQgiRVbI/2UAIIYQQU4oEL0IIIYTIKhK8CCGEECKrSPAihBBCiKwiwYsQQgghsooEL0IIIYTIKhK8CCGEECKrSPAihBBCiKwiwYsQQgghsooEL0IIIYTIKhK8CCGEECKrSPAihBBCiKzy/wPFPMbRQvuZ4wAAAABJRU5ErkJggg==\n", 47 | "text/plain": [ 48 | "
" 49 | ] 50 | }, 51 | "metadata": {}, 52 | "output_type": "display_data" 53 | }, 54 | { 55 | "data": { 56 | "text/plain": [ 57 | "
" 58 | ] 59 | }, 60 | "metadata": {}, 61 | "output_type": "display_data" 62 | } 63 | ], 64 | "source": [ 65 | "import matplotlib.pyplot as plt\n", 66 | "target_names = iris.target_names\n", 67 | "colors = [\"navy\", \"turquoise\", \"darkorange\"]\n", 68 | "for color, i, target_name in zip(colors, [0, 1, 2], target_names):\n", 69 | " plt.scatter(\n", 70 | " X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=0.8, lw=2, label=target_name\n", 71 | " )\n", 72 | "plt.legend(loc=\"best\", shadow=False, scatterpoints=1)\n", 73 | "plt.figure()" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": null, 79 | "id": "8613f8ec", 80 | "metadata": {}, 81 | "outputs": [], 82 | "source": [] 83 | } 84 | ], 85 | "metadata": { 86 | "kernelspec": { 87 | "display_name": "Python 3 (ipykernel)", 88 | "language": "python", 89 | "name": "python3" 90 | }, 91 | "language_info": { 92 | "codemirror_mode": { 93 | "name": "ipython", 94 | "version": 3 95 | }, 96 | "file_extension": ".py", 97 | "mimetype": "text/x-python", 98 | "name": "python", 99 | "nbconvert_exporter": "python", 100 | "pygments_lexer": "ipython3", 101 | "version": "3.10.11" 102 | } 103 | }, 104 | "nbformat": 4, 105 | "nbformat_minor": 5 106 | } 107 | -------------------------------------------------------------------------------- /第1课_机器学习入门基础/直播带货.csv: -------------------------------------------------------------------------------- 1 | 转发量,品类热度,流量推送,成交额 2 | 2646,7,5,260004 3 | 816,4,6,100004 4 | 1224,6,5,164502 5 | 1261,6,6,163001 6 | 1720,7,5,260401 7 | 1541,7,5,220002 8 | 827,5,7,107503 9 | 866,5,9,110504 10 | 1314,8,5,229461 11 | 1431,6,5,165004 12 | 2291,6,6,133901 13 | 2157,7,6,226005 14 | 864,4,5,116054 15 | 2620,5,5,190001 16 | 1080,7,5,141003 17 | 1507,5,5,127005 18 | 1375,6,5,140003 19 | 980,5,5,135503 20 | 1044,5,5,55996 21 | 1980,9,5,315003 22 | 1932,8,5,394619 23 | 1314,7,5,230004 24 | 1092,5,5,139001 25 | 2119,6,6,158001 26 | 1224,5,5,153342 27 | 1425,6,5,180502 28 | 1392,6,5,166005 29 | 1572,6,5,168001 30 | 1324,4,6,128001 31 | 1232,7,5,194502 32 | 1872,8,5,261505 33 | 1641,7,7,178003 34 | 1802,7,6,200103 35 | 1232,6,6,162503 36 | 987,6,3,89503 37 | 1394,6,5,159001 38 | 988,5,5,113001 39 | 1716,5,6,135903 40 | 1258,7,5,172504 41 | 1700,5,5,165505 42 | 1188,5,7,157901 43 | 1616,8,5,236501 44 | 1953,6,5,240004 45 | 2775,10,9,325003 46 | 1008,5,6,137003 47 | 1136,6,6,140005 48 | 1788,4,5,161503 49 | 968,3,6,37905 50 | 1387,5,4,93003 51 | 1494,7,5,279505 52 | 1212,6,5,186004 53 | 1973,8,5,395003 54 | 1553,7,5,186504 55 | 1319,5,6,123005 56 | 2329,7,5,262283 57 | 1184,5,3,81005 58 | 1393,5,7,135503 59 | 1294,4,7,106251 60 | 1252,6,5,119001 61 | 1601,5,6,140002 62 | 1600,5,6,207501 63 | 1302,6,7,158002 64 | 1327,5,6,150752 65 | 987,6,8,118004 66 | 1886,7,5,199902 67 | 1103,6,6,110502 68 | 858,5,7,116504 69 | 1493,6,5,208902 70 | 1034,5,6,109002 71 | 788,4,5,100001 72 | 886,5,8,91301 73 | 2267,6,5,200005 74 | 3608,10,9,475001 75 | 2601,5,6,189002 76 | 918,6,5,99504 77 | 1118,5,7,119901 78 | 1242,7,6,175505 79 | 1509,6,5,183205 80 | 1375,6,6,141004 81 | 1216,5,5,118502 82 | 1670,7,5,240004 83 | 1040,3,4,93503 84 | 1297,5,6,153002 85 | 1250,7,5,171905 86 | 1989,8,5,255005 87 | 1604,7,5,220003 88 | 1701,5,5,171005 89 | 864,3,3,58503 90 | 1214,3,4,105004 91 | 2450,8,5,340001 92 | 1344,7,5,206301 93 | 1682,7,6,174003 94 | 1337,7,5,185004 95 | 2482,8,5,281215 96 | 1559,5,6,153505 97 | 1088,8,5,170004 98 | 1526,5,6,144505 99 | 835,5,5,83003 100 | 2468,8,5,354004 101 | 1929,7,5,226001 102 | 1961,6,5,215001 103 | 1710,7,5,208504 104 | 910,5,7,116003 105 | 1518,8,5,274004 106 | 1144,5,5,124004 107 | 1512,6,5,168502 108 | 1134,5,6,126005 109 | 2447,6,7,169005 110 | 952,6,6,121005 111 | 1122,5,7,147001 112 | 1836,7,5,216840 113 | 1656,5,7,135002 114 | 1118,6,6,171003 115 | 2196,7,7,271903 116 | 1131,5,6,66504 117 | 1405,7,5,171751 118 | 2452,8,5,267005 119 | 2127,7,5,238001 120 | 1092,5,5,141004 121 | 1694,8,5,245354 122 | 1365,5,6,125001 123 | 1352,5,4,130003 124 | 2046,7,5,284001 125 | 1402,7,5,194202 126 | 1077,3,4,91002 127 | 864,4,6,120502 128 | 930,4,7,84902 129 | 816,5,5,110004 130 | 1595,6,5,140004 131 | 1800,5,4,141002 132 | 1040,5,5,133002 133 | 1717,7,5,187502 134 | 970,5,6,132501 135 | 1100,4,5,141003 136 | 1431,7,5,192003 137 | 2108,6,7,235001 138 | 2344,7,5,265001 139 | 2263,8,5,287002 140 | 708,4,7,82504 141 | 1940,9,5,395195 142 | 773,5,5,110001 143 | 2728,9,5,437159 144 | 1560,7,5,201001 145 | 1795,5,5,131504 146 | 1002,5,6,148503 147 | 923,5,5,119501 148 | 1256,5,6,147505 149 | 789,5,5,96505 150 | 1128,5,5,118002 151 | 1855,6,7,187002 152 | 1768,7,5,224904 153 | 1196,6,8,110004 154 | 1742,8,5,275001 155 | 1484,6,5,174003 156 | 1098,5,7,135005 157 | 1746,9,5,377504 158 | 1144,5,6,143004 159 | 1720,7,5,183503 160 | 1215,6,7,155005 161 | 1230,5,6,110001 162 | 2020,8,5,239501 163 | 1486,5,7,167005 164 | 848,6,5,155902 165 | 1484,6,5,178903 166 | 1362,6,8,128003 167 | 2462,7,5,320005 168 | 1054,6,8,151001 169 | 1041,5,6,124503 170 | 1226,7,5,198901 171 | 1048,5,6,113004 172 | 1987,8,5,301503 173 | 1911,8,5,215001 174 | 1501,7,5,179405 175 | 858,4,6,110001 176 | 1646,8,5,293082 177 | 2201,6,7,274973 178 | 1768,7,5,226701 179 | 1533,7,5,280005 180 | 816,6,8,120504 181 | 996,5,6,108002 182 | 1194,6,6,148004 183 | 1674,6,7,185003 184 | 938,5,6,130251 185 | 1374,4,6,105003 186 | 1742,8,9,168004 187 | 1954,7,9,311501 188 | 1786,6,5,204753 189 | 1445,6,6,158005 190 | 1698,9,5,320001 191 | 1198,6,7,79902 192 | 1422,5,5,139905 193 | 1468,8,5,244604 194 | 2262,8,5,305004 195 | 1230,4,7,121602 196 | 1792,6,5,186501 197 | 2828,8,5,424874 198 | 972,6,6,132002 199 | 1668,9,5,285005 200 | 1236,6,7,149702 201 | 1728,6,5,150905 202 | 1904,5,4,138005 203 | 1095,6,5,140004 204 | 1456,5,3,91501 205 | 1097,5,5,145003 206 | 768,5,7,129504 207 | 845,4,3,84001 208 | 1368,6,7,114506 209 | 2167,7,7,294002 210 | 900,5,5,123001 211 | 932,6,5,124004 212 | 1426,7,8,189953 213 | 796,4,4,55002 214 | 2259,6,5,217004 215 | 1852,8,5,230003 216 | 616,5,7,89003 217 | 1218,6,5,113005 218 | 2452,8,5,309002 219 | 2020,5,5,144002 220 | 3222,7,5,320002 221 | 605,4,7,86001 222 | 1092,4,5,75002 223 | 894,5,8,138505 224 | 1347,5,7,107501 225 | 2084,7,5,233005 226 | 1694,8,5,318001 227 | 2345,6,8,239002 228 | 1422,6,6,175505 229 | 1214,5,5,143002 230 | 1382,5,6,128501 231 | 1902,6,5,112003 232 | 1416,7,5,155003 233 | 1839,7,5,221005 234 | 1358,7,5,207001 235 | 1363,5,7,164904 236 | 1050,5,6,128904 237 | 1092,4,5,83502 238 | 1459,7,5,192003 239 | 864,5,5,129904 240 | 2633,10,5,466501 241 | 1040,5,7,109502 242 | 630,4,7,81005 243 | 1395,6,6,162005 244 | 630,4,6,75505 245 | 1824,6,5,139001 246 | 1840,7,5,230003 247 | 2263,7,7,235002 248 | 1539,5,6,141504 249 | 864,4,6,97003 250 | 1060,5,8,154003 251 | 1411,7,5,82504 252 | 913,6,5,129001 253 | 2090,8,5,240001 254 | 1040,3,4,92901 255 | 1490,7,5,184003 256 | 1530,7,5,259004 257 | 1560,6,5,174001 258 | 2021,7,5,274728 259 | 882,4,6,103203 260 | 980,6,5,127502 261 | 1734,8,5,318004 262 | 2358,8,5,122002 263 | 882,5,5,112505 264 | 1453,7,5,190001 265 | 894,5,5,125003 266 | 1555,7,5,174001 267 | 1709,7,5,137505 268 | 894,3,4,81004 269 | 1466,5,8,170005 270 | 2076,10,5,465005 271 | 1756,6,5,204005 272 | 990,4,5,123602 273 | 1128,5,6,155005 274 | 1764,6,5,231502 275 | 1588,8,5,227004 276 | 1694,8,5,307003 277 | 1432,7,5,188505 278 | 1487,6,4,113001 279 | 1004,6,7,149001 280 | 1268,5,6,132002 281 | 1382,6,5,176002 282 | 1481,6,5,174005 283 | 1154,4,8,125502 284 | 861,4,5,82505 285 | 1144,5,6,129005 286 | 1768,8,5,212002 287 | 774,3,6,79003 288 | 1344,5,5,144003 289 | 816,6,5,118503 290 | 1218,6,5,91502 291 | 2138,5,5,106003 292 | 1287,5,7,162003 293 | 2643,9,5,380003 294 | 925,5,6,117501 295 | 1056,5,6,142004 296 | 1135,7,9,155002 297 | 1028,5,6,115002 298 | 848,6,5,140002 299 | 1158,6,7,120001 300 | 630,4,6,84502 301 | 2098,8,5,275504 302 | 907,4,6,109012 303 | 2555,6,7,191002 304 | 1768,4,5,136504 305 | 2090,7,6,200005 306 | 2144,6,7,277001 307 | 1228,5,6,149351 308 | 1039,5,4,131504 309 | 1190,5,6,132505 310 | 1796,6,5,140004 311 | 1552,6,6,179905 312 | 1218,6,6,131001 313 | 1663,4,6,256002 314 | 1578,8,5,287093 315 | 2054,6,5,244004 316 | 2126,5,5,185003 317 | 864,4,5,141001 318 | 1322,6,5,147004 319 | 2526,6,7,136002 320 | 2448,8,7,402004 321 | 1968,5,4,172004 322 | 767,7,5,133005 323 | 1550,7,5,241005 324 | 1660,6,7,188701 325 | 1935,7,7,197904 326 | 1576,5,6,223503 327 | 2093,7,6,215002 328 | 1574,8,5,232003 329 | 2403,7,7,244404 330 | 1416,5,8,153903 331 | 996,6,6,147004 332 | 1200,5,5,179002 333 | 948,4,5,111005 334 | 1163,3,8,126180 335 | 882,5,7,106503 336 | 988,4,5,91003 337 | 1610,6,7,205001 338 | 1360,8,5,187501 339 | 985,5,8,149904 340 | 1120,4,5,129005 341 | 1713,8,5,274901 342 | 2374,8,5,285001 343 | 1068,6,8,154503 344 | 1664,7,5,162904 345 | 2172,7,5,280004 346 | 1131,4,7,89474 347 | 1484,8,5,265903 348 | 2022,7,5,192003 349 | 1452,7,5,183905 350 | 1724,7,5,188001 351 | 1484,5,6,175002 352 | 1948,7,5,195005 353 | 1248,5,5,87003 354 | 1714,7,5,196501 355 | 2872,8,5,285004 356 | 1221,7,5,185001 357 | 1600,6,5,169003 358 | 1719,8,5,324002 359 | 1008,5,7,134502 360 | 1573,5,7,162903 361 | 1155,5,7,148002 362 | 1484,7,5,213003 363 | 1208,7,5,206002 364 | 1294,6,5,179202 365 | 958,6,5,128003 366 | 2158,6,7,243001 367 | 2019,7,8,167503 368 | 1337,6,5,181001 369 | 764,5,5,73003 370 | 1456,6,5,146003 371 | 1111,5,7,101004 372 | 1324,8,5,254005 373 | 1629,8,5,284004 374 | 1472,5,8,125004 375 | 864,5,8,129004 376 | 1554,8,5,209503 377 | 2296,10,5,451951 378 | 1505,6,4,149503 379 | 1958,7,5,250004 380 | 1795,8,5,147004 381 | 1484,6,6,128001 382 | 1178,4,7,102777 383 | 2715,8,9,299803 384 | 1372,7,5,250584 385 | 1309,6,6,181001 386 | 2727,8,8,315002 387 | 2080,7,9,234002 388 | 2058,6,5,129501 389 | 1073,5,7,156004 390 | 630,5,7,92005 391 | 1032,6,6,148002 392 | 1268,5,7,143501 393 | 1800,6,5,179003 394 | 2519,7,5,335005 395 | 1392,5,6,121502 396 | 1734,5,5,126003 397 | 1718,10,5,337504 398 | 2080,5,5,135003 399 | 1651,6,5,184001 400 | 1620,4,4,150002 401 | 1640,6,7,224005 402 | 2978,7,7,242002 403 | 1376,6,6,119503 404 | 1113,6,7,148004 405 | 1200,6,5,125001 406 | 1440,4,4,118005 407 | 1336,4,6,108001 408 | 1346,4,7,112003 409 | 1340,5,6,120002 410 | 1368,7,5,202667 411 | 1524,5,5,144004 412 | 1496,7,5,179670 413 | 1928,7,5,219501 414 | 2295,7,5,268001 415 | 3140,9,5,485005 416 | 1181,4,5,137501 417 | 1479,7,5,191001 418 | 1590,8,5,210005 419 | 936,5,7,129004 420 | 1040,5,5,133703 421 | 1414,7,5,178745 422 | 1790,7,5,193004 423 | 1869,9,5,318062 424 | 1630,7,5,213005 425 | 1339,5,6,139002 426 | 1666,8,7,161004 427 | 1478,6,5,157501 428 | 1539,5,8,157505 429 | 1080,6,7,136003 430 | 1656,5,5,135003 431 | 1040,5,5,124002 432 | 1573,7,5,227001 433 | 1320,5,6,164502 434 | 1240,7,5,194005 435 | 1194,6,6,159503 436 | 904,6,7,119004 437 | 1839,6,7,257502 438 | 1567,6,5,196005 439 | 1494,7,5,215002 440 | 1577,6,5,140203 441 | 2013,7,5,269791 442 | 833,5,7,117001 443 | 2380,6,5,129005 444 | 1456,8,5,215003 445 | 1734,6,7,159001 446 | 1152,5,7,180501 447 | 2046,8,5,372503 448 | 1152,4,5,82003 449 | 2183,7,5,229004 450 | 1340,7,5,181135 451 | 1567,8,5,264564 452 | 816,5,7,124504 453 | 1252,5,8,127002 454 | 2340,7,9,266504 455 | 1128,4,4,68404 456 | 1456,6,6,148502 457 | 1494,6,5,217002 458 | 2008,5,8,225002 459 | 987,6,5,100003 460 | 1626,7,5,175504 461 | 2207,7,5,180004 462 | 789,5,5,115001 463 | 1959,7,5,215004 464 | 1652,5,6,139003 465 | 928,5,6,112505 466 | 1118,6,8,116002 467 | 1632,6,8,173001 468 | 1969,7,6,190004 469 | 1895,7,5,194504 470 | 1165,6,7,174903 471 | 1767,7,7,239003 472 | 864,5,6,98005 473 | 904,1,1,61003 474 | 1040,4,5,90001 475 | 1125,6,6,125003 476 | 1320,7,5,162001 477 | 1456,7,5,155836 478 | 2020,10,5,402864 479 | 954,5,7,119751 480 | 1430,7,5,170004 481 | 1639,6,5,115003 482 | 803,5,6,87001 483 | 1446,7,5,175001 484 | 1700,6,5,200001 485 | 951,4,6,106505 486 | 1357,6,7,177001 487 | 1959,7,5,171005 488 | 1145,7,5,160202 489 | 2097,7,5,228005 490 | 1502,6,7,165001 491 | 1904,8,5,275003 492 | 1509,7,5,180001 493 | 2090,7,5,207504 494 | 816,5,7,129903 495 | 1334,6,5,167902 496 | 1708,7,5,130005 497 | 1844,6,5,223005 498 | 1661,6,6,165503 499 | 1913,6,6,177004 500 | 848,6,5,131502 501 | 1200,7,5,151005 502 | 1391,7,5,196001 503 | 1779,5,4,170005 504 | 1458,6,5,176005 505 | 1658,6,5,188002 506 | 1301,7,5,187751 507 | 1412,6,5,156937 508 | 1571,8,5,239001 509 | 1876,6,6,185002 510 | 2042,8,5,253296 511 | 768,5,8,133901 512 | 960,4,5,129005 513 | 1392,6,3,110005 514 | 1291,6,5,173004 515 | 1288,8,5,245502 516 | 2198,8,5,250001 517 | 894,5,6,128202 518 | 1252,7,5,160003 519 | 1200,7,5,144155 520 | 1015,5,7,88002 521 | 1774,7,5,129903 522 | 1828,9,5,314818 523 | 520,4,6,68505 524 | 1250,5,6,139002 525 | 3194,8,6,359103 526 | 1108,7,7,139402 527 | 1441,8,5,174004 528 | 924,4,4,80002 529 | 1056,5,5,145005 530 | 1306,3,2,76501 531 | 1378,7,9,161003 532 | 1067,4,7,128002 533 | 1478,6,3,156504 534 | 1690,6,5,181003 535 | 1236,5,7,135004 536 | 1786,7,5,223505 537 | 1026,6,6,147004 538 | 1338,8,5,213504 539 | 1111,5,6,95003 540 | 2320,6,8,259503 541 | 1456,6,5,172789 542 | 1298,6,5,180005 543 | 1152,6,8,158505 544 | 1342,6,5,161502 545 | 1211,5,5,134005 546 | 1665,7,6,205952 547 | 1406,6,7,89504 548 | 864,5,6,133502 549 | 1310,7,5,164994 550 | 1183,3,7,120005 551 | 3493,7,9,295002 552 | 2612,8,5,336001 553 | 1792,9,5,374002 554 | 1844,8,5,257004 555 | 944,3,3,82002 556 | 2358,6,8,240003 557 | 1646,8,5,275001 558 | 2127,7,5,271004 559 | 1792,5,5,136003 560 | 1505,5,5,145003 561 | 630,4,4,80005 562 | 1117,6,5,107003 563 | 864,5,7,115002 564 | 1644,5,7,146501 565 | 1479,7,9,184002 566 | 1337,6,5,153502 567 | 1728,5,5,142601 568 | 1983,7,5,225001 569 | 1724,6,5,197903 570 | 2365,8,5,337005 571 | 1113,5,7,147005 572 | 2466,8,5,340001 573 | 1850,9,5,326003 574 | 2792,6,7,256001 575 | 894,4,5,110005 576 | 2060,6,5,211001 577 | 987,6,5,83005 578 | 893,5,7,135001 579 | 2414,5,4,160001 580 | 1684,9,5,266003 581 | 1360,5,5,130002 582 | 1150,5,6,141005 583 | 894,5,5,142505 584 | 1922,9,5,377431 585 | 2087,6,8,187505 586 | 1844,6,6,190004 587 | 1646,8,5,248903 588 | 1992,8,5,250001 589 | 1200,7,5,151002 590 | 1824,6,6,180504 591 | 480,2,3,35314 592 | 1915,8,5,220004 593 | 882,5,5,97004 594 | 1850,7,6,248001 595 | 1200,6,5,177502 596 | 1159,5,5,158004 597 | 1566,8,5,262504 598 | 1269,5,6,155005 599 | 1820,7,6,201803 600 | 1506,7,5,213491 601 | 1479,6,8,130505 602 | 1442,7,5,179902 603 | 1668,8,5,232004 604 | 2784,7,5,250004 605 | 1360,5,6,125502 606 | 1344,4,6,97002 607 | 1750,5,6,124001 608 | 1716,5,4,131004 609 | 848,6,5,144502 610 | 1842,9,5,385002 611 | 1192,5,5,78001 612 | 1647,6,5,175003 613 | 1229,4,6,135002 614 | 1784,5,5,138888 615 | 1363,7,7,241503 616 | 1224,6,5,165002 617 | 1212,7,5,178004 618 | 1517,8,7,230005 619 | 1456,6,5,176005 620 | 2640,7,7,265980 621 | 2713,9,5,446265 622 | 2097,7,6,274304 623 | 1124,5,5,93003 624 | 1383,5,5,165001 625 | 334,1,3,39302 626 | 1132,4,5,176001 627 | 1867,5,5,190003 628 | 1933,6,5,214001 629 | 1146,7,5,187505 630 | 1535,5,5,118966 631 | 2945,10,5,438783 632 | 2596,9,5,342647 633 | 1092,4,4,88001 634 | 2256,7,5,236005 635 | 800,2,3,60004 636 | 2260,7,5,328003 637 | 1604,6,5,181004 638 | 1482,7,5,163901 639 | 952,5,7,139001 640 | 960,4,3,112004 641 | 1717,8,5,255501 642 | 912,5,6,144001 643 | 1626,7,5,173004 644 | 1605,3,6,107405 645 | 1855,6,4,136902 646 | 1500,7,5,246582 647 | 1304,5,6,115005 648 | 2872,6,7,272003 649 | 1344,5,4,115001 650 | 1301,5,5,100004 651 | 1429,6,6,181905 652 | 1148,5,7,123505 653 | 948,5,5,108002 654 | 1167,5,5,144003 655 | 2060,7,5,214004 656 | 1576,7,5,197004 657 | 1556,6,6,154003 658 | 848,6,5,144004 659 | 2634,5,5,200004 660 | 1336,5,5,157005 661 | 1314,7,5,207502 662 | 3082,7,3,197005 663 | 1811,6,7,230002 664 | 1696,5,5,143905 665 | 1796,6,5,211004 666 | 1600,8,5,256302 667 | 1020,5,8,94001 668 | 1839,6,5,155005 669 | 1861,7,5,200004 670 | 1944,9,5,360002 671 | 1476,6,5,173502 672 | 1845,6,5,189005 673 | 1355,6,7,127004 674 | 1510,4,5,108004 675 | 1620,9,5,315503 676 | 768,5,7,133001 677 | 858,4,4,88005 678 | 1466,5,4,149903 679 | 1894,7,5,214903 680 | 1069,6,5,127502 681 | 1072,6,5,140003 682 | 1144,5,6,131405 683 | 1498,7,5,204903 684 | 1121,5,6,139001 685 | 1005,4,5,115001 686 | 1771,5,4,115004 687 | 1558,5,5,152004 688 | 1977,6,6,165005 689 | 864,6,6,127504 690 | 752,6,5,125002 691 | 1652,9,5,325001 692 | 1123,4,5,100005 693 | 990,5,5,156003 694 | 1389,5,5,170003 695 | 1699,3,5,95003 696 | 1588,4,4,134436 697 | 1466,8,5,201004 698 | 1328,4,4,107002 699 | 1176,6,9,134904 700 | 2898,8,6,287005 701 | 1180,4,5,137504 702 | 1702,9,5,367296 703 | 825,5,7,125003 704 | 864,5,5,62387 705 | 1919,8,5,233234 706 | 1593,8,5,286002 707 | 1224,6,5,173734 708 | 1716,7,5,191002 709 | 2184,9,5,335002 710 | 1474,7,5,168503 711 | 1437,5,8,218001 712 | 1574,6,5,190002 713 | 1620,5,5,152004 714 | 1776,5,5,110001 715 | 864,4,6,120505 716 | 864,5,7,128501 717 | 1040,5,5,129502 718 | 858,5,5,134903 719 | 988,5,7,119003 720 | 960,4,9,145003 721 | 1691,5,6,127005 722 | 1414,8,5,178004 723 | 1004,6,5,135003 724 | 672,5,8,108002 725 | 1683,6,5,172501 726 | 1416,5,7,112004 727 | 1494,8,5,270004 728 | 1109,5,7,139005 729 | 1137,6,6,176003 730 | 1265,5,8,179903 731 | 1976,8,5,440002 732 | 1838,5,5,192142 733 | 1006,5,3,80003 734 | 784,5,6,109505 735 | 1614,7,5,221502 736 | 1328,5,6,170003 737 | 1040,5,7,150503 738 | 2810,8,5,302002 739 | 892,5,5,110004 740 | 1176,6,6,114502 741 | 1419,8,5,184103 742 | 1306,6,5,196005 743 | 2112,6,5,206905 744 | 2169,8,5,228501 745 | 884,5,7,144003 746 | 1661,7,5,224905 747 | 1656,7,5,165402 748 | 1502,7,5,233174 749 | 672,4,6,113001 750 | 1496,8,5,225004 751 | 3228,8,5,430002 752 | 816,5,9,130503 753 | 912,5,5,114504 754 | 988,6,5,180002 755 | 1523,6,5,180002 756 | 999,7,9,178405 757 | 1082,6,5,119202 758 | 2270,8,7,290004 759 | 1608,6,6,137453 760 | 1218,6,7,118005 761 | 2229,6,6,104002 762 | 1314,6,5,176436 763 | 1269,8,5,192005 764 | 2614,6,7,240003 765 | 1644,7,5,275001 766 | 1529,4,3,98004 767 | 1557,7,5,234001 768 | 1768,5,7,175003 769 | 1294,7,5,193882 770 | 1602,6,7,215005 771 | 1616,7,5,232003 772 | 2372,5,4,107504 773 | 1214,5,7,140002 774 | 1126,4,5,108004 775 | 1200,5,8,146003 776 | 1142,5,5,134003 777 | 1640,7,5,183005 778 | 1504,7,5,191005 779 | 790,6,5,91003 780 | 935,5,6,79501 781 | 1026,6,8,156003 782 | 2082,7,5,200004 783 | 1601,7,5,157004 784 | 1689,7,6,248329 785 | 1660,7,5,195005 786 | 1414,7,5,185504 787 | 1154,5,6,154003 788 | 1710,6,5,187003 789 | 2110,7,5,205001 790 | 2134,6,6,214502 791 | 1365,5,5,122503 792 | 1277,7,5,167004 793 | 1428,7,5,227683 794 | 813,6,8,110001 795 | 848,6,5,143002 796 | 936,5,5,140001 797 | 2610,8,5,303479 798 | 1573,4,7,133003 799 | 2520,7,5,290004 800 | 2031,8,5,237005 801 | 2057,7,7,250005 802 | 894,5,5,123002 803 | 1072,5,5,145002 804 | 1728,5,4,119001 805 | 816,5,8,138003 806 | 1099,5,6,144005 807 | 1688,6,5,200005 808 | 869,4,7,85504 809 | 1647,5,6,217503 810 | 1632,5,4,143001 811 | 1928,6,8,137003 812 | 1316,7,5,200144 813 | 1246,5,7,154003 814 | 1114,5,5,159002 815 | 1069,6,6,140003 816 | 1382,4,5,148004 817 | 1426,6,6,159501 818 | 2117,6,7,237501 819 | 1558,5,6,140003 820 | 1310,6,6,112002 821 | 1584,5,5,124005 822 | 1593,6,5,178004 823 | 1102,7,5,148801 824 | 1526,3,2,85001 825 | 1776,8,5,283465 826 | 1339,7,5,180004 827 | 1130,5,6,120001 828 | 912,5,5,125001 829 | 854,7,8,132002 830 | 1812,5,9,140002 831 | 1422,7,5,179604 832 | 1739,8,5,172505 833 | 958,6,6,143754 834 | 1818,7,4,169505 835 | 1266,7,5,159896 836 | 1317,4,4,40005 837 | 1126,5,6,175004 838 | 1140,4,7,96504 839 | 1362,6,5,163003 840 | 1047,4,7,100005 841 | 1470,6,6,177004 842 | 1674,7,5,216001 843 | 1622,4,4,168001 844 | 1964,5,6,130001 845 | 924,5,6,110004 846 | 1582,7,5,185904 847 | 792,5,8,109505 848 | 2290,8,5,255903 849 | 1040,4,5,109905 850 | 2624,6,6,239004 851 | 1852,7,5,252681 852 | 986,6,5,102005 853 | 1203,5,4,110002 854 | 1258,6,7,145005 855 | 1939,8,5,266005 856 | 1138,6,8,145003 857 | 990,5,5,138005 858 | 1199,6,5,153903 859 | 1694,6,5,136504 860 | 860,5,6,137002 861 | 1140,5,5,84501 862 | 2223,7,6,244001 863 | 1056,6,5,144002 864 | 1993,6,5,190004 865 | 841,4,4,82001 866 | 1440,6,7,182904 867 | 1475,5,6,127002 868 | 1250,5,7,116001 869 | 1616,6,7,152001 870 | 1800,9,5,239004 871 | 1721,6,5,201001 872 | 1902,7,8,335004 873 | 1494,7,5,221002 874 | 875,5,7,105004 875 | 1775,7,5,213003 876 | 4476,10,5,745001 877 | 1078,5,6,142126 878 | 1960,6,5,216503 879 | 1158,6,5,158002 880 | 2576,8,5,361923 881 | 1958,6,6,145003 882 | 955,5,7,127005 883 | 2285,8,5,248002 884 | 3447,8,9,381001 885 | 1262,6,5,185002 886 | 1863,7,5,219211 887 | 1656,6,5,215005 888 | 969,5,6,122003 889 | 1442,6,6,185001 890 | 1302,5,5,112001 891 | 935,5,6,137002 892 | 1912,6,7,163005 893 | 1501,6,5,165604 894 | 1381,6,7,197501 895 | 1065,5,5,126501 896 | 1635,6,7,210003 897 | 1865,7,5,235001 898 | 1208,4,5,103005 899 | 1726,7,5,311877 900 | 952,4,7,135751 901 | 1200,7,5,184901 902 | 1548,7,7,205004 903 | 990,5,5,126001 904 | 1680,5,6,136910 905 | 1856,9,2,394436 906 | 1224,6,8,115001 907 | 988,5,5,128502 908 | 1520,5,5,159437 909 | 2398,7,5,315752 910 | 1074,5,6,153504 911 | 1314,5,6,145002 912 | 1296,8,5,220004 913 | 1060,5,7,129901 914 | 1500,7,5,190003 915 | 1664,6,5,172405 916 | 848,6,5,149001 917 | 2153,9,5,313002 918 | 1363,4,7,125502 919 | 1092,4,5,55003 920 | 1248,7,5,167242 921 | 987,6,5,85401 922 | 965,5,5,119901 923 | 900,5,5,122001 924 | 1776,7,5,192502 925 | 1489,6,7,139502 926 | 1141,6,5,142505 927 | 2240,5,5,142958 928 | 912,4,5,80504 929 | 1432,5,7,194001 930 | 1564,6,6,171003 931 | 1733,3,5,139602 932 | 899,5,7,130002 933 | 1728,5,5,125003 934 | 1636,8,5,255003 935 | 1430,7,5,180003 936 | 1442,7,5,180503 937 | 1086,5,7,144904 938 | 1680,6,7,177002 939 | 1057,5,5,132002 940 | 1276,5,3,60003 941 | 1368,7,5,202505 942 | 1588,7,5,214001 943 | 894,5,5,129005 944 | 1052,6,7,155005 945 | 438,2,5,60004 946 | 1144,5,6,139951 947 | 1057,5,7,109003 948 | 2034,7,5,219503 949 | 1502,7,6,149005 950 | 1707,8,6,228003 951 | 1968,8,5,269501 952 | 1470,6,8,185005 953 | 1660,8,5,290002 954 | 1208,7,5,195403 955 | 1525,6,5,177004 956 | 1762,7,7,157003 957 | 1556,6,6,151004 958 | 1500,6,5,173903 959 | 1728,7,5,190002 960 | 1302,5,7,119505 961 | 936,4,4,93002 962 | 2243,7,5,225004 963 | 2332,10,5,426001 964 | 872,4,5,123003 965 | 1750,6,7,160005 966 | 1740,7,6,219504 967 | 1234,8,5,179904 968 | 2132,8,8,316603 969 | 1644,6,5,167004 970 | 1801,7,8,289002 971 | 838,6,7,130001 972 | 1343,5,6,154904 973 | 1479,7,5,226005 974 | 1316,6,5,169992 975 | 1284,5,7,110002 976 | 4316,10,6,755004 977 | 1029,4,5,118505 978 | 1888,6,6,190004 979 | 1766,9,5,370879 980 | 1348,6,5,155005 981 | 960,4,4,108503 982 | 1464,8,5,282923 983 | 1173,7,6,170002 984 | 1680,6,9,222002 985 | 1908,8,5,202904 986 | 1229,6,6,124004 987 | 2353,7,7,260003 988 | 1478,7,5,222004 989 | 2000,8,5,305903 990 | 1664,5,5,100004 991 | 1541,7,5,205004 992 | 968,5,6,100002 993 | 1302,5,5,106005 994 | 1073,5,6,108485 995 | 2234,9,5,501839 996 | 2031,7,5,222504 997 | 1647,6,4,128001 998 | 1632,6,6,139004 999 | 900,5,7,134801 1000 | 864,5,8,99903 1001 | 1634,8,5,250002 1002 | 912,6,8,142005 1003 | 1274,7,5,203003 1004 | 1517,5,7,115001 1005 | 1908,7,5,210005 1006 | 924,5,7,122902 1007 | 1522,5,5,102004 1008 | 1924,8,5,280002 1009 | 2113,8,6,350005 1010 | 1561,9,5,277502 1011 | 1489,8,5,232605 1012 | 2320,5,6,169002 1013 | 1718,7,5,185004 1014 | 2504,9,5,325002 1015 | 928,5,7,132001 1016 | 1258,4,4,108964 1017 | 845,4,6,129503 1018 | 1053,5,7,150005 1019 | 1352,6,7,158001 1020 | 1080,6,5,134004 1021 | 1504,7,5,181002 1022 | 1382,7,5,165001 1023 | 1734,7,5,260005 1024 | 1692,7,5,224503 1025 | 1547,7,5,215201 1026 | 987,6,5,94501 1027 | 1869,5,6,124905 1028 | 1535,7,5,214004 1029 | 1709,7,5,130004 1030 | 2526,8,5,290003 1031 | 864,4,7,124503 1032 | 3238,8,5,410001 1033 | 2630,8,5,315005 1034 | 1656,8,5,249704 1035 | 1502,8,5,212005 1036 | 2287,7,4,225005 1037 | 980,5,6,135002 1038 | 1228,8,5,189002 1039 | 848,6,5,136503 1040 | 1721,5,6,180005 1041 | 1096,6,5,79004 1042 | 720,6,8,105902 1043 | 1116,6,6,160004 1044 | 1525,7,5,235004 1045 | 2290,4,6,122503 1046 | 2730,7,5,301005 1047 | 1710,7,6,140005 1048 | 1212,6,7,151001 1049 | 1836,8,5,280003 1050 | 1383,6,5,145254 1051 | 2062,7,5,277002 1052 | 1268,5,7,133005 1053 | 1472,7,5,160003 1054 | 1034,6,5,169904 1055 | 1220,4,5,102001 1056 | 1432,5,7,132004 1057 | 1564,7,7,174501 1058 | 1991,6,7,220001 1059 | 2097,8,5,423002 1060 | 1048,5,5,135004 1061 | 1800,8,5,312501 1062 | 1440,5,4,79001 1063 | 1601,8,5,272005 1064 | 2376,8,5,325303 1065 | 943,5,5,135962 1066 | 1376,5,5,105003 1067 | 2028,8,5,369901 1068 | 2149,7,5,239690 1069 | 2324,9,5,345004 1070 | 1752,9,5,319901 1071 | 2002,5,6,145002 1072 | 1928,5,8,160005 1073 | 1225,4,5,128953 1074 | 1626,7,5,154004 1075 | 1482,6,8,140001 1076 | 1709,6,5,130003 1077 | 1971,7,5,253005 1078 | 1718,8,5,297002 1079 | 1134,5,7,135004 1080 | 1092,6,7,145002 1081 | 1050,5,6,136504 1082 | 1494,6,7,177502 1083 | 2696,7,5,383971 1084 | 923,6,5,143001 1085 | 1369,6,6,103602 1086 | 1964,7,6,205001 1087 | 1247,8,5,197005 1088 | 1846,6,6,143001 1089 | 2236,7,5,222005 1090 | 3086,5,6,200504 1091 | 1224,4,5,101804 1092 | 1086,5,5,159953 1093 | 1761,7,6,227877 1094 | 999,5,5,134501 1095 | 747,4,6,80001 1096 | 1654,7,5,230001 1097 | 1774,4,2,87005 1098 | 2554,7,8,159503 1099 | 2337,5,5,90001 1100 | 902,5,6,125501 1101 | 1787,8,5,275005 1102 | 1501,7,5,204002 1103 | 1264,5,5,167504 1104 | 1003,6,6,142504 1105 | 1040,4,5,132254 1106 | 1679,6,5,193502 1107 | 2161,8,5,325627 1108 | 2035,7,5,222502 1109 | 1241,7,5,199904 1110 | 4676,10,5,184752 1111 | 1126,5,5,160003 1112 | 1524,7,6,260001 1113 | 1458,6,5,97501 1114 | 1188,5,5,142003 1115 | 971,5,6,128504 1116 | 892,5,5,100003 1117 | 1324,6,5,160001 1118 | 1196,4,7,109905 1119 | 2291,7,5,230003 1120 | 2822,9,5,582935 1121 | 1236,5,6,134451 1122 | 1829,7,6,237005 1123 | 1271,5,5,135004 1124 | 1506,9,5,264136 1125 | 2230,4,5,118503 1126 | 1920,7,6,170002 1127 | 2078,8,5,339755 1128 | 1981,4,3,135001 1129 | 1235,5,3,98603 1130 | 754,6,8,84504 1131 | 864,5,7,127004 1132 | 1364,7,5,185854 1133 | 1738,4,4,104903 1134 | 1456,7,5,179541 1135 | 1077,5,6,118005 1136 | 2392,10,5,386252 1137 | 1308,5,7,160002 1138 | 1344,5,5,98003 1139 | 848,6,5,149305 1140 | 2274,5,5,154302 1141 | 2473,8,5,317003 1142 | 1430,7,5,187104 1143 | 1687,5,5,160004 1144 | 2018,9,5,378505 1145 | 1661,7,6,212003 1146 | 3112,8,4,235004 1147 | 1367,6,6,127502 1148 | 2192,5,8,179504 1149 | 1196,6,5,139003 1150 | 864,4,5,111255 1151 | 698,5,9,118003 1152 | 901,4,7,107905 1153 | 1252,6,7,235001 1154 | 1848,6,7,207001 1155 | 1625,8,5,235005 1156 | 1970,8,5,281005 1157 | 1689,6,5,127502 1158 | 1509,6,5,175003 1159 | 1689,8,5,271001 1160 | 1166,7,5,190004 1161 | 1344,5,7,147001 1162 | 1092,6,5,88004 1163 | 1582,5,5,190003 1164 | 1056,5,7,139402 1165 | 1250,7,5,164701 1166 | 894,5,7,149904 1167 | 987,6,6,106003 1168 | 1982,7,6,228503 1169 | 2036,7,5,375002 1170 | 1258,6,5,105003 1171 | 1094,6,5,155005 1172 | 1350,6,5,168505 1173 | 2794,8,5,403002 1174 | 2217,8,6,268004 1175 | 1063,5,5,128004 1176 | 1244,6,6,150003 1177 | 1419,8,6,392001 1178 | 1675,6,5,181003 1179 | 2007,10,5,310001 1180 | 912,5,8,147002 1181 | 1316,5,7,130002 1182 | 1052,5,5,138504 1183 | 2521,6,4,151401 1184 | 1348,5,8,117005 1185 | 1635,6,8,117005 1186 | 1470,4,6,135002 1187 | 1097,6,5,152002 1188 | 1788,8,5,236501 1189 | 1296,4,5,90003 1190 | 1456,7,5,189003 1191 | 950,5,5,119501 1192 | 1530,7,5,260001 1193 | 2121,9,5,415303 1194 | 2520,8,7,310002 1195 | 1563,8,5,245004 1196 | 2418,7,5,341003 1197 | 780,5,7,124905 1198 | 1959,8,5,270001 1199 | 1704,8,5,306002 1200 | 1392,6,7,161753 1201 | 1472,7,5,187505 1202 | 1710,8,5,372403 1203 | 1728,5,5,188002 1204 | 1120,5,5,147002 1205 | 2515,6,3,200629 1206 | 784,6,3,76001 1207 | 1302,7,5,176487 1208 | 1167,6,6,173004 1209 | 1012,6,5,118401 1210 | 1436,7,5,210001 1211 | 1400,6,7,149505 1212 | 1220,7,5,194005 1213 | 1437,5,6,168005 1214 | 1960,5,5,124505 1215 | 1328,6,5,143003 1216 | 1223,7,5,147403 1217 | 1671,6,5,173002 1218 | 1872,7,5,241502 1219 | 1868,5,7,197504 1220 | 1573,6,5,177503 1221 | 1889,7,4,122002 1222 | 1251,6,6,160002 1223 | 1217,6,6,120003 1224 | 1978,7,5,176002 1225 | 1355,5,7,127504 1226 | 1056,5,6,139005 1227 | 2868,9,5,556586 1228 | 1804,7,5,189001 1229 | 1668,7,5,180002 1230 | 778,5,6,120504 1231 | 1370,7,5,152003 1232 | 1690,7,6,144004 1233 | 1216,6,5,164001 1234 | 1575,6,5,179205 1235 | 1868,6,7,178005 1236 | 1668,6,8,140005 1237 | 904,5,7,109903 1238 | 1253,6,5,157003 1239 | 1362,6,5,194703 1240 | 1743,6,6,175003 1241 | 2704,8,7,345005 1242 | 2084,10,5,385005 1243 | 1511,6,5,185005 1244 | 1352,7,5,208902 1245 | 1947,7,5,254904 1246 | 1603,6,5,175905 1247 | 1744,7,7,194501 1248 | 1456,6,5,163995 1249 | 1820,7,6,184001 1250 | 1358,7,5,224003 1251 | 1792,7,5,231504 1252 | 694,5,6,90354 1253 | 1394,5,5,167505 1254 | 1344,6,6,137504 1255 | 1571,6,7,178003 1256 | 1469,6,7,135005 1257 | 1537,6,9,174002 1258 | 2142,6,6,193502 1259 | 954,5,5,132502 1260 | 1621,7,7,202503 1261 | 1586,6,5,181004 1262 | 1536,7,5,214001 1263 | 912,6,6,156002 1264 | 894,5,7,130003 1265 | 1412,6,5,175003 1266 | 1709,9,5,328903 1267 | 2364,9,5,611658 1268 | 1720,7,5,196504 1269 | 840,5,7,87002 1270 | 1040,5,8,127005 1271 | 1664,6,7,159002 1272 | 1652,8,5,251003 1273 | 1548,6,6,155002 1274 | 1665,8,6,227005 1275 | 1905,9,5,320001 1276 | 1712,5,5,145003 1277 | 1385,5,4,166002 1278 | 1498,6,5,187501 1279 | 958,6,8,151503 1280 | 1922,7,5,198501 1281 | 1629,8,5,270003 1282 | 1112,5,3,85001 1283 | 1148,5,5,132504 1284 | 720,3,6,72505 1285 | 948,4,6,119005 1286 | 1482,7,9,143002 1287 | 1253,7,5,176002 1288 | 1279,6,6,171501 1289 | 2094,7,5,263005 1290 | 1680,7,5,213253 1291 | 729,3,6,52005 1292 | 1936,8,5,230503 1293 | 1200,5,6,130505 1294 | 3395,6,7,200001 1295 | 2210,6,4,117503 1296 | 1350,6,5,165005 1297 | 1111,7,7,116903 1298 | 1552,7,5,212904 1299 | 1790,6,5,165155 1300 | 894,5,5,109501 1301 | 2574,8,5,276005 1302 | 3279,8,5,538002 1303 | 1306,5,7,153004 1304 | 912,5,5,115005 1305 | 720,4,5,34905 1306 | 2668,9,5,412503 1307 | 1285,5,5,127003 1308 | 2392,8,5,348003 1309 | 630,4,8,86003 1310 | 1826,7,8,155001 1311 | 1040,3,4,87502 1312 | 1392,7,5,146003 1313 | 864,6,6,120002 1314 | 1838,9,5,315005 1315 | 2136,5,3,137904 1316 | 1473,5,8,143004 1317 | 2524,8,5,278005 1318 | 1217,7,5,173004 1319 | 832,6,6,105504 1320 | 1717,7,5,140005 1321 | 1048,5,5,98303 1322 | 1803,5,4,155003 1323 | 1054,6,7,137503 1324 | 2599,9,5,333170 1325 | 804,5,7,119001 1326 | 1204,6,5,162003 1327 | 1442,6,6,157904 1328 | 1164,7,5,140001 1329 | 5642,10,5,160003 1330 | 1452,4,5,113005 1331 | 1504,7,5,203002 1332 | 1114,6,5,155002 1333 | 1266,7,5,176003 1334 | 1513,5,8,137505 1335 | 902,5,5,131002 1336 | 1056,4,4,107004 1337 | 1710,7,5,240005 1338 | 1062,6,5,146802 1339 | 1768,7,7,163004 1340 | 2622,8,5,325002 1341 | 1349,7,5,179001 1342 | 864,4,5,115005 1343 | 1732,6,5,178001 1344 | 2417,8,5,260004 1345 | 1078,5,6,149905 1346 | 833,5,5,112002 1347 | 1535,5,5,118860 1348 | 747,4,5,79905 1349 | 1464,5,6,175003 1350 | 1632,7,5,176503 1351 | 960,4,5,94755 1352 | 1178,5,6,157004 1353 | 874,5,6,130003 1354 | 1428,7,5,182005 1355 | 1440,4,3,150003 1356 | 1752,8,7,164001 1357 | 2156,7,7,262502 1358 | 1192,4,4,135001 1359 | 1630,8,5,295498 1360 | 1370,8,5,202501 1361 | 1262,6,8,181503 1362 | 1125,5,5,155004 1363 | 1725,7,6,197005 1364 | 1923,7,5,190001 1365 | 1572,5,4,186701 1366 | 1077,5,2,67004 1367 | 1022,5,4,85002 1368 | 1090,5,5,157005 1369 | 1786,5,6,228951 1370 | 848,6,5,141004 1371 | 1795,8,5,230001 1372 | 691,5,6,86003 1373 | 1285,6,5,143503 1374 | 1252,6,6,142001 1375 | 796,5,7,85004 1376 | 1072,6,5,148005 1377 | 1434,7,5,189003 1378 | 2073,6,6,210003 1379 | 1471,6,5,172505 1380 | 3627,10,5,625005 1381 | 1728,6,5,207503 1382 | 1489,6,7,185751 1383 | 2030,6,6,195005 1384 | 1580,8,5,235133 1385 | 1801,8,5,239901 1386 | 1477,7,7,145002 1387 | 1164,5,5,125004 1388 | 1640,6,5,173002 1389 | 1797,7,5,213501 1390 | 1682,6,5,200504 1391 | 1812,5,5,169501 1392 | 1110,5,6,165503 1393 | 1779,7,5,197903 1394 | 2514,7,5,250001 1395 | 1412,6,6,132502 1396 | 1576,5,6,149003 1397 | 1367,5,8,119002 1398 | 2110,7,5,244002 1399 | 2069,7,7,242001 1400 | 1414,6,8,176502 1401 | 1416,6,6,179901 1402 | 1950,7,5,239004 1403 | 1578,6,7,133004 1404 | 2224,9,5,350001 1405 | 1686,6,6,207505 1406 | 1040,5,5,152004 1407 | 981,6,5,143253 1408 | 2200,5,7,145905 1409 | 1053,5,7,145504 1410 | 964,5,7,163504 1411 | 864,3,3,67001 1412 | 1441,6,6,148501 1413 | 1824,7,5,302005 1414 | 1362,5,5,143002 1415 | 1624,8,5,262005 1416 | 1962,7,5,239804 1417 | 2263,8,5,258003 1418 | 1646,7,5,164005 1419 | 1283,5,7,140004 1420 | 974,5,5,93503 1421 | 1389,7,8,135005 1422 | 1221,5,7,104902 1423 | 968,4,6,64503 1424 | 1604,5,5,117002 1425 | 990,5,5,145001 1426 | 1386,6,5,158905 1427 | 1208,6,6,165003 1428 | 1851,6,8,187002 1429 | 914,5,5,148005 1430 | 1716,6,6,171005 1431 | 2402,10,5,555001 1432 | 1555,7,5,192501 1433 | 1337,8,5,180004 1434 | 1935,8,5,263440 1435 | 1569,7,5,175905 1436 | 1516,6,6,167003 1437 | 1986,7,6,205005 1438 | 912,5,7,120002 1439 | 864,5,8,136505 1440 | 693,4,4,52504 1441 | 1638,6,5,192001 1442 | 1826,8,5,319005 1443 | 1920,5,5,172505 1444 | 1617,6,5,193003 1445 | 1218,6,5,208305 1446 | 1396,6,7,153577 1447 | 1949,7,5,236001 1448 | 2531,8,5,290005 1449 | 1733,7,5,225002 1450 | 1953,8,5,252005 1451 | 1659,8,5,278002 1452 | 1920,5,5,137003 1453 | 2654,6,7,250002 1454 | 999,5,7,132504 1455 | 1520,6,6,153005 1456 | 1611,6,6,167901 1457 | 1121,4,5,140001 1458 | 1657,6,3,163503 1459 | 1652,8,5,392501 1460 | 1096,5,5,138805 1461 | 1593,6,5,193005 1462 | -------------------------------------------------------------------------------- /第1课_机器学习入门基础/直播带货.py: -------------------------------------------------------------------------------- 1 | # 导入最基本的数据处理工具 2 | import pandas as pd # 导入Pandas数据处理工具包 3 | df_ads = pd.read_csv('微信打赏.csv') # 读入数据 4 | df_ads.head(10) # 显示前几行数据 5 | X = df_ads.drop(['打赏金'],axis=1) # 特征集,Drop掉便签相关字段 6 | y = df_ads.打赏金 # 标签集 7 | X.head() # 显示前几行数据 8 | # 将数据集进行80%(训练集)和20%(验证集)的分割 9 | from sklearn.model_selection import train_test_split 10 | X_train, X_test, y_train, y_test = train_test_split(X, y, 11 | test_size=0.2, random_state=0) 12 | from sklearn.linear_model import LinearRegression # 导入线性回归算法模型 13 | model = LinearRegression() # 使用线性回归算法创建模型 14 | model.fit(X_train, y_train) # 用训练集数据,训练机器,拟合函数,确定参数 15 | y_pred = model.predict(X_test) #预测测试集的Y值 16 | df_ads_pred = X_test.copy() #测试集特征数据 17 | df_ads_pred['打赏金额真值'] = y_test #测试集标签真值 18 | df_ads_pred['打赏金额预测值'] = y_pred #测试集标签预测值 19 | df_ads_pred #显示数据 -------------------------------------------------------------------------------- /第3课_回归算法与生命周期价值预测/回归算法预测LTV.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": { 5 | "image.png": { 6 | "image/png": "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" 7 | } 8 | }, 9 | "cell_type": "markdown", 10 | "id": "d66888ae", 11 | "metadata": {}, 12 | "source": [ 13 | "## 回归分析\n", 14 | "最基本的回归分析方法是线性回归(linear regression),它是通过线性函数对变量间定量关系进行统计分析。比如广告的投入金额与获客数量,就可能呈现出线性关系\n", 15 | "\n", 16 | "![image.png](attachment:image.png)\n", 17 | "\n", 18 | "
广告投入/新注册用户数
\n" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 1, 24 | "id": "de75f28f", 25 | "metadata": {}, 26 | "outputs": [ 27 | { 28 | "data": { 29 | "text/html": [ 30 | "
\n", 31 | "\n", 44 | "\n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | "
订单号产品码消费日期产品说明数量单价用户码城市
0536374212586/1/2022 9:09绿联usb分线器 一拖四3210.9515100北京
1536376221146/1/2022 9:32加大男装T恤男大码胖子宽松卡4850.4515291上海
2536376217336/1/2022 9:32唐装男夏季青年棉麻中国风加肥6486.5515291上海
3536378223866/1/2022 9:37越南进口白心火龙果4个装10108.9514688北京
453637885099C6/1/2022 9:37大连美早樱桃400g 果径约26mm10166.9514688北京
...........................
87175581585216846/9/2023 12:31后续产品说明已经脱敏120.8515804深圳
87176581585223986/9/2023 12:31后续产品说明已经脱敏120.3915804深圳
87177581585233286/9/2023 12:31后续产品说明已经脱敏43.7515804深圳
87178581585231456/9/2023 12:31后续产品说明已经脱敏120.9515804深圳
87179581585224666/9/2023 12:31后续产品说明已经脱敏121.9515804深圳
\n", 182 | "

87180 rows × 8 columns

\n", 183 | "
" 184 | ], 185 | "text/plain": [ 186 | " 订单号 产品码 消费日期 产品说明 数量 单价 用户码 \\\n", 187 | "0 536374 21258 6/1/2022 9:09 绿联usb分线器 一拖四 32 10.95 15100 \n", 188 | "1 536376 22114 6/1/2022 9:32 加大男装T恤男大码胖子宽松卡 48 50.45 15291 \n", 189 | "2 536376 21733 6/1/2022 9:32 唐装男夏季青年棉麻中国风加肥 64 86.55 15291 \n", 190 | "3 536378 22386 6/1/2022 9:37 越南进口白心火龙果4个装 10 108.95 14688 \n", 191 | "4 536378 85099C 6/1/2022 9:37 大连美早樱桃400g 果径约26mm 10 166.95 14688 \n", 192 | "... ... ... ... ... .. ... ... \n", 193 | "87175 581585 21684 6/9/2023 12:31 后续产品说明已经脱敏 12 0.85 15804 \n", 194 | "87176 581585 22398 6/9/2023 12:31 后续产品说明已经脱敏 12 0.39 15804 \n", 195 | "87177 581585 23328 6/9/2023 12:31 后续产品说明已经脱敏 4 3.75 15804 \n", 196 | "87178 581585 23145 6/9/2023 12:31 后续产品说明已经脱敏 12 0.95 15804 \n", 197 | "87179 581585 22466 6/9/2023 12:31 后续产品说明已经脱敏 12 1.95 15804 \n", 198 | "\n", 199 | " 城市 \n", 200 | "0 北京 \n", 201 | "1 上海 \n", 202 | "2 上海 \n", 203 | "3 北京 \n", 204 | "4 北京 \n", 205 | "... .. \n", 206 | "87175 深圳 \n", 207 | "87176 深圳 \n", 208 | "87177 深圳 \n", 209 | "87178 深圳 \n", 210 | "87179 深圳 \n", 211 | "\n", 212 | "[87180 rows x 8 columns]" 213 | ] 214 | }, 215 | "execution_count": 1, 216 | "metadata": {}, 217 | "output_type": "execute_result" 218 | } 219 | ], 220 | "source": [ 221 | "import numpy as np # 导入NumPy\n", 222 | "import pandas as pd # 导入Pandas\n", 223 | "df_sales = pd.read_csv('电商历史订单.csv') # 导入数据集\n", 224 | "df_sales # 输出数据" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": 2, 230 | "id": "02721dbd", 231 | "metadata": {}, 232 | "outputs": [], 233 | "source": [ 234 | "df_sales['总价'] = df_sales['数量'] * df_sales['单价'] # 计算每单的总价" 235 | ] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "execution_count": 3, 240 | "id": "2b383ea7", 241 | "metadata": {}, 242 | "outputs": [ 243 | { 244 | "name": "stdout", 245 | "output_type": "stream", 246 | "text": [ 247 | "日期范围: 1/1/2023 10:11 ~ 9/9/2022 9:20\n" 248 | ] 249 | } 250 | ], 251 | "source": [ 252 | "print('日期范围: %s ~ %s' % (df_sales['消费日期'].min(), df_sales['消费日期'].max())) # 输出日期范围(格式转换前)" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 4, 258 | "id": "67ee71c5", 259 | "metadata": {}, 260 | "outputs": [ 261 | { 262 | "name": "stdout", 263 | "output_type": "stream", 264 | "text": [ 265 | "日期范围: 2022-06-01 09:09:00 ~ 2023-06-09 12:31:00\n" 266 | ] 267 | } 268 | ], 269 | "source": [ 270 | "df_sales['消费日期'] = pd.to_datetime(df_sales['消费日期']) # 转换日期格式\n", 271 | "print('日期范围: %s ~ %s' % (df_sales['消费日期'].min(), df_sales['消费日期'].max()))# 输出日期范围" 272 | ] 273 | }, 274 | { 275 | "cell_type": "code", 276 | "execution_count": 5, 277 | "id": "a8d4dc67", 278 | "metadata": {}, 279 | "outputs": [ 280 | { 281 | "data": { 282 | "text/html": [ 283 | "
\n", 284 | "\n", 297 | "\n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | "
订单号产品码消费日期产品说明数量单价用户码城市总价
0536374212582022-06-01 09:09:00绿联usb分线器 一拖四3210.9515100北京350.4
1536376221142022-06-01 09:32:00加大男装T恤男大码胖子宽松卡4850.4515291上海2421.6
2536376217332022-06-01 09:32:00唐装男夏季青年棉麻中国风加肥6486.5515291上海5539.2
3536378223862022-06-01 09:37:00越南进口白心火龙果4个装10108.9514688北京1089.5
453637885099C2022-06-01 09:37:00大连美早樱桃400g 果径约26mm10166.9514688北京1669.5
..............................
14837545190229372022-08-29 15:32:00后续产品说明已经脱敏62.5015656苏州15.0
14838545190227222022-08-29 15:32:00后续产品说明已经脱敏403.0015656苏州120.0
14839545190224572022-08-29 15:32:00后续产品说明已经脱敏65.0015656苏州30.0
14840545190224642022-08-29 15:32:00后续产品说明已经脱敏123.0015656苏州36.0
14841545190224232022-08-29 15:32:00后续产品说明已经脱敏122.5015656苏州22.5
\n", 447 | "

14842 rows × 9 columns

\n", 448 | "
" 449 | ], 450 | "text/plain": [ 451 | " 订单号 产品码 消费日期 产品说明 数量 单价 \\\n", 452 | "0 536374 21258 2022-06-01 09:09:00 绿联usb分线器 一拖四 32 10.95 \n", 453 | "1 536376 22114 2022-06-01 09:32:00 加大男装T恤男大码胖子宽松卡 48 50.45 \n", 454 | "2 536376 21733 2022-06-01 09:32:00 唐装男夏季青年棉麻中国风加肥 64 86.55 \n", 455 | "3 536378 22386 2022-06-01 09:37:00 越南进口白心火龙果4个装 10 108.95 \n", 456 | "4 536378 85099C 2022-06-01 09:37:00 大连美早樱桃400g 果径约26mm 10 166.95 \n", 457 | "... ... ... ... ... .. ... \n", 458 | "14837 545190 22937 2022-08-29 15:32:00 后续产品说明已经脱敏 6 2.50 \n", 459 | "14838 545190 22722 2022-08-29 15:32:00 后续产品说明已经脱敏 40 3.00 \n", 460 | "14839 545190 22457 2022-08-29 15:32:00 后续产品说明已经脱敏 6 5.00 \n", 461 | "14840 545190 22464 2022-08-29 15:32:00 后续产品说明已经脱敏 12 3.00 \n", 462 | "14841 545190 22423 2022-08-29 15:32:00 后续产品说明已经脱敏 1 22.50 \n", 463 | "\n", 464 | " 用户码 城市 总价 \n", 465 | "0 15100 北京 350.4 \n", 466 | "1 15291 上海 2421.6 \n", 467 | "2 15291 上海 5539.2 \n", 468 | "3 14688 北京 1089.5 \n", 469 | "4 14688 北京 1669.5 \n", 470 | "... ... .. ... \n", 471 | "14837 15656 苏州 15.0 \n", 472 | "14838 15656 苏州 120.0 \n", 473 | "14839 15656 苏州 30.0 \n", 474 | "14840 15656 苏州 36.0 \n", 475 | "14841 15656 苏州 22.5 \n", 476 | "\n", 477 | "[14842 rows x 9 columns]" 478 | ] 479 | }, 480 | "execution_count": 5, 481 | "metadata": {}, 482 | "output_type": "execute_result" 483 | } 484 | ], 485 | "source": [ 486 | "df_sales_3m = df_sales[(df_sales. 消费日期 > '2022-06-01') & (df_sales. 消费日期 <= '2022-08-30')] # 构建仅含前3 个月数据的数据集\n", 487 | "df_sales_3m.reset_index(drop=True) # 重置索引" 488 | ] 489 | }, 490 | { 491 | "cell_type": "code", 492 | "execution_count": 6, 493 | "id": "5a0ebe72", 494 | "metadata": {}, 495 | "outputs": [ 496 | { 497 | "data": { 498 | "text/html": [ 499 | "
\n", 500 | "\n", 513 | "\n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | "
用户码
015100
115291
214688
315311
415862
......
36515951
36614745
36715724
36815874
36915656
\n", 567 | "

370 rows × 1 columns

\n", 568 | "
" 569 | ], 570 | "text/plain": [ 571 | " 用户码\n", 572 | "0 15100\n", 573 | "1 15291\n", 574 | "2 14688\n", 575 | "3 15311\n", 576 | "4 15862\n", 577 | ".. ...\n", 578 | "365 15951\n", 579 | "366 14745\n", 580 | "367 15724\n", 581 | "368 15874\n", 582 | "369 15656\n", 583 | "\n", 584 | "[370 rows x 1 columns]" 585 | ] 586 | }, 587 | "execution_count": 6, 588 | "metadata": {}, 589 | "output_type": "execute_result" 590 | } 591 | ], 592 | "source": [ 593 | "df_user_LTV = pd.DataFrame(df_sales_3m['用户码'].unique()) # 生成以“用户码”为主键的对象\n", 594 | "df_user_LTV.columns = ['用户码'] # 设定字段名\n", 595 | "df_user_LTV # 输出数据" 596 | ] 597 | }, 598 | { 599 | "cell_type": "code", 600 | "execution_count": 7, 601 | "id": "5f54cefe", 602 | "metadata": {}, 603 | "outputs": [], 604 | "source": [ 605 | "df_R_value = df_sales_3m.groupby('用户码'). 消费日期.max().reset_index() # 找到每个用户的最近消费日期,构建df_R_value 对象\n", 606 | "df_R_value.columns = ['用户码','最近购买日期'] # 设定字段名\n", 607 | "df_R_value['R值'] = (df_R_value['最近购买日期'].max() - df_R_value['最近购买日期']).dt.days # 计算最新日期与上次消费日期间的天数\n", 608 | "df_user_LTV = pd.merge(df_user_LTV, df_R_value[['用户码','R值']], on='用户码') # 把上次消费日期距最新日期的天数(R 值)整合至df_user 对象中" 609 | ] 610 | }, 611 | { 612 | "cell_type": "code", 613 | "execution_count": 8, 614 | "id": "0f6efd0c", 615 | "metadata": {}, 616 | "outputs": [], 617 | "source": [ 618 | "df_F_value = df_sales_3m.groupby('用户码'). 消费日期.count().reset_index() # 计算每个用户的消费次数,构建df_F_value 对象\n", 619 | "df_F_value.columns = ['用户码','F值'] # 设定字段名\n", 620 | "df_user_LTV = pd.merge(df_user_LTV, df_F_value[['用户码','F值']], on='用户码') # 把消费频率(F 值)整合至df_user 对象中" 621 | ] 622 | }, 623 | { 624 | "cell_type": "code", 625 | "execution_count": 9, 626 | "id": "52245fbe", 627 | "metadata": {}, 628 | "outputs": [], 629 | "source": [ 630 | "df_M_value = df_sales_3m.groupby('用户码').总价.sum().reset_index() # 计算每个用户前3 个月的消费总额,构建df_M_value 对象\n", 631 | "df_M_value.columns = ['用户码','M值'] # 设定字段名\n", 632 | "df_user_LTV = pd.merge(df_user_LTV, df_M_value, on='用户码') # 把消费总额(M 值)整合至df_user对象中" 633 | ] 634 | }, 635 | { 636 | "cell_type": "code", 637 | "execution_count": 10, 638 | "id": "6a044394", 639 | "metadata": {}, 640 | "outputs": [ 641 | { 642 | "data": { 643 | "text/html": [ 644 | "
\n", 645 | "\n", 658 | "\n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | "
用户码R值F值M值
015100457985.50
115291353716922.75
21468868814700.78
315311571712734.66
41586289591297.71
\n", 706 | "
" 707 | ], 708 | "text/plain": [ 709 | " 用户码 R值 F值 M值\n", 710 | "0 15100 45 7 985.50\n", 711 | "1 15291 35 37 16922.75\n", 712 | "2 14688 6 88 14700.78\n", 713 | "3 15311 5 717 12734.66\n", 714 | "4 15862 89 59 1297.71" 715 | ] 716 | }, 717 | "execution_count": 10, 718 | "metadata": {}, 719 | "output_type": "execute_result" 720 | } 721 | ], 722 | "source": [ 723 | "df_user_LTV.head() # 输出df_user_LTV 的前几行数据" 724 | ] 725 | }, 726 | { 727 | "cell_type": "code", 728 | "execution_count": 11, 729 | "id": "a415558b", 730 | "metadata": {}, 731 | "outputs": [ 732 | { 733 | "data": { 734 | "text/html": [ 735 | "
\n", 736 | "\n", 749 | "\n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | "
用户码年度LTV
014681498.95
11468252.00
2146841236.28
314687628.38
41468818335.88
\n", 785 | "
" 786 | ], 787 | "text/plain": [ 788 | " 用户码 年度LTV\n", 789 | "0 14681 498.95\n", 790 | "1 14682 52.00\n", 791 | "2 14684 1236.28\n", 792 | "3 14687 628.38\n", 793 | "4 14688 18335.88" 794 | ] 795 | }, 796 | "execution_count": 11, 797 | "metadata": {}, 798 | "output_type": "execute_result" 799 | } 800 | ], 801 | "source": [ 802 | "df_user_1y = df_sales.groupby('用户码')['总价'].sum().reset_index() # 计算每个用户的整年消费总额,构建df_user_1y 对象\n", 803 | "df_user_1y.columns = ['用户码','年度LTV'] # 设定字段名\n", 804 | "df_user_1y.head() # 输出前几行数据" 805 | ] 806 | }, 807 | { 808 | "cell_type": "code", 809 | "execution_count": 12, 810 | "id": "b6d57352", 811 | "metadata": {}, 812 | "outputs": [ 813 | { 814 | "data": { 815 | "text/html": [ 816 | "
\n", 817 | "\n", 830 | "\n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | "
用户码R值F值M值年度LTV
015100457985.50985.50
115291353716922.7520189.31
21468868814700.7818335.88
315311571712734.6659423.99
41586289591297.711776.36
..................
36515951122375.17669.57
3661474517240.601167.16
3671572405103.65212.30
3681587405584.354330.67
36915656015385.10890.65
\n", 932 | "

370 rows × 5 columns

\n", 933 | "
" 934 | ], 935 | "text/plain": [ 936 | " 用户码 R值 F值 M值 年度LTV\n", 937 | "0 15100 45 7 985.50 985.50\n", 938 | "1 15291 35 37 16922.75 20189.31\n", 939 | "2 14688 6 88 14700.78 18335.88\n", 940 | "3 15311 5 717 12734.66 59423.99\n", 941 | "4 15862 89 59 1297.71 1776.36\n", 942 | ".. ... .. ... ... ...\n", 943 | "365 15951 1 22 375.17 669.57\n", 944 | "366 14745 1 7 240.60 1167.16\n", 945 | "367 15724 0 5 103.65 212.30\n", 946 | "368 15874 0 5 584.35 4330.67\n", 947 | "369 15656 0 15 385.10 890.65\n", 948 | "\n", 949 | "[370 rows x 5 columns]" 950 | ] 951 | }, 952 | "execution_count": 12, 953 | "metadata": {}, 954 | "output_type": "execute_result" 955 | } 956 | ], 957 | "source": [ 958 | "df_LTV = pd.merge(df_user_LTV, df_user_1y, on='用户码', how='left') # 计算整体LTV,训练数据集\n", 959 | "df_LTV # 输出df_LTV" 960 | ] 961 | }, 962 | { 963 | "cell_type": "code", 964 | "execution_count": 13, 965 | "id": "803f9f2a", 966 | "metadata": {}, 967 | "outputs": [ 968 | { 969 | "data": { 970 | "text/html": [ 971 | "
\n", 972 | "\n", 985 | "\n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | "
R值F值M值
0457985.50
1353716922.75
268814700.78
3571712734.66
489591297.71
\n", 1027 | "
" 1028 | ], 1029 | "text/plain": [ 1030 | " R值 F值 M值\n", 1031 | "0 45 7 985.50\n", 1032 | "1 35 37 16922.75\n", 1033 | "2 6 88 14700.78\n", 1034 | "3 5 717 12734.66\n", 1035 | "4 89 59 1297.71" 1036 | ] 1037 | }, 1038 | "execution_count": 13, 1039 | "metadata": {}, 1040 | "output_type": "execute_result" 1041 | } 1042 | ], 1043 | "source": [ 1044 | "X = df_LTV.drop(['用户码','年度LTV'],axis=1) # 特征集\n", 1045 | "X.head() # 输出特征集" 1046 | ] 1047 | }, 1048 | { 1049 | "cell_type": "code", 1050 | "execution_count": 14, 1051 | "id": "6390c4f1", 1052 | "metadata": {}, 1053 | "outputs": [ 1054 | { 1055 | "data": { 1056 | "text/plain": [ 1057 | "0 985.50\n", 1058 | "1 20189.31\n", 1059 | "2 18335.88\n", 1060 | "3 59423.99\n", 1061 | "4 1776.36\n", 1062 | "Name: 年度LTV, dtype: float64" 1063 | ] 1064 | }, 1065 | "execution_count": 14, 1066 | "metadata": {}, 1067 | "output_type": "execute_result" 1068 | } 1069 | ], 1070 | "source": [ 1071 | "y = df_LTV['年度LTV'] # 标签集\n", 1072 | "y.head() #输出标签集" 1073 | ] 1074 | }, 1075 | { 1076 | "cell_type": "code", 1077 | "execution_count": 15, 1078 | "id": "8d7ec803", 1079 | "metadata": {}, 1080 | "outputs": [], 1081 | "source": [ 1082 | "from sklearn.model_selection import train_test_split #导入train_test_split\n", 1083 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7) #拆分训练集和测试集" 1084 | ] 1085 | }, 1086 | { 1087 | "cell_type": "code", 1088 | "execution_count": 16, 1089 | "id": "bef62963", 1090 | "metadata": {}, 1091 | "outputs": [], 1092 | "source": [ 1093 | "from sklearn.linear_model import LinearRegression #导入线性回归模块\n", 1094 | "model = LinearRegression() #创建线性回归模型" 1095 | ] 1096 | }, 1097 | { 1098 | "cell_type": "code", 1099 | "execution_count": 17, 1100 | "id": "0ba3ad07", 1101 | "metadata": {}, 1102 | "outputs": [ 1103 | { 1104 | "data": { 1105 | "text/html": [ 1106 | "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" 1107 | ], 1108 | "text/plain": [ 1109 | "LinearRegression()" 1110 | ] 1111 | }, 1112 | "execution_count": 17, 1113 | "metadata": {}, 1114 | "output_type": "execute_result" 1115 | } 1116 | ], 1117 | "source": [ 1118 | "model.fit(X_train, y_train) #拟合模型" 1119 | ] 1120 | }, 1121 | { 1122 | "cell_type": "code", 1123 | "execution_count": 25, 1124 | "id": "a352427e", 1125 | "metadata": {}, 1126 | "outputs": [], 1127 | "source": [ 1128 | "y_train_preds = model.predict(X_train) # 用模型预测训练集\n", 1129 | "y_test_preds = model.predict(X_test) # 用模型预测测试集" 1130 | ] 1131 | }, 1132 | { 1133 | "cell_type": "code", 1134 | "execution_count": 20, 1135 | "id": "a2a5cc02", 1136 | "metadata": {}, 1137 | "outputs": [ 1138 | { 1139 | "data": { 1140 | "text/plain": [ 1141 | "R值 83.00\n", 1142 | "F值 64.00\n", 1143 | "M值 521.69\n", 1144 | "Name: 80, dtype: float64" 1145 | ] 1146 | }, 1147 | "execution_count": 20, 1148 | "metadata": {}, 1149 | "output_type": "execute_result" 1150 | } 1151 | ], 1152 | "source": [ 1153 | "X_test.iloc[2] # 随机选择一行数据" 1154 | ] 1155 | }, 1156 | { 1157 | "cell_type": "code", 1158 | "execution_count": 21, 1159 | "id": "051a32b9", 1160 | "metadata": {}, 1161 | "outputs": [ 1162 | { 1163 | "data": { 1164 | "text/plain": [ 1165 | "1376.3506740578225" 1166 | ] 1167 | }, 1168 | "execution_count": 21, 1169 | "metadata": {}, 1170 | "output_type": "execute_result" 1171 | } 1172 | ], 1173 | "source": [ 1174 | "y_test_preds[2] #模型预测值" 1175 | ] 1176 | }, 1177 | { 1178 | "cell_type": "code", 1179 | "execution_count": 22, 1180 | "id": "69770946", 1181 | "metadata": {}, 1182 | "outputs": [ 1183 | { 1184 | "data": { 1185 | "text/plain": [ 1186 | "1384.68" 1187 | ] 1188 | }, 1189 | "execution_count": 22, 1190 | "metadata": {}, 1191 | "output_type": "execute_result" 1192 | } 1193 | ], 1194 | "source": [ 1195 | "y_test.iloc[2] #实际值" 1196 | ] 1197 | }, 1198 | { 1199 | "cell_type": "code", 1200 | "execution_count": 23, 1201 | "id": "a255a83c", 1202 | "metadata": {}, 1203 | "outputs": [ 1204 | { 1205 | "name": "stdout", 1206 | "output_type": "stream", 1207 | "text": [ 1208 | "训练集上的R平方分数: 0.6187\n", 1209 | "测试集上的R平方分数: 0.4778\n" 1210 | ] 1211 | } 1212 | ], 1213 | "source": [ 1214 | "from sklearn.metrics import r2_score, median_absolute_error #导入Sklearn评估模块\n", 1215 | "print('训练集上的R平方分数: %0.4f' % r2_score(y_true=y_train, y_pred=y_train_preds))\n", 1216 | "print('测试集上的R平方分数: %0.4f' % r2_score(y_true=y_test, y_pred=y_test_preds))" 1217 | ] 1218 | }, 1219 | { 1220 | "cell_type": "code", 1221 | "execution_count": 24, 1222 | "id": "b521442e", 1223 | "metadata": {}, 1224 | "outputs": [ 1225 | { 1226 | "data": { 1227 | "text/plain": [ 1228 | "Text(0.5, 1.0, ' 实际值与预测值')" 1229 | ] 1230 | }, 1231 | "execution_count": 24, 1232 | "metadata": {}, 1233 | "output_type": "execute_result" 1234 | }, 1235 | { 1236 | "data": { 1237 | "image/png": "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\n", 1238 | "text/plain": [ 1239 | "
" 1240 | ] 1241 | }, 1242 | "metadata": {}, 1243 | "output_type": "display_data" 1244 | } 1245 | ], 1246 | "source": [ 1247 | "import matplotlib.pyplot as plt # 导入Matplotlib 的pyplot 模块\n", 1248 | "plt.rcParams[\"font.family\"]=['SimHei'] #用来设定字体样式\n", 1249 | "plt.rcParams['font.sans-serif']=['SimHei'] #用来设定无衬线字体样式\n", 1250 | "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n", 1251 | "plt.scatter(y_test, y_test_preds) # 预测值和实际值的散点图\n", 1252 | "plt.plot([0, max(y_test)], [0, max(y_test_preds)], color='gray', lw=1, linestyle='--') # 绘图\n", 1253 | "plt.xlabel(' 实际值') #x 轴\n", 1254 | "plt.ylabel(' 预测值') #y 轴\n", 1255 | "plt.title(' 实际值与预测值') # 标题" 1256 | ] 1257 | }, 1258 | { 1259 | "cell_type": "markdown", 1260 | "id": "e4b8b550", 1261 | "metadata": {}, 1262 | "source": [ 1263 | "**就到这里!下面请大家自行研习更多算法,并加以比较**\n", 1264 | "\n", 1265 | "scikit-learn中可应用于解决回归问题的算法很多,并不仅限于线性回归。就本例而言,大家还可以尝试使用SVM、决策树、集成学习等模型。" 1266 | ] 1267 | } 1268 | ], 1269 | "metadata": { 1270 | "kernelspec": { 1271 | "display_name": "Python 3 (ipykernel)", 1272 | "language": "python", 1273 | "name": "python3" 1274 | }, 1275 | "language_info": { 1276 | "codemirror_mode": { 1277 | "name": "ipython", 1278 | "version": 3 1279 | }, 1280 | "file_extension": ".py", 1281 | "mimetype": "text/x-python", 1282 | "name": "python", 1283 | "nbconvert_exporter": "python", 1284 | "pygments_lexer": "ipython3", 1285 | "version": "3.10.11" 1286 | } 1287 | }, 1288 | "nbformat": 4, 1289 | "nbformat_minor": 5 1290 | } 1291 | -------------------------------------------------------------------------------- /第6课_降维算法在商品分析中的应用/品类降维.csv: -------------------------------------------------------------------------------- 1 | 序号,商品,销售增长率,市场占有率,渠道成熟度,用户好评度,品类 2 | 1,黑枸杞粉,7,3.2,4.7,1.4,2 3 | 2,舒缓眼膜,6.3,3.3,4.7,1.6,2 4 | 3,玫瑰香皂,6.5,2.8,4.6,1.5,2 5 | 4,原汁葡萄汁1升,5,3.4,1.5,0.2,1 6 | 5,薰衣草香皂,5.2,2.7,3.9,1.4,2 7 | 6,小型扫描仪,7.3,2.9,6.3,1.8,3 8 | 7,金奇异果5盒装,5.4,3.9,1.7,0.4,1 9 | 8,枸杞红枣粉,5.7,2.8,4.5,1.3,2 10 | 9,纯净苹果汁1升,4.7,3.2,1.3,0.2,1 11 | 10,触控数位板,7.6,3,6.6,2.1,3 12 | 11,金属文件夹,7.1,3,5.9,2.1,3 13 | 12,黄皮梨6个,4.4,2.9,1.4,0.2,1 14 | 13,软垫鼠标垫,6.7,2.5,5.8,1.8,3 15 | 14,红宝石蓝莓1袋,4.9,3.1,1.5,0.1,1 16 | 15,原味香蕉1袋,5,3.6,1.4,0.2,1 17 | 16,透明文件袋,6.5,3,5.8,2.2,3 18 | 17,乳木果护发素,5.5,2.3,4,1.3,2 19 | 18,极品草莓酸奶1.5升,4.6,3.4,1.4,0.3,1 20 | 19,4K超高清显示器,4.9,2.5,4.5,1.7,3 21 | 20,护眼桌面灯,6.3,3.3,6,2.5,3 22 | 21,植物精油牙膏,4.9,2.4,3.3,1,2 23 | 22,电动升降桌,5.8,2.7,5.1,1.9,3 24 | 23,纯天然酸奶1.5升,4.9,3,1.4,0.2,1 25 | 24,无线蓝牙耳机,6.3,2.9,5.6,1.8,3 26 | 25,抗过敏眼药水,6.4,3.2,4.5,1.5,2 27 | 26,竹炭牙膏,6.9,3.1,4.9,1.5,2 28 | 27,紫皮火龙果5盒装,5.1,3.5,1.4,0.2,1 29 | 28,洋甘菊护发素,6.6,2.9,4.6,1.3,2 30 | 29,原子笔套装,7.2,3.6,6.1,2.5,3 31 | 30,香甜红苹果6个,4.6,3.1,1.5,0.2,1 32 | -------------------------------------------------------------------------------- /第7课_深度学习初探图像识别与时序预测/AppRNN.csv: -------------------------------------------------------------------------------- 1 | Date,Activation 2 | 1/1/2019,419 3 | 1/2/2019,432 4 | 1/3/2019,436 5 | 1/4/2019,439 6 | 1/5/2019,439 7 | 1/6/2019,435 8 | 1/7/2019,423 9 | 1/8/2019,428 10 | 1/9/2019,421 11 | 1/10/2019,418 12 | 1/11/2019,423 13 | 1/12/2019,424 14 | 1/13/2019,431 15 | 1/14/2019,449 16 | 1/15/2019,442 17 | 1/16/2019,449 18 | 1/17/2019,459 19 | 1/18/2019,464 20 | 1/19/2019,468 21 | 1/20/2019,461 22 | 1/21/2019,453 23 | 1/22/2019,455 24 | 1/23/2019,469 25 | 1/24/2019,461 26 | 1/25/2019,463 27 | 1/26/2019,480 28 | 1/27/2019,478 29 | 1/28/2019,467 30 | 1/29/2019,472 31 | 1/30/2019,474 32 | 1/31/2019,459 33 | 2/1/2019,456 34 | 2/2/2019,455 35 | 2/3/2019,440 36 | 2/4/2019,447 37 | 2/5/2019,423 38 | 2/6/2019,430 39 | 2/7/2019,434 40 | 2/8/2019,441 41 | 2/9/2019,456 42 | 2/10/2019,451 43 | 2/11/2019,445 44 | 2/12/2019,441 45 | 2/13/2019,437 46 | 2/14/2019,424 47 | 2/15/2019,426 48 | 2/16/2019,438 49 | 2/17/2019,443 50 | 2/18/2019,452 51 | 2/19/2019,458 52 | 2/20/2019,456 53 | 2/21/2019,447 54 | 2/22/2019,464 55 | 2/23/2019,466 56 | 2/24/2019,469 57 | 2/25/2019,488 58 | 2/26/2019,492 59 | 2/27/2019,492 60 | 2/28/2019,480 61 | 3/1/2019,460 62 | 3/2/2019,475 63 | 3/3/2019,481 64 | 3/4/2019,496 65 | 3/5/2019,499 66 | 3/6/2019,505 67 | 3/7/2019,501 68 | 3/8/2019,497 69 | 3/9/2019,510 70 | 3/10/2019,501 71 | 3/11/2019,495 72 | 3/12/2019,491 73 | 3/13/2019,499 74 | 3/14/2019,506 75 | 3/15/2019,501 76 | 3/16/2019,492 77 | 3/17/2019,506 78 | 3/18/2019,513 79 | 3/19/2019,506 80 | 3/20/2019,498 81 | 3/21/2019,497 82 | 3/22/2019,510 83 | 3/23/2019,523 84 | 3/24/2019,519 85 | 3/25/2019,526 86 | 3/26/2019,530 87 | 3/27/2019,526 88 | 3/28/2019,523 89 | 3/29/2019,518 90 | 3/30/2019,505 91 | 3/31/2019,515 92 | 4/1/2019,514 93 | 4/2/2019,509 94 | 4/3/2019,505 95 | 4/4/2019,510 96 | 4/5/2019,522 97 | 4/6/2019,528 98 | 4/7/2019,515 99 | 4/8/2019,513 100 | 4/9/2019,507 101 | 4/10/2019,522 102 | 4/11/2019,517 103 | 4/12/2019,522 104 | 4/13/2019,535 105 | 4/14/2019,538 106 | 4/15/2019,533 107 | 4/16/2019,531 108 | 4/17/2019,537 109 | 4/18/2019,533 110 | 4/19/2019,541 111 | 4/20/2019,546 112 | 4/21/2019,544 113 | 4/22/2019,542 114 | 4/23/2019,538 115 | 4/24/2019,542 116 | 4/25/2019,537 117 | 4/26/2019,535 118 | 4/27/2019,532 119 | 4/28/2019,526 120 | 4/29/2019,524 121 | 4/30/2019,527 122 | 5/1/2019,519 123 | 5/2/2019,533 124 | 5/3/2019,530 125 | 5/4/2019,528 126 | 5/5/2019,525 127 | 5/6/2019,519 128 | 5/7/2019,508 129 | 5/8/2019,507 130 | 5/9/2019,501 131 | 5/10/2019,506 132 | 5/11/2019,505 133 | 5/12/2019,506 134 | 5/13/2019,517 135 | 5/14/2019,524 136 | 5/15/2019,534 137 | 5/16/2019,567 138 | 5/17/2019,573 139 | 5/18/2019,579 140 | 5/19/2019,581 141 | 5/20/2019,575 142 | 5/21/2019,583 143 | 5/22/2019,585 144 | 5/23/2019,583 145 | 5/24/2019,582 146 | 5/25/2019,590 147 | 5/26/2019,588 148 | 5/27/2019,594 149 | 5/28/2019,596 150 | 5/29/2019,593 151 | 5/30/2019,592 152 | 5/31/2019,591 153 | 6/1/2019,591 154 | 6/2/2019,590 155 | 6/3/2019,588 156 | 6/4/2019,596 157 | 6/5/2019,596 158 | 6/6/2019,583 159 | 6/7/2019,584 160 | 6/8/2019,582 161 | 6/9/2019,592 162 | 6/10/2019,598 163 | 6/11/2019,600 164 | 6/12/2019,596 165 | 6/13/2019,593 166 | 6/14/2019,594 167 | 6/15/2019,601 168 | 6/16/2019,586 169 | 6/17/2019,588 170 | 6/18/2019,582 171 | 6/19/2019,583 172 | 6/20/2019,583 173 | 6/21/2019,590 174 | 6/22/2019,585 175 | 6/23/2019,585 176 | 6/24/2019,589 177 | 6/25/2019,585 178 | 6/26/2019,594 179 | 6/27/2019,598 180 | 6/28/2019,606 181 | 6/29/2019,612 182 | 6/30/2019,605 183 | 7/1/2019,610 184 | 7/2/2019,606 185 | 7/3/2019,603 186 | 7/4/2019,601 187 | 7/5/2019,603 188 | 7/6/2019,597 189 | 7/7/2019,596 190 | 7/8/2019,597 191 | 7/9/2019,587 192 | 7/10/2019,595 193 | 7/11/2019,602 194 | 7/12/2019,606 195 | 7/13/2019,613 196 | 7/14/2019,612 197 | 7/15/2019,627 198 | 7/16/2019,631 199 | 7/17/2019,639 200 | 7/18/2019,638 201 | 7/19/2019,616 202 | 7/20/2019,609 203 | 7/21/2019,617 204 | 7/22/2019,611 205 | 7/23/2019,604 206 | 7/24/2019,615 207 | 7/25/2019,603 208 | 7/26/2019,601 209 | 7/27/2019,602 210 | 7/28/2019,611 211 | 7/29/2019,613 212 | 7/30/2019,604 213 | 7/31/2019,598 214 | 8/1/2019,607 215 | 8/2/2019,611 216 | 8/3/2019,613 217 | 8/4/2019,620 218 | 8/5/2019,627 219 | 8/6/2019,633 220 | 8/7/2019,633 221 | 8/8/2019,632 222 | 8/9/2019,636 223 | 8/10/2019,637 224 | 8/11/2019,640 225 | 8/12/2019,636 226 | 8/13/2019,636 227 | 8/14/2019,639 228 | 8/15/2019,640 229 | 8/16/2019,639 230 | 8/17/2019,623 231 | 8/18/2019,626 232 | 8/19/2019,636 233 | 8/20/2019,637 234 | 8/21/2019,638 235 | 8/22/2019,642 236 | 8/23/2019,634 237 | 8/24/2019,635 238 | 8/25/2019,634 239 | 8/26/2019,641 240 | 8/27/2019,645 241 | 8/28/2019,648 242 | 8/29/2019,647 243 | 8/30/2019,644 244 | 8/31/2019,640 245 | 9/1/2019,640 246 | 9/2/2019,639 247 | 9/3/2019,647 248 | 9/4/2019,649 249 | 9/5/2019,649 250 | 9/6/2019,655 251 | 9/7/2019,661 252 | 9/8/2019,656 253 | 9/9/2019,662 254 | 9/10/2019,656 255 | 9/11/2019,658 256 | 9/12/2019,653 257 | 9/13/2019,649 258 | 9/14/2019,645 259 | 9/15/2019,655 260 | 9/16/2019,645 261 | 9/17/2019,652 262 | 9/18/2019,653 263 | 9/19/2019,660 264 | 9/20/2019,658 265 | 9/21/2019,652 266 | 9/22/2019,652 267 | 9/23/2019,643 268 | 9/24/2019,632 269 | 9/25/2019,630 270 | 9/26/2019,629 271 | 9/27/2019,635 272 | 9/28/2019,622 273 | 9/29/2019,616 274 | 9/30/2019,624 275 | 10/1/2019,626 276 | 10/2/2019,626 277 | 10/3/2019,615 278 | 10/4/2019,616 279 | 10/5/2019,613 280 | 10/6/2019,615 281 | 10/7/2019,613 282 | 10/8/2019,615 283 | 10/9/2019,625 284 | 10/10/2019,628 285 | 10/11/2019,631 286 | 10/12/2019,637 287 | 10/13/2019,637 288 | 10/14/2019,632 289 | 10/15/2019,635 290 | 10/16/2019,630 291 | 10/17/2019,635 292 | 10/18/2019,638 293 | 10/19/2019,644 294 | 10/20/2019,639 295 | 10/21/2019,635 296 | 10/22/2019,636 297 | 10/23/2019,635 298 | 10/24/2019,631 299 | 10/25/2019,630 300 | 10/26/2019,629 301 | 10/27/2019,640 302 | 10/28/2019,637 303 | 10/29/2019,640 304 | 10/30/2019,645 305 | 10/31/2019,637 306 | 11/1/2019,644 307 | 11/2/2019,636 308 | 11/3/2019,640 309 | 11/4/2019,643 310 | 11/5/2019,647 311 | 11/6/2019,645 312 | 11/7/2019,647 313 | 11/8/2019,645 314 | 11/9/2019,641 315 | 11/10/2019,645 316 | 11/11/2019,642 317 | 11/12/2019,643 318 | 11/13/2019,643 319 | 11/14/2019,640 320 | 11/15/2019,639 321 | 11/16/2019,643 322 | 11/17/2019,641 323 | 11/18/2019,649 324 | 11/19/2019,653 325 | 11/20/2019,653 326 | 11/21/2019,652 327 | 11/22/2019,646 328 | 11/23/2019,649 329 | 11/24/2019,643 330 | 11/25/2019,645 331 | 11/26/2019,649 332 | 11/27/2019,650 333 | 11/28/2019,647 334 | 11/29/2019,653 335 | 11/30/2019,652 336 | 12/1/2019,647 337 | 12/2/2019,644 338 | 12/3/2019,636 339 | 12/4/2019,631 340 | 12/5/2019,617 341 | 12/6/2019,631 342 | 12/7/2019,626 343 | 12/8/2019,636 344 | 12/9/2019,655 345 | 12/10/2019,655 346 | 12/11/2019,653 347 | 12/12/2019,656 348 | 12/13/2019,647 349 | 12/14/2019,636 350 | 12/15/2019,611 351 | 12/16/2019,626 352 | 12/17/2019,607 353 | 12/18/2019,624 354 | 12/19/2019,625 355 | 12/20/2019,630 356 | 12/21/2019,623 357 | 12/22/2019,624 358 | 12/23/2019,639 359 | 12/24/2019,632 360 | 12/25/2019,628 361 | 12/26/2019,621 362 | 12/27/2019,624 363 | 12/28/2019,630 364 | 12/29/2019,634 365 | 12/30/2019,643 366 | 12/31/2019,645 367 | 1/1/2020,642 368 | 1/2/2020,650 369 | 1/3/2020,655 370 | 1/4/2020,657 371 | 1/5/2020,652 372 | 1/6/2020,646 373 | 1/7/2020,648 374 | 1/8/2020,642 375 | 1/9/2020,638 376 | 1/10/2020,637 377 | 1/11/2020,624 378 | 1/12/2020,618 379 | 1/13/2020,616 380 | 1/14/2020,618 381 | 1/15/2020,617 382 | 1/16/2020,637 383 | 1/17/2020,640 384 | 1/18/2020,637 385 | 1/19/2020,645 386 | 1/20/2020,647 387 | 1/21/2020,649 388 | 1/22/2020,650 389 | 1/23/2020,643 390 | 1/24/2020,615 391 | 1/25/2020,632 392 | 1/26/2020,632 393 | 1/27/2020,637 394 | 1/28/2020,641 395 | 1/29/2020,644 396 | 1/30/2020,643 397 | 1/31/2020,645 398 | 2/1/2020,637 399 | 2/2/2020,646 400 | 2/3/2020,650 401 | 2/4/2020,652 402 | 2/5/2020,654 403 | 2/6/2020,652 404 | 2/7/2020,654 405 | 2/8/2020,656 406 | 2/9/2020,653 407 | 2/10/2020,638 408 | 2/11/2020,640 409 | 2/12/2020,637 410 | 2/13/2020,644 411 | 2/14/2020,644 412 | 2/15/2020,643 413 | 2/16/2020,644 414 | 2/17/2020,638 415 | 2/18/2020,626 416 | 2/19/2020,623 417 | 2/20/2020,629 418 | 2/21/2020,619 419 | 2/22/2020,625 420 | 2/23/2020,617 421 | 2/24/2020,627 422 | 2/25/2020,630 423 | 2/26/2020,631 424 | 2/27/2020,635 425 | 2/28/2020,630 426 | 2/29/2020,636 427 | 3/1/2020,635 428 | 3/2/2020,643 429 | 3/3/2020,642 430 | 3/4/2020,643 431 | 3/5/2020,646 432 | 3/6/2020,650 433 | 3/7/2020,651 434 | 3/8/2020,657 435 | 3/9/2020,658 436 | 3/10/2020,657 437 | 3/11/2020,662 438 | 3/12/2020,668 439 | 3/13/2020,673 440 | 3/14/2020,672 441 | 3/15/2020,678 442 | 3/16/2020,678 443 | 3/17/2020,676 444 | 3/18/2020,681 445 | 3/19/2020,684 446 | 3/20/2020,690 447 | 3/21/2020,692 448 | 3/22/2020,694 449 | 3/23/2020,692 450 | 3/24/2020,700 451 | 3/25/2020,702 452 | 3/26/2020,711 453 | 3/27/2020,705 454 | 3/28/2020,687 455 | 3/29/2020,691 456 | 3/30/2020,699 457 | 3/31/2020,701 458 | 4/1/2020,702 459 | 4/2/2020,696 460 | 4/3/2020,698 461 | 4/4/2020,709 462 | 4/5/2020,705 463 | 4/6/2020,718 464 | 4/7/2020,719 465 | 4/8/2020,721 466 | 4/9/2020,724 467 | 4/10/2020,730 468 | 4/11/2020,727 469 | 4/12/2020,734 470 | 4/13/2020,730 471 | 4/14/2020,724 472 | 4/15/2020,723 473 | 4/16/2020,719 474 | 4/17/2020,715 475 | 4/18/2020,712 476 | 4/19/2020,715 477 | 4/20/2020,722 478 | 4/21/2020,720 479 | 4/22/2020,721 480 | 4/23/2020,720 481 | 4/24/2020,727 482 | 4/25/2020,718 483 | 4/26/2020,711 484 | 4/27/2020,718 485 | 4/28/2020,722 486 | 4/29/2020,721 487 | 4/30/2020,723 488 | 5/1/2020,730 489 | 5/2/2020,722 490 | 5/3/2020,730 491 | 5/4/2020,724 492 | 5/5/2020,726 493 | 5/6/2020,721 494 | 5/7/2020,726 495 | 5/8/2020,724 496 | 5/9/2020,723 497 | 5/10/2020,727 498 | 5/11/2020,725 499 | 5/12/2020,728 500 | 5/13/2020,729 501 | 5/14/2020,726 502 | 5/15/2020,727 503 | 5/16/2020,730 504 | 5/17/2020,732 505 | 5/18/2020,734 506 | 5/19/2020,736 507 | 5/20/2020,738 508 | 5/21/2020,737 509 | 5/22/2020,736 510 | 5/23/2020,744 511 | 5/24/2020,738 512 | 5/25/2020,741 513 | 5/26/2020,740 514 | 5/27/2020,746 515 | 5/28/2020,744 516 | 5/29/2020,749 517 | 5/30/2020,766 518 | 5/31/2020,773 519 | 6/1/2020,782 520 | 6/2/2020,777 521 | 6/3/2020,796 522 | 6/4/2020,808 523 | 6/5/2020,807 524 | 6/6/2020,805 525 | 6/7/2020,796 526 | 6/8/2020,811 527 | 6/9/2020,817 528 | 6/10/2020,816 529 | 6/11/2020,817 530 | 6/12/2020,820 531 | 6/13/2020,824 532 | 6/14/2020,828 533 | 6/15/2020,820 534 | 6/16/2020,820 535 | 6/17/2020,821 536 | 6/18/2020,814 537 | 6/19/2020,817 538 | 6/20/2020,817 539 | 6/21/2020,822 540 | 6/22/2020,818 541 | 6/23/2020,809 542 | 6/24/2020,798 543 | 6/25/2020,805 544 | 6/26/2020,812 545 | 6/27/2020,816 546 | 6/28/2020,797 547 | 6/29/2020,807 548 | 6/30/2020,817 549 | 7/1/2020,808 550 | 7/2/2020,799 551 | 7/3/2020,817 552 | 7/4/2020,823 553 | 7/5/2020,812 554 | 7/6/2020,806 555 | 7/7/2020,787 556 | 7/8/2020,783 557 | 7/9/2020,770 558 | 7/10/2020,783 559 | 7/11/2020,788 560 | 7/12/2020,793 561 | 7/13/2020,790 562 | 7/14/2020,801 563 | 7/15/2020,805 564 | 7/16/2020,808 565 | 7/17/2020,807 566 | 7/18/2020,818 567 | 7/19/2020,817 568 | 7/20/2020,819 569 | 7/21/2020,822 570 | 7/22/2020,819 571 | 7/23/2020,822 572 | 7/24/2020,821 573 | 7/25/2020,822 574 | 7/26/2020,817 575 | 7/27/2020,817 576 | 7/28/2020,820 577 | 7/29/2020,819 578 | 7/30/2020,825 579 | 7/31/2020,823 580 | 8/1/2020,829 581 | 8/2/2020,816 582 | 8/3/2020,828 583 | 8/4/2020,838 584 | 8/5/2020,840 585 | 8/6/2020,843 586 | 8/7/2020,850 587 | 8/8/2020,856 588 | 8/9/2020,861 589 | 8/10/2020,860 590 | 8/11/2020,862 591 | 8/12/2020,852 592 | 8/13/2020,845 593 | 8/14/2020,842 594 | 8/15/2020,846 595 | 8/16/2020,852 596 | 8/17/2020,848 597 | 8/18/2020,859 598 | 8/19/2020,849 599 | 8/20/2020,839 600 | 8/21/2020,851 601 | 8/22/2020,854 602 | 8/23/2020,852 603 | 8/24/2020,843 604 | 8/25/2020,843 605 | 8/26/2020,838 606 | 8/27/2020,837 607 | 8/28/2020,840 608 | 8/29/2020,842 609 | 8/30/2020,845 610 | 8/31/2020,832 611 | 9/1/2020,822 612 | 9/2/2020,824 613 | 9/3/2020,826 614 | 9/4/2020,816 615 | 9/5/2020,825 616 | 9/6/2020,823 617 | 9/7/2020,822 618 | 9/8/2020,819 619 | 9/9/2020,814 620 | 9/10/2020,810 621 | 9/11/2020,821 622 | 9/12/2020,819 623 | 9/13/2020,826 624 | 9/14/2020,828 625 | 9/15/2020,820 626 | 9/16/2020,829 627 | 9/17/2020,829 628 | 9/18/2020,842 629 | 9/19/2020,853 630 | 9/20/2020,856 631 | 9/21/2020,858 632 | 9/22/2020,868 633 | 9/23/2020,876 634 | 9/24/2020,884 635 | 9/25/2020,877 636 | 9/26/2020,875 637 | 9/27/2020,875 638 | 9/28/2020,875 639 | 9/29/2020,872 640 | 9/30/2020,875 641 | 10/1/2020,874 642 | 10/2/2020,894 643 | 10/3/2020,919 644 | 10/4/2020,918 645 | 10/5/2020,923 646 | 10/6/2020,919 647 | 10/7/2020,915 648 | 10/8/2020,910 649 | 10/9/2020,905 650 | 10/10/2020,901 651 | 10/11/2020,913 652 | 10/12/2020,900 653 | 10/13/2020,888 654 | 10/14/2020,883 655 | 10/15/2020,861 656 | 10/16/2020,844 657 | 10/17/2020,837 658 | 10/18/2020,841 659 | 10/19/2020,821 660 | 10/20/2020,843 661 | 10/21/2020,857 662 | 10/22/2020,861 663 | 10/23/2020,858 664 | 10/24/2020,832 665 | 10/25/2020,811 666 | 10/26/2020,807 667 | 10/27/2020,803 668 | 10/28/2020,821 669 | 10/29/2020,838 670 | 10/30/2020,824 671 | 10/31/2020,853 672 | 11/1/2020,860 673 | 11/2/2020,866 674 | 11/3/2020,864 675 | 11/4/2020,838 676 | 11/5/2020,815 677 | 11/6/2020,836 678 | 11/7/2020,835 679 | 11/8/2020,823 680 | 11/9/2020,800 681 | 11/10/2020,818 682 | 11/11/2020,820 683 | 11/12/2020,843 684 | 11/13/2020,857 685 | 11/14/2020,848 686 | 11/15/2020,868 687 | 11/16/2020,875 688 | 11/17/2020,842 689 | 11/18/2020,835 690 | 11/19/2020,855 691 | 11/20/2020,884 692 | 11/21/2020,890 693 | 11/22/2020,898 694 | 11/23/2020,880 695 | 11/24/2020,872 696 | 11/25/2020,858 697 | 11/26/2020,873 698 | 11/27/2020,884 699 | 11/28/2020,912 700 | 11/29/2020,915 701 | 11/30/2020,923 702 | 12/1/2020,930 703 | 12/2/2020,925 704 | 12/3/2020,941 705 | 12/4/2020,949 706 | 12/5/2020,890 707 | 12/6/2020,898 708 | 12/7/2020,891 709 | 12/8/2020,896 710 | 12/9/2020,908 711 | 12/10/2020,908 712 | 12/11/2020,909 713 | 12/12/2020,925 714 | 12/13/2020,928 715 | 12/14/2020,928 716 | 12/15/2020,908 717 | 12/16/2020,920 718 | 12/17/2020,926 719 | 12/18/2020,931 720 | 12/19/2020,931 721 | 12/20/2020,937 722 | 12/21/2020,921 723 | 12/22/2020,918 724 | 12/23/2020,926 725 | 12/24/2020,946 726 | 12/25/2020,937 727 | 12/26/2020,939 728 | 12/27/2020,934 729 | 12/28/2020,934 730 | 12/29/2020,917 731 | 12/30/2020,911 732 | 12/31/2020,903 733 | 1/1/2021,890 734 | 1/2/2021,914 735 | 1/3/2021,910 736 | 1/4/2021,923 737 | 1/5/2021,935 738 | 1/6/2021,950 739 | 1/7/2021,956 740 | 1/8/2021,953 741 | 1/9/2021,960 742 | 1/10/2021,962 743 | 1/11/2021,965 744 | 1/12/2021,968 745 | 1/13/2021,967 746 | 1/14/2021,949 747 | 1/15/2021,952 748 | 1/16/2021,940 749 | 1/17/2021,923 750 | 1/18/2021,928 751 | 1/19/2021,916 752 | 1/20/2021,914 753 | 1/21/2021,916 754 | 1/22/2021,925 755 | 1/23/2021,926 756 | 1/24/2021,920 757 | 1/25/2021,932 758 | -------------------------------------------------------------------------------- /第7课_深度学习初探图像识别与时序预测/CNN_OwnNet_CIFAR10.py: -------------------------------------------------------------------------------- 1 | # 1. 导入所需要的库 2 | import torch 3 | import torch.nn as nn 4 | import torch.optim as optim 5 | import torchvision 6 | import torchvision.transforms as transforms 7 | 8 | 9 | # 2. 下载CIFAR-10数据集 10 | # 设置图像预处理: 图像增强 + 转换为张量 + 标准化 11 | transform = transforms.Compose( 12 | [transforms.RandomHorizontalFlip(), 13 | transforms.RandomCrop(32, padding=4), 14 | transforms.ToTensor(), 15 | transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) 16 | 17 | # 下载训练集和测试集 18 | trainset = torchvision.datasets.CIFAR10(root='CIFAR10', train=True, 19 | download=True, transform=transform) 20 | trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, 21 | shuffle=True, num_workers=2) 22 | 23 | testset = torchvision.datasets.CIFAR10(root='CIFAR10', train=False, 24 | download=True, transform=transform) 25 | testloader = torch.utils.data.DataLoader(testset, batch_size=64, 26 | shuffle=False, num_workers=2) 27 | 28 | # 3. 使用自己的CNN模型作为训练网络 29 | class SimpleCNN(nn.Module): 30 | def __init__(self, num_classes=10): 31 | super(SimpleCNN, self).__init__() 32 | self.features = nn.Sequential( 33 | nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1), 34 | nn.ReLU(inplace=True), 35 | nn.MaxPool2d(kernel_size=2, stride=2), 36 | nn.Conv2d(32, 64, kernel_size=3, padding=1), 37 | nn.ReLU(inplace=True), 38 | nn.MaxPool2d(kernel_size=2, stride=2), 39 | ) 40 | self.classifier = nn.Sequential( 41 | nn.Dropout(), 42 | nn.Linear(64 * 8 * 8, 512), 43 | nn.ReLU(inplace=True), 44 | nn.Linear(512, num_classes), 45 | ) 46 | 47 | def forward(self, x): 48 | x = self.features(x) 49 | x = x.view(x.size(0), -1) 50 | x = self.classifier(x) 51 | return x 52 | model = SimpleCNN(num_classes=10) 53 | 54 | # 4. 从头训练的自己CNN网络 55 | # 定义损失函数和优化器 56 | criterion = nn.CrossEntropyLoss() 57 | optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) 58 | 59 | # 迁移到GPU上(如果有的话) 60 | device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 61 | model.to(device) 62 | 63 | # 训练网络 64 | for epoch in range(10): # 就演示训练10个epochs 65 | 66 | running_loss = 0.0 67 | for i, data in enumerate(trainloader, 0): 68 | # 获取输入数据 69 | inputs, labels = data[0].to(device), data[1].to(device) 70 | 71 | # 清零参数梯度 72 | optimizer.zero_grad() 73 | 74 | # 前向 + 反向 + 优化 75 | outputs = model(inputs) 76 | loss = criterion(outputs, labels) 77 | loss.backward() 78 | optimizer.step() 79 | 80 | running_loss += loss.item() 81 | if i % 200 == 199: # 每200批次打印一次 82 | print('[%d, %5d] loss: %.3f' % 83 | (epoch + 1, i + 1, running_loss / 200)) 84 | running_loss = 0.0 85 | 86 | print('Training Finished') 87 | 88 | # 5. 测试网络性能 89 | correct = 0 90 | total = 0 91 | with torch.no_grad(): 92 | for data in testloader: 93 | images, labels = data[0].to(device), data[1].to(device) 94 | outputs = model(images) 95 | _, predicted = torch.max(outputs.data, 1) 96 | total += labels.size(0) 97 | correct += (predicted == labels).sum().item() 98 | 99 | print('Accuracy of the network on the 10000 test images: %d %%' % ( 100 | 100 * correct / total)) 101 | 102 | -------------------------------------------------------------------------------- /第7课_深度学习初探图像识别与时序预测/CNN_ResNet_CIFAR10.py: -------------------------------------------------------------------------------- 1 | # 1. 导入所需要的库 2 | import torch 3 | import torch.nn as nn 4 | import torch.optim as optim 5 | import torchvision 6 | import torchvision.transforms as transforms 7 | 8 | 9 | # 2. 下载CIFAR-10数据集 10 | # 设置图像预处理: 图像增强 + 转换为张量 + 标准化 11 | transform = transforms.Compose( 12 | [transforms.RandomHorizontalFlip(), 13 | transforms.RandomCrop(32, padding=4), 14 | transforms.ToTensor(), 15 | transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) 16 | 17 | # 下载训练集和测试集 18 | trainset = torchvision.datasets.CIFAR10(root='CIFAR10', train=True, 19 | download=True, transform=transform) 20 | trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, 21 | shuffle=True, num_workers=2) 22 | 23 | testset = torchvision.datasets.CIFAR10(root='CIFAR10', train=False, 24 | download=True, transform=transform) 25 | testloader = torch.utils.data.DataLoader(testset, batch_size=64, 26 | shuffle=False, num_workers=2) 27 | 28 | # 3. 使用ResNet-18作为预训练网络 29 | # 下载预训练的ResNet-18模型 30 | resnet18 = torchvision.models.resnet18(pretrained=True) 31 | 32 | # 由于CIFAR-10有10个类,我们需要调整ResNet的最后一个全连接层 33 | num_classes = 10 34 | resnet18.fc = nn.Linear(resnet18.fc.in_features, num_classes) 35 | 36 | # 4. 微调预训练的CNN网络 37 | # 定义损失函数和优化器 38 | criterion = nn.CrossEntropyLoss() 39 | optimizer = optim.SGD(resnet18.parameters(), lr=0.001, momentum=0.9) 40 | 41 | # 迁移到GPU上(如果有的话) 42 | device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 43 | resnet18.to(device) 44 | 45 | # 训练网络 46 | for epoch in range(10): # 就演示训练10个epochs 47 | 48 | running_loss = 0.0 49 | for i, data in enumerate(trainloader, 0): 50 | # 获取输入数据 51 | inputs, labels = data[0].to(device), data[1].to(device) 52 | 53 | # 清零参数梯度 54 | optimizer.zero_grad() 55 | 56 | # 前向 + 反向 + 优化 57 | outputs = resnet18(inputs) 58 | loss = criterion(outputs, labels) 59 | loss.backward() 60 | optimizer.step() 61 | 62 | running_loss += loss.item() 63 | if i % 200 == 199: # 每200批次打印一次 64 | print('[%d, %5d] loss: %.3f' % 65 | (epoch + 1, i + 1, running_loss / 200)) 66 | running_loss = 0.0 67 | 68 | print('Training Finished') 69 | 70 | # 5. 测试网络性能 71 | correct = 0 72 | total = 0 73 | with torch.no_grad(): 74 | for data in testloader: 75 | images, labels = data[0].to(device), data[1].to(device) 76 | outputs = resnet18(images) 77 | _, predicted = torch.max(outputs.data, 1) 78 | total += labels.size(0) 79 | correct += (predicted == labels).sum().item() 80 | 81 | print('Accuracy of the network on the 10000 test images: %d %%' % ( 82 | 100 * correct / total)) 83 | 84 | -------------------------------------------------------------------------------- /第7课_深度学习初探图像识别与时序预测/RNN_TimeSeries.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import torch 4 | import torch.nn as nn 5 | import torch.optim as optim 6 | from torch.autograd import Variable 7 | 8 | 9 | df_app = pd.read_csv('AppRNN.csv', index_col='Date', parse_dates=['Date']) #导入数据 10 | 11 | # 按照2020年10月1日为界拆分数据集 12 | Train = df_app[:'2020-09-30'].iloc[:,0:1].values #训练集 13 | Test = df_app['2020-10-01':].iloc[:,0:1].values #测试集 14 | 15 | from sklearn.preprocessing import MinMaxScaler #导入归一化缩放器 16 | Scaler = MinMaxScaler(feature_range=(0,1)) #创建缩放器 17 | Train = Scaler.fit_transform(Train) #拟合缩放器并对训练集进行归一化 18 | 19 | # 对测试数据进行归一化处理 20 | Test = Scaler.transform(Test) 21 | 22 | 23 | 24 | # 创建一个函数,将数据集转化为时间序列格式 25 | def sliding_windows(data, seq_length): 26 | x = [] 27 | y = [] 28 | 29 | for i in range(len(data)-seq_length): 30 | _x = data[i:(i+seq_length)] 31 | _y = data[i+seq_length] 32 | x.append(_x) 33 | y.append(_y) 34 | 35 | return np.array(x),np.array(y) 36 | 37 | # 设定窗口大小 38 | seq_length = 4 39 | 40 | x_train, y_train = sliding_windows(Train, seq_length) 41 | # 使用滑动窗口为测试数据创建特征和标签 42 | x_test, y_test = sliding_windows(Test, seq_length) 43 | 44 | # 将数据转化为torch张量 45 | trainX = Variable(torch.Tensor(np.array(x_train))) 46 | trainY = Variable(torch.Tensor(np.array(y_train))) 47 | # 将数据转化为torch张量 48 | testX = Variable(torch.Tensor(np.array(x_test))) 49 | testY = Variable(torch.Tensor(np.array(y_test))) 50 | 51 | class RNN(nn.Module): 52 | 53 | def __init__(self, input_size, hidden_size, num_layers, output_size): 54 | super(RNN, self).__init__() 55 | 56 | self.hidden_size = hidden_size 57 | 58 | # RNN层 59 | self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True) 60 | 61 | # 全连接层,用于输出 62 | self.fc = nn.Linear(hidden_size, output_size) 63 | 64 | def forward(self, x): 65 | # 初始化隐状态 66 | h0 = Variable(torch.zeros(num_layers, x.size(0), self.hidden_size)) 67 | 68 | # 前向传播RNN 69 | out, _ = self.rnn(x, h0) 70 | 71 | # 解码RNN的最后一个隐藏层的输出 72 | out = self.fc(out[:, -1, :]) 73 | 74 | return out 75 | 76 | # 设置模型参数 77 | input_size = 1 78 | hidden_size = 64 79 | num_layers = 1 80 | output_size = 1 81 | 82 | # 创建模型 83 | rnn = RNN(input_size, hidden_size, num_layers, output_size) 84 | 85 | # 定义损失函数和优化器 86 | criterion = torch.nn.MSELoss() # 均方误差 87 | optimizer = torch.optim.Adam(rnn.parameters(), lr=0.01) # Adam优化器 88 | 89 | # 训练模型 90 | num_epochs = 100 91 | for epoch in range(num_epochs): 92 | outputs = rnn(trainX) 93 | optimizer.zero_grad() 94 | 95 | # 计算损失 96 | loss = criterion(outputs, trainY) 97 | loss.backward() 98 | 99 | optimizer.step() 100 | if epoch % 10 == 0: 101 | print("Epoch: %d, loss: %1.5f" % (epoch, loss.item())) 102 | 103 | 104 | # 使用训练好的模型进行预测 105 | rnn.eval() # 设置模型为评估模式 106 | test_outputs = rnn(testX) 107 | 108 | # 将预测结果逆归一化 109 | test_outputs = test_outputs.data.numpy() 110 | test_outputs = Scaler.inverse_transform(test_outputs) # 逆归一化 111 | 112 | # 真实测试标签逆归一化 113 | y_test_actual = Scaler.inverse_transform(y_test) 114 | 115 | # 输出预测和真实结果 116 | for i in range(len(y_test)): 117 | print(f"Date: {df_app['2020-10-01':].index[i+seq_length]}, Actual Activation: {y_test_actual[i][0]}, Predicted Activation: {test_outputs[i][0]}") 118 | 119 | 120 | -------------------------------------------------------------------------------- /第7课_深度学习初探图像识别与时序预测/Read_Local_Image.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torchvision 3 | from torchvision import transforms 4 | 5 | # 定义图像的预处理步骤 6 | transform = transforms.Compose([ 7 | transforms.Resize((224, 224)), # 如果使用ResNet,则通常需要这个尺寸 8 | transforms.ToTensor(), 9 | transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) 10 | ]) 11 | 12 | # 使用ImageFolder加载数据 13 | dataset_root = './dataset_root' # 你的数据集的根目录 14 | dataset = torchvision.datasets.ImageFolder(root=dataset_root, transform=transform) 15 | 16 | # 创建数据加载器 17 | data_loader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True) 18 | 19 | # 使用数据加载器进行迭代 20 | for images, labels in data_loader: 21 | # 这里进行模型的训练/评估等操作 22 | pass -------------------------------------------------------------------------------- /第7课_深度学习初探图像识别与时序预测/dog_bike_car.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjia2019/ai-in-practice/5629bd8cbf2b05f3538cf79b06e855ff07745cb8/第7课_深度学习初探图像识别与时序预测/dog_bike_car.jpg -------------------------------------------------------------------------------- /第8课_大语言模型与基于垂直行业的问答系统/LangChain_DocQA.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "db930060", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import os\n", 11 | "os.environ[\"OPENAI_API_KEY\"] = '你的OpenAI API Key'\n", 12 | "\n", 13 | "# 1.Load 导入Document Loaders\n", 14 | "from langchain.document_loaders import PyPDFLoader\n", 15 | "from langchain.document_loaders import Docx2txtLoader\n", 16 | "from langchain.document_loaders import TextLoader\n", 17 | "\n", 18 | "# 加载Documents\n", 19 | "documents = []\n", 20 | "for file in os.listdir('OneFlower'): \n", 21 | " if file.endswith('.pdf'):\n", 22 | " pdf_path = './OneFlower/' + file\n", 23 | " loader = PyPDFLoader(pdf_path)\n", 24 | " documents.extend(loader.load())\n", 25 | " elif file.endswith('.docx') or file.endswith('.doc'):\n", 26 | " doc_path = './OneFlower/' + file\n", 27 | " loader = Docx2txtLoader(doc_path)\n", 28 | " documents.extend(loader.load())\n", 29 | " elif file.endswith('.txt'):\n", 30 | " text_path = './OneFlower/' + file\n", 31 | " loader = TextLoader(text_path)\n", 32 | " documents.extend(loader.load())" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "id": "9febbc05", 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "# 2.Split 将Documents切分成块以便后续进行嵌入和向量存储\n", 43 | "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", 44 | "text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, \n", 45 | " chunk_overlap=10)\n", 46 | "chunked_documents = text_splitter.split_documents(documents)" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 3, 52 | "id": "4d9800ac", 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "# 3.Store 将分割嵌入并存储在矢量数据库Qdrant中\n", 57 | "from langchain.vectorstores import Qdrant\n", 58 | "from langchain.embeddings import OpenAIEmbeddings\n", 59 | "vectorstore = Qdrant.from_documents(\n", 60 | " documents=chunked_documents, # 以分块的文档\n", 61 | " embedding=OpenAIEmbeddings(), # 用OpenAI的Embedding Model做嵌入\n", 62 | " location=\":memory:\", # in-memory 存储\n", 63 | " collection_name=\"my_documents\",) # 指定collection_name" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 4, 69 | "id": "55bb2903", 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "# 4. Retrieval 准备模型和Retrieval链\n", 74 | "import logging # 导入Logging工具\n", 75 | "from langchain.chat_models import ChatOpenAI # ChatOpenAI模型\n", 76 | "from langchain.retrievers.multi_query import MultiQueryRetriever # MultiQueryRetriever工具\n", 77 | "from langchain.chains import RetrievalQA # RetrievalQA链\n", 78 | "\n", 79 | "# 设置Logging\n", 80 | "logging.basicConfig()\n", 81 | "logging.getLogger('langchain.retrievers.multi_query').setLevel(logging.INFO)\n", 82 | "\n", 83 | "# 实例化一个大模型工具 - OpenAI的GPT-3.5\n", 84 | "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", 85 | "\n", 86 | "# 实例化一个MultiQueryRetriever\n", 87 | "retriever_from_llm = MultiQueryRetriever.from_llm(retriever=vectorstore.as_retriever(), llm=llm)\n", 88 | "\n", 89 | "# 实例化一个RetrievalQA链\n", 90 | "qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectorstore.as_retriever())" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 9, 96 | "id": "610edc60", 97 | "metadata": {}, 98 | "outputs": [ 99 | { 100 | "name": "stdin", 101 | "output_type": "stream", 102 | "text": [ 103 | "请随意提问 (或者输入'exit'退出): 易速鲜花的董事长致辞,总结一下\n" 104 | ] 105 | }, 106 | { 107 | "name": "stdout", 108 | "output_type": "stream", 109 | "text": [ 110 | "答案: {'query': '易速鲜花的董事长致辞,总结一下', 'result': '董事长在致辞中表示热烈欢迎新员工加入易速鲜花集团,并为公司能拥有优秀员工感到自豪和骄傲。他对员工即将为公司付出的努力表示诚挚的感谢,并表示易速鲜花将会因员工的努力工作而稳步健康发展,因员工的贡献而更加精彩。'}\n" 111 | ] 112 | }, 113 | { 114 | "name": "stdin", 115 | "output_type": "stream", 116 | "text": [ 117 | "请随意提问 (或者输入'exit'退出): 董事长致辞中的企业精神具体是什么?\n" 118 | ] 119 | }, 120 | { 121 | "name": "stdout", 122 | "output_type": "stream", 123 | "text": [ 124 | "答案: {'query': '董事长致辞中的企业精神具体是什么?', 'result': '企业精神在董事长致辞中被描述为\"团结向上,完美无缺\"。这意味着易速鲜花希望每一位员工都能以高度的主人翁责任感和使命感,积极发扬团结合作的精神,在各自的岗位上勤奋敬业,尽职尽责,奋力拼搏。同时,易速鲜花也强调员工之间应该默契配合,相互接纳,取长补短,共同奋进,同舟共济。这样,易速鲜花可以成为一个坚强的战斗堡垒,在发展的道路上克服困难,迎接挑战。'}\n" 125 | ] 126 | }, 127 | { 128 | "name": "stdin", 129 | "output_type": "stream", 130 | "text": [ 131 | "请随意提问 (或者输入'exit'退出): 谢谢\n" 132 | ] 133 | }, 134 | { 135 | "name": "stdout", 136 | "output_type": "stream", 137 | "text": [ 138 | "答案: {'query': '谢谢', 'result': '您好,欢迎光临易速鲜花!请问您需要帮助吗?'}\n" 139 | ] 140 | }, 141 | { 142 | "name": "stdin", 143 | "output_type": "stream", 144 | "text": [ 145 | "请随意提问 (或者输入'exit'退出): exit\n" 146 | ] 147 | }, 148 | { 149 | "name": "stdout", 150 | "output_type": "stream", 151 | "text": [ 152 | "谢谢使用 QA 系统!\n" 153 | ] 154 | } 155 | ], 156 | "source": [ 157 | "# 5. 问答展示\n", 158 | "def ask_question(query):\n", 159 | " # 使用RetrievalQA链来获取答案\n", 160 | " response = qa_chain(query)\n", 161 | " \n", 162 | " # 返回得到的答案\n", 163 | " return response\n", 164 | "\n", 165 | "# 为用户提供交互界面进行问答\n", 166 | "while True:\n", 167 | " # 获取用户的问题\n", 168 | " user_query = input(\"请随意提问 (或者输入'exit'退出): \")\n", 169 | "\n", 170 | " # 如果用户输入\"exit\",则退出循环\n", 171 | " if user_query.lower() == 'exit':\n", 172 | " break\n", 173 | "\n", 174 | " # 使用定义的函数获取答案,并打印\n", 175 | " answer = ask_question(user_query)\n", 176 | " print(\"答案:\", answer)\n", 177 | "\n", 178 | "print(\"谢谢使用 QA 系统!\")" 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": null, 184 | "id": "dae2e3d1-4bfb-48e4-96d6-292a1d8bcedd", 185 | "metadata": {}, 186 | "outputs": [], 187 | "source": [] 188 | } 189 | ], 190 | "metadata": { 191 | "kernelspec": { 192 | "display_name": "Python 3 (ipykernel)", 193 | "language": "python", 194 | "name": "python3" 195 | }, 196 | "language_info": { 197 | "codemirror_mode": { 198 | "name": "ipython", 199 | "version": 3 200 | }, 201 | "file_extension": ".py", 202 | "mimetype": "text/x-python", 203 | "name": "python", 204 | "nbconvert_exporter": "python", 205 | "pygments_lexer": "ipython3", 206 | "version": "3.11.5" 207 | } 208 | }, 209 | "nbformat": 4, 210 | "nbformat_minor": 5 211 | } 212 | -------------------------------------------------------------------------------- /第8课_大语言模型与基于垂直行业的问答系统/OneFlower/.ipynb_checkpoints/易速鲜花员工手册-checkpoint.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjia2019/ai-in-practice/5629bd8cbf2b05f3538cf79b06e855ff07745cb8/第8课_大语言模型与基于垂直行业的问答系统/OneFlower/.ipynb_checkpoints/易速鲜花员工手册-checkpoint.pdf -------------------------------------------------------------------------------- /第8课_大语言模型与基于垂直行业的问答系统/OneFlower/.ipynb_checkpoints/花语大全-checkpoint.txt: -------------------------------------------------------------------------------- 1 | Rose: Love, Passion, Beauty 2 | Carnation: Maternal Love, Innocence, Respect 3 | Lily: Purity, Nobility, Blessings 4 | Tulip: Perfect Love, Passion, Tenderness 5 | Daisy: Innocence, Beauty, Hope 6 | Peony: Prosperity, Wealth, Happiness 7 | Sunflower: Loyalty, Sunshine, Positivity 8 | Gypsophila: Purity, Romance, Beautiful Dreams 9 | Peach Blossom: Romantic Luck, Beautiful Fate, Happiness 10 | Hydrangea: Sincerity, Gratitude, Best Wishes 11 | Phalaenopsis: Noble, Elegant, Beautifully Moving 12 | Cherry Blossom: Beauty, Transience, Wonderful Moments 13 | Lily of the Valley: Happiness, Purity, Deep Love 14 | Chrysanthemum: Strength, Longevity, Sincere Friendship 15 | Marigold: Beauty, Blessings, Wellness 16 | Violet: Eternal Love, Purity, Chastity 17 | Edelweiss: Courage, Sincere Love, Preciousness 18 | Bellflower: Hope, Everlasting Love, Humility 19 | Forget-Me-Not: Loyalty, True Love, Beautiful Memories 20 | Paeonia: Fragrance, Wealth, Beautiful Posture 21 | Wisteria: Gentleness, Sentimentality, Protective Love 22 | Lavender: Tranquility, Innocence, Pursuit of Love 23 | Foxglove: Beauty, Joy, Blessings 24 | Dianthus: Delicate Thoughts, Sincerity, Romance 25 | Magnolia: Nobility, Elegance, Eternal Love 26 | Lilac: First Love, Youth, Beautiful Memories 27 | Lotus: Freshness, Purity, Excellence 28 | Ginkgo: Persistence, Friendship, Steadfast Heart 29 | Snowdrop: Hope, New Beginnings, First Bloom 30 | Anthurium: Passion, Attraction, Happy Love -------------------------------------------------------------------------------- /第8课_大语言模型与基于垂直行业的问答系统/OneFlower/易速鲜花员工手册.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjia2019/ai-in-practice/5629bd8cbf2b05f3538cf79b06e855ff07745cb8/第8课_大语言模型与基于垂直行业的问答系统/OneFlower/易速鲜花员工手册.pdf -------------------------------------------------------------------------------- /第8课_大语言模型与基于垂直行业的问答系统/OneFlower/易速鲜花运营指南.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjia2019/ai-in-practice/5629bd8cbf2b05f3538cf79b06e855ff07745cb8/第8课_大语言模型与基于垂直行业的问答系统/OneFlower/易速鲜花运营指南.docx -------------------------------------------------------------------------------- /第8课_大语言模型与基于垂直行业的问答系统/OneFlower/花语大全.txt: -------------------------------------------------------------------------------- 1 | Rose: Love, Passion, Beauty 2 | Carnation: Maternal Love, Innocence, Respect 3 | Lily: Purity, Nobility, Blessings 4 | Tulip: Perfect Love, Passion, Tenderness 5 | Daisy: Innocence, Beauty, Hope 6 | Peony: Prosperity, Wealth, Happiness 7 | Sunflower: Loyalty, Sunshine, Positivity 8 | Gypsophila: Purity, Romance, Beautiful Dreams 9 | Peach Blossom: Romantic Luck, Beautiful Fate, Happiness 10 | Hydrangea: Sincerity, Gratitude, Best Wishes 11 | Phalaenopsis: Noble, Elegant, Beautifully Moving 12 | Cherry Blossom: Beauty, Transience, Wonderful Moments 13 | Lily of the Valley: Happiness, Purity, Deep Love 14 | Chrysanthemum: Strength, Longevity, Sincere Friendship 15 | Marigold: Beauty, Blessings, Wellness 16 | Violet: Eternal Love, Purity, Chastity 17 | Edelweiss: Courage, Sincere Love, Preciousness 18 | Bellflower: Hope, Everlasting Love, Humility 19 | Forget-Me-Not: Loyalty, True Love, Beautiful Memories 20 | Paeonia: Fragrance, Wealth, Beautiful Posture 21 | Wisteria: Gentleness, Sentimentality, Protective Love 22 | Lavender: Tranquility, Innocence, Pursuit of Love 23 | Foxglove: Beauty, Joy, Blessings 24 | Dianthus: Delicate Thoughts, Sincerity, Romance 25 | Magnolia: Nobility, Elegance, Eternal Love 26 | Lilac: First Love, Youth, Beautiful Memories 27 | Lotus: Freshness, Purity, Excellence 28 | Ginkgo: Persistence, Friendship, Steadfast Heart 29 | Snowdrop: Hope, New Beginnings, First Bloom 30 | Anthurium: Passion, Attraction, Happy Love --------------------------------------------------------------------------------