关系数据的可视化
实验名称
关系数据可视化
实验目的
1.掌握关系数据在大数据中的应用
2.掌握关系数据可视化方法
3. python 程序实现图表
实验原理
在传统的观念里面,一般都是致力于寻找一切事情发生的背后的原因。现在要做的是尝试着探索事物的相关关系,而不再关注难以捉摸的因果关系。这种相关性往往不能告诉读者事物为何产生,但是会给读者一个事物正在发生的提醒。关系数据很容易通过数据进行验证的,也可以通过图表呈现,然后引导读者进行更加深入的研究和探讨。分析数据的时候,可以从整体进行观察,或者关注下数据的分布。数据间是否存在重叠或者是否毫不相干?也可以更宽的角度观察各个分布数据的相关关系。其实最重要的一点,就是数据进行可视化后,呈现眼前的图表,它的意义何在。是否给出读者想要的信息还是结果让读者大吃一惊?
就关系数据中的关联性,分布性。进行可视化,有散点图,直方图,密度分布曲线,气泡图,散点矩阵图等等。本次试验主要是直方图,密度图,散点图。直方图是反应数据的密集程度,是数据分布范围的描述,与茎叶图类似,但是不会具体到某一个值,是一个整体分布的描述。密度图可以了解到数据分布的密度情况。密度图可以了解到数据分布的密度情况。散点图将序列显示为一组点。值由点在图表中的位置表示。散点图通常用于比较跨类别的聚合数据。
实验环境
OS:Windows
python:v3.6
实验步骤
数据集准备:
数据源:

一、安装Python所需要的第三方模块
pip install seaborn
二、实验
1.请使用 seaborn 模块中的 jointplot 方法将散点图,密度分布图和直方图合为一体,数据选取murder列及burglary列,探究两种犯罪类型的相关关系,代码及效果如下:
1 import pandas as pd 2 import seaborn as sns 3 import matplotlib.pyplot as plt 4 from scipy.stats import pearsonr 5 from matplotlib.ticker import MultipleLocator 6 7 # 从 CSV 文件中读取数据 8 file_path = 'crimeRatesByState2005.csv' 9 df = pd.read_csv(file_path) 10 11 # 计算皮尔逊相关系数和 p 值 12 corr, p_value = pearsonr(df['murder'], df['burglary']) 13 14 # 使用 jointplot 绘制图表 15 g = sns.jointplot(x='murder', y='burglary', data=df, 16 kind='reg', # 中心部分使用带有回归直线的散点图 17 scatter_kws={'color': 'green'}, # 设置散点颜色为绿色 18 line_kws={'color': 'green'}, # 设置回归直线颜色为绿色 19 marginal_kws=dict(bins=15, fill=False, color='green')) # 设置边缘图参数,颜色为绿色 20 21 # 在图中添加皮尔逊相关系数和 p 值的标注 22 annotation_text = f"pearsonr = {corr:.2f}; p = {p_value:.2e}" 23 g.ax_joint.text(0.5, 0.9, annotation_text, transform=g.ax_joint.transAxes, 24 bbox=dict(facecolor='white', alpha=0.8), ha='center') 25 26 # 添加标题 27 g.fig.suptitle('谋杀率和入室盗窃率的关系', y=1.02) 28 29 # 设置中文字体 30 plt.rcParams['font.sans-serif'] = ['WenQuanYi Zen Hei'] 31 plt.rcParams['axes.unicode_minus'] = False 32 33 # 设置横轴和纵轴的刻度间距 34 x_major_locator = MultipleLocator(2.5) 35 y_major_locator = MultipleLocator(200) 36 g.ax_joint.xaxis.set_major_locator(x_major_locator) 37 g.ax_joint.yaxis.set_major_locator(y_major_locator) 38 39 # 设置坐标轴范围 40 g.ax_joint.set_xlim(0, 12.5) 41 g.ax_joint.set_ylim(0, 1600) 42 43 # 显示图表 44 plt.show()
本代码通过一系列操作,实现了对犯罪数据中谋杀率和入室盗窃率关系的可视化分析与统计指标计算。该分析为进一步研究犯罪类型之间的关联提供了直观且有价值的信息。在实际应用中,可基于此方法拓展到更多犯罪类型之间的关系研究,或结合其他因素进行更深入的多变量分析,为犯罪预防和资源调配等决策提供数据支持。

