统计算法_1

最近不知道写什么了,基本python的各种功能百度一下,都能搜到一大把,最近itchat好像很火,不过对这个不是很感冒,等以后有兴趣或者用的上的时候研究研究
准备把统计方面的东西再看看,就写一些简单的统计算法吧,其实这些在python里面都有现成的,但是有句名言“不要只会用,还要知道原理”(是哪个名人说的?如果没有,那就算我说的了),所以写这些供学习之用。那么从头再来,循序渐进,先写这些,本来想写个对数函数的,结果发现真TM难,如果谁能写出来麻烦告知下,我也膜拜大神一下
1、算数平均数
2、算数平均回报
3、中位数
4、众数
5、极差
6、四分位数
7、几何平均数
8、几何平均回报

9、对数(没写出来)
下面上代码,和往常一样,含说明,为了更容易理解,就不直接用函数了,尽量用最原始的语法写

import random

case_list = [] #准备个容器,放样例
#随机生成10个1到30的小数,不能重复,把10个小数放到容器里
while len(case_list) < 10:
  rand_float = random.uniform(1,30)
  if rand_float in case_list:
    continue
  case_list.append(rand_float)
case_list = [round(case,2) for case in case_list] #格式化一下,不然太长不好看,当然这个因需要而定,我为了显示好看,所以格式化保留两位小数
#我先执行了个结果
print case_list #结果是,[5.77, 27.21, 27.12, 12.65, 23.12, 25.56, 18.6, 23.75, 4.1, 25.13]
case_list[6] = 23.12 #为了后面众数,弄个相同值出来
print str(case_list) #单独打下面了,方便看
‘[5.77, 27.21, 27.12, 12.65, 23.12, 25.56, 23.12, 23.75, 4.1, 25.13]‘
case_list.sort() #排序,这个算法有很多,单独写,不在这里啰嗦
#先写个累加函数,为了方便,就不try了,默认输入的结果都是对的
def sum_fun(xlist):
  n = 0
  for x in xlist:
    n += x
  return n
#统计数据量函数
def len_fun(xlist):
  n = 0
  for x in xlist:
    n += 1
  return n
#累乘,和累加一样
def multiply_fun(xlist):
  n = 1
  for x in xlist:
    n *= x
  return n

#1、算数平均数:加和/个数
sum_fun(case_list)/len_fun(case_list) #结果是19.753

#2、算数平均数回报,平均回报率计算,
‘((case_list[1]-case_list[0])/case_list(0)+(case_list[2]-case_list[1])/case_list(1)+...(case_list[n]-case_list[n-1])/case_list(n-1))/len(case_list-1)‘
n = 1
rate_return = [] #存放回报率
while n < len_fun(case_list):
  rate = (case_list[n] - case_list[n-1])/case_list[n-1]
  rate_return.append(rate)
  n += 1
sun_fun(rate_return)/len_fun(rate_return)

#3、中位数,list中间的数,如果count是基数index = len(list)/2,如果是偶数index1 = (len(list)/2 index2 = (len(list)/2)+1)
if len_fun(case_list)%2 == 1:
  median = case_list[(len_fun(case_list)+1)/2-1]
else: median = (case_list[len_fun(case_list)/2-1] + case_list[len_fun(case_list)/2])/2

#4、众数,存在最多的数
case_list_delre = list(set(case_list)) #去重,这个如果自己写的话可以用分治法,有兴趣的话可以自己写个
count_max = 0
for case_part in case_list_delre:
  case_count = case_list.count(case_part)
  if case_count > count_max:
    count_max = case_count
    max_return = case_part
if count_max = 1:
  print ‘no mode‘
mode = max_return

#5、极差,最大-最小,因为已经拍好序,所以index min - index max
case_list[0] - case_list[len_fun(case_list)-1]

#6、四分位数,箱图用的,可以避免极值的影响,分别是index1 = len(list)/4 index2 = 3*len(list)/4
Q1 = case_list[len_fun(case_list)/4]
Q2 = case_list[3*len_fun(case)/4]

#7、几何平均数,和算数平均数不同,把所有都乘过^(1/len(list))
multiply_fun(case_list) ** (1/len_fun(case_list))

#8、几何平均回报,R = 回报,((1+R1)(1+R2)...(1+Rn))^1/(len(count(R))-1)
n = 1
rate_return = [] #存放回报率
while n < len_fun(case_list):
  rate = (case_list[n] - case_list[n-1])/case_list[n-1]
  rate_return.append(rate)
  n += 1
rate_return = [1+rate for rate_return]
multiply_fun(rate_return) ** (1/(len_fun(rate_return)-1))

原文地址:https://www.cnblogs.com/xiu123/p/9314275.html

时间: 2024-11-05 17:25:10

统计算法_1的相关文章

SEO 统计算法

