Python虚拟订单数据创建

背景

这篇文章原本应该是刚工作的时候第一次接触到订单的时候就应该要写的,但是一直拖到了现在,这篇文章会带一些Python的pandas代码,主要是对于初步接触订单的入门分析。当然由于数据问题,我就在本地建了一个数据库,并且虚拟了一些订单数据。

环境

在Mac上安装一个MySql
创建一个mysql数据库表并且自己存入一些订单数据,当然这个数据是一些虚拟数据,真实企业的数据还是需要清洗过的。

CREATE TABLE `order_data` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `order_id` varchar(50) DEFAULT NULL COMMENT '订单ID',
  `customer_name` varchar(100) DEFAULT NULL COMMENT '用户名',
  `order_create_time` datetime DEFAULT NULL COMMENT '订单创建时间',
  `total_money` float(20,0) DEFAULT NULL COMMENT '支付总金额',
  `order_status` varchar(20) DEFAULT NULL COMMENT '订单状态',
  `item_num` int DEFAULT NULL COMMENT '件数',
  `lxsj` varchar(20) DEFAULT NULL COMMENT '联系手机',
  `province` varchar(20) DEFAULT NULL COMMENT '省',
  `city` varchar(20) DEFAULT NULL COMMENT '城市',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

创建虚拟订单数据

引用的包和数据库链接

import pandas as pd
import pymysql
import random
import datetime
# 数据库连接配置
config = {
    'host': 'localhost',  # 数据库地址
    'port': 3306,   # 端口号
    'user': 'root',  # 数据库用户名
    'password': '***',  # 数据库密码
    'db': 'data',  # 数据库名称
    'charset': 'utf8mb4',  # 字符集
}

# 连接数据库
db = pymysql.connect(**config)
cursor = db.cursor()

网名生成

# 网上找的网名,做一个网名素材
list_customer = pd.read_csv("***/customer_name_file")
list_customer = list(list_customer['customer_name'].apply(lambda x: x.split('、')[1]))

对应的网名文件大概长这样
在这里插入图片描述

自动生成订单创建时间

# 自动生成订单创建时间
def fun_datatime():
    # 设置日期范围的开始和结束
    start_year = 2022
    end_year = 2023

    # 随机选择一个年份
    random_year = random.randint(start_year, end_year)

    # 随机选择一个月份(1-12)
    random_month = random.randint(1, 12)

    # 确保二月份的天数正确
    if random_month == 2:
        # 如果是闰年,二月份有29天,否则有28天
        if (random_year % 4 == 0 and random_year % 100 != 0) or (random_year % 400 == 0):
            max_day = 29
        else:
            max_day = 28
    else:
        # 其他月份的天数
        max_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][random_month - 1]

    # 随机选择一个天数
    random_day = random.randint(1, max_day)

    # 随机选择小时、分钟和秒(如果你想让它们都是00,可以省略这一步)
    random_hour = random.randint(0, 23)
    random_minute = random.randint(0, 59)
    random_second = random.randint(0, 59)

    # 创建datetime对象
    random_datetime = datetime.datetime(random_year, random_month, random_day, random_hour, random_minute, random_second)

    # 格式化日期时间
    formatted_datetime = random_datetime.strftime("%Y-%m-%d %H:%M:%S")

    return formatted_datetime

订单状态

这边只是模拟,所以就写了两个,正常订单状态会更多。

# 订单状态
order_dataus = ['交易成功', '交易失败']

随机生成手机号

# 随机生成手机号
def generate_phone_number():
    # 第二位数字的选择范围
    second_digit = random.choice([3, 4, 5, 7, 8])

    # 生成剩下的9位随机数字
    remaining_digits = ''.join(str(random.randint(0, 9)) for _ in range(9))

    # 组合成一个11位的手机号
    phone_number = '1' + str(second_digit) + remaining_digits

    return phone_number

随机生成对应的省份和城市

