當前位置:
首頁 >
Scipy科学库
發布時間:2024/8/1
54
豆豆
一、?Scipy模塊
? ? ? ?Scipy是python的一個著名的開源科學庫,SciPy一般都是操縱NumPy數組來進行科學計算,統計分析,可以說是基于NumPy之上。SciPy提供了許多科學計算的庫函數,包含的功能,最優化、線性代數、積分、插值、擬合、特殊函數、快速傅里葉變換、信號處理、圖像處理、常微分方程求解器,系數矩陣計算等,
二 、概率密度
from scipy import stats import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號 #正態分布概率密度 X = [] Y = [] for a in np.linspace(-5, 5, 100):y = stats.norm.pdf(a)X.append(a)Y.append(y) plt.plot(X, Y) plt.xlabel("x") plt.ylabel("p") plt.title("正態分布概率密度") plt.show()?三、正態分布查表
正態分布查表其實就是查累積概率分布。
設某校學生身高服從均值為160, 方差為3600的正態分布,那該校學生身高在180以下的學生比例是多少?
轉換為標準正態分布,服從標準正態分布,,于是我們查標準正態分布表0.5的值,用
scipy.stats.norm.cdf(0.5)
from scipy import statsp = stats.norm.cdf(0.5) print(p)?四、常用統計方法?
from scipy.stats import chi2 # 卡方分布 from scipy.stats import norm # 正態分布 from scipy.stats import t # t分布 from scipy.stats import f # F分布 import matplotlib.pyplot as plt import numpy as np import pandas as pd import scipy.stats as stats from scipy.stats import chi2_contingency # 列聯表分析# matplotlib畫圖注釋中文需要設置 from matplotlib.font_manager import FontProperties xy_font_set = FontProperties(fname=r"c:\windows\fonts\方正稚藝簡體.ttf", size=12) zhushi_font_set = FontProperties(fname=r"c:\windows\fonts\方正粗倩簡體.ttf", size=12) titleYW_font_set = FontProperties(fname=r"c:\windows\fonts\Gabriola.ttf", size=20) titleZW_font_set = FontProperties(fname=r"c:\windows\fonts\漢儀細行楷簡.ttf", size=18)# rvs: Random Variates # pdf: Probability Density Function 概率密度函數 # cdf: Cumulative Distribution Function 概率密度函數的積分函數 # sf: Survival Function (1-CDF) # ppf: Percent Point Function (Inverse of CDF) 百分點函數,概率密度函數的積分值 # isf: Inverse Survival Function (Inverse of SF) # stats: Return mean, variance, (Fisher’s) skew, or (Fisher’s) kurtosis # moment: non-central moments of the distribution# ppf以概率的形式,查詢函數值-----------類似分布臨界表plt.figure() # example ------------------------------------------- 卡方分布(右側單邊) plt.subplot2grid((2, 2), (0, 0)) df = 20 # 自由度 # print(chi2.ppf(0.01, df)) # 計算函q=0.01概率時數值。其中 q = 1-a # print(chi2.cdf(8.260, df)) # 知道x值求a x = np.linspace(chi2.ppf(0.01, df), # 繪制概率密度圖chi2.ppf(0.99, df), 100) plt.plot(x, chi2.pdf(x, df), alpha=0.6, label='chi2 pdf') plt.title(u'自由度為20時的卡方概率密度函數圖', fontproperties=titleZW_font_set, size=10) # 計算平均數、方差、標準差 # print(chi2.mean(df)) # print(chi2.var(df)) # print(chi2.std(df))# example ---------------------------------------------------- 標準正態分布(左側單邊) plt.subplot2grid((2, 2), (0, 1)) # print(norm.ppf(0.6179)) # 知道q時求x, q=a # print(norm.cdf(0.3)) # 知道x時求q x = np.linspace(norm.ppf(0.01), norm.ppf(0.99), 100) plt.plot(x, norm.pdf(x), alpha=0.6, label='norm pdf') plt.title(u'標準正態分布概率密度函數圖', fontproperties=titleZW_font_set, size=10)# example ----------------------------------------------------- t分布(雙邊分布) plt.subplot2grid((2, 2), (1, 0)) df = 15 x = np.linspace(t.ppf(0.01, df), t.ppf(0.99, df), 100) # print(t.ppf(0.95, df)) # q=0.95,a=(1-q)*2 # print(t.cdf(1.753, df)) plt.plot(x, t.pdf(x, df), alpha=0.6, label='t pdf') plt.title(u'自由度為15時的t分布概率密度函數圖', fontproperties=titleZW_font_set, size=10)# example ------------------------------------------------------ F分布(右側單邊分布) plt.subplot2grid((2, 2), (1, 1)) df = 5 dn = 8 x = np.linspace(f.ppf(0.01, df, dn), f.ppf(0.99, df, dn), 100) # print(f.ppf(0.95, df, dn)) plt.plot(x, f.pdf(x, df, dn), alpha=0.6, label='f pdf') plt.title(u'自由度為5和8時的f分布概率密度函數圖', fontproperties=titleZW_font_set, size=10)# example ------------------------------------------------------- 非標準正態分布 plt.figure() std = 1 mean = 2 normalDistribution = stats.norm(mean, std) # 構建統計分布 x = np.linspace(normalDistribution.ppf(0.01), normalDistribution.ppf(0.99), 100) plt.plot(x, normalDistribution.pdf(x)) # plt.show()# example -------------------------------------------------------- 對連續數據進行正態擬合 plt.figure() train = pd.read_csv("csv/Titanic/train.csv") train_Age = train.dropna(subset=['Age']) M_S = stats.norm.fit(train_Age['Age']) # 正態擬合的平均值與標準差 train_Age['Age'].plot(kind='kde') # 原本的概率密度分布圖normalDistribution = stats.norm(M_S[0], M_S[1]) # 繪制擬合的正態分布圖 x = np.linspace(normalDistribution.ppf(0.01), normalDistribution.ppf(0.99), 100) plt.plot(x, normalDistribution.pdf(x), c='orange') plt.xlabel('Age about Titanic') plt.title('Titanic[Age] on NormalDistribution', size=20) plt.legend(['Origin', 'NormDistribution'])np.random.normal()的意思是一個正態分布,normal這里是正態的意思。 numpy.random.normal(loc=0,scale=1e-2,size=shape) 參數loc(float):正態分布的均值,對應著這個分布的中心。 參數scale(float):正態分布的標準差 參數size(int 或者整數元組):輸出矩陣的shape,默認為None。# ----------------------------------------------------------------- R x C列聯表,獨立性檢驗 # 建立關于性別與存活 train_pclass_0 = train['Pclass'][train['Survived'] == 0].value_counts() train_pclass_1 = train['Pclass'][train['Survived'] == 1].value_counts() train_pclass_01 = pd.concat([train_pclass_0, train_pclass_1], axis=1, sort=True) train_pclass_01.columns = ['Not_Survived', 'Survived'] g, p, dof, expctd = chi2_contingency(train_pclass_01.values) # g為chi2值,服從自由度為dof的卡方分布print(g) # 擬合優度檢驗,判斷兩個分類型變量是否獨立 # 首先繪制卡方自由度為dof的曲線 plt.figure() x = np.linspace(chi2.ppf(0.01, dof), chi2.ppf(0.99, dof), 100) plt.plot(x, chi2.pdf(x, dof))# 以95%置信區間,查看小概率事件區間 plt.axvline(chi2.ppf(0.975, dof), color='r') plt.axvline(chi2.ppf(0.025, dof), color='r') plt.title('chi2 distribution'+'whose dof is '+str(dof)) plt.text(chi2.ppf(0.975, dof), 0.02, 'q=0.95,z='+str(round(chi2.ppf(0.975, dof), 2)), ha='right', va='top', color='g', alpha=0.8, size=15) plt.text(chi2.ppf(0.025, dof), 0.02, 'q=0.05,z='+str(round(chi2.ppf(0.025, dof), 2)), ha='left', va='top', color='g', alpha=0.8, size=15)plt.show()
參考
Python機器學習及分析工具:Scipy篇
Scipy學習總結
Scipy簡介_Are you ready的博客-CSDN博客_scipy
總結
- 上一篇: 线性同余法产生随机数C语言,使用线性同余
- 下一篇: BCH编码与译码(MATLAB实现)