pandas金融数据处理

51.使用绝对路径读取本地Excel数据

import numpy as np
import pandas as pd

data = pd.read_excel('/Users/baji/Desktop/600000.SH.xls')

pandas金融数据处理_第1张图片

52.查看数据前三行

data.head(3)

pandas金融数据处理_第2张图片

53.查看每列数据缺失值情况

data.isnull().sum()

pandas金融数据处理_第3张图片

54.提取日期列含有空值的行

data[data['日期'].isnull()]

pandas金融数据处理_第4张图片

55.输出每列缺失值具体行数

for columname in data.columns:
    if data[columname].count() != len(data):
        loc = data[columname][data[columname].isnull().values==True].index.tolist()
        print('列名:"{}",第{}行位置有缺失值'.format(columname,loc))

pandas金融数据处理_第5张图片

56.删除所有存在缺失值的行

data.dropna(axis=0,how='any',inplace=True)

how:any-有空值就删除,all-全部为空值才删除
inplace:false-返回新数据集,True-源数据集操作
pandas金融数据处理_第6张图片

57.绘制收盘价的折线图

import matplotlib.pyplot as plt
#plt.plot(data['收盘价(元)'])

plt.style.use('seaborn-darkgrid') #设置画图风格
plt.rc('font',size=6)	#设置图中字体和大小
plt.rc('figure',figsize=(4,3),dpi=150)	#设置图像大小
data['收盘价(元)'].plot()

plt.style.use()
参数可以是一个URL或路径,指向自己定义的mplstyle文件,找到使用样式可用plt.style.available
共26种风格:['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test']

plt.rc
matplotlib中plt.rcParams[],设置图像细节
目前学习到2种写法,一是plt.rcParams['figure.figsize']=(4,3),plt.rcParams['lines.linestyle']='-.';二是plt.rc('font',size=6),plt.rc('figure',figsize=(4,3),dpi=150)
pandas金融数据处理_第7张图片

58.同时绘制开盘价与收盘价

#plt.plot(data[['开盘价(元)','收盘价(元)']])
data[['开盘价(元)','收盘价(元)']].plot()

pandas金融数据处理_第8张图片

59.绘制涨跌幅的直方图

#data['涨跌幅(%)'].hist()
plt.hist(data['涨跌幅(%)'])

pandas金融数据处理_第9张图片

60.让直方图更细致

plt.hist(data['涨跌幅(%)'],bins=30)
#data['涨跌幅(%)'].hist(bins=30)

题目中的更细致理解为 加组距
pandas金融数据处理_第10张图片

61.以data的列名创建一个dataframe

#错误写法
# df1 = pd.DataFrame(np.array(data.columns))

df2 = pd.DataFrame(columns=data.columns.tolist())
df2

在这里插入图片描述

62.打印所有换手率不是数字的行

for i in range(len(data)):
    if type(data.iloc[i,13]) != float:
        df2 = df2.append(data.loc[i])
        
df2

pandas金融数据处理_第11张图片

63.打印所有换手率为–的行

data[data['换手率(%)'].isin(['--'])]

DataFrame.isin(values) 用于过滤数据帧
values:iterable,Series,List,Tuple,DataFrame或字典
return:维度布尔值的DataFrame

单参数过滤:
temp1 = data['换手率(%)'].isin(['--'])
多重参数过滤:
filter1 = data['换手率(%)'].isin(['--']),filter2 = data['前收盘价(元)].isin([12.1946,12.2946,12.3946])

pandas金融数据处理_第12张图片

64.重置data的行号

data = data.reset_index()

65.删除所有换手率为非数字的行

k=[] #设置空列表接收
for i in range(len(data)):
    if type(data.iloc[i,14]) != float:
        k.append(i)
data.drop(labels=k,inplace=True)
# 正确写法
data[data['换手率(%)'].isin(['--'])]

在这里插入图片描述

#错误写法
data['换手率(%)'].isin(['--']) 会出现维度布尔值的DataFrame
pandas金融数据处理_第13张图片

66.绘制换手率的密度曲线

data['换手率(%)'].plot(kind='kde') #kde = 密度

pandas金融数据处理_第14张图片

67.计算前一天与后一天收盘价的差值

data['收盘价(元)'].diff() #一阶差分 

DataFrame.diff(periods=1,axis=0)
操作中是两条临近记录的差值,periods表示对比的条目数,axis表示行或列

pandas金融数据处理_第15张图片

68.计算前一天与后一天收盘价变化率

data['收盘价(元)'].pct_change() #相差百分比

DataFrame.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)
periods表示对比的条目数,默认为1
当前数据与先前数据的相差百分比
pandas金融数据处理_第16张图片

69.设置日期为索引

data.set_index('日期')

pandas金融数据处理_第17张图片

70.以5个数据作为一个数据滑动窗口,在这个5个数据上取均值(收盘价)

data['收盘价(元)'].rolling(5).mean()

窗口函数
DataFrame.rolling(window,min_periods=None,center=False,win_type=None,on=None,axis=0,closed=None)
window:时间窗口值,int类型,即向前几个数据
min_periods:默认与window相等,即最少窗口值的观测点数量
center:窗口标签居中,默认False
win_type:窗口类型,默认为None
on:指定计算数据滑动窗口的列,可选参数
closed:定义区间的开闭(‘left’,‘both’,‘right’),对于offset类型默认是左开右闭的即默认为right

