【Nowcoder牛客刷题记录】——Python数据分析(二)

简介: 【Nowcoder牛客刷题记录】——Python数据分析

五、数据清洗


DA24 去掉信息不全的用户

121430a1cf0b495b8da7a37f769ca8b0.png

dropna()用法:


DataFrme.dropna(axis=0,how=’any’,thresh=None,subset=None,inplace=False)

参数:

axis: 默认axis=0。0为按行删除,1为按列删除

how: 默认 ‘any’。 ‘any’指带缺失值的所有行/列; 'all’指清除一整行/列都是缺失值的行/列

thresh: int,保留含有int个非nan值的行

subset: 删除特定列中包含缺失值的行或列


inplace: 默认False,即筛选后的数据存为副本,True表示直接在原数据上更改。


importpandasaspdNowcoder=pd.read_csv('Nowcoder.csv', sep=',', dtype=object)
pd.set_option('display.width', 300)  #设置字符显示宽度pd.set_option('display.max_rows', None)  #设置显示最大行pd.set_option('display.max_columns', None)
print(Nowcoder.dropna())

DA25 修补缺失的用户数据

0317bddfc57b4780ae42ecbf5c0b4a0b.png

importpandasaspddf=pd.read_csv('Nowcoder.csv', sep=',')
pd.set_option('display.width', 300)  #设置字符显示宽度pd.set_option('display.max_rows', None)  #设置显示最大行pd.set_option('display.max_columns', None)
df['Graduate_year'].fillna(df['Graduate_year'].max(),inplace=True)
df['Language'].fillna('Python',inplace=True)
df['Achievement_value'].fillna(int(df['Achievement_value'].mean()),inplace=True)
print(df)

DA26 解决牛客网用户重复的数据

2eb20a35df114c15b49022f276f0be29.png


importpandasaspddf=pd.read_csv('Nowcoder.csv', sep=',')
pd.set_option('display.width', 300)  #设置字符显示宽度pd.set_option('display.max_rows', None)  #设置显示最大行pd.set_option('display.max_columns', None)
print(df.duplicated())
print(df.drop_duplicates())

DA27 统一最后刷题日期的格式

bb4cf3535a00450a8c9baed9d37b2ebf.png


importpandasaspddf=pd.read_csv('Nowcoder.csv',sep=',',dtype=object)
#df['Last_submission_time'] =pd.to_datetime(df["Last_submission_time"],format="%Y-%m-%d")
#很神奇df['Last_submission_time'] =pd.to_datetime("2022-01-01")
print(df[['Nowcoder_ID','Level','Last_submission_time']])


六、Json处理


DA28 将用户的json文件转换为表格形式

现有一个Nowcoder.json文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔):


Nowcoder_ID:用户ID


Level:等级


Achievement_value:成就值


Graduate_year:毕业年份


Language:常用语言


如果你读入了这个json文件,能将其转换为pandas的DataFrame格式吗?

c57912e9287f44e48384763c876cdbd5.png


importpandasaspdimportjsonpd.set_option('display.width', 300)  #设置字符显示宽度pd.set_option('display.max_rows', None)  #设置显示最大行pd.set_option('display.max_columns', None)
withopen('Nowcoder.json', 'r') asf:
data=json.loads(f.read())
print(pd.DataFrame(data))
df=pd.read_json("Nowcoder.json")
print(df)


七、分组聚合


DA29 牛客网的每日练题量

061f39485b5644b395260df9501da7c0.png


importpandasaspdimportdatetimeasdtdf=pd.read_csv("nowcoder.csv")
#将date转换为日期格式df["date"] =pd.to_datetime(df["date"]).dt.date#筛选统计区间2021年12月data=df[(df["date"] >=dt.date(2021, 12, 1)) & (df["date"] <=dt.date(2021, 12, 31))]
#使用groupby按照date分组,聚合函数count统计题目数量daily_num=data.groupby("date")["question_id"].count()
print(daily_num)

DA30 牛客网用户练习的平均次日留存率

b3c9bc7b336f4c8b9057efc18d493ba0.png


这题有点难 没看懂


