2023.8夏令营“用户新增预测”学习笔记(二)

今日学习任务--数据分析与可视化

        数据探索性分析,是通过了解数据集,了解变量间的相互关系以及变量与预测值之间的关系,对已有数据在尽量少的先验假设下通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法,有助于后期更好地进行特征工程和建立模型。

数据类型

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

train_data = pd.read_csv('E:/编程/用户新增预测大赛/train.csv')
print(train_data.info())

        在导入pandas,numpy库的基础上,新增了两个库,分别用于绘制图形和数据可视化。

        通过pd库的df.info()方法查看数据框属性,发现只有udmap字段为类别类型,其余皆为数值类型。

相关性热力图

sns.heatmap(train_data.drop(['udmap'], axis=1).corr().abs(), cmap='YlOrRd')
# 输出图表
plt.show()

 

x分组下标签均值 

# 绘制柱形图
for i in range(1, 9):
    sns.barplot(x='x'+str(i), y='target', data=train_data)
    plt.show()

        使用sus.barplot()函数绘制直方图,以字符串形式指定x/y轴名称,输入数据框 。

  

         由上表知,x5、x4、x3、x7、x1、x2字段更具重要性

从common_ts中提取小时,绘制每小时下标签分布的变化

# 获取指定时间和日期
train_data['common_ts'] = pd.to_datetime(train_data['common_ts'], unit='ms')
# 从common_ts中提取小时
train_data['common_ts_hour'] = train_data['common_ts'].dt.hour
# 绘制每小时下标签分布变化
sns.barplot(x='common_ts_hour', y='target', data=train_data)
plt.show()

*绘制时间-人数关系图 

# 获取各小时对应的频数
train_data['hour_freq'] = train_data['common_ts_hour'].map(train_data['common_ts_hour'].value_counts())
# 数据排重
dict_hour_freq = dict(zip(train_data['common_ts_hour'], train_data['hour_freq']))

duration_h = list(dict_hour_freq.keys())
times = list(dict_hour_freq.values())

plt.bar(duration_h, times)  # 绘制柱形图
plt.xlabel('duration_h')    # x轴设置     
plt.ylabel('times')         # y轴设置  
plt.title('bar chart')      # 标题设置
plt.show()                  

         做一个题外的尝试,并尝试plt的绘图函数。zip()将两个列表正序组成键值对,dict()生成字典,list()分离得到键和值的列表。

 

对udmap进行onehot,统计每个key对应的标签均值,绘制直方图

# 定义onehot函数
def udmap_onethot(d: str) -> np.ndarray:
    v = np.zeros(9)
    if d == 'unknown':
        return v

    d = eval(d)
    for i in range(1, 10):
        if 'key' + str(i) in d:
            v[i - 1] = d['key' + str(i)]
    return v


# 对udmap进行onehot
train_udmap_df = pd.DataFrame(np.vstack(train_data['udmap'].apply(udmap_onethot)))

# 字段统一为key_num格式
train_udmap_df.columns = ['key' + str(i) for i in range(1, 10)]

# 连接key_num与target字段
train_data = pd.concat([train_data, train_udmap_df], axis=1)

# 绘制key1~9对应的标签均值直方图:palette参数指定色调
for i in range(1, 10):
    sns.barplot(x=''.join(['key', str(i)]), y='target', data=train_data, palette='Blues_d')
    plt.show()

 

 

        由上表知,key1、key2、key3、key6字段更具重要性。

绘制数值类型的字段在标签分组下的箱线图

fields = ['common_ts_hour', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'eid']
for i in fields:
    sns.boxplot(x=i, y='target', data=train_data)
    plt.show()

        uuid字段统计价值不大,且算力不足难以绘制,故略过。common_ts数据过于庞大,仅提取小时信息分析。 

 

系列文章(持续更新)

2023.8夏令营“用户新增预测”学习笔记(一)

2023.8夏令营“用户新增预测”学习笔记(三)

2023.8夏令营“用户新增预测”学习笔记(四)

2023.8夏令营“用户新增预测”学习笔记(五)

2023.8夏令营“用户新增预测”学习笔记(六) 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值