统计算法_探索性统计

最近不知道写什么了,基本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、算数平均数:加和/个数
def sum_mean_fun(case_list):
  sum_mean_num = sum_fun(case_list)/len_fun(case_list)
  return sum_mean_num #结果是19.753 #2、算数平均数回报,平均回报率计算, def sum_mean_rate(case_list):
  '((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
  mean_rate_num = sum_fun(rate_return)/len_fun(rate_return)
  return mean_rate_num
#3、中位数,list中间的数,如果count是基数index = len(list)/2,如果是偶数index1 = (len(list)/2 index2 = (len(list)/2)+1) def median_fun(case_list):
  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
  return median #4、众数,存在最多的数 def modes_fun(case_list):
  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:
    return None
  mode = max_return
  return mode
#5、极差,最大-最小,因为已经拍好序,所以index min - index max def ext_minus_fun(case_list):
  ext_minus_num = case_list[len_fun(case_list)-1] - case_list[0]
  return ext_minus_num
#6、四分位数,箱图用的,可以避免极值的影响,分别是index1 = len(list)/4 index2 = 3*len(list)/4 def four_bit_fun(case_list):
  Q1 = case_list[len_fun(case_list)/4]
  Q2 = case_list[3*len_fun(case_list)/4]
  return Q1,Q2
#7、几何平均数,和算数平均数不同,把所有都乘过^(1/len(list)) def geom_mean_fun(case_list):
  geom_mean_num = multiply_fun(case_list) ** (1.0/len_fun(case_list))
  return geom_mean_num
#8、几何平均回报,R = 回报,((1+R1)(1+R2)...(1+Rn))^1/(len(count(R))-1) def geom_mean_rate(case_list):
  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 in rate_return]
  geom_mean_rate_num = multiply_fun(rate_return) ** (1.0/len_fun(rate_return)) - 1
  return geom_mean_rate_num

# 验证
if __name__ == '__main__':
  rand_list = create_rand_list(1,30,10)
  rand_list.sort()
  print rand_list
  sum_mean_num = sum_mean_fun(rand_list)
  print sum_mean_num
  mean_rate_num = sum_mean_rate(rand_list)
  print mean_rate_num
  median_num = median_fun(rand_list)
  print median_num
  modes_num = modes_fun(rand_list)
  print modes_num
  ext_minus_num = ext_minus_fun(rand_list)
  print ext_minus_num
  four_bit_q1,four_bit_q2 = four_bit_fun(rand_list)
  print four_bit_q1
  print four_bit_q2
  geom_mean_num = geom_mean_fun(rand_list)
  print geom_mean_num
  geom_mean_rate_num = geom_mean_rate(rand_list)
  print geom_mean_rate_num

Original: https://www.cnblogs.com/xiu123/p/9314275.html
Author: 咻_python
Title: 统计算法_探索性统计

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578179/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • web安全之反向代理配置X-Frame-Options实现防盗链和防止点击劫持攻击

    介绍 http响应头安全策略,从http头文件的方面,利用参数设置开启浏览器的安全策略,来实现相关的安全机制 X-Frame-Options HTTP&#x54CD;&am…

    Linux 2023年6月6日
    0127
  • [云原生]Kubernetes-资源管理(第3章)

    一、资源管理介绍 二、YAML语言介绍 三、资源管理方式 3.1 命令式对象管理 3.2 命令式对象配置 3.3 声明式对象配置 参考: Kubernetes(K8S) 入门进阶实…

    Linux 2023年6月13日
    0123
  • ArchLinux安装-2022-01-12

    这篇教程,是我基于B站up住theCW的视频教程整理的,其中添加了一些我在安装n次之后的经验(虽然失败过几次,但我现在安装不会再出差错,所以请放心的看此教程) 当然,我认为theC…

    Linux 2023年6月13日
    0103
  • Linux运行Jar包方式

    1 运行Jar包 第一种方式 java -jar xxx.jar 最基本的方式,程序运行的信息会一直输出在控制台,ctrl+c中断或者关闭窗口时,程序中断执行。 第二种方式 jav…

    Linux 2023年6月7日
    0108
  • MVC(二)

    通过前一篇文章,我们对MVC有了一定的了解。 三、MVC能做什么 网站——服务器返回页面——实际上就是一段文本(response header+html)。 实际上mvc的acti…

    Linux 2023年6月13日
    0109
  • 重新认识运维

    重新认识运维 背景 随着业务的发展,新技术的迭代,公司研发采用了微服务架构或是上云等等,这没有考虑运维成本和效率,带来运维极大的复杂性,让运维纯手工,苦不堪言,痛苦。从现象来看,运…

    Linux 2023年6月8日
    0108
  • 设计模式——中介者模式

    中介者模式定义 用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 Mediator抽象中介者角色 抽象中…

    Linux 2023年6月7日
    087
  • goroutine 和 channel

    应用 实例1 go;collapse:true;;gutter:true; package main</p> <p>import ( "fmt&q…

    Linux 2023年6月8日
    091
  • linux定时删除N天前的旧文件

    语句写法: find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {} \; 例1:find /usr/local/b…

    Linux 2023年6月13日
    0108
  • 微信公众号开发之获取微信用户的openID

    (注:openID同一用户同一应用唯一,UnionID同一用户不同应用唯一。不同应用指微信开放平台下的不同用户。) 1、 申请测试号(获得appID、appsecret) 2、 填…

    Linux 2023年6月13日
    081
  • Linux网络智障问题排查汇总

    Q: Linux 客户端应用接收不到组播:A: 检查客户端的 Linux 系统,可能没有配置 net.ipv4.conf.ethx.rp_filter = 0 的内核参数 Q: 在…

    Linux 2023年6月14日
    084
  • histogram的类型详解

    采样点 每隔指定的时间会采集并上报一次数据,称为采样点。 请注意这里采集的是当前瞬间的数据 count 对采样点的 次数累计和(count) bucket 对采样点的 次数进行统计…

    Linux 2023年6月13日
    084
  • 杨辉三角的变形—牛客网

    杨辉三角的变形_牛客题霸_牛客网 (nowcoder.com) #include using namespace std; int main() { //这个树的偶数规律为 -1 …

    Linux 2023年6月13日
    0129
  • 附001.Python多版本环境管理

    一 环境背景 由于Python的版本过多,且不同版本之间差异性较大。同时又因系统底层需要调用当前版本Python,所以不能随意变更当前系统Python版本。因此,在多版本共存的情况…

    Linux 2023年6月7日
    083
  • 洛谷P3372–线段树代码模板1

    时空限制:1000ms,128M 数据规模: 对于30%的数据:N Original: https://www.cnblogs.com/ygsworld/p/11279732.ht…

    Linux 2023年6月7日
    0127
  • C语言:1~10阶乘的累加计算(循环方法不唯一)

    1~10阶乘的累加计算方法一 点击查看代码 int main() { int sum = 1, i, n; int ret = 0; for (n = 1; n <= 3; …

    Linux 2023年6月13日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球