Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数

文章目录

  • 1. 某店铺消费最多的前三名用户
  • 2. 按照等级递增序查看牛客网用户信息
  • 3. 某店铺用户消费特征评分
  • 4. 筛选某店铺最有价值用户中消费最多前5名
  • 5. 如何让刷题更加高效呢?

前言

最近很多学了基础的小伙伴问我该怎么提升编程水平?学了基础该上哪刷题?明明学了很多,做项目却不知道怎么上手,其实这就是练得太少,只注重了学,却忽视了刷题,只有不断练习才能提高和巩固编程思维和能力!

在这里插入图片描述

刚好看到牛客网最近出了Python的新题库于是体验了一番感觉还不错

在这里插入图片描述

链接地址:牛客网 | Python从入门到实践四十招,废话少说速度上号,或者跟着下文一起刷题!!!



1. 某店铺消费最多的前三名用户

描述: 现有某店铺会员消费情况sales.csv。包含以下字段:
user_id:会员编号;
recency:最近一次消费距离当天的天数;
frequency:一段时间内消费的次数;
monetary:一段时间内消费的总金额。
请你统计消费金额最多的前3名用户。

Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数_第1张图片

实现代码:

import pandas as pd
sales = pd.read_csv('sales.csv')
 
data = sales.sort_values(by='monetary', ascending=False).reset_index(drop=True)[:3]
 
print(data)

运行结果:

Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数_第2张图片



2. 按照等级递增序查看牛客网用户信息

描述: 现有一个Nowcoder.csv文件,记录了牛客网的部分用户的个人信息,包含如下字段(字段与字段之间以逗号间隔):
Nowcoder_ID:用户ID
Name:用户名
Level:等级
Achievement_value:成就值
Num_of_exercise:刷题量
Graduate_year:毕业年份
Language:常用语言
牛牛在查看这些数据的时候,等级都是混乱的,他想按照1-7级的递增序查看这些用户数据,你能帮他输出一下吗?

Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数_第3张图片

实现代码:

import pandas as pd
 
pd.set_option('display.width', 300)  # 设置字符显示宽度
pd.set_option('display.max_rows', None)  # 设置显示最大行
pd.set_option('display.max_columns', None)
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
df = Nowcoder.sort_values(by='Level',ascending=True)
print(df)

运行结果:

Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数_第4张图片



3. 某店铺用户消费特征评分

描述: 现有某店铺会员消费情况sales.csv。包含以下字段:
user_id:会员编号;
recency:最近一次消费距离当天的天数;
frequency:一段时间内消费的次数;
monetary:一段时间内消费的总金额。
请你分别对每个用户的每个消费特征进行评分。

Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数_第5张图片

实现代码:

import pandas as pd
sales = pd.read_csv('sales.csv')

# 按照结果要求转换类型
sales[['monetary']] = sales[['monetary']].astype('float32')
# 求百分位
des = sales[['recency', 'frequency', 'monetary']].describe().loc['25%':'75%']

# 计算RFM
sales['R_Quartile'] = sales['recency'].apply(lambda x: 4 if x <= des.iloc[0,0] else (3 if x <= des.iloc[1,0] else (2 if x <= des.iloc[2,0] else 1)))
sales['F_Quartile'] = sales['frequency'].apply(lambda x: 1 if x <= des.iloc[0,1] else (2 if x <= des.iloc[1,1] else (3 if x <= des.iloc[2,1] else 4)))
sales['M_Quartile'] = sales['monetary'].apply(lambda x: 1 if x <= des.iloc[0,2] else (2 if x <= des.iloc[1,2] else (3 if x <= des.iloc[2,2] else 4)))

# 
print(sales.head())

运行结果:

Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数_第6张图片



4. 筛选某店铺最有价值用户中消费最多前5名

描述: 现有某店铺会员消费情况sales.csv。包含以下字段:
user_id:会员编号;
recency:最近一次消费距离当天的天数;
frequency:一段时间内消费的次数;
monetary:一段时间内消费的总金额。
请你统计最有价值的用户中消费金额最多的前5名用户。

Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数_第7张图片

实现代码:

import pandas as pd
sales = pd.read_csv('sales.csv')

# 按照结果要求转换类型
sales[['monetary']] = sales[['monetary']].astype('float32')
# 求百分位
des = sales[['recency', 'frequency', 'monetary']].describe().loc['25%':'75%']

# 计算RFM
R = sales['recency'].apply(lambda x: 4 if x <= des.iloc[0,0] else (3 if x <= des.iloc[1,0] else (2 if x <= des.iloc[2,0] else 1))).astype('str')
F = sales['frequency'].apply(lambda x: 1 if x <= des.iloc[0,1] else (2 if x <= des.iloc[1,1] else (3 if x <= des.iloc[2,1] else 4))).astype('str')
M = sales['monetary'].apply(lambda x: 1 if x <= des.iloc[0,2] else (2 if x <= des.iloc[1,2] else (3 if x <= des.iloc[2,2] else 4))).astype('str')

# 合并RFM
sales['RFMClass'] = R+F+M
# 
print(sales.head())

# 筛选444用户
sales1 = sales[sales['RFMClass'] == '444'].sort_values(by='monetary', ascending=False).reset_index(drop=True)
#
print(sales1.head())

运行结果:

Python每日一练(牛客数据分析篇新题库)——第39天:排序、函数_第8张图片



5. 如何让刷题更加高效呢?

嫌博主更新慢的小伙伴牛客网上号自行刷题

在这里插入图片描述

链接地址:牛客网 | Python从入门到实践四十招,废话少说速度上号!!!

你可能感兴趣的:(Python每日一练,python,数据分析,数据挖掘)