Day6 描述性统计--数据初步可视化

单特征分布可视化:

连续变量箱线图、离散特征直方图

# 首先查看都有什么特征
import pandas as pd
data = pd.read_csv('data.csv')
data.head()
# 找到所有的连续特征,这是之前的写法
continuous_features = []
for i in data.columns:
    if data[i].dtype != 'object':
        continuous_features.append(i)
continuous_features

# 新方法,但不建议
# 实际上,实现上述操作,更简单的方法如下,借助select_dtypes方法。
continuous_features = data.select_dtypes(include=['float64', 'int64']).columns.tolist()
continuous_features

初识matplotlib库 
1. 需要指定图的类型,比如折线图,散点图,柱状图等

2. 需要指定图的坐标轴,比如x轴和y轴,并且传入数据

3. 需要指定图的标题,比如x轴和y轴的标签,以及标题

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

sns.boxplot(x=data['Annual Income']) # 绘制箱线图
plt.title('Annual Income 的箱线图') # 标题
plt.xlabel('Annual Income') # 横坐标
plt.show()

 此时你会发现

1. 下方有莫名其妙的警告

2. 中文字符显示不全

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

# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False

sns.boxplot(x=data['Annual Income'])
plt.title('年收入 箱线图')  # 使用中文标题
plt.xlabel('年收入')      # 使用中文标签
plt.show()
# 绘制直方图
sns.histplot(data['Years in current job'])
plt.title('在当前工作年限 直方图')
plt.xlabel('在当前工作年限')
plt.ylabel('员工数量')
plt.show()
# 还有很多新的参数可以调整图像 但是不需要记忆 用的时候问下ai即可
sns.histplot(x=data['Years in current job'])
plt.title('在当前工作年限 直方图')
plt.xlabel('在当前工作年限')
plt.ylabel('员工数量')
plt.xticks(rotation=45, ha='right')  # 旋转45度,并右对齐
plt.tight_layout()  # 自动调整子图参数,提供足够的空间
plt.show()

 绘制特征和标签的关系

标签离散,特征连续

可以分别考虑违约和不违约情况下的连续特征,画2个箱线图

# 另一种可视化方式:箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(x='Credit Default', y='Annual Income', data=data)
plt.title('Annual Income vs. Credit Default')
plt.xlabel('Credit Default')
plt.ylabel('Annual Income')
plt.show()
# 另一种可视化方式:小提琴图
# 相较于箱线图,小提琴图更加美观
plt.figure(figsize=(8, 6))
sns.violinplot(x='Credit Default', y='Annual Income', data=data)
plt.title('Annual Income vs. Credit Default')
plt.xlabel('Credit Default')
plt.ylabel('Annual Income')
plt.show()

实际上连续变量也可以绘制类似于直方图的图像,可以用核密度估计来完成边缘的柔和化

# 绘制 Annual Income 和 Credit Default 的关系图
plt.figure(figsize=(8, 6))
sns.histplot(x='Annual Income', hue='Credit Default', data=data, kde=True, element="step")
plt.title('Annual Income vs. Credit Default')
plt.xlabel('Annual Income')
plt.ylabel('Count')
plt.show()

 标签离散,特征离散

# 绘制 Number of Open Accounts 和 Credit Default 的关系图
plt.figure(figsize=(8, 6))
sns.countplot(x='Number of Open Accounts', hue='Credit Default', data=data)
plt.title('Number of Open Accounts vs. Credit Default')
plt.xlabel('Number of Open Accounts')
plt.ylabel('Count')
plt.show()

可以看到 如果number of open accounts的值太多 就会很散,不美观,所以这时候采取分组的措施

# 将 "Number of Open Accounts" 分组
data['Open Accounts Group'] = pd.cut(data['Number of Open Accounts'], bins=[0, 5, 10, 15, 20, float('inf')], labels=['0-5', '6-10', '11-15', '16-20', '20+']) # 根据你的数据调整分组

plt.figure(figsize=(10, 6))
sns.countplot(x='Open Accounts Group', hue='Credit Default', data=data)
plt.title('Number of Open Accounts (Grouped) vs. Credit Default')
plt.xlabel('Number of Open Accounts Group')
plt.ylabel('Count')
plt.show()

### 数据集分析与可视化的流程 #### 选择合适的数据集 对于任何数据科学项目,选择一个有意义且易于获取的数据集至关重要。例如,在电动汽车的研究背景下,可以选取关于全电动汽车性能、销售情况等方面的数据集[^4]。 #### 明确目标并构建分析框架 确立具体的目标有助于指导整个过程的方向。比如希望通过探索社交媒体上的情绪表达来揭示公众态度,则应围绕这一目的建立相应的逻辑结构;又或是针对业务需求设计一套完整的解决方案路径,包括但不限于定义问题域、收集整理资料、实施计算处理直至最终成果呈现等多个环节[^2]。 #### 进行必要的预处理工作 原始数据往往存在缺失项、噪声等问题,这会影响后续建模的效果。所以要先做清洗(如去除重复记录)、转换(调整字段格式)等准备工作,确保输入质量良好以便于进一步挖掘价值所在。 #### 应用统计学原理开展初步探究 利用描述性统计数据概括总体特征,绘制直方图查看变量分布形态,借助箱线图找出潜在离群点...这些都是不可或缺的基础步骤之一。以小费案例为例,可以通过这些手段了解顾客给付习惯及其背后可能存在的影响因素[^3]。 #### 实施高级算法实现更深层次洞察 当基础层面的信息不足以支撑决策时,就需要引入机器学习或其他复杂的技术手段来进行预测或者分类任务了。不过在此之前务必确认所选方法适用于当前场景,并经过充分验证其有效性之后再投入使用。 #### 利用图表传达结论 最后也是最重要的一环就是将所得知见转化为易于理解的形式展现出来。这里推荐几种常见的图形化表示方式: - **折线图**:适合表现时间序列上的变化趋势; - **柱状图/条形图**:用于比较不同类别之间的数量差异; - **散点图矩阵**:能够一次性观察多维空间里各维度间的关系; - **热力图**:突出显示数值大小关系的同时也便于发现集群现象。 下面给出一段简单的 Python 代码片段作为示范,它读取了一个名为 `tips` 的 Excel 文件并将其中某些列绘制成饼状图: ```python import pandas as pd from matplotlib import pyplot as plt # 加载Excel文件到DataFrame对象中 df = pd.read_excel('path/to/tips.xlsx') # 统计每种支付方式出现次数 payment_counts = df['day'].value_counts() # 创建一个新的figure窗口 plt.figure(figsize=(8,6)) # 调用pie函数制作饼图 plt.pie(payment_counts.values, labels=payment_counts.index, autopct='%1.1f%%', startangle=90) # 设置标题 plt.title('Distribution of Payment Days') plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值