用mysql创建一个数据库,模拟一张商品销量表,表字段和内容需求(需求不一定很明确,逻辑严谨是重点,mysql安装在自己电脑的vmware虚拟机中,虚拟机系统建议ubuntu):
商品ID(模拟1000个商品)、商品卖出时间(建议2014-01-01 00:00:00:00到2015-03-01 00:00:00:00,间隔random(0,10)秒递增)、卖出价格(建议random(20-30)次变一下,成交记录价格,价格变动可以随机在random(100-150))
用python模拟生成数据,数据总量要求达到百万级
注意点:1.生成数据时,主要是先生成卖出时间的数据,因为pandas表格生成每一行都要有数据。时间数据随机变动为不确定数据量。
2.存入mysql时,如果直接存入数据,因为数据量大导致速度较慢。可以先生成txt文件,使用navicat手动导入mysql,再导出.sql文件,以提升速度
1.代码
import pandas as pd
import numpy as np
import random
import datetime
import pymysql
class Shop(object):
def __init__(self):
self.ID, self.sellTime, self.sellPrice, self.dealPrice = self.csv()
self.mysql(self.ID, self.sellTime, self.sellPrice, self.dealPrice)
def csv(self):
'''生成csv表
returns:
表的字段:id号, 卖出时间, 卖出价格, 成交价格
'''
table = pd.DataFrame(columns = ['id', 'sellTime', 'sellPrice', 'dealPrice'])
#生成卖出时间
start = '2014-01-01 00:00:00'
end = '2014-01-30 00:00:00'
#设置时间戳
datestart = datetime.datetime.strptime(start, '%Y-%m-%d %H:%M:%S')
dateend = datetime.datetime.strptime(end, '%Y-%m-%d %H:%M:%S')
sellTime = []
while datestart < dateend:
datestart += datetime.timedelta(seconds = random.randint(0, 10)) #秒数0-10随机增加
sellTime.append(datestart.strftime('%Y-%m-%d %H:%M:%S'))
#添加时间数据
table['sellTime'] = sellTime
#id字段
ID = np.arange(0, len(sellTime))
table['id'] = ID
#添加卖出价格数据
sellPrice = []
for i in range(0, len(sellTime)):
sellPrice.append(random.randint(20, 30))
table['sellPrice'] = sellPrice
#添加成交价格数据
dealPrice = []
for i in range(0, len(sellTime)):
dealPrice.append(random.randint(100, 150))
table['dealPrice'] = dealPrice
return table['id'], table['sellTime'], table['sellPrice'], table['dealPrice']
def mysql(self, ID, sellTime, sellPrice, dealPrice):
'''数据存入mysql数据
args:
ID
sellTime:卖出时间
sellPrice:卖出价格
dealPrice:成交价格
'''
host = 'localhost' #连接名
port = 3306 #端口号
user = 'root' #用户名
passwd = 'a' #用户密码
db = 'shop' #数据库名
conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db, charset='utf8')
cur = conn.cursor()
#循环每一行数据,循环一条存入一条数据
for i in range(0, len(self.ID)):
sId = self.ID[i]
sSelltime = self.sellTime[i]
sSellprice = self.sellPrice[i]
sDealprice = self.dealPrice[i]
try:
insertSql = "insert into sell1(id,selltime,sellprice,dealprice) values(%s,%s,%s,%s)"
#转换数据类型
sellSql=(str(sId), str(sSelltime), str(sSellprice), str(sDealprice))
cur.execute(insertSql, sellSql)
conn.commit()
except Exception as e:
print(e)
conn.rollback()
cur.close()
conn.close()
print('mysql写入完成')
'''
#数据导出csv文件再转为txt文件
table.to_csv('table.csv',index=False)
#转为txt格式
data = pd.read_csv('table.csv')
with open('table.txt','a+') as f:
for line in data.values:
f.write((str(line[0])+'\t'+str(line[1])+'\t'+
str(line[2])+'\t'+str(line[3])+'\t'+'\n'))
'''
if __name__=='__main__':
Shop()
2.直接把数据存入windows下的mysql中
2.1.把txt文件数据导入navicat对应的数据表中,再导出sql文件数据
3.在linux的mysql中创建对应表(使用相同的数据库名和表名表结构)
mysql -u 用户名 -p 数据库名 < 数据库名.sql