可汉学院python_A可汗学院-统计学python实现1-10

【第 1集】 均值 中位数 众数平均数(Mean):指在一组数据中所有数据之和再除以这组数据的个数。

中位数(Median):按顺序排列的一组数据中居于中间位置的数,如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。

众数(Mode):一组数据中出现次数最多的数值,有时众数在一组数中有好几个。

import numpy as np

from scipy import stats

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

nums1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8]

print(np.mean(nums))# 均值 5.5

print(np.median(nums))# 中位数 5.5

print(np.median(nums1))# 中位数 6.0

print(stats.mode(nums)[0][0]) #没有众数

print(stats.mode(nums1)) #众数 8

【第 2集】 极差 中程数极差:其最大值与最小值之间的差距,即最大值减最小值后所得之数据

中程数(Mid-range)是一组统计数据值的最大值和最小值的平均数

import numpy as np

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(np.ptp(nums)) #极差 9

print(np.ptp(nums)/2) #中程数 4.5

【第 3集】 象形统计图

象形统计图:表现统计数字大小和变动的各种图形总称。其中有条形统计图、扇形统计图、折线统计图、象形图等。

O-型血人数:2×8=16

【第 4集】 条形图

条形统计图:是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条,然后把这些直条按一定的顺序排列起来。从条形统计图中很容易看出各种数量的多少条形图:参考https://blog.csdn.net/hohaizx/article/details/79101322

import matplotlib.pyplot as plt

import matplotlib

# 设置中文字体和负号正常显示

matplotlib.rcParams['font.sans-serif'] = ['SimHei']

matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ['Jasmine', 'Jeff', 'nevin', 'Alejandrn', 'Marta'] # 横坐标刻度显示值

list1 = [72, 86, 82, 81, 96] # 纵坐标值1

list2 = [78, 84, 88, 95, 90] # 纵坐标值2

x = np.arange(len(list1))

"""

绘制条形图

left:长条形中点横坐标

height:长条形高度

width:长条形宽度,默认值0.8

label:为后面设置legend准备

"""

rects1 = plt.bar(x=x, height=list1, width=0.4, alpha=0.4, color='blue', label="期中考试")

rects2 = plt.bar(x=x+0.4, height=list2, width=0.4, alpha=0.5, color='red', label="期末考试")

plt.ylim(0, 110) # y轴取值范围

plt.ylabel("成绩")

"""

设置x轴刻度显示值

参数一:中点坐标

参数二:显示值

"""

plt.xticks(x+0.2, label_list)

plt.xlabel("名字")

plt.title("成绩单")

plt.legend() # 设置题注

# 编辑文本

for rect in rects1:

height = rect.get_height()

plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height),

ha="center", va="bottom")

for rect in rects2:

height = rect.get_height()

plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height),

ha="center", va="bottom")

plt.show()

【第 5集】 线形图

线形图又称为“点状图”(point chart)、“停顿图”(Stopping chart)或“星状图”(star chart)。线形图属于图表分析的一类,仅记录收盘价,至於开盘价、当日最高价、当日最高的变动及波动幅度则欠缺。以线形图捕捉长期趋势还可以,但却难于捕捉短线和中线趋势,目前已较少有人使用。

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

#X轴,Y轴数据

x = [0, 1, 2, 3, 4, 5, 6, 7, 8]

y = [6.59, 6.70, 6.95, 7.30, 7.30, 7.37, 7.1, 7.51, 7.58]

plt.figure(figsize=(8, 4)) # 创建绘图对象

plt.style.use('ggplot') # 网格

plt.plot(x, y, "b--", linewidth=1) #(X轴,Y轴,蓝色虚线,线宽度)

plt.xlabel("时间") #X轴标签

plt.ylabel("股票价格") #Y轴标签

plt.title("股票价格-时间") #图标题

plt.show()

【第 6集】 饼图

饼图显示一个数据系列中各项的大小与各项总和的比例。饼图中的数据点显示为整个饼图的百分比。

每个季度的收入:

import matplotlib.pyplot as plt

labels = ['quarter1', 'quarter2', 'quarter3', 'quarter4']

sizes = [40, 30, 20, 10]

plt.pie(sizes, labels=labels, autopct='%1.1f%%')

# plt.legend(loc=[0.9, 0.6])

plt.axis('equal')

plt.show()

【第 7集】 误导人的线形图

若线形图的刻度不一样容易引起误解,为了不引起误解,线性图画在一张图中。

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

#X轴,Y轴数据

x = [0, 1, 2, 3, 4, 5, 6, 7, 8]

