我正在尝试自动化大型数据框矩阵的绘制过程。目标是用另一列绘制每列。每列代表一个变量。另请参见下图。
F.e:性别与年龄,性别与BMI,性别与吸烟,性别与类型等等。
为了清楚起见,我将问题简化为下图: enter image description here
最初,我尝试手工绘制每个组合。但这是一个耗时的练习,不是我想要的。
我也尝试过这种方法(不起作用):
variables = ["Sex", "Age", "BMI"]
for variable in variables:
plt.scatter(df.variable, df.variable)
plt.xlabel('variable')
plt.ylabel('variable')
plt.title('variable vs. variable')
plt.show()
欢迎任何帮助!
PS:如果将线性回归也纳入变量组合也是一种简单的选择,那也将不胜感激。
问候,
纳迪亚(Nadia)
答案 0 :(得分:0)
您所编码的内容将各列相对于自己。您所描述的是一个嵌套循环。一个简单的升级是
col_choice = ["Sex", "Age", "BMI"]
for pos, axis1 in enumerate(col_choice): # Pick a first col
for axis2 in enumerate(col_choice[pos+1:]): # Pick a later col
plt.scatter(df.loc[:, axis1], df.loc[:, axis2])
我认为,这将生成scatter
可接受的序列。
有帮助吗?如果您想变得更“ Pythonic”,请查看itertools.product
来生成您的列选择。
答案 1 :(得分:0)
您可以执行以下操作:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Create dummy dataframe, or load your own with pd.read_csv()
columns = ["sex", "age", "BMI", "smoke", "type"]
data = pd.DataFrame(np.array([[1,0,0,1,0], [23,16,94,18,24], [32, 26, 28, 23, 19], [0,1,1,1,0], [1,2,2,2,1]]).T, columns=columns)
x_col = "sex"
y_columns = ["age", "BMI", "smoke"]
for y_col in y_columns:
figure = plt.figure
ax = plt.gca()
ax.scatter(data[x_col], data[y_col])
ax.set_xlabel(x_col)
ax.set_ylabel(y_col)
ax.set_title("{} vs {}".format(x_col, y_col))
plt.legend()
plt.show()
基本上,如果您将数据集另存为.csv
文件,则可以使用pd.read_csv()
用熊猫加载它,并使用列名作为键来访问相应的行,并在该行上进行迭代(在这里我只是为了创建一个虚拟数据框)。
关于线性回归部分,您应该检出scikit-learn library。它具有用于许多不同任务的回归模型,例如回归,分类和聚类