用Python分析 TED演讲数据

首先准备TED演讲数据集,TED演讲数据集和信息可以从下面的资源获得:

https://www.datafountain.cn/datasets/11

该数据集包含2个文件:

  • ted_main.csv
    包含演讲主要信息,包括演讲标题,发言人,演讲内容,观看次数,评论数量,演讲评分等。
  • transcripts.csv
    包含演讲链接和官方英文字幕。

1)文件ted_main.csv包含17个字段,2550行,每一行代表的是一个TED演讲,具体信息如下:

序号 字段名 数据类型 字段描述
1 name Integer 演讲的正式名称(主要发言人+标题
2 title String 演讲的标题
3 description Integer 演讲内容
4 main_speaker String 主要发言人
5 speaker_occupation Integer 主要发言人的职业
6 num_speaker Integer 发言人数量
7 duration String 演讲时长,以秒为单位
8 event String 演讲所在的TED / TEDx活动
9 film_date Integer 演讲拍摄时间 (Unix timestamp)
10 published_date Integer 演讲发布时间 (Unix timestamp)
11 comments String 评论数量
12 tags String String
13 languages String 收听演讲时可选择的语言数量
14 ratings String 一个列表,里面包含许多字典,每个字典是不同的演讲评级(如鼓舞人心,引人入胜,令人惊讶等)
15 related_talks String 一个列表,里面包含许多字典,每个字典是下一个值得观看的演讲推荐
16 url String 演讲的URL链接
17 views Integer 观看数量

(2)文件transcripts.csv包含2个字段,2467行,每一行代表的是一个TED演讲,具体信息如下:

序号 字段名 数据类型 字段描述
1 url String 演讲的URL链接
2 transcript String 演讲的官方英文字幕

探索方向(持续更新)

可以从以下几个方面来探索TED演讲数据集:

  • 什么类型的演讲讨论的热度最高?
  • 浏览数量高的演讲,在内容上有什么共性?
  • 在TED中最受欢迎的主题是什么?

结构分析

  • TED上每年新增的演讲数量?
  • 演讲类型的分布情况?
  • 演讲时长的分布情况?
  • 演讲者的职业分布?
  • 演讲浏览量的分布情况?
  • 演讲评论数的分布情况?

价值分析

  • 浏览量高的演讲所具有的特征?(主题,内容,时长)
  • 讨论度高的演讲所具有的特征?(讨论度=评论数/浏览量)

群体行为分析

  • 浏览量与讨论度的关系?
  • 浏览量与演讲时长的关系?
  • 不同类型演讲的理想传播时长?

数据分析过程

在Jupyter Notebook中,首先加载数据:

%matplotlib inline
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns #matplotlib的默认作图风格就会被覆盖成seaborn的格式
import json
from pandas.io.json import json_normalize
#加载数据集
df = pd.read_csv("C:\\Machine-Learning-with-Python-master\\data\\ted_main.csv")
#查看数据集行列数
print("该数据集共有 {} 行 {} 列".format(ted.shape[0],ted.shape[1])) 

该数据集共包含 2550行,17列的数据。

接下来处理一下数据列的日期格式

import datetime
df['film_date'] = df['film_date'].apply(lambda x: datetime.datetime.fromtimestamp( int(x)).strftime('%d-%m-%Y'))
df['published_date'] = df['published_date'].apply(lambda x: datetime.datetime.fromtimestamp( int(x)).strftime('%d-%m-%Y'))
df.head()

接下来根据观看数量排序,提出前15行数据

#根据views量排序前15行数据
pop_talks = df[['title','main_speaker','views','film_date']].sort_values('views',ascending=False)[:15]
pop_talks

浏览量最多的演讲:Do schools kill creativity?    浏览次数:47227110

Do schools kill creativity? Ken Robinson 47227110 25-02-2006
#切分main_speaker的前三个字母,新增一列abbr数据
pop_talks["abbr"] = pop_talks['main_speaker'].apply(lambda x: x[:3])
pop_talks.head()

sns.set_style("whitegrid")
plt.figure(figsize=(10,6))
sns.barplot(x='abbr',y='views',data=pop_talks)

sns.distplot(df['views'])

sns.distplot(df[df['views'] < 0.4e7]['views'])

sns.distplot(df[(df['views'] > 0.5e4)&(df['views'] < 0.4e7)]['views']) #多条件布尔索引

df['views'].describe()

TED Talks的views平均数为160万。中位数是112万。这表明TED Talks的普及程度非常高。我们也注意到大部分Talks的views不到400万。我们将在后面的章节中将这个框图作为框图的切点。

sns.distplot(df['comments'])

sns.distplot(df[df['comments'] < 500]['comments'])

sns.jointplot(x='views', y='comments', data=df)

df['comments'].describe()

平均每次Talks都有191.5条评论。假设评论是建设性的批评,我们可以得出结论,TED社区高度参与讨论循环谈判。与评论相关的标准偏差很大。事实上,它甚至比意味着这些措施可能对异常值敏感的意思更大。我们将绘制这个图来检查分布的性质。谈话的最小评论数是2,最大数是6404.该范围是6402 ..尽管如此,最少的数字可能是最近发表的谈话的结果。

df[['views', 'comments']].corr() #相关系数函数

如散点图和相关矩阵所示,相关系数略大于0.5。这表明两个数量之间的中等到强相关性。如上所述,这个结果是相当期待的。现在让我们来检查一下有史以来最受关注的10个会谈的观点和评论数量。

df[['title', 'main_speaker','views', 'comments']].sort_values('comments', ascending=False).head(10)

df['dis_quo'] = df['comments']/df['views'] #新增一列‘dis_quo’
#评论数/点击量之比 前10行
df[['title', 'main_speaker','views', 'comments', 'dis_quo', 'film_date']].sort_values('dis_quo', ascending=False).head(10)

month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
day_order = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
df['month'] = df['film_date'].apply(lambda x: month_order[int(x.split('-')[1]) - 1])
df['month'].head()
month_df = pd.DataFrame(df['month'].value_counts()).reset_index()
month_df.columns = ['month', 'talks']
sns.barplot(x='month',y='talks',data=month_df,order=month_order)

二月显然是最受欢迎的会议,而八月和一月是最不受欢迎的。二月份的人气很大程度上是由于二月份举行的官方会议。

#使用datetime的strtime方法获取一个日期是周几
def getday(x):day, month, year = (int(i) for i in x.split('-'))    answer = datetime.date(year, month, day).strftime("%A")return answer[:3]
#使用datetime的weekday方法获取一个日期是一周里的第几天,用这个当索引在day_order里取相应的value值
def getday2(x):day, month, year = (int(i) for i in x.split('-'))    answer = datetime.date(year, month, day).weekday()return day_order[answer]
df['day'] = df['film_date'].apply(getday) #新增一列day列
day_df = pd.DataFrame(df['day'].value_counts()).reset_index()
day_df.columns = ['day', 'talks']
sns.barplot(x='day', y='talks', data=day_df, order=day_order)

从上图中可以看出,Wed 和 Thu 是最受欢迎的日子,而星期天 Sun 最少。看来周中参与的人多,周末都需要休息。

df['year'] = df['film_date'].apply(lambda x: x.split('-')[2])
year_df = pd.DataFrame(df['year'].value_counts().reset_index())
year_df.columns = ['year', 'talks']
plt.figure(figsize=(18,5))
sns.pointplot(x='year', y='talks', data=year_df)

参考博文:https://www.jianshu.com/p/585019d60572

[机器学习笔记] 用Python分析 TED演讲数据(更新中)相关推荐

  1. [机器学习笔记] 用Python分析:红葡萄酒质量分析(数据探索)

    用Python分析:红葡萄酒质量分析(数据探索) 数据集:winemag-data_first150k.csv 先来导入数据 import numpy as np import pandas as p ...

  2. 【可视化分析案例】用python分析Top100排行榜数据

    目录 一.数据源 二.数据读取 三.数据概览 四.数据清洗 五.可视化分析 5.1 相关性分析(Correlation) 5.2 饼图(Pie) 5.3 箱形图(Boxplot) 5.4 词云图(wo ...

  3. 南方人过冬靠的是一身正气?用Python分析全网取暖器数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于CDA数据分析师 ,作者:CDA数据分析师 前言 如果说冬天对北方人来说只是一个季节 ...

  4. Python:在Pandas数据框中查找缺失值

    How to find Missing values in a data frame using Python/Pandas 如何使用Python / Pandas查找数据框中的缺失值 介绍: (In ...

  5. Python分析离散心率信号(中)

    Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...

  6. Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法

    Python使用pandas设置数据列中float数据类型的有效小数位数.抑制科学计数法 目录

  7. python sci数据_scanpy学习笔记:用Python分析单细胞数据

    Scanpy 是一个基于 Python 分析单细胞数据的软件包,内容包括预处理,可视化,聚类,拟时序分析和差异表达分析等.本文翻译自 scanpy 的官方教程 Preprocessing and cl ...

  8. 使用Python分析北京积分落户数据,分析完我陷入了深思

    这是学习笔记的第 2183 篇文章 读完需要 9 分钟 速读仅需5分钟 北京积分落户制是北京市政协建议推行积分落户政策,以科技贡献.专业技能.在京时间等指标为考核项,计算非京籍人才的"积分& ...

  9. 机器学习笔记 - 独立成分分析(ICA)

    1.概述 独立分量分析 (ICA) 是一种机器学习方法,其中将多元信号分解为不同的非高斯信号.它侧重于独立来源.由于混频处理未知,所以常用ICA作为黑盒.与寻求最大化数据点方差的主成分分析不同. 噪声 ...

最新文章

  1. Altium Designer中如何仅显示顶层的元件和顶层布线
  2. .NETCore3.1中的Json互操作最全解读-收藏级
  3. 计算机网络云南大学实验四,云南大学软件学计算机网络原理实验四.doc
  4. 百度研究院|2020年10大人工智能科技趋势
  5. 大屏监控系统实战(11)-大屏显示日增投票数量柱状图的制作
  6. 机器学习交易——如何使用回归预测股票价格?【翻译】
  7. java gzip delphi_delphi 利用indy解码Gzip的网页
  8. 子div撑不开父div的几种解决方法
  9. jest单元测试-作用域
  10. opendrive简介
  11. javaFX2.0场景(Scene)分析及使用,多场景切换实现
  12. c语言自定义sum函数,c语言自定义函数
  13. 【贪玩巴斯】数字图像处理基础课堂笔记(六)——「一维、二维离散傅里叶变化及其方变换,卷积定理,频域滤波的步骤」 2021-11-08
  14. 【问题解决】This scheduler instance is still active but was recovered by another instance in the cluster.
  15. Think Pad L480充电蓝屏问题解决
  16. Java基于SSH框架的银行业务管理系统
  17. 正在载入java_如何实现程序加载时弹出正在加载对话框
  18. 服务器磁盘爆满,好捉急呀,如何清理MySQL日志?
  19. MySQL数据库备份的命令
  20. Trunk的精解,分析tagged和untagged

热门文章

  1. 番茄工作法总结-第七章:团队
  2. America dreams in china (Think In an America English)--梦想就是一种让你感到坚持就是幸福的东西...
  3. Go语言Seelog入门
  4. 如何免费下载的全球的矢量边界(WGS84)
  5. c语言有关break的应用,关于c语言中的break用法
  6. 【GitHubShare】让你的电脑上全是喵喵,谁又能拒绝可爱呢?
  7. Google软件测试之道
  8. “大数据”挖出老鼠仓的政治价值
  9. thinkpad x12018换固态_ThinkPad X1 Carbon 2018.超强升级
  10. 云效平台代码管理使用总结