[机器学习笔记] 用Python分析 TED演讲数据(更新中)
用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演讲数据(更新中)相关推荐
- [机器学习笔记] 用Python分析:红葡萄酒质量分析(数据探索)
用Python分析:红葡萄酒质量分析(数据探索) 数据集:winemag-data_first150k.csv 先来导入数据 import numpy as np import pandas as p ...
- 【可视化分析案例】用python分析Top100排行榜数据
目录 一.数据源 二.数据读取 三.数据概览 四.数据清洗 五.可视化分析 5.1 相关性分析(Correlation) 5.2 饼图(Pie) 5.3 箱形图(Boxplot) 5.4 词云图(wo ...
- 南方人过冬靠的是一身正气?用Python分析全网取暖器数据
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于CDA数据分析师 ,作者:CDA数据分析师 前言 如果说冬天对北方人来说只是一个季节 ...
- Python:在Pandas数据框中查找缺失值
How to find Missing values in a data frame using Python/Pandas 如何使用Python / Pandas查找数据框中的缺失值 介绍: (In ...
- Python分析离散心率信号(中)
Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...
- Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法
Python使用pandas设置数据列中float数据类型的有效小数位数.抑制科学计数法 目录
- python sci数据_scanpy学习笔记:用Python分析单细胞数据
Scanpy 是一个基于 Python 分析单细胞数据的软件包,内容包括预处理,可视化,聚类,拟时序分析和差异表达分析等.本文翻译自 scanpy 的官方教程 Preprocessing and cl ...
- 使用Python分析北京积分落户数据,分析完我陷入了深思
这是学习笔记的第 2183 篇文章 读完需要 9 分钟 速读仅需5分钟 北京积分落户制是北京市政协建议推行积分落户政策,以科技贡献.专业技能.在京时间等指标为考核项,计算非京籍人才的"积分& ...
- 机器学习笔记 - 独立成分分析(ICA)
1.概述 独立分量分析 (ICA) 是一种机器学习方法,其中将多元信号分解为不同的非高斯信号.它侧重于独立来源.由于混频处理未知,所以常用ICA作为黑盒.与寻求最大化数据点方差的主成分分析不同. 噪声 ...
最新文章
- Altium Designer中如何仅显示顶层的元件和顶层布线
- .NETCore3.1中的Json互操作最全解读-收藏级
- 计算机网络云南大学实验四,云南大学软件学计算机网络原理实验四.doc
- 百度研究院|2020年10大人工智能科技趋势
- 大屏监控系统实战(11)-大屏显示日增投票数量柱状图的制作
- 机器学习交易——如何使用回归预测股票价格?【翻译】
- java gzip delphi_delphi 利用indy解码Gzip的网页
- 子div撑不开父div的几种解决方法
- jest单元测试-作用域
- opendrive简介
- javaFX2.0场景(Scene)分析及使用,多场景切换实现
- c语言自定义sum函数,c语言自定义函数
- 【贪玩巴斯】数字图像处理基础课堂笔记(六)——「一维、二维离散傅里叶变化及其方变换,卷积定理,频域滤波的步骤」 2021-11-08
- 【问题解决】This scheduler instance is still active but was recovered by another instance in the cluster.
- Think Pad L480充电蓝屏问题解决
- Java基于SSH框架的银行业务管理系统
- 正在载入java_如何实现程序加载时弹出正在加载对话框
- 服务器磁盘爆满,好捉急呀,如何清理MySQL日志?
- MySQL数据库备份的命令
- Trunk的精解,分析tagged和untagged
热门文章
- 番茄工作法总结-第七章:团队
- America dreams in china (Think In an America English)--梦想就是一种让你感到坚持就是幸福的东西...
- Go语言Seelog入门
- 如何免费下载的全球的矢量边界(WGS84)
- c语言有关break的应用,关于c语言中的break用法
- 【GitHubShare】让你的电脑上全是喵喵,谁又能拒绝可爱呢?
- Google软件测试之道
- “大数据”挖出老鼠仓的政治价值
- thinkpad x12018换固态_ThinkPad X1 Carbon 2018.超强升级
- 云效平台代码管理使用总结