python并不是虚拟机,运行python文件的是python解释器.python解释器的工作原理如下:
第一段:过程概述
①.、python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机会从编译得到的PyCodeObject对象中一条一条执行字节码指令,并在当前的上下文环境中执行这条字节码指令,从而完成程序的执行.Python虚拟机实际上是在模拟操作中执行文件的过程.PyCodeObject对象中包含了字节码指令以及程序的所有静态信息,但没有包含程序运行时的动态信息——执行环境(PyFrameObject)
.pyc文件是字节码在磁盘上的表现形式.
推荐学习<
第二段:关于.pyc文件
PyCodeObject对象的创建时机是模块加载的时候,即import.
①.、执行 python test.py 会对test.py进行编译成字节码并解释执行,但不会生成test.pyc
也可以执行命令 python -m test.py 这样,就生成了test.pyc
利用python进行线性回归
理解什么是线性回归
线性回归也被称为最小二乘法回归(Linear Regression, also called Ordinary Least-Squares (OLS) Regression).它的数学模型是这样的:
y = a+ b* x+e
其中,a 被称为常数项或截距;b 被称为模型的回归系数或斜率;e 为误差项.a 和 b 是模型的参数.
当然,模型的参数只能从样本数据中估计出来:
y'= a' + b'* x
我们的目标是选择合适的参数,让这一线性模型最好地拟合观测值.拟合程度越高,模型越好.
那么,此时此刻呢的问题就是,我们如何判断拟合的质量呢?
这一线性模型可以用二维平面上的一条直线来表示,被称为回归线.
模型的拟合程度越高,也即意味着样本点围绕回归线越紧密.
如何计算样本点与回归线之间的紧密程度呢?
高斯和勒让德找到的方法是:被选择的参数,应该使算出来的回归线与观测值之差的平房和最小.用函数表示为:
这被称为最小二乘法.最小二乘法的原理是这样的:当预测值和实际值距离的平方和最小时,就选定模型中的两个参数(a 和 b).这一模型并不一定反映解释变量和反应变量真实的关系.但它的计算成本低;相比复杂模型更容易解释.
模型估计出来后,我们要回答的问题是:
整个模型是否能显著预测因变量的变化?(F 检验)
每个自变量是否能显著预测因变量的变化?(t 检验)
首先回答第一个问题.为了评估模型的拟合程度如何,我们必须有一个可以比较的基线模型.
如果让你预测一个人的体重是多少?在没有任何额外信息的情况下,你可能会用平均值来预测,尽管会存在一定误差,但总比瞎猜好.
现在,如果你知道他的身高信息,你的预测值肯定与平均值不一样.额外信息相比平均值更能准确地预测被预测的变量的能力,就代表模型的解释力大小.
上图中,SSA 代表由自变量 x 引起的 y 的离差平方和,即回归平方和,代表回归模型的解释力;SSE 代表由随机因素引起的 y 的离差平方和,即剩余平方和,代表回归模型未能解释的部分;SST 为总的离差平方和,即我们仅凭 y 的平均值去估计 y 时所产生的误差.
用模型能够解释的变异除以总的变异就是模型的拟合程度:
第二个问题,我们的模型是否显著预测了 y 的变化?
假设 y 与 x 的线性关系不明显,那么 SSA 相对 SSE 占有较大的比例的概率则越小.换句话说,在 y 与 x 无线性关系的前提下,SSA 相对 SSE 的占比越高的概率是越小的,这会呈现一定的概率分布.统计学家告诉我们它满足 F 分布,就像这样:
第三个问题,每个自变量是否能显著预测因变量的变化?换句话说,回归系数是否显著?
回归系数的显著性检验是围绕回归系数的抽样分布(t 分布)来进行的,推断过程类似于整个模型的检验过程,不赘言.
实际上,对于只有一个自变量的一元线性模型,模型的显著性检验和回归系数的检验是一致的,但对于多元线性模型来说,二者就不能等价了.
利用 statsmodels 进行最小二乘回归
#导入相应模块
In [1]: import numpy as np
#将数据导入 pandas 的 dataframe 对象,第一列(年份)作为行标签
#查看头部数据
GNP.deflator ? ? ?GNP ?Unemployed ?Armed.Forces ?Population ?Year ?\
Employed
#设置预测变量和结果变量,用 GNP 预测 Employed
#为模型增加常数项,即回归线在 y 轴上的截距
#执行最小二乘回归,X 可以是 numpy array 或 pandas dataframe(行数等于数据点个数,列数为预测变量个数),y 可以是一维数组(numpy array)或 pandas series
In [10]: est=sm.OLS(y,X)
使用 OLS 对象的 fit() 方法来进行模型拟合
In [11]: est=est.fit()
#查看模型拟合的结果
#查看最终模型的参数
#选择 100 个从最小值到最大值平均分布(equally spaced)的数据点
#计算预测值
#分别给 x 轴和 y 轴命名
多元线性回归(预测变量不止一个)
我们用一条直线来描述一元线性模型中预测变量和结果变量的关系,而在多元回归中,我们将用一个多维(p)空间来拟合多个预测变量.下面表现了两个预测变量的三维图形:商品的销量以及在电视和广播两种不同媒介的广告预算.
数学模型是:
图中,白色的数据点是平面上的点,黑色的数据点事平面下的点.平面的颜色是由对应的商品销量的高低决定的,高是红色,低是蓝色.
利用 statsmodels 进行多元线性回归
In [1]: import pandas as pd
TV ?Radio ?Newspaper ?Sales
In [10]: est=sm.OLS(y,X).fit()
In [11]: est.summary()
Out[11]:
你也可以使用 statsmodels 的 formula 模块来建立多元回归模型
处理分类变量
性别或地域都属于分类变量.
利用 dataframe 的 pop 方法将 chd 列单独提取出来
sbp ?tobacco ? ldl ?adiposity ?famhist ?typea ?obesity ?alcohol ?\
row.names
age ?chd
famhist
分类变量的编码方式有许多,其中一种编码方式是虚拟变量编码(dummy-encoding),就是把一个 k 个水平的分类变量编码成 k-1 个二分变量.在 statsmodels 中使用 C 函数实现.
处理交互作用
随着教育年限(education)的增长,薪酬 (wage) 会增加吗?这种影响对男性和女性而言是一样的吗?
这里的问题就涉及性别与教育年限的交互作用.
换言之,教育年限对薪酬的影响是男女有别的.
#导入相关模块
#导入数据,存入 dataframe 对象
Wage ?Education ?Sex
由于性别是一个二分变量,我们可以绘制两条回归线,一条是 sex=0(男性),一条是 sex=1(女性)
#绘制散点图
In [10]: plt.ylabel('wage')
#linspace 的作用是生成从最小到最大的均匀分布的 n 个数
以上两条线是平行的.这是因为分类变量只影响回归线的截距,不影响斜率.
此时此刻呢我们可以为回归模型增加交互项来探索交互效应.也就是说,对于两个类别,回归线的斜率是不一样的.
#使用*代表我们的回归模型中除了交互效应,也包括两个变量的主效应;如果只想看交互效应,可以用:代替,但通常不会只看交互效应
参考资料:
DataRobot | Ordinary Least Squares in Python
DataRoboe | Multiple Regression using Statsmodels
os模块中的system()函数可以方便地运行其他程序或者脚本.
语法如下:os.system(command)
其参数含义如下所示:
command? 要执行的命令,相当于在Windows的cmd窗口中输入的命令.如果要向程序或者脚本传递参数,可以使用空格分隔程序及多个参数.
扩展资料
Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code.这种机制的基本思想跟Java,.NET是一致的.然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine.
这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远.或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine.
基于C的Python编译出的字节码文件,通常是.pyc格式.
除此之外,Python还可以以交互模式运行,比如主流操作系统Unix/Linux、Mac、Windows都可以直接在命令模式下直接运行Python交互环境.直接下达操作指令即可实现交互操作.
学习Python,如果不是系统学习,自学总会遇到很多弯路,但是看到书以后,还是会从头看到尾,但是不知道重点在哪里
学习方法:
先确定学习的思想
确定学习的方向
确定学习的重点
①确定学习思想
学习编程,学的不是代码,代码可以给你,但是给你了,你看得懂吗? 我们学的是一个编程思路
制定爬取内容
选取目标
准备环境,上面就提前说了,因为这个本来就是在搞爬虫,所以...
分析该网站的html结构,得到url
爬取数据
分析数据
封装数据(组装数据),弄成自己想要的样子
所以思路是最重要的,我们有了思路,那么我们操作起来,就相对来说,毕竟简单了.
Python的就业方向里面有很多值得选择,如:web、爬虫、运维、黑客、人工智能等.
简析:
Python web:主要用于后端
爬虫:数据挖掘
运维:主要是涨工资和满足公司要求
黑客、人工智能:不推荐,一旦决定了,就要一直走下去,没有回头路,当然一旦成功,金钱大把大把
入门学习,重点:
Python语言的控制结构
列表、字典、元组
字符串处理
变量声明和定义
函数
面向对象编程:封装、继承、虚拟函数、接口、多继承、模板
面向对象编程:异常处理
确定放向后(以目前最热门的web、爬虫为例):
①web
重点学习:
①HTML、css、JS
重点学习
①并发编程
第一:找到一个好的教程
可以买本书,跟着书学习,书上的例子可以跟着写,课后的习题尽量做.没有买书的朋友,可以从网上找教程,在浩瀚如烟的互联网上,没有你找不到的,只有你想不到的.
彻底0基础的朋友,建议先确定自己是否对Python感兴趣,兴趣是好的老师,只有在兴趣的驱动下你才能坚定不移克服学习上遇到的困难.课课家Python从入门到精通视频教程
第二,循序渐进
既然是零基础,就不要着急了.你需要做的是,盯住一个教程,从基础语法,变量类型开始学起,此时此刻呢是运算符,条件语句,循环,字符串,list,元组,字典,日期时间,文件读写,函数,模块,异常处理.
第三,照葫芦画瓢
这个过程中,如果遇到不懂的,不要深究.不懂就问,不会就敲.能看懂多少就懂多少,重要的是按照教程编写代码,你看不懂的,可能照着例子写了,就懂了.再者,有许多知识,其实对非计算机行业的人来说,过于专业了,你也没有必要懂.
第四,贵在坚持
你永远不能叫醒一个装睡的人,也永远帮不了一个不努力的人.任何工作要做到优秀都需要不断的付出和学习,想要成为一名优秀的程序员也是一样,如果你热爱Python,热爱这门语言就应该持续的走下去,人真的去努力.
reset_index用来重置索引,因为有时候对dataframe做处理后索引可能是乱的.
drop=True就是把原来的索引index列去掉,重置index.
drop=False就是保留原来的索引,添加重置的index.
两者的区别就是有没有把原来的index去掉.
此外还有一个参数:inplace
inplace=False(默认)表示原数组不变,对数据进行修改之后结果给新的数组.
inplace=True表示直接在原数组上对数据进行修改.
扩展资料:
Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code.这种机制的基本思想跟Java,NET是一致的.然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine.