如何使用mysql表中的信息创建BAR图表?

时间:2018-06-14 10:06:39

标签: python mysql plot

如何使用数据库表(mysql)中的信息创建绘图?因此,对于x轴,我想使用id列,对于y轴,我想使用items in cart(number)。如果它提供了我想要的结果,您可以根据需要使用任何库。现在我的情节(我附上照片)在x标签上它给出了500(0,500,1000等)的间隔,但我想有ids(1,2,3,4,... 3024)和y标签我想看看购物车中的物品。我附上了代码。我将不胜感激。

enter image description here

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;

1 个答案:

答案 0 :(得分:1)

嗯......我认为重建数据库会让你的事情变得更轻松。鉴于您在此提供的架构,我建议增加您拥有的表的数量并进行一些连接。此外,整数值的数据类型(购物车中的商品数量)应为varchar,而不是id。您的表格字段名称中不应包含空格,我不确定为什么产品cartcursor = 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

我认为应该这样做。