每日牢骚:

既然数据一晚上都没搞下来,如果坚持下去既浪费时间,又破坏继续学的心情,得不偿失。

直接把视频的意思先看懂,然后先直接学下面的课了,别为了那一点一点知识把整个大数据的学习进度都破坏了

 

————————————————————————————————————————

数据采集最后一部分内容是一个练习题。

 

这个csv数据它有16个字段的,里面有些字段可能没有值,我们的做法就是把这个巨无霸文件拆分成几个表。比如说id和xx字段的表,

然后还要做数据清洗。

你比如下图第一个要构建的表是catogory(分类),我想要构建这个df_MovieCategory的表 ,我需要id和name(其实是分类具体的名字)

id我都有了本身就是个字段,我需要的就是在genres里面的那个分类名,它是JSON对象的key为“name”对应的value。我现在就想要它。【其实就是想从JSON集合的对象里取值】

 

zabbix 采集不到本机设备得数据_数据

 

但genres是一个JSON对象数组,里面JSON对象里有 'name'这个key对应的值都是Category。

你比如说id 862,它可以取到Animation,comdey.

那这个df_MovieCategory 就是:

862,Animation

862,Comedy

【实际意义就是一个电影可以有多个分类的】

 

zabbix 采集不到本机设备得数据_JSON_02

 

——————————————————————————————————————————————————

老师如何操作的:

1. 导包

numpy,pandas,json
df_movies = pd.read_csv("xxx",dtype={"adult":str, xx:xx, xxxx:xxxx, 16个字段的type })

zabbix 采集不到本机设备得数据_zabbix 采集不到本机设备得数据_03

 

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的一样,你也可以自己定义。

______________________________________________________________________

 

 

 

 

 

 

 

 

 

——————————————————————————————————————————————————

 

 

 

zabbix 采集不到本机设备得数据_数据_04

 

数据csv格式是从这里下载 https://www.kaggle.com/rounakbanik/the-movies-dataset/data

这个可以很好的练习你用python处理数据的能力(以后还可以用spark来做)。

 

但是由于这个数据我半天也没有拿下来,毕竟写个4万条的数据不可能我自己手工写。

这是在视频第4节课-2,也就是本节的最后部分。

 

这两天我会再看看的速度,好的时候一定把它下载下来。