如何使用Python程序完成描述性統(tǒng)計(jì)分析需求
一、前言
1.1 關(guān)于描述性統(tǒng)計(jì)分析
概括地來說,描述性統(tǒng)計(jì)分析就是在收集到的數(shù)據(jù)的基礎(chǔ)上,運(yùn)用制表和分類,圖形以及計(jì)算概括性數(shù)據(jù)來描述數(shù)據(jù)特征的各項(xiàng)活動(dòng)。重要的是,該方法主要內(nèi)容包括頻數(shù)分析、集中趨勢(shì)分析、離散程度分析、分布以及一些基本的統(tǒng)計(jì)圖形。
1.2 本篇目的
本篇內(nèi)容主要是編寫python代碼,以實(shí)現(xiàn)描述性統(tǒng)計(jì)的基本需求,即通過程序獲得在描述性統(tǒng)計(jì)分析時(shí)所需要的數(shù)據(jù)內(nèi)容。具體見下。
1.3 提示
本系列篇屬于實(shí)踐類型的代碼編寫,需要一定的代碼基礎(chǔ),因此有不理解的函數(shù)或方法可以查找他人的教程或是看本人所寫的基礎(chǔ)篇分享。本篇的中心內(nèi)容是2.1與2.2部分,該部分代碼可直接使用,根據(jù)需要可自行修改;而2.3可視化部分了解思路與代碼框架即可,代碼可根據(jù)個(gè)人需要重寫。
二、程序內(nèi)容的編寫
2.1 導(dǎo)入數(shù)據(jù)與前期處理
首先是導(dǎo)入excel表格里的數(shù)據(jù),并進(jìn)行一些基本的設(shè)置。
import pandas as pd import numpy as np import matplotlib.pyplot as plt pd.set_option('display.max_columns',1000) pd.set_option("display.width",1000) pd.set_option('display.max_colwidth',1000) pd.set_option('display.max_rows',1000)#將行和列的最大展示值設(shè)置到1000,則可展示更多的行而不是以省略號(hào)形式展示。 df=pd.read_excel(r'D:\雜貨\編碼數(shù)據(jù).xlsx',sheet_name='編碼數(shù)據(jù)')
第一、二、三行分別是導(dǎo)入pandas,numpy,matplotlib庫(kù),后面會(huì)用到庫(kù)的內(nèi)容來編寫。
第四到第七行分別是將導(dǎo)入列表的輸出展示內(nèi)容擴(kuò)大到1000的數(shù)量(按照需要,1000這個(gè)數(shù)值還可以設(shè)置的更大),這樣在打印輸出表格的時(shí)候,就不會(huì)出現(xiàn)省略號(hào)省略掉中間內(nèi)容的情況。就像我在第一篇基礎(chǔ)篇中導(dǎo)入excel時(shí)出現(xiàn)的情況:
設(shè)置好后的輸出情況:
導(dǎo)入excel表格具體可看我第一篇內(nèi)容:如何在Python中導(dǎo)入EXCEL數(shù)據(jù)
2.2 描述性統(tǒng)計(jì)分析所要計(jì)算的數(shù)據(jù)
通常,描述性統(tǒng)計(jì)分析需要各變量的觀測(cè)值數(shù)量、均值、方差、標(biāo)準(zhǔn)差、最大最小值等,而在python中可運(yùn)用庫(kù)的方法計(jì)算出各個(gè)數(shù)據(jù)。詳細(xì)代碼見以下:
obs=df.count()#觀測(cè)值 means=df.mean()#均值 var=df.var()#方差 std=df.std()#標(biāo)準(zhǔn)差 min=df.min()#最小值 max=df.max()#最大值 mode=df.mode()#眾數(shù) siyi=df.quantile(0.25)#四分之一位數(shù) sisan=df.quantile(0.75)#四分之三位數(shù) median=df.median()#中位數(shù) skew=df.skew()#偏度 kurt=df.kurt()#峰度 print("最大值:\n",max,'\n',"最小值:\n",min,'\n','觀測(cè)量:\n',obs,'\n','均值:\n',means,'\n', "方差:\n",var,"\n",'標(biāo)準(zhǔn)差:\n',std,'\n',"眾數(shù): ",mode,"\n",'四分之一位數(shù):\n',siyi,'\n', '四分之三位數(shù):\n',sisan,'\n','中位數(shù):\n',median,'\n','偏度:\n',skew,'\n','峰度:\n',kurt)
代碼的含義在注釋中已經(jīng)標(biāo)注出來了,不再贅述。(print里的“\n”表示換行輸出)在運(yùn)行以上代碼后,可以得到excel表格中每一列的對(duì)應(yīng)數(shù)據(jù),展示如下:
輸出的樣式如上圖,由于結(jié)果太多太長(zhǎng),就不一一展示。
2.3 數(shù)據(jù)可視化
2.3.1 概述
描述性統(tǒng)計(jì)分析中,除了列出以上的分析數(shù)據(jù)以外,在多數(shù)情況下仍然需要對(duì)重要的數(shù)據(jù)給出可視化的內(nèi)容,即作圖。數(shù)據(jù)可視化的圖的類型有很多種,比如說折線圖、柱狀圖、條形圖、散點(diǎn)圖、氣泡圖、雷達(dá)圖、箱線圖等。而在一般的數(shù)據(jù)分析類報(bào)告中,最常用的便是折線圖、柱狀圖,因此在本篇中只介紹這兩種可視化方法,其他的在后續(xù)教程分享中會(huì)按需要給出。
2.3.2 思路
可視化之前要有一個(gè)編寫代碼的思路,而作圖的基本思路如下:
建立畫布建立坐標(biāo)系輸入x軸數(shù)據(jù)與y軸數(shù)據(jù)設(shè)定x軸與y軸的刻度并給刻度命名作圖2.3.3 編寫代碼
fig=plt.figure()#建立畫布 ax1=fig.add_subplot(1,1,1)#建立坐標(biāo)系 x=np.arange(7)#x軸數(shù)據(jù) y=np.array([jishu1,jishu2,jishu3,jishu4,jishu5,jishu6,jishu7])#y軸數(shù)據(jù) plt.xticks(np.arange(7),['0-50元','50-100元','100-150元','150-200元','200-250元','250-300元','300元及以上'])#x軸長(zhǎng)度與命名 plt.yticks(np.arange(0,350,50))#y軸長(zhǎng)度與命名 plt.plot(x,y)#作圖
建立坐標(biāo)系:
建立坐標(biāo)系中,add_subplot()方法括號(hào)里的數(shù)字的含義是:一行一列的第一個(gè)坐標(biāo)系。這么說可能有點(diǎn)抽象,我給出以下例子:
#代碼1: fig=plt.figure()#建立畫布 ax1=fig.add_subplot(1,1,1)#建立坐標(biāo)系 #代碼2: fig=plt.figure()#建立畫布 ax1=fig.add_subplot(2,2,1)#建立坐標(biāo)系1 ax2=fig.add_subplot(2,2,2)#建立坐標(biāo)系2 ax3=fig.add_subplot(2,2,3)#建立坐標(biāo)系3 ax4=fig.add_subplot(2,2,4)#建立坐標(biāo)系4
代碼1中的(1,1,1)表示一行一列的第一個(gè)坐標(biāo)系;代碼二中的(2,2,1)表示二行二列的第一個(gè)坐標(biāo)系,(2,2,2)表示二行二列的第二個(gè)坐標(biāo)系,(2,2,3)表示二行二列的第三個(gè)坐標(biāo)系,(2,2,4)表示二行二列的第四個(gè)坐標(biāo)系。
而這兩段代碼展示出的坐標(biāo)圖是不一樣的,見下圖:
代碼1:
代碼2:
對(duì)比兩個(gè)輸出結(jié)果,可以很容易地知道,代碼1一張圖中只作了一個(gè)坐標(biāo)系,而代碼2的一張圖中作出了四個(gè)坐標(biāo)系。一行一列的第一個(gè)坐標(biāo)系指的就是代碼1唯一的這一個(gè)坐標(biāo)系,而二行二列的第一個(gè)坐標(biāo)系指的是左上角的坐標(biāo)系,二行二列的第四個(gè)坐標(biāo)系指的是右下角的坐標(biāo)系。這樣應(yīng)該就能比較好地理解這個(gè)函數(shù)的意義了。
附上數(shù)據(jù)(坐標(biāo)):
看到x與y軸數(shù)據(jù)的代碼,其中np.arange()函數(shù)是調(diào)用的np庫(kù)的函數(shù)方法。arange()中,方法與range()長(zhǎng)的比較像:arange(start,end,step)。具體含義可以查看后續(xù)基礎(chǔ)篇分享。若了解range()函數(shù)的話,那么arange(7)中的數(shù)字7的含義我也不用多說。x=np.arange(7)則表示橫坐標(biāo)x分別等于0,1,2,3,4,5,6時(shí)對(duì)應(yīng)的情況。對(duì)于y中的array()函數(shù),其主要是用于矩陣或數(shù)組的輸入的,而本篇中的代碼:y=np.array([jishu1,jishu2,jishu3,jishu4,jishu5,jishu6,jishu7]),其中的jishu1這一系列的命名是我定義的變量名,其具體含義我在后文補(bǔ)充,總之在array()中需要輸入的也是數(shù)字。(按照各個(gè)問題的需要,本篇使用了array(),而x與y都適用np.arange()來輸入數(shù)據(jù)都是可以的)。
由此,x與y的數(shù)值組成了一個(gè)坐標(biāo)(x,y),從而能定義一個(gè)點(diǎn)的位置。
設(shè)定刻度(又可稱長(zhǎng)度)與名稱:
最后三行代碼中的plt.xticks()與plt.yticks()方法分別是為了設(shè)定坐標(biāo)刻度(又可稱長(zhǎng)度)與名稱準(zhǔn)備的。其中,括號(hào)內(nèi)的方法為:(刻度,命名),而np.arange(7)表示橫坐標(biāo)軸設(shè)定的長(zhǎng)度為7,列表['0-50元','50-100元','100-150元','150-200元','200-250元','250-300元','300元及以上']即每一個(gè)刻度的命名。
最后一行代碼則是作出符合以上條件的坐標(biāo)圖。
其結(jié)果展示如下:
顯而易見,x軸的刻度編程了我所設(shè)定的名稱,y軸沒有設(shè)定名稱,則以數(shù)值的形式出現(xiàn)。
為了使坐標(biāo)圖更加直觀,我們也可以給x軸和y軸賦上標(biāo)簽,代碼如下:
plt.xlabel('消費(fèi)金額')#x軸的標(biāo)簽 plt.ylabel('人數(shù)')#y軸的標(biāo)簽
此時(shí)坐標(biāo)圖如下:
對(duì)比前面的坐標(biāo)圖,此時(shí)的坐標(biāo)圖中x軸和y軸都有了它們的“名字”,這樣圖的關(guān)系就更加明朗了。
2.4 補(bǔ)充內(nèi)容
前面提到,array()函數(shù)中的列表是什么意思。我是以我自己所收集的數(shù)據(jù)為例,寫的本篇內(nèi)容,因此有的地方是看個(gè)人研究需要而寫的代碼,在該部分我加以解釋。
Q7=df.iloc[:,15] q7=[] for i in Q7: q7.append(i) print(q7)#讀取所要分析的列的數(shù)據(jù) jishu1=int(q7.count(1)) jishu2=int(q7.count(2)) jishu3=int(q7.count(3)) jishu4=int(q7.count(4)) jishu5=int(q7.count(5)) jishu6=int(q7.count(6)) jishu7=int(q7.count(7))#計(jì)數(shù) print('0-50元的有:',jishu1,'\n','50-100元的有:',jishu2,'\n','100-150元的有:',jishu3,'\n', '150-200元的有:',jishu4,'\n','200-250元的有:',jishu5,'\n','250-300元的有:',jishu6,'\n','300元及以上的有:',jishu7,'\n')
第一行的df.iloc[:,15]表示的含義是我要讀取第十五列的變量的數(shù)據(jù),該內(nèi)容為“選取excel表格中的某一列”的方法的內(nèi)容,屬于基礎(chǔ)篇的操作,在后續(xù)我會(huì)在基礎(chǔ)篇中分享給部分的內(nèi)容,不在此地贅述。
下面的循環(huán)是我將讀取的函數(shù)放入列表中,并用count()函數(shù)計(jì)算個(gè)數(shù)(該數(shù)據(jù)為人數(shù)計(jì)數(shù),因此count()實(shí)際上是在數(shù)人數(shù)),由此得出以下各個(gè)消費(fèi)段的人數(shù),輸出結(jié)果如下:
這七個(gè)數(shù)值就是y軸輸入的數(shù)據(jù)。由此應(yīng)該就能理解我在編寫y軸輸入數(shù)據(jù)的代碼時(shí)列表里的幾個(gè)變量名是啥意思了。
三、完整代碼與總結(jié)
import pandas as pd import numpy as np import matplotlib.pyplot as plt pd.set_option('display.max_columns',1000) pd.set_option("display.width",1000) pd.set_option('display.max_colwidth',1000) pd.set_option('display.max_rows',1000)#將行和列的最大展示值設(shè)置到1000,則可展示更多的行而不是以省略號(hào)形式展示。 df=pd.read_excel(r'D:\雜貨\編碼數(shù)據(jù).xlsx',sheet_name='編碼數(shù)據(jù)') obs=df.count()#觀測(cè)值 means=df.mean()#均值 var=df.var()#方差 std=df.std()#標(biāo)準(zhǔn)差 min=df.min()#最小值 max=df.max()#最大值 mode=df.mode()#眾數(shù) siyi=df.quantile(0.25)#四分之一位數(shù) sisan=df.quantile(0.75)#四分之三位數(shù) median=df.median()#中位數(shù) skew=df.skew()#偏度 kurt=df.kurt()#峰度 print("最大值:\n",max,'\n',"最小值:\n",min,'\n','觀測(cè)量:\n',obs,'\n','均值:\n',means,'\n', "方差:\n",var,"\n",'標(biāo)準(zhǔn)差:\n',std,'\n',"眾數(shù): ",mode,"\n",'四分之一位數(shù):\n',siyi,'\n', '四分之三位數(shù):\n',sisan,'\n','中位數(shù):\n',median,'\n','偏度:\n',skew,'\n','峰度:\n',kurt) #作圖 Q7=df.iloc[:,15] q7=[] for i in Q7: q7.append(i) print(q7)#讀取所要分析的列的數(shù)據(jù) jishu1=int(q7.count(1)) jishu2=int(q7.count(2)) jishu3=int(q7.count(3)) jishu4=int(q7.count(4)) jishu5=int(q7.count(5)) jishu6=int(q7.count(6)) jishu7=int(q7.count(7))#計(jì)數(shù) print('0-50元的有:',jishu1,'\n','50-100元的有:',jishu2,'\n','100-150元的有:',jishu3,'\n', '150-200元的有:',jishu4,'\n','200-250元的有:',jishu5,'\n','250-300元的有:',jishu6,'\n','300元及以上的有:',jishu7,'\n') fig=plt.figure()#建立畫布 ax1=fig.add_subplot(1,1,1)#建立坐標(biāo)系 x=np.arange(7)#x軸數(shù)據(jù) y=np.array([jishu1,jishu2,jishu3,jishu4,jishu5,jishu6,jishu7])#y軸數(shù)據(jù) plt.xticks(np.arange(7),['0-50元','50-100元','100-150元','150-200元','200-250元','250-300元','300元及以上'])#x軸長(zhǎng)度與命名 plt.yticks(np.arange(0,350,50))#y軸長(zhǎng)度與命名 plt.plot(x,y)#作圖 plt.xlabel('消費(fèi)金額')#x軸代表的名字 plt.ylabel('人數(shù)')#y軸代表的名字
到此這篇關(guān)于如何使用Python程序完成描述性統(tǒng)計(jì)分析需求的文章就介紹到這了,更多相關(guān)Python完成描述性統(tǒng)計(jì)分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pip matplotlib報(bào)錯(cuò)equired packages can not be built解決
這篇文章主要介紹了pip matplotlib報(bào)錯(cuò)equired packages can not be built解決,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01淺析Python自帶性能強(qiáng)悍的標(biāo)準(zhǔn)庫(kù)itertools
itertools是python內(nèi)置的模塊,使用簡(jiǎn)單且功能強(qiáng)大。這篇文章就主要介紹了通過itertools實(shí)現(xiàn)可迭代對(duì)象的無限迭代、有限迭代和排列組合。感興趣的同學(xué)可以關(guān)注一下2021-12-12Django單元測(cè)試工具test client使用詳解
這篇文章主要介紹了Django單元測(cè)試工具test client使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08python基于socket函數(shù)實(shí)現(xiàn)端口掃描
這篇文章主要為大家詳細(xì)介紹了python基于socket函數(shù)實(shí)現(xiàn)端口掃描,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05Python爬蟲urllib和requests的區(qū)別詳解
這篇文章主要介紹了Python爬蟲urllib和requests的區(qū)別詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09使用django實(shí)現(xiàn)一個(gè)代碼發(fā)布系統(tǒng)
這篇文章主要介紹了使用django實(shí)現(xiàn)一個(gè)代碼發(fā)布系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07