今日任务:
内容回顾:数据初步可视化
- 单特征可视化:连续变量箱线图(还说了核密度直方图)、离散特征直方图
- 特征和标签关系可视化
- 箱线图美化--->直方图
作业:去针对其他特征绘制单特征图和特征和标签的关系图,并且试图观察出一些有意思的结论
回顾昨天的内容,先完整的对项目二的数据进行一下之前的数据处理
步骤依旧如下:读取数据,找寻所有离散特征,给所有离散特征进行独热编码,补充缺失值
在找寻离散特征时还可以用内嵌的方法:select_dtypes(include['object']).columns.tolist()
最后通过tolist()转换为列表,也很方便
发现项目二的离散特征是datatime,具有顺序关系,不应该进行独热编码,而是要去提取相应的年、月、日、周、天、时间等信息
# 读取数据
import pandas as pd
data = pd.read_csv('data2.csv')
# 找到所有离散特征
discrete_features = data.select_dtypes(include=['object']).columns.tolist()
print(discrete_features)
# print(data[discrete_features])
data['datetime'] = pd.to_datetime(data['datetime'],format='%Y-%m-%d %H:%M')
# 提取时间特征
data['year'] = data['datetime'].dt.year
data['month'] = data['datetime'].dt.month
data['day'] = data['datetime'].dt.day
data['hour'] = data['datetime'].dt.hour
data['dayofweek'] = data['datetime'].dt.dayofweek
# 星期几,0=周一,6=周日
data['is_weekend'] = data['dayofweek'].isin([5,6]).astype(int)
# 是否周末
data['time_slot'] = pd.cut(data['hour'],bins=[0,6,12,18,24],labels=['night','morning','afternoon','evening'],include_lowest=True)
# 时间段
data.drop('datetime',axis=1,inplace=True)
# 删除原始列
print(data.head())
# 填补缺失值
print(data.isnull().sum())
# 发现无缺失值,不需要填补,数据预处理结束
正式开始今天的内容




绘制一个图必备的要素
1. 需要指定图的类型,比如折线图,散点图,柱状图等
2. 需要指定图的坐标轴,比如x轴和y轴,并且传入数据
3. 需要指定图的标题,比如x轴和y轴的标签,以及标题
针对单特征的数据可视化
#简单的数据可视化主要有三种
# 针对单特征的可视化
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv(r'data.csv')
# 设置全局字体为支持中文的字体 (例如 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.xticks(rotation=45, ha='right', fontsize=10)
plt.tight_layout() # 自动调整布局,防止标签被截断
plt.show()

特征与标签之间的关系图
# 特征与标签之间的可视化
# 另一种可视化方式:箱线图
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()
# 核密度估计 kde=Ture
# 绘制 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()



今日微微疲惫,明日复习日再战,顺一遍,好好把图画一下,前面尝试画别的的时候,出现了一些很不美观的图,应该是选取图形的问题
354

被折叠的 条评论
为什么被折叠?



