基于关联规则与可平面图的商品摆放规划-----实验报告

EXCEL数据分析(一) 最近开始学习excel数据分析,大概记录一些操作,以便日后忘记时再看。 目录 1.分类汇总 2.数据透视表基本操作 3.数据透视表——统计各销量组销售次数的频率分布 4.数据透视表——实战操练 1.分类汇总 ①首先,利用“筛选”和“排序”,将数据按照关键字进行排序 ②因为已经有“排序”的数据没法进行数据汇总,所以先将所有数据复制,粘贴到另一个另一个工作表(左下角的工作表)里面 注意 阅读详情

基于关联规则与可平面图的商品摆放规划

摘要: 本文先对northwind数据库介绍与数据描述与简单分析(数据异常值处理,订单地址的文本挖掘),然后对购买的商品使用关联规则算法,进行关联分析与商品的购买情况分析,由关联规则的发现结果,使用图论方法分析商品的摆放图。

关键词: Northwind数据库;关联规则;可平面图;

1. Northwind数据库数据介绍

在这里插入图片描述

图1 Northwind数据库的安装文件

       执行文件中的SQL语句,此时在你的SQL Server中就会看到Northwind数据库了。
  它有8张表,涉及客户、商品、订单。

1.1 关系型数据库

虽然网状数据库和层次数据库已经很好的解决了数据的集中和共享问题,但是在数据库独立性和抽象级别上扔有很大欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而关系型数据库就可以较好的解决这些问题。
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
① Categories: (食品类别表)
种类表
相应字段:
CategoryID :类型ID;
CategoryName:类型名;
Description:类型说明;
Picture:产品样本
主键:CategoryID
主键约束名称:PK_Categories
关系说明:该表主要用来保存食品种类信息的数据。
② CustomerCustomerDemo:客户类型表1
相应字段:
CustomerID:客户ID;
CustomerTypeID:客户类型ID
组合主键:CustomerID、CustomerTypeID
主键约束名称:PK_CustomerCustomerDemo
外键:
1.列 CustomerTypeID引用表CustomerDemographics(CustomerTypeID)
2.列 CustomerID引用表Customers(CustomerID)
外键约束名称:
FK_CustomerCustomerDemo和FK_CustomerCustomerDemo_Customers
关系说明:该表主要用来保存消费者ID和消费者类别ID信息的数据。
③ CustomerDemographics:客户类型表2
相应字段:
CustomerTypeID:客户类型ID;
CustomerDesc:客户描述
主键:CustomerTypeID
主键约束名称:PK_CustomerDemographics
关系说明:该表主要用来存储消费者类别说明信息。
④ Customers:客户表
相应字段:
CustomerID:客户ID;
CompanyName:所在公司名称;
ContactName:客户姓名;
ContactTitle:客户头衔;
Address:联系地址;
City:所在城市;
Region:所在地区;
PostalCode:邮编;
Country:国家
Phone:电话;
Fax:传真
主键:CustomerID
主键约束名称:PK_Customers
关系说明:该表主要用来存储消费者详细信息的数据表。
⑤ Employees:员工表
相应字段:
EmployeeID:员工代号;
LastName + FirstName:员工姓名;
Title:头衔;
TitleOfCourtesy:尊称;
BirthDate:出生日期;
HireDate:雇用日期;
Address:家庭地址;
City:所在城市;
Region:所在地区;
PostalCode:邮编;
Country:国家用;
HomePhone:宅电;
Extension:分机;
Photo:手机;
notes:照片;
ReportsTo:上级;
PhotoPath:照片
主键:EmployeeID
主键约束名称:PK_Employees
外键:
1.列 ReportsTo引用表Employees(EmployeeID)
外键约束名称
FK_Employees_Employees
关系说明:该表主要用来存储雇员的详细信息数据表。

⑥ EmployeeTerritories:员工部门表
相应字段:
EmployeeID:员工编号;
TerritoryID:部门代号
主键:EmployeeID、TerritoryID
主键约束名称:PK_EmployeeTerritories
外键:
1.列 EmployeeID引用表Employees(EmployeeID)
2.列 TerritoryID引用表Territories (TerritoryID)
外键约束名称:
FK_EmployeeTerritories_Employees和FK_EmployeeTerritories_Territories
关系说明:该表主要用来存储雇员ID和其对应的销售区域ID。

⑦ Order Details:订单明细表
相应字段:
OrderID:订单编号;
ProductID:产品编号;
UnitPrice:单价;
Quantity:订购数量;
Discount:折扣
主键:OrderID、ProductID
主键约束名称:PK_Order_Details
外键:
1.列 OrderID引用表Orders(OrderID)
2.列 ProductID引用表Products(ProductID)
外键约束名称:
FK_Order_Details_Orders和FK_Order_Details_Products
关系说明:该表主要用来存储订单价格信息的数据表
1 组合、主键、聚集索引在 OrderID 和ProductID 上定义。
2 在 OrderID 上也有两个非聚集索引。
3 在 ProductID 上也有两个非聚集索引。
4 UnitPrice 的 CHECK 约束被定义为 (UnitPrice >= 0)。
5 Quantity 的 CHECK 约束被定义为 (Quantity > 0)。
表级别的 CHECK 约束被定义为 (Discount >= 0 和 Discount < = 1)。

