python机器学习入门——科学计算库(pandas)(代码片段)

零陵上将军_xdr 零陵上将军_xdr     2022-12-19     493

关键词:

(所需要的资料均已上传)

Pandas介绍

Pandas简介

2008年WesMcKinney开发出的库
专门用于数据挖掘的开源python库
以Numpy为基础,借力Numpy模块在计算方面性能高的优势
基于matplotlib,能够简便的画图
独特的数据结构

Pandas数据结构

Pandas中一共有三种数据结构,分别为:Series、DataFrame和MultiIndex(老版本中叫Panel )。

其中Series是一维数据结构,DataFrame是二维的表格型数据结构,MultiIndex是三维的数据结构。

Series

Series是一个类似于一维数组的数据结构,它能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成。

Series的创建

import pandas as pd

pd.Series(data=None, index=None, dtype=None)

参数:

data:传入的数据,可以是ndarray、list等
index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
dtype:数据的类型

1、指定内容,默认索引

import pandas as pd
pd.Series(np.arange(10))


2、指定索引

pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5])


3、通过字典数据创建

 pd.Series('red':100, 'blue':200, 'green': 500, 'yellow':1000)

Series的属性

为了更方便地操作Series对象中的索引和数据,Series中提供了两个属性indexvalues

index:

import pandas as pd
series= pd.Series('red':100, 'blue':200, 'green': 500, 'yellow':1000)
print(series.index)

values:

import pandas as pd
series= pd.Series('red':100, 'blue':200, 'green': 500, 'yellow':1000)
print(series.values)

DataFrame

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引

行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

DataFrame的创建

pd.DataFrame(data=None, index=None, columns=None)

参数:

index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。

创建学生成绩案例:

import pandas as pd
import numpy as np

subjects = ["数据结构", "操作系统", "面向对象", "大数据导论", "计算机组成原理","计算机网络"]
students=["学生".format(i) for i in range(1,11)]
data=pd.DataFrame(np.random.randint(50,100,(10,6)),index=students,columns=subjects)
print(data)

