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

相关文章

来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2170
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3929
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3255
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4074
来自专栏落花落雨不落叶

canvas画简单电路图

65611
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2932
来自专栏魂祭心

原 canvas绘制clock

4294
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2626
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5676

扫码关注云+社区