如何使用Python程序完成描述性統(tǒng)計(jì)分析需求
一、前言
1.1 關(guān)于描述性統(tǒng)計(jì)分析
概括地來(lái)說(shuō),描述性統(tǒng)計(jì)分析就是在收集到的數(shù)據(jù)的基礎(chǔ)上,運(yùn)用制表和分類(lèi),圖形以及計(jì)算概括性數(shù)據(jù)來(lái)描述數(shù)據(jù)特征的各項(xiàng)活動(dòng)。重要的是,該方法主要內(nèi)容包括頻數(shù)分析、集中趨勢(shì)分析、離散程度分析、分布以及一些基本的統(tǒng)計(jì)圖形。
1.2 本篇目的
本篇內(nèi)容主要是編寫(xiě)python代碼,以實(shí)現(xiàn)描述性統(tǒng)計(jì)的基本需求,即通過(guò)程序獲得在描述性統(tǒng)計(jì)分析時(shí)所需要的數(shù)據(jù)內(nèi)容。具體見(jiàn)下。
1.3 提示
本系列篇屬于實(shí)踐類(lèi)型的代碼編寫(xiě),需要一定的代碼基礎(chǔ),因此有不理解的函數(shù)或方法可以查找他人的教程或是看本人所寫(xiě)的基礎(chǔ)篇分享。本篇的中心內(nèi)容是2.1與2.2部分,該部分代碼可直接使用,根據(jù)需要可自行修改;而2.3可視化部分了解思路與代碼框架即可,代碼可根據(jù)個(gè)人需要重寫(xiě)。
二、程序內(nèi)容的編寫(xiě)
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)容來(lái)編寫(xiě)。
第四到第七行分別是將導(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ì)代碼見(jiàn)以下:
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)注出來(lái)了,不再贅述。(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ù)可視化的圖的類(lèi)型有很多種,比如說(shuō)折線圖、柱狀圖、條形圖、散點(diǎn)圖、氣泡圖、雷達(dá)圖、箱線圖等。而在一般的數(shù)據(jù)分析類(lèi)報(bào)告中,最常用的便是折線圖、柱狀圖,因此在本篇中只介紹這兩種可視化方法,其他的在后續(xù)教程分享中會(huì)按需要給出。
2.3.2 思路
可視化之前要有一個(gè)編寫(xiě)代碼的思路,而作圖的基本思路如下:
建立畫(huà)布建立坐標(biāo)系輸入x軸數(shù)據(jù)與y軸數(shù)據(jù)設(shè)定x軸與y軸的刻度并給刻度命名作圖2.3.3 編寫(xiě)代碼
fig=plt.figure()#建立畫(huà)布 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)系。這么說(shuō)可能有點(diǎn)抽象,我給出以下例子:
#代碼1: fig=plt.figure()#建立畫(huà)布 ax1=fig.add_subplot(1,1,1)#建立坐標(biāo)系 #代碼2: fig=plt.figure()#建立畫(huà)布 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)圖是不一樣的,見(jiàn)下圖:
代碼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的含義我也不用多說(shuō)。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è)問(wèn)題的需要,本篇使用了array(),而x與y都適用np.arange()來(lái)輸入數(shù)據(jù)都是可以的)。
由此,x與y的數(shù)值組成了一個(gè)坐標(biāo)(x,y),從而能定義一個(gè)點(diǎn)的位置。
設(shè)定刻度(又可稱(chēng)長(zhǎng)度)與名稱(chēng):
最后三行代碼中的plt.xticks()與plt.yticks()方法分別是為了設(shè)定坐標(biāo)刻度(又可稱(chēng)長(zhǎng)度)與名稱(chē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é)果展示如下:

顯而易見(jiàn),x軸的刻度編程了我所設(shè)定的名稱(chēng),y軸沒(méi)有設(shè)定名稱(chēng),則以數(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ù)為例,寫(xiě)的本篇內(nèi)容,因此有的地方是看個(gè)人研究需要而寫(xiě)的代碼,在該部分我加以解釋。
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)該就能理解我在編寫(xiě)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()#建立畫(huà)布
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)文章
Windows自動(dòng)執(zhí)行python腳本操作步驟
我們想在Windows中運(yùn)行一個(gè)Python腳本,我們可以通過(guò)CMD,首先進(jìn)入python文件所在的目錄,之后運(yùn)行。但是這樣很麻煩,跟著本文操作就可以解決啦2021-09-09
Python中有哪些關(guān)鍵字及關(guān)鍵字的用法
這篇文章主要介紹了Python中有哪些關(guān)鍵字及關(guān)鍵字的用法,分享python中常用的關(guān)鍵字,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
python 畫(huà)3維軌跡圖并進(jìn)行比較的實(shí)例
今天小編就為大家分享一篇python 畫(huà)3維軌跡圖并進(jìn)行比較的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
python讀寫(xiě)csv文件方法詳細(xì)總結(jié)
在本文中小編給各位分享的是關(guān)于python讀寫(xiě)csv文件方法的詳細(xì)內(nèi)容,對(duì)此有需要的朋友們跟著學(xué)習(xí)參考下。2019-07-07
C#返回當(dāng)前系統(tǒng)所有可用驅(qū)動(dòng)器符號(hào)的方法
這篇文章主要介紹了C#返回當(dāng)前系統(tǒng)所有可用驅(qū)動(dòng)器符號(hào)的方法,涉及C#操作系統(tǒng)硬件驅(qū)動(dòng)的相關(guān)技巧,需要的朋友可以參考下2015-04-04
顯卡驅(qū)動(dòng)CUDA?和?pytorch?CUDA?之間的區(qū)別
本文主要介紹了顯卡驅(qū)動(dòng)CUDA?和?pytorch?CUDA?之間的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Python中reduce()函數(shù)的用法詳細(xì)解讀
這篇文章主要介紹了Python中reduce()函數(shù)的用法詳細(xì)解讀,reduce函數(shù)是通過(guò)函數(shù)對(duì)迭代器對(duì)象中的元素進(jìn)行遍歷操作,但需要注意的是?reduce?函數(shù)返回的是計(jì)算的結(jié)果,而?map/filter?返回的是作用后的迭代器對(duì)象,需要的朋友可以參考下2023-08-08
使用Python對(duì)mongo數(shù)據(jù)庫(kù)中字符串型正負(fù)數(shù)值比較大小
這篇文章主要介紹了使用Python對(duì)mongo數(shù)據(jù)庫(kù)中字符串型正負(fù)數(shù)值比較大小,2023-04-04

