用 Python 分析 YouTube 百万条数据

前言

之前 Python 写了一个简单的 WordCount 的程序,这里我们处理一些相对大点的数据,即对 YouTube 的百万条视频数据集进行处理。

该数据集是有格式的,各个字段的具体含义如下:

字段名

解释及数据类型

video ID

视频ID:每个视频均有唯一的11位字符串

uploader

上传者用户名:字符串类型

age

视频年龄:整数值,代表视频上传时间与2007年2月15日(Youtube创立日)的时间间隔

category

分类:由上传者选择的视频分类,字符串类型

length

视频长度:整数值

views

浏览量:整数值

rate

视频评分:浮点值

ratings

评分次数:整数值

comments

评论数:整数值

related IDs

相关视频ID:数量不超过20个,每一个相关视频的ID均为单独的一列

附图如下:

每条记录的相关视频数量不尽相同,因此数据不是很整齐,数据来自:Youtube Dataset,本次实验总数据大小共 826M3435539 行。

知识前提概要:

计算评分前 100 的视频

示例如下(”\t“分隔符隔开):

1234567891011

CRVmdd_bpA 4.87BFBixmV-pc 4.81BArP_-_vXI 4.566M41YqM_xk 4.52CYhSNHbeC8 4.38BwggJEPZQ 4.29FDJ8x3ZKQE 3.75BbtF1Ysel0 3.4AdZ6wRHsrE 2.9AKiJZEOqzQ 1.33.....

mapper

1234567891011121314

#!/usr/bin/env python#coding=utf-8import sysfor line in sys.stdin: line = line.strip() lineList = line.split("\t") if len(lineList) > 7: #规律少于7个字段的无效数据 videoName = lineList[0] try: videoRating = float(lineList[6]) #去除脏数据,将不符合数据的评分归零 except ValueError: videoRating = 0.0 print "%s\t%s"%(videoName, videoRating)

reducer

1234567891011121314151617

#!/usr/bin/env python#coding=utf-8import sysdict = {}for line in sys.stdin: line = line.strip() line = line.split('\t') dict[line[0]] = float(line[1]) #将所有数据放到 dictionary 中,以便进行排序## 根据值进行排序,然后输出前 100 个sortResult = sorted(dict.items(),key=lambda d:d[1],reverse=True)i = 0for max in sortResult: print "%s\t%s"%(max[0],max[1]) i+=1 if i > 99: break

计算每个视频类型下的视频数量

示例如下(”\t“分隔符隔开):

123456

Science & Technology 45151Sports 23548Travel & Events 11544Nonprofits & Activism 15644People & Blogs 35165...

mapper

12345678

#!/usr/bin/env python#coding=utf-8import sysfor line in sys.stdin: line = line.strip() lineList = line.split('\t') if len(lineList) > 4: print "%s\t%s"%(lineList[3], 1)

reducer

123456789101112

#!/usr/bin/env python#coding=utf-8import sysdict = {}for line in sys.stdin: line = line.strip() key, count = line.split('\t') dict.setdefault(key, 0) dict[key] += int(count)for key, value in dict.items(): print "%s\t%s"%(key,value)

123456789101112131415161718

News & Politics 153677Education 15033Nonprofits & Activism 5879Entertainment 726567Travel & Events 25934Howto & DIY 36750Gadgets & Games 129481People & Blogs 275704Science & Technology 15856Howto & Style 45422Pets & Animals 54339UNA 33252Music 825158Travel & Places 34962Comedy 364937Sports 286697Autos & Vehicles 94111Film & Animation 296458

总数为 3410217,处理的文件总行数为 3435539,说明其中有 25322 条脏数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【每周一坑】乒乓数

刚从假期回来,又要迎接周末,各位看官想必都很辛苦,所以本周每周一坑为大家准备一道简单的甜点题目,本题取材于伯克利大学 CS61 课程 homework02。 求...

32460
来自专栏数据结构与算法

P1325 雷达安装

题目描述 描述: 假设海岸线是一条无限延伸的直线。它的一侧是陆地,另一侧是海洋。每一座小岛是在海面上的一个点。雷达必须安装在陆地上(包括海岸线),并且每个雷达都...

35060
来自专栏计算机视觉与深度学习基础

Leetcode 22 Generate Parentheses 搜索与DP的纠结

Given n pairs of parentheses, write a function to generate all combinations of ...

25290
来自专栏Brian

R语言性能Tips和GC

最近团队在使用R语言作为算法的实践语言,通过人工策略和xgboost算法进行一些价格算法的控制和输出,发现一些代码中对于内存、CPU、程序设计思想以及现代统计算...

14500
来自专栏用户2442861的专栏

百度 阿里 华为 腾讯 谷歌面试笔试题及解析

点评:其余题目请参见:http://blog.csdn.net/doc_sgl/article/details/11695671。 2、一个有10亿条记录...

85630
来自专栏IT可乐

Java数据结构和算法(一)——简介

  本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子。   编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车...

32990
来自专栏数据派THU

一文解读Tensor到底是个啥玩意儿?(附代码)

本文介绍了各种数值型数据的容器(标量、向量、矩阵、张量)之间的关系,在实践中,张量特指3维及更高维度的数据容器。

15730
来自专栏三木的博客

插入法排序

何谓算法?算法就是计算机解决问题的方法和步骤。之所以强调计算机三个字,是因为计算机处理问题的方式和我们人类解决问题的方式有所不同。比如,在电视剧《宫》里看到一个...

29350
来自专栏JadePeng的技术博客

从编辑距离、BK树到文本纠错

搜索引擎里有一个很重要的话题,就是文本纠错,主要有两种做法,一是从词典纠错,一是分析用户搜索日志,今天我们探讨使用基于词典的方式纠错,核心思想就是基于编辑距离,...

69360
来自专栏窗户

平方根的C语言实现(一) —— 浮点数的存储

  曾经做一个硬件成本极度控制的项目,因为硬件成本极低,并且还需要实现较高的精度测量,过程中也自己用C语言实现了正弦、余弦、反正切、平方根等函数。   以下,无...

423100

扫码关注云+社区

领取腾讯云代金券