Python3 -- 数据科学初探

【作者:0han 未经授权请勿转载】

前面看了一篇文章,"非诚勿扰"的数学分析 很有意思的一个问题,来源于著名的“秘书问题”:要聘请一名秘书,有 n 个应聘者。每次面试一人,面试后就要及时决定是否聘他,如果当时决定不聘他,他便不会回来。面试后总能清楚了解应聘者的合适程度,并能和之前的每个人做比较。问什么样的策略,才使最佳人选被选中的概率最大。

文章通过类似的微软面试题切入,通过计算得出了37法则,适用于恋爱中的男性女性理性地挑选另一半,适用的策略结论是:

  • 拒绝前M=N/e或者N/e+1个追求者,当其后的追求者比前M个追求者更适合则接受,否则拒绝。
  • N是追求者总数
  • e是自然对数底数,约等于2.718281828...
    很明显,追求者总数很难确认,但这是一个数学问题,作者在最后通过计算机做了一个频数分布,验证了这个n/e的公式在真实random选择中的作用,但并没有讲明算法。所以通过重写这个验证程序,可以感受使用python进行数据科学学习的美妙

拓展库只需要pygal,pip3 install就可以了,这是个数据可视化库
主算法:
e=math.e#import math库获取自然对数底数e的值 initial=[]#初始数组 N=input("Input N:")#用户输入总数N,比如30个求偶者N就=30 for k in range(int(N)):#根据用户的输入创建一个数组准备分配这些可排列的数字 initial.append(k+1)#create an array called initial includes int numbers from 1 to n def run(n):#主函数 results_distribution=[] for i in range(n): random.shuffle(initial) M=round(float(N)/e) P=initial[M-1]#in python programming, the index of arry start from 0 before_array=[] Max_before_P=None final_choose=None for j in range(M): before_array.append(initial[j]) Max_before_P=max(before_array)#find the Max number in the range [1,P] for b in range(M,len(initial)-1):#set a range from the position of P (which is M-1) to the end N if initial[b]>=Max_before_P:#if any number in the range[M-1,N] bigger than before, final_choose=initial[b]#pick it, assign to final_choose var else:#if not, means 10 occurs before the position of P, choose the last one. final_choose=initial[len(initial)-1] results_distribution.append(final_choose) return results_distribution

数据可视化:
fre_dis= pygal.Bar() res=run(100000)#repeat 1000 times frequencies = frequencies(res) fre_dis.add('distribution', frequencies) # add the frequencies fre_dis.x_labels=map(str, range(1,int(N)+1)) fre_dis.x_title = 'Results' fre_dis.y_title = 'Frequency' fre_dis.title = 'Distribution of each size of diamond' fre_dis.render_to_file('bar_chart.svg')

完整代码可以在github找我

最后的效果如下,程序跑10000遍随机生成的数组,包含了30个元素的等差数列,按照策略,放弃30/e约等于11的“炮灰”,第12个人开始好好选,只要有比前11个好的,就选其,如果都没有的话就选最后一个,30号(最好的男人)被选中的概率确实高:

Screen Shot 2017-05-25 at 9.59.13 pm.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 岁月静好,老爸的脑门倍儿亮
    昙花舞阅读 130评论 0 0
  • 不管未来会怎样,今天先留念。 有人说女人在一起有三件事,吃吃吃,买买买,美美美。 截止到现在,e家洁做得还不够美观...
    社会钛阅读 207评论 0 2
  • 至少这一刻是开心的 也许我的心不静但我看到的世界是静态的 很美很美 赤着脚 随意躺在这片草地上 风拂过 把我的头...
    Simpleness简阅读 185评论 0 0