注:为满足财经高校师生对数据科学技术强烈的学习需求和图书馆空间改造的需要,中国财经教育资源共享联盟计划开展“数据科学空间”项目,本次财经数据科学实战训练营是项目建设内容的重要组成部分。
本次训练营的录像以及其他课程相关文件,都会在财经慕课平台发布: https://www.cjmooc.com.cn
第 3 章 Python 编程分析基础
3.1 Python 数据类型
3.1.1 Python 对象
3.1.2 数据的基本类型
3.1.3 标准数据类型
3.2 数值分析库 numpy
3.2.1 一维数组(向量)
3.2.2 二维数组(矩阵)
3.2.3 数组的操作
3.3 数据分析库 pandas
3.3.1 序列:Series
3.3.2 数据框DataFrame
3.3.3 数据框的读写
3.3.4 数据框的操作
3.4 Python 编程运算
3.4.1 基本运算
3.4.2 控制语句
3.4.3 函数定义
3.4.4 面向对象
#结果多项输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
#查看数据对象
%who
#生成数据对象
x=10.12 #创建对象 x
%who
#删除数据对象
del x #删除对象 x
%who
(1)数值型
n=10 #整数
n#无格式输出,相当于 print(n)
print("n=",n) #有格式输出
x=10.234 #实数
print(x)
print("x=%10.5f"%x)
(2)逻辑型
a=True;a
b=False;b
10>3
10<3
(3)字符型
s = 'I love Python';s
s[7]
s[2:6]
s+s
s*2
(1)List(列表)
list1 =[] # 空列表
list1
list1 = ['Python', 786 , 2.23, 'R', 70.2]
list1 # 输出完整列表
list1[0] # 输出列表的第一个元素
list1[1:3] # 输出第二个至第三个元素
list1[2:] # 输出从第三个开始至列表末尾的所有元素
list1 * 2 # 输出列表两次
list1 + list1[2:4] # 打印组合的列表
X=[1,3,6,4,9];X
sex=['女','男','男','女','男']
sex
weight=[67,66,83,68,70];
weight
(3)Dictionary(字典)
{} #空字典
dict1={'name':'john','code':6734,'dept':'sales'};dict1 #定义字典
dict1['code'] # 输出键为'code' 的值
dict1.keys() # 输出所有键
dict1.values() # 输出所有值
dict2={'sex': sex,'weight':weight}; dict2 #根据列表构成字典
import numpy as np #加载数组包
np.array([1,2,3,4,5]) #一维数组
np.array([1,2,3,np.nan,5]) #包含缺失值的数
np.arange(9) #数组序列
np.arange(1,9,0.5) #等差数列
np.linspace(1,9,5) #等距数列
np.array([[1,2],[3,4],[5,6]]) #二维数组
A=np.arange(9).reshape((3,3));A #形成 3×3 矩阵
(1)数组的维度
A.shape
(2)空数组
np.empty([3,3])
(3)零数组
np.zeros((3,3)) #零矩阵
(4) 1数组
np.ones((3,3)) #1矩阵
(5)单位阵
np.eye(3)
(2)生成序列
import pandas as pd #加载数据分析包
pd.Series() #生成空序列
(3)根据列表构建序列
X=[1,3,6,4,9]
S1=pd.Series(X);S1
S2=pd.Series(weight);S2
S3=pd.Series(sex);S3
(4)序列合并
pd.concat([S2,S3],axis=0) #按行并序列
pd.concat([S2,S3],axis=1) #按列并序列
(5)序列切片
S1[2]
S3[1:4]
(1)生成数据框
pd.DataFrame()
(2)根据列表创建数据框
pd.DataFrame(X)
pd.DataFrame(X, columns=['X'], index=range(5))
pd.DataFrame(weight,columns=['weight'], index=['A','B','C','D','E'])
(3)根据字典创建数据框
df1=pd.DataFrame({'S1':S1,'S2':S2,'S3':S3}); df1
df2=pd.DataFrame({'sex':sex,'weight':weight},index=X);df2
(4)增加数据框列
df2['weight2']=df2['weight']**2; df2
(5)删除数据框列
del df2['weight2']; df2
(6)缺失值处理
df3=pd.DataFrame({'S2':S2,'S3':S3},index=S1);df3
df3.isnull() #是缺失值则返回 True,否则返回 False
df3.isnull().sum() #返回每列包含的缺失值的个数
df3.dropna() #直接删除含有缺失值的行,多变量谨慎使用
(7)数据框排序
df3.sort_index() #按 index 排序
df3.sort_values(by='S3') #按列值排序
(1)从剪切板上读取,先在 DaPy_data.xls 数据文件的【BSdata】表中选取 A1:H53,复制,然后在 Python 中读取数据。
import pandas as pd
BSdata=pd.read_clipboard(); #从剪切板上复制数据
BSdata[:5] #BSdata.head() 见下节
(2)读取 csv 格式数据
# BSdata=pd.read_csv("BSdata.csv",encoding='utf-8') #注意中文格式
BSdata=pd.read_csv("BSdata.csv",encoding='gbk') #注意中文格式
BSdata[6:9]
(3)读取 Excel 格式数据
BSdata=pd.read_excel('DaPy_data.xlsx','BSdata');BSdata[-5:]
#将数据框 BSdata 保存到 BSdata.csv 文档中
BSdata.to_csv('BSdata1.csv')
#将数据框 BSdata 保存到BSdata1.xlsx 文档中
BSdata.to_excel('BSdata1.xlsx',index=False)
(1)数据框显示
BSdata.info() #数据框信息
BSdata.head() #显示前 5 行
BSdata.tail() #显示后 5 行
(2)数据框列名(变量名)
BSdata.columns #查看列名称
(3)数据框行名(样品名)
BSdata.index #数据框行名
(4)数据框维度
BSdata.shape #显示数据框的行数和列数
BSdata.shape[0] #数据框行数
BSdata.shape[1] #数据框列数
(5)数据框值(数组)
BSdata.values[:5] #数据框值数组
(1)“.”法或[' ']:
BSdata.身高 #取一列数据,BSdata['身高']
BSdata[['身高','体重']] #取两列数据
(2)下标法:
BSdata.iloc[:,2] #取 1 列
BSdata.iloc[:,2:4] #取 3、4 列
BSdata.loc[3] #取 1 行
BSdata.loc[3:5] #取 3 至 5 行
BSdata[BSdata['身高']>180]
BSdata[(BSdata['身高']>180) & (BSdata['体重']<80)]
(1)生成新的数据框
BSdata['体重指数']=BSdata['体重']/(BSdata['身高']/100)**2
round(BSdata[:5],2)
(2)数据框的合并 concat()
pd.concat([BSdata.身高, BSdata.体重],axis=0) # 按行合并 axis=0
pd.concat([BSdata.身高, BSdata.体重],axis=1) #按列合并 axis=1
BSdata.iloc[:3,:5].T #数据框转置 .T
for i in range(1,5):
print(i)
fruits = ['banana', 'apple', 'mango']
for fruit in fruits:
print('当前水果 :', fruit)
for var in BSdata.columns:
print(var)
a = -100
if a < 100:
print("数值小于 100")
else:
print("数值大于 100")
-a if a<0 else a
x=[1,3,6,4,9,7,5,8,2]; x
def xbar(x):
n=len(x)
xm=sum(x)/n
return(xm)
xbar(x)
np.mean(x) #Python已内建这些函数命令,可直接使用
X=np.array([1,3,6,4,9,7,5,8,2]);X #列表数组
def SS1(x): #计算X的离均差平方和函数
n=len(x)
ss=sum(x**2)-sum(x)**2/n
return(ss)
SS1(X) #SS1(BSdata.身高)
def SS2(x): #返回多个值
n=len(x)
xm=sum(x)/n
ss=sum(x**2)-sum(x)**2/n
return[x**2,n,xm,ss] #return(x**2,n,xm,ss)
SS2(X) #SS2(BSdata.身高)
SS2(X)[0] #取第 1 个对象
SS2(X)[1] #取第 2 个对象
SS2(X)[2] #取第 3 个对象
SS2(X)[3] #取第 4 个对象
#可以使用 type 函数来查看数据或对象的类型
type(SS2(X))
type(SS2(X)[3])