importpandasaspdfromdatetimeimporttimedeltanowcoder=pd.read_csv('nowcoder.csv')
#总数total_id=nowcoder['user_id'].count()
b=pd.merge(nowcoder,nowcoder,on='user_id')
#merge之后的列名:user_id,question_id_x,result_x,date_x,question_id_y,result_y,date_y#是自动区分xy的b['date_x'] =pd.to_datetime(b.date_x).dt.date#to_datetime默认有时间精度,.dt.date去掉分钟,得到日期列表2021-12-1b['date_y'] =pd.to_datetime(b.date_y).dt.dateb['differ'] =b.date_y-b.date_xsum_diff=b[b.differ=='1 days'].differ.count()
res=round(sum_diff/total_id,2)
print(res)


DA31 牛客网每日正确与错误的答题次数

现有牛客网12月每天练习题目的数据集nowcoder.csv。包含如下字段(字段之间用逗号分隔):

  • user_id:用户id
  • question_id:问题编号
  • result:运行结果
  • date:练习日期

请你统计2021年12月答题结果正确和错误的前提下每天的答题次数。

bab58ace79ea4ad4ae8ecaf9abc9beeb.png


importpandasaspdnowcoder=pd.read_csv('nowcoder.csv')
nowcoder['year-month-day'] =pd.to_datetime(nowcoder['date']).dt.dateprint(nowcoder.groupby(['result','year-month-day'])['question_id'].count())

DA32 牛客网答题正误总数

f2ccb2dc98b64b32a0dd7e8df446c06a.png


//

importpandasaspdnowcoder=pd.read_csv('nowcoder.csv')
a=nowcoder.groupby("result")
print(a.size())

DA33 牛客网连续练习题目3天及以上的用户


862340e650004050bd6b9cb5c04b2dae.png

这题有点难:


大佬的解答,虽然没通过,但是非常细。



importpandasaspdfromdatetimeimporttimedeltanowcoder=pd.read_csv("nowcoder.csv")
#-----N日留存#格式化日期年月nowcoder["date1"] =pd.to_datetime(nowcoder["date"]).dt.strftime("%Y-%m")
#格式化日期年月日nowcoder["date2"] =pd.to_datetime(nowcoder["date"]).dt.strftime("%Y%m%d")
#将年月日换成整型,便于运算nowcoder["date2"] =nowcoder["date2"].astype("int")
#将日期加+1,便于后期的连续日期判断nowcoder["date3"] =nowcoder["date2"].apply(lambdax: x+1)
#按要求筛选出满足年月的数据nowcoder_1=nowcoder[nowcoder["date1"] =="2021-12"]
#获取排名-1,最小日期的排名应该是0nowcoder_1["rk"] = (
nowcoder_1.groupby(by="user_id")
    .date2.rank(axis=1, ascending=True, method="dense")
    .apply(lambdax: x-1)
)
#获取满足连续日数据并去重nowcoder_2=pd.merge(
nowcoder_1[["user_id", "date", "date2", "rk"]],
nowcoder_1[["user_id", "date3"]],
left_on=["user_id", "date2"],
right_on=["user_id", "date3"],
).drop_duplicates()
#连续日期减去排名等于最小日期nowcoder_2["date4"] = (
nowcoder_2[["date3", "rk"]].apply(lambdax: x[0] -x[1], axis=1).astype("int")
)
#得出次数+1DAU= (
nowcoder_2[["user_id", "date4"]]
    .groupby(by="user_id")["user_id"]
    .count()
    .apply(lambdax: x+1)
)
print(DAU[DAU>=3])


'''代码已通过,两个要点:1.先去掉date的时间,再转为日期格式;2.对user_id和答题日期去重。'''importpandasaspdfromdatetimeimporttimedeltanowcoder=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 牛客网不同毕业年份的大佬

c214196e42604e08b2ccdec934e8537c.png


easy


importpandasaspddf=pd.read_csv("Nowcoder.csv", sep=",")
print(df.groupby(["Graduate_year"]).Achievement_value.max())

DA35 不同等级用户语言使用情况


0817d3779fe640af81f0d8d5df8738c6.png

easy


importpandasaspdNowcoder=pd.read_csv('Nowcoder.csv', sep=',')
print(Nowcoder.groupby(['Level','Language']).Nowcoder_ID.count())

DA36 总人数超过5的等级

ce4d91cd93b54b01978c1e9201f94e31.png


importpandasaspddf=pd.read_csv('Nowcoder.csv', sep=',')
print(df.groupby(['Level']).Nowcoder_ID.count()>5)


八、合并


DA37 统计运动会项目报名人数

31c02bc908804463a6fe3fb52ea25074.png


