金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > 统计算法_探索性统计

统计算法_探索性统计

发布时间:2019-11-01 17:41编辑:编程浏览(62)

    学习的文章在这里:

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

    一、前言

      Celery是一个基于python开发的分布式任务队列,如果不了解请阅读笔者上一篇博文Celery入门与进阶,而做python WEB开发最为流行的框架莫属Django,但是Django的请求处理过程都是同步的无法实现异步任务,若要实现异步任务处理需要通过其他方式(前端的一般解决方案是ajax操作),而后台Celery就是不错的选择。倘若一个用户在执行某些操作需要等待很久才返回,这大大降低了网站的吞吐量。下面将描述Django的请求处理大致流程(图片来源于网络):

    图片 1

    请求过程简单说明:浏览器发起请求-->请求处理-->请求经过中间件-->路由映射-->视图处理业务逻辑-->响应请求(template或response)

    1、视图开始文件_ViewStart.cshtml

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

    二、配置使用

      celery很容易集成到Django框架中,当然如果想要实现定时任务的话还需要安装django-celery-beta插件,后面会说明。需要注意的是Celery4.0只支持Django版本>=1.8的,如果是小于1.8版本需要使用Celery3.1。

    @renderbody方法放在DIV中。这样我们可以区分哪些内容来自布局文件,哪些内容来自视图。

    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
    

    配置

      新建立项目taskproj,目录结构(每个app下多了个tasks文件,用于定义任务):

    taskproj
    ├── app01
    │   ├── __init__.py
    │   ├── apps.py
    │   ├── migrations
    │   │   └── __init__.py
    │   ├── models.py
    │   ├── tasks.py
    │   └── views.py
    ├── manage.py
    ├── taskproj
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    └── templates
    

    在项目目录taskproj/taskproj/目录下新建celery.py:

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    # Author:wd
    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'taskproj.settings')  # 设置django环境
    
    app = Celery('taskproj')
    
    app.config_from_object('django.conf:settings', namespace='CELERY') #  使用CELERY_ 作为前缀,在settings中写配置
    
    app.autodiscover_tasks()  # 发现任务文件每个app下的task.py
    

    taskproj/taskproj/__init__.py:

    from __future__ import absolute_import, unicode_literals
    
    from .celery import app as celery_app
    
    __all__ = ['celery_app']
    

    taskproj/taskproj/settings.py

    CELERY_BROKER_URL = 'redis://10.1.210.69:6379/0' # Broker配置,使用Redis作为消息中间件
    
    CELERY_RESULT_BACKEND = 'redis://10.1.210.69:6379/0' # BACKEND配置,这里使用redis
    
    CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案
    

    进入项目的taskproj目录启动worker:

    celery worker -A taskproj -l debug
    

    本文由金沙国际官网发布于编程,转载请注明出处:统计算法_探索性统计

    关键词: