【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析

简介: 本文介绍了2023钉钉杯复赛A题的智能手机用户监测数据分析,包括数据预处理、特征提取、推荐模型建立与评价的Python代码实现,旨在通过用户使用记录预测APP使用情况并建立推荐系统。

【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析

在这里插入图片描述

1 题目

一、问题背景

近年来,随着智能手机的产生,发展到爆炸式的普及增长,不仅推动了中 国智能手机市场的发展和扩大,还快速的促进手机软件的开发。近年中国智能手 机市场品牌竞争进一步加剧,中国超越美国成为全球第一大智能手机市场。手机 软件日新月异,让人们更舒适的使用手机,为人们的生活带来很多乐趣,也产生 了新的群体“低头一族”。手机软件进入人们的生活,游戏、购物、社交、资讯、理财等等APP吸引着、方便着现代社会的人们,让手机成为人们出门的必备物 品。

该数据来自某公司某年连续30天的4万多智能手机用户的监测数据,已经做 了脱敏和数据变换处理。每天的数据为1个txt文件,共10列,记录了每个用户(以uid为唯一标识)每天使用各款APP(以appid为唯一标识)的起始时间,使 用时长,上下流量等。具体说明见表1。此外,有一个辅助表格app_class.csv,共两列。第一列是appid,给出4000多个常用APP所属类别(app_class),比如:社交类、影视类、教育类等,用英文字母a-t表示,共20个常用得所属类别,其余APP不常用,所属类别未知。

表 1

变量编号 变量名 释义
1 uid 用户的id
2 appid APP的id(与app_class文件中的第一列对应)
3 app_type APP类型:系统自带、用户安装
4 start_day 使用起始天,取值1-30(注:第一天数据的头两行的使用起始天取 值为0,说明是在这一天的前一天开始使用的)
5 start_time 使用起始时间
6 end_day 使用结束天
7 end_time 使用结束时间
8 duration 使用时长(秒)
9 up_flow 上行流量
10 down_flow 下行流量

二、解决问题

  1. APP使用情况预测分析:要研究的问题是通过用户的APP使用记录预测用户未来是否使用APP所属类型(app_class),以及对应的具体类型(appid)( 多重分类问题)

(一)对用户使用APP的情况进行预测,根据用户第1~15天的常用所属20 类APP的使用情况,建立一个模型来预测用户在16~30天会使用哪些类的APP, 给出预测结果和真实结果相比的准确率。(注:测试集不能参与到训练和验证中,否则作违规处理)

(二)对用户使用APP的使用时长进行预测,根据用户第115天的常用所属20类APP的使用情况,建立一个模型来预测用户在1630天对于每一类APP的有效日均使用时长。评价指标选用NMSE. (注:测试集不能参与到训练和验证中,否则作违规处理)

  1. 由于APP数量众多,总量多达几万,绝大多数市场占用率极低,因此仅使用app_class.csv文件中给出的4000多个常用的并且用户数超过10个APP进行推荐。通过每个用户30天的手机app使用情况,建立一个推荐系统模型,对每一个用户推荐app,并且给出推荐系统模型的详细描述,推荐系统使用的模型参数量,以及对推荐系统的预测结果进行评价。

2 思路分析

2.1 问题一

在初赛的基础上,重新训练模型,重新预测一遍就行。

2.2 问题二

这是一个推荐系统开发的问题。

  1. 数据预处理:对数据进行清洗和预处理,包括去除重复值、缺失值填充、异常值处理、特征工程等。
  2. 特征提取:从数据中提取有用的特征,包括用户的历史使用记录、app所属类别、app类型等。
  3. 模型选择:基于内容的推荐、协同过滤推荐、深度学习推荐等推荐模型。
  4. 模型训练:将预处理后的数据输入到所选的机器学习模型中进行训练,得到模型参数。
  5. 模型评估:对训练好的模型进行评估,如准确率、召回率、F1值等。
  6. 模型优化:根据评估结果进行模型参数的调整和优化,模型改进、模型融合等方法。

我们可以考虑使用协同过滤推荐模型,模型参数包括用户偏好矩阵和物品偏好矩阵,参数量取决于用户和物品的数量。对于推荐系统的预测结果进行评价,可以使用交叉验证或者留出法等方法进行评估。

3 Python实现

3.1 数据预处理

import pandas as pd
import os
from tqdm import tqdm
import warnings
warnings.filterwarnings("ignore")
tqdm.pandas()
# 合并数据1-30天的数据
folder_path = '初赛数据集/'
dfs = []
for filename in os.listdir(folder_path):
    if filename.endswith('.txt'):
        csv_path = os.path.join(folder_path, filename)
        tempdf = pd.read_csv(csv_path)
        dfs.append(tempdf)

folder_path = '复赛数据集/'
for filename in os.listdir(folder_path):
    if filename.endswith('.txt'):
        csv_path = os.path.join(folder_path, filename)
        tempdf = pd.read_csv(csv_path)
        dfs.append(tempdf)
df = pd.concat(dfs,axis=0)
df.shape
import pandas as pd
import matplotlib.pyplot as plt

