前言:
上两篇博客我们讲解了,关于数据构造框架Faker的使用一届各个属性的构造方法。今天我们就来使用Faker来进行生成数据并保存到CSV文件中,使用。
承诺:本篇博客承诺,所展示代码复制立马能用。无套路
1、ID生成问题解决
我们上两篇文章虽然讲述了Faker的使用,但是Faker虽然强大,但是好像也有一个缺陷。没有ID的生成方法。我们知道,无论任何数据但凡是结构化的,都有一个主码ID,它是这一条数据的唯一性标识。但是我好像发现Faker中没有ID的生成方法。因此为了解决这一缺陷,我在使用Faker框架的同时也写出了ID构造的方法。
废话不多说,直接上代码,每一个函数我都做了详细的说明。相信只要是有点编程技术的人都能看懂。
1、ID生成函数
def Generate_ID(num):
'''
1、生成ID递增的数据,以baseHead为数据前半部分,自定义的selfAdd递增的为尾部数据
2、两者合并为一个string类型的数据,存入IDlist中备用
:param num:要生成的数据个数
:return: 返回num个数据list形式
'''
BaseHead = "65010000001190000001022017121910051599983015"
IDlist = []
for i in range(num):
selfAdd = 1001
selfAdd = selfAdd + i
result = BaseHead + str(selfAdd)
IDlist.append(result)
# print(IDlist)
return IDlist
'''最终ID 例子 650100000011900000010220171219100515999830151001'''
以上的代码是对于ID生成函数的编写。BaseHead是基础,selfAdd师动态变化的。然后两者合并。
2、数据生成完整版 (复制即可用)
# coding:utf8
from faker import Faker
import random
import datetime
import pandas as pd
'''
引入faker库来生成随机假数数据
faker 对于中文 地址 姓名 颜色 时间等等之类的数据构造有很好的支持
Faker 对于ID的构造没有很好的支持
'''
# zh_CN 为中文数据
faker = Faker("zh_CN")
def Generate_ID(num):
'''
1、生成ID递增的数据,以baseHead为数据前半部分,自定义的selfAdd递增的为尾部数据
2、两者合并为一个string类型的数据,存入IDlist中备用
:param num:要生成的数据个数
:return: 返回num个数据list形式
'''
BaseHead = "65010000001190000001022017121910051599983015"
IDlist = []
for i in range(num):
selfAdd = 1001
selfAdd = selfAdd + i
result = BaseHead + str(selfAdd)
IDlist.append(result)
# print(IDlist)
return IDlist
#------------------------------以上是生成ID的方法------------------------------------------
def Generate_oteher_data(IDlist, num):
'''
1、以IDlist中的数据作为第一列数据
2、以Faker框架随机生成其他数据
3、两者最终合并存入一一对应的列表中
:param IDlist: 上个函数写好的ID数据
:param num: 要生成的数据个数
:return: 最终数据,包含各个属性
'''
otherDatalist = []
for i in range(num):
name = faker.name()
phone = faker.phone_number()
address = faker.address()
country = faker.country()
cityName = faker.city_name()
province = faker.province()
date = faker.date()
otherDatalist.append([IDlist[i], name, phone, address, country, cityName, province, date])
# print(otherDatalist)
return otherDatalist
def gettime():
'''
:return: 当前时间的规范形式
'''
now_time = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S')
return now_time
def dataMerager_toCSV(otherDatalist):
'''
1、定义好列名
2、列名与 数据内容合并
3、使用pandas框架生成CSV文件
:param otherDatalist: 数据内容
:return: 数据生成CSV文件
'''
outputfile = 'data/测试数据' + gettime() + '.csv'
# 定义列名
columns = ['ID', 'name', 'phone', 'address', 'country', 'cityName', 'province', 'date']
Data = []
Data.append(columns)
Data.extend(otherDatalist) # 合并列名与数据
# print(Data)
# 生成csv数据文件
dataframe = pd.DataFrame(Data)
dataframe.to_csv(outputfile, encoding='utf-8', index=False, header=0)
if __name__ == '__main__':
# 生成1000条数据
Data = Generate_oteher_data(Generate_ID(1000), 1000)
dataMerager_toCSV(Data)
注意:不要忘了在你的Python项目结构中添加一个名字叫data的文件夹。
3、数据样例显示。使用jupyter notebook
import pandas as pd
df = pd.read_csv('./测试数据2020-11-23 17-11-55.csv')
df.head(1000)
数据是不是很“真”呀?有问题可留言,看到必回复。