#导入包
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=“花瓣长度”)