ff671e772c3f435a98e31c8f9d4990b6.png

db8617bd35044dab860280eff52154a9.png



importpandasaspd#员工signup=pd.read_csv('signup.csv')
#项目items=pd.read_csv('items.csv')
#合并数据data=pd.merge(items, signup, on='item_id', how='inner')
cnt=data.groupby(by='item_name')['item_name'].count()
print(cnt)

DA38 统计运动会项目报名人数(二)

97f05d6015e548f8b94b571e6e8c8d37.png


importpandasaspdsignup=pd.read_csv('signup.csv')
items=pd.read_csv('items.csv')
#合并data=pd.merge(items, signup, on='item_id', how='left')
cnt=data.groupby(by='item_name')['employee_id'].count()
#print(cnt)

DA39 多报名表的运动项目人数统计

af3c9985211d4c6eb33d274ecb19c425.png

1187b007b4d0447d98d457244bbb4479.png


importpandasaspdsignup=pd.read_csv("signup.csv")
signup1=pd.read_csv("signup1.csv")
items=pd.read_csv("items.csv")
#级联员工表signup2=pd.concat([signup, signup1], axis=0)
#合并data=pd.merge(items, signup2, on="item_id", how="inner")
cnt=data.groupby(by="item_name")["item_name"].count()
print(cnt)

DA40 统计职能部分运动会某项目的报名信息

0bd8a59af2a746d9951cb064f2c3d2c0.png

importpandasaspditems=pd.read_csv("items.csv")
signup=pd.read_csv("signup.csv")
#合并data=pd.merge(items, signup)
result= (
data.query("item_name == 'javelin'&department == 'functional'")
    .loc[:, ["employee_id", "name", "sex"]]
    .reset_index(drop=True)
)
#reset_index是重置索引,原来的索引默认作为数据列保留,若不想要保留则设置参数drop=Trueprint(result)


DA41 运动会各项目报名透视表

请你输出报名的各个项目情况(不包含没人报名的项目)对应的透视表。

204592172fa944919f584cc025d59e10.png

56487cfa29f34a868a90d20c21afdc73.png



importpandasaspdsignup=pd.read_csv("signup.csv")
items=pd.read_csv("items.csv")
data=pd.merge(signup, items, on="item_id", how="inner")
data1=data.pivot_table(index=["sex", "department"], 
columns="item_name", 
aggfunc={'employee_id':'size'},  
fill_value=0)
print(data1)

DA42 合并用户信息表与用户活跃表

e6888312e63c46edb36e3561d3e61633.png


importpandasaspdpd.set_option('display.width', 300)  #设置字符显示宽度pd.set_option('display.max_rows', None)  #设置显示最大行pd.set_option('display.max_columns', None)
Nowcoder1=pd.read_csv('Nowcoder1.csv', sep=',')
Nowcoder2=pd.read_csv('Nowcoder2.csv', sep=',')
print(pd.merge(Nowcoder1,Nowcoder2,on='Nowcoder_ID'))

DA43 两份用户信息表格中的查找

16f1ab14c2a64c19946a819cccbc2316.png


importpandasaspdN1=pd.read_csv('Nowcoder1.csv')
N2=pd.read_csv('Nowcoder2.csv')
#设置显示最大行、列和宽度pd.set_option('display.width',300)
pd.set_option('display.max_rows',None)
pd.set_option('display.max_columns',None)
#合并data=pd.merge(N1,N2,how='outer')
result=data.loc[:,['Name','Num_of_exercise','Number_of_submissions']]
print(result)


九、排序


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

d793b76f23234bd2bd0e3065fd49c44f.png


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

c53d9731e0c445fd9bc36c8c4cde90d8.png


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

2bec3acb5ca3426281ac4fef23d5082b.png


importpandasaspdpd.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)


十、函数


DA46 某店铺用户消费特征评分

fd03ebb83d304ce18f6e1a50dab18fb1.png


importpandasaspdsales=pd.read_csv('sales.csv')
#按照结果要求转换类型sales[['monetary']] =sales[['monetary']].astype('float32')
#求百分位des=sales[['recency', 'frequency', 'monetary']].describe().loc['25%':'75%']
#计算RFMsales['R_Quartile'] =sales['recency'].apply(lambdax: 4ifx<=des.iloc[0,0] else (3ifx<=des.iloc[1,0] else (2ifx<=des.iloc[2,0] else1)))
sales['F_Quartile'] =sales['frequency'].apply(lambdax: 1ifx<=des.iloc[0,1] else (2ifx<=des.iloc[1,1] else (3ifx<=des.iloc[2,1] else4)))
sales['M_Quartile'] =sales['monetary'].apply(lambdax: 1ifx<=des.iloc[0,2] else (2ifx<=des.iloc[1,2] else (3ifx<=des.iloc[2,2] else4)))
print(sales.head())

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

