1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
""" Created on Thu May 16 2019 @author: YangYang """ # code from : https://www.jianshu.com/p/665e21232910 import math import sys # import matplotlib.pylab as plt import matplotlib.pyplot as plt import matplotlib.animation as animation import matplotlib.dates as md import pymysql import numpy as np import datetime as dt import matplotlib.ticker as ticker from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] conn=pymysql.connect(host='localhost',user='root',password='MYSQLTB',db='shfuture') a=conn.cursor() sql = 'select lastprice, happentime from ' + sys.argv[1] + ' where time(happentime)>"' + sys.argv[2] + '" and time(happentime)<"' + sys.argv[3] + '";' print(sql) a.execute(sql) data=a.fetchall() order=[] s=[] for result in data: order.append(result[0]) s.append(result[1]) # 输入数据,假设这是一组订单的金额 # order = [27.0, 15.0, 19.0, 68.0, 32.0, 19.0, 19.0, 120.0, 20.0, 32.0, 12.0] # print("输入数组:") # print(order) # 【1】找出最大值 print('\n') print("最大值: =",max(order) , "发生于 : " , s[order.index(max(order))]) # 【1】找出最小值 print('\n') print("最小值: =",min(order) , "发生于 : " , s[order.index(min(order))]) # 【1】计算均值 get_mean = sum(order)/len(order) # 计算平均值 get_mean = round(get_mean,2) # round取小数位后两位 print('\n') print("平均数:get_mean =",get_mean) # 【2】中位数 def get_median(numbers): #找到numbers最中间的数 length = len(numbers) #length 为numbers中数值的个数 sorted_numbers = sorted(numbers) #将numbers排序,存入sorted_numbers mid_point = int(length/2) #中位数的位置,需要是int类型 if length % 2 == 1: # 如果数值个数为奇数 median = sorted_numbers[mid_point] else: # 如果数值个数为偶数,中位数为中间两个数 mid_a 和 mid_b 的均值 mid_a = sorted_numbers[mid_point-1] mid_b = sorted_numbers[mid_point] median = (mid_a + mid_b)/2 return median # 函数返回 median median_order = get_median(order) print('\n') print("中位数:get_median =",median_order) # 【3】分位数 def find_nperc(numbers,n): #返回numbers中,n分位对应的数值是多少 sorted_numbers = sorted(numbers) # 先将数值排序 n_index = int(n/100 * len(sorted_numbers)) # 找到n分位数值在sorted_numbers中的索引位置 return sorted_numbers[n_index] #函数返回n分位数数值 print('\n') print("95分位数:find_nperc = {}".format(find_nperc(order,95))) print('\n') # 【4】众数 def get_mode(numbers): #返回 numbers中出现次数最多的数值(众数)及其出现次数 count_num = {} max_count_num = [] # 循环numbers,建立字典 count_num {数值:出现次数} for num in numbers: count_num[num] = numbers.count(num) # 循环count_num # 用max() 得到数值出现次数的最大值,赋值给 max_count # 将出现次数最大值的数值(众数)放入 max_count_num for num,count in count_num.items(): if count == max(count_num.values()): max_count = count max_count_num.append(num) return max_count_num,max_count #将order作为函数 get_mode 的参数 mode_num, times = get_mode(order) for num in mode_num: print("众数:get_mode = {}".format(num)) #print("众数出现次数为{}".format(times)) # 【5】极差 def get_range(data): # get_range 为 data 的极差 cal_range = max(data) - min(data) return cal_range order_range = get_range(order) print('\n') print("极差:get_rang = {}".format(order_range)) # 【6】方差 def get_variance(data): # 均值在上面已经求解过 get_mean get_mean = sum(order)/len(order) sum_sqr = 0 for num in order: sum_sqr += (num - get_mean) ** 2 # 求方差 variance,其为 sum_sqr 的均值 variance = sum_sqr / (len(order) -1) return variance variance = get_variance(order) variance = round(variance,2) print('\n') print("方差:get_variance =",variance) # 【7】标准差 # 用 math 中的 .sqrt() 方法求 std_dev,sqrt表示平方根 get_std_dev = math.sqrt(variance) # variance ** 0.5 get_std_dev = round(get_std_dev,2) print('\n') print("标准差:get_std_dev =",get_std_dev) print('\n') # 尝试找出急涨, 急跌过程发生, 结束,持续的时间 print('\n') input("数据分析完毕") |