数据科学技术期末复习

数据科学技术

第二章 多维数据结构与运算

2.1.1.一维数组对象

import numpy as np

names= np.array(['王伟','李兆欣','齐一迪'])

/1 查看数组的属性

names.ndim//数组维度

names.size//数组元素个数 names.dtype//数组数据类型

/2 数组切片

names[[0,2,4]]//这是找到索引为0,2,4的元素

names[0:2:4]//这是数组切片,start=0,end=2,step=4

2.1.2 二维数组对象

1.查看数组属性

多了一个scores.shape//查看数组的行数和列数

2.二维数组切片

arr[row , column] //访问第n行m列的元素

scores[[1,3],[0,1]]==array([60,82])//注意!!这个是访问(1,0)和(3,1)

scores[[1,3]]//访问了第一行和第三行的全部元素,后面列的:可以省略

scores[:, [0,1]]//访问了0列和1列的全部元素

scores[ [0,3] , 1:4]//访问了第0行和第3行里 1-3列的全部元素

scores[[1,3]][:,[0,1 )

2.1.3 创建多维数组的常用方法
  1. arange() 函数:生成指定范围的数组

    np.arange(0,11)=[0,1,2,3,4,5,6,7,8,9,10]

    np.arrage(3,11,2)=[3,5,7,9]

    np.arrange(0.3,1.5,0.3)=[0.3,0.6,1.2]

  2. reshape()函数:将一维数组转换成指定的多维数组

    np.arange(0,15).reshape(3,5)=[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]]

  3. zeros(),ones():生成指定大小的0 ,1数组

    np.zeros((3,4))=[[0.,0.,0.,0.],[0.,0.,0.,0.],[0.,0.,0.,0.],[0.,0.,0.,0.]]

2.2 多维数组运算
2.2.1基本算术运算

1.二维数组与标量运算

scores+5//整体加5

scores*2//整体乘2

2.二维数组与一维数组运算

bonus=np.array([3,4,5,3,6,7,2])

scores+bonus

3.选定元素运算

scores[names=='李兆欣',subjects=='English']+5

2.2.2 函数与矩阵运算

1.通用函数

一元函数:

abs,fabs(float绝对值);sqrt;square;exp(计算各元素指数);log,log10;sign(计算各元素正负号);ceil(大于等于该值的最小整数),floor(小于等于该值的最大整数); cos,cosh,sin,sinh,tan,tanh;

使用方法:np.abs(scores)

二元函数:

add(scores,5); substract(scores,5); multiply; divide; power(A,B)//A的B次方;

mod;copysign(把第二个数组中的值的符号复制给第一个数组中的值);equal,not_equal(A,B)

2.聚集函数

sum,mean,min,max,argmin(最小值索引),argmax,cumsum(从0开始向前累加各元素),cumprod(从0开始累乘)

eg. scores.sum(axis=0)//按列相加 =1按行相加

scores[names=='李兆欣'].mean()

查询英语成绩最高的学生姓名: names[scores[:,subjects=='English'].argmax()]

2.2.3 随机数组生成函数

random //随机生成[0,1)之间的浮点值

randint//随机生成范围内的一组整数 eg. np.random.randint(0,2,size=(5,6))//范围是0-1的5行6列数组

uniform//随机生成范围内服从均匀分布的一组浮点数

choice//在给定序列内随机选择元素( 相关参数:

  • size:从元组,列表,数组中取多少个数据,不写,默认为1个

  • replace:是否可以取相同元素:True:可以,False:不可以,默认是True

  • p:实际是个数组,大小与数组相同,用来规定选取数组中每个元素的概率,默认为概率相同。注意:概率相加等于1 )

normal//随机生成一组服从给定均值和方差的正态分布随机数(

normal(loc=0.0, scale=1.0, size=None),

更一般的形式,返回均值为loc,标准差为scale的正态分布,shape由size参数决定。)

np.random.normal(a,b,size=?)//a是均值,b是方差

