要求:
1、成功读取“商铺数据.csv”文件
2、解析数据,存成列表字典格式:[{‘var1’:value1,‘var2’:value2,‘var3’:values,…},…,{}]
3、数据清洗:
① comment,price两个字段清洗成数字
② 清除字段缺失的数据
③ commentlist拆分成三个字段,并且清洗成数字
4、结果存为.pkl文件
第二条和3.2(清除字段缺失的数据)的完成建立在3.1和3.3的基础之上,故此,先做3.1和3.2
一、数据清洗
import csv # 读取csv文件
import pickle # 写入.pkl
# 3.1清洗评论数据
def cleanComment(c):
if '条' in c:
return int(c.split()[0])
else:
return '缺失数据'
# 3.1清洗价格数据
def cleanPrice(p):
if '¥' in p:
return int(p.split('¥')[-1])
else:
return '缺失数据'
# 3.3清洗commentlist
def cleanCommentlist(cl):
# 去除仅有空格的字符
if ('' in cl) and (cl.__len__() > 1):
taste = float(cl.split()[0][2:])
environment = float(cl.split()[1][2:])
service = float(cl.split()[2][2:])
return [taste, environment, service]
else:
return '缺失数据'
二、“商铺数据.csv”文件处理
- 成功读取“商铺数据.csv”文件
- 解析数据,存成列表字典格式
- 清除字段缺失的数据
data_list = [] # 解析数据,存成列表字典
with open('D:\商户数据.csv', mode='r', encoding='UTF-8') as data:
readers = list(csv.reader(data))
header = readers[:1][0] # 提取出表头
content = readers[1:] # 提取出数据内容
# 清洗数据
for con in content:
commentCount = cleanComment(con[2]) # 提取评论数量
perCapita = cleanPrice(con[4]) # 提取人均
tasteMark = cleanCommentlist(con[6])[0] # 提取口味评分
environmentMark = cleanCommentlist(con[6])[1] # 提取环境评分
serviceMark = cleanCommentlist(con[6])[-1] # 提取服务评分
# 判断是否缺失数据
if '缺失数据' not in [commentCount, perCapita, tasteMark]:
dict_re = [
[header[0], con[0]], # 分类
[header[1], con[1]], # 店名
[header[2], commentCount], # 评论数量
[header[3], con[3]], # 星级
[header[4], perCapita], # 人均价格
[header[5], con[5]], # 地址
['taste_mark', tasteMark], # 口味评分
['environment_mark', environmentMark], # 环境评分
['service_mark', serviceMark] # 服务评分
]
data_list.append(dict(dict_re)) # 生成字典,并存入列表
else:
continue
三、存为.pkl文件
windows系统,斜杠方向只能是’/’,而不能是’’,否则会报错。其他的系统没有测试!
# 注意,输出的文件路径的斜杠方向
with open('D:/result.pkl', 'wb') as wb:
pickle.dump(data_list, wb)
print('完成!')
四、验证存储为pkl文件的效果
# 因为是二进制数据,读取使用'rb'
with open('D:/result.pkl', 'rb') as op:
data = pickle.load(op)
print(data)
读出的效果:
截取一段,看效果
[{’\ufeffclassify’: ‘美食’, ‘name’: ‘泰国街边料理’, ‘comment’: 74, ‘star’: ‘准四星商户’, ‘price’: 48, ‘address’: ‘黄兴路合生汇B2美食集市内’, ‘taste_mark’: 7.4, ‘environment_mark’: 7.6, ‘service_mark’: 7.4},
{’\ufeffclassify’: ‘美食’, ‘name’: ‘壹面如故(苏宁生活广场店)’, ‘comment’: 265, ‘star’: ‘准四星商户’, ‘price’: 21, ‘address’: ‘邯郸路585号苏宁生活广场B1层’, ‘taste_mark’: 7.0, ‘environment_mark’: 7.2, ‘service_mark’: 7.2},
{’\ufeffclassify’: ‘美食’, ‘name’: ‘鮨谷•Aburiya(合生汇店)’, ‘comment’: 2748, ‘star’: ‘准五星商户’, ‘price’: 142, ‘address’: ‘翔殷路1099号合生广场5楼23、28铺位’, ‘taste_mark’: 8.9, ‘environment_mark’: 8.5, ‘service_mark’: 8.4}]
(本文完!转载需说明出处,复本文链接!)