⑧ Orders:订单表
相应字段:
OrderID:订单编号;
CustomerID:客户编号;
EmployeeID:员工编号;
OrderDate:订购日期;
RequiredDate:预计到达日期;
ShippedDate:发货日期;
ShipVia:运货商;
Freight:运费;
ShipName:货主姓名;
ShipAddress:货主地址
ShipCity:货主所在城市;
ShipRegion:货主所在地区;
ShipPostalCode:货主邮编;
ShipCountry:货主所在国家
主键:OrderID
主键约束名称:PK_Orders
外键:
1.列 CustomerID引用表Customers(CustomerID)
2.列 EmployeeID引用表Employees(EmployeeID)
3. .列 ShipVia引用表Shippers(ShipperID)
外键约束名称
FK_Orders_Customers,FK_Orders_Employees和FK_Orders_Shippers
关系说明:该表主要用来存储订单详细信息的数据
在 CustomerID上有两个非聚集索引,在EmployeeID 上有两个非聚集索引,ShipVia 上也有一个非聚集索引。

⑨ Products:产品表
相应字段:
ProductID:产品ID;
ProductName:产品名称;
SupplierID:供应商ID;
CategoryID:类型ID;
QuantityPerUnit:数量;
UnitPrice:单价;
UnitsInStock:库存数量;
UnitsOnOrder:订购量;
ReorderLevel:再次订购量;
Discontinued:中止
主键:ProductID
主键约束名称:PK_Products
外键:
1.列 CategoryID引用表Categories(CategoryID)
2.列 SupplierID引用表Suppliers(SupplierID)
外键约束名称
FK_Products_Categories和FK_Products_Suppliers
关系说明:该表主要用来存储产品详细信息的数据表。
1.在 SupplierID 上有两个非聚集索引。
2.在 CategoryID 上有两个非聚集索引。
3.UnitPrice 的 CHECK 约束被定义为 (UnitPrice >=)。
4.UnitsInStock 的 CHECK 约束被定义为 (UnitsInStock >=)
5.UnitsOnOrder 的 CHECK 约束被定义为 (UnitsOnOrder >=)。
6.ReorderLevel 的 CHECK 约束被定义为 (ReorderLevel >=)。

⑩ Region:地区表
相应字段:
RegionID:地区ID;
RegionDescription:地区描述
主键:RegionID
主键约束名称:PK_Region
关系说明:该表主要用来存储区域信息数据。
○11 Shippers:运货商
相应字段:
ShipperID:运货商ID;
CompanyName:公司名称;
Phone:联系电话
主键:ShipperID
主键约束名称:PK_Shippers
关系说明:该表主要用来存储托运公司的详细信息数据。
○12 Suppliers:供应商表
相应字段:
ShipperID:供应商ID;
CompanyName:供应商姓名;
Phone;联系电话
主键:SupplierID
主键约束名称:PK_Suppliers
关系说明:该表主要用来存储供应商详细信息数据。

○13 Territories:地域表
相应字段:
TerritoryID:地域编号;
TerritoryDescription:地域描述;
RegionID:地区编号
主键:TerritoryID
主键约束名称:PK_Territories
外键:
1.列 RegionID引用表Region(RegionID)
外键约束名称
FK_Territories_Region
关系说明:该表用来存储销售区域详细说明信息的数据。

1.2 视图分析:

在这里插入图片描述

图2 用数据分析服务创建数据库视图

观察创建的视图:
观察视图

图四 观察数据库表之间的关联

1.2.1.Alphabetical list of products未过期食品的详细信息及其所属的类别。
1.2.2.Category Sales for 1997显示种类食品在1997年的实际销售部。
1.2.3.Current Product List显示未过期食品的信息。
1.2.4.Customer and Suppliers by City所有消费者和供货商的信息。
1.2.5.Invoices 按照订单发货的详细信息。
1.2.6.Order Details Extended订单明细的详细信息。
1.2.7.Order Subtotals 每单的实际销售额
1.2.8.Orders Qry 有订单的客户的详细订单信息及客户信息
1.2.9.Product Sales for 1997 每种食品在1997实际销售额以及食品的详细信息
1.2.10.Products Above Average Price 单位售价大于所有食品平均售价的食品清单。
1.2.11.Products by Category 未过期食品的存货情况(按照商品分类)
1.2.12.Quarterly Orders 1997年有订单的客户信息
1.2.13.Sales by Category 1997年订单食品的详细情况
1.2.14.Sales Totals by Amount 1997年每单销售额大于2500的订单的信息
1.2.15.Summary of Sales by Quarter 1997年已发货订单的发货时间
1.2.16.Summary of Sales by Year 1997年已发货订单的发货时间

