phython 从表格中提取特定信息和以图形的方式呈现数据
为了更方便理解,因此我直接用一个例题和它的标准解法参杂着知识点来讲解 这些数据与肝病的诊断有关。从345名患者(345行)记录了7条不同的信息(7列)。我们将讨论345个样本,每个样本有7个特征。七列中的数据具有以下含义:,
平均红细胞体积; 碱性磷酸酶; 丙氨酸转氨酶; 天冬氨酸转氨酶; γ-谷氨酰转肽酶; 每天饮用半品脱酒精饮料的数量; 类别标签(1=健康;2=患病)
前五项测量是血液测试的结果(我们不必担心它们的确切含义),第六项是关于患者的酒精消耗量。最后一列是“类标签”。本栏中的“1”表示患者健康,而“2”表示患者患有肝病。
import numpy as np
data = np.loadtxt(open("data/liver_data.txt", "rb"), delimiter=",")
np.loadtext 命令将从文件liver\u data.txt 加载所有逗号分隔的数字行,并将它们全部存储在一个名为data 的矩阵变量中。(注意,变量’data’不需要声明或给定类型,也不需要分配内存。)
drinks = data[:, 5]
现在让我们更详细地了解其中一个特性。我们可以从矩阵M中提取
n
n
nth列,并使用Python numpy代码将其存储在向量
v
v
v中,例如v=M[:,n] 注意,特性6出现在第5列中,因为Python从0开始计数。
import matplotlib.pylab as plt
%matplotlib inline
plt.plot(drinks)
这将显示折线图 上面的’plt.plot’行以分号结尾。默认情况下,运行单元格时会打印单元格最后一行的返回值。分号禁止此输出,即分号是Jupyter笔记本的一项功能。Python不要求在每行代码末尾加分号。 执行上述单元格时,绘图应直接显示在单元格下方。它将沿
x
x
x轴(即,患者1至患者345)显示样本编号,并在
y
y
y轴上显示患者的酒精消耗量。这不是一种非常有用的查看数据的方式。
更适合使用直方图,即表示一组值分布的条形图。 要制作直方图,我们可以使用matplotlib的’hist’函数
plt.hist(drinks)
不幸的是,默认情况下直方图只有10条,这不足以精确显示数据。 “hist”函数有一个名为“bin”的参数,该参数采用一个向量,该向量指定每个直方图bin之间的边界位置。我们需要以0,1,2,…,20为中心的容器,因此需要在-0.5,0.5,1.5,…,20.5处指定边界。使用python的’linspace’命令最容易实现这一点,该命令在两个指定的限制之间生成一个等距值序列
plt.hist(drinks, bins=np.linspace(-0.5, 20.5, 22))
通过使用’xlim’函数更改轴的范围,可以使图形更清晰
plt.hist(drinks, bins=np.linspace(-0.5, 20.5, 22))
plt.xlim([-0.5, 20.5])
import numpy as np
data = np.loadtxt(open("data/liver_data.txt", "rb"), delimiter=",")
drinks = data[:, 5]
np.mean(drinks)
要计算平均酒精消耗量,请使用命令’np.mean(drinks) ’。
在上一节中,我们研究了所有345人的酒精消费分布情况。我们现在想看看健康人和患病人的单独直方图。记住类标签在第7列中。我们可以让Python测试列中的条目是否匹配特定的数字,例如1
data[:, 6] == 1
注意它是==而不是=。 结果以1(真)和0(假)的向量返回。这一行代码有效地执行了345次比较,并一次性返回了345个结果。我们可以将这些结果存储在变量中
wellPeople = data[:, 6] == 1
wellDrinks = data[wellPeople, 5]
或者把它们放在一行
wellDrinks = data[data[:, 6] == 1, 5]
现在我们要比较这两类的直方图。我们可以使用’subplot’命令在同一窗口中放置两个绘图。
plt.subplot(2, 1, 1)
plt.hist(wellDrinks, bins=np.linspace(-0.5, 20.5, 22))
plt.xlim(-0.5, 20.5)
plt.subplot(2, 1, 2)
plt.hist(illDrinks, bins=np.linspace(-0.5, 20.5, 22))
plt.xlim(-0.5, 20.5)
您可能会发现,没有一个功能单独是非常有用的。如果我们使用更多的特性,这些类将更好地分离。当观察一维时,我们可以使用直方图可视化数据分布。当查看一对特征的分布时,通常最好使用散点图。使用散点图,将一对特征表示为二维平面上的一个点,即每个样本在平面上表示样本特征值的位置绘制。
wellFeatureX = data[data[:, 6] == 1, 3]
wellFeatureY = data[data[:, 6] == 1, 4]
plt.scatter(wellFeatureX, wellFeatureY)
加粗样式
illFeatureX = data[data[:, 6] == 2, 3]
illFeatureY = data[data[:, 6] == 2, 4]
plt.scatter(wellFeatureX, wellFeatureY)
plt.scatter(illFeatureX, illFeatureY)
现在的问题是,两组数据都是用同一个符号绘制的,所以我们看不到哪个是哪个。 要使用不同的符号和/或颜色,您可以为“散射”提供额外的参数。参数“c”可用于指定颜色,“marker”可用于指定标记样式,“s”是指定标记大小的整数。 下面的例子使用绿色十字架代表健康人,红色圆点代表患病人
plt.scatter(illFeatureX, illFeatureY, s=20, c="r", marker="o")
plt.scatter(wellFeatureX, wellFeatureY, s=20, c="g", marker="x")
这里是最基础的处理方式,如果遇到更复杂的情况,请去查看 phython 从表格中提取特定信息和以图形的方式呈现数据2
|