【问题标题】:Plotting bmi against medical insurance charges根据医疗保险费用绘制 bmi
【发布时间】:2021-02-25 08:26:54
【问题描述】:

我有一个像这样的数据框(来自df.head()):

以及我将其转换为 numpy 数组后的数据框。

array([[1.90000000e+01, 2.79000000e+01, 0.00000000e+00, 1.68849240e+04],
       [1.80000000e+01, 3.37700000e+01, 1.00000000e+00, 1.72555230e+03],
       [2.80000000e+01, 3.30000000e+01, 3.00000000e+00, 4.44946200e+03],
       [3.30000000e+01, 2.27050000e+01, 0.00000000e+00, 2.19844706e+04],
       [3.20000000e+01, 2.88800000e+01, 0.00000000e+00, 3.86685520e+03]])

我有这段代码,可以尝试绘制bmicharges 的对比

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(20, 8))
bmi = df["bmi"]
charges = df["charges"]
ax.plot(bmi, label="bmi")
ax.plot(charges, label="charges")
ax.legend()
plt.show()

结果是这样的:

现在我不确定一些事情:

  • 如果我确实绘制正确,这意味着我不确定它是针对 bmi 的,还是针对 bmi 的指控。如果我确实一起做ax.plot(bmi, charges),我会得到这个:

  • 或者,如果您比较 bmi[0]charges[0],bmi 的值与费用相比是如此之小,这就是为什么 bmi 由于值非常小而被视为一条直线。
  • 我预计 BMI 越高,保险费用就越高。但是,当我查看最接近 34 的 BMI 时,与小于 24 的人的 bmi 相比,收费相当低。而且我不太清楚如何解释该图表。

【问题讨论】:

  • 您有 5 个费用值,但只有 4 个 bmi。这是为什么呢?
  • 那是我的错。本来就是相配的。让我编辑问题。
  • 我已经发布了一个解决方案。这能回答你的问题吗?
  • 我正在阅读它。完成后我会评论你的答案。
  • “我预计 BMI 越高,保险费用越高。”您根本没有足够的数据来做出这种决定。参照。例如ncbi.nlm.nih.gov/pmc/articles/PMC5615521

标签: python matplotlib data-analysis


【解决方案1】:

如果你看一下documentation of matplotlib.pyplot.plot(),你会发现第一个参数是自变量(x轴变量),第二个参数是因变量(y轴变量)。

根据您的问题,我了解到您希望了解保险费用如何随 bmi 变化。在这种情况下,charges 将位于 y 轴上,bmi 将位于 x 轴上。

案例一:

如果您不想保留列表中的实际顺序,则需要按升序对两个列表进行排序以获得线性相关性,如下所示:

import matplotlib.pyplot as plt
import numpy as np

bmi = [33.770, 33.000, 22.705,  28.880]
charges = [16884.92400, 1725.55230, 449.46200, 21984.47061]

plt.plot(np.sort(bmi), np.sort(charges))
plt.ylabel('Charges')
plt.xlabel('BMI')
plt.show()

样本输出:

这就是您的代码显示不同结果的原因:

  • 在第一个代码sn -p中,当你做ax.plot(bmi, label="bmi"), ax.plot(charges, label="charges");由于未指定 x 轴,它会根据元素的索引绘制两个未排序的列表。
  • 在第二个代码 sn-p 中,当您执行 ax.plot(bmi,charges) 而不进行排序时,它会给出您获得的结果(假设您有相同大小的列表)。但正如您提到的,当 bmi 较高时,您预计费用会更高,我认为您需要进行排序。

更新:案例 2:

根据初始答案的 cmets,您正在从数据框中获取数据。理想情况下,您应该根据bmi 值对数据框进行排序,然后使用相应的charges 值进行绘图。这是一个例子:

import pandas as pd

##### replace this portion with your actual dataframe #######
df = pd.DataFrame(columns = ['bmi','charges'])
df['bmi'] = bmi
df['charges'] = charges
bmi = [33.770, 33.000, 22.705,  28.880]
charges = [16884.92400, 1725.55230, 449.46200, 21984.47061]
##############################################################

df = df.sort_values('bmi')
plt.plot(df['bmi'], df['charges'])
plt.ylabel('Charges')
plt.xlabel('BMI')
plt.show()

样本输出:

【讨论】:

  • 顺序很重要。我从kaggle dataset 中获取bmicharges 的值。这是第一个first five valuesdf.head()
  • 根据您提供的屏幕截图,您认为在 bmi 高的情况下费用会高多少?显然不是。
  • 我只是想将其可视化,如果没有线性相关,您会如何建议我将这些值绘制出来?但是在您的编辑中。你能用更简单的英文重写一下吗?
  • 好的,我将发布一个示例来说明我的意思。您能否将df.head() 发布为问题中的代码而不是图像,以便我可以使用它?
  • 我根据您的要求编辑了问题。
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 2017-03-16
  • 2016-08-05
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
相关资源
最近更新 更多