1.3.数据表之间的关系展示

数据较多的表:
1.3.1.Products:产品表
相应字段:
ProductID:产品ID;
ProductName:产品名称;
SupplierID:供应商ID;
CategoryID:类型ID;
QuantityPerUnit:数量;
UnitPrice:单价;
UnitsInStock:库存数量;
UnitsOnOrder:订购量;
ReorderLevel:再次订购量;
Discontinued:中止
在这里插入图片描述

图五 产品表
1.3.2. Orders:订单表
相应字段:
OrderID:订单编号;
CustomerID:客户编号;
EmployeeID:员工编号;
OrderDate:订购日期;
RequiredDate:预计到达日期;
ShippedDate:发货日期;
ShipVia:运货商;
Freight:运费;
ShipName:货主姓名;
ShipAddress:货主地址
ShipCity:货主所在城市;
ShipRegion:货主所在地区;
ShipPostalCode:货主邮编;
ShipCountry:货主所在国家

在这里插入图片描述

图六订单表
1.3.3.Order Details:订单明细表
相应字段:
OrderID:订单编号;
ProductID:产品编号;
UnitPrice:单价;
Quantity:订购数量;
Discount:折扣
在这里插入图片描述
图七 订单明细表
对每一列数据进行统计,包括计数,均值,std,各个分位数等。

在这里插入图片描述

图八 订单明细表的数据描述
单价的平均值为26.21
订购数量的平均值为23
折扣 的平均值为26.21

1.4 数据的抽取

pyodbc是ODBC的一个python封装,它允许任何平台上的python具有使用ODBC API的能力。那意味着,pyodbc是python语言与ODBC的一条桥梁。开放数据库连接(Open Database Connectivity,ODBC)是为解决异构数据库间的数据共享而产生的,现已成为WOSA(The Windows Open System Architecture(Windows开放系统体系结构))的主要部分和基于Windows环境的一种数据库访问接口标准ODBC 为异构数据库访问提供统一接口,允许应用程序以SQL 为数据存取标准,存取不同DBMS管理的数据;使应用程序直接操纵DB中的数据,免除随DB的改变而改变。用ODBC 可以访问各类计算机上的DB文件,甚至访问如Excel 表和ASCI I数据文件这类非数据库对象。
所有的SQL语句都用ODBC.execute函数运行或由get_df_from_db_1方法直接返回数据架构。

1.5 数据预处理

对数据中缺失值选用合适的方法填充:对数据中的空值处填入平均值

1.6 购买者 国家的文本挖掘,词频分析:

[(‘USA’, 13), (‘Germany’, 11), (‘France’, 11), (‘Brazil’, 9), (‘UK’, 7), (‘Mexico’, 5), (‘Spain’, 5), (‘Venezuela’, 4), (‘Canada’, 3), (‘Argentina’, 3), (‘Italy’, 3), (‘Sweden’, 2), (‘Switzerland’, 2), (‘Austria’, 2), (‘Portugal’, 2), (‘Belgium’, 2), (‘Denmark’, 2), (‘Finland’, 2), (‘Ireland’, 1), (‘Norway’, 1), (‘Poland’, 1)]

在这里插入图片描述

图九 词云图

在这里插入图片描述
图十 单价的分布图

打折的比例:
在这里插入图片描述

图十一 打折的比例

在这里插入图片描述
图十二 单价-折扣图
在这里插入图片描述
图十三 数量-折扣图

通过以上发现:‘
折扣的类型分为五种:0 0.05 0.10 0.15 0.20 0.25
不打折的概率为61.3%,其他折扣的占比基本相同。
大部分商品的单价为零到50
从数量-折扣图中可见:商品的折扣类型与数量没有明显的关系。

2. 关联规则算法与平面图论分析

2.1 Apriori算法

Apriori算法是第一个关联规则挖掘算法,也是最经典的算法。它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与剪枝(去掉那些没必要的中间结果)组成。该算法中项集的概念即为项的集合。包含K个项的集合为k项集。项集出现的频率是包含项集的事务数,称为项集的频率。如果某项集满足最小支持度,则称它为频繁项集,即挖掘频繁项集,通过连接产生候选项及其支持度,通过剪枝生成频繁项集

2.2 算法实施

对购买的商品使用关联规则算法 进行关联分析:

2.2.1总数据描述:

Order Details表中ID为10248至11077的829次购买记录

2.2.2:

在所有记录中选择购买前十商品的设置为一项频繁集[59,60,31,24,56,62,41,75,2,16]:
频繁集 及其支持度 产品名称
59 0.065139 54 aclette Courdavault
60 0.061520 51 Camembert Pierrot
31 0.061520 51 Gorgonzola Telino
24 0.061520 51 Guaraná Fantástica
56 0.060314 50 Gnocchi di nonna Alice
62 0.057901 48 Tarte au sucre
41 0.056695 47 Jack’s New England Clam Chowder
75 0.055488 46 Rh?nbr?u Klosterbier
2 0.053076 44 Chang
16 0.051869 43 Pavlova

