线性回归分析,Python如何实现excel转sqlite

图片 1

python环境的安装配置就不说了,个人喜欢pydev的开发环境。

线性回归分析应该是我们最常用的分析模型了,根据身高和体重预测年龄

本文实例讲述了Python实现excel转sqlite的方法。分享给大家供大家参考,具体如下:

importnumpyasnpimportxlrdimportxlwtxls=xlwt.Workbook(encoding='utf-8')sht=xls.add_sheet(u'sheet1',cell_overwrite_ok=True)workbook=xlrd.open_workbook(r'E:\7.11-1平均.xlsx')table=workbook.sheets()[int(0)]nrows=table.nrowsncols=table.ncolsdefcreate_x(size,rank):x=[]foriinrange(int(2)*int(size) int(1)):m=i-sizerow=[m**jforjinrange(rank)]x.append(row)x=np.mat(x)returnxdefsavgol(data,window_size,rank):m=int((window_size-int(1))/int(2))#odata=data[:]#处理边缘数据,首尾增加m个首尾项fortinrange(m):data.insert(int(0),data[int(0)])data.insert(len(data),data[len(data)-int(1)])#创建X矩阵x=create_x(int(m),int(rank))#计算加权系数矩阵Bb=(x*(x.T*x).I)*x.Ta0=b[m]a0=a0.T#计算平滑修正后的值ndata=[]y=[]foriinrange(len(data)):forjinrange(window_size):y.append(data[i j])y1=np.mat(y)*a0y1=float(y1)ndata.append(y1)y.clear()returnndataforpinrange(int(1),nrows):l=[]forninrange(int(1),ncols):alldata=table.col_values(n)l.append(alldata[p])savgol(l,int(5),int(3))foroinrange(int(1),ncols):sht.write(p,o,ndata[o])xls.save('F:\python\chengxu\excel\123.xls')

python解析excel需要使用第三方的库,这里选择使用xlrd

1.回归分析的基本概念

Python环境的安装配置就不说了,个人喜欢pydev的开发环境。

先看excel内容:

§回归分析假定自变量对因变量的影响强度是始终保持不变的,如公式所示:

python解析excel需要使用第三方的库,这里选择使用xlrd

 

图片 2

先看excel内容:

然后是生成的数据库:

公式(1)

图片 3

 

对于因变量的预测值可以被分解成两部分:

然后是生成的数据库:

下面是源代码:

常量(constant):x取值为零时y的平均估计量,可以被看成是一个基线水平

图片 4

[python]
#!/usr/bin/python  
# encoding=utf-8  
 
'''''
Created on 2013-4-2
 
@author: ting
''' 
from xlrd import open_workbook 
import sqlite3 
import types 
 
def read_excel(sheet): 
    # 判断有效sheet  
    if sheet.nrows > 0 and sheet.ncols > 0: 
        for row in range(1, sheet.nrows): 
            row_data = [] 
            for col in range(sheet.ncols): 
                data = sheet.cell(row, col).value 
                # excel表格内容数据类型转换  float->int,unicode->utf-8  
                if type(data) is types.UnicodeType: data = data.encode("utf-8") 
                elif type(data) is types.FloatType: data = int(data) 
                row_data.append(data) 
            check_data_length(row_data) 
 
# 检查row_data长度  
def check_data_length(row_data): 
    if len(row_data) == 3: 
        insert_sqlite(row_data) 
 
def insert_sqlite(row_data): 
    # 打开数据库(不存在时会创建数据库)  
    con = sqlite3.connect("test.db") 
    cur = con.cursor() 
    try: 
        cur.execute("create table if not exists contacts(_id integer primary key " 
                       "autoincrement,name text,age integer,number integer)") 
        # 插入数据不要使用拼接字符串的方式,容易收到sql注入攻击  
        cur.execute("insert into contacts(name,age,number) values(?,?,?)", row_data) 
        con.commit() 
    except sqlite3.Error as e: 
        print "An error occurred: %s", e.args[0] 
    finally: 
        cur.close 
        con.close 
 
 
xls_file = "test.xls" 
book = open_workbook(xls_file) 
 
for sheet in book.sheets(): 
    read_excel(sheet) 
print "------ Done ------" 

回归部分:它刻画因变量Y的取值中,由因变量Y与自变量X的线性关系所决定的部分,即可以由X直接估计的部分

下面是源代码:

#!/usr/bin/python
# encoding=utf-8

其中的参数和含义如下:

 

'''
Created on 2013-4-2

Ŷ:y的估计值(所估计的平均水平),表示给定自变量的取值时,根据公式算得的y的估计值;

 代码如下

@author: ting
'''
from xlrd import open_workbook
import sqlite3
import types

a:常数项,表示自变量取值均为0时因变量的平均水平,即回归直线在y轴上的截距

#!/usr/bin/python

