python股票处理笔记整理

个人笔记~
pandas、matplotlib库

1.读取文件

df = pd.read_csv("I:\Anacoda3\AcondaProject\data\MAOTAI.CSV")

2.单张数据

用法: df[‘列名’].函数名
目的: 求【取决于函数功能】

 df = pd.read_csv("I:\Anacoda3\AcondaProject\data\MAOTAI.CSV")
  print(df['Volume'].max())
  print (df['Volume'].mean())

用法: ①df[‘列名’].plot ②df.plot()
目的: ①取列名数据进行画图 ②默认取所有列名画图

#df[['Close','Volume']].plot()
#df.plot()

3.创建DataFrame
DataFrame:可以理解成一个二维数组的表格或者矩阵,需要设置index,columns(理解成行、列),这样就可以通过两者定位某个数据。也可以通过其中之一进行更多操作。

    #pd.date_range(开始时间,结束时间),也可以pd.date_range(开始时间,periods=数字)
    dates = pd.date_range(start_date,end_date)
    
    #以时间作为索引,创建一个空的DataFrame
    df1=pd.DataFrame(index=dates)
    
    #把指数数据读入(这里的指数不是数学里的那个指数,仅仅是一个表中的属性或者理解成列)
    #这个是只读指定的数据,取:
    
    #index_col='Date'   以MAOTAI.CSV 文件中的 Date 为索引,可以理解成这些行的数据都取到了
    #usecols=['Date','Adj Close']     取指数:也就是 取MAOTAI.CSV 文件中的 列名为Date、Adj       Close所在列的数据

    #parse_dates=True,将所取的这些列解析为    **时间索引**

              
    dfMT = pd.read_csv("I:\Anacoda3\AcondaProject\data\MAOTAI.CSV",index_col='Date',
                     usecols=['Date','Adj Close'],parse_dates=True)




    #把   取到的MAOTAI的数据   dfMT  放进DataFrame
    df1=df1.join(dfMT)
    
    #去掉空的数据
    df1=df1.dropna()

3.多个文件数据处理

import pandas as pd
import os

def symbol_to_path(symbol, base_dir="I:\Anacoda3\AcondaProject\data"):
    #调用这个函数:传入一个文件名symbol,就会返回该文件的目录
    #base_dir 是你的文件的父目录,也就是你的文件在哪个文件夹下
    #symbol 是你要读取的文件名
    
    return os.path.join(base_dir,"{}.CSV".format(str(symbol)))

def get_data(symbols,dates):
    #函数作用:传入文件名,日期作为索引,返回对应读取的数据放入同一个DataFrame表中
    df = pd.DataFrame(index = dates)
    
    #循环遍历文件
    for symbol in symbols:
        # 因为要读多个文件中的数据,所以用df_temp来暂时存放每次循环读出的数据
        df_temp=pd.read_csv(symbol_to_path(symbol),index_col='Date',
                             usecols=['Date','Adj Close'],parse_dates=True)
       
        #多个数据放入同一个DataFrame中,列名不能重复,所以进行改名
        df_temp=df_temp.rename(columns = {'Adj Close':symbol})
        #将每次按条件读取到的数据放入DataFrame中,并去除空的数据,dropna()
        df = df.join(df_temp)
        df = df.dropna()
    
    #返回DataFrame,注意这个return的位置,别放在for循环里了!!!
    return df
        
def test_run():
    symbols = ['MAOTAI','PINGAN']
    dates=pd.date_range('2019-07-01',periods=10)   
    df = get_data(symbols,dates)
    print(df)
 
test_run()

4.根据所得多个文件中的数据进行画图

在上述基础上加两个函数,再测试方法中调用,就可以了

def plot_data(df,title='Stock Prices'):
    #函数作用:传入DataFrame,并设置图的名称title为  Stock Prices,进行画图
    a=df.plot(title=title,fontsize=12)
    
    #设置x,y坐标名称,并设置字体大小
    a.set_xlabel("Date",fontsize=12)
    a.set_ylabel("Price",fontsize=12)
    plt.show()

#归一化,使图像更加清晰(在0~n之间)
def normalize(df):
    return df/df.ix[0,:]

运行如下:
在这里插入图片描述

完整代码:

import pandas as pd
import os
import matplotlib.pyplot as plt

def symbol_to_path(symbol, base_dir="I:\Anacoda3\AcondaProject\data"):
    #返回文件的路径
    return os.path.join(base_dir,"{}.CSV".format(str(symbol)))

def get_data(symbols,dates):
    df = pd.DataFrame(index = dates)
    
    for symbol in symbols:
        df_temp=pd.read_csv(symbol_to_path(symbol),index_col='Date',
                             usecols=['Date','Adj Close'],parse_dates=True)
        df_temp=df_temp.rename(columns = {'Adj Close':symbol})
        df = df.join(df_temp)
        df = df.dropna()
    #注意这个return的位置,别放在循环里了!!!    
    return df
 
def plot_data(df,title='Stock Prices'):
    a=df.plot(title=title,fontsize=12)
    a.set_xlabel("Date",fontsize=12)
    a.set_ylabel("Price",fontsize=12)
    plt.show()

#归一化,使图像更加清晰(在0~n之间)
def normalize(df):
    return df/df.ix[0,:]

      
def test_run():
    symbols = ['MAOTAI','PINGAN']
    dates=pd.date_range('2018-07-01',periods=1000)   
    df = get_data(symbols,dates)
    print(df)
    plot_data(normalize(df))
 
test_run()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jasscical

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值