零基础学编程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 条评论
登录 后参与评论

相关文章

来自专栏顶级程序员

Caffe源码直播

0.预告 开源项目名称:Caffe—— deep learning framework 语言:C++ 时间:10月22日(周六)早11:00-12:00 参与方...

3838
来自专栏AI科技评论

开发 | 如何为TensorFlow和PyTorch自动选择空闲GPU,解决抢卡争端

AI科技评论按:本文作者天清,原文载于其知乎专栏 世界那么大我想写代码,AI科技评论获授权发布。 项目地址:https://github.com/Quantum...

3638
来自专栏CNN

从Tensorflow模型文件中解析并显示网络结构图(CKPT模型篇)

上一篇文章《从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)》中介绍了如何从pb模型文件中提取网络结构图并实现可视化,本文介绍如何从CKPT模...

2093
来自专栏奇点大数据

Pytorch神器(4)

上一次,我们用最简短的篇幅讲述了用Pytorch实现线性回归的过程。整个程序仅仅用了约60多行就完成了一个线性回归机器学习程序的全部内容。这次的文章,我们来对上...

733
来自专栏机器之心

入门 | GPU是如何优化运行机器学习算法的?

33714
来自专栏大数据挖掘DT机器学习

除了写烂的手写数据分类,你会不会做自定义图像数据集的识别?!

网上看的很多教程都是几个常见的例子,从内置模块或在线download数据集,要么是iris,要么是MNIST手写识别数字,或是UCI ,数据集不需要自己准备,所...

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

详解依存树的来龙去脉及用法

这开始介绍依存树的来龙去脉! 来历 a.简单的短语分词(正向逆向最大匹配,n-gram,机器学习...)(以单个词为重点) 比如: 猴子喜欢吃香蕉。->猴子 喜...

35710
来自专栏鸿的学习笔记

写给开发者的机器学习指南(七)

Classifying email as spam or ham (NaiveBayes)

1001
来自专栏机器之心

教程 | 如何利用C++搭建个人专属的TensorFlow

27810
来自专栏ATYUN订阅号

ImageAI:专为没有机器学习背景的程序员设计,让你十行代码搞定对象检测

计算机视觉是AI的一个重要领域。计算机视觉是计算机和软件系统的科学,能够识别和理解图像和场景。计算机视觉还包括图像识别,对象检测,图像生成,图像超分辨率等多个方...

834

扫码关注云+社区