1 背景
现在已经通过爬虫将所有商家首页的图片下载ok,但给导师汇报总的有个基本的结论吧,也就是说,多少文件夹没有图片,分为big和rec,两者任一为空有多少?均为空多少?平均每个文件夹有多少图片?这就需要去统计一波了!
2 整体思路
- 通过循环遍历每一个文件夹
- 获取一个文件夹下面所有文件的名称,然后如果出现rec或者big分别进行计数,所以一开始定义为0
- 每一个循环形成一个DataFrame 放到list 最后进行一个concat 大功告成
3 读入所有文件夹
import os
all_folds = os.listdir('702个美团商户上传图片/')
all_folds = [x for x in all_folds if '.' not in x]
print(len(all_folds))
all_folds[:5]
702
['150569726', '163443323', '177474079', '68654281', '178086221']
4 读每个文件夹下面图片
import pandas as pd
import time
data_need = []
t0 = time.time()
for i in range(len(all_folds)):
print('正在统计第 %d 个文件夹' % (i+1))
path = all_folds[i]
all_files = os.listdir(path)
big_num = 0
rec_num = 0
for j in all_files:
if 'big' in j:
big_num += 1
elif 'rec' in j:
rec_num += 1
else:
pass
y = pd.DataFrame({'mer_id': all_folds[i],
'big_num': [big_num],
'rec_num': [rec_num]})
data_need.append(y)
data_final = pd.concat(data_need, axis=0)
t1= time.time()
print('所有文件夹统计完毕,花费时间为 %.2f s' % (t1 - t0))
正在统计第 1 个文件夹
正在统计第 2 个文件夹
正在统计第 3 个文件夹
正在统计第 4 个文件夹
正在统计第 5 个文件夹
......
正在统计第 698 个文件夹
正在统计第 699 个文件夹
正在统计第 700 个文件夹
正在统计第 701 个文件夹
正在统计第 702 个文件夹
所有文件夹统计完毕,花费时间为 0.62 s
data_final.index = range(len(data_final))
print(data_final.shape)
data_final.head()
(702, 3)
| mer_id | big_num | rec_num |
---|
0 | 150569726 | 5 | 6 |
---|
1 | 163443323 | 2 | 6 |
---|
2 | 177474079 | 5 | 6 |
---|
3 | 68654281 | 2 | 0 |
---|
4 | 178086221 | 0 | 4 |
---|
data_final.head(10)
| mer_id | big_num | rec_num |
---|
0 | 150569726 | 5 | 6 |
---|
1 | 163443323 | 2 | 6 |
---|
2 | 177474079 | 5 | 6 |
---|
3 | 68654281 | 2 | 0 |
---|
4 | 178086221 | 0 | 4 |
---|
5 | 95463330 | 0 | 0 |
---|
6 | 50333471 | 0 | 0 |
---|
7 | 4984182 | 2 | 0 |
---|
8 | 182596141 | 1 | 0 |
---|
9 | 4438304 | 3 | 6 |
---|
4.1 判断空文件夹有多少个
思路:
- 使用map函数(配合使用lambda匿名函数),先定义一个函数(如果两项为0 则返回0)
def f(x,y):
if x == y == 0:
return 0
else:
return 1
data_final['count_0_0'] = data_final.index.map(lambda x: f(data_final['big_num'][x], data_final['rec_num'][x]))
data_final.head(10)
| mer_id | big_num | rec_num | count_0_0 |
---|
0 | 150569726 | 5 | 6 | 1 |
---|
1 | 163443323 | 2 | 6 | 1 |
---|
2 | 177474079 | 5 | 6 | 1 |
---|
3 | 68654281 | 2 | 0 | 1 |
---|
4 | 178086221 | 0 | 4 | 1 |
---|
5 | 95463330 | 0 | 0 | 0 |
---|
6 | 50333471 | 0 | 0 | 0 |
---|
7 | 4984182 | 2 | 0 | 1 |
---|
8 | 182596141 | 1 | 0 | 1 |
---|
9 | 4438304 | 3 | 6 | 1 |
---|
df_0_0 = data_final[data_final['count_0_0']==0]
print(df_0_0.shape)
(140, 4)
5 看每个文件夹平均有多少张图片
data_final['total'] = data_final['big_num'] + data_final['rec_num']
data_final['total'].describe()
count 702.000000
mean 6.200855
std 4.306827
min 0.000000
25% 2.000000
50% 8.000000
75% 11.000000
max 11.000000
Name: total, dtype: float64
6 数据筛选
6.1 筛选出big_num为0的 然后去检查一下
big_0 = data_final[data_final['big_num'] == 0]
print(big_0.shape)
big_0.head()
(176, 5)
| mer_id | big_num | rec_num | count_0_0 | total |
---|
4 | 178086221 | 0 | 4 | 1 | 4 |
---|
5 | 95463330 | 0 | 0 | 0 | 0 |
---|
6 | 50333471 | 0 | 0 | 0 | 0 |
---|
10 | 179178989 | 0 | 0 | 0 | 0 |
---|
15 | 154048692 | 0 | 0 | 0 | 0 |
---|
6.2 筛选出rec_num为0的 然后去检查一下
rec_0 = data_final[data_final['rec_num'] == 0]
print(rec_0.shape)
rec_0.head()
(226, 5)
| mer_id | big_num | rec_num | count_0_0 | total |
---|
3 | 68654281 | 2 | 0 | 1 | 2 |
---|
5 | 95463330 | 0 | 0 | 0 | 0 |
---|
6 | 50333471 | 0 | 0 | 0 | 0 |
---|
7 | 4984182 | 2 | 0 | 1 | 2 |
---|
8 | 182596141 | 1 | 0 | 1 | 1 |
---|
检查思路:
- 通过将上述id与原有数据匹配,selenium到每一个网址,肉眼判断是否有漏的!
7 结论
数据概况:
- 总共有702个文件夹,即有702个商户。
- 有176个商户没有大图
- 有226个商户没有推荐菜
- 有140个商户没有大图也没有推荐菜
- 平均每个文件夹有6张图片,一个文件夹下图片最多的有11张!