前几天在做表演系统的时候,遇到了一件尴尬的事情。我居然忘记了如何在Excel上适配正态分布,虽然第二天又拿起了Excel我还是很惭愧那几个常用的函数和图像的做法。其实当时有点偏题,忽略了问题的本质,解决数据分析和可视化问题其实是Python的强项。例如绘制指定区间的多项式函数:Python代码如下:importnumpyasnpimportmatplotlib.pyplotaspltX=np.linspace(-4,4,1024)Y=.25*(X+4.)*(X+1.)*(X-2.)plt.title('$f(x)=\\frac{1}{4}(x+4)(x+1)(x-2)$')plt.plot(X,Y,c='g')plt.show()使用numpy的linspace方法确定横坐标x的取值范围,列出方程,然后调用matplotlib的pyplot绘制函数曲线。numpy是一个用python实现的科学计算包,包括强大的N维数组对象Array和成熟的函数库。它有一个集成C/C++和Fortran代码的工具包,并提供实用的线性代数和傅里叶变换。而随机数生成函数等工具,可以理解为Matlab。记得上中学的时候,我问老师三角函数有什么用?(无知者无畏)老师问我,“如果给你一块铁,你怎么能把煤炉烟囱的一角削出来呢?”,我还记得老师在这个例子中,那些看似抽象的数学公式其实只是因为不知道它们的应用场景。Python代码如下:importnumpyasnpimportmatplotlib.pyplotaspltX=np.linspace(0,2*np.pi,100)YSinValues=np.sin(X)YCosValues=np.cos(X)plt.plot(X,YSinValues)plt.plot(X,YCosValues)plt.show()Matplotlib是Python的2D绘图库,它甚至可以生成出版质量的图形。对于这些正态分布,Python绘图相当简单:importnumpyasnpimportmatplotlib.pyplotaspltdefpdf(X,mu,sigma):a=1./(sigma*np.sqrt(2.*np.pi))b=-1./(2.*sigma**2)returna*np.exp(b*(X-mu)**2)X=np.linspace(-6,6,1000)foriinrange(3):samples=np.random.standard_normal(10)mu,sigma=np.mean(samples),np.std(samples)plt.plot(X,pdf(X,mu,sigma),color='.66')plt.plot(X,pdf(X,0.,1.),color='b')plt.show()为了不显得单调,这里多画了几条曲线。只要计算出方差和均值,从excel中读出的值就可以符合正态分布。言归正传,爱情线还有这样一段凄美的爱情故事。近游吴越,天高云淡。300多年前,在斯德哥尔摩的街头,落魄的笛卡尔带着所有的财产、破烂的衣服和几本数学书,过着乞讨的生活。高高在上的笛卡尔没有向路人乞讨,而是默默低头在纸上写写画画,专注于自己的数学世界。一个安静的下午,笛卡尔像往常一样坐在街上晒太阳研究数学问题。路过的人,嘈杂的车马队,都不能打扰到他。有一美人,风姿如青阳。相见,与子同居。“你在干什么?”转头,笛卡尔看到了一张年轻漂亮的脸庞,一双清澈的眸子如湛蓝的湖水,妩媚动人,她就是瑞典的小公主,国王最宠爱的女儿克里斯汀。她跪下来,拿起笛卡尔的数学书和草稿纸,开始和他交谈。交谈中,他发现这个小女孩思维敏捷,对数学有着浓厚的兴趣。几天后,笛卡尔意外接到通知,国王聘请他担任小公主的数学老师。满心疑惑的笛卡尔跟着侍卫来到了王宫,就听到远处传来银铃般的笑声。他看到了那天在街上遇到的女孩,从此,他成了公主的数学老师。情不知从何而起,越陷越深。公主的数学在笛卡尔的悉心指导下突飞猛进,两人也开始亲昵起来。笛卡尔给她介绍了直角坐标系,代数和几何可以结合,这就是日后笛卡尔创立的解析几何的雏形。在笛卡尔的带领下,克里斯汀走进了奇妙的坐标世界,她被曲??线迷住了。日常的形影不离也让他们相爱了。在瑞典这个浪漫的国度,一段纯洁美好的爱情悄然萌芽。读书去,千里迷雾,暮色重天阔。他们恋情的消息传到了国王耳中,国王大怒,下令处死笛卡尔。在克莉丝汀的哀求下,国王将他放逐回国,而公主则被囚禁在宫中。当时,黑死病正在欧洲大陆流行。笛卡尔回到法国后不久,就病重了。在生命倒计时的日子里,他日日夜夜思念的,是大街上遇见的那张温暖的笑脸。他坚持每天给她写信,期待她的回信。然而,这些信件被国王截获,公主再也没有收到他的消息。欲知心事,读腹中书。笛卡尔在给克里斯汀写完第十三封信后,就永远地离开了这个世界。此时,被软禁在宫中的小公主还在宫中的回廊里徘徊,想着远方的爱人。这最后一封信没写一个字,只写了一个方程:r=a(1-sinθ)。国王认为这个方程式中隐藏着两个人的秘密,于是将城里所有的数学家都召集到王宫,但没有人能解出这个方程式。他不忍心看着自己心爱的女儿每天郁郁寡欢,就把这封信给了她。克里斯汀收到这封信时欣喜若狂。她立刻明白了爱人的用意。她找来笔和纸,画下了这个图形。一个心形的图案出现在了她的眼前。克里斯汀泪流满面。这就是著名的“心形线”。国王死后,克里斯汀继承王位,随即派人前往法国寻找心上人的下落,却收到了笛卡尔的死讯,留下了永远的遗憾…… 这封举世瞩目的另类信件据说这封情书至今还保存在欧洲的笛卡尔纪念馆。没有办法知道这个故事的来源。网上流传着各种版本,连百度百科都有这个故事。后来有人求证了真伪,认为这是一个美丽的谎言,但并不妨碍人们爱上心线。在直角坐标系下,爱情线方程的python表达式为:x**2+y**2+a*x=a*sqrt(x**2+y**2)andx**2+y**2-a*x=a*sqrt(x**2+y**2)通过x找到对应的y值很麻烦,就像软件设计中的“***层”一样,你可以用参数方程表示:x=a*(2*cos(t)-cos(2*t))y=a*(2*sin(t)-sin(2*t))具体python代码为如下:importnumpyasnpimportmatplotlib。pyplotasplta=1t=np.linspace(0,2*np.pi,1024)X=a*(2*np.cos(t)-np.cos(2*t))Y=a*(2*np.sin(t)-np.sin(2*t))plt.plot(Y,X,color='r')plt.show()代表心脏的心形线来了:但是这不是六线的代码?不是r=a(1-sinθ)吗?的确,它是极坐标系。Python的matplotlib也支持极坐标系。心线六行pyton代码如下:importnumpyasnpimportmatplotlib.pyplotaspltT=np.linspace(0,2*np.pi,1024)plt.axes(polar=True)plt.plot(T,1.-np...?importnumpyasnpiimportmatplotlib.pyplotaspltx=np.linspace(-8,8,1024)y1=0.618*np.abs(x)-0.8*np.sqrt(64-x**2)y2=0.618*np.abs(x)+0.8*np.sqrt(64-x**2)plt.plot(x,y1,color='r')plt.plot(x,y2,color='r')plt.show()这样,又得到一条爱情线:网上有各种爱情线的漂亮实现,也充满了各种情绪。但是对于其中的每一个,基本上都可以用python比较简洁的实现。其实画图很简单,难点在于那些曲线方程的表达和实际的应用场景需求,比如螺旋线。此外,还可以绘制各种3D视图。比如作为数据分析乃至大数据处理的最后一个环节,就是所谓的洞察可视化。Python可以说是简单实用的工具之一。【本文来自专栏作家“老曹”原创文章,作者微信公众号:哦家ArchiSelf,id:wrieless-com】点此阅读更多本作者好文