从绘制的联合图及标注信息可知:
相关性判断:皮尔逊相关系数corr反映了谋杀率和入室盗窃率之间的线性相关程度。若corr接近 1,表明二者存在较强正相关;若接近 -1,则为较强负相关;若接近 0,则线性相关性较弱。具体数值需结合实际计算结果判断。
显著性检验:p 值用于判断相关性是否显著。一般来说,当 p 值小于 0.05 时,可认为两变量之间的相关性在统计上是显著的,即这种相关性不太可能是偶然因素导致;若 p 值大于 0.05,则无法拒绝零假设,即不能确定存在显著相关性。
图形直观展示:联合图的散点分布和回归直线斜率可辅助判断相关性。散点越集中于回归直线,说明线性关系越强;回归直线斜率为正表示正相关,斜率为负表示负相关。边缘直方图则呈现了两个变量各自的分布特征,如是否存在异常值、数据的集中趋势等。
2.动态散点
1 from pyecharts.charts import EffectScatter 2 from pyecharts import options as opts 3 import pandas as pd 4 5 try: 6 # 读取数据集 7 crime = pd.read_csv('crimeRatesByState2005.csv') 8 # 筛选掉 "United States" 和 "District of Columbia" 这两行数据 9 crime2 = crime[crime.state != "United States"] 10 crime2 = crime2[crime2.state != "District of Columbia"] 11 12 # 创建动态散点图对象 13 es = ( 14 EffectScatter() 15 .add_xaxis(crime2['murder'].tolist()) 16 .add_yaxis( 17 series_name="arrow_sample", 18 y_axis=crime2['burglary'].tolist(), 19 symbol="arrow", 20 label_opts=opts.LabelOpts(is_show=False), # 不显示标签 21 effect_opts=opts.EffectOpts(color="red") # 设置涟漪特效颜色为红色 22 ) 23 .set_global_opts( 24 title_opts=opts.TitleOpts(title="动态散点图示例"), 25 xaxis_opts=opts.AxisOpts(name="谋杀率"), 26 yaxis_opts=opts.AxisOpts(name="入室盗窃率"), 27 legend_opts=opts.LegendOpts(is_show=True) 28 ) 29 ) 30 31 # 渲染图表 32 es.render("C:/Users/Administrator/Desktop/crime.html") 33 except FileNotFoundError: 34 print("未找到指定的 CSV 文件,请检查文件路径。") 35 except Exception as e: 36 print(f"发生未知错误: {e}")
本代码利用pyecharts和pandas库成功实现了对犯罪数据的读取、处理和可视化。通过创建动态散点图,能够清晰地展示谋杀率和入室盗窃率之间的关系。代码中的异常处理机制保证了程序在遇到常见错误时能够给出明确的提示信息。在实际应用中,可根据具体需求对代码进行扩展,如添加更多的数据筛选条件、调整图表的样式和参数等,以满足不同的分析和展示需求。

通过运行这段代码,我们可以得到一个动态散点图,其中每个箭头代表一个州的谋杀率和入室盗窃率的组合。从图中可以直观地观察到谋杀率和入室盗窃率之间的大致关系,例如是否存在正相关、负相关或无明显关联。涟漪特效的设置增加了图表的视觉吸引力,有助于吸引用户的注意力。同时,坐标轴名称和图例的设置使图表更易于理解。
3.请使用矩阵图表示数据集中七种犯罪类型之间的相关关系 4 (提示:请剔除 United States 和 District of Columbia 两行表示均值和异常的数据),效果如下:
1 import pandas as pd 2 import seaborn as sns 3 import matplotlib.pyplot as plt 4 5 # 读取数据集 6 df = pd.read_csv("crimeRatesByState2005.csv", index_col='state') 7 8 # 定义七种犯罪类型列名 9 crime_types = ['murder', 'forcible_rape', 'robbery', 'aggravated_assault', 10 'burglary', 'larceny_theft', 'motor_vehicle_theft'] 11 df_filtered = df[crime_types] 12 13 # 设置 seaborn 样式 14 sns.set(style="whitegrid") 15 16 # 创建图形,调整图形大小 17 plt.figure(figsize=(10, 8)) 18 19 # 创建散点图矩阵 20 pairplot = sns.pairplot(df_filtered, 21 diag_kind='hist', # 对角线显示直方图 22 plot_kws={'alpha': 0.6, # 设置透明度 23 'edgecolor': 'w'}) 24 # 添加标题 25 plt.suptitle('Seven Crime Types Scatterplot Matrix', y=1.03, fontsize=16) 26 27 # 调整子图布局 28 plt.tight_layout() 29 30 # 显示图形 31 plt.show()
本代码通过 pandas、seaborn 和 matplotlib 库的协同使用,成功实现了对犯罪数据的可视化分析,生成了七种犯罪类型的散点图矩阵。代码结构清晰,逻辑连贯,为进一步分析犯罪类型之间的关系提供了直观的工具。在实际应用中,可以根据需要对代码进行扩展,例如添加更多的图形样式设置、计算相关性系数等,以更深入地挖掘数据背后的信息。同时,对于不同的数据集,只需修改数据文件路径和犯罪类型列名,即可快速应用该代码进行分析。

