【数据分析】基于Python对数据做模型分析

1、准备工作
这里用到pandas和numpy库

import pandas as pd
import numpy as np

引入自带的数据集合

df = pd.resd_csv(“/resources/jupyter/DA001/DA001-003/clean_df.csv”)
df.head()#查看前5行

输出:head函数输出
将个体特征模式可视化

#先引入包
!pip install seaborn
#导入可视化库matplotlib和seborn
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

#查询数据的类型以便于下一步
df.dtypes

输出:dtypes的输出
选择查看其中一列的数据类型:

print(df["stroke"].dtypes)

输出 float64

2、计算其中几项的相关性
函数corr()

df[["bore", "stroke", "compression", "horsepower"]].corr()

输出:在这里插入图片描述可以画散点图观察连续数值变量之间是否有正负相关、或者弱相关的关系。调用函数regplot()

sns.regplot(x = "engine_size", y = "price" ,data = df)
plt.ylim(0,)

在这里插入图片描述至于为什么要加ylim函数,可以从这篇博客里面x = np.linspace、plt.xlim和xticks的区别
通过不同函数得到不同函数的图像表达效果。
总结如下

函数效果
x = np.linspace(a, b, c)画出来的图像仅在a到b之间显示,显示c个点
plt.xlim((a,b))画出的x轴被限制在(a,b)中
e = np.linspace(a, b, c) plt.xticks(e)x轴的刻度显示a到b,并且有c个均匀的刻度

对于数据类型为int和object的可以使用箱型图。引入seaborn中的函数sns.boxplot()。
在这里插入图片描述
不过像下图这样的特征才是最想要的,因为重叠少。
在这里插入图片描述
当然还可以用上个博客里面的df.describe(include = [“某列表头”])函数查询各个变量(默认)和某些变量(include)的计数、均值、标准差、最小值、IQR、最大价值。

3、值计算

drive_wheels_counts = df["drive-wheels"].value_counts().to_frame()
print(drive_wheels_counts)
drive_wheels_counts.rename(columns = {"drive-wheels":"value_counts"},inplace = True)#原数据重命名
drive_wheels_counts.index.name = "drive-wheels"#为数据的索引命名
drive_wheels_counts.head()

在这里插入图片描述

这个功能可以看到数据的分布。如果分步不均匀,要采取特殊的模型进行预测。比如engine-location有198个front前引擎,3个rear后引擎,数据是倾斜的。

4、数据分组分析

将一列的不同类别的数据分组,并可以对整个类别的数据进行分析,可以观察到一个变量如何影响另一个变量。
一个变量的表达方法:unique()

df["drive-wheels"].unique()

输出:
在这里插入图片描述
形成类别数组,然后使用groupby函数分析下列代码实现:平均地来说,哪种类型的驱动轮最有价值。现将驱动轮分组,然后计算平均值。

df_group_one = df[['drive-wheels", "body-style", "price"]]#将这几列的数据提出出来
df_group_one = df_group_one.groupby(["drive-wheels"], as_index = False).mean()
df_group_one

输出:
在这里插入图片描述
两个变量的分组计算

df_gptest=df[['drive-wheels','body-style','price']]
grouped_test1=df_gptest.groupby(['drive-wheels','body-style'],as_index= False).mean()
grouped_test1

输出:在这里插入图片描述
两个变量的透视表(函数pivot)。以其中一个变量为行,一个变量为列生成价值表格。

df_gptest=df[['drive-wheels','body-style','price']]#取数据
grouped_test1=df_gptest.groupby(['drive-wheels','body-style'],as_index= False).mean()#做分组
grouped_pivot=grouped_test1.pivot(index='drive-wheels',columns='body-style')#做透视表
grouped_pivot
grouped_pivot=grouped_pivot.fillna(0) #用0代替缺失值
grouped_pivot

输出在这里插入图片描述
在这里插入图片描述

5、相关性和因果关系
一般情况下用皮尔森值衡量连续值变量的相关性,方法分析结果衡量分组的差异性质。下面先用可视化的方法观察数据。

plt.pcolor(grouped_pivot, cmap = 'RdBu')#根据刚才的透视图数据grouped_pivot画热图
plt.colorbar()
plt.show()

在这里插入图片描述
为图像添加修饰

fig, ax=plt.subplots()
im=ax.pcolor(grouped_pivot, cmap='RdBu')
#标签的名称
row_labels=grouped_pivot.columns.levels[1]
col_labels=grouped_pivot.index
#将刻度和标签移动到中心。
ax.set_xticks(np.arange(grouped_pivot.shape[1])+0.5, minor=False)
ax.set_yticks(np.arange(grouped_pivot.shape[0])+0.5, minor=False)
#插入标签
ax.set_xticklabels(row_labels, minor=False)
ax.set_yticklabels(col_labels, minor=False)
#旋转标签如果太长。
plt.xticks(rotation=90)
fig.colorbar(im)
fig.colorbar(im)

在这里插入图片描述

5.1皮尔森person相关

度量两个变量之间的线性依赖关系(比如在这个例子中,可以计算衡量各个连续值属性和price的相关性。具体计算方式参考这篇博客

两个连续变量(X,Y)的pearson相关性系数(Px,y)等于它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(σX,σY)。系数的取值总是在-1.0到1.0之间,接近0的变量被成为无相关性,接近1或者-1被称为具有强相关性。

from scipy import stats
pearson_coef, p_value = stats.pearsonr(df['wheel-base'], df['price'])#分别计算皮尔森值和对应的显著性水平
print("P is", pearson_coef, " with a P-value of P =", p_value) #输出

得出的结论举例:
由于p值< 0.001,孔与价格之间的相关性具有统计学意义,但线性关系仅为中度(~0.521)。
由于p值< 0.001,发动机尺寸与价格之间的关系具有统计学意义,线性关系非常强。
由于p值< 0.001,城市mpg与价格之间的相关性具有统计学意义,而~ -0.687的系数为负,且为中等强度。

6、方差分析

统计同一个属性的不同组数据之间是否有限显著差异。方差分析返回两个参数

  1. F-test评分。ANOVA假设所有组的平均值是相同的,然后通过计算平均值偏离假设的程度来得到评分值,值越大差距越大。
  2. P值。同上,计算其显著性水平。

6.1、F-test评分计算方法
由于ANOVA是分组进行的,仍然能用到groupby函数

grouped_test2=df_gptest[['drive-wheels','price']].groupby(['drive-wheels'])
#对drive-wheels和price进行分组

grouped_test2.head(2)输出为:
在这里插入图片描述

grouped_test2.get_group('4wd')['price']#将drive-wheels中值为4wd的price值取出来。

在这里插入图片描述

from scipy import stats#引库
f_val, p_val = stats.f_oneway(grouped_test2.get_group('fwd')['price'], grouped_test2.get_group('rwd')['price'], grouped_test2.get_group('4wd')['price']) #计算
print( "ANOVA results: F=", f_val, ", P =", p_val)#输出值

由stats.f_oneway函数计算进行方差分析stats.f_oneway(drives中值为fwd的, drives中值为rwd的, drives中值为4wd的)
输出为:

ANOVA results: F= 67.9540650078 , P = 3.39454435772e-23
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值