# 随机生成城市和对应省份(正常订单切分可以使用CPCA,亲测好用)
area_data = {
        '北京': ['北京市', '朝阳区', '海淀区', '通州区', '房山区', '丰台区', '昌平区', '大兴区', '顺义区', '西城区', '延庆县', '石景山区', '宣武区', '怀柔区',
               '崇文区', '密云县',
               '东城区', '门头沟区', '平谷区'],
        '广东': ['广东省', '东莞市', '广州市', '中山市', '深圳市', '惠州市', '江门市', '珠海市', '汕头市', '佛山市', '湛江市', '河源市', '肇庆市', '潮州市',
               '清远市', '韶关市', '揭阳市', '阳江市', '云浮市', '茂名市', '梅州市', '汕尾市'],
        '山东': ['山东省', '济南市', '青岛市', '临沂市', '济宁市', '菏泽市', '烟台市', '泰安市', '淄博市', '潍坊市', '日照市', '威海市', '滨州市', '东营市',
               '聊城市', '德州市', '莱芜市', '枣庄市'],
        '江苏': ['江苏省', '苏州市', '徐州市', '盐城市', '无锡市', '南京市', '南通市', '连云港市', '常州市', '扬州市', '镇江市', '淮安市', '泰州市', '宿迁市'],
        '河南': ['河南省', '郑州市', '南阳市', '新乡市', '安阳市', '洛阳市', '信阳市', '平顶山市', '周口市', '商丘市', '开封市', '焦作市', '驻马店市', '濮阳市',
               '三门峡市', '漯河市', '许昌市', '鹤壁市', '济源市'],
        '上海': ['上海市', '松江区', '宝山区', '金山区', '嘉定区', '南汇区', '青浦区', '浦东新区', '奉贤区', '闵行区', '徐汇区', '静安区', '黄浦区', '普陀区',
               '杨浦区', '虹口区', '闸北区', '长宁区', '崇明县', '卢湾区'],
        '河北': ['河北省', '石家庄市', '唐山市', '保定市', '邯郸市', '邢台市', '河北区', '沧州市', '秦皇岛市', '张家口市', '衡水市', '廊坊市', '承德市'],
        '浙江': ['浙江省', '温州市', '宁波市', '杭州市', '台州市', '嘉兴市', '金华市', '湖州市', '绍兴市', '舟山市', '丽水市', '衢州市'],
        '陕西': ['陕西省', '西安市', '咸阳市', '宝鸡市', '汉中市', '渭南市', '安康市', '榆林市', '商洛市', '延安市', '铜川市'],
        '湖南': ['湖南省', '长沙市', '邵阳市', '常德市', '衡阳市', '株洲市', '湘潭市', '永州市', '岳阳市', '怀化市', '郴州市', '娄底市', '益阳市', '张家界市',
               '湘西州'],
        '重庆': ['重庆市', '江北区', '渝北区', '沙坪坝区', '九龙坡区', '万州区', '永川市', '南岸区', '酉阳县', '北碚区', '涪陵区', '秀山县', '巴南区', '渝中区',
               '石柱县', '忠县', '合川市', '大渡口区', '开县', '长寿区', '荣昌县', '云阳县', '梁平县', '潼南县', '江津市', '彭水县', '璧山县', '綦江县',
               '大足县', '黔江区', '巫溪县', '巫山县', '垫江县', '丰都县', '武隆县', '万盛区', '铜梁县', '南川市', '奉节县', '双桥区', '城口县'],
        '福建': ['福建省', '漳州市', '泉州市', '厦门市', '福州市', '莆田市', '宁德市', '三明市', '南平市', '龙岩市'],
        '天津': ['天津市', '和平区', '北辰区', '河北区', '河西区', '西青区', '津南区', '东丽区', '武清区', '宝坻区', '红桥区', '大港区', '汉沽区', '静海县',
               '宁河县', '塘沽区', '蓟县', '南开区', '河东区'],
        '云南': ['云南省', '昆明市', '红河州', '大理州', '文山州', '德宏州', '曲靖市', '昭通市', '楚雄州', '保山市', '玉溪市', '丽江地区', '临沧地区', '思茅地区',
               '西双版纳州', '怒江州', '迪庆州'],
        '四川': ['四川省', '成都市', '绵阳市', '广元市', '达州市', '南充市', '德阳市', '广安市', '阿坝州', '巴中市', '遂宁市', '内江市', '凉山州', '攀枝花市',
               '乐山市', '自贡市', '泸州市', '雅安市', '宜宾市', '资阳市', '眉山市', '甘孜州'],
        '广西': ['广西壮族自治区', '贵港市', '玉林市', '北海市', '南宁市', '柳州市', '桂林市', '梧州市', '钦州市', '来宾市', '河池市', '百色市', '贺州市', '崇左市',
               '防城港市'],
        '安徽': ['安徽省', '芜湖市', '合肥市', '六安市', '宿州市', '阜阳市', '安庆市', '马鞍山市', '蚌埠市', '淮北市', '淮南市', '宣城市', '黄山市', '铜陵市',
               '亳州市', '池州市', '巢湖市', '滁州市'],
        '海南': ['海南省', '三亚市', '海口市', '琼海市', '文昌市', '东方市', '昌江县', '陵水县', '乐东县', '五指山市', '保亭县', '澄迈县', '万宁市', '儋州市',
               '临高县', '白沙县', '定安县', '琼中县', '屯昌县'],
        '江西': ['江西省', '南昌市', '赣州市', '上饶市', '吉安市', '九江市', '新余市', '抚州市', '宜春市', '景德镇市', '萍乡市', '鹰潭市'],
        '湖北': ['湖北省', '武汉市', '宜昌市', '襄樊市', '荆州市', '恩施州', '孝感市', '黄冈市', '十堰市', '咸宁市', '黄石市', '仙桃市', '随州市', '天门市',
               '荆门市', '潜江市', '鄂州市', '神农架林区'],
        '山西': ['山西省', '太原市', '大同市', '运城市', '长治市', '晋城市', '忻州市', '临汾市', '吕梁市', '晋中市', '阳泉市', '朔州市'],
        '辽宁': ['辽宁省', '大连市', '沈阳市', '丹东市', '辽阳市', '葫芦岛市', '锦州市', '朝阳市', '营口市', '鞍山市', '抚顺市', '阜新市', '本溪市', '盘锦市',
               '铁岭市'],
        '台湾': ['台湾省', '台北市', '高雄市', '台中市', '新竹市', '基隆市', '台南市', '嘉义市'],
        '黑龙江': ['黑龙江', '齐齐哈尔市', '哈尔滨市', '大庆市', '佳木斯市', '双鸭山市', '牡丹江市', '鸡西市', '黑河市', '绥化市', '鹤岗市', '伊春市', '大兴安岭地区',
                '七台河市'],
        '内蒙古': ['内蒙古自治区', '赤峰市', '包头市', '通辽市', '呼和浩特市', '乌海市', '鄂尔多斯市', '呼伦贝尔市', '兴安盟', '巴彦淖尔盟', '乌兰察布盟', '锡林郭勒盟',
                '阿拉善盟'],
        '香港': ["香港", "香港特别行政区"],
        '澳门': ['澳门', '澳门特别行政区'],
        '贵州': ['贵州省', '贵阳市', '黔东南州', '黔南州', '遵义市', '黔西南州', '毕节地区', '铜仁地区', '安顺市', '六盘水市'],
        '甘肃': ['甘肃省', '兰州市', '天水市', '庆阳市', '武威市', '酒泉市', '张掖市', '陇南地区', '白银市', '定西地区', '平凉市', '嘉峪关市', '临夏回族自治州',
               '金昌市', '甘南州'],
        '青海': ['青海省', '西宁市', '海西州', '海东地区', '海北州', '果洛州', '玉树州', '黄南藏族自治州'],
        '新疆': ['新疆维吾尔自治区', '乌鲁木齐市', '伊犁州', '昌吉州', '石河子市', '哈密地区', '阿克苏地区', '巴音郭楞州', '喀什地区', '塔城地区', '克拉玛依市',
               '和田地区', '阿勒泰州', '吐鲁番地区', '阿拉尔市', '博尔塔拉州', '五家渠市',
               '克孜勒苏州', '图木舒克市'],
        '西藏': ['西藏区', '拉萨市', '山南地区', '林芝地区', '日喀则地区', '阿里地区', '昌都地区', '那曲地区'],
        '吉林': ['吉林省', '吉林市', '长春市', '白山市', '白城市', '延边州', '松原市', '辽源市', '通化市', '四平市'],
        '宁夏': ['宁夏回族自治区', '银川市', '吴忠市', '中卫市', '石嘴山市', '固原市']
    }
def dun_pro_city(area_data):
    area = random.choice(list(area_data.items()))
    province = area[1][0]
    city = area[1][random.randint(1, len(area[1])-1)]
    return province, city

创建订单号以及生成订单

order_data = []
for i in range(1000):
    area = dun_pro_city(area_data)
    order_data.append(('JD' + str(random.randrange(100000, 999999)), random.choice(list_customer), fun_datatime(),
                       random.randint(300, 5000), random.choice(order_dataus), random.randint(1, 10),
                       generate_phone_number(), area[0], area[1]))

插入订单

# 插入数据的SQL语句
insert_sql = """
INSERT INTO order_data (order_id, customer_name, order_create_time, total_money, order_status, item_num, lxsj, province, city)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""

# 批量插入数据
try:
    cursor.executemany(insert_sql, order_data)
    db.commit()  # 提交事务
    print("订单数据插入成功!")
except Exception as e:
    db.rollback()  # 发生错误则回滚
    print("订单数据插入失败:", e)
finally:
    cursor.close()
    db.close()  # 关闭数据库连接

最终结果

在这里插入图片描述
就此,虚拟订单生成了,如果你还需要其他字段,还可以用这类方式添加后生成字段,我这个主要是为后续分析提供数据。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值