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

相关文章

来自专栏新智元

【重磅】Jeff Dean等提出自动化分层模型,优化CPU、GPU等异构环境,性能提升超 60%

谷歌大脑Jeff Dean等人最新提出一种分层模型,这是一种灵活的端到端方法,用于优化CPU、GPU等的自动化设备配置。该方法在多个主要神经网络模型上测...

3117
来自专栏人工智能

完全云端运行:使用谷歌CoLaboratory训练神经网络

选自Medium 作者:Sagar Howal 机器之心编译 参与:路雪 Colaboratory 是一个 Google 研究项目,旨在帮助传播机器学习培训和研...

6918
来自专栏利炳根的专栏

学习笔记CB001:NLTK库、语料库、词概率、双连词、词典

聊天机器人知识主要是自然语言处理。包括语言分析和理解、语言生成、机器学习、人机对话、信息检索、信息传输与信息存储、文本分类、自动文摘、数学方法、语言资源、系统评...

27710
来自专栏从流域到海域

自相关和偏自相关的简单介绍

原文地址:https://machinelearningmastery.com/gentle-introduction-autocorrelation-part...

8297
来自专栏机器学习算法工程师

深度学习必备---用Keras和直方图均衡化---数据增强

作者:王抒伟 编辑:王抒伟 算了 爱看多久看多久 在读这技术文章之前,请大家想象一个标准河南口音的娃在读这篇文章,那么你不知不觉,你的嘴角就上扬咯。 俺、...

1.6K4
来自专栏AI科技评论

开发 | Facebook开源 PyTorch版 fairseq,准确性最高、速度比循环神经网络快9倍

AI科技评论按:今年5月,FacebookAI研究院(FAIR)发表了他们的研究成果fairseq,在fairseq中,他们使用了一种新型的卷积神经网络来做语言...

3379
来自专栏从流域到海域

A Gentle Introduction to Autocorrelation and Partial Autocorrelation (译文)

A Gentle Introduction to Autocorrelation and Partial Autocorrelation 自相关和偏自相关的简单...

2976
来自专栏机器学习算法与理论

调用Dlib库进行人脸关键点标记

       昨天调试了人脸识别(classifier_webcam)这个程序,效果不错,响应速度也挺快。按照http://blog.csdn.net/u011...

4159
来自专栏PPV课数据科学社区

大数据竞赛平台-Kaggle入门篇

本文作者: wopon_ 来源:36大数据 本文长度为1500字,建议阅读4分钟 这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且独立完成一个竞赛...

4318
来自专栏AI科技大本营的专栏

无人驾驶汽车系统入门:基于深度学习的实时激光雷达点云目标检测及ROS实现

近年来,随着深度学习在图像视觉领域的发展,一类基于单纯的深度学习模型的点云目标检测方法被提出和应用,本文将详细介绍其中一种模型——SqueezeSeg,并且使用...

1411

扫码关注云+社区