关系数据的可视化

实验概述

实验名称:关系数据的可视化
实验目的

  1. 掌握关系数据在大数据中的应用场景
  2. 掌握常见关系数据可视化方法
  3. 使用Python实现多维数据关联分析

一、环境准备

【实验环境】
OS:Windows
python:v3.6
数据源:
在这里插入图片描述
安装Python所需要的第三方模块
pip install seaborn

#进行环境配置
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib import cm  # 动态散点图颜色映射

二、核心实验内容

实验1:联合分布图分析

目标:探究谋杀与入室盗窃犯罪率的关联性
技术亮点

  • 三图合一的联合分布展示
  • 线性回归趋势线叠加
  • 相关系数动态标注
# 设置中文字体(避免中文乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统
plt.rcParams['axes.unicode_minus'] = False   # 解决负号显示问题

# 读取数据
file_path = r"C:\Users\二狗王\Documents\Downloads\crimeRatesByState2005.csv"
df = pd.read_csv(file_path)

# 计算相关系数
correlation = df[['murder', 'burglary']].corr().iloc[0, 1]

# 创建联合分布图
g = sns.jointplot(
    data=df,
    x='murder',
    y='burglary',
    kind='reg',  # 使用回归图代替散点图
    height=8,    # 图形高度
    ratio=5,     # 主图与边缘图的比例
    space=0.2,   # 主图与边缘图的间距
    marginal_kws={
        'kde': True,         # 边缘图显示核密度估计
        'color': 'lightblue' # 边缘图颜色
    },
    scatter_kws={
        'color': 'darkblue', # 散点颜色
        'alpha': 0.7,        # 散点透明度
        's': 50             # 散点大小
    },
    line_kws={
        'color': 'red',      # 回归线颜色
        'linewidth': 2       # 回归线宽度
    }
)

# 添加标题和相关系数
g.fig.suptitle(f"谋杀与入室盗窃犯罪率相关性分析\n相关系数: {correlation:.2f}", fontsize=16, fontweight='bold', y=1.02)
plt.tight_layout()

# 显示图形
plt.show()

输出如下所示:
在这里插入图片描述

可视化解读

  • 主图:散点图+回归线展示线性趋势
  • 上方/右侧:核密度曲线揭示单变量分布
  • 颜色映射:冷色调增强数据层次感

实验2:动态散点图分析

技术突破:时序维度可视化
代码亮点

  • 数据点逐帧加载动画
  • 颜色映射反映数值变化
  • 支持生成可交互GIF
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib import cm

# 设置中文字体(避免中文乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统
plt.rcParams['axes.unicode_minus'] = False   # 解决负号显示问题

# 读取数据
file_path = r"C:\Users\二狗王\Documents\Downloads\crimeRatesByState2005.csv"
df = pd.read_csv(file_path)

# 提取数据
x_data = df['murder']
y_data = df['burglary']

# 创建图形和轴
fig, ax = plt.subplots(figsize=(10, 6))
sc = ax.scatter([], [], c=[], cmap=cm.coolwarm, alpha=0.8, edgecolor='k', s=100)
ax.set_xlim(0, x_data.max() + 1)
ax.set_ylim(0, y_data.max() + 200)
ax.set_xlabel("谋杀犯罪率 (murder)", fontsize=14)
ax.set_ylabel("入室盗窃犯罪率 (burglary)", fontsize=14)
ax.set_title("谋杀与入室盗窃犯罪率动态散点图", fontsize=16, fontweight='bold')
ax.grid(color='gray', linestyle='--', linewidth=0.5, alpha=0.7)

# 动态更新函数
def update(frame):
    current_data = df.iloc[:frame]
    sc.set_offsets(current_data[['murder', 'burglary']].values)
    sc.set_array(current_data['murder'])  # 用谋杀犯罪率控制颜色
    return sc,

# 创建动画
ani = FuncAnimation(fig, update, frames=len(df), interval=200, repeat=False)

# 保存动画为 GIF 文件
ani.save("dynamic_scatter.gif", writer="pillow", fps=5)

# 显示动画
plt.show()

输出如下所示:
在这里插入图片描述

