pandas dataframe根据相关系数矩阵绘制线性回归散点图
时间: 2023-08-26 13:04:52 浏览: 158
好的,您的问题是关于如何根据相关系数矩阵绘制线性回归散点图。我可以为您提供一些指导。
首先,您需要使用 Pandas 库中的 corr() 函数计算出相关系数矩阵。该函数可以对 DataFrame 中的每一对列计算相关系数,从而创建一个方阵。
接下来,您可以使用 Seaborn 库绘制散点图,使用线性回归模型拟合数据点。请注意,Seaborn 可以直接从 Pandas DataFrame 中读取数据,并自动进行数据转换和绘图。
以下是完整的代码示例,可用于绘制基于相关系数矩阵的线性回归散点图:
```
import pandas as pd
import seaborn as sns
# 读取数据,并计算相关系数矩阵
data = pd.read_csv("your_data.csv")
corr_matrix = data.corr()
# 绘制散点图,使用线性回归模型拟合数据点
sns.regplot(x="column_1", y="column_2", data=data, scatter_kws={"s": 50})
```
请注意,"column_1" 和 "column_2" 应替换为数据帧中您感兴趣的两列的名称。
希望以上信息能对您有所帮助!
相关问题
线性回归散点图python代码
### Python 实现线性回归并绘制散点图
为了展示如何使用Python实现线性回归以及绘制带有最佳拟合线的散点图,下面提供了一个完整的代码示例。此例子不仅展示了如何读取CSV文件中的数据,还说明了如何利用`matplotlib`库来创建图表,并借助`seaborn`库增强图形的表现力。
#### 使用Matplotlib和Numpy进行基础绘图
首先,这里有一个简单的脚本用来加载来自CSV的数据集,并通过`matplotlib`显示这些数据点:
```python
import matplotlib.pyplot as plt
import numpy as np
# 加载数据
points = np.genfromtxt('data.csv', delimiter=',')
x = points[:, 0]
y = points[:, 1]
# 绘制原始数据点
plt.figure(figsize=(8, 6))
plt.scatter(x, y, color='blue', label='Data Points')
# 添加标签和其他细节
plt.title('Scatter Plot with Linear Regression Line')
plt.xlabel('Input Variable X')
plt.ylabel('Output Variable Y')
plt.legend()
plt.grid(True)
# 显示图像
plt.show()
```
这段代码能够有效地可视化给定的数据集合[^2]。
#### 利用Seaborn绘制带回归线的联合分布图
对于更高级的需求,比如想要同时查看两个变量间的散点图及其边缘分布直方图,还可以考虑采用`seaborn`库内的`jointplot()`函数。这允许更加直观地理解两者间的关系模式:
```python
import seaborn as sns
import pandas as pd
# 将numpy数组转换成pandas DataFrame以便于操作
df = pd.DataFrame(points, columns=['X', 'Y'])
# 创建一个具有线性回归趋势线的联合分布图
sns.set(style="white", color_codes=True)
g = sns.jointplot(data=df, x="X", y="Y", kind="reg", height=7, ratio=5, marginal_kws=dict(bins=25, fill=True))
# 自定义外观选项
g.plot_joint(plt.scatter, c=".3", s=40, linewidth=1, marker="+")
g.ax_joint.collections[0].set_alpha(0)
# 展示最终结果
plt.show()
```
上述代码片段中,`kind="reg"`参数指定了要添加一条基于最小二乘法计算得出的最佳拟合直线到散点图上;而其他一些可选配置则帮助调整整个图形的整体观感[^1]。
利用Python,根据相关系数矩阵,筛选出与“margin1”相关系数最 大的 3 个变量,在此基础上分别做线性回归,得到回归方程和决定系数,并绘制各变量的回归结果,图以 1 行 3 列形式显示,需要给出样本的散点 图和回归的直线,横纵坐标名称,并保存为 PNG 格式的图片
在Python中,你可以使用pandas、numpy、matplotlib和statsmodels等库来实现这个任务。以下是大致的步骤:
1. **数据预处理**:
首先,你需要导入数据并计算相关系数矩阵。假设你的数据集存储在`df`数据框中,可以使用`corr()`函数获取相关系数矩阵。
```python
import pandas as pd
# 假设 df 是 DataFrame
correlation_matrix = df.corr()
```
2. **选择相关性最大的变量**:
使用`abs()`函数对相关系数矩阵取绝对值并排序,然后选取前3个与'margin1'相关的变量。
```python
top_3_features = correlation_matrix.loc['margin1'].sort_values(ascending=False)[:3].index.tolist()
```
3. **线性回归分析**:
对于每个选定的变量,创建一个新的DataFrame,只包含'margin1'和该变量,然后用statsmodels的OLS模型做线性回归。
```python
from statsmodels.formula.api import ols
regressions = {}
for feature in top_3_features:
regression_data = df[['margin1', feature]]
model = ols('margin1 ~ ' + feature, data=regression_data).fit()
regressions[feature] = {
'model': model,
'rsquared': model.rsquared,
}
```
4. **绘图**:
使用matplotlib制作散点图和回归线,`scatter()`用于散点图,`plot()`用于线性回归线。
```python
import matplotlib.pyplot as plt
import numpy as np
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
for i, feature in enumerate(top_3_features):
scatter_data = regression_data.plot(kind='scatter', x=feature, y='margin1', ax=axs[i])
axs[i].plot(np.linspace(regression_data[feature].min(), regression_data[feature].max()),
model.predict(np.column_stack((np.ones(len(regression_data)), np.array(regression_data[feature])))))
axs[i].set_title(f"{feature} vs margin1")
axs[i].set_xlabel(feature)
axs[i].set_ylabel('margin1')
plt.tight_layout()
plt.savefig("regressions.png", dpi=300)
```
完成上述步骤后,你会得到一张1行3列的图像,包含了每个性质与'margin1'的相关线性回归结果,以及相应的决定系数。
阅读全文
相关推荐