# 数据清洗
df.loc[df['start_day'] == 0, 'start_day'] = 1  # 将使用起始天为0的行,修改为1
df['start_time'] = pd.to_datetime(df['start_time'])  # 转换为datetime类型
df['end_time'] = pd.to_datetime(df['end_time'])  # 转换为datetime类型
df['usage_time'] = (df['end_time'] - df['start_time']) / pd.Timedelta(minutes=1)  # 使用时长(分钟)
df['up_flow_mb'] = df['up_flow'] / 1024 / 1024  # 上行流量(MB)
df['down_flow_mb'] = df['down_flow'] / 1024 / 1024  # 下行流量(MB)
df = df[df['duration'] != 0]  # 剔除使用时长为0的行
df = df[df['up_flow'] != 0]  # 剔除上行流量为0的行
df = df[df['down_flow'] != 0]  # 剔除下行流量为0的行
df
# 剔除使用时长和流量明显异常的行
# 剔除使用时长小于10秒的行
df = df[df['usage_time'] >= 10]
fig, axs = plt.subplots(1, 3, figsize=(10, 5))
axs[0].hist(df['usage_time'])
axs[0].set_title('Usage Time')
axs[0].set_xlabel('Time (minutes)')
axs[1].hist(df['up_flow_mb'])
axs[1].set_title('Up Flow')
axs[1].set_xlabel('Up Flow (MB)')
axs[2].hist(df['down_flow_mb'])
axs[2].set_title('Down Flow')
axs[2].set_xlabel('Down Flow (MB)')
plt.show()
# APP分类信息(可根据app_id和app_class文件进行关联)
cate_df_1 = pd.read_csv('初赛数据集/app_class.csv',header=None)
cate_df_2 = pd.read_csv('复赛数据集/app_class.csv',header=None)
cate_df = pd.concat([cate_df_1,cate_df_2],axis=0)
cate_df.columns = ['appid','letter']
# 定义字母编码映射字典
char_map = {chr(i + 96): i for i in range(1, 27)}
# 将'letter'列中的字母进行编码
cate_df['letter'] = cate_df['letter'].map(char_map)
cate_dict = dict(zip(cate_df['appid'],cate_df['letter']))
df['category'] = df['appid'].map(cate_dict)
df.to_excel('data/复赛数据集1-30day.xlsx',index=False)

3.2 推荐模型建立与评价

加我扣扣

目录
相关文章
|
3天前
|
数据挖掘 PyTorch TensorFlow
|
4天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
22 5
|
2天前
|
机器学习/深度学习 数据挖掘 TensorFlow
🔍揭秘Python数据分析奥秘,TensorFlow助力解锁数据背后的亿万商机
【9月更文挑战第11天】在信息爆炸的时代,数据如沉睡的宝藏,等待发掘。Python以简洁的语法和丰富的库生态成为数据分析的首选,而TensorFlow则为深度学习赋能,助你洞察数据核心,解锁商机。通过Pandas库,我们可以轻松处理结构化数据,进行统计分析和可视化;TensorFlow则能构建复杂的神经网络模型,捕捉非线性关系,提升预测准确性。两者的结合,让你在商业竞争中脱颖而出,把握市场脉搏,释放数据的无限价值。以下是使用Pandas进行简单数据分析的示例:
12 5
|
11天前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【9月更文挑战第2天】数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
40 5
|
14天前
|
SQL 数据挖掘 API
ibis:极具潜力的Python数据分析新框架
ibis:极具潜力的Python数据分析新框架
|
3天前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
12 0
|
12天前
|
机器学习/深度学习 存储 数据可视化
深入浅出:使用Python进行数据分析
【8月更文挑战第31天】 在数字时代的浪潮中,数据已成为新的石油。掌握数据,就是掌握未来的钥匙。本文将带你走进Python的世界,学习如何运用这一强大工具进行数据分析,解锁数据的奥秘。无论你是编程新手还是想深化数据分析技能的专业人士,这篇文章都将是你宝贵的资源。让我们开始吧,一起探索Python数据分析的魅力所在!
|
14天前
|
数据采集 机器学习/深度学习 数据可视化
使用Python进行数据分析的入门指南
【8月更文挑战第30天】本文将引领读者进入Python在数据分析领域的应用,通过实际案例和代码示例,帮助初学者理解并掌握数据处理、可视化以及模型构建的基本技能。我们将从数据探索开始,逐步深入到数据清洗、分析和预测建模,最后以一个综合案例结束,旨在让读者能够独立完成一个数据分析项目。
|
14天前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析的新手指南深入浅出操作系统:从理论到代码实践
【8月更文挑战第30天】在数据驱动的世界中,掌握数据分析技能变得越来越重要。本文将引导你通过Python这门强大的编程语言来探索数据分析的世界。我们将从安装必要的软件包开始,逐步学习如何导入和清洗数据,以及如何使用Pandas库进行数据操作。文章最后会介绍如何使用Matplotlib和Seaborn库来绘制数据图表,帮助你以视觉方式理解数据。无论你是编程新手还是有经验的开发者,这篇文章都将为你打开数据分析的大门。
|
14天前
|
机器学习/深度学习 数据可视化 数据挖掘
为啥我敢说Python是数据分析界的扛把子语言?
为啥我敢说Python是数据分析界的扛把子语言?