python 各种数据结构创建和基本操作以及QQ图运用

import numpy as np
from scipy import stats
from scipy.stats import norm
import matplotlib.pyplot as plt
"""
创建一个数组

np.array():创建多维数组
np.zeros():一次性创建全0数组
np.ones():一次性创建全1数组
np.arange(start,end,step):返回一个有终点和起点的固定步长的排列
"""
data = np.array([4, 5, 1, 2, 7, 2, 6, 9, 3])
"""
计算均值
"""
dt_mean = np.mean(data)
print("Mean:", np.round(dt_mean, 2))
# 取整函数:np.round([decimals,out])——四舍五入到给定的小数点数,但当整数部分以0结束,则向下取整
#         np.ceil()——向上取整
#         np.floor()——向下取整
"""
计算中位数
"""
dt_median = np.median(data)
print("Median:", dt_median)
"""
计算众数
"""
dt_mode = stats.mode(data)
print("Mode:", dt_mode[0][0])
# mode()函数返回众数的数组维数,其中有一个数组存放众数值,一个数组存放众数出现次数
"""
至少两人生日相同问题
"""


def two_DOB(n):
    """
    计算n个人中至少有两人生日相同的概率
    参数: n,int
    输出: prob,至少有两人生日相同概率
    """
    if n > 365:
        prob = 1
    else:
        a = 1
        sum_of_pro = 365**n
        for i in range(0, n):       # 产生(0,n-1)的数
            a *= 365-i
        prob = 1 - a/sum_of_pro
    return prob


n = [5, 10, 20, 50, 100]
prob = []
for i in range(0, len(n)):
    prob.append(two_DOB(n[i]))
prob = np.round(prob, 2)
print('{}个人中至少有两个人同天生日的概率分别是:{}'.format(n, prob))

"""
a*=b: a=a*b
a+=b:a=a+b
"""
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a == b)
print(a == c)
print(a is b)
print(a is c)
# is 判定是否指向同一对象
"""
数据结构:列表(list)
列表中的长度可变,包含内容可变,列表内的内容可以是不同类型的
用[]或list函数定义列表
"""

a_list = []
print('a_list = ', a_list)
b_list = [1, 2, 3, 'a']
print('b_list = ', b_list)
c_list = ['a', 'b', 'c']
print('c_list = ', c_list)

"""
append 将元素添加到列表尾部
insert将元素插入到列表指定位置,插入范围为0到列表长度之间——指定的位置是0开始的序号
pop将指定位置的元素移除并返回
"""
a_list.append(1)
print('a_list = ', a_list)
a_list.append('abc')
print('a_list = ', a_list)

b_list.insert(2, 'one')
print('b_list = ', b_list)
c_list.pop(1)
print('c_list = ', c_list)

"""
extend()可以追加多个元素——改变原列表值
+ 将两个列表串联起来——生成新列表
"""
c = [1, 2, 3]
c.extend([4, 5, 6, 7])
print(c)

a = [1, 2, 3]
b = [4, 5, 6, 7]
c = a+b
print(c)

"""
数据结构:字典(dict)
字典是拥有灵活尺寸的键值对集合,其中键和值都是python对象
用{}是创建字典的一种方式,在字典中用逗号将键值对分离
"""
empty_dict = {}
dict1 = {'a': 1, 'b': 'Monday', 'c': [1, 2, 3]}

"""
可以访问、插入或设置字典中的元素
可以用del或pop删除值
pop会在删除的同时返回删除的值,并删除键
"""
print(dict1["b"])
ret = dict1.pop('c')
print("删去的值:", ret)
print("ret = ", dict1)

"""
数据结构:集合(set)
集合是一种无序且元素唯一的容器,可以认为集合是一个只有键没有值的字典
集合有两种创建方式:set()或者用大括号{}
集合支持数学上的集合操作,比如并集、交集、差集等
"""

set1 = set([1, 2, 3, 2, 5, 3, 4])
print('set1 = ', set1)
set2 = set([2, 2, 3, 4, 4, 6])
print('set2 = ', set2)

"""
集合操作:
交集(set1.intersection(set2)或&)
并集(set1.union(set2)或|)
差集(set1.difference(set2)或-)——set1中不在set2中的元素
"""
print(set1 & set2)
print(set1 | set2)
print(set1-set2)
print(set2-set1)

"""
蒙特卡罗方法的运用
Q-Q plot衍生数据是否服从某一给定的分布
X~Norm(mu,sigma),验证Y=(X-mu)/sigma~Norm(0,1)
"""
# q = norm.cdf(3, 0, 1)  # cumulative distribution function 累积分布函数
# p = norm.ppf(q)  # 求概率对应的分位数,是求积分的反向操作
# print("标准正态分布,x=3时左侧积分值为:", q)
# print("标准正态分布,左侧积分值为{}对应的x是:{}".format(q, p))

n = 100000
mu = 1
sigma = 2
np.random.seed(123)
x = np.random.normal(mu, sigma, n)
"""
np.random.normal:正态分布
np.random.uniform():均匀分布
np.random.binomial():二项分布
np.random.exponential():指数分布
np.random.poisson():泊松分布
"""
y = (x-mu)/sigma
y.sort()
prob = (np.arange(n)-1/2)/n
q = norm.ppf(prob, 0, 1)            # q为已知分布的x(理想)值
plt.figure()
plt.hist(y, 300, density=True)

"""
直方图,又称质量分布图,是一种统计报告图,
有一系列高度不等的纵向条纹或线段表示数据分布情况
一般用横轴表示数据类型,纵轴表示分布情况
直方图可以被归一化以显示“相对”频率
显示属于几个类别中的每个类别的的比例,其高度为1
"""

"""Q-Q PLOT"""
# q为已知分布的x(理想)值和排列完成的y的关系用散点表示
# 构造y-y图判断x(理想)与y的‘拟合程度’
plt.figure()
plt.scatter(x=q, y=y, color='red')
# plt.plot(y, y, color="blue")
plt.plot(q, q, color="yellow")
plt.show()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱姝姝的逆袭日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值