一项频繁集候选产生二项频繁集(所有出现次数大于3的):
频繁集 出现次数
[60, 31] 4
[59, 56] 4
[59, 2] 5
[31, 2] 5
[59, 16] 4
[60, 16] 4
[31, 16] 7
[62, 16] 4
[2, 16] 4
注:没有支持度大于三次的三项频繁集。

由以上数据生成关联规则并计算置信度:
60-》31 0.07
31-》60 0.07
59-》56 0.07407
56-》59 0.08
59-》2 0.0925
2 –》59 0.1136
31-》2 0.09803
2 –》31 0.09803
59-》16 0.09302
16-》59 0.09302
60-》16 0.07843
16-》60 0.07843
31-》16 0.13725
16-》31 0.16279
62-》16 0.83333
16-》62 0.09302
2 -》16 0.090909
16-》2 0.093023

2.3 图论分析:

2.3.1 数据转换

将以上的二项频繁集转换为无向图图的关系:
(如果两个商品的集合属于频繁集,则将两个点联通,如点16与60在图上邻接)
在这里插入图片描述
图十四 商品频繁集的联通图

从上图可见:
图的度序列为{5,3,3,3,2,1,1,0,0,0}
对应的点为{16 ,59,2,31,60,62,56,75,41,24}
商品16所联通的点最多,即点16的度数最大。在摆放商品时可将商品16放在中间。

2.3.2 平面化

可平面图(planar graph)是一类特殊的图,指同构于某一平面图的图。如果一个图能够画在平面上,使得顶点集合及边集合分别是相同的,而如果边相交仅在边的端点处,则称这个图是可嵌入平面的,或称作可平面图(planar graph);否则称作不可平面图,可平面图G的这样一种画法称为G 的一个平面嵌入(planar embedding) 。库拉托夫斯基定理给出了可平面图的特征,其内容为:图G是可平面图当且仅当G没有同胚于完全图K5和完全二部图K3,3的子图,同胚于K5和K3,3的图称为库拉托夫斯基图。这一定理是由库拉托夫斯基(Kuratowski,K.)于1930年证明的,若可平面图G不是任何同阶其他可平面图的子图,则称G为极大可平面图,极大可平面图所对应的平面图的每个面都必为三角形;同构于外平面图的图称为外可平面图;3正则的可平面图称为3正则平面图;G是外可平面的当且仅当G没有与完全图K4同胚的子图 。
(欧拉公式)平面图: 设G是无向连通平面图,具有n 个顶点,m条边和r个面,则 n-m+r=2。

在这里插入图片描述
图十五 平面化的商品摆放图

在百度搜索中也能发现Pavlova的流行性,在所有的十种商品中只有16号商品Pavlova蛋糕有较多的网页信息。
Pavlova 是一款拥有奇妙口感的蛋白奶油蛋糕,从1930开始,在新西兰和澳大利亚开始风靡,虽然两国都争执是自己发明了这款美味的甜点,但是我认为,承认这款甜点人人都爱,已经是最大的胜利。
这款蛋糕的名字源自俄罗斯芭蕾舞蹈演员Anne Pavlova, 据说当时她正在巡回演出,蛋糕师看到了美丽的Pavlova之后,创造了这款美味的甜点来寓意赞美她的美丽与她的舞蹈。
制作Pavlova的材料很简单,也很常见,但是却可以风靡一时,诀窍在于她的奇妙口感。
和一般的蛋白饼干一样,所有的Meringue Batter烘培过后都会有一层酥脆的外皮,触感好像很坚硬,其实酥脆的一碰就会裂开,但是Pavlova中因为有食醋/柠檬汁的加入,使得这款Meringue Cake与众不同,在酥脆的外壳包裹下,是像棉花糖一样柔软的内芯。
Pavlova一般与奶油,新鲜水果搭配食用,上面这张成品图可以很清晰的用视觉体验显示出Pavlova的奇妙口感:
新鲜时令水果的酸甜,奶油的甜腻,配上酥脆到一碰就裂开的外皮,再加上像棉花糖一样柔软甜蜜的内芯,所有的这一切,当你一口吃下以后,在口腔中用舌头一抿便融化了,带给味蕾奇妙的体验……

在这里插入图片描述
图十六 Pavlova 蛋糕
在这里插入图片描述
图十七 Pavlova 的购买拟合曲线
输出结果:
intercept_:10251.837
coef_:19.897
Mean squared error: 330.178
Variance score: 0.994
score: 0.994
由图可见拟合效果较好,准确率为0.994,拟合直线的斜率为20.073,所以大约平均每20个顾客就有一个购买Pavlova蛋糕。
同时对其他的几种商品进行拟合得到,其他的商品也横好拟合。
而对购买小一点的进行拟合
如购买数量第50位的14号商品 进行拟合的结果为
intercept_:10208.108
coef_:33.148
Mean squared error: 5762.650
Variance score: 0.884
score: 0.884

