美文网首页
Python入门:数值分析代码

Python入门:数值分析代码

作者: 洋阳酱 | 来源:发表于2019-05-23 12:53 被阅读0次

教程来自扇贝编程

常用数据分析:
包括平均数、中位数、分位数、众数、极差、方差、标准差等等


附代码:

# -*- coding: utf-8 -*-
"""
Created on Thu May 16 2019

@author: YangYang
"""

import math

# 输入数据,假设这是一组订单的金额
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】计算均值
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')

# 【8】异常值
# 25分位数值为 q1_num
q1_num = find_nperc(order,25)
# 75分位数值为 q3_num
q3_num = find_nperc(order,75)
# 计算 IQR
iqr = q3_num - q1_num
for o in order:
    if o < (q1_num - iqr * 1.5) or o > (q3_num + iqr * 1.5):
        print("{}是异常值".format(o))

# 【9】数据调整
'''
订单大于等于 60 元,标记为 "***";
订单小于 60元并且大于等于 20元,标记为 "**";
其他情况下,订单标记为 "*"。
'''
update_order = []
for o in order:
    if o >= 60:
        update_order.append("***")
    elif o >= 20:
        update_order.append("**")
    else:
        update_order.append("*")
print('\n')
print("数据标记:")
print("订单大于等于 60 元,标记为 ***")
print("订单小于 60元并且大于等于 20元,标记为 **")
print("其他情况下,订单标记为 *")
print('\n')
print(list(zip(update_order,order)))

print('\n')
input("数据分析完毕")

相关文章

网友评论

      本文标题:Python入门:数值分析代码

      本文链接:https://www.haomeiwen.com/subject/feuvzqtx.html