如何使用数据库表(mysql)中的信息创建绘图?因此,对于x轴,我想使用id
列,对于y轴,我想使用items in cart(number)
。如果它提供了我想要的结果,您可以根据需要使用任何库。现在我的情节(我附上照片)在x标签上它给出了500(0,500,1000等)的间隔,但我想有ids(1,2,3,4,... 3024)和y标签我想看看购物车中的物品。我附上了代码。我将不胜感激。
import pymysql
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
conn = pymysql.connect(host='localhost', user='root', passwd='', db='amazon_cart')
cur = conn.cursor()
x = cur.execute("SELECT `id`,`items in cart(number)`,`product title` FROM `csv_9_05`")
plt.xlabel('Product Id')
plt.ylabel('Items in cart(number)')
rows = cur.fetchall()
df = pd.DataFrame([[xy for xy in x] for x in rows])
x=df[0]
y=df[1]
plt.bar(x,y)
plt.show()
cur.close()
conn.close()
表格的SQL
DROP TABLE IF EXISTS `csv_9_05`;
CREATE TABLE IF NOT EXISTS `csv_9_05` (
`id` int(50) NOT NULL AUTO_INCREMENT,
`product title` varchar(2040) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`product price` varchar(55) NOT NULL,
`items in cart` varchar(2020) DEFAULT NULL,
`items in cart(number)` varchar(50) DEFAULT NULL,
`link` varchar(2024) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3025 DEFAULT CHARSET=latin1;
答案 0 :(得分:1)
嗯......我认为重建数据库会让你的事情变得更轻松。鉴于您在此提供的架构,我建议增加您拥有的表的数量并进行一些连接。此外,整数值的数据类型(购物车中的商品数量)应为varchar
,而不是id
。您的表格字段名称中不应包含空格,我不确定为什么产品cart
和cursor = conn.cursor(pymysql.cursors.DictCursor)
x = cur.execute("SELECT `id`,`items in cart(number)`,`product title` FROM `csv_9_05`")
中的产品数量为1对1关系。
但这是一个单独的问题。只是重建这个数据库可能比你要问的具体任务要多得多。你真的应该重新格式化你的数据库,如果你对如何有疑问,请告诉我。但是现在我将尝试根据您当前的配置回答您的问题。
我对熊猫并不是非常精通,所以我会在没有使用该模块的情况下回答这个问题。
如果您将光标声明为:
rows = cursor.fetchall()
# this will produce the following list:
# rows = [
# {'id': 1, 'items in cart(number)': 12, 'product_title': 'hammer'},
# {'id': 2, 'items in cart(number)': 5, 'product_title': 'nails'},
# {...},
# {'id': 3024, 'items in cart(number)': 31, 'product_title': 'watermelons'}
# ]
然后您的行将作为3024个字典的列表返回,即:
plt.figure(1)
plt.bar([x['id'] for x in rows], [y['items in cart(number)'] for y in rows])
plt.xlabel('Product Id')
plt.ylabel('Items in cart(number)')
plt.show()
plt.close()
然后,绘图变得非常容易。
toLocaleLowerCase
我认为应该这样做。