统计每个文件夹各类图片个数
- 1 背景
- 2 整体思路
- 3 读入所有文件夹
- 4 读每个文件夹下面图片
- 5 看每个文件夹平均有多少张图片
- 6 数据筛选
- 6.1 筛选出big_num为0的 然后去检查一下
- 6.2 筛选出rec_num为0的 然后去检查一下
- 7 结论
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张!