关系数据的可视化

目录

【实验目的】

【实验原理】

【实验环境】

【实验步骤】

一、安装Python所需要的第三方模块

二、实验

【实验总结】


【实验目的】

        1.掌握关系数据在大数据中的应用

        2.掌握关系数据可视化方法

        3. python 程序实现图表

【实验原理】

        在传统的观念里面,一般都是致力于寻找一切事情发生的背后的原因。现在要做的是尝试着探索事物的相关关系,而不再关注难以捉摸的因果关系。这种相关性往往不能告诉读者事物为何产生,但是会给读者一个事物正在发生的提醒。关系数据很容易通过数据进行验证的,也可以通过图表呈现,然后引导读者进行更加深入的研究和探讨。分析数据的时候,可以从整体进行观察,或者关注下数据的分布。数据间是否存在重叠或者是否毫不相干?也可以更宽的角度观察各个分布数据的相关关系。其实最重要的一点,就是数据进行可视化后,呈现眼前的图表,它的意义何在。是否给出读者想要的信息还是结果让读者大吃一惊?

        就关系数据中的关联性,分布性。进行可视化,有散点图,直方图,密度分布曲线,气泡图,散点矩阵图等等。本次试验主要是直方图,密度图,散点图。直方图是反应数据的密集程1度,是数据分布范围的描述,与茎叶图类似,但是不会具体到某一个值,是一个整体分布的描述。密度图可以了解到数据分布的密度情况。密度图可以了解到数据分布的密度情况。散点图将序列显示为一组点。值由点在图表中的位置表示。散点图通常用于比较跨类别的聚合数据。

【实验环境】

        OS:Windows

        python:v3.6

【实验步骤】

数据源:

一、安装Python所需要的第三方模块

pip install seaborn

二、实验

1 、请使用 seaborn 模块中的 jointplot 方法将散点图,密度分布图和直方图合为一体,数据选取murder 列及 burglary 列,探究两种犯罪类型的相关关系,效果如下:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt# 读取数据
df = pd.read_csv(r"crimeRatesByState2005.csv")# 使用jointplot绘制图表并设置颜色
g = sns.jointplot(data=df, x='murder', y='burglary', kind='reg', color='red')# 设置图表标题和轴标签
g.fig.suptitle('Relationship between Murder and Burglary', y=1.02)
g.set_axis_labels('Murder Rate', 'Burglary Rate')# 设置横坐标和纵坐标的最大值
g.ax_joint.set_xlim(0, 13)
g.ax_joint.set_ylim(0, 1600)# 显示图表
plt.show()

2.动态散点图

from pyecharts import options as opts
from pyecharts.charts import Scatter
import pandas as pd# 数据加载和预处理函数
def load_and_process_data(file_path):# 读取数据crime = pd.read_csv(file_path)# 筛选数据,去除 "United States" 和 "District of Columbia"crime_filtered = crime[(crime.state != "United States") & (crime.state != "District of Columbia")]return crime_filtered# 创建 Scatter 图表函数
def create_scatter_plot(data):# 创建 Scatter 图表scatter = (Scatter().add_xaxis(data['murder'].tolist())  # 使用 "murder" 列作为 x 轴.add_yaxis("arrow_sample",data['burglary'].tolist(),  # 使用 "burglary" 列作为 y 轴symbol="arrow",  # 设置为箭头形状label_opts=opts.LabelOpts(is_show=False),  # 不显示标签itemstyle_opts=opts.ItemStyleOpts(color="red")  # 设置散点颜色为红色).set_global_opts(title_opts=opts.TitleOpts(title="动态散点图示例"),xaxis_opts=opts.AxisOpts(name="murder", min_=0, max_=10),  # 设置 x 轴范围yaxis_opts=opts.AxisOpts(name="burglary")  # 设置 y 轴名称))return scatter# 主程序入口
def main():# 加载和处理数据file_path = "crimeRatesByState2005.csv"  # 文件路径crime_data = load_and_process_data(file_path)# 创建散点图并渲染scatter_plot = create_scatter_plot(crime_data)scatter_plot.render("scatter_effect.html")  # 渲染并保存为 HTML 文件# 执行主程序
if __name__ == "__main__":main()