y = [6.59, 6.70, 6.95, 7.30, 7.30, 7.37, 7.1, 7.51, 7.58]

y1 = [3.295, 3.35, 3.475, 3.65, 4, 3.685, 3.55, 3.755, 3.79]

# print(y1)

plt.figure(figsize=(8, 4)) # 创建绘图对象

plt.style.use('ggplot') # 网格

plt.plot(x, y, "b--", linewidth=1) #(X轴,Y轴,蓝色虚线,线宽度)

plt.plot(x, y1, "r--", linewidth=1) #(X轴,Y轴,红色虚线,线宽度)

plt.xlabel("时间") #X轴标签

plt.ylabel("股票价格") #Y轴标签

plt.title("股票价格-时间") #图标题

plt.show()

【第 8集】 茎叶图

茎叶图的思路是将数组中的数按位数进行比较,将数的大小基本不变或变化不大的位作为一个主干(茎),将变化大的位的数作为分枝(叶),列在主干的后面,这样就可以清楚地看到每个主干后面的几个数,每个数具体是多少。

上图是12个足球队员的各自得分,总共得多少分?

Stem:得分十位数

Leaf:得分个位数

总计得分:(0+0+2+4+7+7+9) + (11+11+11+13+18) + (20)

from itertools import groupby

nums2 = [0, 0, 2, 4, 7, 7, 9, 11, 11, 13, 18, 20]

for k, g in groupby(sorted(nums2), key=lambda x: int(x) // 10):

# print('k', k)

# print('g', list(g))

lst = map(str, [int(y) % 10 for y in list(g)])

print(k, '|', ' '.join(lst))

【第 9集】 箱线图

顾客距离餐厅远近的分布,可以用箱线图。

箱形图(Box plot):又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。其最大的优点就是不受异常值的影响,可以以一种相对稳定的方式描述数据的离散分布情况。线形图:适于了解变量随时间变化的趋势,也可以是一个变量对另外一个变量的趋势。

条形图:适于将事物归类,看类别的分布情况。

饼图:适于看到各部分的占比。

茎叶图:适于了解分布的情况。

箱线图:适于了解中位数和散布的情况。作者求解四分位数的方法是第一种方法

另一种求解箱线图的的方法:箱线图中的四分位数是第二种求解方法

import pandas as pd

import matplotlib.pyplot as plt

from pandas.plotting import table

data = {

'distance': [1, 1, 2, 2, 3, 3, 4, 4, 6, 7, 8, 10, 11, 14, 15, 20, 22]

}

df = pd.DataFrame(data)

fig, ax = plt.subplots(1, 1)

table(ax, np.round(df.describe(), 2),

loc='upper right',

colWidths=[0.2, 0.2]

)

# df.plot.box(title="Consumer spending in each country", vert=False)

df.plot.box(title="customer distance",

ax=ax,

ylim=(0, 30))

plt.grid(linestyle="--", alpha=0.3)

plt.show()

四分位数:有两种求法不包含中位数,求解四分位数

包含中位数,求解四分位数例子:2、4、4、5、6、7、8

第一四分位数(Q1) = 4

第二四分位数(Q2) = 5

第三四分位数(Q3) = 7例子:1、3、3、4、5、6、6、7、8、8

第一四分位数(Q1) = 3

第二四分位数(Q2) = 5.5

第三四分位数(Q3) = 7

import numpy as np

def quartile_t1(data):

'''四分位数'''

n = len(data)

q1, q2, q3 = None, None, None

if n >= 4:

sorted_data = sorted(data)

q2 = np.median(sorted_data)

if n % 2 == 1:

q1 = np.median(sorted_data[:n//2])

q3 = np.median(sorted_data[n//2 + 1:])

else:

q1 = np.median(sorted_data[:n // 2])

q3 = np.median(sorted_data[n // 2:])

return q1, q2, q3

# 不包含中位数,求解四分位数

# 包含中位数,求解四分位数

data1 = [5, 7, 4, 4, 6, 2, 8]

print(quartile_t1(data1)) # 4, 5, 7

print(np.percentile(data1, [25, 50, 75])) # 4. 5. 6.5

data2 = [1, 3, 3, 4, 5, 6, 6, 7, 8, 8]

print(quartile_t1(data2)) # 3, 5.5, 7

print(np.percentile(data2, [25, 50, 75])) # 3.25 5.5 6.75

【第10集】 箱线图2

上图是100棵树的树龄箱线图,问树龄极差是多少,树龄中位数是多少?

由图可以看出:最小值是8,最大值是50,所以极差是50-8=42;中位数是竖线坐标21。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值