如何准备 SQL 数据以便与 TransactionEncoder 一起使用

问题描述 投票:0回答:2

我一直在尝试将一些事务数据从 DB2 SQL 表导入到 Python 中,以便使用 mlxtend。我需要使用 TransactionEncoder 将其转换为正确的形式,但我似乎找不到正确的数据格式以使其工作。

我发现的所有示例似乎都使用 csv 或少量手工编码的行来创建数据集,但这对于我将使用的数据来说是不可行的。我有一个以逗号分隔的每个客户的项目列表,但无论我在 Python 中如何格式化它,我似乎都会在 TransactionEncoder 期间收到“TypeError: 'int' object is not iterable”错误。这就是我现在所在的地方;

import pandas as pd
import pyodbc
import getpass
from mlxtend.preprocessing import TransactionEncoder


#Create dataset
 
odbc_dsn = 'ABCDEF'
db_user = input("Enter database username: ")

 # Create connection object
conn = pyodbc.connect(DSN = odbc_dsn,
    UID = db_user,
    PWD = getpass.getpass("Enter database password: "))

 # Run query and store output in variable 'd'
d = pd.read_sql_query(sql = "SELECT * FROM SUP.SJC_PYTHON_CROSSPURCH ORDER BY COMBO_COUNT DESC;",
                       con = conn)

 # Closes the connection
conn.close()
print(d)

df4 = d["COMBO_VARIABLE_AGG"].str.split(", ", n = -1, expand = True)
print (df4)

dataset = df4
#dataset2 = [['Milk', 'Eggs', 'Bread'],
#['Milk', 'Eggs'],
#['Milk', 'Bread'],
#['Eggs', 'Apple']]
#print(dataset2)

#Transpose and 1-Hot

te = TransactionEncoder()
te_array = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_array, columns=te.columns_)
print(df)

#FP_Growth
from mlxtend.frequent_patterns import fpgrowth
frequent_itemsets_fp=fpgrowth(df, min_support=0.01, use_colnames=True)
#print(frequent_itemsets_fp)

#Association Rules
from mlxtend.frequent_patterns import association_rules
rules_fp = association_rules(frequent_itemsets_fp, metric="confidence", min_threshold=0.8)

牛奶/鸡蛋/面包部分来自原始示例,适用于下面的内容。我猜人们必须以这种方式通过 Python 使用 SQL 数据,所以希望有人能够为我指明正确的方向(如果你不知道,我对 Python 还很陌生)。

谢谢

python sql
2个回答
0
投票

以防万一其他人也有类似的问题,我想我设法解决了这个问题(在花了一些时间实际学习 Python 的基础知识之后)。看来我需要将字符串列(它们是用逗号分隔的项目列表)转换为列表列表。我首先将每一行中的字符串变成一个列表;

df4=d["COMBO_VARIABLE_AGG"].str.split(', ')

(这在“conn.close()”之后) 然后我把这一列列表变成了一个大列表;

df4=(df4.tolist())

我不确定这是否是可接受的方法,但下面的其余代码现在可以工作。


0
投票

我很高兴您找到了解决此问题的方法。我试图做同样的事情并发现了你的答案。谢谢!!

© www.soinside.com 2019 - 2024. All rights reserved.