python描述性统计程序_鸢尾花数据集-描述性统计分析-python篇

该博客介绍了如何使用Python进行描述性统计分析,通过加载鸢尾花数据集,展示了如何计算各类别频数、频率、特征的均值、中位数、众数以及绘制分布图,并探讨了偏度和峰度等概念。
摘要由CSDN通过智能技术生成

#导入包

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn.datasets import load_iris

import warnings

#设置seaborn绘图的样式

sns.set(style=“darkgrid”)

plt.rcParams[“font.family”]=“SimHei”

plt.rcParams[“axes.unicode_minus”]=False

#忽视警告信息

warnings.filterwarnings(“ignore”)

#加载鸢尾花数据集

iris=load_iris()

#display(iris)

#iris.data:鸢尾花数据集

#iris.target:每朵鸢尾花对应的类别。(取值为0,1,2)

print(iris.data[:10],iris.target[:10])

#iris.feature_names:特征列的名称。

#iris.target_name:鸢尾花类别的名称。

print(iris.feature_names,iris.target_names)

#将鸢尾花数据与对应的类型合并,组合成完整的记录。

data=np.concatenate([iris.data,iris.target.reshape(-1,1)],axis=1)

print(type(data))

print(data[:10])

print(data.dtype)

data=pd.DataFrame(data,

columns=[“sepal_length”,“sepal_width”,“petal_length”,“petal_width”,“type”])

print(type(data))

data.sample(10)

print(data.head())

data.info()

#分析

#计算鸢尾花数据中,每个类别出现的频数

frequency=data[“type”].value_counts()

print(frequency)

print(type(frequency))

#计算每个类别出现的频率

percentage=frequency*100/len(data)

print(percentage)

frequency.plot(kind=“bar”)

#计算花萼长度的均值

mean=data[“sepal_length”].mean()

#计算花萼长度的中位数

median=data[“sepal_length”].median()

#计算花萼长度的众数

s=data[“sepal_length”].mode()

#注意,model方法返回的是series类型

print(type(s))

print(s.info())

mode=s.iloc[0]

print(mean,median,mode)

from scipy import stats

stats.mode(data[“sepal_length”]).mode

#绘制数据的分布(直方图+密度图)

sns.distplot(data[“sepal_length”])

plt.axvline(mean,ls="-",color=“r”,label=“均值”)

plt.axvline(median,ls="-",color=“g”,label=“中值”)

plt.axvline(mean,ls="-",color=“indigo”,label=“众数”)

plt.legend()

x=np.arange(10,19)

n=len(x)

#计算四分位的索引(index)

q1_index=(n-1)*0.25

q2_index=(n-1)*0.5

q3_index=(n-1)*0.75

print(q1_index,q2_index,q3_index)

#将index转化成整数类型

index=np.array([q1_index,q2_index,q3_index]).astype(np.int32)

print(x[index])

plt.figure(figsize=(15,4))

plt.xticks(x)

plt.plot(x,np.zeros(len(x)),ls="",marker=“D”,ms=15,label=“元素值”)

plt.plot(x[index],np.zeros(len(index)),ls="",marker=“X”,ms=15,label=“四分位值”)

plt.legend()

x=np.arange(10,20)

n=len(x)

q1_index=(n-1)*0.25

q2_index=(n-1)*0.5

q3_index=(n-1)*0.75

print(q1_index,q2_index,q3_index)

index=np.array([q1_index,q2_index,q3_index])

#计算左边元素的值

left=np.floor(index).astype(np.int32)

#计算右边元素的值

right=np.ceil(index).astype(np.int32)

#获取index的小数部分与整数部分

weight,_=np.modf(index)

#根据左右两边的整数,加权计算四分位数的值,权重与距离成反比

q=x[left] * (1-weight) + x[right] * weight

print(q)

plt.figure(figsize=(15,4))

plt.xticks(x)

plt.plot(x,np.zeros(len(x)),ls="",marker=“D”,ms=15,label=“元素值”)

plt.plot(q,np.zeros(len(index)),ls="",marker=“X”,ms=15,label=“四分位值”)

for v in q:

plt.text(v,0.01,s=v,fontsize=15)

plt.legend()

#numpy

x = [1, 3, 10, 15, 18, 20, 23, 25]

#quantile与percentile都可以就算分位数,不同的是,quantile方法

#q(要计算的分位数)的取值范围为【0,1】,而percentile方法,q的

#取值范围为【0,100】

print(np.quantile(x,q=[0.25,0.5,0.75]))

print(np.percentile(x,q=[25,50,75]))

#pandas

x = [1, 3, 10, 15, 18, 20, 23, 25]

s=pd.Series(x)

print(s.describe())

s.describe(percentiles=[0.25,0.9])

#计算极差

sub=data[“sepal_length”].max()-data[“sepal_length”].min()

#计算方差

var=data[“sepal_length”].var()

#计算标准差

std=data[“sepal_length”].std()

print(sub, var, std)

plt.figure(figsize=(15,4))

plt.ylim(-0.5,1.5)

#print(data[“petal_width”])

plt.plot(data[“petal_length”], np.zeros(len(data)), ls="", marker=“o”,ms=10,color=“g”,label=“花瓣长度”)

plt.plot(data[“petal_width”], np.ones(len(data)), ls="", marker=“o”,ms=10,color=“r”,label=“花瓣宽度”)

plt.axvline(data[“petal_length”].mean(),ls="–",color=“g”,label=“花瓣长度均值”)

plt.axvline(data[“petal_width”].mean(),ls="–",color=“r”,label=“花瓣长度均值”)

plt.legend()

#构造左偏分布数据

t1=np.random.randint(1,11,size=100)

t2=np.random.randint(11,21,size=500)

t3=np.concatenate([t1,t2])

left_skew=pd.Series(t3)

#构造右偏分布数据

t1=np.random.randint(1,11,size=500)

t2=np.random.randint(11,21,size=100)

t3=np.concatenate([t1,t2])

right_skew=pd.Series(t3)

#计算偏度

print(left_skew.skew(),right_skew.skew())

#绘制核密度图 =概率密度图

sns.kdeplot(left_skew,shade=True,label=“左偏”)

sns.kdeplot(right_skew,shade=True,label=“右偏”)

plt.legend()

#标准正态分布

standard_normal=pd.Series(np.random.normal(0,1,size=100000))

print(“标准正态分布峰度:”,standard_normal.kurt(), “标准差:”,standard_normal.std())

print(“花萼宽度峰度:”,data[“sepal_width”].kurt(),“标准差:”,data[“sepal_width”].std())

print(“花瓣长度峰度:”,data[“petal_length”].kurt(),“标准差:”,data[“petal_length”].std())

sns.kdeplot(standard_normal,label=“标准正态分布”)

sns.kdeplot(data[“sepal_width”],label=“花萼宽度”)

sns.kdeplot(data[“petal_length”],label=“花瓣长度”)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值