用Python计算MovieLens 100k数据集中男性女性用户评分的标准差
来源:互联网 发布:台湾反攻大陆 知乎 编辑:程序博客网 时间:2024/04/28 10:19
这是《用Python玩转数据》4.2的编程练习。
要求:
计算MovieLens 100k数据集中男性女性用户评分的标准差并输出。
数据集下载
其中u.data 表示100k条评分记录,每一列的数值含义是:
user id | item id | rating | timestamp
u.user表示用户的信息,每一列的数值含义是:
user id | age | gender | occupation | zip code
u.item文件表示电影的相关信息,每一列的数值含义是:
movie id | movie title | release date | video release date |IMDb URL | unknown | Action | Adventure | Animation | Children’s | Comedy | Crime | Documentary | Drama | Fantasy |Film-Noir | Horror | Musical | Mystery | Romance | Sci-Fi |Thriller | War | Western |
最后的输出应该是这样的:
genderF *.*(只是示意)M *.*(只是示意)Name: rating, dtype: float64
编程思路
(话说,这里是不是应该制作程序设计逻辑图?这里有基本功的教程:,在线画图工具processon,其实gliffy更好,但是速度奇慢无比,估计得翻啊墙。不过这个程序就是简单的流水线,不涉及条件判断,所以就先不画了):
- 使用
pandas.read_table()
读出u.data和u.user,生成2个DataFrame read_table API Reference - 使用
pandas.merge()
把2个df作多对一的合并,把’user id’,’rating’,’gender’合进一个DataFrame。实际上只需要用这几个列,其它列都不需要。u.item也不需要 merge API Reference - 使用
pandas.pivot_table()
生成数据透视表,同时集中计算每个用户的评分均值。pivot_table API Reference Pandas透视表(pivot_table)详解 - 使用
std()
计算Female和Male的评分标准差 print
输出
代码:
import pandas as pdimport numpy as npdata_fields = ['user id','item id', 'rating', 'timestamp']user_fields = ['user id', 'age', 'gender', 'occupation', 'zip code']#默认names = None,此时pd.read_table会拿第1行的value当作列名data_df = pd.read_table(r"E:\ml-100k\u.data", names = data_fields)#默认sep = '\t',拿tab作为分列符user_df = pd.read_table(r"E:\ml-100k\u.user", sep = "|", names = user_fields)#生成2个新的DataFrame,去掉不需要的列data1_df = pd.DataFrame([])data1_df['user id'] = data_df['user id']data1_df['rating'] = data_df['rating']user1_df = pd.DataFrame([])user1_df['user id'] = user_df['user id']user1_df['gender'] = user_df['gender']#合并2个DataFrame, 默认how = 'inner',即新的DF仅包含2个DF交集的Keyrating_df = pd.merge(data1_df, user1_df)#按性别生成数据透视表, 默认aggfunc = 'mean', 即values是每个用户为N个电影打分的平均值###注意:pivot_table的类型不是DataFrame, 而是Series, 所以要进行转换gender_s = pd.pivot_table(rating_df, index = ['gender', 'user id'], values = 'rating')gender_df = pd.DataFrame(gender_s)#对DataFrame进行筛选,分别生成女性和男性的DataFrameFemale_df = gender_df.query("gender == ['F']")Male_df = gender_df.query("gender == ['M']")#按性别计算评分标准差Female_std = np.std(Female_df)Male_std = np.std(Male_df)#格式化输出print 'Gender\n', 'F\t%.4f' % Female_std, '\nM\t%.4f' % Male_std
程序输出结果:
GenderF 0.4804 M 0.4298
难点就是pivot_table的结果是个序列Series,而不是DataFrame。
0 0
- 用Python计算MovieLens 100k数据集中男性女性用户评分的标准差
- 【分享】MovieLens最新十万级的用户电影评分数据
- 数据标准差的计算
- MovieLens 《用Python进行数据分析》
- Python脚本进行用户信用评分体系计算的案例
- 计算数据的平均值、方差和标准差
- 12位最受女性青睐的男性创业者 ?
- Spark中组件Mllib的学习10之修改MovieLens来对movieLen中的100k数据进行预测
- 在MovieLens数据集上用SVD进行评分预测
- AMOS分析技术:模型的群组分析;AMOS如何对同一个模型分别用男性数据和女性数据拟合?
- 推荐系统-基于用户的最近邻协同过滤算法(MovieLens数据集)
- 推荐系统-基于用户的最近邻协同过滤算法(MovieLens数据集)
- 计算数据在结果集中的行号
- 样本标准差的简单计算
- 女性的成功会伤害男性的自尊
- 从事什么职业的男性最受女性欢迎?
- 健康水平——检测男性、女性的健康水平
- 王者荣耀的女性玩家数量超过男性
- MySQL Study之--MySQL查询缓存
- Wix学习整理(1)——快速入门HelloWorld
- Calling an Oracle function from SQL Server Linked Server
- 如何在Excel里将两个不同横坐标的图做在一张图上
- Android中常见的热门标签的流式布局的实现
- 用Python计算MovieLens 100k数据集中男性女性用户评分的标准差
- HDU 1978How many ways dp+记忆化搜索。。
- 贝叶斯
- android toast 时间
- Web前端与后端的区别
- Universal ImageLoader 在ListView刷新时会闪动
- springmvc+mybatis+spring 整合
- XML文件中的shape节点详解
- Android等宽字体