MovieLens数据集1M .源代码解析

# -*- coding: utf-8 -*-
"""
Created on Fri May 20 18:00:43 2022

@author: lenovo
"""

import pandas as pd

unames=['user_id','gender','age','occupation','zip']

users=pd.read_table('D:\OneDrive\桌面\ml-1m/users.dat',sep='::',header=None,names=unames,engine='python')

rnames=['user_id','movie_id','rating','timestamp']

ratings=pd.read_table('D:\OneDrive\桌面\ml-1m/ratings.dat',sep='::',header=None,names=rnames,engine='python')

mnames=['movie_id','title','genres']

'''
注:
<header=None> 
pandas.read_csv(“data.csv”)默认情况下,会把数据内容的第一行默认为字段名标题。
为了解决这个问题,我们添加“header=None”,告诉函数,我们读取的原始文件数据没有列索引,因此,read_csv为自动加上列索引.

pd.read_table()对应txt文件
pd.read_csv()对应csv文件

<sep='::'>sep参数代表分隔符,它与print()函数一起使用以指定参数之间的分隔符。

<engine=python>engine参数用于指定pandas读取文件时的解析引擎,有C和Python两种,C比较块,而Python特性比较多, 你sep使用了多个字符, C引擎是不支持的,所以会指定Python

'''

movies=pd.read_table('D:\OneDrive\桌面\ml-1m/movies.dat',sep='::',header=None,names=mnames,engine='python', encoding='ISO-8859-1')


'''pandas.read_table将各个表分别读到一个pandas DataFrame对象中'''
'''
print(users[:5])
print(ratings[:5])
print(movies[:1])
print(ratings)
'''

'''pd.merge合并 '''
data=pd.merge(pd.merge(ratings,users),movies)
#print(type(data))

'''
注:
<pd.merge()>
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)
括号里的均为可执行参数

left: 拼接的左侧DataFrame对象
right: 拼接的右侧DataFrame对象
on: 要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。
left_on:左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
right_on: 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
left_index: 如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。 对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。
right_index: 与left_index功能相似。
sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能
'''


'''data.pivot_table方法 生成一个DataFrame'''

mean_ratings=data.pivot_table('rating',index='title',columns='genres',aggfunc='mean')
print(mean_ratings[:5])

'''
aggfunc参数可以设置我们对数据聚合时进行的函数操作。当我们未设置aggfunc时,它默认aggfunc='mean'计算均值。
'''

ratings_by_title=data.groupby('title').size()
print(ratings_by_title[:10])
'''
groupby函数主要的作用是进行数据的分组以及分组后地组内运算
'''

active_titles=ratings_by_title.index[ratings_by_title>=250]
print(active_titles)

'''ix换位loc'''
mean_ratings=mean_ratings.loc[active_titles]
print(mean_ratings)

'''对F列降序排列'''
'''sort_index()换为sort_values()'''
top_female_ratings=mean_ratings.sort_values(by='title',ascending=False)
print(top_female_ratings[:10])

'''计算评分分歧'''
mean_ratings['diff']=mean_ratings['M']-mean_ratings['F']
sorted_by_diff=mean_ratings.sort_values(by='diff')
print(sorted_by_diff[:15])
print(sorted_by_diff[::-1][:15])

'''根据电影名称分组的得分数据的标准差'''
rating_std_by_title=data.groupby('title')['rating'].std()

'''根据active_titles进行过滤'''
rating_std_by_title=rating_std_by_title.loc[active_titles]

'''根据值对Series进行降序排列'''
'''Python3.6之后的版本已经没有order属性了,尝试使用sort_values()方法就好了。'''
print(rating_std_by_title.sort_values(ascending=False)[:10])



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值