Leo的假期学习记录python大数据入门篇(3)

啊啊啊啊,本来想着一口气结束的,然后发现13分钟的mooc花了40多分钟才解决完,,整个人都不好了

'''
    案例一:电影评分数据集的分析     https://grouplens.org/datasets/movielens/可以到这个网站里面搞到关于电影的数据,
    仅仅需要三个数据:u.data(评分数据)/u.item(电影数据)/u.user(观众记录)
    #这里先保存下E:\\OneDrive\\桌面\\ml-100k\\ml-100k
'''
import pandas as pd

pd.set_option('display.max_rows', None)  # 显示所有数据,不加省略,挺有用的
unames = ['uid', 'age', 'gender', 'occupation', 'zip']
# ''里面的是文件路径,sep表达的是分隔符(在读取的时候以这个符号分割,)header表达的是行标题,最后一个是映射方式,按照上面定义的进行表格的自动化映射
users = pd.read_table('E:\\OneDrive\\桌面\\ml-100k\\ml-100k\\u.user', sep='|', header=None, names=unames)
# 取样,读取前五个记录
# print(users.head(5))
# 也可以切片
# print(user[:5])

# 接下来读取评分数据
rnames = ['uid', 'mid', 'rating', 'timestamp']
ratings = pd.read_table('E:\\OneDrive\\桌面\\ml-100k\\ml-100k\\u.data', sep='\t', header=None, names=rnames)
# 这里可能是版本问题,必须要加left_on,right_on
frame = pd.merge(ratings, users, left_on='uid', right_on='uid')
'''
print(frame['rating'].groupby(frame['gender']).mean())
'''
# 下面是按年龄和性别分类计算它们的评分平均数(可以看一个人评判是否严格)
# print(frame['rating'].groupby([frame['age'].apply(round, args=[-1]),frame['gender']]).mean())

# 添加电影本身的表格
mnames = ['mid', 'title', 'date1', 'date2', 'url', 'unknown', 'Action', 'Adventure',
          'Animation', 'Children', 'Comedy', 'Crime', 'Documentary', 'Drama',
          'Fantasy', 'File-Noir', 'Horror', 'Musical', 'Mystery',
          'Romance', 'Sci-Fi', 'Thiller', 'War', 'Western']
movies = pd.read_table('E:\\OneDrive\\桌面\\ml-100k\\ml-100k\\u.item', sep='|', header=None, names=mnames,
                       encoding='ISO-8859-1')
# print(movies.head(5))
frame1 = pd.merge(frame, movies)
# print(frame1)
# 下面开始整体分析电影评分
# 这里做的时候又犯了个错,好在没花多少时间就找出来了,实在这个正下方,我写的frame,而不是frame1,而我这里用的数据是frame1里面的所以报错
# print(frame1['rating'].groupby([frame1['gender'],frame1['title']]).mean().sort_values(ascending=False))#Fals是倒序输出

# 调用agg函数(隶属于dF库)通过列表显示多个聚合函数

# 这里做了三个小实验,一个是吧groupby()里面的[]去掉了,然后报错,第二个实验室调换了里面的两个参数的位置,发现表格也会因此改变顺序,可以知道,
# 不同的顺序会显示不同的表格风格,另外,把排序的[]去掉了,只留一个False,也是可以的
# print(frame1['rating'].groupby([frame1['gender'], frame1['title']]).agg(['mean', 'count']).sort_values(
#    by=['count', 'mean'], ascending=[False, False]))#下面进行改进,因为这样的排序是先排人数,在排分,不能够完好地表达分值的排名
# 添加筛选条件进行筛选
frame2 = frame1['rating'].groupby([frame1['gender'], frame1['title']]).agg(['mean', 'count'])
# print(frame2[frame2['count'] >100].sort_values(by='mean',ascending=False))#下面还有可视化界面呈现
# print(frame1.pivot_table('rating',index='title',columns='gender',aggfunc='mean')#透视图,可以理解为多维矩阵,可以吧index理解为列,columns理解为行,aggfinc是专门用在又是图里的聚合函数
#     .sort_values(by='F',ascending=False))#按照女性的标准排序
# 还是得筛选出有效数据
#ratings_by_title = frame1.groupby('title').size()  # size()是返回每个电影评价的个数,loc是一个选择查询
#print(frame1.pivot_table('rating', index='title', columns='gender', aggfunc='mean').loc[
 #         ratings_by_title.index[ratings_by_title > 100]].
  #        sort_values(by='F',ascending=False))
#分析哪些电影产生了大的分歧,显示评分差异
frame3 = frame1.pivot_table('rating', index='title', columns='gender', aggfunc='mean')
frame3['diff'] = frame3['M']-frame3['F']#将后面的().apply(abs),使用绝对值
print(frame3.sort_values(by='diff',ascending=True))

明天吧,
开始python数据子查询,
java(得重学,上次考C因为选择题二级没过,这次尝试java二级,特地花了45买了系统和书),
还有IOT的开始(笑,根本不会),都是自己填的坑啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值