热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python的小程序分析_Python学习:JData入门小程序解析(续)

接着上一篇文章:第二个.py文件是explore_data.py它实现的功能很简单,就是简单的处理NEW_USER_FILE,他的内容

接着上一篇文章:

第二个.py文件是explore_data.py

它实现的功能很简单,就是简单的处理NEW_USER_FILE,他的内容如下:

c4c9d93d715a

user_id 用户ID 脱敏

age 年龄段 -1表示未知

sex 性别 0表示男,1表示女,2表示保密

user_lv_cd 用户等级有顺序的级别枚举,越高级别数字越大

user_reg_tm 用户注册日期粒度到天

可以看到"age"的内容是数字+中文的,这样不便于处理,explore_data.py的功能就是把"age"的内容进行映射,其映射规则如下:

def convert_age(age_str):

if age_str == u'-1':

return -1

elif age_str == u'15岁以下':

return 0

elif age_str == u'16-25岁':

return 1

elif age_str == u'26-35岁':

return 2

elif age_str == u'36-45岁':

return 3

elif age_str == u'46-55岁':

return 4

elif age_str == u'56岁以上':

return 5

else:

return -1

函数的调用方式如下:

def tranform_user_age():

# Load data, header=0 means that the file has column names

df = pd.read_csv(USER_FILE, header=0, encoding="gbk")

#对df['age']每一个元素都进行convert_age函数处理

df['age'] = df['age'].map(convert_age)

df['user_reg_tm'] = pd.to_datetime(df['user_reg_tm'])

min_date = min(df['user_reg_tm'])

df['user_reg_diff'] = [i for i in (df['user_reg_tm'] - min_date).dt.days]

df.to_csv(NEW_USER_FILE, index=False)

可以看到在map()中调用了convert_age,它会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

最后得到的NEW_USER_FILE是这样的:

c4c9d93d715a

第三个.py文件是create_user_table.py

它的功能和create_item_table.py的差不多,create_item_table.py是对商品数据特征统计分析,而create_user_table.py是对用户数据特征统计分析。

运行create_user_table.py的前提是先运行explore_data.py生成NEW_USER_FILE,其过程与create_item_table.py很是相似,这里就不再多说了,merge_action_data()后生成的表的内容如下:

c4c9d93d715a

然后同样让user_base与user_behavior进行左连接运算,最后得到这样的一张表:

c4c9d93d715a

接下来就可以进行数据清洗了和数据分析了

数据清洗:

这一步骤作者的清洗策略只在data_cleaning.ipynb中有说明,并没有写在data_cleaning.py中,大家可以使用自己的清洗策略,比如去除掉浏览数为0的僵尸用户什么的。

数据分析:

作者介绍了一些分析的方法:

周一到周日各天购买情况:

def merge_weekday_action_data():

df_ac = []

df_ac.append(get_from_action_data(fname=ACTION_201602_FILE))

df_ac.append(get_from_action_data(fname=ACTION_201603_FILE))

df_ac.append(get_from_action_data(fname=ACTION_201603_EXTRA_FILE))

df_ac.append(get_from_action_data(fname=ACTION_201604_FILE))

df_ac = pd.concat(df_ac, ignore_index=True)

# data type

print(df_ac)

print(df_ac.dtypes)

# Monday = 0, Sunday = 6

df_ac['time'] = pd.to_datetime(

df_ac['time']).apply(lambda x: x.weekday() + 1)

df_user = df_ac.groupby('time')['user_id'].nunique()

# df_ac = pd.DataFrame({'weekday': df_ac.index, 'user_num': df_ac.values})

df_user = df_user.to_frame().reset_index()

df_user.columns = ['weekday', 'user_num']

print(df_user)

df_item = df_ac.groupby('time')['sku_id'].nunique()

df_item = df_item.to_frame().reset_index()

df_item.columns = ['weekday', 'item_num']

print(df_item)

df_ui = df_ac.groupby('time', as_index=False).size()

df_ui = df_ui.to_frame().reset_index()

df_ui.columns = ['weekday', 'user_item_num']

print(df_ui)

bar_width = 0.2

# 透明度

opacity = 0.4

plt.bar(df_user['weekday'], df_user['user_num'], bar_width,

alpha=opacity, color='c', label='user')

plt.bar(df_item['weekday'] + bar_width, df_item['item_num'],

bar_width, alpha=opacity, color='g', label='item')

plt.bar(df_ui['weekday'] + bar_width * 2, df_ui['user_item_num'],

bar_width, alpha=opacity, color='m', label='user_item')

