zoukankan      html  css  js  c++  java
  • 如何使用pandas分析金融数据

    【摘要】pandas是数据分析师分析数据最常用的三方库之一,结合matplotlib,非常强大。

    首先我们收集一些数据。

    从东方财富客户端导出券商信托板块2018年11月1日的基础行情和财务数据。分别保存为zhengquan1.csv和zhengquan2.csv,文件可以从本文附件中下载。

    导入pandas和读取csv文件

    import pandas as pd
    
    #解析基础行情csv
    df1 = pd.read_csv(u'zhengquan1.csv',sep=',', encoding='utf-16')
    df1.head()

    image.png

    pd.read_csv可以将csv文件解析为pandas的DataFrame对象。导出的文件是由utf-16编码的,要加encoding参数。

    df1.head()可以取DataFrame前5行。

    可以看出pandas结合jupyter可以很直观的看到全部数据的大致情况。

    DataFrame的行列名可以直接用index、columns获取,后面我们会慢慢介绍。

    df1.columns

     image.pngimage.png

    df1.index.values

    image.png

    我们看到有一列名为’Unnamed: 3‘的数据列,这一列是不需要的数据,我们希望将其删除,可以使用drop方法。

    df1.drop('Unnamed: 3',inplace=True, axis=1)
    df1.head(3)

    image.pngimage.png

    drop方法中有两个参数,inplace=True代表处理后的DataFrame替换原来的DataFrame;axis=1代表处理列数据。

    接下来我们试试将df1中的第一行删除。

    df1.drop(0,inplace=True)
    df1.head(3)

     image.pngimage.png

    可以看出,我们这次没有使用axis参数,因为axis默认为0,代表处理行数据,可以省略。

    上面的一些操作让我们对数据做了一些清洗。

    接下来我们想提取一些我们比较关心的数据,例如提取'代码'、'名称'、'最新'、'换手'、'市盈率'、'市净率'、'总市值'、'流通市值'这几列.

    df1_clean = df1[[u'代码',u'名称',u'最新',u'换手',u'市盈率',u'市净率',u'总市值',u'流通市值']]
    df1_clean.head()

     image.pngimage.png

    这时,我们想通过市净率来排序,看看市净率最低的几家券商信托是哪些。我们可以借助sort_values来实现:

    df1_clean.sort_values(u'市净率').head()

     image.pngimage.png

    sort_values方法有一个ascending参数,我们可以设置升序或者降序。

    df1_clean.sort_values(u'最新',ascending=False).head()

     image.pngimage.png

    我们看到DataFrame中有些值是字符串和其他字符,我们想要批量将其删除。向大家介绍apply函数:

    def fn(x):
        try:
            x[u'市盈率'] = pd.to_numeric(x[u'市盈率'].split(' ')[0])
            x[u'总市值'] = pd.to_numeric(x[u'总市值'][:-2])
            x[u'流通市值'] = pd.to_numeric(x[u'流通市值'][:-2])
            x[u'换手'] = pd.to_numeric(x[u'换手'][:-1])
            return x
        except:
            pass
    df1_clean = df1_clean.apply(func=fn,axis=1)
    df1_clean.head()

     image.pngimage.png

    上述代码将亏损的股票剔除出了DataFrame。为了进一步清洗,将存在nan的数据行删除。

    df1_clean.dropna(inplace=True)

     接下来我们可以将DataFrame中的一些数据借助matplotlib画出柱状图:

    import matplotlib.pyplot as plt
    
    plt.rcParams["figure.figsize"] = (20,24)
    df1_clean.plot(x=u'代码',y=u'市盈率',kind='barh');

    output_22_0.png

    pandas用于金融分析还有很多个性化的手段,这次我们主要讲了讲数据的清洗和处理。

    后面我们会接着介绍pandas的更多使用技巧,如果想了解环境的安装,可以看我前面的文章:

    ubuntu16.04 安装cuda9.0+cudnn7.0.5+tensorflow+nvidia-docker配置GPU服务

    证券数据.zip

    来源:华为云社区  作者:Edison

  • 相关阅读:
    bzoj-2748 2748: [HAOI2012]音量调节(dp)
    bzoj-2338 2338: [HNOI2011]数矩形(计算几何)
    bzoj-3444 3444: 最后的晚餐(组合数学)
    codeforces 709E E. Centroids(树形dp)
    codeforces 709D D. Recover the String(构造)
    codeforces 709C C. Letters Cyclic Shift(贪心)
    codeforces 709B B. Checkpoints(水题)
    codeforces 709A A. Juicer(水题)
    Repeat Number
    hdu 1003 Max Sum (动态规划)
  • 原文地址:https://www.cnblogs.com/huaweicloud/p/11861653.html
Copyright © 2011-2022 走看看