6万部豆瓣电影数据分析(2016上半年)

1 前言

豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务。你可以记录想看、在看和看过的电影电视剧,顺便打分、写影评,极大地方便了人们的生活。

豆瓣电影是这样介绍自己的:“国内最权威电影评分和精彩影评,千万影迷的真实观影感受,为你的观影做决策。”而它也确实做到了这一点。

然而,前些日子,朋友圈又因一事沸腾了。《中国电影报》12月27日发布题为“豆瓣电影评分,面临信用危机”的文章,随后人民日报客户端转发了该文,并将标题改为“豆瓣、猫眼电影评分面临信用危机,恶评伤害电影产业”。

基于此,特地把以前抓取的豆瓣电影数据拿出来分析一下,重点比较中国电影与其他国家和地区的电影的差异,以为豆瓣评分正名。

2 数据概况

这个数据只抓取到2016年上半年,总计 58127 部电影。包括id,电影名称,豆瓣评分,评分人数,上映时间,导演,主演,制片国家,影片简介等等信息。按照评分人数从高到低排序,数据库截图如下。

可以发现,评分人数最多的电影是周星驰的《美人鱼》,这是一部国产片,说明国人对国产电影还是非常关心的,并不像人民日报所抨击的那样——国人崇洋媚外,不关心国产电影。

另外,也可以发现,评分人数越多,电影得分基本在7.0以上,属于中等以上的好片。(《小时代》除外)

The Titanic Dataset 数据挖掘

1 简介

Titanic,就是当年第一航行便失事的超级大船——泰坦尼克号,大家可能对 Rose 与 Jack 的爱情故事念念不忘,但同时 Titanic 留下的乘客数据也是数据分析一笔宝贵的财富,很多新人都会拿这套数据集练练手。本想做一下 Titanic 的数据分析练练手,然后上 kaggle 一搜,一堆 Titanic 数据分析的 Paper,于是决定偷个懒,找了一篇 Fork 数最高的 Paper 翻译一下,当做练习自己的英语:)

附原文目录:

  • 1 Introduction
    • 1.1 Load and check data
  • 2 Feature Engineering
    • 2.1 What’s in a name?
    • 2.2 Do families sink or swim together?
    • 2.3 Treat a few more variables …
  • 3 Missingness
    • 3.1 Sensible value imputation
    • 3.2 Predictive imputation
    • 3.3 Feature Engineering: Round 2
  • 4 Prediction
    • 4.1 Split into training & test sets
    • 4.2 Building the model
    • 4.3 Variable importance
    • 4.4 Prediction!
  • 5 Conclusion

此文一共有三部分组成:

  • 特征工程(Feature engineering)
  • 缺失值填补(Missing value imputation)
  • 预测(Prediction)(译者注:这点最重要!)

一年一班的孩子们

在我实习之前,我和大多数人一样,认为小孩子都特别难管、特别烦人、特别不听话。而在我当了小学教师之后,我才发现原来孩子们是这么可爱,以至于我真的深深地喜欢上了他们

Python 50问 [4]:如何对字典中的项根据其值的大小进行排序

常规场景

如某班的成绩以字典的形式存储为:{'Airing': 100, 'Penny': 70, 'Bili': 50},现根据其成绩的高低,对学生进行排名。

常规解法:使用zip将字典转成元组

sorted是一个内置的排序函数,可对列表进行排序。如:

1
sorted([3, 4, 66, 6]) # 返回 [3, 4, 6, 66]

那么如何对字典进行排序呢?

以下是操作流程:

  1. 利用zip将字典转化成元组
  2. 使用sorted函数进行排序

Before Coding [17] - JavaScript - 函数

必备知识:前面课程的学习

函数的定义

常规函数的声明

一个函数的定义(也称为函数的声明)由一系列的函数关键词组成,依次为:

  • 函数的名称。
  • 函数参数列表,包围在括号( )中并由逗号,区隔。
  • 函数功能,包围在花括号{ }中,用于定义函数功能的一些 JavaScript 语句。

例如,以下的代码定义了一个简单的 square 函数:

1
2
3
function square(number) {
return number * number;
}

函数 square 使用了一个参数,叫作 number。这个函数只有一个语句,它说明该函数会将函数的参数(即 number )自乘后返回。函数的 return 语句确定了函数的返回值。

Before Coding [16] - JavaScript - 循环语句

3.7 循环语句

必备知识:前面课程的学习

循环语句

循环语句是一系列反复执行直到符合特定条件的命令。JavaScript 支持fordo whilewhile这些循环语句,还有 Label(label 本身不是一个循环语句,但是经常和这些语句一起使用)。另外,你可以在循环语句中使用breakcontinue语句。

需要注意的是,还有另一种比较高级的循环语句:for each...in,但它是用来操作对象的。

综上,循环语句有以下几种:

  • for Statement
  • do…while Statement
  • while Statement
  • label Statement
  • break Statement
  • continue Statement

我们一个一个来看。

Python 50问 [3]:如何统计序列中元素的出现频度

常规解法:迭代

该问题的实际场景主要有两种,一是单纯的统计序列中元素的出现的次数,二是统计某篇文章中出现频度最高的英语单词等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 首先先来使用列表解析创建一个随机的序列
from random import randint
# 生成一个含有30个元素范围为0-20的随机序列
data = [randint(0, 20) for _ in xrange(30)]
# 统计结果是一个字典,其中data中的元素为键,0为初始值
c = dict.fromkeys(data, 0)
# 迭代
for x in data:
c[x] += 1
print c

如此一来,就得到了序列中每个元素的出现次数。如果实际需求是找频度最高的前几个元素,可以对字典进行排序。(详见1.1 在列表、字典、集合中根据条件筛选数据,这里不再赘述。)

可见,步骤虽然简单,但仍然是比较繁琐的。那么,有没有什么优雅的解决方案呢?