动态特性

  • 颜色渐变反映犯罪率强度变化
  • 逐点加载观察数据分布过程
  • 支持导出为可分享的GIF文件

实验3:散点图矩阵

技术价值:多维关系并行分析

import pandas as pd  
import seaborn as sns  
import matplotlib.pyplot as plt  

# 数据文件路径  
file_path = r"C:\Users\二狗王\Documents\Downloads\crimeRatesByState2005.csv"  

# 读取数据  
df = pd.read_csv(file_path)  

# 剔除 United States 和 District of Columbia 两行  
df = df[~df['state'].isin(['United States', 'District of Columbia'])]  

# 选择七种犯罪类型字段  
crime_types = [  
    'murder',   
    'forcible_rape',   
    'robbery',   
    'aggravated_assault',   
    'burglary',   
    'larceny_theft',   
    'motor_vehicle_theft'  
]  

# 取出相关列  
df_crime = df[crime_types]  

# 设置绘图风格  
sns.set(style='whitegrid', palette='muted', font_scale=1.2)  

# 绘制散点图矩阵  
g = sns.pairplot(df_crime, kind='scatter', diag_kind='kde', plot_kws={'alpha':0.6, 's':40})  

# 增加标题  
plt.suptitle('2005年美国各州七种犯罪类型之间的相关关系散点图矩阵', y=1.02, fontsize=16)  

# 调整布局  
plt.tight_layout()  

plt.show()  

输出如下所示:
在这里插入图片描述

交互优势

  • 对角线展示单变量核密度分布
  • 非对角散点图揭示双变量关系
  • 支持快速定位异常数据点

实验4:犯罪类型关联热力图

创新点:矩阵式相关性强度呈现

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体(避免中文乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取数据(注意路径转义)
file_path = r"C:\Users\二狗王\Documents\Downloads\crimeRatesByState2005.csv"
df = pd.read_csv(file_path)

# 剔除异常数据行
df_clean = df[(df['state'] != 'United States') & (df['state'] != 'District of Columbia')]

# 选取七种犯罪类型列
crime_columns = [
    'murder', 
    'forcible_rape', 
    'robbery', 
    'aggravated_assault', 
    'burglary', 
    'larceny_theft', 
    'motor_vehicle_theft'
]

# 计算相关系数矩阵
corr_matrix = df_clean[crime_columns].corr()

# 设置画布尺寸
plt.figure(figsize=(12, 10))

# 创建热力图
heatmap = sns.heatmap(
    corr_matrix,
    annot=True,          # 显示相关系数数值
    fmt=".2f",           # 数值格式
    cmap='coolwarm',     # 颜色映射方案
    vmin=-1, vmax=1,     # 数值范围
    linewidths=0.5,      # 单元格间隔线宽
    annot_kws={'size': 10},  # 注释字体大小
    cbar_kws={"shrink": 0.8} # 颜色条尺寸
)

# 美化图形
heatmap.set_xticklabels(
    heatmap.get_xticklabels(),
    rotation=45,         # 标签旋转角度
    ha='right',          # 水平对齐方式
    fontsize=12
)
heatmap.set_yticklabels(
    heatmap.get_yticklabels(),
    fontsize=12
)

# 添加标题和装饰
plt.title('美国各州七种犯罪类型相关性热力图', fontsize=16, pad=20)
heatmap.figure.subplots_adjust(top=0.9)  # 调整标题位置

# 显示图形
plt.tight_layout()
plt.show()

输出如下所示:
在这里插入图片描述

分析结论

  • 红色区块表示强正相关(如抢劫与严重攻击)
  • 蓝色区块显示负相关关系
  • 白色系为弱相关区域

三、实验总结

方法论收获

  1. 静态可视化侧重数据快照分析
  2. 动态可视化增强时序感知
  3. 矩阵类图表适合高维数据分析

信息洞察

  • 盗窃类犯罪呈现强正相关
  • 谋杀与车辆盗窃相关性较低
  • 数据清洗对结果可靠性至关重要

注意事项

  1. 动态可视化需安装pillow库:pip install pillow
  2. 中文字体设置需匹配操作系统
  3. 热力图数值保留两位小数增强可读性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值