批量提取视频vid,样本如下
vlist = ['x0030wh28ov', 'p0024ht72c2', ..., 'x002483emfm', 'o0024m4oidi', 'n0024mvc1b8']
通过简单观察,可以发现第2、3、4、5位存在明显的递增关系,通过其他手段,可以验证vid和时间存在关系。
现在计划分析vid的一些规律。
字符频率
首先将2、3、4、5位剔除,因为他们有明显的规律,但其他位的字符都是0-9和a-z范围。现在用下面的脚本统计这些字符的信息。
def cc(s):
ac = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
cres = [s.count(c) for c in ac]#统计字符出现次数
cresd = [x-y for x, y in zip(cres, cres[1:])]#相邻字符的差值
print(cres)
print(cresd)
print(sum(cresd))
string = ""
for vid in vlist:
string = string + vid[:1] + vid[5:]
cc(string)
随加入统计的vid增加,对各个字符出现的频率进行统计,绘制曲线,情况如下(共333个vid):
可以发现随着vid的数量越来越多,单个字符的频率稳定在一个值附近,但并不是同一个频率。
这样看起来依然不够直观,在此对每个字符的统计进行拟合,鉴于前面部分的数据属于小样本情况,对拟合可能造成较大误差,所以用于拟合的数据从100个vid之后开始,采用指数函数拟合(a * exp(-b * x) + c)。结果如下:
将x轴起始坐标偏移至1(这个图可能有点问题,但我不想改了)
将x轴起始坐标保持
在原位置拟合结果比较明显,各个字符概率分布情况也比较清晰了。
不过我觉得再增加一定数量vid,现在总vid数量是407,效果如下
将x轴起始坐标偏移至1
将x轴起始坐标保持
可以看到各个字符的频率已经可以认为是稳定了,得到拟合函数的具体系数,得到极限值,就可以认为极限值是字符对应的频率。
完整视角的拟合情况:
将vid看做一个向量,按一定映射关系,计算其长度,下面是样本中vid的分布情况:
横轴也这样计算,分布如下:
即使样本不够多,但可以明显看到的是,vid的长度分布比较均匀,分布在某一个数的前后,横轴亦是如此。
考虑连续的一串数字,比如1-10000,将其每一个数字转为字符串,计算总的距离,下面是距离分布:
如果是y = x^3 + 11 * x^2 + 1.5
这样的函数,结果如下:
可以看到这样的规律性都很强。就这样的结果来看,可以排除数字和vid的映射关系应该不是高次多项式,更不是线性关系。下面再试试其他函数。
比如y = a * cos(b * x) + c * sin(d * x) + e
其中e能使整个函数始终大于0,这个规律性更明显了。
对10进制到16进制的变化,可见整体走势依然和10进制一样。
到这里,我认为原vid的向量长度的样本过少,不足以更全面直观体现它的分布,所以现在先去提取更多的vid。
---分割线---
在多次尝试后,发现随机提取某三个索引,在三维空间中显示出来,发现也是随机分布的,并没有明显特征(如下)。
至此,除了单个字符的出现存在稳定的概率外,没有其他发现。
另外尝试将有着明显时间差的vid进行简单的36进制转换在!7
这么多种情况下,依然不能满足递增的关系。如果说有什么规律,至少不是按某一种进制转换的。
还尝试了将vid按36进制换算后,计算向量长度,结果如下图,样本有限,不过似乎能看出整体分布可能接近三角函数的样子。