![在这里插入图片描述](https://img-blog.csdnimg.cn/c015dbb684c94f048e824115d5bd7e1f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzcxOTM5,size_16,color_FFFFFF,t_70

DataFrame的属性

1、shape

data.shape

print(data.shape)

运行结果:

2、index

DataFrame的行索引列表

print(data.index)

运行结果:

3、columns
DataFrame的列索引列表:

print(data.columns)

运行结果;

4、values

直接获取其中array的值

print(data.values)


5、.T
转置

print(data.T)

6、head(n):显示前n行内容

如果不补充参数,默认5行。填入参数N则显示前N行

print(data.head())


7、tail(n):显示后n行内容

如果不补充参数,默认5行。填入参数N则显示后N行

data.tail()

DatatFrame索引的设置

以下所有案例多数是引用上面的学生课表案例

1、修改行列索引值

data.index=["教师".format(i) for i in range(1,11)]
# 错误方法
data.index[3] = '教师3'

2、 重设索引

reset_index(drop=False)

drop:默认为False,不删除原来索引,如果为True,删除原来的索引值

3、以某列值设置为新的索引

 set_index(keys, drop=True)
keys : 列索引名成或者列索引名称的列表
drop : boolean, default True.当做新的索引,删除原来的列

设置新索引案例:
1、创建

df = pd.DataFrame('month': [1, 4, 7, 10],
                    'year': [2012, 2014, 2013, 2014],
                    'sale':[55, 40, 84, 31])


2、以月份设置新的索引

df=df.set_index('month')
print(df)


3、设置多个索引,以年和月份

df = df.set_index(['year', 'month'])
print(df)

基本数据操作

为了更好的理解这些基本操作,我们将读取一个真实的股票数据。

import pandas as pd
# 将数据全部显示,没有省略号
pd.set_option('display.max_columns',None)
pd.set_option('display.max_rows',None)
pd.set_option('display.width',10000)

data=pd.read_csv(r'C:\\Users\\Administrator\\Desktop\\stock_day.csv')
data=data.set_index(["date"])

索引操作

Numpy当中我们已经讲过使用索引选取序列和切片选择,pandas也支持类似的操作,也可以直接使用列名、行名称,甚至组合使用。

1、直接使用行列索引(先列后行)

获取’2018-02-27’这天的’open’的结果

print(data['open']['2018/2/27'])


2、结合loc或者iloc使用索引

获取从’2018-02-27’:‘2018-02-22’,'open’的结果

print(data.loc['2018/2/27':'2018/2/22', 'open'])
print("--------------------------")
data.iloc[:3, :5]

3、使用ix组合索引
获取行第1天到第4天,[‘open’, ‘close’, ‘high’, ‘low’]这个四个指标的结果

# 使用ix进行下表和名称组合做引
data.ix[0:4, ['open', 'close', 'high', 'low']]

# 推荐使用loc和iloc来获取的方式
data.loc[data.index[0:4], ['open', 'close', 'high', 'low']]
data.iloc[0:4, data.columns.get_indexer(['open', 'close', 'high', 'low'])]

赋值操作

对DataFrame当中的close列进行重新赋值为1

# 直接修改原来的值
data['close'] = 1
# 或者
data.close = 1

排序

排序有两种形式,一种对于索引进行排序,一种对于内容进行排序。

DataFrame排序

df.sort_values(by= , ascending= )

单个键或者多个键进行排序,
参数:
by:指定排序参考的键
ascending:默认升序
ascending=False:降序
ascending=True:升序

# 按照开盘价大小进行排序 , 使用ascending指定按照大小排序
data.sort_values(by="open", ascending=True).head()
# 按照多个键进行排序
data.sort_values(by=['open', 'high'])

使用df.sort_index给索引进行排序

# 对索引进行排序
data.sort_index()

Series排序

使用series.sort_values(ascending=True)进行排序

data['p_change'].sort_values(ascending=True).head()

使用series.sort_index()进行排序

data['p_change'].sort_index().head()

DataFrame运算

算术运算

add(other)
比如进行数学运算加上具体的一个数字

print(data['open'].add(1).head())

sub(other) :减去一个数

逻辑运算

逻辑运算符号

例如筛选data[“open”] > 23的日期数据

print(data['open']>23)


完成多个逻辑判断:

data[(data["open"] > 23) & (data["open"] < 24)].head()

逻辑运算函数

1、query(expr)
通过query使得刚才的过程更加方便简单

data.query("open<24 & open>23").head()

2、isin(values)

例如判断’open’是否为23.53和23.85

# 可以指定值进行一个判断,从而进行筛选操作
data[data["open"].isin([23.53, 23.85])]

统计运算

describe

综合分析: 能够直接得出很多统计结果,count, mean, std, min, max 等

print(data.describe())

统计函数

countNumber of non-NA observations
sum求和
mean平均值
median中位数
min最小值
max最大值
mode众数
abs绝对值
prod乘积
std标准差
var方差
idmax最大值索引
idmin最小值索引

累计统计函数

函数作用
cumsum计算前1/2/3/…/n个数的和
cummax计算前1/2/3/…/n个数的最大值
cummin计算前1/2/3/…/n个数的最小值
cumprod计算前1/2/3/…/n个数的积

例:对p_change进行求和,计算股票的涨跌

import matplotlib.pyplot as plt
import pandas as pd

data=pd.read_csv(r'C:\\Users\\Administrator\\Desktop\\stock_day.csv')
data=data.set_index(["date"])
data=data.sort_index()
stock_rise=data['p_change']
stock_rise.cumsum().plot()
plt.show()

自定义运算

apply(func, axis=0)

func:自定义函数
axis=0:默认是列,axis=1为行进行运算

文件读取与存储

CSV

pandas.read_csv(filepath_or_buffer, sep =’,’, usecols )

filepath_or_buffer:文件路径
sep :分隔符,默认用","隔开
usecols:指定读取的列名,列表形式

# 读取文件,并且指定只获取'open', 'close'指标
data = pd.read_csv("./data/stock_day.csv", usecols=['open', 'close'])

DataFrame.to_csv(path_or_buf=None,sep=’,’,columns=None,header=True,index=True, mode=‘w’, encoding=None)

path_or_buf :文件路径
sep :分隔符,默认用","隔开
columns :选择需要的列索引
header :boolean or list of string, default True,是否写进列索引值
index:是否写进行索引
mode:‘w’:重写, ‘a’ 追加

# 选取10行数据保存,便于观察数据
data[:10].to_csv("./data/test.csv", columns=['open'])

HDF5

从h5文件当中读取数据
pandas.read_hdf(path_or_buf,key =None, kwargs)**

path_or_buffer:文件路径
key:读取的键
return:Theselected object

DataFrame.to_hdf(path_or_buf, key, \\kwargs)

JSON

pandas.read_json(path_or_buf=None, orient=None, typ=‘frame’, lines=False)
将JSON格式准换成默认的Pandas DataFrame格式
例:

json_read = pd.read_json(r'C:\\Users\\Administrator\\Desktop\\Sarcasm_Headlines_Dataset.json', orient="records", lines=True)

DataFrame.to_json(path_or_buf=None, orient=None, lines=False)
将Pandas 对象存储为json格式

高级处理-缺失值处理

判断缺失值是否存在

如果缺失值的标记方式是NaN,判断数据中是否包含NaN:

pd.isnull(df),
pd.notnull(df)

案例:

import pandas as pd

pd.set_option('display.max_columns',None)
pd.set_option('display.max_rows',None)
pd.set_option('display.width',10000)

# 读取电影数据
movie = pd.read_csv(r'C:\\Users\\Administrator\\Desktop\\IMDB-Movie-Data.csv')

print(pd.notnull(movie))

存在缺失值nan,并且是np.nan

存在缺失值nan:

1、删除存在缺失值的:dropna(axis='rows')
    注:不会修改原数据,需要接受返回值

2、替换缺失值:fillna(value, inplace=True)
    value:替换成的值
    inplace:True:会修改原数据,False:不替换修改原数据,生成新的对象

1、删除
pandas删除缺失值,使用dropna的前提是,缺失值的类型必须是np.nan

# 不修改原数据
movie.dropna()

# 可以定义新的变量接受或者用原来的变量名
data = movie.dropna()

2、替换缺失值

for i in movie.columns:
    if np.all(pd.notnull(movie[i])) == False:
        print(i)
        movie[i].fillna(movie[i].mean(), inplace=True)

高级处理-数据离散化

为什么要离散化

连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。

什么是数据的离散化

连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值。

离散化有很多种方法,这使用一种最简单的方式去操作

原始人的身高数据:165,174,160,180,159,163,192,184
假设按照身高分几个区间段:150~165, 165~180,180~195

这样我们将数据分到了三个区间段,我可以对应的标记为矮、中、高三个类别,最终要处理成一个"哑变量"矩阵。

股票的涨跌幅离散化

1、读取股票的数据

# 读取电影数据
data = pd.read_csv(r'C:\\Users\\Administrator\\Desktop\\IMDB-Movie-Data.csv')
p_change= data['p_change']

2、将股票涨跌幅数据进行分组

pd.qcut(data, q):
对数据进行分组将数据分组,一般会与value_counts搭配使用,统计每组的个数

series.value_counts():统计分组次数

# 自行分组
qcut = pd.qcut(p_change, 10)
# 计算分到每个组数据个数
print(qcut.value_counts())


自定义区间分组:

pd.cut(data, bins)
# 自己指定分组区间
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = pd.cut(p_change, bins)
# 自己指定分组区间
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = pd.cut(p_change, bins)
print(p_counts)

股票涨跌幅分组数据变成one-hot编码

什么是one-hot编码?
把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1.其又被称为热编码。

pandas.get_dummies(data, prefix=None)
# 得出one-hot编码矩阵
dummies = pd.get_dummies(p_counts, prefix="rise")
print(dummies)

高级处理-合并

pd.concat实现数据合并

pd.concat([data1, data2], axis=1)

按照行或列进行合并,axis=0为列索引,axis=1为行索引
# 按照行索引进行
pd.concat([data, dummies], axis=1)

pd.merge

pd.merge(left, right, how=‘inner’, on=None)

可以指定按照两组数据的共同键值对合并或者左右各自
left: DataFrame
right: 另一个DataFrame
on: 指定的共同键
how:按照什么方式连接

高级处理-交叉表与透视表

交叉表:交叉表用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)
pd.crosstab(value1, value2)
透视表:透视表是将原有的DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数
data.pivot_table()
DataFrame.pivot_table([], index=[])