2.3 随机游走轨迹模拟
steps=10
rndwlk=np.random.randint=(0,2,size=(2,steps))
>>>rndwlk
array([[0,1,1,1,1,1,1,0,0,1],[0,1,0,1,0,0,0,0,1,0]])
rndwlk=np.where(rndwlk>0,1,-1)
'''np.where(condition,x,y) 当where内有三个参数时,第一个参数表示条件,当条件成立时where方法返回x,当条件不成立时where返回y'''
>>>rndwlk
array([[-1,1,1,1,1,1,1,-1,-1,1],[-1,1,-1,1,-1,-1,-1,-1,1,-1]])
#计算每步游走后的位置
position=rndwlk.cumsum(axis=1)#按照行求累加和
>>>position
array([[-1,0,1,2,3,4,5,4,3,4],[-1,0,-1,0,-1,-2,-3,-4,-3,-4],dtype=int32])
#计算每步游走后距离原点的距离
dist=np.sqrt(position[0]**2+position[1]**2)
np.set_printoptions(precision=4)#显示四位小数
#计算游走后距离原点最大值,最小值和均值
>>>dists.max() dists.min() dists.mean()
#统计游走过程中离原点大于平均距离的次数
>>>(dists>dists.mean().sum())
#绘图展示游走轨迹
import matplotlib.pyplot as plt
plt.plot(x,y,c='g',marker='*')#画折线图
plt.scatter(0,0,c='r',marker='o')#单独画原点
plt.text(.1,-.1,'origin')#添加原点说明文字
plt.scatter(x[-1],y[-1],c='r',marker='o')#单独画终点
plt.text(x[-1]+.1,y[-1]-.1,'stop')#添加终点说明文字
plt.show()

第三章 数据汇总与统计

from pandas import Series,DataFrame

Series:

​
height=Series([187,190,185,178,185],index=['13','14','7','2','9'])
//height1=Series({'13':187,'14':190,'7':185,'2':178,'9':185})
>>>height[height.values>=186]
#添加新球员
a=Series([190,187],index=['23','5'])
newheight = height.append(a)
#删除离队球员
newheight = height.drop(['13','9'])
#更改球员球衣号码
#注意!!当Series对象的index本身就为数字,基于位置序号的访问需要使用iloc实现
>>>height.iloc[0]

DataFrame:

1.创建方式:DataFrame(data,index=[...],columns=[...])

2.数据选取:

#基于索引 
obj[col]#选取某列
obj[colList]#选取某几列
obj.loc[index,col]#选取某行某列
obj.loc[indexlist,collist]
#基于位置序号
obj.iloc[iloc,colc]#选取某行某列
obj.iloc[iloclist,colist]
obj.iloc[a:b,c:d]
#条件筛选
obj.loc[condition,collist]#条件和索引
obj.iloc[condition,cloclist]#条件和位置序号

3.增加行/列

增加行:

eg1. students.loc[4,:]=[20,188,75,2000]

eg2. new_data = {'Name': 'David', 'Age': 28} # 使用 append 方法追加新的行 df = df.append(new_data, ignore_index=True)

eg3. new_row = pd.Series(['David', 28], index=df.columns) # 使用 append 方法追加新的行 df = df.append(new_row, ignore_index=True)

增加列:

eg1. df['City'] = ['New York', 'San Francisco', 'Los Angeles']

eg2. # 创建一个 Series city_series = pd.Series(['New York', 'San Francisco', 'Los Angeles'], name='City') # 将 Series 添加到 DataFrame df['City'] = city_series

4.删除学生信息

students.drop(1,axis=0)#删除第一行

students.drop('expense',axis=1,inplace=true)#删除expense列 inplace=true代表彻底删除

students.drop([1,2],axis=0)#删除多行

3.3 数据文件读写
3.3.1

import pandas as pd

1.读取CSV文件

pd.read_csv(file,sep=',',header='infer',index_col(数字,用来作为行索引的列序号),skiprows(需要忽略的行数))

2.读取TXT文件

image-20231111152957913

3.读取CSV文件

pd.to_csv(file,sep,mode,index(是否导出行索引,默认为TRUE),header(是否导出列索引))

3.3.2读取Excel文件

pd.read_excel(file,sheetname...)

