为包含空单元格的Python数据帧的所有列和所有列生成单独的散点图
我尝试自动绘制大型数据帧的相关图。我们的目标是用一条回归线将每一列与另一列绘制成散点图。每列代表一个不同的变量,一列可能有空单元格、整数和字符串值(下面是试用代码和工作示例) 示例代码:为包含空单元格的Python数据帧的所有列和所有列生成单独的散点图,python,loops,matplotlib,scatter-plot,Python,Loops,Matplotlib,Scatter Plot,我尝试自动绘制大型数据帧的相关图。我们的目标是用一条回归线将每一列与另一列绘制成散点图。每列代表一个不同的变量,一列可能有空单元格、整数和字符串值(下面是试用代码和工作示例) 示例代码: Age Height Weight Sex 21 180 54 M 56 171 65 V 23 NaN 84 V NaN 195 71 M 42 165 67
Age Height Weight Sex
21 180 54 M
56 171 65 V
23 NaN 84 V
NaN 195 71 M
42 165 67 V
84 167 93 M
12 NaN 88 M
31 152 73 V
NaN 184 NaN V
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_subset = pd.DataFrame({"Age": [21,56,23,np.nan,42,84,12,31,np.nan], "Height":
[180,171,np.nan,195,165,167,np.nan,152,184], "Weight": [54,65,84,71,67,93,88,73,np.nan], "Sex":
['M','V','V','M','V','M','M','V','V']})
print(df_subset)
col_choice = ["Age", "Height", "Weight"]
for pos1, axis1 in enumerate(col_choice): # Pick a first col
for pos2, axis2 in enumerate(col_choice[pos1+1:]): # Pick a later col
plt.scatter(df_subset.loc[:,axis1], df_subset.loc[:,axis2]) #scatter plot
a, b = np.polyfit(df_subset.loc[:,axis1], df_subset.loc[:,axis2], 1) #determining parameters for regression line
x = df_subset.loc[:,axis1]
plt.plot(x, a*x + b) #regression line on scatter-plot
plt.show()
解决方案:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_subset = pd.DataFrame({"Age": [21,56,23,np.nan,42,84,12,31,np.nan], "Height":
[180,171,np.nan,195,165,167,np.nan,152,184], "Weight": [54,65,84,71,67,93,88,73,np.nan], "Sex":
['M','V','V','M','V','M','M','V','V']})
print(df_subset)
col_choice = ["Age", "Height", "Weight"]
for pos1, axis1 in enumerate(col_choice): # Pick a first col
for pos2, axis2 in enumerate(col_choice[pos1+1:]): # Pick a later col
df = df_subset[[axis1,axis2]].dropna()
print(df)
plt.scatter(df.iloc[:,0], df.iloc[:,1]) #scatter plot
a, b = np.polyfit(df.iloc[:,0], df.iloc[:,1], 1) #determining parameters for regression line
x = df.iloc[:,0]
plt.plot(x, a*x + b) #regression line on scatter-plot
plt.show()
解决方案:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_subset = pd.DataFrame({"Age": [21,56,23,np.nan,42,84,12,31,np.nan], "Height":
[180,171,np.nan,195,165,167,np.nan,152,184], "Weight": [54,65,84,71,67,93,88,73,np.nan], "Sex":
['M','V','V','M','V','M','M','V','V']})
print(df_subset)
col_choice = ["Age", "Height", "Weight"]
for pos1, axis1 in enumerate(col_choice): # Pick a first col
for pos2, axis2 in enumerate(col_choice[pos1+1:]): # Pick a later col
df = df_subset[[axis1,axis2]].dropna()
print(df)
plt.scatter(df.iloc[:,0], df.iloc[:,1]) #scatter plot
a, b = np.polyfit(df.iloc[:,0], df.iloc[:,1], 1) #determining parameters for regression line
x = df.iloc[:,0]
plt.plot(x, a*x + b) #regression line on scatter-plot
plt.show()
你的问题是什么?现在我对它进行了一点更新,我的最后一个问题是:在散点打印时如何处理数据帧中的空单元格。对于每个单独的散点图,我想应该从数据帧中排除带有空单元格的行,以便能够绘制它。。其次,在处理两个字符串变量或一个字符串/一个数字变量时,如何绘制回归线?
df_子集[[df.columns[pos1],df.columns[pos2]].dropna()
是一个两列数据框,删除了所有na行。这就解决了问题的第一部分。对于在x轴上有分类值的回归,没有好的答案。您希望该图是什么样的?我想条形图比散点图更有意义,我想您可以放弃该回归总而言之……另外,请检查seabornpairplot
是否足以满足您的需要……在大型数据集上可能速度较慢,但可能值得研究……以及您将.dropna()放置在何处示例代码中的代码行?如果你把它放在一个答案中,我会接受它,如果它有效的话,我会投赞成票。哦,谢谢seaborn的替代方案,它也可以派上用场,但不确定它对一个有100列和10000个数据点的数据集将如何执行。回归线是为了相关目的而存在的,有时它很有趣也可以对分类变量执行此操作(如果需要绘制回归线,请将其转换为分类数值)你的问题是什么?现在我对它进行了一点更新,我的最后一个问题是:在散点打印时如何处理数据帧中的空单元格。对于每个散点打印,应该分别从数据帧中排除带有空单元格的行,以便能够对其进行打印。其次,在处理散点打印时如何绘制回归线两个字符串变量还是一个字符串/一个数字变量?df_子集[[df.columns[pos1],df.columns[pos2]].dropna()
是一个两列数据框,删除了所有na行。这就解决了问题的第一部分。对于在x轴上有分类值的回归,没有好的答案。您希望该图是什么样的?我想条形图比散点图更有意义,我想您可以放弃该回归总而言之……另外,请检查seabornpairplot
是否足以满足您的需要……在大型数据集上可能速度较慢,但可能值得研究……以及您将.dropna()放置在何处示例代码中的代码行?如果你把它放在一个答案中,我会接受它,如果它有效的话,我会投赞成票。哦,谢谢seaborn的替代方案,它也可以派上用场,但不确定它对一个有100列和10000个数据点的数据集将如何执行。回归线是为了相关目的而存在的,有时它很有趣也可以对分类变量执行此操作(如果需要绘制回归线,请将其转换为分类数值)