在这里插入图片描述

图十八 Tofu的购买拟合曲线

2.4结果分析

1.折扣的类型分为五种:0 0.05 0.10 0.15 0.20 0.25,受数量单价的影响较小。
2.前十种购买量最多的商品中出现种类最多的是Cheeses类,
3.并且购买量高的商品有更强的规律性,用直线进行最小二乘拟合的结果得分相对也更高。
4.并且通过关联规则发现:购买Pavlova蛋糕与 Gorgonzola Telino奶酪有最大的支持度。
5.商品的摆放优化如“图十五”所示

3.结论总结

利用SQL SERVER ,python,Matlab等软件,实验实现了构建数据仓库,数据清洗方法,了解数据挖掘的几个经典算法思想;通过本次数据挖掘实验,体会了数据清洗的重要性,认识到数据挖掘算法的重要性,了解了数据立方体的构建。

部分代码与参考文献:

import pandas as pd
import pyodbc
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’]=[‘SimHei’] #用来正常显示中文标签
plt.rcParams[‘font.sans-serif’]=‘SimHei’
在这里插入图片描述
数据加载的方法:
右键属性编辑密码,使用用户名密码连接数据库。
connection = pyodbc.connect(SERVER=“127.0.0.1”,
UID=“sa”,
PWD=“1234”,
DATABASE=“Northwind”,
DRIVER=’{SQL Server}’ )#数据库的连接字符串

def get_df_from_db_1(sql):
return pd.read_sql(sql, connection)
df=get_df_from_db_1('SELECT * from [Order Details] ')#执行选择命令
print(df)#打印dataframe

data=df[‘UnitPrice’]
data.hist(figsize=(8, 4), bins=100)
plt.show()
plt.Figure(figsize=(8,4))
x,y =df[‘Quantity’].values ,df[‘Discount’].values
plt.scatter(x,y,color = ‘r’,s=1,marker=‘o’)
#坐标设置
plt.xlabel(“质量”)
plt.ylabel(“折扣”)
#plt.legend()
plt.show()
df=get_df_from_db_1(‘SELECT * from [Order Details]’)
print(df)
groups=df.groupby([‘ProductID’]).count()
groups=groups.sort_values(by = ‘OrderID’,axis = 0,ascending = False)
print(groups)
for i in range(1,10):
print(groups.iloc[i,:])
print(groups[‘OrderID’]/2155)
TEN= [59,60,31,24,56,62,41,75,2,16]
a=[]
for i in range(0,9):
a.append(TEN[i])
a.append(TEN[i+1])
print(a)
i=0
for k in range(10248,11077):
df=get_df_from_db_1(‘SELECT ProductID from [Order Details] where OrderID=’+str(k))
b=df[‘ProductID’].values
if set(a) < set(b) :
i=i+1
print(i)
a=[]
items=TEN
N = len(items)
for i in range(2 ** N): #子集个数,每循环一次一个子集
combo = []
for j in range(N): #用来判断二进制下标为j的位置数是否为1
if(i>>j)%2:
combo.append(items[j])
#print(combo)
J=0
for k in range(10248,11077):
df=get_df_from_db_1(‘SELECT ProductID from [Order Details] where OrderID=’+str(k))
b=df[‘ProductID’].values
if set(combo) < set(b) :
J=J+1
if J>3:
print(combo)
print(J)
import pyodbc
class ODBC:
def init(self,server,uid,pwd,db,DRIVER=’{SQL Server}’):
self.server = “127.0.0.1”
self.uid = “sa”
self.pwd = “1234”
self.db = “Northwind”
self.DRIVER = DRIVER

def GetConnect(self):
    if not self.db:
        raise(NameError,'没有设置数据库信息')
    self.conn = pyodbc.connect(SERVER=self.server,UID=self.uid,PWD=self.pwd,DATABASE=self.db,DRIVER=self.DRIVER)
    cur = self.conn.cursor()
    if not cur:
        raise(NameError,'连接数据库失败')
    else:
        print("数据库连接成功")
        return cur

def ExecQuery(self,sql):
    cur = self.GetConnect()
    cur.execute(sql)
    resList = cur.fetchall()
    self.conn.close()
    return resList

def ExecNonQuery(self,sql):
    cur = self.GetConnect()
    cur.execute(sql)
    self.conn.commit()
    self.conn.close()

def main():
ms = ODBC(server=‘localhost’,uid=’’, pwd=’’, db=“new_estate_dalian”)
#sql = ms.ExecQuery('SELECT top 5 * from [Orders] ')
sql = ms.ExecQuery('SELECT Country from [Customers] ')

print(sql)

