当前位置:   article > 正文

pandas读取股票CSV文件并用mplfinance绘制蜡烛图_2018年五粮液股票数据csv

2018年五粮液股票数据csv

CSV文件内容格式如下,使用相关插件(VSCode,Excel Viewer)进行了美化。可以注意到总共有7列。
在这里插入图片描述

导入CSV的文件

import pandas as pd
data = pd.read_csv('./data/AAPL.csv',index_col=0, parse_dates = ['Date']) #将第一列设置为index
  • 1
  • 2

这里将第一列设置为index,实际上CSV文件中第一列是行号。然后将Date列自动转化为日期类型,,方便后续操作。

#查看data的数据类型
print(data.dtypes) #dtypes是DataFrame和Series的一个属性
#输出结果
Date      datetime64[ns]
Open             float64
High             float64
Low              float64
Close            float64
Volume           float64
dtype: object
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
#查看data的详细信息
print(data.info())
#输出结果
<class 'pandas.core.frame.DataFrame'>   #data的数据类型   
Int64Index: 5255 entries, 0 to 5254      #index的数据类型  
Data columns (total 6 columns): #除了index总共6列,index,Date,HOCL,V
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   Date    5255 non-null   datetime64[ns] #日期类型
 1   Open    5255 non-null   float64       
 2   High    5255 non-null   float64       
 3   Low     5255 non-null   float64
 4   Close   5255 non-null   float64
 5   Volume  5255 non-null   float64
dtypes: datetime64[ns](1), float64(5)
memory usage: 287.4 KB #占用内存空间
None

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
#查看data的统计分析
print(data.describe())
#输出
              Open         High          Low        Close        Volume
count  5255.000000  5255.000000  5255.000000  5255.000000  5.255000e+03
mean    158.335855   160.109968   156.388133   158.286548  2.122191e+07
std     161.309153   162.588024   159.766714   161.195754  1.824189e+07
min      12.990000    13.190000    12.720000    13.120000  7.025000e+05
25%      37.940000    38.580000    37.160000    37.980000  6.705350e+06
50%     106.370000   108.000000   104.880000   106.130000  1.677300e+07
75%     187.765000   189.405000   185.635000   187.560050  2.976013e+07
max     702.410000   705.070000   699.570000   702.100000  1.895606e+08
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

对数据根据日期进行排序

data = data.sort_values('Date') #排序
#然后设置日期列为index
data = data.set_index('Date')
  • 1
  • 2
  • 3

根据日期提取数据

data_of_2018 = data.loc['2018'] #data['2018']也可以,但是建议用loc操作符

#也可以提取某月的数据
data_of_month = data.loc['2018-01']

#提取某日的数据
data_of_day = data.loc['2018-01-02']

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

或者数据切片

#提取2018年2月到4月的数据
data_of_during = data.loc['2018-02':'2018-04']
print(data_of_during.head())
print(data_of_during.tail())
  • 1
  • 2
  • 3
  • 4

结果如下

               Open    High       Low   Close      Volume
Date                                                     
2018-02-01  167.165  168.62  166.7600  167.78  38099665.0
2018-02-02  166.000  166.80  160.1000  160.50  85436075.0
2018-02-05  159.100  163.88  156.0000  156.49  66090446.0
2018-02-06  154.830  163.72  154.0000  163.03  66625484.0
2018-02-07  163.085  163.40  159.0685  159.54  50852130.0
                Open    High       Low   Close      Volume
Date                                                      
2018-04-24  165.6700  166.33  161.2201  162.94  33692017.0
2018-04-25  162.6200  165.42  162.4100  163.65  28382084.0
2018-04-26  164.1200  165.73  163.3700  164.22  27963014.0
2018-04-27  164.0000  164.33  160.6300  162.32  35655839.0
2018-04-30  162.1302  167.26  161.8400  165.26  42427424.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

对数据进行截断truncate

data_after_2018_10 = data.truncate(before='2018-10') #截断2018年10月之前的数据
print(data_after_2018_10.head())
  • 1
  • 2
              Open    High     Low   Close      Volume
Date                                                  
2018-10-01  227.95  229.42  226.35  227.26  23600802.0
2018-10-02  227.25  230.00  226.63  229.28  24788170.0
2018-10-03  230.05  233.47  229.78  232.07  28654799.0
2018-10-04  230.78  232.35  226.73  227.99  32042000.0
2018-10-05  227.96  228.41  220.58  224.29  33580463.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

同理after='2018-10’表示截断2018年10月之后的数据,保留之前的数据

shift操作

data_of_during_shift1 = data_of_during.shift(1)
print(data_of_during_shift1.head())
  • 1
  • 2
Date                                                   
2018-02-01      NaN     NaN     NaN     NaN         NaN
2018-02-02  167.165  168.62  166.76  167.78  38099665.0
2018-02-05  166.000  166.80  160.10  160.50  85436075.0
2018-02-06  159.100  163.88  156.00  156.49  66090446.0
2018-02-07  154.830  163.72  154.00  163.03  66625484.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以看到,index不动,数据整体往后移动了一行。如果shift(-1)则表示,舍弃第一行数据,数据整体往前移动一行。
该方法在金融领域的数据常用

使用mplfinace绘制蜡烛图

import mplfinance as mpf
kwargs = dict(type='candle',mav=(2,4,6),volume=True)
mc = mpf.make_marketcolors(up='r',down='g') #自定义蜡烛图的颜色
my_style  = mpf.make_mpf_style(marketcolors=mc) #仅仅指定marketcolors
mpf.plot(data_after_2018_10,**kwargs,style=my_style)
  • 1
  • 2
  • 3
  • 4
  • 5

mplfinance的操作很简单,具体可以查看其github官网教程
蜡烛图
文末,推广一下个人公众号【港资交易数据分析】,或者直接访问网站
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/142284
推荐阅读
相关标签
  

闽ICP备14008679号