ed386ca2fc5b47ff96c5530b47fedbb9.png


176e81816d19478f95887266a46a0c01.png


importpandasaspdsales=pd.read_csv("sales.csv")
#按照结果要求转换类型sales[["monetary"]] =sales[["monetary"]].astype("float32")
#求百分位des=sales[["recency", "frequency", "monetary"]].describe().loc["25%":"75%"]
#计算RFMR= (
sales["recency"]
    .apply(
lambdax: 4ifx<=des.iloc[0, 0]
目录
相关文章
|
2天前
|
数据采集 数据可视化 数据挖掘
如何利用Python中的Pandas库进行数据分析和可视化
Python的Pandas库是一种功能强大的工具,可以用于数据分析和处理。本文将介绍如何使用Pandas库进行数据分析和可视化,包括数据导入、清洗、转换以及基本的统计分析和图表绘制。通过学习本文,读者将能够掌握利用Python中的Pandas库进行高效数据处理和可视化的技能。
|
4天前
|
机器学习/深度学习 数据可视化 算法
使用Python进行数据分析的5个必备技巧
【5月更文挑战第9天】本文介绍了Python数据分析的五个关键技巧:1) 使用Pandas进行数据处理和清洗;2) 利用NumPy进行高效数值计算;3) 通过Matplotlib和Seaborn创建可视化图表;4) 使用Scikit-learn执行机器学习任务;5) 在Jupyter Notebook中进行交互式分析和文档分享。这些技巧能提升数据分析的效率和准确性。
|
5天前
|
数据采集 数据可视化 数据挖掘
Python 与 PySpark数据分析实战指南:解锁数据洞见
Python 与 PySpark数据分析实战指南:解锁数据洞见
|
7天前
|
机器学习/深度学习 运维 算法
Python数据分析中的异常检测与处理方法
在Python数据分析中,异常数据是一个常见但又十分重要的问题。本文将介绍几种常见的异常检测与处理方法,包括基于统计学方法、机器学习方法以及深度学习方法。通过对异常数据的有效检测与处理,可以提高数据分析的准确性和可信度,从而更好地指导业务决策。
|
7天前
|
数据采集 数据可视化 数据挖掘
Python在数据分析中的强大应用
【5月更文挑战第5天】Python在数据驱动时代成为数据分析师首选工具,得益于其丰富的数据科学库(如NumPy、Pandas、Matplotlib、Seaborn和SciPy)。这些库支持数据清洗、探索、建模和可视化。Python在数据清洗、文本分析、Web数据抓取和大数据处理等方面有广泛应用,并因其易学性、强大社区和广泛适用性而备受青睐。未来,Python在数据分析领域的角色将更加重要。
|
12天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】金融数据分析中的机器学习应用
【4月更文挑战第30天】本文探讨了机器学习在金融数据分析中的应用,如股价预测、信用评分、欺诈检测、算法交易和风险管理,并以Python为例展示了如何进行股价预测。通过使用机器学习模型,金融机构能更准确地评估风险、识别欺诈行为并优化交易策略。Python结合scikit-learn库简化了数据分析过程,助力金融从业者提高决策效率。随着技术发展,机器学习在金融领域的影响力将持续增强。
|
13天前
|
数据采集 SQL 数据挖掘
Python数据分析中的Pandas库应用指南
在数据科学和分析领域,Python语言已经成为了一种非常流行的工具。本文将介绍Python中的Pandas库,该库提供了强大的数据结构和数据分析工具,使得数据处理变得更加简单高效。通过详细的示例和应用指南,读者将了解到如何使用Pandas库进行数据加载、清洗、转换和分析,从而提升数据处理的效率和准确性。
|
20天前
|
机器学习/深度学习 数据可视化 数据挖掘
Python跳水:探索数据分析的深渊
Python跳水:探索数据分析的深渊
22 0
|
14天前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
|
13天前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据分析领域的应用研究
Python在数据分析领域的应用研究
24 0