携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天
- DA29 牛客网的每日练题量
参考论文:
import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv', parse_dates=True, index_col='date')
df = nowcoder.groupby('date')
print(df.size())
- DA30 牛客网用户练习的平均次日留存率
这题我是看不懂题目的 参考下这位大佬的解答
# 不走笛卡尔积
import pandas as pd
from datetime import timedelta, datetime
nowcoder = pd.read_csv("nowcoder.csv")
nowcoder["date"] = pd.to_datetime(nowcoder["date"]).dt.date
# 日期+1
nowcoder["datenew"] = nowcoder["date"].apply(lambda x: x + timedelta(days=1))
# join交集
nowcoder_1 = pd.merge(
nowcoder[["user_id", "date"]],
nowcoder[["user_id", "datenew"]],
left_on=["user_id", "date"],
right_on=["user_id", "datenew"],
)
# 次日留存
cnt = nowcoder_1.shape[0] / nowcoder.shape[0]
print(round(cnt, 2))
- DA31 牛客网每日正确与错误的答题次数
参考代码如下:
import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv')
nowcoder['year-month-day'] = pd.to_datetime(nowcoder.date).dt.date ## pd.to_datetime()
a = nowcoder.groupby(["result","year-month-day"])
print(a.user_id.size())
- DA32 牛客网答题正误总数
import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv')
a = nowcoder.groupby("result")
print(a.size())
也可参考代码如下:
import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv')
n=nowcoder.groupby('result')['result'].count()
print(n)
- DA33 牛客网连续练习题目3天及以上的用户
这题无从下手,看下大佬的解答:
两个要点:
1. 先去掉date的时间,再转为日期格式;
2. 对user_id和答题日期去重。
import pandas as pd
from datetime import timedelta
nowcoder = pd.read_csv('nowcoder.csv')
nowcoder['date'] = pd.to_datetime(nowcoder['date'].str.split(' ', expand=True).iloc[:,0]) # 去掉时间,然后将字符串转为日期格式
df = nowcoder[nowcoder['date'].dt.strftime("%Y-%m") == '2021-12'][['user_id','date']].drop_duplicates() # 筛选12月的数据,只取user_id和答题日期,并去重
df['rk'] = pd.to_timedelta(df.groupby(['user_id'])['date'].rank(),unit='d') # 根据user_id分组,并根据答题日期date排序;将排序转为日期差rk,以天为单位
df['diff'] = df['date']-df['rk'] # 答题日期减去日期差rk,得到diff;同一个用户同一次连续答题,会有一样的diff值
df1 = df.groupby(['user_id','diff']).count() # 得到每个用户每次连续答题的天数
df2 = df1.groupby('user_id')['rk'].max() # 取用户最大连续答题天数
print(df2[df2>=3])
- DA34 牛客网不同毕业年份的大佬
参考代码:
import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
a = Nowcoder.groupby("Graduate_year").Achievement_value.max()
print(a)
- DA35 不同等级用户语言使用情况
参考答案如下:
import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
a = Nowcoder.groupby(["Level","Language"])
print(a.Name.count())
- DA36 总人数超过5的等级
import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
a = Nowcoder.groupby('Level').Nowcoder_ID.count()
print(a >5)