目录
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模块提供了基本的统计功能,可以计算均值、中位数、方差、标准差等统计量。通过结合使用这两个模块,可以方便地进行随机数生成和统计分析。掌握这些知识可以帮助开发人员更好地处理随机数和统计计算,在实际应用中发挥重要作用。
标签:statistics,Python,random,随机,模块,print,data From: https://blog.csdn.net/qq_38641481/article/details/139141101