【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 推荐模型建立与评价

加我扣扣

目录
相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
Python数据分析实战:Pandas处理结构化数据的核心技巧
在数据驱动时代,结构化数据是分析决策的基础。Python的Pandas库凭借其高效的数据结构和丰富的功能,成为处理结构化数据的利器。本文通过真实场景和代码示例,讲解Pandas的核心操作,包括数据加载、清洗、转换、分析与性能优化,帮助你从数据中提取有价值的洞察,提升数据处理效率。
181 3
|
4月前
|
数据采集 数据可视化 搜索推荐
Python数据分析全流程指南:从数据采集到可视化呈现的实战解析
在数字化转型中,数据分析成为企业决策核心,而Python凭借其强大生态和简洁语法成为首选工具。本文通过实战案例详解数据分析全流程,涵盖数据采集、清洗、探索、建模、可视化及自动化部署,帮助读者掌握从数据到业务价值的完整技能链。
567 0
|
1月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
2月前
|
数据可视化 数据挖掘 大数据
基于python大数据的水文数据分析可视化系统
本研究针对水文数据分析中的整合难、分析单一和可视化不足等问题,提出构建基于Python的水文数据分析可视化系统。通过整合多源数据,结合大数据、云计算与人工智能技术,实现水文数据的高效处理、深度挖掘与直观展示,为水资源管理、防洪减灾和生态保护提供科学决策支持,具有重要的应用价值和社会意义。
|
3月前
|
存储 数据挖掘 大数据
基于python大数据的用户行为数据分析系统
本系统基于Python大数据技术,深入研究用户行为数据分析,结合Pandas、NumPy等工具提升数据处理效率,利用B/S架构与MySQL数据库实现高效存储与访问。研究涵盖技术背景、学术与商业意义、国内外研究现状及PyCharm、Python语言等关键技术,助力企业精准营销与产品优化,具有广泛的应用前景与社会价值。
|
4月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
4月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
4月前
|
API 数据安全/隐私保护 Python
批量发短信的软件,自动群发短信批量工具,手机号电话生成脚本插件【python】
该工具包含三个核心模块:短信发送核心功能、配置管理系统和命令行界面。使用时需先配置API密钥和短信模板
|
11月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
4月前
|
机器人 测试技术 API
自动加好友软件手机免费版,无限制qq自动加人软件,python脚本插件分享
这个示例仅展示了基础的网页自动化测试原理,实际平台都有完善的反自动化机制。建议学习正规

热门文章

最新文章

推荐镜像

更多