if name == ‘main’:
main()
#画饼图
labels = [‘0.00’,‘0.05’,‘0.10’,‘0.15’,‘0.20’,‘0.25’]
sizes = [1317,185,173,161,157,154]
explode = (0,0,0,0,0,0)
plt.pie(sizes,explode=explode,labels=labels,autopct=’%1.1f%%’,shadow=False,startangle=150)
plt.title(“折扣百分比”)
plt.show()
plt.axis(‘equal’)
connection = pyodbc.connect(SERVER=“127.0.0.1”,
UID=“sa”,
PWD=“1234”,
DATABASE=“Northwind”,
DRIVER=’{SQL Server}’ )

def get_df_from_db_1(sql):
return pd.read_sql(sql, connection)
a=[]
‘’’
for k in range(10248,10251):
df=get_df_from_db_1(‘SELECT ProductID from [Order Details] where OrderID=’+str(k))
b=df[‘ProductID’].values
print(df[‘ProductID’].values)
a.append(b)
print(a[1])
‘’’

df=get_df_from_db_1(‘SELECT * from [Order Details]’)
print(df)
groups=df.groupby([‘ProductID’]).count()#ProductID
groups=groups.sort_values(by = ‘OrderID’,axis = 0,ascending = False)
print(groups)
for i in range(0,60):
print(groups.iloc[i,:])
#groups/829
print(groups[‘OrderID’])

最小二乘法:
import pandas as pd
import pyodbc
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’]=[‘SimHei’] #用来正常显示中文标签
plt.rcParams[‘font.sans-serif’]=‘SimHei’
connection = pyodbc.connect(SERVER=“127.0.0.1”,
UID=“sa”,
PWD=“1234”,
DATABASE=“Northwind”,
DRIVER=’{SQL Server}’ )

def get_df_from_db_1(sql):
return pd.read_sql(sql, connection)
df=get_df_from_db_1(‘SELECT * from [Order Details] where ProductID=16’)
print(df)
import numpy as np
from sklearn import datasets , linear_model
from sklearn.metrics import mean_squared_error , r2_score
from sklearn.model_selection import train_test_split
import matplotlib
import matplotlib.pyplot as plt
import sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

X = np.arange(0,43,1)
print(X)
X = X.reshape(X.shape[0],1)
y = df[‘OrderID’].values
print(X)
print(y)
X_train , X_test , y_train ,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
#导入模型,模型参数默认
LR = linear_model.LinearRegression()
#训练模型
LR.fit(X_train,y_train)
#预测模型LR.predict(X_test),此时输出类别数据
#打印截距
print(‘intercept_:%.3f’ % LR.intercept_)
#打印模型系数
print(‘coef_:%.3f’ % LR.coef_)
#打印均方误差值
print(‘Mean squared error: %.3f’ % mean_squared_error(y_test,LR.predict(X_test)))##((y_test-LR.predict(X_test))**2).mean()
#打印R-平方
print(‘Variance score: %.3f’ % r2_score(y_test,LR.predict(X_test)))
#1-((y_test-LR.predict(X_test))**2).sum()/((y_test - y_test.mean())**2).sum
#打印准确率accuracy
print(‘score: %.3f’ % LR.score(X_test,y_test))
plt.scatter(X_test , y_test ,color =‘green’)
plt.plot(X_test ,LR.predict(X_test) ,color=‘red’,linewidth =3)
plt.show()