通过运行这段代码,我们得到了一个七种犯罪类型的散点图矩阵。从图中可以直观地观察到各犯罪类型之间的关系: 对角线直方图:展示了每种犯罪类型的分布情况,例如可以看出某种犯罪类型的高发区间和集中趋势。 非对角线散点图:反映了不同犯罪类型之间的相关性。如果散点呈现出某种趋势(如正相关或负相关),则说明这两种犯罪类型之间可能存在一定的关联;如果散点比较分散,则说明相关性较弱。
4.请使用其它合适的可视化方法探究数据集中七种犯罪类型之间的相关关系,请给出代码及运行结果.
1 import pandas as pd 2 import seaborn as sns 3 import matplotlib.pyplot as plt 4 import numpy as np 5 6 # 加载数据 7 data = pd.read_csv('crimeRatesByState2005.csv') 8 data.columns = ['state', 'murder', 'forcible_rape', 'robbery', 'aggravated_assault', 'burglary', 'larceny_theft', 'motor_vehicle_theft', 'population'] 9 data = data.dropna() 10 11 # 剔除 United States 和 District of Columbia 两行数据 12 data = data[(data['state'] != 'United States') & (data['state'] != 'District of Columbia')] 13 14 # 将无穷大值替换为 NaN 15 data = data.replace([np.inf, -np.inf], np.nan) 16 17 # 删除包含 NaN 的行 18 data = data.dropna() 19 20 # 选择犯罪类型列 21 crime_types = ['murder', 'forcible_rape', 'robbery', 'aggravated_assault', 'burglary', 'larceny_theft', 'motor_vehicle_theft'] 22 23 # 绘制蜂群图(减小标记大小) 24 sns.swarmplot(data=data[crime_types], size=7) 25 plt.title('Swarm Plot of Crime Types') 26 plt.show()
这段代码实现了对犯罪数据的预处理和可视化分析。在数据预处理阶段,通过删除缺失值、无穷大值以及特殊数据行,保证了数据的质量和分析的准确性。在可视化阶段,使用蜂群图展示了七种犯罪类型的数据分布情况,通过调整标记大小提高了图形的可读性。该分析有助于我们直观地了解不同犯罪类型的发生率分布特征,为进一步的犯罪学研究、政策制定等提供了可视化依据。然而,代码也有可以改进的地方,例如可以添加更多的图形设置,如坐标轴标签、图例等,以增强图形的信息传达能力;还可以结合其他统计分析方法,深入挖掘不同犯罪类型之间的关系。

这段代码主要围绕犯罪数据集展开,先进行数据清洗,再利用蜂群图可视化七种犯罪类型数据。以下是对结果分析的总结: 数据质量提升:通过多步数据预处理,包括处理缺失值、无穷大值,以及剔除特殊数据行,保证了数据集的完整性和准确性,为后续可视化分析奠定可靠基础。 蜂群图有效展示分布:蜂群图将七种犯罪类型的数据点逐一呈现,借助较小的标记大小,有效避免数据点重叠,清晰展示了每种犯罪类型数据的分布情况。从中可直观观察到数据的密集区域和离散程度,帮助分析不同犯罪类型发生率的集中趋势与波动范围。 标题明确主题:添加的标题 “Swarm Plot of Crime Types”,清晰点明图形主题,使读者能迅速了解该蜂群图展示的是犯罪类型相关数据,增强了可视化的可读性。
实验总结
本次实验聚焦于关系数据可视化,借助Python编程实现了多种图表绘制,以探究犯罪数据集中不同犯罪类型之间的关系,达成了实验目的,收获颇丰。 首先,成功掌握了关系数据在大数据分析中的应用方式,学会运用散点图、直方图、密度图、散点矩阵图和蜂群图等可视化方法来展示数据特征和关系。熟练使用seaborn、pyecharts、matplotlib和pandas等Python库进行数据处理和图表绘制,增强了数据处理和可视化的实践能力。其次,通过对犯罪数据集的深入分析,发现不同犯罪类型之间存在着复杂的关联。例如,在探究谋杀率和入室盗窃率的关系时,利用皮尔逊相关系数和联合图分析,发现二者存在一定程度的线性相关,且通过显著性检验确定了这种相关性并非偶然。在七种犯罪类型的整体分析中,散点图矩阵和蜂群图展示了各犯罪类型的分布特征和相互关系,为犯罪学研究提供了直观的数据支持。编写的代码能够有效完成数据读取、清洗、可视化等任务,但仍有优化空间。后续可进一步完善代码,如在数据预处理阶段增加数据验证和数据填充的方法,提高数据质量;在可视化方面,丰富图表的样式设置,添加更多的交互功能,提升图表的美观性和实用性;结合更多的统计分析方法,深入挖掘数据背后的潜在规律,为犯罪预防、资源调配等实际应用提供更具价值的决策依据。本实验的成果不仅有助于理解关系数据可视化在犯罪学研究中的重要性,也为其他领域的数据探索提供了可借鉴的方法。通过可视化手段将复杂的数据转化为直观的图表,能够更高效地发现数据中的规律和趋势,为相关决策提供有力支持,展现了数据可视化在现代数据分析中的关键作用。

浙公网安备 33010602011771号