Python_简单交互作用回归分析及散点图矩阵

本文通过数据预处理、探索性分析、散点图绘制和回归模型建立,揭示了工资与教育、年龄等变量的关系,并特别分析了性别对教育与工资间关系的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数据准备

import urllib.request
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import pandas as pd
# 下载同时显示进度条
def jdt(down, pic, all):
    """
    @down : 已经下载的数据块
    @pic : 数据块的大小
    @all : 远程文件的大小
    """
    jd = 100.0 * down * pic / all
    if jd > 100:
        jd = 100
    print('%.2f%%'%jd)

url = 'http://lib.stat.cmu.edu/datasets/CPS_85_Wages'
fil_out =  r'D:\Python_data\wages.txt'
urllib.request.urlretrieve(url, fil_out,jdt)

2、数据读取及简单探索

查看下载文件,前27行为无效数据, 后6行也是无效
数据描述如下:

EDUCATION: Number of years of education.
SOUTH: Indicator variable for Southern Region (1=Person lives in
South, 0=Person lives elsewhere).
SEX: Indicator variable for sex (1=Female, 0=Male).
EXPERIENCE: Number of years of work experience.
UNION: Indicator variable for union membership (1=Union member,
0=Not union member).
WAGE: Wage (dollars per hour).
AGE: Age (years).
RACE: Race (1=Other, 2=Hispanic, 3=White).
OCCUPATION: Occupational category (1=Management, 2=Sales, 3=Clerical, 4=Service, 5=Professional, 6=Other).
SECTOR: Sector (0=Other, 1=Manufacturing, 2=Construction).
MARR: Marital Status (0=Unmarried, 1=Married)

name = ['EDUCATION', 'SOUTH', 'SEX', 'EXPERIENCE', 'UNION',
        'WAGE', 'AGE', 'RACE', 'OCCUPATION', 'SECTOR', 'MARR']
data_wage = pd.read_table(fil_out, skiprows=27, skipfooter = 6, sep = '\t', header=None )
data_wage.columns = name
# 去掉大部分分类变量看相关
d = ['EDUCATION', 'SEX', 'EXPERIENCE', 'WAGE', 'AGE']
pd.plotting.scatter_matrix(data_wage[d], color='steelblue')
plt.show()

在这里插入图片描述

3、绘制交互作用相关性散点

# 绘制回归相关性矩阵+交互作用
import seaborn
seaborn.pairplot(data_wage, vars=['WAGE', 'AGE', 'EDUCATION']
                ,kind = 'reg', hue = 'SEX', size=5)
plt.show()

在这里插入图片描述

4、建模分析

# 单变量回归绘图+交互作用
seaborn.lmplot(y='WAGE', x = 'EDUCATION', hue = 'SEX',data=data_wage)
plt.show()
# 建模
from statsmodels.formula.api import ols
results = ols('WAGE~EDUCATION + C(SEX) + EDUCATION*C(SEX)', data = data_wage).fit()
print(results.summary())

结果如下:
在这里插入图片描述

==============================================================================
Dep. Variable:                   WAGE   R-squared:                       0.190
Model:                            OLS   Adj. R-squared:                  0.186
Method:                 Least Squares   F-statistic:                     41.50
Date:                Sun, 30 Sep 2018   Prob (F-statistic):           4.24e-24
Time:                        18:07:55   Log-Likelihood:                -1575.0
No. Observations:                 534   AIC:                             3158.
Df Residuals:                     530   BIC:                             3175.
Df Model:                           3
Covariance Type:            nonrobust
=========================================================================================
                            coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------------
Intercept                 1.1046      1.314      0.841      0.401      -1.476       3.685
C(SEX)[T.1]              -4.3704      2.085     -2.096      0.037      -8.466      -0.274
EDUCATION                 0.6831      0.099      6.918      0.000       0.489       0.877
EDUCATION:C(SEX)[T.1]     0.1725      0.157      1.098      0.273      -0.136       0.481
==============================================================================
Omnibus:                      208.151   Durbin-Watson:                   1.863
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             1278.081
Skew:                           1.587   Prob(JB):                    2.94e-278
Kurtosis:                       9.883   Cond. No.                         170.
==============================================================================

就该数据而言,男性受教育作用要比女性受教育作用大,这可能是女性存在生育期工作空挡和社会对男性偏向造成的

<think>好的,我现在需要回答用户关于如何创建或生成散点图矩阵的问题,特别是使用数据可视化库。首先,我要确认用户的需求。散点图矩阵通常用于展示多个变量之间的关系,这在探索性数据分析中非常有用。用户可能希望了解具体的实现步骤和不同库的使用方法。 首先,我应该回忆一下常用的Python数据可视化库,比如Seaborn和Matplotlib。根据用户提供的引用,尤其是引用[1]、[2]和[4],Seaborn的pairplot函数似乎是生成散点图矩阵的主要工具。此外,用户还提到了其他库如pandas和plotly,可能需要一并介绍。 接下来,我需要整理具体的步骤。首先安装必要的库,然后导入数据,接着使用Seaborn的pairplot函数生成基础图表。同时,可能需要提到如何自定义样式,比如添加回归线或直方图。另外,用户可能对交互可视化感兴趣,所以Plotly Express也是一个不错的选择,尤其是在生成交互式图表方面。 然后,我需要考虑示例代码的准确性。例如,使用Seaborn内置的数据集(如iris)作为示例数据,确保代码可以直接运行。同时,要注释代码,解释每个参数的作用,比如hue参数用于分类着色,diag_kind设置对角线图表类型等。 还要注意用户提到的引用内容,确保正确引用相关资源。例如,引用[1]和[2]详细说明了Seaborn的散点图矩阵应用,需要将这些信息整合到回答中。同时,用户可能对性能优化或不同应用场景有后续问题,因此生成相关问题也是有必要的。 另外,用户可能对高级定制感兴趣,比如颜色调整、添加标题或调整布局,这些内容需要涵盖在回答中。最后,确保回答结构清晰,分步骤说明,并提供代码示例,帮助用户逐步实现散点图矩阵的创建。</think>在Python中创建散点图矩阵主要依赖数据可视化库$seaborn$和$pandas$。以下是具体实现方法: ### 一、使用Seaborn的pairplot方法 ```python import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据集 iris = sns.load_dataset("iris") # 基础散点图矩阵 sns.pairplot(iris, hue="species", diag_kind="hist") plt.show() ``` - `hue`参数实现分类变量着色[^2] - `diag_kind`控制对角线显示直方图或密度图 - 自动绘制所有数值列两两关系 ### 二、使用Pandas的scatter_matrix ```python from pandas.plotting import scatter_matrix df = iris.iloc[:, :4] # 仅选取数值列 scatter_matrix(df, figsize=(12,8), diagonal='kde') plt.show() ``` - 需先过滤非数值列 - `diagonal`参数定义对角线图类型 - 默认使用Matplotlib渲染引擎[^4] ### 三、高级定制方案 ```python g = sns.PairGrid(iris, hue="species") g.map_upper(sns.scatterplot) # 上三角散点图 g.map_lower(sns.kdeplot) # 下三角密度图 g.map_diag(sns.histplot) # 对角线直方图 g.add_legend() ``` - 使用$PairGrid$实现分区域定制[^2] - 支持混合多种图表类型 - 可添加相关系数等统计指标 ### 四、交互式实现(Plotly) ```python import plotly.express as px fig = px.scatter_matrix(iris, dimensions=["sepal_length","sepal_width","petal_length","petal_width"], color="species") fig.show() ``` - 生成可缩放交互图表 - 支持悬停显示数据详情 - 适合网页端展示[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scc_hy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值