关于Python数据分析,这里有一条高效的学习路径
广泛被应用的数据分析
谷歌的数据分析可以预测一个地区即将爆发的流感,从而进行针对性的预防;淘宝可以根据你浏览和消费的数据进行分析,为你精准推荐商品;口碑极好的网易云音乐,通过其相似性算法,为不同的人量身定制每日歌单……
数据正在变得越来越常见,小到我们每个人的社交网络、消费信息、运动轨迹……,大到企业的销售、运营数据,产品的生产数据,交通网络数据……
如何从海量数据中获得别人看不见的知识,如何利用数据来武装营销工作、优化产品、用户调研、支撑决策,数据分析可以将数据的价值最大化。
数据分析人才热度也是高居不下,一方面企业的数据量在大规模的增长,对于数据分析的需求与日俱增;另一方面,相比起其他的技术职位,数据分析师的候选者要少得多。
数据源于麦肯锡
那么,小白如何快速获得数据分析的能力呢?知乎上有很多书单,你可能也听过很多学习方法,但尝试过就知道这些跟高效没什么关系。
要明确学习的路径,最有效的方式就是看具体的职业、工作岗位对于技能的具体需求。
我们从拉勾上找了一些最具有代表性的数据分析师职位信息,来看看薪资不菲的数据分析师,到底需要哪些技能。
其实企业对数据分析师的基础技能需求差别不大,可总结如下:
-
SQL数据库的基本操作,会基本的数据管理
-
会用Excel/SQL做基本的数据分析和展示
-
会用脚本语言进行数据分析,Python or R
-
有获取外部数据的能力,如爬虫
-
会基本的数据可视化技能,能撰写数据报告
-
熟悉常用的数据挖掘算法:以回归分析为主
其次是数据分析的流程,一般可以按 “数据获取-数据存储与提取-数据预处理-数据建模与分析-数据可视化”这样的步骤来实施一个数据分析项目。按照这个流程,每个部分需要掌握的细分知识点如下:
高效的学习路径是什么?就是数据分析的这个流程。 按这样的顺序循序渐进,你会知道每个部分需要完成的目标是什么,需要学习哪些知识点,哪些知识是暂时不必要的。
接下来我们分别从每一个部分讲讲具体应该学什么、怎么学。
- ❶ -
数据获取:公开数据、Python爬虫
外部数据的获取方式主要有以下两种。
第一种是获取 外部的公开数据集,一些科研机构、企业、政府会开放一些数据,你需要到特定的网站去下载这些数据。这些数据集通常比较完善、质量相对较高。给大家推荐一些常用的可以获取数据集的网站:
UCI:加州大学欧文分校开放的经典数据集,被很多数据挖掘实验室采用。
http://archive.ics.uci.edu/ml/datasets.html
国家数据:数据来源于中国国家统计局,包含了我国经济民生等多个方面的数据。
http://data.stats.gov.cn/
CEIC:超过128个国家的经济数据,能精确查找GDP、进出口零售,销售等深度数据。
http://www.ceicdata.com/zh-hans
中国统计信息网:国家统计局官方网站,汇集了国民经济和社会发展统计信息。
http://www.tjcn.org/
优易数据:由国家信息中心发起,国内领先的数据交易平台,很多免费数据。
http://www.youedata.com/
另一种获取外部数据的方式就是爬虫。
比如你可以通过爬虫获取招聘网站某一职位的招聘信息,爬取租房网站上某城市的租房信息,爬取豆瓣评分评分最高的电影列表,获取知乎点赞排行、网易云音乐评论排行列表。基于互联网爬取的数据,你可以对某个行业、某种人群进行分析。
在爬虫之前你需要 先了解一些 Python 的基础知识:元素(列表、字典、元组等)、变量、循环、函数………
以及, 如何用 Python 库(urllib、BeautifulSoup、requests、scrapy)实现网页爬虫。如果是初学,建议从 urllib+BeautifulSoup 开始。
掌握基础的爬虫之后,你还需要一些高级技巧,比如 正则表达式、 使用cookie信息、模拟用户登录、抓包分析、搭建代理池等等,来应对不同网站的反爬虫限制。
常用的的 电商网站、问答网站、二手交易网站、婚恋网站、招聘网站等,都可以爬到非常有价值的数据。
- ❷ -
数据存取:SQL语言
在应对万以内的数据的时候,Excel对于一般的分析没有问题,一旦数据量大,就会力不从心,数据库就能够很好地解决这个问题。而且大多数的企业,都会以SQL的形式来存储数据,如果你是一个分析师,也至少要 懂得SQL的操作,能够查询、提取公司的数据。
SQL作为最经典的数据库工具,为海量数据的存储与管理提供可能,并且使数据的提取的效率大大提升。你需要掌握以下技能:
-
提取特定情况下的数据: 企业数据库里的数据一定是大而繁复的,你需要提取你需要的那一部分。比如你可以根据你的需要提取2017年所有的销售数据、提取今年销量最大的50件商品的数据、提取上海、广东地区用户的消费数据……,SQL可以通过简单的命令帮你完成这些工作。
-
数据库的增、删、查、改: 这些是数据库最基本的操作,但只要用简单的命令就能够实现,所以你只需要记住命令就好。
-
数据的分组聚合、如何建立多个表之间的联系: 这个部分是SQL的进阶操作,多个表之间的关联,在你处理多维度、多个数据集的时候非常有用,这也让你可以去处理更复杂的数据。
SQL这部分比较简单,主要是掌握一些基本的语句。当然,还是建议你找几个数据集来实际操作一下,哪怕是最基础的查询、提取等。
- ❸ -
数据预处理:Python(pandas)
很多时候我们拿到的数据是不干净的, 数据的重复、缺失、异常值等等,这时候就需要进行数据的清洗,把这些影响分析的数据处理好,才能获得更加精确地分析结果。
比如销售数据,有一些渠道的销售是没有及时录入的,有一些数据是记录重复的。比如用户行为数据,有很多无效的操作对分析没有意义,就需要进行删除。
那么我们需要用相应的方法去处理, 比如残缺数据,我们是直接去掉这条数据,还是用临近的值去补全,这些都是需要考虑的问题。
对于数据预处理,学会 pandas (Python包)的用法,应对一般的数据清洗就完全没问题了。需要掌握的知识点如下:
-
选择: 数据访问(标签、特定值、布尔索引等)
-
缺失值处理: 对缺失数据行进行删除或填充
-
重复值处理:重复值的判断与删除
-
异常值处理:清除不必要的空格和极端、异常数据
-
相关操作:描述性统计、Apply、直方图等
-
合并:符合各种逻辑关系的合并操作
-
分组:数据划分、分别执行函数、数据重组
-
Reshaping:快速生成数据透视表
网上有很多 pandas 的教程,主要是一些函数的应用,也都非常简单,可查 pandas 官方文档。
- ❹ -
概率论及统计学知识
数据整体分布是怎样的?什么是总体和样本? 中位数、众数、均值、方差等基本的统计量如何应用?如何在不同的场景中做假设检验?数据分析方法大多源于统计学的概念,所以统计学的知识也是必不可少的。需要掌握的知识点如下:
-
基本统计量: 均值、中位数、众数、百分位数、极值等
-
其他描述性统计量: 偏度、方差、标准差、显著性等
-
其他统计知识: 总体和样本、参数和统计量、ErrorBar
-
概率分布与假设检验: 各种分布、假设检验流程
-
其他概率论知识: 条件概率、贝叶斯等
有了统计学的基本知识,你就可以用这些统计量做基本的分析了。 通过可视化的方式来描述数据的指标,其实可以得出很多结论了:比如排名前100的是哪些,平均水平是怎样的,近几年的变化趋势如何……
你可以使用 Seaborn、matplotlib 等(python包)做一些可视化的分析,通过各种可视化统计图,并得出具有指导意义的结果。
- ❺ -
Python 数据分析
如果你有一些了解的话,就知道目前市面上其实有很多 Python 数据分析的书籍,但每一本都很厚,学习阻力非常大。 但其实真正最有用的那部分信息,只是这些书里很少的一部分。
比如掌握回归分析的方法,通过线性回归和逻辑回归,其实你就可以对大多数的数据进行回归分析,并得出相对精确地结论。这部分需要掌握的知识点如下:
-
回归分析: 线性回归、逻辑回归
-
基本的分类算法: 决策树、随机森林……
-
基本的聚类算法: k-means……
-
特征工程基础: 如何用特征选择优化模型
-
调参方法: 如何调节参数优化模型
-
Python 数据分析包: scipy、numpy、scikit-learn等
在数据分析的这个阶段, 重点了解回归分析的方法,大多数的问题可以得以解决, 利用描述性的统计分析和回归分析,你完全可以得到一个不错的分析结论。
当然,随着你实践量的增多,可能会遇到一些复杂的问题,你就可能需要去了解一些更高级的算法:分类、聚类。
然后你会知道面对不同类型的问题的时候更适合用哪种算法模型,对于模型的优化,你需要去学习如何通过特征提取、参数调节来提升预测的精度。这就有点数据挖掘和机器学习的味道了,其实一个好的数据分析师,应该算是一个初级的数据挖掘工程师了。
你可以通过 Python 中的 scikit-learn 库来实现数据分析、数据挖掘建模和分析的全过程。
- ❻ -
系统实战与数据思维
到这个时候,你就已经具备了数据分析的基本能力了。但是还要根据不同的案例、不同的业务场景进行实战,练习解决实际问题的能力。
上面提到的公开数据集,可以 找一些自己感兴趣的方向的数据,尝试从不同的角度来分析,看看能够得到哪些有价值的结论。
你也可以从生活、工作中去发现一些可用于分析的问题,比如上面说到的电商、招聘、社交等平台等数据中都有着很多可以挖掘的问题。
开始的时候,你可能考虑的问题不是很周全,但随着你经验的积累,慢慢就会找到分析的方向,有哪些一般分析的维度, 比如Top榜单、平均水平、区域分布、同比环比、相关性分析、未来趋势预测等等。随着经验的增加,你会有一些自己对于数据的感觉,这就是我们通常说的数据思维了。
零基础学习数据分析,坑确实比较多,总结如下:
-
1.环境配置,工具安装、环境变量,对小白太不友好;
-
2.缺少合理的学习路径,上来 Python、HTML 各种学,极其容易放弃;
-
3.Python有很多包、框架可以选择,不知道哪个更友好;
-
4.遇到问题找不到解决办法,学习停滞不前;
-
5.网上的资料非常零散,而且对小白不友好,很多看起来云里雾里;
-
6.懂得技巧,但面对具体问题无法系统思考和分析;
-
……………………
正好,DC学院推出的这门系统的数据分析课程,就是 按照以上的学习路径。是无数分析师的爬坑经验、以及无数本书的总结,让你少走弯路。60天,足够打败市面上多半所谓的分析师。
这门课已经开课一个月,已经有2000+同学加入。不少同学都取得了从0到1的进步,能够分析大规模数据,完成可视化和趋势预测。下面是几位同学的 作业合集分享:
Python中通过RF预测红酒质量
@Echo
从UCI上获取到了一份winequality的数据来作为小练习的数据源,想通过红酒的特征来预测红酒的质量。最后通过随机森林和集成学习的方法,将预测的正确率提升到了90%。
1、首先先进行数据的导入,探索与预处理:
观察到表有问题,实际上这个csv文件通过分号分割,所以导入时需要添加:sep=';',即可正常读取数据。
2、处理数据是否分布平衡
显然quality为5的数据样本有太多,而quality为3的数据样本又太少,这时候可以考虑过采样,imbalanced-learn可以进行处理。
先用LR回归尝试一下,这里也权当复习,先可以尝试把所有特征都用上,利用交叉检验,看看预测结果如何:
输出结果为0.57可以看到如果直接在原始不平衡数据上把所有特征都用上,使用LR回归几乎对预测这个多分类的quality没有什么帮助,后来再过采样后的数据上也用了LR回归同样准确率很不理想。
以为可能是由于特征的多重共线性导致的,所以有差看一下所有使用的特征的相关性,这个可以利用seaborn快速可视化的实现这一效果,代码如下:
显示如下:可以看到多数变量之间实际上相关系数都在0.4以下,不存在高度相关。
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。
得到结果是86%,大大超过了Logistics回归的准确率,这种交叉检验的方法是训练集是所有样本都使用了。
使用predict()函数得到上一节训练的随机森林模型在测试集合上的预测结果,然后使用 sklearn.metrics中的相关函数对模型的性能进行评估。
得到的结果如下:
precision recall f1-score support
3 0.99 1.00 0.99 142
4 1.00 1.00 1.00 129
5 0.80 0.81 0.80 150
6 0.77 0.66 0.71 146
7 0.87 0.98 0.92 125
8 0.99 1.00 1.00 126
avg / total 0.90 0.90 0.90 818
[[142 0 0 0 0 0]
[ 0 129 0 0 0 0]
[ 2 0 121 26 1 0]
[ 0 0 31 96 18 1]
[ 0 0 0 2 123 0]
[ 0 0 0 0 0 126]]
Accuracy: 0.90097799511
准确度在90%左右,由于前面在抽取训练集和测试集时random_state设置为0,我们可以测试多次,会选取到不同的训练集和测试集,测算多个准确度求平均值进行比较,经过测试仍然维持在90%左右。
卡片里面内容可以滑动
爬取豆瓣TOP250电影并分析
@Linda
不知道看什么电影时,就会习惯性的看看豆瓣,但落伍的我直到最近才发现还有个神奇的豆瓣电影Top250榜单!
那么得出的这个排行榜和电影评分及评论人数有怎样的关系?和上映时间关系大不大?哪种类型的电影上榜最多呢?哪些国家、导演、主演最受欢迎?片长多长时间最合适?这次通过爬取豆瓣TOP250电影解开这些秘密。
我们抓取排名、电影名、导演、主演、上映日期、制片国家/地区、类型,评分、评论数量、一句话评价以及电影链接,其中导演和主演分别取一位。完整代码如下:
OK,数据抓取完毕,看一下抓取结果。先来看爬取Top250页面的信息:
数据清洗
数据分布在两个文件中,我们选取 top250_f1.csv 文件中的 num(排名)、 title(电影名)、 init_year(上映时间)、 area(国家/地区)、 genre(类型)、 rating_num(评分)、 comment_num(评价人数),和 top250_f2.csv 文件中的 language(语言)、 director(导演)、 cast(主演)、 movie_duration(时长)、 tags(标签)这些列进行分析,因此只对这些列中的脏数据做清洗工作。
通过 pd.merge()函数选出的
df_1_cut 和 df_2_cut 两张表,取并集,链接键为num。
共250行,12列,无缺失值,num 和 comment_num 为整型,rating_num 为浮点型,其余为 object 类型。
清洗数据格式、数据分列
粗略看一下,可以发现 genre,language,director,cast,movie_duration,tags列方括号、花括号和英文省略号等无效信息,需要去掉。对于两侧的 [' '] 或 {[' ']} 形式,可以用str分割字符串。
对于 area 列,有些电影由多个国家或地区联合制作,例如《霸王别姬》电影:“中国大陆”和“香港”之间用空格隔开,可以用str.split 函数进行分列, apply(pd.Series) 使用到的函数作用在每一行或列。
缺失值检查
没有缺失值。关于 area_c 、 genre_c 、 language_c 、cast_c 、 tags_c 都经过缺失值处理,也不存在缺失值。
用 describe() 函数看一下数值型数据的统计信息:
在“豆瓣电影Top250”榜单中,上映时间最早为1931年,最晚为2016年;评分最低为8.2分,最高9.6分,平均分为8.76分;评论数量最低40150条,最高861343条;电影时长最短为45分钟,最长238分,平均时长121.61分钟,第一四分位书为99.25分钟,看来绝多数电影时长还是大于90分钟的。
总排名、按评分排名、按评价数量排名Top10
“克里斯托弗·诺兰 Christopher Nolan”和“宫崎骏 Hayao Miyazaki ”上榜次数最多,同为7次。
上榜次数最多演员
上榜次数最多的演员是“张国荣 Leslie Cheung”,高达8次,这也是每年大家对他纪念的一个原因吧,这么多经典的作品,永远被铭记。
排名与评分的关系
排名越靠前,即num越小,分数越高,但看着有些别扭,因为我们习惯了排名靠前的在 y 轴的上方,可以用 invert_yaxis() 函数来改变 y 轴标签的顺序。
豆瓣评分大多是集中在 8.3 - 9.2 之间,随评分的升高,豆瓣Top250排名名次大致提前,Pearson相关系数为 -0.6951 ,呈强相关性。
排名与评论人数的关系
评价人数呈右偏分布,随评价人数的增多,豆瓣Top250排名名次有提前趋势,Pearson相关系数为 -0.6623 ,呈强相关性。
排名与电影时长的关系
电影时长多数集中在 80-120 分钟之间,与豆瓣电影Top250之间关系不大,Pearson相关系数为 -0.2420 ,为弱相关性。
排名与上映年份的关系
上映年份多数其中在1990年之后,pearson相关系数为0.0862,与豆瓣电影Top250没有相关性。
国家/地区
上榜电影中,美国电影数量最多,中国大陆排第七位。
语言
上榜电影使用最多的语言为英语,汉语普通话排第四位。
电影类型
最多的电影类型是剧情,其次是爱情。
电影标签
标签比较多,用WordCloud制作词云:
爬网易云音乐并分析
@柠檬不怕酸
既然老薛的歌大部分是自己作词的,那他的歌词和他应该有某种情感表达的联系吧。所以,我决定爬取网易云音乐做一些初步的数据分析尝试。
网易云音乐的网页是动态加载的,所以需要使用抓包的方式来进行爬取。
很明显,这个链接直接返回了我们所需的歌词的内容。
主要的思路已经完成啦,接下来就是爬取薛之谦的热门TOP50首歌曲的过程。
1. 打开网易云音乐,进入薛之谦的歌曲列表:
可以在网址栏中看到薛之谦在网易云歌手中的id为5781。
这个网址就是歌手作品列表所在的网址,当然,我们可以通过修改singer_id来进入不同歌手的作品列表,如下面这样:
url = 'http://music.163.com/artist?id=' + str(singer_ID)
2. 接下来就是利用爬取的歌曲id的列表,再根据歌曲网址,获取每个歌曲的歌词,并保存到一个以歌手名为文件夹,以歌曲名为名字的txt文件中。
3. 根据得到的词频信息字典,套入词云的生成代码中,得到词云图。
如果你希望在短时间内学会Python数据分析,少走弯路
扫描下方二维码加入课程
限额优惠 ¥499(原价¥599),限前100名
关于学习路径
我们知道一般的数据分析流程是:“数据获取-数据存储-数据清洗-Python数据建模与分析-数据可视化与报告”,而课程正是按照实际的分析流程搭建整体框架。这条学习路线足够清晰,没有一上来直接灌输大量理论,而是在实践中学习,这就有效过滤掉了无效知识。
每学习一部分知识,能解决实际的问题。比如学习 Python 爬虫,就能获取相应的数据;学习 pandas,就能将获取的数据进行清洗;学习 Seaborn,你就可以实现炫酷的可视化……即便是对于纯小白来说,也没有什么压力。
数据清洗-获得干净数据
数据可视化-探索性数据分析
附:《数据分析(入门)》课程大纲
60天入门数据分析师
第一章:开启数据分析之旅
1) 数据分析的一般流程及应用场景
2) Python 编程环境的搭建及数据分析包的安装
第二章:获取你想要的数据
1) 获取互联网上的公开数据集
2) 用网站 API 爬取网页数据
3) 爬虫所需的 HTML 基础
4) 基于 HTML 的爬虫,Python(Beautifulsoup)实现
5) 网络爬虫高级技巧:使用代理和反爬虫机制
6) 应用案例:爬取豆瓣 TOP250 电影信息并存储
第三章:数据存储与预处理
1) 数据库及 SQL 语言概述
2) 基于 HeidiSQL 的数据库操作
3) 数据库进阶操作:数据过滤与分组聚合
4) 用 Python 进行数据库连接与数据查询
5) 其他类型数据库:SQLite&MongoDB
6) 用 Pandas 进行数据预处理:数据清洗与可视化
第四章:统计学基础与 Python 数据分析
1)探索型数据分析:绘制统计图形展示数据分布
2)通过统计图形探究数据分布的潜在规律
3)描述统计学:总体、样本和误差,基本统计量
4)推断统计学:概率分布和假设检验
5)在实际分析中应用不同的假设检验
6)预测型数据分析:线性回归
7)Python中进行线性回归(scikit-learn实现)
8) 预测型数据分析:分类及逻辑回归
9) 其它常用算法(k近邻、决策树、随机森林)
10) 预测型数据分析:聚类算法(k均值、DBSCAN)
11) 用特征选择方法优化模型
12) 用 scikit-learn 实现数据挖掘建模全过程
13) 用 rapidminer 解决商业分析关键问题
14) 高级数据分析工具:机器学习、深度学习初探
第五章 报告撰写及课程总结
1) 养成数据分析的思维
2) 数据分析的全流程及报告撰写的技巧
3) 课程回顾以及一些拓展
关于学习资料
你或许受够了零散的学习资源,不系统不清晰意味着低效;你可能收集了以G计的的学习资源,但保存后从来没打开过?
老实说,很少有像这门课这样的用心的课程资料。每一小节后面都有本节的重点知识、参考代码以及延伸学习材料,供快速复习、案例实现、深入拓展……你一定不会失望。
某节部分学习资料
关于课程老师
课程主讲老师王乐业是港科大的博士后,在数据挖掘方面成果不俗。更重要的是,他喜欢分享,知乎粉丝不少,能把知识提炼到极致,所以课程全是干货,没有废话。
周涛教授很多人比较熟悉,作为这门课的研发老师,他也将自己多年的大数据分析和挖掘的经验、教学经验倾注其中。所以课程不仅是知识,还有思维和学习方法,你完全可以迁移到其它层面。
【课程主讲老师】
王乐业
香港科技大学博士后
王乐业,香港科技大学博士后,法国国立电信学院及巴黎六大计算机科学与技术专业博士。本科和硕士毕业于北京大学计算机科学与技 术专业。目前研究方向研究方向为城市时空数据挖掘。从事研究工作包括通过社交网络识别个人兴趣、通过移动通信网络推理人群移动模式、以及通过公共交通数据优化交通站点分布等。发表论文20余篇,其中SCI10余篇,引用300余次。乐业老师是一位乐于分享的学者,善于用简单的方法解答复杂的问题。在他看来,找到好的学习方法和路径,其实可以少走很多弯路。
【课程研发老师】
周涛
电子科技大学教授
周涛,电子科技大学教授、大数据研究中心主任。主要从事统计物理与复杂性,数据挖掘与数据分析方面的研究。在 Physics Reports、PNAS等国际 SCI 期刊发表300余篇学术论文,引用超过17000次,H 指数为63。2015年入选全国十大科技创新人物,超级畅销书《大数据时代》译者,畅销书 《为数据而生:大数据创新实践》作者。周涛教授参与课程的研发和课程体系的设计,以多年的教学科研和企业数据团队管理经验为课程的顶层设计保驾护航。