Pandas:修订间差异
无编辑摘要 |
无编辑摘要 |
||
第1行: | 第1行: | ||
Pandas是数据分析和操作工具,[[Python]] | Pandas是数据分析和操作工具,[[Python]]语言的一个开源软件库,用于数据分析。 | ||
==简介== | ==简介== | ||
===安装和导入=== | ===安装和导入=== | ||
使用pip安装Pandas | |||
pip install pandas | |||
如果使用的是Anaconda等计算科学软件包,已经安装好了pandas库。 | |||
导入Pandas,在脚本顶部导入,一般写法如下: | |||
import pandas as pd | |||
查看Pandas版本: | |||
pd.__version__ | |||
==数据结构== | |||
pandas定义了2种数据类型,Series和DataFrame,大部分操作都在这两种数据类型上进行。 | |||
{{了解更多 | |||
|[https://pandas.pydata.org/docs/user_guide/dsintro.html Pandas 用户指南:数据结构] | |||
}} | |||
===Series=== | |||
Series是一组有标记的一维数组,能够保存任何数据类型(整数,字符串,浮点数,Python对象等)。轴标签列表称为<code>index</code>。 | |||
===DataFrame=== | |||
DataFrame是有标记的二维的数据结构,具有可能不同类型的列。由数据,行标签,列标签构成。 | |||
==Pandas绘图== | ==Pandas绘图== | ||
pandas绘图基于[[Matplotlib]],pandas的DataFrame和Series都自带生成各类图表的plot方法,能够方便快速生成各种图表。 | |||
{{了解更多 | |||
|[https://pandas.pydata.org/docs/user_guide/visualization.html pandas文档:用户指南 - 可视化] | |||
}} | |||
===基本图形=== | |||
====折线图==== | |||
plot方法默认生成的就是折线图。如prices是一个DataFrame的含有收盘价close列,绘制收盘价的折线图: | |||
<syntaxhighlight lang="python" > | |||
s = prices['close'] | |||
s.plot() | |||
#设置图片大小,使用figsize参数 | |||
s.plot(figsize=(20,10)) | |||
</syntaxhighlight> | |||
====条形图==== | |||
对于不连续标签,没有时间序列的数据,可以绘制条形图,使用以下两种方法: | |||
*使用plot()函数,设置kind参数为‘bar’ or ‘barh’, | |||
*使用plot.bar()函数,plot.barh()函数 | |||
<syntaxhighlight lang="python" > | |||
df.plot(kind='bar') #假设df为每天股票数据 | |||
df.plot.bar() | |||
df.resample('A-DEC').mean().volume.plot(kind='bar') #重采集每年成交量平均值,绘制条形图(volume为df的成交量列) | |||
df.plot.bar(stacked=True) #stacked=True表示堆积条形图 | |||
df.plot.barh(stacked=True) #barh 表示水平条形图 </nowiki> | |||
</syntaxhighlight> | |||
====直方图==== | |||
直方图使用plot.hist()方法绘制,一般为频数分布直方图,x轴分区间,y轴为频数。组数用参数bins控制,如分20组bins=20 | |||
<syntaxhighlight lang="python" > | |||
df.volume.plot.hist() #df股票数据中成交量volume的频数分布直方图。 | |||
df.plot.hist(alpha=0.5) #alpha=0.5 表示柱形的透明度为0.5 | |||
df.plot.hist(stacked=True, bins=20) #stacked=True表示堆积绘制,bins=20表示分20组。 | |||
df.plot.hist(orientation='horizontal') #orientation='horizontal' 表示水平直方图 | |||
df.plot.hist(cumulative=True) #表示累计直方图 | |||
df['close'].diff().hist() #收盘价上应用diff函数,再绘制直方图 | |||
df.hist(color='k', bins=50) #DataFrame.hist函数将每列绘制在不同的子图形上。 | |||
</syntaxhighlight> | |||
====箱型图==== | |||
箱型图可以使用plot.box()函数或DataFrame的boxplot()绘制。 | |||
参数: | |||
*color,用来设置颜色,通过传入颜色字典,如color={'boxes': 'DarkGreen', 'whiskers': 'DarkOrange', 'medians': 'DarkBlue', 'caps': 'Gray'} | |||
*sym,用来设置异常值样式,如sym='r+'表示异常值用'红色+'表示。 | |||
<syntaxhighlight lang="python" > | |||
df.plot.box() | |||
df[['close','open', 'high']].plot.box() | |||
#改变箱型颜色,通过传入颜色字典 | |||
color={'boxes': 'DarkGreen', 'whiskers': 'DarkOrange', 'medians': 'DarkBlue', 'caps': 'Gray'} | |||
df.plot.box(color=color, sym='r+') #sym用来设置异常值样式,'r+'表示'红色+' | |||
df.plot.box(positions=[1, 4, 5, 6, 8]) #positions表示显示位置,df有5个列, 第一列显示在x轴1上,第二列显示在x轴4上,以此类推 | |||
df.plot.box(vert=False) #表示绘制水平箱型图 | |||
df.boxplot() | |||
#绘制分层箱型图,通过设置by关键词创建分组,再按组,分别绘制箱型图。如下面例子,每列按A组,B组分别绘制箱型图。 | |||
df = pd.DataFrame(np.random.rand(10, 2), columns=['Col1', 'Col2']) | |||
df['x'] = pd.Series(['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B']) | |||
df.boxplot(by='x') | |||
#还可以再传入一个子分类,再进一步分组绘制。如: | |||
df.boxplot(column=['Col1', 'Col2'], by=['X', 'Y']) | |||
</syntaxhighlight> | |||
====散点图==== | |||
散点图使用DataFrame.plot.scatter()方法绘制。通过参数x,y指定x轴和y轴的数据列。 | |||
<syntaxhighlight lang="python" > | |||
df.plot.scatter(x='close', y='volume') #假如df为每日股票数据,图表示收盘价与成交量的散点图 | |||
#将两组散点图绘制在一张图表上,重新ax参数如 | |||
ax = df.plot.scatter(x='close', y='volume', color='DarkBlue', label='Group 1') #设置标签名label设置标名 | |||
df.plot.scatter(x='open', y='value', color='DarkGreen', label='Group 2', ax=ax) | |||
#c参数表示圆点的颜色按按volume列大小来渐变表示。 | |||
df.plot.scatter(x='close', y='open', c='volume', s=50) #s表示原点面积大小 | |||
df.plot.scatter(x='close', y='open', s=df['volume']/50000) #圆点的大小也可以根据某列数值大小相应设置。 | |||
</syntaxhighlight> | |||
====饼图==== | |||
饼图使用DataFrame.plot.pie()或Series.plot.pie()绘制。如果数据中有空值,会自动使用0填充。 | |||
===其他绘图函数=== | |||
这些绘图函数来自[https://pandas.pydata.org/pandas-docs/stable/reference/plotting.html pandas.plotting]模块。 | |||
====矩阵散点图(Scatter Matrix Plot)==== | |||
矩阵散点图(Scatter Matrix Plot)使用scatter_matrix()方法绘制 | |||
<syntaxhighlight lang="python" > | |||
from pandas.plotting import scatter_matrix #使用前需要从模块中导入该函数 | |||
scatter_matrix(df, alpha=0.2, figsize=(6, 6), diagonal='kde') #假设df是每日股票数据,会每一列相对其他每一列生成一个散点图。 | |||
</syntaxhighlight> | |||
====密度图(Density Plot)==== | |||
密度图使用Series.plot.kde()和DataFrame.plot.kde()函数。 | |||
df.plot.kde() | |||
====安德鲁斯曲线(Andrews Curves)==== | |||
安德鲁斯曲线 | |||
====平行坐标图(Parallel Coordinates)==== | |||
====Lag plot==== | |||
====自相关图(Autocorrelation Plot)==== | |||
自相关图 | |||
====自举图(Bootstrap plot)==== | |||
===绘图格式=== | |||
====预设置图形样式==== | |||
matplotlib 从1.5开始,可以预先设置样式,绘图前通过matplotlib.style.use(my_plot_style)。如matplotlib.style.use('ggplot') 定义ggplot-style plots. | |||
====样式参数==== | |||
大多数绘图函数,可以通过一组参数来设置颜色。 | |||
====标签设置==== | |||
可通过设置legend参数为False来隐藏图片标签,如 | |||
df.plot(legend=False) | |||
====尺度==== | |||
*logy参数用来将y轴设置对数标尺 | |||
*logx参数用来将x轴设置对数标尺 | |||
*loglog参数用来将x轴和y轴设置对数标尺 | |||
ts.plot(logy=True) | |||
====双坐标图==== | |||
两组序列同x轴,但y轴数据不同,可以通过第二个序列设置参数:secondary_y=True,来设置第二个y轴。 | |||
<syntaxhighlight lang="python" > | |||
#比如想在收盘价图形上显示cci指标: | |||
prices['close'].plot() | |||
prices['cci'].plot(secondary_y=True) | |||
#第二个坐标轴要显示多个,可以直接传入列名 | |||
ax = df.plot(secondary_y=['cci', 'RSI'], mark_right=False) #右边轴数据标签默认会加个右边,设置mark_right为False取消显示 | |||
ax.set_ylabel('CD scale') #设置左边y轴名称 | |||
ax.right_ax.set_ylabel('AB scale') #设置右边y轴名称 | |||
</syntaxhighlight> | |||
====子图==== | |||
DataFrame的每一列可以绘制在不同的坐标轴(axis)中,使用subplots参数设置,例如: | |||
df.plot(subplots=True, figsize=(6, 6)) | |||
====子图布局==== | |||
子图布局使用关键词layout设置, | |||
==资源== | ==资源== | ||
===官网=== | ===官网=== | ||
*[https://pandas.pydata.org/ Pandas官网] | *[https://pandas.pydata.org/ Pandas官网] | ||
*[https://pandas.pydata.org/docs/ Pandas文档] | *[https://pandas.pydata.org/docs/ Pandas文档] | ||
*[https://pandas.pydata.org/docs/user_guide/index.html | *[https://pandas.pydata.org/docs/user_guide/10min.html Pandas 用户指南 - 10分钟入门Pandas] | ||
*[https://pandas.pydata.org/docs/reference/index.html | *[https://pandas.pydata.org/docs/user_guide/index.html Pandas 用户指南] | ||
*[https://pandas.pydata.org/docs/reference/index.html Pandas API参考] | |||
===相关网站=== | ===相关网站=== | ||
第29行: | 第189行: | ||
[[分类:数据分析]] | [[分类:数据分析]] | ||
[[分类:数据可视化]] |
2020年9月18日 (五) 07:41的版本
Pandas是数据分析和操作工具,Python语言的一个开源软件库,用于数据分析。
简介
安装和导入
使用pip安装Pandas
pip install pandas
如果使用的是Anaconda等计算科学软件包,已经安装好了pandas库。
导入Pandas,在脚本顶部导入,一般写法如下:
import pandas as pd
查看Pandas版本:
pd.__version__
数据结构
pandas定义了2种数据类型,Series和DataFrame,大部分操作都在这两种数据类型上进行。
了解更多 >> Pandas 用户指南:数据结构
Series
Series是一组有标记的一维数组,能够保存任何数据类型(整数,字符串,浮点数,Python对象等)。轴标签列表称为index
。
DataFrame
DataFrame是有标记的二维的数据结构,具有可能不同类型的列。由数据,行标签,列标签构成。
Pandas绘图
pandas绘图基于Matplotlib,pandas的DataFrame和Series都自带生成各类图表的plot方法,能够方便快速生成各种图表。
了解更多 >> pandas文档:用户指南 - 可视化
基本图形
折线图
plot方法默认生成的就是折线图。如prices是一个DataFrame的含有收盘价close列,绘制收盘价的折线图:
s = prices['close']
s.plot()
#设置图片大小,使用figsize参数
s.plot(figsize=(20,10))
条形图
对于不连续标签,没有时间序列的数据,可以绘制条形图,使用以下两种方法:
- 使用plot()函数,设置kind参数为‘bar’ or ‘barh’,
- 使用plot.bar()函数,plot.barh()函数
df.plot(kind='bar') #假设df为每天股票数据
df.plot.bar()
df.resample('A-DEC').mean().volume.plot(kind='bar') #重采集每年成交量平均值,绘制条形图(volume为df的成交量列)
df.plot.bar(stacked=True) #stacked=True表示堆积条形图
df.plot.barh(stacked=True) #barh 表示水平条形图 </nowiki>
直方图
直方图使用plot.hist()方法绘制,一般为频数分布直方图,x轴分区间,y轴为频数。组数用参数bins控制,如分20组bins=20
df.volume.plot.hist() #df股票数据中成交量volume的频数分布直方图。
df.plot.hist(alpha=0.5) #alpha=0.5 表示柱形的透明度为0.5
df.plot.hist(stacked=True, bins=20) #stacked=True表示堆积绘制,bins=20表示分20组。
df.plot.hist(orientation='horizontal') #orientation='horizontal' 表示水平直方图
df.plot.hist(cumulative=True) #表示累计直方图
df['close'].diff().hist() #收盘价上应用diff函数,再绘制直方图
df.hist(color='k', bins=50) #DataFrame.hist函数将每列绘制在不同的子图形上。
箱型图
箱型图可以使用plot.box()函数或DataFrame的boxplot()绘制。 参数:
- color,用来设置颜色,通过传入颜色字典,如color={'boxes': 'DarkGreen', 'whiskers': 'DarkOrange', 'medians': 'DarkBlue', 'caps': 'Gray'}
- sym,用来设置异常值样式,如sym='r+'表示异常值用'红色+'表示。
df.plot.box()
df[['close','open', 'high']].plot.box()
#改变箱型颜色,通过传入颜色字典
color={'boxes': 'DarkGreen', 'whiskers': 'DarkOrange', 'medians': 'DarkBlue', 'caps': 'Gray'}
df.plot.box(color=color, sym='r+') #sym用来设置异常值样式,'r+'表示'红色+'
df.plot.box(positions=[1, 4, 5, 6, 8]) #positions表示显示位置,df有5个列, 第一列显示在x轴1上,第二列显示在x轴4上,以此类推
df.plot.box(vert=False) #表示绘制水平箱型图
df.boxplot()
#绘制分层箱型图,通过设置by关键词创建分组,再按组,分别绘制箱型图。如下面例子,每列按A组,B组分别绘制箱型图。
df = pd.DataFrame(np.random.rand(10, 2), columns=['Col1', 'Col2'])
df['x'] = pd.Series(['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'])
df.boxplot(by='x')
#还可以再传入一个子分类,再进一步分组绘制。如:
df.boxplot(column=['Col1', 'Col2'], by=['X', 'Y'])
散点图
散点图使用DataFrame.plot.scatter()方法绘制。通过参数x,y指定x轴和y轴的数据列。
df.plot.scatter(x='close', y='volume') #假如df为每日股票数据,图表示收盘价与成交量的散点图
#将两组散点图绘制在一张图表上,重新ax参数如
ax = df.plot.scatter(x='close', y='volume', color='DarkBlue', label='Group 1') #设置标签名label设置标名
df.plot.scatter(x='open', y='value', color='DarkGreen', label='Group 2', ax=ax)
#c参数表示圆点的颜色按按volume列大小来渐变表示。
df.plot.scatter(x='close', y='open', c='volume', s=50) #s表示原点面积大小
df.plot.scatter(x='close', y='open', s=df['volume']/50000) #圆点的大小也可以根据某列数值大小相应设置。
饼图
饼图使用DataFrame.plot.pie()或Series.plot.pie()绘制。如果数据中有空值,会自动使用0填充。
其他绘图函数
这些绘图函数来自pandas.plotting模块。
矩阵散点图(Scatter Matrix Plot)
矩阵散点图(Scatter Matrix Plot)使用scatter_matrix()方法绘制
from pandas.plotting import scatter_matrix #使用前需要从模块中导入该函数
scatter_matrix(df, alpha=0.2, figsize=(6, 6), diagonal='kde') #假设df是每日股票数据,会每一列相对其他每一列生成一个散点图。
密度图(Density Plot)
密度图使用Series.plot.kde()和DataFrame.plot.kde()函数。
df.plot.kde()
安德鲁斯曲线(Andrews Curves)
安德鲁斯曲线
平行坐标图(Parallel Coordinates)
Lag plot
自相关图(Autocorrelation Plot)
自相关图
自举图(Bootstrap plot)
绘图格式
预设置图形样式
matplotlib 从1.5开始,可以预先设置样式,绘图前通过matplotlib.style.use(my_plot_style)。如matplotlib.style.use('ggplot') 定义ggplot-style plots.
样式参数
大多数绘图函数,可以通过一组参数来设置颜色。
标签设置
可通过设置legend参数为False来隐藏图片标签,如
df.plot(legend=False)
尺度
- logy参数用来将y轴设置对数标尺
- logx参数用来将x轴设置对数标尺
- loglog参数用来将x轴和y轴设置对数标尺
ts.plot(logy=True)
双坐标图
两组序列同x轴,但y轴数据不同,可以通过第二个序列设置参数:secondary_y=True,来设置第二个y轴。
#比如想在收盘价图形上显示cci指标:
prices['close'].plot()
prices['cci'].plot(secondary_y=True)
#第二个坐标轴要显示多个,可以直接传入列名
ax = df.plot(secondary_y=['cci', 'RSI'], mark_right=False) #右边轴数据标签默认会加个右边,设置mark_right为False取消显示
ax.set_ylabel('CD scale') #设置左边y轴名称
ax.right_ax.set_ylabel('AB scale') #设置右边y轴名称
子图
DataFrame的每一列可以绘制在不同的坐标轴(axis)中,使用subplots参数设置,例如:
df.plot(subplots=True, figsize=(6, 6))
子图布局
子图布局使用关键词layout设置,