def read_excel(sheet):
    # 判断有效sheet
    if sheet.nrows > 0 and sheet.ncols > 0:
        for row in range(1, sheet.nrows):
            row_data = []
            for col in range(sheet.ncols):
                data = sheet.cell(row, col).value
                # excel表格内容数据类型转换  float->int,unicode->utf-8
                if type(data) is types.UnicodeType: data = data.encode("utf-8")
                elif type(data) is types.FloatType: data = int(data)
                row_data.append(data)
            check_data_length(row_data)

       (多数情况下没有实际意义,研究者也不关心)

# encoding=utf-8

# 检查row_data长度
def check_data_length(row_data):
    if len(row_data) == 3:
        insert_sqlite(row_data)

b:回归系数,在多变量回归中也称偏回归系数。自变量x 改变一个单位,y估计值的改变量。即回归直线       的斜率

'''''

def insert_sqlite(row_data):
    # 打开数据库(不存在时会创建数据库)
    con = sqlite3.connect("test.db")
    cur = con.cursor()
    try:
        cur.execute("create table if not exists contacts(_id integer primary key "
                       "autoincrement,name text,age integer,number integer)")
        # 插入数据不要使用拼接字符串的方式,容易收到sql注入攻击
        cur.execute("insert into contacts(name,age,number) values(?,?,?)", row_data)
        con.commit()
    except sqlite3.Error as e:
        print "An error occurred: %s", e.args[0]
    finally:
        cur.close
        con.close

2.其他的一些参数和概念

Created on 2013-4-2

xls_file = "test.xls"
book = open_workbook(xls_file)

残差:估计值和每一个实测值之间的差被称为残差。它刻画了因变量y除了自变量x以外的其它所有未进入               该模型,或未知但可能与y有关的随机和非随机因素共同引起的变异,即不能由x直接估计的部分

@author: ting

for sheet in book.sheets():
    read_excel(sheet)
print "------ Done ------"

模型适用条件:§线性趋势  §独立性  §正态性  §方差齐性

'''

 

                        如果只是探讨自变量与因变量间的关系,则后两个条件可以适当放宽

fromxlrdimportopen_workbook

python解析excel需要使用第三方的库,这里选择使用xlrd 先看excel内容: 然后是生成...

样本量 :根据经验,记录数应当在希望分析的自变量数的20倍以上为宜

importsqlite3

偏回归系数:

importtypes

      相应的自变量上升一个单位时,因变量取值的变动情况,即自变量对因变量的影响程度

defread_excel(sheet):

标化偏回归系数:量纲问题,忽略量纲之后的回归系数

  # 判断有效sheet

决定系数:

  ifsheet.nrows >0andsheet.ncols >0:

        相应的相关系数的平方,用R2表示,它反映因变量y的全部变异中能够通过回归关系被自变量解释的比例

    forrowinrange(1, sheet.nrows):

3.分析步骤

      row_data=[]

3..1自变量与因变量的相关趋势(散点图)进行描述性分析,找出强影响点

      forcolinrange(sheet.ncols):

3.2对数据的分布,分析变量的正态性,和方差齐次性的问题

        data=sheet.cell(row, col).value

3.3进行线性回归建模

        # excel表格内容数据类型转换 float->int,unicode->utf-8

3.4考虑残差之间是否独立和残差的分布是否符合正态分布

        iftype(data)istypes.UnicodeType: data=data.encode("utf-8")

P-P图,残差分布图

        eliftype(data)istypes.FloatType: data=int(data)

4.具体实现

        row_data.append(data)

4.1一般求解

      check_data_length(row_data)

-----------python的实现 (1)一般求解

# 检查row_data长度

图片 5

defcheck_data_length(row_data):

4.1(-)

  iflen(row_data)==3:

图片 6

    insert_sqlite(row_data)

4.1(2)

definsert_sqlite(row_data):

--------python的实现 (1)一般求解-代码

  # 打开数据库(不存在时会创建数据库)

#线性回归误差平方和最小

  con=sqlite3.connect("test.db")

from  numpy import  *

  cur=con.cursor()

import  xlrd

  try:

import  xlwt

    cur.execute("create table if not exists contacts(_id integer primary key "

import  matplotlib.pyplot as plt

            "autoincrement,name text,age integer,number integer)")

#导入数据

    # 插入数据不要使用拼接字符串的方式,容易收到sql注入攻击

def loadDataSet(x=r"C:Usersmei-huangDesktopdata2.xlsx",y=u'回归数据'):

    cur.execute("insert into contacts(name,age,number) values(?,?,?)", row_data)

    data=xlrd.open_workbook(x) #excel的位置

    con.commit()

    try:

  exceptsqlite3.Error as e:

        table = data.sheet_by_name(y)  # 通过名称获取  #excel的工作表名 列名放置在第一行

    print"An error occurred: %s", e.args[0]

    except:

  finally:

        print("no sheet  in %s named  sheet1"

本文由新葡萄京娱乐场8522发布于计算机编程,转载请注明出处:线性回归分析,Python如何实现excel转sqlite

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。