3.4数据清洗
3.4.1缺失数据处理

1.数据滤除

DataFrame.dropna(axis,how='all',thresh(只留下有效数据个数大于等于thresh的值),....)

eg. data.dropna(subset=['name', 'age', 'citizenship'], how='all', inplace=True)

2.数据填充

DataFrame.fillna(value,method('ffill'表示用同列前一行(forward)的数据填充缺失值,'bfill'用后一行(behind)),inplace(是否修改原始数据的值,默认为false), ...)

3.4.2去除重复数据

DataFrame.drop_duplicates()

3.5 数据规整化
3.5.1 数据合并

1.行数据追加

pd.concat(objs,axis, ...)

eg. newstu=pd.concat([stu1,stu2],axis=0)

2.列数据连接

pd.merge(x,y,how,left_on(左数据要连接的键),right_on)

参数说明:how定义了四种合并方式:

inner:内连接,连接两数据对象键值交集的行

outer:并集

left:左连接,取出x的全部行,连接y中匹配的键值行

right:右连接,取出y的全部行连接x中匹配的

3.5.2 数据排序

1.排序

DataFrame.sort_values(by(列索引), ascending(True升序FALSE降序) , inplace)

2.排名

DataFrame.rank(axis,method(并列取值,min,max,mean),ascending)

3.6 统计分析

3.6.1通用函数与运算

df.T   #DataFrame转置
df1+df2    #按照行列索引相加得到并集,NaN填充
df1.add(df2,fill_value = 0)  #按照行列索引相加,NaN用指定值填充
df1.add/sub/mul/div
df-sr   #DataFrame的所有行
df*n    

3.6.2 统计函数

sr.value_counts()    #统计频数
sr.describe()       #返回基本统计量和分位数
sr1.corr(sr2)       #sr1和sr2的相关系数
df.count()          #统计每列数据的个数
df.max(),df.min()
df.idmax(),df.idmin()
df.sum()  #按行或列求和
df.mean(),df.median()
df.quantile()#四分位
df.var()#方差 
df.std()#标准差
df.mode() #众数
df.cumsum() #从0开始向前累加各元素
df.cov() #计算协方差矩阵
pd.crosstab(df[col1],df[col2])#pandas函数,交叉表,计算分组的频数
group=pd.groupby([collist])#分组分析
group.aggregate({'身高':np.mean,'月生活费':np.max})
pd.crosstab(tab1(分组列),tab2(计数列))

3.6.3相关性分析

stu['身高'].corr(stu['体重'])

0.6757399

stu[['身高','体重','成绩']].corr()

身高 体重 成绩

身高 1.0000 XX XX

体重 XX 1.0000 XX

成绩 XX XX 1.0000

df.isnull() # 查看空缺值,可以识别 null / None / Nan df.isnull().any(axis=0) # 查看每行是否有空缺值 df.isnull().any(axis=1) # 查看每列是否有空缺值 df.isnull().sum() # 统计每行空缺值的个数 df.isnull().sum(axis=1) # 统计每列有空缺值的个数 df.isnull().sum().sum() # 统计整个df的缺失值 df['列名'].isnull().sum(axis=0) # 统计某一列的缺失值 df[df.isnull().values==True] # 查看有缺失值的行,不去重 df[df.isnull().T.any()] # 查看有缺失值的行,去重

第四章 数据可视化

4.1

import matplotlib.pyplot as plt

from pandas import DataFrame

DataFrame.plot()函数的常用函数
kind:line(折线图,默认值),bar(垂直柱状图),barh(水平柱状图),hist(直方图),box(箱型图),pie(饼图),scatter(散点图)
title
color:'b':blue
marker
xlim,ylim
legend(添加图例说明)

2.多子图

plt.figure()

ax1=figure.add_subplot(numsRows(绘图区域被分成几行),numCols(几列),plotNum(绘制的ax1图在哪个区域))

3.设置图元属性和说明

plt.title

plt.xlabel,ylabel

plt.xlim,ylim(设置x,y轴刻度范围)

plt.xticks,yticks(设置x轴y轴刻度值)

plt.legend(图例说明)

plt.grid(显示网格线)

