大数据微专业_1.Python基础_1.8_商铺数据存取

In [ ]:

'''
【项目01】  商铺数据加载及存储

作业要求:
1、成功读取“商铺数据.csv”文件
2、解析数据,存成列表字典格式:[{'var1':value1,'var2':value2,'var3':values,...},...,{}]
3、数据清洗:
① comment,price两个字段清洗成数字
② 清除字段缺失的数据
③ commentlist拆分成三个字段,并且清洗成数字
4、结果存为.pkl文件

'''

In [10]:

# 读取数据
f = open('商铺数据.csv','r',encoding='utf8')
for i in f.readlines()[:5]:
    print(i.split(',')[2])
    #print(i.split('\n'))
f.seek(0)  # 光标返回第一个字符
comment
我要点评
74                    条点评
265                    条点评
2748                    条点评

In [12]:

# 读取数据
f = open('商铺数据.csv','r',encoding='utf8')
for i in f.readlines()[:5]:
    print(i.split(',')[4])
    #print(i.split('\n'))
f.seek(0)  # 光标返回第一个字符
price
人均                                        ¥125
人均                                        ¥48
人均                                        ¥21
人均                                        ¥142

Out[12]:

0

In [13]:

# 读取数据
f = open('商铺数据.csv','r',encoding='utf8')
for i in f.readlines()[:5]:
    print(i.split(','))
    #print(i.split('\n'))
f.seek(0)  # 光标返回第一个字符
['\ufeffclassify', 'name', 'comment', 'star', 'price', 'address', 'commentlist\n']
['美食', '望蓉城老坛酸菜鱼(合生汇店)', '我要点评', '该商户暂无星级', '人均                                        ¥125', '翔殷路1099号合生汇5F', '口味8.3                                环境8.4                                服务8.5\n']
['美食', '泰国街边料理', '74                    条点评', '准四星商户', '人均                                        ¥48', '黄兴路合生汇B2美食集市内', '口味7.4                                环境7.6                                服务7.4\n']
['美食', '壹面如故(苏宁生活广场店)', '265                    条点评', '准四星商户', '人均                                        ¥21', '邯郸路585号苏宁生活广场B1层', '口味7.0                                环境7.2                                服务7.2\n']
['美食', '鮨谷•Aburiya(合生汇店)', '2748                    条点评', '准五星商户', '人均                                        ¥142', '翔殷路1099号合生广场5楼23、28铺位', '口味8.9                                环境8.5                                服务8.4\n']

Out[13]:

0

In [11]:

# 清洗数据
def fcomment(s):     # 清洗comment这一列
    if '条' in s:
        return(int(s.split(' ')[0]))   # 按照空格分割,如果包含关键词‘条’,则返回第一个字符,比如‘74’
    else:
        return('缺失数据')
f.seek(0)  # 光标返回第一个字符

for i in f.readlines()[:10]:
    cm = fcomment(i.split(',')[2])
    print(cm)
缺失数据
缺失数据
74
265
2748
5
785
3779
458
1280

In [14]:

f.seek(0)  # 光标返回第一个字符

def fprice(s):     # 清洗comment这一列
    if '¥' in s:
        return(int(s.split('¥')[-1]))   # 按照空格分割,如果包含关键词‘条’,则返回第一个字符,比如‘74’
    else:
        return('缺失数据')

for i in f.readlines()[:10]:
    cp = fprice(i.split(',')[4])
    print(cp)
缺失数据
125
48
21
142
缺失数据
24
70
14
47

In [16]:

f.seek(0)
for i in f.readlines()[:10]:
    print(i.split(',')[-1])
commentlist

口味8.3                                环境8.4                                服务8.5

口味7.4                                环境7.6                                服务7.4

口味7.0                                环境7.2                                服务7.2

口味8.9                                环境8.5                                服务8.4

口味7.5                                环境6.8                                服务7.5

口味7.4                                环境7.2                                服务7.2

口味8.6                                环境8.6                                服务8.6

口味7.0                                环境6.5                                服务6.5

口味7.7                                环境7.5                                服务7.6

In [17]:

f.seek(0)
for i in f.readlines()[:10]:
    print(i.split(',')[-1].split('                                '))
['commentlist\n']
['口味8.3', '环境8.4', '服务8.5\n']
['口味7.4', '环境7.6', '服务7.4\n']
['口味7.0', '环境7.2', '服务7.2\n']
['口味8.9', '环境8.5', '服务8.4\n']
['口味7.5', '环境6.8', '服务7.5\n']
['口味7.4', '环境7.2', '服务7.2\n']
['口味8.6', '环境8.6', '服务8.6\n']
['口味7.0', '环境6.5', '服务6.5\n']
['口味7.7', '环境7.5', '服务7.6\n']

In [21]:

f.seek(0)  # 光标返回第一个字符

