《Python專案——描述性統計分析》

ℳ๓₯㎕Van發表於2020-12-24

一,簡介

描述性統計分析,是統計學當中的一種分析方法,它是對原始資料進行概括和觀察後的一種描述,一般分為集中趨勢分析和離散程度分析兩種方法。對於集中趨勢分析,我們主要研究的是資料的集中程度,有眾數,中位數,均值這幾個反映指標;而離散程度分析主要度量的是資料的分散程度,有四分位數,標準差這兩個反映指標。值得注意的是,當資料集的集中趨勢較強時,分散程度就越弱,反之亦然。

二,輸入

#獲得原始資料
def getdata():
	while True:
		data=eval(input('請輸入資料型資料(資料間用\',\'作為分隔符:)'))
		for i in data:
			judge=type(i)
			if judge != int:
				print('輸入非資料型資料,請重新輸入')
				print('-'*20)
				break
			else:
				return data		

三,處理輸出

(一)集中趨勢分析

1.眾數

#對原始資料求眾數
def Mode(data):
	'''
	data:tuple
	'''
	count={}
	mode_list=[]
	for num in data:
		if count.get(num,0) == 0:
			count[num]=1
		else:
			count[num]+=1
	for key,value in count.items():
		if value == max(count.values()):
			mode_list.append(key)
	for i in range(len(mode_list)):
		mode_list[i]=str(mode_list[i])
	return ','.join(mode_list)

2.中位數

def Median(data):
	data=sorted(data)
	if len(data) %2 !=0:
		locate=int((len(data)+1)/2)
		med=data[locate-1]
	else:
		locate=(len(data)+1)/2
		med=(data[int(locate-0.5-1)]+data[int(locate+0.5-1)])/2
	return med

3.均值

def Average(data):
	count=len(data)
	sum=0
	for num in data:
		sum+=num
	avg=sum/count
	return avg

(二)離散程度分析

1.四分位數

def Quartile(data):
	data=sorted(data)
	Ql=(len(data)+1)*0.25
	QU=(3*(len(data)+1))/4
	if Ql ==int(Ql):
		Ml=data[int(Ql)-1]
	else:
		Ml=(1-(Ql-int(Ql)))*data[int(Ql-1)]+(Ql-int(Ql))*data[int(Ql)]
	if QU ==int(QU):
		Mu=data[int(QU)-1]
	else:
		Mu=(1-(QU-int(QU)))*data[int(QU-1)]+(QU-int(QU))*data[int(QU)]
	return Ml,Mu

2.標準差

def Stdev(avg,data):
	mils=[]
	sum=0
	for num in data:
		mils.append((num-avg)**2)
	for num in mils:
		sum+=num
	return (sum/len(data))**(1/2)

四,結合輸出

def getdata():
	while True:
		data=eval(input('請輸入資料型資料(資料間用\',\'作為分隔符):'))
		for i in data:
			judge=type(i)
			if judge != int:
				print('輸入非資料型資料,請重新輸入')
				print('-'*20)
				break
			else:
				return data		
def Mode(data):
	count={}
	mode_list=[]
	for num in data:
		if count.get(num,0) == 0:
			count[num]=1
		else:
			count[num]+=1
	for key,value in count.items():
		if max(count.values())==1:
			return None
		if value == max(count.values()):
			mode_list.append(key)
	for i in range(len(mode_list)):
		mode_list[i]=str(mode_list[i])
	return ','.join(mode_list)
def Median(data):
	data=sorted(data)
	if len(data) %2 !=0:
		locate=int((len(data)+1)/2)
		med=data[locate-1]
		return med
	else:
		locate=(len(data)+1)/2
		med=(data[int(locate-0.5-1)]+data[int(locate+0.5-1)])/2
		return med
def Average(data):
	count=len(data)
	sum=0
	for num in data:
		sum+=num
	avg=sum/count
	return avg
def Quartile(data):
	data=sorted(data)
	Ql=(len(data)+1)*0.25
	QU=(3*(len(data)+1))/4
	if Ql ==int(Ql):
		Ml=data[int(Ql)-1]
	else:
		Ml=(1-(Ql-int(Ql)))*data[int(Ql-1)]+(Ql-int(Ql))*data[int(Ql)]
	if QU ==int(QU):
		Mu=data[int(QU)-1]
	else:
		Mu=(1-(QU-int(QU)))*data[int(QU-1)]+(QU-int(QU))*data[int(QU)]
	return Ml,Mu
def Stdev(avg,data):
	mils=[]
	sum=0
	for num in data:
		mils.append((num-avg)**2)
	for num in mils:
		sum+=num
	return (sum/len(data))**(1/2)
data=getdata()
mode=Mode(data)
med=Median(data)
avg=Average(data)
Ml,Mu=Quartile(data)
std=Stdev(avg,data)
print('眾數為{},\n中位數為{},\n上分位數為{},\n下分位數為{},\n均值為{:.2f},\n標準差為{:.2f},\n'.format(mode,med,Ml,Mu,avg,std))

相關文章