【Python快速上手(三十)】- 详解Python random 模块和 statistics 模块

Python快速上手(三十)- 详解Python random 模块和 statistics 模块

1. Python random 模块

Python的random模块用于生成伪随机数,提供了各种函数来生成随机数、随机选择、打乱序列等。以下将详细介绍random模块中的常用函数和用法。

1.1 生成随机数

1.1.1 random()
生成一个介于0和1之间的随机浮点数。

import random

print(random.random())  # 例如:0.37444887175646646

1.1.2 uniform(a, b)
生成一个介于a和b之间的随机浮点数。

print(random.uniform(1, 10))  # 例如:7.251607167706249

1.1.3 randint(a, b)
生成一个介于a和b之间的随机整数,包括a和b。

print(random.randint(1, 10))  # 例如:7

1.1.4 randrange(start, stop[, step])
生成一个从start到stop之间以step为间隔的随机整数。

print(random.randrange(1, 10, 2))  # 例如:3

1.2 随机选择和打乱

1.2.1 choice(seq)
从序列seq中随机选择一个元素。

choices = ['apple', 'banana', 'cherry']
print(random.choice(choices))  # 例如:'banana'

1.2.2 choices(population, weights=None, *, cum_weights=None, k=1)
从population中随机选择k个元素,可以设置权重。

print(random.choices(choices, k=2))  # 例如:['apple', 'cherry']
print(random.choices(choices, weights=[1, 2, 1], k=2))  # 例如:['banana', 'banana']

1.2.3 sample(population, k)
从population中随机选择k个不重复的元素。

print(random.sample(choices, 2))  # 例如:['cherry', 'banana']

1.2.4 shuffle(x[, random])
将序列x中的元素随机打乱。

random.shuffle(choices)
print(choices)  # 例如:['cherry', 'banana', 'apple']

1.3 随机分布

1.3.1 normalvariate(mu, sigma)
生成服从正态分布的随机浮点数,均值为mu,标准差为sigma。

print(random.normalvariate(0, 1))  # 例如:-1.3648562559375676

1.3.2 lognormvariate(mu, sigma)
生成服从对数正态分布的随机浮点数。

print(random.lognormvariate(0, 1))  # 例如:0.34475694097321027

1.3.3 expovariate(lambd)
生成服从指数分布的随机浮点数,参数lambd是指数分布的lambda。

print(random.expovariate(1.5))  # 例如:0.2763192892529276

1.3.4 betavariate(alpha, beta)
生成服从Beta分布的随机浮点数。

print(random.betavariate(0.5, 0.5))  # 例如:0.782085874328928

1.3.5 gammavariate(alpha, beta)
生成服从Gamma分布的随机浮点数。

print(random.gammavariate(1, 2))  # 例如:1.7224712311787424

1.4 种子和状态

1.4.1 seed(a=None, version=2)
初始化随机数生成器的种子。

random.seed(10)
print(random.random())  # 例如:0.5714025946899135

1.4.2 getstate()
返回当前随机数生成器的内部状态。

state = random.getstate()
print(state)

1.4.3 setstate(state)
设置随机数生成器的内部状态。

random.setstate(state)

2. Python statistics 模块

Python的statistics模块提供了一些基本的统计功能,可以用于计算均值、中位数、方差、标准差等统计量。以下将详细介绍statistics模块中的常用函数和用法。

2.1 均值和中位数

2.1.1 mean(data)
计算数据data的算术平均值。

import statistics

data = [1, 2, 3, 4, 5]
print(statistics.mean(data))  # 3

2.1.2 median(data)
计算数据data的中位数。

print(statistics.median(data))  # 3

2.1.3 median_low(data)
计算数据data的低中位数。

print(statistics.median_low(data))  # 3

2.1.4 median_high(data)
计算数据data的高中位数。

print(statistics.median_high(data))  # 3

2.1.5 median_grouped(data, interval=1)
计算数据data的分组中位数。

grouped_data = [1, 3, 3, 5, 7]
print(statistics.median_grouped(grouped_data))  # 3

2.2 众数

2.2.1 mode(data)
计算数据data的众数。

mode_data = [1, 2, 2, 3, 3, 3, 4]
print(statistics.mode(mode_data))  # 3

2.2.2 multimode(data)
计算数据data的所有众数。

print(statistics.multimode(mode_data))  # [3]

2.3 方差和标准差

2.3.1 variance(data, xbar=None)
计算数据data的方差。

print(statistics.variance(data))  # 2.5

2.3.2 stdev(data, xbar=None)
计算数据data的标准差。

print(statistics.stdev(data))  # 1.5811388300841898

2.4 协方差和相关性

2.4.1 covariance(x, y)
计算两个数据集x和y的协方差。

x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
print(statistics.covariance(x, y))  # -2.5

2.4.2 correlation(x, y)
计算两个数据集x和y的相关性。

print(statistics.correlation(x, y))  # -1.0

2.5 分位数和百分位数

2.5.1 quantiles(data, *, n=4, method=‘exclusive’)
计算数据data的分位数。

quantile_data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(statistics.quantiles(quantile_data, n=4))  # [2.5, 5.5, 8.5]

2.6 几何均值和调和均值

2.6.1 geometric_mean(data)
计算数据data的几何均值。

print(statistics.geometric_mean(data))  # 2.605171084697352

2.6.2 harmonic_mean(data)
计算数据data的调和均值。

print(statistics.harmonic_mean(data))  # 2.18978102189781

3. 实际应用案例

3.1 使用random模块生成随机样本并计算统计量

以下示例展示了如何使用random模块生成随机样本,并使用statistics模块计算均值、方差和标准差。

import random
import statistics

# 生成1000个0到100之间的随机整数
data = [random.randint(0, 100) for _ in range(1000)]

# 计算统计量
mean = statistics.mean(data)
variance = statistics.variance(data)
stdev = statistics.stdev(data)

print(f"Mean: {mean}")
print(f"Variance: {variance}")
print(f"Standard Deviation: {stdev}")

3.2 使用random模块模拟抛硬币实验

以下示例展示了如何使用random模块模拟抛硬币实验,并使用statistics模块计算结果的统计量。

import random
import statistics

def coin_flip():
    return 'H' if random.random() < 0.5 else 'T'

# 模拟1000次抛硬币
results = [coin_flip() for _ in range(1000)]

# 统计结果
heads_count = results.count('H')
tails_count = results.count('T')

print(f"Heads: {heads_count}, Tails: {tails_count}")

# 计算比例
heads_ratio = heads_count / len(results)
tails_ratio = tails_count / len(results)

print(f"Heads Ratio: {heads_ratio}, Tails Ratio: {tails_ratio}")

3.3 使用random模块生成正态分布数据并计算统计量
以下示例展示了如何使用random模块生成正态分布数据,并使用statistics模块计算均值和标准差。

import random
import statistics

# 生成1000个服从正态分布的随机浮点数,均值为0,标准差为1
data = [random.normalvariate(0, 1) for _ in range(1000)]

# 计算统计量
mean = statistics.mean(data)
stdev = statistics.stdev(data)

print(f"Mean: {mean}")
print(f"Standard Deviation: {stdev}")

4. 总结

本文详细介绍了Python中的random模块和statistics模块。random模块用于生成伪随机数,支持多种随机数生成方法和随机分布。statistics模块提供了基本的统计功能,可以计算均值、中位数、方差、标准差等统计量。通过结合使用这两个模块,可以方便地进行随机数生成和统计分析。掌握这些知识可以帮助开发人员更好地处理随机数和统计计算,在实际应用中发挥重要作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值