案例:探究股票的涨跌与星期几有关?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option('display.max_columns',None)
pd.set_option('display.max_rows',None)
pd.set_option('display.width',10000)

data=pd.read_csv(r'C:\\Users\\Administrator\\Desktop\\stock_day.csv')

time=data.set_index(keys=["date"])

week=pd.to_datetime(time.index).weekday+1

data['week']=week

data['posi_neg'] = np.where(data["p_change"]>0,1,0)

count=pd.crosstab(data['week'],data['posi_neg'])

sum=count.sum(axis=1).astype(np.float32)
pro=count.div(sum,axis=0)
pro.plot(kind='bar',stacked=True)
plt.savefig('2')
plt.show()

print(data.pivot_table(['posi_neg'], index='week'))


高级处理-分组与聚合

什么分组与聚合

分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的

python机器学习入门——科学计算库(matplotlib)(代码片段)

目录Matplotlib基础实现一个简单的Matplotlib画图—以折线图为例matplotlib.pyplot模块图形绘制流程:折线图绘制与显示基本绘图功能基本绘图添加自定义x,y刻度添加网格显示添加描述信息图像保存一个坐标系中绘制多个图像多次plo... 查看详情

numpy快速入门笔记

我正以Python作为突破口,入门机器学习相关知识。出于机器学习实践过程中的需要,我快速了解了一下NumPy这个科学计算库的使用方法。下面记录相关学习笔记。简介NumPy是一个科学计算库。结合Python生态系统的其它库,如SciPy、... 查看详情