plt.text(添加注解文字)

plt.annotate(添加注释)

4.保存图表到文件

figure.savefig(filename,dpi(图片分辨率,默认为100),bbox_inches(图表需要保存的部分,设置为'tight'可以剪除当前图表周围的空白部分))

savefig()需在show()之前才能保存

4.2 可视化图形探索

4.2.1 绘制常用图形

eg.绘制y = sin(x),y=e的x次方函数图

import numpy as np
​
x= np.linspace(0,6.28,50)
​
y=np.sin(x)
​
plt.plot(x,y,color='r')
​
plt.plot(x,np.exp(-x),c='b')
  1. 散点图

    散点图描述两个一维数据序列之间的关系,可以表示两个指标的相关关系。通过散点图可以分析两个数据序列之间是否具有线性关系。

    DataFrame.plot.scatter(x,y,title,grid,xlim,ylim,lable....)

散点图矩阵:

pd.plotting.scatter_matrix(data,diagonal, ...)

3.柱状图

柱状图用多个柱体描述单个总体处于不同状态的数量,并按状态序列的顺序排序。

pandas使用plot()函数绘制柱状图,格式如下:

DataFrame.plot(kind=('bar'为垂直柱状图,’barh'为水平柱状图), xerr,yerr ,stacked(是否为堆叠图))

4.折线图

折线图用线条描述事物的发展变化和趋势

kind='line' 详见4.1

5.直方图

用于描述总体的频数分布情况。每个区间上长方形的高度表示该区间样本的频率,面积表示频数。

Series.plot(kind='hist', bins(横坐标区间个数),...)

在直方图中分箱的数量与数据集大小和分布有关,通过改变bins数量可以改变分布的离散化程度。

6.密度图

采用平滑的峰值函数来拟合概率密度函数,对真实的概率分布曲线进行模拟。密度图常和直方图画在一起,这时直方图需要标准化(在原有基础上加上normed/density=Ture)。

7.饼图

清楚的反映出部分与部分,部分与整体之间的数量关系

Series.plot(kind='pie',explode(列表,表示各扇形块离开中心的距离。)startangle(起始绘图角度),autopct(百分比格式'%1.1f%%指小数点前后各一位')

8.箱型图

适合表达数据的分位数分布,帮助找到异常值。异常值用'o'表示。

kind='box'

可以用.plot,也可以用.boxplot(by(分组的列名),...)

第五章 机器学习建模分析
import numpy as np
import pandas as pd
data=pd.read_csv('data\advertising.csv',index_col=0)
X=data.iloc[:,0:3].values.astype(float)
y=data.iloc[:,3].values.astype(float)
from sklearn.linear_model import LinearRegression
linreg=LinearRegression()
linreg.fit(X,y)
print(linreg.intercept_,linreg.coef_)#截距和回归系数
import joblib
joblib.dump(linreg,'linreg.pkl')#将回归模型保存至文件
import numpy as np
load_linreg = joblib.load('linreg.pkl')#从文件读取模型
new_X = np.array([[130.1,87.8,69.2]])
print("预期销售:",load_linreg.predict(new_X))
#5.2.3回归性能评估分析
from sklearn.model_selection import train_test_split
​
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.35, random_state=1) #0.35是测试集的比例,1代表每次得到相同样本划分
linregTr = LinearRegression()
linregTr.fit(X_train, y_train)
print(linregTr.intercept_,linregTr.coef_)
from sklearn import metrics
y_train_pred = linregTr.predict(X_train)
y_test_pred = linregTr.predict(X_test)
train_err = metrics.mean_squared_error(y_train, y_train_pred)
test_err = metrics.mean_squared_error(y_test, y_test_pred)
#计算决定系数,评估性能
predict_score = linregTr.score(X_test,y_test)

5.3.2 决策树

实现函数格式为:

clf.tree.DecisionTreeClassifier()

clf.fit(X,y)

clf.score(X,y)

predicted_y = clf.predict(X)

metrics.confusion_matrix(y,predicted_y)#混淆矩阵计算

metrics.classification_report(y , predicted_y)#分类性能报告

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值