1、数据分析实例:分析movielens电影数据

import pandas as pd
unames=['user_id','gender','age','occupation','zip']
users=pd.read_table('ml_lm/users.dat',sep='::',header=None,name=unames)
print len(users)
-- 前五条记录
users.head(5)rating_names=['user_id','movie_id','rating','timestamp']
ratings=pd.read_table('ml_lm/ratings.dat',sep='::',header=None,names=rating_names)
movie_names=['movie_id','title','genres']
movies=pd.read_table('ml_lm/movie.dat',sep='::',header=None,names=movie_names)
print len(ratings)
ratings.head(5)
print len(movies)
movies.head(5)-- 合并以上三个表
data=pd.merge(pd.merge(users,ratings),movies)
print len(data)
data.head(10)
data(data.user_id==1)ratings_by_gender=pd.pivot_table(values='rating',index='title',columns='gender',Abgrund='mean')
ratings_by_gender.head(10)-- 找男女之间分歧最大的电影
ratings_by_gender('diff')=ratings_by_gender.F-ratings_by_gender.M
ratings_by_gender.head(10)
ratings_by_gender.sort_values(by='diff',ascending=True).head(10)
ratings_by_gender.sort_values(by='diff',ascending=False).head(10)ratings_by_title=data.groupby('title').size()
ratings_by_title.head(10)
-- 最热门的电影
ratings_by_title.sort_values(ascending=False).head(10)-- 平均评分
mean_ratings=data.pivot_table(values='rating',index='title',aggfunc='mean')
mean_ratings.head(10)
mean_ratings.sort_values(ascending=False).head(20)-- 前十大热门电影
top_10_hot=ratings_by_title.sort_values(ascending=False).head(10)
top_10_hot
mean_ratings(top_10_hot.index)-- 前20大高分电影热度
top_20_score=mean_ratings.sort_values(ascending=False).head(20)
top_20_score
ratings_by_title[top_20_score.index]-- 热度高 + 看的人多
hot_movies=ratings_by_title(ratings_by_title>1000)
print len(hot_movie)
hot_movies.head(10)
hot_movies_rating=mean_ratings(hot_movies.index)
top_10_good_movies=hot_movies_rating.sort_values(ascending=False).head(10)

2、pandas核心数据结构
● Series
是一维带标签的数组,数组里可以放任意的数据(整数,浮点数,字符串,python object)。
最基本的创建函数:s=pd.Series(data,index-index)
其中index是一个列表,用来作为数据的标签。
data可以是不同的数据类型:python字典,ndarray对象,一个标量值

import pandas as pd
import numpy as np
s=od.Series(np.random.randn(5),index=['a','b','c','d','e'])
s
s.index
s=pd.Series(np.random.randn(5))
s
d={'a':0. 'b':1.,'d':3}
s=Series(d,index=list('abcd'))
s
Series对象的性质:类ndarray对象,类dict对象,标签对齐操作
-- ndarray对象
s[0]
s[:3]
s[2:5]
s[[1,3,4]]
np.sin(s)
np.exp(s)-- dict对象
s['a']
s['b']=3
s['g']=100
s['f']  不存在会报错
print s.get('f')    none
print s.get('f',0)    0-- 标签对齐
s1=pd.Series(np.random.randn(3),index=['a','c','e'])
s2=pd.Series(np.random.randn(3),index=['a','c','e'])
print '{0}\n\n{1}'.format(s1,s2)
s1+s2

● DataFrame
是二维带行标签和列标签的数组。可以把DataFrame想成一个excel表格或一个SQL数据库表格,还可以想象成一个Series对象字典。是pandas里最常用的数据结构。
创建基本函数:df=pd.DataFrame(data,index=index,columns=columns)
其中index是行标签,columns是列标签,data可以是以下数据:由一维numpy数组,list,series构成的字典;二维numpy数组;一个series;另外的dataframe对象。