python机器学习入门之导学+无监督学习

PythonScikit-learn*一组简单有效的工具集*依赖Python的NumPy,SciPy和matplotlib库*开源可复用sklearn库的安装DOS窗口中输入pipinstall**NumPy(开源科学计算库),SciPy(集成多种数学算法和函数模块)和matplotlib(提供大量绘图工具)库基础上开发的,因... 查看详情

python技术栈

...的操作;Orange:基于图形界面的机器学习程序,也可以用Python脚本来操作调用;Scikit-Learn:前面说了,这是Python在机器学习领域里面的代表作。尤其是它的文档,完全可以当成机器学习的参考资料来阅读了,曾经我向朋友推荐的... 查看详情

kaggle入门题titanic

...到的库:科学计算库numpy,数据分析包pandas,画图包matplotlib,机器学习库sklearn大体步骤分为三步:1.数据分析2.交叉验证3.预测并输出结果 导入库函数importnumpyasnpimportpandasaspaimportmatplotlib.pyplotasplfromsklear 查看详情

python常用包及主要功能

参考技术APython常用包:NumPy数值计算、pandas数据处理、matplotlib数据可视化、sciPy科学计算、Scrapy爬虫、scikit-learn机器学习、Keras深度学习、statsmodels统计建模计量经济。NumPy是使用Python进行科学计算的基础包,Numpy可以提供数组支... 查看详情

学习python爬虫推荐书籍

