在学习数据分析时,数据的获取一般是个问题,为了获取自己需要的特定数据,就会涉及到使用代码进行数据创建。普通的浮点型、或者整型数据使用随机数工具库就可以生成,而中文数据的构造难度就要高一些,一般都是从文字库里随机遍历提取,但是中文名字数据又会有一些新的难题,比如姓氏和名字的排列,这种一般是需要设置姓氏库和名字库,然后再进行组合。这种操作虽然满足需求但是构造过程比较复杂。
虚拟数据库
为了解决这个问题最近在对deepseek发起提问以后发现了faker这个库,顾名思义就是创建虚拟数据的,当然他的强大不仅仅在于可以生成虚拟中文名字,还可以生成包括具体住址等其他中午呢数据,完整代码如下:
import pandas as pd
from faker import Faker
import random
# 初始化中文假数据生成器
fake = Faker('zh_CN')
# 设置随机种子保证可重复性
random.seed(42)
Faker.seed(42)
# 创建空数据集
data = {
'姓名': [],
'年龄': [],
'年级': [],
'成绩': [],
'住址': []
}
# 生成200条记录
for _ in range(200):
data['姓名'].append(fake.name())
data['年龄'].append(random.randint(12, 18)) # 年龄范围12-18岁
data['年级'].append(random.choice(['初一', '初二', '初三', '高一', '高二', '高三']))
data['成绩'].append(random.randint(40, 100)) # 成绩范围40-100分
# 生成地址并清理格式
address = f"{fake.province()}{fake.city_suffix()}{fake.district()}" \
f"{fake.street_name()}{random.randint(1, 999)}号"
data['住址'].append(address)
# 创建DataFrame
df = pd.DataFrame(data)
# 保存到CSV文件(使用utf-8-sig编码解决中文乱码问题)
df.to_csv('班级数据.csv', index=False, encoding='utf-8-sig')
安装方法
pip install pandas faker
代码结果
姓名 年龄 年级 成绩 住址
0 王丹 17 初一 41 福建省市海港关岭街760号
1 王俊 14 初二 54 浙江省市长寿拉萨路143号
2 徐萍 17 初一 83 北京市市房山陈街759号
3 李春梅 16 初一 77 河北省县六枝特熊路433号
4 栾淑珍 12 初一 45 山西省县清浦石家庄街224号
可以看到生成的虚拟名字是完全符合中文的名字逻辑的,姓名的排列都合乎规范,并且这个工具库还可以生成虚拟的住址,效果也很不错,可以具体到号。
如果感觉这个住址比较长,还可以将住址代码简化到省,如下(最后一行):
# 生成200条记录
for _ in range(200):
data['姓名'].append(fake.name())
data['年龄'].append(random.randint(12, 18))
data['年级'].append(random.choice(['初一', '初二', '初三', '高一', '高二', '高三']))
data['成绩'].append(random.randint(40, 100))
data['住址'].append(fake.province()) # 直接获取省份/直辖市
姓名 年龄 年级 成绩 住址
0 王丹 17 初一 41 福建省
1 李旭 17 初三 55 山西省
2 王俊 13 初二 87 浙江省
3 林杰 12 高三 87 山东省
4 刘萍 16 初一 77 北京市
这样生成的结果就要简化一些。
我的这个代码主要是生成一份班级数据,如果有其他需求可以自己进行修改,或者去问一下deepseek,如果代码有运行问题也欢迎大家在评论区留言告知我。