3、请使用矩阵图表示数据集中七种犯罪类型之间的相关关系(提示:请剔除 United States District of Columbia 两行表示均值和异常的数据),效果如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt# 修改文件地址
df = pd.read_csv(r"crimeRatesByState2005.csv")# 剔除 United States 和 District of Columbia 两行数据
df = df[(df['state'] != 'United States') & (df['state'] != 'District of Columbia')]# 选择七种犯罪类型的数据
crime_types = ['murder', 'forcible_rape', 'robbery', 'aggravated_assault', 'burglary', 'larceny_theft','motor_vehicle_theft']
df_crime = df[crime_types]# 设置中文字体为黑体(解决中文显示问题,需确保系统已安装黑体字体)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False# 设置图形大小
plt.figure(figsize=(12, 12))# 创建散点图矩阵,去掉 corner 参数以显示对角线以上的散点图,并设置颜色为紫色
g = sns.pairplot(df_crime, plot_kws={'color': 'red'})# 设置图形标题
g.fig.suptitle('七种犯罪类型之间的相关关系', y=1.02)# 调整子图布局
plt.tight_layout()# 显示图形
plt.show()

4 、请使用其它合适的可视化方法探究数据集中七种犯罪类型之间的相关关系,请给出代码及运行结果。
(1)主成分分析图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA# 读取数据
df = pd.read_csv('crimeRatesByState2005.csv')# 剔除 United States 和 District of Columbia 两行数据
df = df[(df['state'] != 'United States') & (df['state'] != 'District of Columbia')]# 提取犯罪类型数据列
crime_cols = ['murder', 'forcible_rape', 'robbery', 'aggravated_assault', 'burglary', 'larceny_theft','motor_vehicle_theft']
crime_data = df[crime_cols]# 数据标准化
scaler = StandardScaler()
scaled_data = scaler.fit_transform(crime_data)# 进行主成分分析
pca = PCA(n_components=2)
principal_components = pca.fit_transform(scaled_data)# 绘制双标图
fig, ax = plt.subplots(figsize=(10, 8))# 绘制样本点
ax.scatter(principal_components[:, 0], principal_components[:, 1], alpha=0.5)# 绘制变量箭头
loadings = pca.components_.T * np.sqrt(pca.explained_variance_)
for i, feature in enumerate(crime_cols):ax.arrow(0, 0, loadings[i, 0], loadings[i, 1], color='r', alpha=0.5, head_width=0.1)ax.text(loadings[i, 0] * 1.15, loadings[i, 1] * 1.15, feature, color='g', ha='center', va='center')# 设置标题和坐标轴标签
ax.set_title('Biplot of Seven Crime Types')
ax.set_xlabel('Principal Component 1')
ax.set_ylabel('Principal Component 2')# 显示图形
plt.show()

代码解释:

  1. 数据读取与预处理:使用 pandas 的 read_csv 函数读取 CSV 文件,并通过布尔索引过滤掉 United States 和 District of Columbia 两行数据。
  2. 提取犯罪类型数据:从数据集中选取七种犯罪类型对应的列。
  3. 数据标准化:使用 StandardScaler 对数据进行标准化处理,消除量纲影响。
  4. 主成分分析:使用 PCA 进行主成分分析,将数据降维到二维(n_components=2)。
  5. 绘制双标图
  • 绘制样本点:将样本投影到前两个主成分上并绘制散点图。
    • 绘制变量箭头:根据主成分的载荷绘制变量箭头,箭头的方向和长度表示变量在主成分上的贡献,箭头之间的夹角反映变量之间的相关性。
  1. 设置标题和坐标轴标签:为图形添加标题和坐标轴标签,增强可读性。
  2. 显示图形:使用 plt.show() 显示绘制好的图形。

运行结果:

        运行代码后,会弹出一个图形窗口,展示七种犯罪类型的双标图。图中包含样本点和变量箭头。样本点的分布展示了不同样本在主成分上的分布情况;变量箭头的方向和长度反映了变量对主成分的贡献,箭头之间的夹角越小,说明变量之间的相关性越强。通过观察双标图,可以直观地探究七种犯罪类型之间的相关关系。

(2)雷达图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 读取数据
df = pd.read_csv('crimeRatesByState2005.csv')# 剔除 United States 和 District of Columbia 两行数据
df = df[(df['state'] != 'United States') & (df['state'] != 'District of Columbia')]# 提取犯罪类型数据列
crime_cols = ['murder', 'forcible_rape', 'robbery', 'aggravated_assault', 'burglary', 'larceny_theft','motor_vehicle_theft']
crime_data = df[crime_cols]# 计算各犯罪类型的均值
mean_values = crime_data.mean().values# 犯罪类型数量
num_vars = len(crime_cols)# 角度
angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()
angles += angles[:1]# 均值数据添加最后一个值以闭合图形
mean_values = np.concatenate((mean_values, [mean_values[0]]))# 创建画布
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))# 绘制雷达图
ax.plot(angles, mean_values, color='b', linewidth=1)
ax.fill(angles, mean_values, color='b', alpha=0.25)# 设置坐标轴标签
ax.set_xticks(angles[:-1])
ax.set_xticklabels(crime_cols)# 设置标题
ax.set_title('Radar Chart of Seven Crime Types', y=1.1)# 显示图形
plt.show()

