每日牢骚:
既然数据一晚上都没搞下来,如果坚持下去既浪费时间,又破坏继续学的心情,得不偿失。
直接把视频的意思先看懂,然后先直接学下面的课了,别为了那一点一点知识把整个大数据的学习进度都破坏了。
————————————————————————————————————————
数据采集最后一部分内容是一个练习题。
这个csv数据它有16个字段的,里面有些字段可能没有值,我们的做法就是把这个巨无霸文件拆分成几个表。比如说id和xx字段的表,
然后还要做数据清洗。
你比如下图第一个要构建的表是catogory(分类),我想要构建这个df_MovieCategory的表 ,我需要id和name(其实是分类具体的名字)
id我都有了本身就是个字段,我需要的就是在genres里面的那个分类名,它是JSON对象的key为“name”对应的value。我现在就想要它。【其实就是想从JSON集合的对象里取值】
但genres是一个JSON对象数组,里面JSON对象里有 'name'这个key对应的值都是Category。
你比如说id 862,它可以取到Animation,comdey.
那这个df_MovieCategory 就是:
862,Animation
862,Comedy
【实际意义就是一个电影可以有多个分类的】
——————————————————————————————————————————————————
老师如何操作的:
1. 导包
numpy,pandas,json
df_movies = pd.read_csv("xxx",dtype={"adult":str, xx:xx, xxxx:xxxx, 16个字段的type })
2. 从genres列拿走name字段的值,也就是category
df = dfMovies[["id", "genres"]]
//首先我从大表里拿走两个字段,分类名我肯定是从genres里获取 想想也知道是遍历
def parse_categories(c_json): //传入多个JSON对象
categories = [] //接收分类名
try:
for c in json.loads(c_json): //用json.loads,把这多个字符串拿过去的好处就是,返回
给你的就是一个个的JSON对象 用于迭代. c就是里面的一个
json object.
categories.append(c['name']) //把JSON对象里面的key为name的值添加进去
except Exception:
categories = [] //如果出现异常 就把空集合赋值给他
return categories
//pars函数解释一个JSON对象,前面的表示取genres列,这一列每一个JSON对象数组都变成字符串(打破了数组),并替换'为''使字符串变成标准JSON格式,然后这就成了一列的多个JSON字符串,传给函数来处理,处理什么呢,就是找出分类名。
df['name'] = df['genres'].str.replace("'",'"').apply(parse_categories)
//现在我们成功获得了df['name'] 我获得的是一个list(那个函数返回值就是一个list) 也就是所有分类名。
但是还不够,我们需要的是显示出形如
id name
0 386 love
1 386 like
2 1000 ok
而现在的df['name']还是一个list,去了趟厕所全明白了。现在我们碰到的是形如:
id name
0 386 [love,like]
1 1000 []
2 5500 []
df = df[['id','name']] //产生一个新的dataframe,包含这两列
rows = []
for idx, row in df.iterrows(): //索引作用不大,所以其实是遍历每一行
if len(row['name']) > 0: // name列如果有值,就遍历,因为它是个list。
for name in row['name']: //遍历list
rows.append([row['id'],name])
//由于从来没迭代id,所以一直是同一个id,对应namelist遍历出的多个值这就是我们想要的结果。
//注意,传一维数组进数组,得到的是二维数组,也就是dataframe
else:
rows.append([row['id'],np.NaN]) //没有就说明这个电影 不对应任何分类
dfCategories = pd.DataFrame(rows, columns = df.columns)
//创建数据帧,第一个参数表示创建依靠的数据,columns表示列索引和df的一样,你也可以自己定义。
______________________________________________________________________
——————————————————————————————————————————————————
数据csv格式是从这里下载 https://www.kaggle.com/rounakbanik/the-movies-dataset/data
这个可以很好的练习你用python处理数据的能力(以后还可以用spark来做)。
但是由于这个数据我半天也没有拿下来,毕竟写个4万条的数据不可能我自己手工写。
这是在视频第4节课-2,也就是本节的最后部分。
这两天我会再看看的速度,好的时候一定把它下载下来。