对实习医生格蕾的初步探索"

今天是大年初一,是个好日子,耳边传来的是小岳岳的歌声,手下正敲打着键盘,想说一定要把这个小坑tm给填了!!
数据挖掘中文本挖掘一直觉得是挺有意思的主题,今天就模仿着David Robinson的love actually

数据源

首先当然就是获得数据文本,就在百度上搜了一部我最喜欢的医学美剧,’Gary’s Anatomy’,实习医生格蕾的光碟还在大白熊那,估计是要尘封一段时间了,不行,要找时间讨回来的说!!

raw <- readLines("gary's anatomy.txt")

df <- data_frame(raw = raw) %>% 
  filter(raw != "", !is.na(raw)) %>% 
  separate(raw, c("form","content"),sep = ": ",fill = "left") %>% 
  mutate(form = ifelse(is.na(form), "Others", form)) %>% 
  mutate(is_scene = str_detect(form, "2x"),
         scene = cumsum(is_scene))

head(df)

好了现在我们算是对raw data进行了initial manipulation,一个tidy data的过程。当然这里算是很简单了,正常数据挖掘中data cleaning通常要花费一名data analyst60%的时间,这我深有体会啊。叹一声先。。

我在网上找到的这个剧本是格雷第二季,包括了本集名字/演员的台词以及场景转换,当然还有我觉得最有意思的旁白。
先看看究竟第二季有哪些主题,都是谁写的,剧本中用到的高频单词是什么,以及台词频率最高的是不是就是我们印象中的那些主角?

初步分析

我们来看一下,第二季总共27集,有没有你印象最深的一集呢?我想第一集的writer可能没想到多年之后,有一个胖胖的女生唱了一首足够震撼动人心魄的歌曲,她的第一句音起就是“When the rain is blowing in your eyes and the whole world is on your case”~

center

library(tidytext)
reg <- "([^A-Za-z\\d#@']|'(?![A-Za-z\\d#@]))"
dialogue_words <- dialogue %>%
  select(content) %>% 
  unnest_tokens(word, content, token = "regex", pattern = reg) %>% 
  filter(!word %in% stop_words$word)

library(wordcloud2)
dialogue_words %>% 
  count(word, sort = T) %>% 
  as.data.frame(.) %>% 
  wordcloud2(size = 1.5, shape = 'star')

senti_stat <- dialogue_words %>% 
  inner_join(sentiments)

senti_stat %>% 
  filter(sentiment == "positive") %>% 
  count(word, sort = T) %>% 
  as.data.frame(.) %>% 
  wordcloud2(size = 1)

center

作为一部典型的美剧,格雷的台词除却医学专用此外,日常常用词还是占多数的,像什么god/ah/guy之类的口头语,chief/Dr的title,当然也有医学题材不可避免的surgery,接下来看看这部剧积极的情绪词频。
跟想象中差不多,lucky/love/happy占首位

接下来我们挖一下人物关系吧

lines <- character_df %>%
    filter(!is_scene) %>%
    rename(speaker = form, dialogue = content) %>% 
    group_by(scene, line = cumsum(!is.na(speaker))) %>%
    summarize(speaker = speaker[1], dialogue = str_c(dialogue, collapse = " ")) %>% 
  mutate(speaker = str_replace(speaker,"\\(.+", "")) %>% 
  filter(!is.na(speaker))

现在每集每个人每句台词形成一行,也就是one scene one line one observation, 将其转变成“speaker-by-scene matrix”,为之后的聚类做准备。

啦啦啦我们五大主角果然聚在一起了,谁叫他们工作在一起住还住一起~

center

我们可以看到每一集出现人物的关系线,Alex居然第九集没有出场,Mark第18集才出场,看来我得去回顾一下第二季了,先到这里等我review剧之后再把埋一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值