代码解释:

  1. 数据读取与预处理:借助 pandas 的 read_csv 函数读取 CSV 文件,并且通过布尔索引把 United States 和 District of Columbia 两行数据过滤掉。

  2. 提取犯罪类型数据:从数据集中选取七种犯罪类型对应的列。

  3. 计算均值:计算每种犯罪类型的均值,从而在雷达图里展示整体的情况。

  4. 确定角度:为了在雷达图上合理分布各个犯罪类型,计算每个犯罪类型对应的角度。

  5. 绘制雷达图:使用 matplotlib 的 plot 函数绘制折线,使用 fill 函数对图形进行填充。

  6. 设置坐标轴标签和标题:为雷达图添加坐标轴标签和标题,增强可读性。

  7. 显示图形:使用 plt.show() 显示绘制好的图形。

运行结果:

        运行代码之后,会弹出一个图形窗口,展示七种犯罪类型的雷达图。在雷达图中,每个坐标轴代表一种犯罪类型,而多边形的顶点则表示该犯罪类型的均值。通过观察多边形的形状和各个顶点的位置,能够直观地对比不同犯罪类型之间的数值大小和相对关系。

(3)热力图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from scipy.stats import pearsonr
from matplotlib.colors import LinearSegmentedColormapdef create_correlation_matrix():# 读取数据df = pd.read_csv('crimeRatesByState2005.csv')# 剔除 United States 和 District of Columbia 两行数据df = df[(df['state'] != 'United States') & (df['state'] != 'District of Columbia')]# 提取犯罪类型数据列crime_cols = ['murder', 'forcible_rape', 'robbery', 'aggravated_assault', 'burglary', 'larceny_theft','motor_vehicle_theft']crime_data = df[crime_cols]# 数据标准化scaler = StandardScaler()scaled_data = scaler.fit_transform(crime_data)# 计算相关系数矩阵corr_matrix = np.zeros((len(crime_cols), len(crime_cols)))for i in range(len(crime_cols)):for j in range(len(crime_cols)):corr, _ = pearsonr(scaled_data[:, i], scaled_data[:, j])corr_matrix[i, j] = corr# 生成自定义颜色映射,从蓝色到白色再到红色cmap = LinearSegmentedColormap.from_list('custom_cmap', ['blue', 'white','red'])# 绘制矩阵图plt.figure(figsize=(10, 8))plt.imshow(corr_matrix, cmap=cmap, vmin=-1, vmax=1)plt.xticks(range(len(crime_cols)), crime_cols, rotation=45, ha='right')plt.yticks(range(len(crime_cols)), crime_cols)plt.colorbar(label='Correlation Coefficient')plt.title('Correlation Matrix of Crime Types')# 在矩阵图中添加相关系数数值for i in range(len(crime_cols)):for j in range(len(crime_cols)):plt.text(j, i, f'{corr_matrix[i, j]:.2f}', ha='center', va='center', color='black' if abs(corr_matrix[i, j]) < 0.7 else 'white')plt.tight_layout()plt.show()if __name__ == "__main__":create_correlation_matrix()

代码解释:

  1. 数据读取与预处理:使用 pandas 的 read_csv 函数读取 CSV 文件,然后通过布尔索引过滤掉 United States 和 District of Columbia 两行数据。

  2. 提取犯罪类型数据:从数据集中选取七种犯罪类型对应的列。

  3. 绘制散点图矩阵:使用 seaborn 的 pairplot 函数绘制散点图矩阵,该矩阵会展示每两种犯罪类型之间的散点图,同时在对角线上显示各犯罪类型的单变量分布(通常是直方图)。

  4. 设置标题:为整个散点图矩阵添加标题。

  5. 显示图形:使用 plt.show() 显示绘制好的图形。

运行结果:

        运行代码后,会弹出一个图形窗口,展示七种犯罪类型之间的散点图矩阵。通过观察散点图的分布,可以直观地了解不同犯罪类型之间的关系。如果散点呈现出某种线性趋势,说明这两种犯罪类型可能存在一定的相关性;如果散点比较分散,则说明相关性较弱。对角线上的直方图可以展示每种犯罪类型的分布情况。

