Python数据科学:相关分析
目前手上有两本书,一本《利用Python进行数据分析》,一本《Python数据科学》。
对于学习什么东西,都有它的「道」和「术」。「道」即原理,「术」即技巧。
通过这几天翻阅这两本书,发现前者更像一本工具书。
它并不会真正的教你如何去分析数据,适合查阅。
而后者呢,更注重数据分析的原理,教我们如何去剖析数据,得到我们想要的结果。
所以接下来会以后者作为学习的方向,不能仅仅停留在描述性数据分析上(数据可视化)。
更应该多花时间在预测性数据分析上(建立数据模型预测)。
另外上期的送书活动已结束,两位小伙伴也联系我了。
没有中奖的小伙伴也不要伤心,后面小F会给大家争取更多的福利,所以关注就是了。
/ 01 / 前言
说实话,《Python数据科学》这本书是真的不错。
它不仅提供了大量的专业术语的解释,还有各式各样通俗易懂的案例。
非常适合新手学习,后期一定也给大家争取争取一下送书的福利!
所以在每篇的前言,我会摘要一些《Python数据科学》的相关内容。
一方面,加深自己对相关知识的印象。
另一方面,也分享给大家,补充一下专业知识。
分析过程中尽量不用书中的数据和案例,用我自己公众号文章的数据和案例。
这样显得更接地气一点,学的也更深刻。
变量分为「名义变量」「等级变量」「连续性变量」。
「名义变量」为无序分类变量。
比如豆瓣电影TOP250数据里的「国家」「电影名称」。
「等级变量」为有序分类变量。
比如数据分析岗数据里的「学历」「工作经验」。
「连续型变量」为连续型变量在规定范围区间内可以被任意取值。
比如豆瓣电影TOP250数据里的「年份」「评分」「评分人数」。
/ 02 / 相关分析
在上面,我们简述了变量的类型,也举了相关例子。
接下来我们针对两连续变量关系检验,进行相关分析。
使用豆瓣TOP250里的数据,研究排名与评价分数之间的关系。
读取数据并清洗。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 读取文件
df = pd.read_csv('douban.csv', header=0, names=["quote", "score", "info", "title", "people"])
(dom1, dom2, dom3, dom4) = ([], [], [], [])
# 清洗数据,获取电影年份及国家,增加年份列及国家列
for i in df['info']:
country = i.split('/')[1].split(' ')[0].strip()
if country in ['中国大陆', '台湾', '香港']:
dom1.append(1)
else:
dom1.append(0)
dom2.append(int(i.split('/')[0].replace('(中国大陆)', '').strip()))
df['country'] = dom1
df['year'] = dom2
# 清洗数据,建立评价人数列
for i in df['people']:
dom3.append(int(i.replace('人评价', '')))
df['people_num'] = dom3
# 生成电影排名列表
dom4 = [x for x in range(1, 251)]
df['rank'] = dom4
print(df)
在那一期的排名评分人数三维度图里,我们知道排名越靠前,评价人数越多,评分越高。
这只是我们直观上的推测,并不是用数据确确实实展示的。
相关分析就可以用数据来证明我们本次猜测的正确性。
首先我们通过散点图来看排名与评价分数之间的关系,看是否有所相关。
# scatter为散点图
df.plot(x='rank', y='score', kind='scatter')
plt.show()
这里由于排名排序问题显现出线形负相关,不过这并不影响分析。
你就默认正相关就好,即排名越靠前,分数越高。
通过散点图我们发现数据有线性相关关系。
那么就能使用皮尔逊(Pearson)相关系数对两变量的相关关系进行分析。
# corr()方法:计算两两相关的列,不包括NA/Null值 persion:标准相关系数
print(df[['rank', 'score']].corr(method='pearson'))
输出两变量相关系数,绝对值约为0.70,查表可知相关程度为高度。
那么结论就显而易见,排名与评价分数之间的关系为线性正相关!!!
相关分析除了通过相关系数分析,还可以通过散点矩阵图。
对多个变量之间的相关关系进行分析,去探索变量间的关系。
# seaborn回归/散点图
sns.pairplot(df[['score', 'people_num', 'year', 'country', 'rank']])
plt.show()
生成如下散点图,可以发现rank与score及people_num相关性较大(右上角两个图)。
接下来创建分组变量,指定国家为分组变量,来看中国和外国的豆瓣电影TOP250数据情况。
# 生成带辅助线的散点图矩阵,hue:分类
sns.pairplot(df[['score', 'people_num', 'year', 'country', 'rank']], hue='country', kind='reg', diag_kind='kde', size=1.5)
plt.show()
在这里能观察数据的拟合线及上下浮动范围,更加直观的了解变量间的情况。
不过国家分类倒是没什么发现,可能与数据样本过少有关。
/ 03 / 总结
本次只是一个简单的相关分析案例,里面涉及太多的数学知识我就不赘述了。
看了这本书我才知道,我要学的东西真的多...
不过能结合之前的相关案例去分析,我觉得就很不错了。
能够学以致用,有自己的想法。
- Java8 Lambda表达式与Stream API (一):Lambda表达式你要知道的Java8 匿名内部类、函数式接口、lambda表达式与Stream API都在这里
- iOS runtime探究(五): 从runtime开始深入weak实现机理你要知道的runtime都在这里
- Java8 Lambda表达式与Stream API (二): Stream API的使用你要知道的Java8 匿名内部类、函数式接口、lambda表达式与Stream API都在这里
- Python Garbage Collection 与 Objective-C ARCPython GC 与 Objective-C ARC
- SpringMVC DispatcherServlet执行流程及源码分析你要知道的SpringMVC DispatcherServlet执行流程及源码分析都在这里
- iOS runtime探究(三): 从runtime开始理解OC的属性property你要知道的runtime都在这里
- jQuery选择器大全(48个代码片段+21幅图演示)1
- KVC 使用方法详解及底层实现你要知道的KVC、KVO、Delegate、Notification都在这里
- jQuery选择器大全(48个代码片段+21幅图演示)2
- 神经网络-感知器
- NSNotificationCenter 通知的使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里
- Protocol与Delegate 使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里
- iOS多线程——你要知道的GCD都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
- NSCopying和NSCoding对象序列化反序列化基础详解你要知道的NSCopying、NSCoding协议及对象序列化和反序列化都在这里
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Thinkphp5框架ajax接口实现方法分析
- android MediaRecorder实现录屏时带录音功能
- php根据地址获取百度地图经纬度的实例方法
- Android 代码一键实现银行卡绑定功能
- Android 通过cmake的方式接入opencv的方法步骤
- Yii框架响应组件用法实例分析
- Android开发学习实现简单计算器
- Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
- Android 8.1隐藏状态栏图标的实例代码
- Android制作登录页面并且记住账号密码功能的实现代码
- Yii框架分页技术实例分析
- PHP命名空间与自动加载机制的基础介绍
- Flutter下Android Studio配置gradle的方法
- Flutter 实现整个App变为灰色的方法示例
- Android studio开发小型对话机器人app(实例代码)