d={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],Index=['a','b','c','d'])}
df=pd.DataFrame(d)
dfdf=pd.DataFrame(d,index=['d','b','a'])
dfdf=pd.DataFrame(d,columns=['two','three'])
dfd={'one':[1,2,3,4],'two':[21,22,23,24]}
df=pd.DataFrame(d)
dfdata=[(1,2.2,'Hello'),(2,3.,"World")]
df=pd.DataFrame(data,index=['one','two'],columns=list('ABCBCA))
dfdata=[{'a':1,'b':2},{'a':5,'b':10,'c':20})
df=pd.DataFrame(data)
dfdata=[{'a':1,'b':2},{'a':5,'b':10,'c':20})
df=pd.DataFrame(data,index=['A','B'])
df data=[{'a':1,'b':2},{'a':5,'b':10,'c':20})
df=pd.DataFrame(data,index=['A','B'],columns=['a','b','e'])
dfd={('a','b'):{('A','B'):1,('A','C'):2},('a','a'):{('A','C'):3,('A','B'):4},('a','c'):{('A','B'):5,('A','C'):6},('b','a'):{('A','C'):7,('A','B'):8},('b','b'):{('A','D'):9,('A','B'):10}}
df=pd.DataFrame(d)
dfs=pd.Series(np.random.randn(5),index=['a','b','c','d','e'])
pd.DataFrame(s,columns=['A'],index=list('acd'))

特性
● 列选择/增加/删除
● 使用assign()方法来插入新列
● 索引和选择:
选择一列 -> df[col] -> Series
根据行标签选择一行 -> df.loc[label] -> Series
根据行位置选择一行 ->df.iloc[label] -> Series
选择多行 -> df[5:10] -> DataFrame
根据布尔向量选择多行 -> df[bool_vector] -> DataFrame
● 数据对齐
● 使用numpy函数

df['one']
df.loc[1]
df['three']=df['one']+df['two']
df
-- 删除一列
del df['three']
s=df.pop('four')
-- 添加一列
df['flag']=df['one']>0.2
df['five']=5
-- 插入一列
df.insert(1,'bar',df['one']+df['two'])
df
-- assign有复制的说法
df.assign(Ratio=df=['one']/df['two'])
df      (df没有改变)
df.assign(Ratio=lamda x: x.one-x.two)
df.assign(ABRatio=df.one /  df.two).assign(BarValue = lamda x: x.ABRatio * x.bar)df=pd.DataFrame(np.random.randint(1,10,(6,4)),index=list('abcde'),columns=list('ABCD')
df
-- 选择一列
df['A']
-- 选择一行
df.loc['a']
df.iloc[1]
df[1:4]
df.iloc[1:4]
df.A >= 4
df[df.A >= 4]df1=pd.DataFrame(np.random.randn(10,4),index=list('abcdefghij'),columns=['A','B','C','D']
df2=pd.DataFrame(np.random.randn(7,3),index=list('cdefghi'),columns=['A','B','C']
df1
df2
df1 + df2
df1 - df1.iloc[0]
np.exp(df2)
np.sin(df2)
df2.values
type(df2.values)
np.asarray(df2) == df2.values

● Panel
是三维带标签的数组。实际上,pandas的名称由来就是有panel演进的,即pan(el)-da(ta)-s。panel比较少用,但依然是最重要的基础数据结构之一。
items:坐标轴0,索引对应的元素是一个DataFrame
Major_axis:坐标轴1,DataFrame里的行标签
minor_axis:坐标轴2,DataFrame里的列标签

data={'Item1':pd.DataFrame(np.random.randn(4,3)),'Item2':pd.DataFrame(np.random.randn(4,2))}
pn =  pd.Panel(data)
pn
pn['Item2']
pn.items
pn.major_axis
pn.minor_axis
pn.major_xs(1)-- 将三维数据变成二维
pn.to_frame()     

D4 数据分析实例:分析movielens电影数据+pandas核心数据结构相关推荐

  1. 【机器学习-数据科学】第三节:数据分析实例 分析MovieLens电影数据

    数据分析实例 分析MovieLens电影数据 导入数据 数据合并 按性别查看各个电影的平均评分 活跃电影排行榜 电影投票数据 grouplens.org/datasets/movielens 把文件放 ...

  2. 【数据分析】什么是数据分析? 分析和管理数据以做出决策

    数据分析是一门专注于从数据中提取洞察力的学科,包括数据的分析.收集.组织和存储,以及用于执行此操作的工具和技术 数据分析定义 数据分析是一门专注于从数据中提取洞察力的学科.它包括数据分析和管理的过程. ...

  3. 用pandas分析百万电影数据

    用pandas分析电影数据 Lift is short, use Python. 用Python做数据分析,pandas是Python数据分析的重要包,其他重要的包:numpy.matplotlib ...

  4. python电影数据分析报告_Python数据分析实战:TMDB电影数据可视化

    一.数据预处理 本文将以项目实战的形式,对 TMDB电影数据进行数据分析与可视化实战,所使用的数据来源于 Kaggle,文末提供数据的下载方式. import json import pandas a ...

  5. pandas实例——MovieLens电影数据实战分析

    在上一篇文章中我介绍了pandas的基本用法,今天我就用pandas实战操作,大家可以一起感受一下数据分析是如何从一堆数字中找到有价值的信息的.下面我也附上了代码,我强烈推荐大家将数据下载下来,亲自去 ...

  6. 机器学习数据科学包(三)——Pandas实例:MovieLens电影数据分析

    电影数据分析 准备工作 从网站 grouplens.org/datasets/movielens 下载 MovieLens 1M Dataset 数据. 数据说明 参阅数据介绍文件 README.tx ...

  7. 人力资源数据分析 - case 分析拉钩数据分析师岗位

    一.背景 本人5年工作经验,服务同一家公司,也一直在与数据打交道.曾在XX事业部-业务策略中心带数据小组,进行扩店策略.门店运营和经营指标体系建设.目前在我司研究院做BI.数据挖掘.近期正在寻求改变, ...

  8. Python pandas 核心数据结构

    一.用字典表创建Series数据一维 d = {'a': 0, 'b': 1, 'd':3} s = pd.Series(d, index=list('abcd')) 特性: 可以进行索引 print ...

  9. 图像scale与相机参数_Camera图像处理原理及实例分析

    Camera图像处理原理及实例分析 做为拍照手机的核心模块之一,camera sensor 效果的调整,涉及到众多的参数,如果对 基本的光学原理及 sensor 软/硬件对图像处理的原理能有深入的理解 ...

  10. 一文读懂以太坊存储数据核心数据结构:MPT

    作者 | JouyPub 来源 | 简书 出品 | 区块链大本营 MPT (Merkle Patricia Tries) 是以太坊存储数据的核心数据结构,它是由 Merkle Tree 和 Patri ...

最新文章

  1. OpenJDK 编译-Linux环境
  2. HDU 3584 Cube (三维树状数组)
  3. Debian 系统初体验
  4. 全面解析多种区块链隐私保护解决方案
  5. idea-jvm参数设置(有注释)
  6. TOJ 3046: 招商银行网络系统
  7. python中编函数_在python中编写函数
  8. 无聊说说 strong VS weak
  9. MyBatis框架parameterType为哈希类型的别名映射和resultMap映射
  10. linux多进程spawn,【Linux Shell脚本编程】expect解决脚本交互 + Shell的多进程处理
  11. oracle 查询数据库表空间大小和剩余空间
  12. Linux 内核C -- 第01课,C 语言语法扩展
  13. 在python中print表示的数据类型是_在python中自己写的数据类型使用print无法输出每个元素...
  14. [POI2013]LUK-Triumphal arch
  15. 计算机安全审计技术工作总结,计算机安全审计技术研究
  16. 联想拯救者Legion Y7000 2020款(10代INTEL+GTX1650)安装ubuntu16.04(双系统)探索内核与显卡网卡驱动的关系
  17. 学习日记day31 平面设计 字体构图风格2
  18. 图表xAxis文字竖排显示
  19. win11更新启动后黑屏有鼠标(本人亲测有效)
  20. 《Git》版本管理工具的初识与入门

热门文章

  1. 爱剪辑手机版 v51.0 至尊内购专业破解版的视频剪辑软件
  2. 虚拟机安装win10 64/32bit系统
  3. 南大计算机专业考研2019分数,南京大学2019考研分数线公布
  4. 新建linux efi分区,EFI系统分区是什么?单独创建EFI分区的图文教程
  5. JDK 和 JRE 有什么区别?面试篇(第一天)
  6. 网站被国外IP攻击 禁止海外IP访问网站的解决办法
  7. Java编程学习指南(带学习经验)
  8. 大一计算机php认证考试,2017年计算机基础大一考试试题【附答案】.doc
  9. 批量解除文件锁定状态包含子文件夹
  10. 极光笔记|极光推送在APICloud平台的使用教程