1、基础书籍:《Python编程》豆瓣评分:9.1分推荐指数:★★★★★推荐理由:架构非常漂亮,针对所有层次的Python读者而作的Python入门书,完美描绘了Python的“景象”,没有教科书式的分章节阐释语法,没有太复杂的概念延伸... 查看详情

ai:python与人工智能相关的库/框架(机器学习&深度学习&数据科学/计算机视觉/自然语言处理)的简介案例应用之详细攻略

AI:Python与人工智能相关的库/框架(机器学习&深度学习&数据科学/计算机视觉/自然语言处理)的简介、案例应用之详细攻略目录Python与人工智能相关的库/框架(机器学习&深度学习&数据科学/计算机视觉/自然语言处理... 查看详情

python基础库及机器学习笔记(代码片段)

1.介绍本节将主要介绍Python中的常用第三方库。这些库都是实现了各种计算功能的开源库,它们极大地丰富了Python的应用场景和计算能力,这里主要介绍NumPy、pandas和Matplotlib三个库的基础使用。其中NumPy是Python用来进行矩... 查看详情

python语言下的机器学习库

Python语言下的机器学习库Python是最好的编程语言之一,在科学计算中用途广泛:计算机视觉、人工智能、数学、天文等。它同样适用于机器学习Python语言下的机器学习库Python是最好的编程语言之一,在科学计算中用途广泛:计算... 查看详情

数据分析:工具篇numpynumpy介绍(代码片段)

...分析:工具篇】NumPy(1)NumPy介绍)NumPy介绍NumPy(NumericalPython)是Python的一个开源的科学计算库,它主要用于处理大规模的多维数组以及矩阵操作。NumPy是在Python中进行科学计算的基础库,许多其他的科学计算库都是基于NumPy进行... 查看详情

机器学习入门之使用numpy和matplotlib绘制图形(代码片段)

...法第一步就是先学会用numpy了。numpy是一个第三方的开源python库,他提供了许多科学的数值计算工具,尤其是大型矩阵计算,但使用配置非常简单,结合matplotlib能够非常方便的将计算结果展示成各种图形,如点状图,折线图,散... 查看详情

使用python探索和分析数据:入门的入门(代码片段)

在几十年的开源开发后,Python通过强大的统计和数值库提供丰富的功能:NumPy和Pandas简化了数据分析和操作Matplotlib提供引人注目的数据可视化效果Scikit-learn提供简单有效的预测性数据分析TensorFlow和PyTorch提供机器学习和深... 查看详情

《机器学习算法入门》即将上市出版,预计2020年6,7月份

...打造无缝平滑的兴奋的学习体验。本书的读者,只需具备Python语言的基础知识和简单了解过numpy、Pandas等科学基础库,不需要有数学基础,也不需要有机器学习或者AI的基础。相关院校和培训机构也可以将此书作为机器学习入门... 查看详情

机器学习必备手册

机器学习是计算机科学的一个子领域,在人工智能领域,机器学习逐渐发展成模式识别和计算科学理论的研究。从2016年起,机器学习到达了不合理的火热巅峰。但是,有效的机器学习是困难的,因为机器学习本身就是一个交叉... 查看详情

pandas高级数据分析快速入门之五——机器学习特征工程篇(代码片段)

Pandas高级数据分析快速入门之一——Python开发环境篇Pandas高级数据分析快速入门之二——基础篇Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇Pandas高级数据分析快速入门之四——数据可视化篇Pandas高级数据分析快速... 查看详情

pandas高级数据分析快速入门之五——机器学习特征工程篇(代码片段)

Pandas高级数据分析快速入门之一——Python开发环境篇Pandas高级数据分析快速入门之二——基础篇Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇Pandas高级数据分析快速入门之四——数据可视化篇Pandas高级数据分析快速... 查看详情

python基础:数据分析常用包

参考技术A本文重点介绍pyhon最常用的几个库:SymPy是python一个科学计算库,有一套强大的科学计算体系,覆盖了从基本的符号运算到计算数学、代数学、离散数学、量子物理等多个领域。可以完成诸如多项式求值、求极限、解方... 查看详情