【实验总结】

        本次实验围绕关系数据在大数据中的应用及可视化展开,通过多种Python程序实现的图表,深入探究了犯罪类型数据之间的关系。 在实验过程中,首先利用seaborn模块的jointplot方法,将散点图、密度分布图和直方图结合,对谋杀(murder)和入室盗窃(burglary)两种犯罪类型的关系进行探究。这种可视化方式从多个角度展示了数据的分布和相关性,直观呈现出两种犯罪类型在不同维度下的特征,为进一步分析提供了基础。 接着,运用pyecharts创建动态散点图,不仅展示了谋杀和入室盗窃数据的分布,还通过箭头形状和交互功能,使数据可视化更具动态性和趣味性,增强了对数据的理解和探索性。 针对七种犯罪类型之间的关系,分别使用散点图矩阵、主成分分析双标图、雷达图和热力图进行可视化。散点图矩阵展示了各犯罪类型两两之间的散点分布,帮助观察变量之间的潜在关系。主成分分析双标图通过降维,将高维数据在二维平面上展示,样本点和变量箭头的结合,直观反映了变量对主成分的贡献以及变量之间的相关性。雷达图则以独特的方式,将七种犯罪类型的均值在同一图表中呈现,方便对比不同犯罪类型的数值大小和相对关系。 通过这些实验,掌握了多种关系数据可视化方法,深入理解了不同图表在展示数据关系时的特点和优势。同时,也学会了运用Python中的pandas、seaborn、sklearn、matplotlib和pyecharts等库进行数据处理和图表绘制,提升了数据处理和可视化的实践能力。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

夏季道路安全的AI革命:节省人力、提升效率

AI夏季道路安全&#xff1a;用智能算法守护每一条街道 背景&#xff1a;夏季道路安全的挑战与机遇 夏季是道路安全事件的高发期。高温天气容易导致驾驶员疲劳、行人行为异常&#xff08;如跌倒或中暑&#xff09;&#xff0c;同时&#xff0c;车流量增加、夜间活动频繁…

HTML标记语言_@拉钩教育【笔记】

