教程來自扇貝編程
常用數據分析:
包括平均數、中位數、分位數狠怨、眾數、極差邑遏、方差佣赖、標準差等等
附代碼:
# -*- 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 = []
# 循環(huán)numbers俩檬,建立字典 count_num {數值:出現次數}
for num in numbers:
count_num[num] = numbers.count(num)
# 循環(huán)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("數據分析完畢")