关于Python杂七杂八的小东西(搭建Pycharm+Anaconda、删除文档首行小程序、皮尔逊相关系数小程序)

来源:互联网 发布:阿里云视频点播 编辑:程序博客网 时间:2024/05/17 04:54

  好久没有回来更新博客了,良心难安啊!最近要做脑电信号的分析,由于导出的数据都是文本格式的,就下定决心放弃Matlab,用Python做分析,确实是挺好用的。下面就把我期间用到的杂七杂八的东西列出来,作为备忘和给需要的朋友的参考吧。

一、搭建Pycharm+Anaconda

  我之前用的是Anaconda自带的Spyder编译器,界面还是很友好的,与Matlab高度相似。我觉得最实用的功能就是可以看得到变量的内容,这一点比较类似于Matlab。举个例子,如果我们定义一个矩阵Data,Spyder就可以很方便的看到Data里面的具体内容。但是Spyder用于工程开发的话就不是很适合了,所以我决定改用Pycharm+Anaconda。我的看法是如果用Python做科研的话还是用Spyder比较好,做工程的话最好用Pycharm+Anaconda,两者之间并不存在哪一个绝对比另一个好的问题。 
  Anaconda里面集成了很多关于python科学计算的第三方库,避免了自行安装库的麻烦,一步到位,特别好用。Pycharm是一个很好的用于开发的IDE,界面友好,使用方便,主要的缺点是在科学计算方面略有欠缺,这个缺点正好由Anaconda补上。

1、下载Anaconda

  在官网按自己的需求下载,官网链接https://www.continuum.io/downloads 。下载之后按部就班安装就好。 
  这里写图片描述

2、下载Pycharm

  同样是到官网按自己的需求下载,官网链接http://www.jetbrains.com/pycharm/download/#section=windows。下载之后按部就班安装就好。这里建议如果不是特别专业的朋友选社区版(Community)就好了,毕竟社区版是免费的并且功能也足够用了。 
  这里写图片描述

3、配置环境

  都下载安装完毕之后,打开Pycharm,选择File菜单下的Settings选项,找到Project–Project Interpreter。将图中红圈里面的路径更改为之前安装Anaconda路径下的python.exe的路径。如果这里找不到我们安装Anaconda的路径,点击旁边的小齿轮,选择“Add Local”,就可以自行添加了。这时候会发现下面出现了一大堆库,这些库都是Anaconda带给我们的,极大地节约了下载安装库的时间。至此Pycharm+Anaconda搭建完毕。 
这里写图片描述

二、删除文档首行小程序

  代码如下所示,中心思想是新建一个文档,将原文档中第一行以下的数据写入新文档中。用到的核心函数是'a'.join(b),其作用是以a作为分隔符,将b所有的元素合并成一个新的字符串。

<code class="hljs python has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'''删除EEG文件的前两行'''</span><span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">def</span> <span class="hljs-title" style="box-sizing: border-box;">delstring</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(filename)</span>:</span>    fin = open(filename)    raw = fin.readlines()     fout = open(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'new'</span>+filename,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'w'</span>)    new =<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</span>.join(raw[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:])           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># 'a'.join(b) 以a作为分隔符,将b所有的元素合并成一个新的字符串</span>    fout.write(new)    fin.close()    fout.close()</code><ul class="pre-numbering eye-protector-processed" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgba(0, 0, 0, 0.34902); list-style: none; text-align: right; transition: background 0.3s ease; background-color: rgb(193, 230, 198);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

三、皮尔逊相关系数小程序

  这个小程序是参考http://www.cnblogs.com/ryuham/p/4764015.html写出来的,可以用来求两段信号的皮尔逊相关系数。说到皮尔逊相关系数,根据http://changfengmingzhi.blog.163.com/blog/static/1671052882014101810481936/里面的描述,摘抄出如下定义: 
   
在统计学中,皮尔逊积矩相关系数(Pearson product-moment correlation coefficient)用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。系数的值为1意味着X 和 Y可以很好的由直线方程来描述,所有的数据点都很好的落在一条 直线上,且 Y 随着 X 的增加而增加。系数的值为-1意味着所有的数据点都落在直线上,且 Y 随着 X 的增加而减少。系数的值为0意味着两个变量之间没有线性关系。当两个变量独立时,相关系数为0,但反之并不成立。 这是因为相关系数仅仅反映了两个变量之间是否线性相关。比如说,X是区间[-1,1]上的一个均匀分布的随机变量,而 Y=X2. 那么Y是完全由X确定。因此Y 和X是不独立的,但是相关系数为0。

  皮尔逊相关系数的计算公式为:

 xiyi xi yin x2i( xi)2n y2i( yi)2n

  代码实现如下:

<code class="hljs python has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'''两段信号的皮尔逊相关性分析'''</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'''求乘积之和'''</span><span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">def</span> <span class="hljs-title" style="box-sizing: border-box;">multipl</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(a,b)</span>:</span>    sumofab = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> i <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> range(len(a)):        temp = a[i] * b[i]        sumofab += temp    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> sumofab<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'''求皮尔逊相关系数'''</span><span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">def</span> <span class="hljs-title" style="box-sizing: border-box;">corrcoef</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(x, y)</span>:</span>    n = len(x)    sum1 = sum(x)    sum2 = sum(y)            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># 求和</span>    sumofxy = multipl(x,y)   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># 求乘积之和</span>    sumofx2 = sum([pow(i, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> i <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> x])    sumofy2 = sum([pow(j, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> j <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> y])    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># 求平方和</span>    num = sumofxy - (float(sum1) * float(sum2) / n)    den = sqrt((sumofx2 - float(pow(sum1, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)) / n) * (sumofy2 - float(pow(sum2, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)) / n))  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># 计算皮尔逊相关系数</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> list(map(float,num / den))</code><ul class="pre-numbering eye-protector-processed" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgba(0, 0, 0, 0.34902); list-style: none; text-align: right; transition: background 0.3s ease; background-color: rgb(193, 230, 198);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li></ul>
0 0
原创粉丝点击