agg()函数快速实现多个聚类函数并输出结果,同时还可以进行重命名

method
dataframe.rolling().mean() 均值
dataframe.rolling().sum() 求和
dataframe.rolling().var() 无偏方差
dataframe.rolling().std() 标准差
dataframe.rolling().corr() 相关(二进制)
dataframe.rolling().cov() 无偏协方差(二元)
dataframe.rolling().skew() 样品偏斜度(三阶矩)
dataframe.rolling().kurt() 样品峰度(四阶炬)
dataframe.rolling().count() 非空值数量
dataframe.rolling().max() 最大值
dataframe.rolling().min() 最小值
dataframe.rolling().median() 中值
dataframe.rolling().quantile() 样本分位数(百分位上的值)

pandas金融数据处理_第18张图片

71.以5个数据作为一个数据滑动窗口,计算这五个数据总和(收盘价)

data['收盘价(元)'].rolling(5).sum()

pandas金融数据处理_第19张图片

72.将收盘价5日均线、20日均线与原始数据绘制在同一个图上

#False
#data['收盘价(元)'].plot()
#data[data['收盘价(元)'].rolling(5).mean()].plot()
#data[data['收盘价(元)'].rolling(20).mean()].plot()

#True
data['收盘价(元)'].plot()
data['收盘价(元)'].rolling(5).mean().plot()
data['收盘价(元)'].rolling(20).mean().plot()

pandas金融数据处理_第20张图片

73.按周为采样规则,取一周收盘价最大值

data['收盘价(元)'].resample('W').max()
# data['收盘价(元)'].resample('7d').max()

※ 本题一直报错:TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'
多次尝试后发现由于之前data.set_index('日期')没有覆盖,再次将日期作为索引后,问题解决
pandas金融数据处理_第21张图片

74.绘制重采样数据与原始数据

data['收盘价(元)'].plot()
data['收盘价(元)'].resample('7D').max().plot()

pandas金融数据处理_第22张图片

75.将数据往后移动5天

data.shift(5)

DataFrame.shift(periods=1, freq=None, axis=0)

periods:它由一个可以为正或为负的整数组成。它定义了要移动的数
freq:可以与DateOffset, tseries模块, str或time规则一起使用
fill_value:用于填充新丢失的值

pandas金融数据处理_第23张图片

76.将数据向前移动5天

data.shift(-5)

pandas金融数据处理_第24张图片

77.使用expending函数计算开盘价的移动窗口均值

data['开盘价(元)'].expanding(min_periods=1).mean()

DataFrame.expanding(min_periods = 1,center = False,axis = 0)
min_periods:需要有值的观测点的最小数量,决定显示状态,=1表示每个观测点都有值
center:把窗口的标签设置为居中,default False–>居右

expanding()与rolling()的参数用法相同,rolling()固定窗口数量,进行滑动计算;expanding()设置最小观测值,不固定窗口数量,实现累计计算
expanding()函数,类似cumsum()函数的累计求和,其优势在于还可以进行更多的聚类计算;
事实上,当rolling()函数的参数window=len(df)时,实现的效果与expanding()函数是一样的。

pandas金融数据处理_第25张图片

78.绘制上一题的移动均值与原始数据折线图

data['opening'] = data['开盘价(元)'].expanding(min_periods=1).mean()
data[['开盘价(元)','opening']].plot(figsize=(16,6))

pandas金融数据处理_第26张图片

79.计算布林指标

以下信息来源百度百科
布林线指标,即BOLL指标,其英文全称是“Bollinger Bands”,布林线(BOLL)由约翰·布林先生创造,其利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动范围及未来走势,利用波带显示股价的安全高低价位,因而也被称为布林带。其上下限范围不固定,随股价的滚动而变化。布林指标和麦克指标MIKE一样同属路径指标,股价波动在上限和下限的区间之内,这条带状区的宽窄,随着股价波动幅度的大小而变化,股价涨跌幅度加大时,带状区变宽,涨跌幅度狭小盘整时,带状区则变窄。
——————————————————————————————————————————————————————————————
在股市分析软件中,BOLL指标一共由四条线组成,即上轨线UP 、中轨线MB、下轨线DN和价格线。
计算公式
中轨线MB=N日的移动平均线
上轨线UP=中轨线+两倍的标准差
下轨线DN=中轨线-两倍的标准差
计算过程
(1)计算MA
MA=N日内的收盘价之和÷N
(2)计算标准差MD
MD=平方根(N-1)日的(C-MA)的两次方之和除以N
(C指收盘价)
(3)计算MB、UP、DN线
MB=(N-1)日的MA
UP=MB+k×MD
DN=MB-k×MD
(K为参数,可根据股票的特性来做相应的调整,一般默认为2)

data['MB'] = data['收盘价(元)'].rolling(30).mean()
data['Upper'] = data['MB']+2*data['收盘价(元)'].rolling(30).std()
data['Lower'] = data['MB']-2*data['收盘价(元)'].rolling(30).std()

80.计算布林线并绘制

data[['收盘价(元)','MB','Upper','Lower']].plot(figsize=(16,6))

pandas金融数据处理_第27张图片

你可能感兴趣的:(数据分析入门)