plt.xlabel('weekday')

plt.ylabel('number')

plt.title('A Week Purchase Table')

plt.xticks(df_user['weekday'] + bar_width * 3 / 2., (1, 2, 3, 4, 5, 6, 7))

plt.tight_layout()

plt.legend(prop={'size': 9})

plt.show()

输出结果:

c4c9d93d715a

c4c9d93d715a

可以看到一周用户购买数量分布相对比较均衡,周六周日购买数相对较少,可能是此时大家都去过周末玩了,而平时可以逛京东作为消遣。

也可以按月分析:

def month_action_data_statistic():

# 二月

df_ac = get_from_action_data(fname=ACTION_201602_FILE)

df_ac['time'] = pd.to_datetime(df_ac['time']).apply(lambda x: x.day)

df_user = df_ac.groupby('time')['user_id'].nunique()

df_user = df_user.to_frame().reset_index()

df_user.columns = ['day', 'user_num']

df_item = df_ac.groupby('time')['sku_id'].nunique()

df_item = df_item.to_frame().reset_index()

df_item.columns = ['day', 'item_num']

df_ui = df_ac.groupby('time', as_index=False).size()

df_ui = df_ui.to_frame().reset_index()

df_ui.columns = ['day', 'user_item_num']

bar_width = 0.2

# 透明度

opacity = 0.4

# 天数

day_range = range(1, len(df_user['day']) + 1, 1)

# 设置图片大小

plt.figure(figsize=(14, 10))

plt.bar(df_user['day'], df_user['user_num'], bar_width,

alpha=opacity, color='c', label='user')

plt.bar(df_item['day'] + bar_width, df_item['item_num'],

bar_width, alpha=opacity, color='g', label='item')

plt.bar(df_ui['day'] + bar_width * 2, df_ui['user_item_num'],

bar_width, alpha=opacity, color='m', label='user_item')

plt.xlabel('day')

plt.ylabel('number')

plt.title('February Purchase Table')

plt.xticks(df_user['day'] + bar_width * 3 / 2., day_range)

# plt.ylim(0, 80)

plt.tight_layout()

plt.legend(prop={'size': 9})

plt.show()

输出结果:

c4c9d93d715a

分析: 从上面可以发现,在2月6号到2月10号之间是我们的农历新年,快递在这几天不上班,因而购物数量相对较少,在我们实际分析时, 可以暂时将这部分数据作为异常数据不去考虑,不加入我们的训练样本中.

查看特定用户对特定商品的活动轨迹:

def spec_ui_action_data(fname, user_id, item_id, chunk_size=100000):

reader = pd.read_csv(fname, header=0, iterator=True)

chunks = []

loop = True

while loop:

try:

chunk = reader.get_chunk(chunk_size)[

["user_id", "sku_id", "type", "time"]]

chunks.append(chunk)

except StopIteration:

loop = False

print("Iteration is stopped")

df_ac = pd.concat(chunks, ignore_index=True)

df_ac = df_ac[(df_ac['user_id'] == user_id) & (df_ac['sku_id'] == item_id)]

return df_ac

def explore_user_item_via_time():

user_id = 230678

item_id = 112141

df_ac = []

df_ac.append(spec_ui_action_data(ACTION_201602_FILE, user_id, item_id))

df_ac.append(spec_ui_action_data(ACTION_201603_FILE, user_id, item_id))

df_ac.append(spec_ui_action_data(

ACTION_201603_EXTRA_FILE, user_id, item_id))

df_ac.append(spec_ui_action_data(ACTION_201604_FILE, user_id, item_id))

df_ac = pd.concat(df_ac, ignore_index=False)

print(df_ac.sort_values(by='time'))

可以看到230678用户对112141商品有过如下行为:

c4c9d93d715a

type

1.浏览(指浏览商品详情页);

2.加入购物车;

3.购物车删除;

4.下单;

5.关注;

6.点击

可以看到该用户对该商品从2016-03-25 16:17:27开始反复的点击、浏览,并于2016-03-31 23:59:00下单购买该商品,随后又对其进行了反复的点击、浏览。

以上都是本萌新的个人理解,如有错误欢迎指出。



推荐阅读
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止”按钮终止“开始”按钮为以下代码调用的已运行功能提供建议 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • 本文总结了使用不同方式生成 Dataframe 的方法,包括通过CSV文件、Excel文件、python dictionary、List of tuples和List of dictionary。同时介绍了一些注意事项,如使用绝对路径引入文件和安装xlrd包来读取Excel文件。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
author-avatar
mobiledu2502889793
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有