1)简单粗暴型的,这里不用去管浏览器的user-agent,不管cookie等信息,每产生一次PV,就直接计数,优点:简单,缺点:可能不真实,也可能有刷量数据 2) 稍微细腻点的统计,会区分新老用户,楼主你可以研究下baidu统计的SDK,里面包含有用户的浏览器信息,操作系统信息.用户的地域信息等,也就是说, 你通过浏览器的javascript以及和服务器数据的交互,对于后台服务器来说,是可以获取这些数据的,那么对于站长之家这样的网站,他可能想要统计到 真实的用户访问情况,以便有些行为分析,这时

统计算法学习梳理(一)

研一零零散散用了一些统计算法,在此简单梳理下,力求用电梯演讲法则去阐述每种算法模型(这是初哀,最后,呵呵了).但自己理解不深,还需要进一步努力.更重要的是复用了他人的智慧. 统计学习概述 关于统计学习,首先推荐李航老师著作的一本书<统计学习方法>.在此引用里边一句话来定义统计学习:统计学习(statistical learning)是关于计算机基于数据构建概率模型并运用模型对数据进行预测与分析的一门学科.从中可见,统计学习中有两个重要的点:数据,概率模型. 统计学习方法里边有三个要素:模型,策

01 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间.所以,执行效率是算法一个非常重要的考量指标.那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间.空间复杂度分析.其实,只要讲到数据结构与算法,就一定离不开时间.空间复杂度分析. 而且,我个人认为,复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半.其实,只要讲到数据结构与算法,就一定离不开时间.空间复杂度分析. 复杂度分析实在太

复杂度分析(上):如何分析、统计算法的执行效率和资源消耗

复杂度分析是什么? 复杂度分析就是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程. 为什么要学习复杂度分析? 没有复杂度分析怎么得到算法执行的时间和占用的内存大小 把代码运行一遍,通过统计.监控,就能得到算法执行的时间和占用的内存大小. 该方法的缺点在于: 1.测试结果非常依赖测试环境 拿同样一段代码,在 Intel Core i9 处理器上运行的速度肯定要比 Intel Core i3 快得多.同一段代码,在不同机器上运行,也可能会有截然相反的结果. 2.测试结

复杂度分析(上)如何分析统计算法的执行效率和资源消耗

一.什么是复杂度分析? 数据结构和算法解决是“如何让计算机更快时间.更省空间的解决问题”. 因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能. 分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度. 复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系. 二.为什么要进行复杂度分析? 2.1 事后统计法 2.2.1 概念 通过运行代码跑,统计.监控,得到算法执行的时间和占用的内存大小. 2.2.2 劣势 测试结果非常依赖测试环境.测试环境中硬件的不同会对测试结

Android功耗统计算法

基于Android 6.0的源码剖析. Power_profile.xml文件demo: <?xml version="1.0" encoding="utf-8"?> <!-- ** ** Copyright 2009, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License") ** y

在thinkphp中,写的博文标签多对多关系的标签频率统计算法

常常看到别人的博客里面,或者网站里面有这样随机颜色,但字体大小与标签出现频率有关的标签云,于是自己就想写一个.至于颜色的随机显示,那就很简单了,这里就不列代码. 因为正在学thinkphp,所以数据查找的都是用的tp数据查找语句. 1 Public function render( $data ){ 2 //在博文——标签多对多关系的中间表中查找出所有的标签 3 $tags = M('blog_tags')->select(); 4 $a = array(); 5 //去掉重复的标签,将所有不重

O(n*lgn)时间复杂度的逆序对统计算法实现思想

逆序对定义:设A[1..n]是一个包含n个不同数的数组.如果在i<j的情况下,有A[i] > A[j],则(i,j)就称为A中的一个逆序对(inversion). 现给出一个算法,其可以用O(n*lgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数量. 简单的算法实现思想:我们可以单纯的通过从前往后的逐一比对来确定逆序对的数量,虽然实现简单,但这样一来时间复杂度将会上升为O(n*n),不符合我们的要求. 改进的算法实现思想:众所周知归并排序的时间复杂度为O(cn*lgn + cn),

paper 83:前景检测算法_1(codebook和平均背景法)

前景分割中一个非常重要的研究方向就是背景减图法,因为背景减图的方法简单,原理容易被想到,且在智能视频监控领域中,摄像机很多情况下是固定的,且背景也是基本不变或者是缓慢变换的,在这种场合背景减图法的应用驱使了其不少科研人员去研究它. 但是背景减图获得前景图像的方法缺点也很多:比如说光照因素,遮挡因素,动态周期背景,且背景非周期背景,且一般情况下我们考虑的是每个像素点之间独立,这对实际应用留下了很大的隐患. 这一小讲主要是讲简单背景减图法和codebook法. 一.简单背景减图法的工作原理. 在视频