泰迪杯特等奖思路(教育平台线上课程用户行为分析(含数据可视化处理))-代码篇

本文基于2020年泰迪杯数据集,对线上教育平台用户行为进行分析,包括缺失值、重复值和异常值处理,用户分布、活跃度及流失情况的洞察,以及课程选择分析。通过数据可视化揭示用户行为模式,如地区学习时长、用户活跃度差异和流失趋势,为平台优化提供依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  • 此数据集与题目来自于2020年泰迪杯个人技能赛,为某线上平台真实数据。该作品已获得同年最好成绩,为特等奖并获泰迪杯,现在目前的基础之上对其进行进一步的复盘与优化,如果大家有更好的想法或者思路也可以给我评论,大家一起交流进步呀!
import pandas as pd
import numpy as np
import datetime
import jieba
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 
matplotlib.rcParams['font.family']='sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False
from chinese_calendar import is_workday
from pyecharts import Bar

1.1缺失值处理

首先判断该缺失值是否为真实缺失。针对不同的数据缺失情况,本次分析将会采用不同的处理方式:

  • 1、针对数值为 0 的情况,需要进行实际的分析,回归到原始数据中去,判断该数据为 0 时是否具有实际意义。如果没有就将其作为缺失值做删除处理
  • 2、针对数据为空值的情况,如果该特征数据缺失情况低于 10%,则结合该特征的重要性进行综合判断。如果字段重要性较低,则考虑直接删除,如果字段重要性较高,则进行插值法或者采用数据均值进行填补
login=pd.read_csv('login.csv',encoding='gbk')
login.info()
# 没有缺失值

1.2重复值处理

在完成缺失数据和异常数据处理之后,对数据进行重复值的删除处理。此处的重复值是指在数据表中用于分析的各个字段均一致。

#一天内重复登录的行为我们将视为一次登录即可,以减少数据量

# 方法一
# data1=login['login_time'].str.split(' ',expand=True)[0]
# login=pd.concat([login,data1],axis=1)
# login.rename(columns={0:'日期'},inplace=True)
# del login['login_time']
# login

# 方法二
def str_datetime(df,column_name='login_time'):
    df[column_name]=pd.to_datetime(df[column_name])
    df[column_name]=df[column_name].apply(lambda x:x.strftime('%Y-%m-%d'))
    return df

login=str_datetime(login)
# 将同一日期用户重复登陆行为删除
login=login.drop_duplicates()
login


# 以最近的时间为基准,计算出用户每一次登录距离现在的时间
login['时间差1']=pd.to_datetime(login['login_time']).max()-pd.to_datetime(login['login_time'])
login


# 重新排序
login=login.reset_index()
del login['index']
# # 地区拆分
# # 运行时间很长-而且切词并不准确,很多没有切除干净
# for i in range(login.shape[0]):
#     li=[str(i.word) for i in HanLP.newSegment("crf").seg(login.iloc[i,2])]
# #     li=[word for word in jieba.cut(login.iloc[i,2])]
#     if len(li)==1:
#         if '中国' in login.iloc[i,2]:
#             login.loc[i,'国家']=login.iloc[i,2][0:2]
#             login.loc[i,'省份']=login.iloc[i,2][2:]
#         else:
#             login.loc[i,'国家']=login.iloc[i,2]
#     elif len(li)==2:
#         login.loc[i,'国家']=li[0]
#         login.loc[i,'省份']=li[1]
#     else:
#         login.loc[i,'国家']=li[0]
#         login.loc[i,'省份']=li[1]
#         login.loc[i,'地区']=li[2]
#     if i % 10000 ==0:
#         print(i)


# 改进版本
for i in range(login.shape[0]):
    if login.loc[i,'login_place'][0:2]=='中国':
        login.loc[i,'国家']='中国'
        if '黑龙江' in login.loc[i,'login_place']:
            login.loc[i,'省份']='黑龙江'
            if len(login.loc[i,'login_place'])>5:
                login.loc[i,'地区']=login.loc[i,'login_place'][5:]
            else:pass
        if '新疆维吾尔' in login.loc[i,'login_place']:
            login.loc[i,'省份']='新疆维吾尔'
            if len(login.loc[i,'login_place'])>7:
                login.loc[i,'地区']=login.loc[i,'login_place'][7:]
            else:pass
        if '内蒙古' in login.loc[i,'login_place']:
            login.loc[i,'省份']='内蒙古'
            if len(login.loc[i,'login_place'])>5:
                login.loc[i,'地区']=login.loc[i,'login_place'][5:]
            else:pass
        else:
       
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值