零基础学编程037:小数据分析

R语言内置强大的向量运算,是搞数据分析的强大的编程语言,而Python也毫不逊色。今天就试着分析一下考试成绩表中两门科目的相关性。

问题描述:

有一个CSV文件,包含着600名学生在一次考试后的几门课程的考试成绩,想分析一下数学和物理成绩的相关关系。CSV数据样例:

num,class,chinese,math,english,physical,chemical,politics,biology,history,geo,pe 158,3,99,120,114,70,49.5,50,49,48.5,49.5,60 442,7,107,120,118.5,68.6,43,49,48.5,48.5,49,56 249,4,98,120,116,70,47.5,47,49,47.5,49,60 ......

各列含义为:学号、班级、语文、数学、英语、物理、化学、政治、生物、历史、地理、体育。

读出CSV数据

CSV是一种逗号分隔的文本文件(Comma-Separated Values),在《零基础学编程019:生成群文章目录》介绍过如何读取CSV文件。这里换一种方法,因为CSV本身是一种文本文件,而numpy模块包中也可以方便地读入这种数据,请搜索“numpy read csv”可以找出相关文章。

import numpy as np
scores = np.genfromtxt('scores.csv', delimiter=',', names=True)
x = scores['math']
y = scores['physical']

这里需要解释的是第2行,delimiter指明分隔符为逗号;names=True,表示文件中包含标题行,后面就可以使用列名来访问各列数据了。

画散点图

在《零基础学编程012:画出复利曲线图》这一课里,我们用matplotlib画曲线图,同样我们可以用它画出散点图。

import matplotlib.pyplot as plt
plt.scatter(x, y)
plt.xlabel('math')
plt.ylabel('pyhsical')
plt.title('math ~ physical')
plt.show()

核心代码就一行:plt.scatter(x, y),后面几行分别设置x轴名称、y轴名称、图名。

加上线性拟合线

我在谷歌中准备搜索matplotlib linear时,它自动弹出了搜索建议“matplotlib linear regression line”

第二条就是我们想要的答案,在plt.show()之前加入两行代码:

a, b = np.polyfit(x, y, 1)
plt.plot(x, a*x+b, '-')

polyfit表示最小二乘法的多项式拟合,1表示拟合为一阶线性函数。

写个函数,画出任意两个科目的散点分布图

import numpy as np
import matplotlib.pyplot as plt

def plot_scatter(scores, subject1, subject2) :
    ''' 画出两门科目的散点分布图和拟合直线 '''
    x = scores[subject1]
    y = scores[subject2]
    plt.scatter(x, y)
    plt.xlabel(subject1)
    plt.ylabel(subject2)
    plt.title(subject1 + ' ~ ' + subject2)
    a, b = np.polyfit(x, y, 1)
    plt.plot(x, a*x+b, '-')
    plt.show()

scores = np.genfromtxt('scores.csv', delimiter=',', names=True)
plot_scatter(scores, 'math', 'chinese')

数学和语文的相关情况:

可以看出数理不分家,数学成绩好的一般物理也好,但数学和语文的相关性就不太明显了。

小结:

  • CSV是一种逗号分隔的文本文件
  • csv模块包中的reader()函数可以读CSV文件
  • numpy中的genfromtxt()函数也可以读CSV文件
  • matplotlib中的scatter()函数可以画散点分布图
  • numpy中的polyfit()可以计算多项式拟合的系数

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-03-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏tkokof 的技术,小趣及杂念

'24点'编码小感

之前看到了一道四则运算相关的程序题,遂而想到了24点游戏,觉得有趣,就想自己随手编写了一个,起初觉得应该比较简单,但实际的路途却并不平坦~

712
来自专栏灯塔大数据

每周学点大数据 | No.48 计算子图同构

No.48期 计算子图同构 Mr. 王:我们再来看一个例子——计算子图同构。这个问题给定(节点有标签)数据图G和查询图P,找到G 中和P 同构的子图。这是一个...

2858
来自专栏数说工作室

在SAS里玩穿越 | 【SAS Says·扩展篇】IML:穿越 | 数说·语言

一直以来,大众了解的SAS都是数据集操作,使用的方法是数据步和过程步。但其实,SAS这个庞大的系统中还隐藏了另一个平行世界——IML,在这个世界里,你需要一个像...

2616
来自专栏数据结构与算法

士兵站队问题

士兵站队问题 【问题描述】        在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点由整数坐标(x,y)表示。士兵们可以沿网格边上、下、左、...

2787
来自专栏韩伟的专栏

第三章:数字魔法

本文与前期推送“你真的理解数码技术吗?”“字节的秘密”是同一系列。 3.1压缩魔法 在数码世界中,容量和速度总是紧缺资源,我们总是希望能用尽量少的字节,装下更...

2685
来自专栏数说工作室

【SAS Says】基础篇:基本统计、相关分析与回归分析

特别说明:本节【SAS Says】基础篇:SAS宏初步,用的是数说君学习《The little SAS book》时的中文笔记,我们认为这是打基础的最好选择 S...

2955
来自专栏深度学习自然语言处理

一分钟搞懂的算法之BPE算法

昨天总结实验数据分析的时候发现一个机器翻译的其中的一个脚本,其中用到的算法就是BPE算法,刚开始感觉很高大上的,因为总是听到带上算法帽子的东西就觉得666。等自...

5668
来自专栏程序猿DD

第四章 正则表达式回溯法原理

第四章 正则表达式回溯法原理 学习正则表达式,是需要懂点儿匹配原理的。 而研究匹配原理时,有两个字出现的频率比较高:“回溯”。 听起来挺高大上,确实还有很多人...

1886
来自专栏FreeBuf

Z3Py在CTF逆向中的运用

Z3是Microsoft Research开发的高性能定理证明器。Z3拥有者非常广泛的应用场景:软件/硬件验证和测试,约束求解,混合系统分析,安全性研究,生物学...

772
来自专栏数据小魔方

左手用R右手Python系列——数据塑型与长宽转换

今天这篇是R语言 with Python系列的第三篇,主要跟大家分享数据处理过程中的数据塑型与长宽转换。 其实这个系列算是我对于之前学习的R语言系列的一个总结,...

3166

扫描关注云+社区