参考文献
[1] https://blog.youkuaiyun.com/pan15125284/java/article/details/91864509
[2] https://blog.youkuaiyun.com/lixinkuan328/java/article/details/95381694
[3https://home.meishichina.com/space-1308807-do-blog-id-532203.html
[4]https://baike.baidu.com/item/%E5%8F%AF%E5%B9%B3%E9%9D%A2%E5%9B%BE/19138688?fr=aladdin
[5] https://wenku.baidu.com/view/1e73ba671ed9ad51f01df242.html

数据仓库实验二:关联规则挖掘实验 数据仓库与数据挖掘实验二:关联规则挖掘实验。 阅读详情

相关推荐

Northwind数据库简单介绍

Northwind数据库简单介绍

mybatis入门基础(六)----高级映射(一对一,一对多,多对多)

一:订单商品数据模型 1.数据库执行脚本   创建数据库表代码: 1 CREATE TABLE items ( 2 id INT NOT NULL AUTO_INCREMENT, 3 itemsname VARCHAR(32) NOT NULL COMMENT '商品名称', 4 price FLOAT(10,1) NOT NULL COMMEN...

weixin_30642561的博客 476

Northwind数据库分析

分析sql sever数据库里面的存储过程,视图!!

以NORTHWIND订单数据为例制作RFM模型

本文采用的软件为EXCEL2010 和SPSS 数据来源为SQLSERVER的NORTHWIND示例数据库 根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有三个神奇的要素,这三个要素构成了数据分析最好的指标: 最近一次消费(Recency) 消费频率(Frequency) 消费金额(Monetary)   RFM模型是衡量

LY的博客 1445

DaVinci Configurator BswM模块配置

BswM是AUTOSAR(Automotive Open System Architecture)系统架构中的模块之一,它是基础软件模块(BSW)之一。BswM全称为Basic Software Module Manager(基础软件模块管理器),它负责管理和协调其他BSW模块的行为和交互,以实现整个系统的功能。BswM可以被看作是一个状态机,通过监控系统的状态和事件触发,来控制其他BSW模块的运行状态和互相配合,以达到整个系统的预期行为。

qq_59258431的博客 3945

LangChain开发避坑指南:为什么Pylance总提示‘无法解析导入‘?实测7种修复方案

本文深入解析了在VS Code中使用LangChain开发时,Pylance频繁提示‘无法解析导入’的根本原因——Python解释器与语言服务器的环境路径不一致。文章提供了从基础排查到深度配置的7种实测修复方案,包括切换解释器、配置extraPaths、使用pyrightconfig.json等,旨在帮助开发者彻底解决此问题,提升AI应用开发效率。

weixin_28826521的博客 444

Northwind数据库分析:

<br />存储过程:<br />1。CustOrderHist:<br />CREATE PROCEDURE CustOrderHist @CustomerID nchar(5)<br />AS<br />SELECT ProductName, Total=SUM(Quantity)<br />FROM Products P, [Order Details] OD, Orders O, Customers C<br />WHERE C.CustomerID = @CustomerID<br />AND C

zaizhanfeng的专栏 1767

STM32F030F4P6 ADC多通道定时器触发DMA搬运

主函数中等待转换完成的标志位,然后打印出来。ADC回调函数中将数值赋值给变量。配置定时器1s读一次。

qq_24426625的博客 1355

关联规则数据分析报告模拟实战项目

关联规则分析是一种在大数据集中寻找变量之间关系的方法。在本报告中,我们将通过一个实际案例,使用Python语言和相关库来执行关联规则分析。我们将分析电影数据集,找出电影类型之间的关联性,例如哪些类型的电影经常一起出现。

2302_78287161的博客 1119

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口Java

本篇教程的Java程序中开始使用PostgreSQL之前,需要确保在计算机上设置了PostgreSQL JDBC和Java。您可以检查Java教程以在计算机上安装Java。现在让本篇教程检查如何设置PostgreSQL JDBC驱动程序。

No8g攻城狮的博客 1753

风险登记册vs问题日志:项目经理必须掌握的区别与应用

在项目管理的世界里,风险登记册和问题日志就像是项目经理的两个得力助手。我们的目的就是要搞清楚这两个助手各自的特点、区别以及如何在项目中好好使用它们。范围涵盖了项目从启动到结束的整个过程,无论是小项目还是大项目,都能从对这两个工具的正确使用中受益。我们先会用有趣的故事引出风险登记册和问题日志的概念,然后像给小学生讲故事一样解释它们是什么。接着分析它们之间的关系和区别,再用代码示例模拟它们在项目中的应用,之后介绍实际的应用场景、推荐相关工具和资源,探讨未来的发展趋势和挑战。

项目管理的博客 873

AI仓储货架动态布局优化系统

上开发特别顺畅,它的AI辅助编程能快速生成基础代码框架,内置的3D渲染库直接解决了可视化难题。最惊喜的是部署功能——点击按钮就能把系统发布成在线应用,仓库管理员通过浏览器就能使用,完全不用操心服务器配置。最近在优化公司仓储管理时,发现传统人工规划货架布局存在不少痛点:效率低、容易出错、难以动态调整。现在系统已经帮我们减少了28%的拣货时间,货架空间利用率提升了35%。如果你也有仓储优化需求,不妨试试这种AI+可视化的解决方案,在InsCode上从想法到落地真的比想象中简单很多。

RubyLion56的博客 734

SAP Integration Suite 与 SAP Cloud Integration 的关系解析

SAP Cloud Integration是SAP Integration Suite套件的核心组件,专注于消息与流程集成。两者关系可概括为:Integration Suite是SAP BTP上的集成平台套件(iPaaS),而Cloud Integration是其中负责应用与B2B集成的关键能力。日常所说的"CPI"实际指代的是Integration Suite中的Cloud Integration功能。该套件还包含API管理、事件网格等其他集成能力,共同构成企业集成解决方案。理解这一层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 592

基于Python实现的业务数据分析系统

在开发的时候使用了迭代递增的方式,每次都只完成特定的构件,调试的没有问题,以及完成了一定的扩展性后,再向后进行开发,或者将该构件添加到模块中进行测试,最终一步步地由一个个小的模块搭建出总体的模块。回到python的代码形成列表,再对其进行下一步的处理,结果如下图所示:图5 数据库查询完成 将从数据库查询到的消息经过一定的运算处理后,使用和①一样的方法,将数据发送回客户端,客户端接收到消息后,将数据绘制成图像,如下图所示。封装访问SQS和访问数据库的功能,分别由python和java的语言完成。

毕业作品网站 2536

ClaudeCode入门01-环境安装(小白入门:手把手教你配置,超简单的一种接入方式)

文手把手教你从零搭建 Claude Code 开发环境。针对国内网络现状,我们采用 OpenRouter + Claude Code Router 的方案,支持支付宝/微信充值,无需科学上网即可完成配置。内容涵盖 Node.js 安装(macOS/Windows/Linux)、OpenRouter 注册与充值、Claude Code 和 Router 安装配置,以及一键启动脚本的编写。跟着截图一步步操作,10分钟搞定全部环境!

yueyeguzhuo的专栏 280

用AList挂载网盘,无损看VR电影教程,无需下载到PICO头显本地!

用AList挂载网盘 + WebDAV直连头显,看片像拉本地一样流畅,不怕卡顿、不怕没空间,简直是VR看片刚需配置!别再用U盘传电影了,用AList + WebDAV,直接流畅看4K,看片效率翻倍,体验提升一个档次!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 5541

【转】SQL_Server2000示例数据库NorthWind的分析

表名:Categories(食品类别表) 表结构: 字段名称 数据类型 长度 允许为空 CategoryID(主键) int 4 否 CategoryName nvarchar 15 否 Description ntext   是 Picture image   是 主键:CategoryID 主键约束名称:PK_Categories 关系说明...

weixin_33976072的博客 336

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

NorthWind 数据库表关系图及相关表说明

在SQL SERVER里相应数据库下新建关系图,然后选择相应表,就可以生成上图了。① Categories:种类表相应字段:CategoryID :类型ID;CategoryName:类型名;Description:类型说明;Picture:产品样本② CustomerCustomerDemo:客户统计信息表1相应字段:CustomerID:客户ID;CustomerTypeI

poly00的专栏 6662

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[转] NorthWind 数据库结构说明

① Categories:种类表 相应字段: CategoryID :类型ID; CategoryName:类型名; Description:类型说明; Picture:产品样本 ② CustomerCustomerDemo:客户类型表1 相应字段: CustomerID:客户ID; CustomerTypeID:客户类型ID ③ CustomerDemographics:客户...

weixin_34162629的博客 803

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

二维平面简单A*算法的实现(不理解也能直接用!)

本文是对于二维平面简单A*算法的实现,提取了坐标数据来源相关的内容为接口,能够在不了解A*算法本身的情况下轻松使用~

我不写博客谁写博客之自我提升 356

Northwind数据库设计模板(电子商务)

专题图编号:ylbtechASPNET 1,功能描述 微软官方提供的数据Northwind的(电子商务)建设参考。 2,技术与环境 ...

weixin_33898876的博客 226

数据挖掘实验报告-关联规则算法实验

【摘要】计算机技术和通信技术的迅猛发展将人类社会带入到了信息时代。在最近十几年里,数据库中存储的数据急剧增大。例如,NASA轨道卫星上的地球观测系统EOS每小时会向地面发回50GB的图像数据;世界上最大的数据仓库之一,美国零售商系统Wal-Mart每天会产生2亿左右的交易数据;人类基因组数据库项目已经搜集了数以GB计的人类基因编码数据;大型天文望远镜每年会产生不少于10TB的数据,等等。大

bluenight专栏 1万+

IC库存,低价清仓!!Over 100000 units in stock !!!

IC库存,低价清仓!!Over 100000 units in stock !!!Please contact with me if you have them available .Regards***********************************ShenZhen Fuda Electronic LtdEric LiuT: 86-755-89800951F: 86-755-88

t89800951的专栏 2816

向量数据库:faiss的常用三种数据索引方式(IndexFlatL2,IndexIVFFlat,IndexIVFPQ)的使用和持久化+索引融合的实现及库函数解读

向量数据库:faiss的常用三种数据索引方式(IndexFlatL2,IndexIVFFlat,IndexIVFPQ)的使用和持久化,索引融合的实现及库函数解读

ResumeProject的博客 1万+

自变量是分类变量的线性拟合+哑变量

哑变量 dummy variable(也相当于对数据分类) 何时引入哑变量 顺序变量如(高,中,低)可按比例引入值(如1,3,5) 而分类变量,或连续变量的划分:(如:1-10,11-20,21-30……)则可引入哑变量 引入哑变量后,可以降低De,拟合效果较好引入哑变量后,可以降低D_e,拟合效果较好引入哑变量后,可以降低De​,拟合效果较好 (男,女)⇒(0,1) (男,女)\Rightarrow (0,1) (男,女)⇒(0,1) (春,夏,秋,冬)以冬天为参照D1={1春0其他D2={1夏0其他D3

ResumeProject的博客 3414
上一篇: 曲面的法向量+高斯公式曲面的方向余弦的计算
下一篇: iframe中链接新窗口打开
FakeOccupational
博客等级 码龄6年 2万+粉丝 1727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值