目录 1.文本标签 2.格式化标签 3.图片标签 4.超链接标签 5.表格标签 6表单标签 6.1 6.2 6.3 7.行内框架(超链接内套一个页面) 8.多媒体标签(音/视频) 1.文本标签 2.格式化标签 3.图片标签 4.超链接标签 5.表格标签 6表单标签 6.1 6.2 6.3 7.行内框架(超链接内套一个…

Python 中调用方法内部定义的类详解(类在方法中的各种操作)

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、基本概念1.1 方法内部定义类概述1.2 方法内部定义类的特点1.3 替代方案二、基本使用2.1 直接在方法内部使用2.2 返回类定义供外部使用2.3 返回类的实例2.4 作为闭包使用(访问外部变量)三、高级用法3.1 动态类创…

第36课 常用快捷操作——用“鼠标右键”退出当前命令

概述 在AD 20软件中&#xff0c;很多的命令都是可以一直连续下去的&#xff0c;比方说放置一个元器件符号&#xff0c;如果你当中不取消的话&#xff0c;那就可以一直执行下去&#xff0c;放完一个接着放下一个&#xff0c;放完一个接着放下一个…… 想要退出这种连续进行的命…

FFTW3.3.10库与QT结合的使用

FFTW&#xff08;Fastest Fourier Transform in the West&#xff09;是世界上最快的FFT&#xff0c; 实测计算长度为10000的double数组&#xff0c; 单次运行时间在2ms左右。为了详细了解FFTW以及为编程方便&#xff0c;特将用户手册看了一下&#xff0c;并结合手册制作了以下…

服务器异地备份,服务器异地备份有哪些方法?

服务器异地备份是应对区域性灾难&#xff08;如地震、火灾、洪水&#xff09;或人为事故&#xff08;如误删除、勒索病毒攻击&#xff09;的关键策略&#xff0c;其核心在于将数据副本存储在物理隔离的地理位置&#xff0c;确保主数据中心故障时仍可恢复业务。 以下是主流的异地…

导轨表面硬化处理有哪些?

导轨是机器工作的重要组成部分&#xff0c;它与滑块紧密配合&#xff0c;保证机器的运转精度和定位精度。为了提高导轨的耐磨性能和使用寿命&#xff0c;通常在导轨表面加工硬化层。硬化层一般是在导轨表面形成一层高硬度和高强度的薄层&#xff0c;有效地提高了导轨的耐磨性能…

Android Compose vs 传统View系统:全面对比与选型指南

Android Compose vs 传统View系统&#xff1a;全面对比与选型指南 一、引言 随着Android Jetpack Compose的正式发布&#xff0c;Android开发迎来了全新的声明式UI框架。本文将全面对比Compose与传统View系统的差异&#xff0c;帮助开发者做出合理的技术选型。 二、核心架构…

C#中实现JSON解析器

JSON(JavaScript Object Notation)即 JavaScript 对象表示法,是一种轻量级的数据交换格式。 起源与发展 JSON 源于 JavaScript 编程语言,是 JavaScript 对象字面量语法的一个子集。但如今它已经独立于 JavaScript,成为一种通用的数据格式,广泛应用于各种编程语言和系统…

【Maven】子POM与父POM

文章目录 子POM与父POM一、继承的内容1.子 POM 可以继承父 POM 的内容2.子 POM 中声明相同配置覆盖规则示例 子POM与父POM 一、继承的内容 在 Maven 项目结构中&#xff0c;子 POM&#xff08;子模块&#xff09;可以继承父 POM 的很多配置。合理使用继承机制可以大大减少重复…

12前端项目----添加购物车1.0

商品添加购物车 商品数量添加购物车浏览器本地存储localStoragesessionStorage添加成功页面 商品数量 输入为数字&#xff0c;最少为1<div class"cartWrap"><div class"controls"><input autocomplete"off" class"itxt&quo…

EasyRTC嵌入式音视频通信SDK助力视频客服,开启智能服务新时代

一、背景 在数字化服务浪潮下&#xff0c;客户对服务体验的要求日益提升&#xff0c;传统语音及文字客服在复杂业务沟通、可视化指导等场景下渐显不足。视频客服虽成为企业服务升级的关键方向&#xff0c;但普遍面临音视频延迟高、画质模糊、多端适配难、功能扩展性差等问题&a…

干货分享|MaxKB智能问数方案及步骤详解

DeepSeek-R1的发布掀起了AI智能变革的浪潮。在过去几个月里&#xff0c;MaxKB开源企业级AI助手已经帮助大量企业和组织快速落地了DeepSeek&#xff0c;让AI在不同的行业土壤中产生持续、可度量的业务价值。 MaxKB&#xff08;github.com/1Panel-dev/MaxKB&#xff09; 可以为本…

【python】数据类型小结

1.数据类型 int、float、str、bool、元组tuple、列表list、字典dict、集合set 分为两类&#xff1a;可变和不可变数据类型 2.可变数据类型和不可变数据类型 当变量的值变化&#xff0c;内存地址不变则为可变数据类型&#xff0c; eg&#xff1a;int、float、bool、字符串st…

泰山派常用命令

0.连接adb 设备列表&#xff1a;adb devices 进入命令&#xff1a;adb shell 1.连接WiFi 查看当前网络&#xff1a;nmcli con show 我的WiFi名称&#xff1a;6 我的WiFi密码&#xff1a;12345789 连接当前网络&#xff1a;nmcli device wifi connect 6 password 1234578…

whois为什么有时会返回两个不同的域名状态

前阵子发现一直想注册但被别人注册了的一个域名快要过期了&#xff0c;就想着写个脚本跑在电脑上&#xff0c;每分钟检查一次域名状态&#xff0c;一旦域名被正式删除&#xff0c;就发封邮件通知我&#xff0c;这样就不用频繁手动检查域名状态了。 写脚本时发现一个有趣的现象…

NGINX ngx_http_addition_module 模块响应体前后注入内容

一、模块概述 模块名称&#xff1a;ngx_http_addition_module引入版本&#xff1a;自 0.7.9 起支持 addition_types&#xff0c;0.8.29 起支持“*”通配&#xff1b;功能&#xff1a;对符合 MIME 类型的响应&#xff0c;在响应体前后分别插入指定子请求 URI 返回的内容&#x…

半监督学习与强化学习的结合:新兴的智能训练模式

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4o-mini模型生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认其准…

复习Vue136~180

1.使用create-vue创建项目 npm init vuelatest 项目目录和关键文件&#xff1a; new Vue() 创建一个应用实例 > createApp()、createRouter() createStore() 、将创建实例进行了封装&#xff0c;保证每个实例的独立封闭性。 禁用vue2的插件vuter 使用vue3的插件volar scrip…

QT采用mqtt进行通信(17.1)

文章目录 1.试错历程2. qt5.8安装3. 开始搞了4. 测试连接mqtt broker1.试错历程 尝试过网上说的各种版本,官方库和第三方库,试过qt5.9.9, qt5.12, qt5.12.2, qt5.14 等各个版本,都能编译通过,调用mqtt库,但是都不能连接成功,真的是试吐了,不知道他们的为什么都能成功,…