在本文中,将深入探讨Haberman癌症生存数据集的数据分析和探索。数据探索是理解数据并从中得出结论的首要步骤。将了解数据探索和分析的过程,以及如何根据目标进行数据探索。
在开始数据探索之前,需要确保数据的可用性。通常情况下,数据以CSV文件格式获取,这使得数据处理变得相对容易。如果数据可用性不佳,则需要进行大量的搜索和数据清洗工作,以便开始数据探索。需要考虑数据源是否可信,以及是否需要获得使用数据的权限。
对于Haberman癌症生存数据集,可以通过以下链接下载数据集:
https://www.kaggle.com/gilsousa/habermans-survival-data-set
获取数据后,将使用以下指标来理解数据集:
可以使用Pandas库中的DataFrame对象的shape方法来计算整个实例的数量以及属性的数量。同时,可以使用columns方法来检查数据集中的列名。以下是Python代码示例:
import pandas as pd
haberman = pd.read_csv("haberman.csv")
print(haberman.columns)
print(haberman.shape)
上述代码将提供数据集包含的信息以及其形状(即实例数量和列数量)。
数据集中的类属性/因变量决定了数据集的平衡性。实例在每个类别上的分布决定了数据集的平衡性。在这个数据集中,“生存年数”是类属性。对于所有实例,“生存年数”属性的值要么是1,要么是2。
“生存年数”属性的值如下:
在数据集中,类别1的实例数量较多,而类别2的实例数量大约是类别1的三分之一。整个实例的类别属性分布如下:
import pandas as pd
haberman = pd.read_csv("haberman.csv")
print(haberman["Survival years"].value_counts())
自变量用于数据分析和机器学习模型训练,以确定/预测类属性/s。数据分析可以通过绘图进一步进行。可以使用单变量/双变量和多变量分析,并从中得出结论。
单变量分析集中于一个变量。使用直方图和pdf曲线(连续线覆盖直方图)来查看一个自变量的范围。Distplot函数结合了seaborn模块中的kde图和rug图函数以及matplotlib模块中的hist函数。
将“手术年份”属性与类属性“生存年数”进行对比。相同的图表可以获得,并且可以理解自变量在每个实例范围的行为,如X轴上显示的,在Y轴上的类属性上。
在下面的图表中,可以看到“手术年份”属性的重叠,这可以说是一个严峻的情况,因为这使得对“手术年份”属性在类属性“生存年数”上的分类变得困难,即如果“手术年份”属性均匀分布在类属性上,那么分布范围将使分类变得容易和可用。
重叠可以通过不同颜色的区域来识别,这在图例中没有显示。以下是Python代码示例:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
haberman = pd.read_csv("haberman.csv")
sns.FacetGrid(haberman, hue="Survival years", size=12).map(sns.distplot, "Operation Year").add_legend()
plt.show()
其他两个自变量在尝试对类属性“生存年数”进行分类时,分布方式与“手术年份”属性相同。
以下是Python代码示例,展示患者年龄分布:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
haberman = pd.read_csv("haberman.csv")
sns.set_style("whitegrid")
sns.FacetGrid(haberman, hue="Survival years", size=3).map(sns.distplot, "Patient Age").add_legend()
plt.show()
以下是Python代码示例,展示节点数量分布:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
haberman = pd.read_csv("haberman.csv")
sns.set_style("whitegrid")
sns.FacetGrid(haberman, hue="Survival years", size=3).map(sns.distplot, "Num of nodes").add_legend()
plt.show()
CDF和PDF可以帮助了解自变量在类属性范围内的分布。以下是患者年龄CDF和PDF的图表。橙色曲线是患者年龄自变量针对类属性“生存年数”的CDF,类别为1(即手术后生存时间少于5年的患者)。CDF提供了患者年龄的信息,例如所有患者年龄都大于70岁,对于所有手术后生存时间不超过5年的患者,一半患者的年龄在50到60岁之间。下图中的蓝线是PDF,显示了患者年龄在年龄范围内的分布,随着NumPy模块直方图方法中bin大小的增加,PDF可以更具体地为所有点绘制。
以下是Python代码示例,展示患者年龄CDF和PDF:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
haberman = pd.read_csv("haberman.csv")
haberman_Survival_years = haberman.loc[haberman["Survival years"] == 1]
counts, bin_edges = np.histogram(haberman_Survival_years["Patient Age"], bins=10, density=True)
pdf = counts / (sum(counts))
cdf = np.cumsum(pdf)
plt.plot(bin_edges[1:], pdf)
plt.plot(bin_edges[1:], cdf)
plt.show()
双变量分析通过在每个轴上绘制两个变量,并使用颜色对数据点进行分类,以对类属性进行分类。双变量图是一种数据可视化技术,用颜色对类属性进行分类,并绘制所有可能的两个自变量组合。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
haberman = pd.read_csv("haberman.csv")
sns.pairplot(haberman, hue="Survival years", size=3).add_legend()
plt.show()
https://plotly.com/python/3d-scatter-plots/