def fcmlst(s):     # 清洗commentlist这一列,即最后一列
    if len(s) == 3:  # 判断数据长度是否为3,来判断是否为缺失数据
        quality = float(s[0][2:])   #取第一个元素,如'口味8.3',从第3个字符开始
        environment = float(s[1][2:])
        service = float(s[2][2:])
        return([quality,environment,service])
    else:
        return ('缺失数据')

for i in f.readlines()[:10]:
    cl = fcmlst(i.split(',')[-1].split('                                '))
    print(cl)
缺失数据
[8.3, 8.4, 8.5]
[7.4, 7.6, 7.4]
[7.0, 7.2, 7.2]
[8.9, 8.5, 8.4]
[7.5, 6.8, 7.5]
[7.4, 7.2, 7.2]
[8.6, 8.6, 8.6]
[7.0, 6.5, 6.5]
[7.7, 7.5, 7.6]

In [33]:

# 数据清洗

datalist = []
f.seek(0)
n = 0
#for i in f.readlines()[1:20]:  #用从第1行开始读,而不是第0行,因为第0行为数据标头
for i in f.readlines()[1::]:  #用从第1行开始读,而不是第0行,因为第0行为数据标头
    data = i.split(',')
    #print(data)
    classify = data[0]
    name = data[1]
    commentcount = fcomment(data[2])
    star = data[3]
    price = fprice(data[4])
    address = data[5]
    quality = fcmlst(i.split(',')[-1].split('                                '))[0]
    environment = fcmlst(i.split(',')[-1].split('                                '))[1]
    service = fcmlst(i.split(',')[-1].split('                                '))[2]
    #print(commentcount,star,price,address,quality,environment,service)
    if '缺失数据' not in (commentcount,star,price,address,quality,environment,service):
        n += 1
        data_lst2 = [['classification',classify],
                    ['name',name],
                    ['comment_count',commentcount],
                    ['star',star],
                    ['price',price],
                    ['address',address],
                    ['quality',quality],
                    ['environment',environment],
                    ['service',service]]
        #print(data_lst2)
        datalist.append(dict(data_lst2))
        #print('成功读取第%i条数据: '%n)
        print(dict(data_lst2))
    else:
        continue
f.close()
print(datalist)
print('成功加载%i条数据: '%n)
{'classification': '美食', 'name': '泰国街边料理', 'comment_count': 74, 'star': '准四星商户', 'price': 48, 'address': '黄兴路合生汇B2美食集市内', 'quality': 7.4, 'environment': 7.6, 'service': 7.4}
{'classification': '美食', 'name': '壹面如故(苏宁生活广场店)', 'comment_count': 265, 'star': '准四星商户', 'price': 21, 'address': '邯郸路585号苏宁生活广场B1层', 'quality': 7.0, 'environment': 7.2, 'service': 7.2}
{'classification': '美食', 'name': '鮨谷•Aburiya(合生汇店)', 'comment_count': 2748, 'star': '准五星商户', 'price': 142, 'address': '翔殷路1099号合生广场5楼23、28铺位', 'quality': 8.9, 'environment': 8.5, 'service': 8.4}
{'classification': '美食', 'name': '麦当劳(万达店)', 'comment_count': 785, 'star': '准四星商户', 'price': 24, 'address': '邯郸路600号万达商业广场B1楼A05号铺', 'quality': 7.4, 'environment': 7.2, 'service': 7.2}
{'classification': '美食', 'name': '蒸年青STEAMYOUNG(百联又一城购物中心店)', 'comment_count': 3779, 'star': '准五星商户', 'price': 70, 'address': '淞沪路8号百联又一城购物中心7层', 'quality': 8.6, 'environment': 8.6, 'service': 8.6}
{'classification': '美食', 'name': '丸来玩趣(百联又一城购物中心店)', 'comment_count': 458, 'star': '准四星商户', 'price': 14, 'address': '淞沪路8号百联又一城购物中心B1层', 'quality': 7.0, 'environment': 6.5, 'service': 6.5}
{'classification': '美食', 'name': '韩国雪冰(合生汇店)', 'comment_count': 1280, 'star': '四星商户', 'price': 47, 'address': '翔殷路1099号合生汇4F', 'quality': 7.7, 'environment': 7.5, 'service': 7.6}
{'classification': '美食', 'name': '小菜园新徽菜(五角场万达广场店)', 'comment_count': 85, 'star': '准五星商户', 'price': 81, 'address': '邯郸路600号万达商业广场特力时尚汇3层', 'quality': 8.5, 'environment': 8.9, 'service': 9.0}
{'classification': '美食', 'name': '阿满鸡排(合生汇店)', 'comment_count': 30, 'star': '四星商户', 'price': 17, 'address': '翔殷路1099号合生汇4层', 'quality': 7.9, 'environment': 8.0, 'service': 7.7}
......
成功加载560条数据: 

In [42]:

import pickle
pic = open('商铺数据.csv','wb')
pickle.dump(datalist,pic)
pic.close()
print('complete')
complete
上一篇:自己写一个flutter插件


下一篇:雨课堂知识点总结(三)