美文网首页python入门基础学习大数据 爬虫Python AI Sql
基于MySQL和Python的美股财报数据获取和交互!

基于MySQL和Python的美股财报数据获取和交互!

作者: 编程新视野 | 来源:发表于2019-01-22 16:34 被阅读1次

    Brief

    获取美股财报数据并导入MySQL,然后建立Python和MySQL之间的连接,最后进行数据交互。

    1

    因为最近开始接触美股,而财报是全面了解上市公司很好的方法,所以想先学习一下财报数据处理,方便后面进一步做分析。

    为避免浪费读者的时间,先说明一下,这篇文章并不能告诉你如何进行企业基本面分析,我也不认为拿了三大报表数据简单对比一下就叫财报分析,这些我会在进一步学习后再来分享。

    整个处理过程,基本思路是获取财报数据excel,把excel数据放到数据库中,然后建立Python与数据库的连接,最后掌握Python与MySQL数据交互的方法。

    2

    如何获取美股财报?

    如果只是想浏览一下公司概况和财务数据,通过雪球、雅虎等美股板块就可以快速获取信息。如果是想获取完整的财务报告的话有2个方法:

    通过美国证监会SEC的EDGAR 系统,输入公司英文名搜索,点击搜索结果就可以出来公司所有的SEC报告列表,Filing Type可以输入搜索条件,季报从6-K文件找,年报看20-F。https://www.sec.gov/edgar/searchedgar/companysearch.html

    通过上市公司投资者关系(Investor Relationship)栏目找到财务信息披露并下载。像百度的话是http://ir.baidu.com/phoenix.zhtml?c=188488&p=irol-irhome

    我个人的话比较喜欢直接去公司官网找,因为界面比较友好(产品经理职业病发作

    ),像百度官网有word、excel、pdf多种格式,任君选择,而SEC貌似只能下载htm和excel。

    注释:本人对于Python学习创建了一个小小的学习圈子,为各位提供了一个平台,大家一起来讨论学习Python。欢迎各位到来Python学习群:696541369 一起讨论视频分享学习。Python是未来的发展方向,正在挑战我们的分析能力及对世界的认知方式,因此,我们与时俱进,迎接变化,并不断的成长,掌握Python核心技术,才是掌握真正的价值所在。

    下载的报告,拿资产负债表为例,原始Excel表长这样:

    我们需要进行一些预处理才能符合数据库表的要求:删除空白行,转置,简化字段名,增加一个“名字+日期+货币”的数据作为唯一标识Data_id,我还根据需要增加了公司名、财报日期、货币3个字段,得到一个新表:

    进群:960410445 即可获取数十套PDF!

    4

    接下来就要导入数据库了。我用的数据库管理工具是MySQL wrokbench,新建一个schema并建立好balance_sheet表。

    然后打开刚刚的excel表,编码方式选择utf-8,另存为csv(逗号分隔)格式,MySQL通过“Table Data Import Wizard”按键导入应该就可以了。

    然而并不是

    MySQL导入的时候报错:can’t analyze file……maybe the file is not csv。查了一下,可能是因为表格含中文,改了之后又报:”ascii” codec can’t encode characters in position 15-16:ordinal not in range(128)。再搜了一下,有人说直接用import record from an external file按钮可以解决,然后又报:data truncated for column at row 1。

    这个时候我内心已经是崩溃的

    。突然,我想通了,sometimes we should know how to give up.

    不用一条路走到黑的,所以我换了个方式,用python 把excel转化成csv,再导入MySQL就成功了。

    import pandas as pd

    # index_col指定列索引,否则系统会自动添加索引列

    data = pd.read_excel('Financial_Report-baidu.xlsx','Sheet1',index_col=0)

    data.to_csv('balance_sheet.csv',encoding='utf-8')

    同样的方法可以在MySQL导入利润表、现金流量表等,最后不要忘记创建对应的数据字典。

    5

    接着是创建Python和数据库之间的连接,我们需要用到pymysql库,只要进行相关参数配置就可以了。

    import pymysql

    # 数据库配置信息

    config = {

    'host': '127.0.0.1', # 服务器地址

    'port': 3306, # 端口

    'user': 'root', # 用户名

    'password': '123456', # 密码

    'db': 'financialreport', # 数据库名

    'charset': 'utf8' # 连接时的编码方式

    }

    # 连接数据库

    # 按关键字把多余的值以字典的方式传送

    conn = pymysql.connect(**config)

    6

    然后我们就可以通过Python直接操作数据库了。这里需要先解释一下数据库的操作方法。

    创建连接后,需要创建cursor对象,并通过cursor.execute执行sql语句。cursor是一个指针对象,可以理解为Python为用户开设的一个数据缓冲区,存放最近一次execute的SQL语句的返回结果,指针指向返回数组开始的位置。

    而execute方法只是获取数据库执行SQL语句后的处理结果并缓存在Python本地,并没有对数据库生效,所以还需要执行commit方法把代码提交数据库系统执行,才真正把变动应用到数据库上。

    最后是关闭cursor和connection,释放内存。

    举个栗子:

    # 创建游标指针对象

    cursor = conn.cursor()

    # 执行sql语句

    sql = "select Currency from balance_sheet"

    cursor.execute(sql)

    # 获取数据后指针由0指向1

    r = cursor.fetchone()

    print(r)

    # 获取数据后指针由1指向3

    r = cursor.fetchmany(2)

    print(r)

    输出是:

    ('CNY',)

    (('CNY',), ('USD',))

    再举个栗子:

    # 插入数据

    sql2 = "INSERT INTO balance_sheet(Data_id, Company,Date,Currency)VALUES('alibaba-2018-12-31', 'alibaba','2018-12-31','USD')"

    cursor.execute(sql2)

    这个时候通过MySQL workbench查看数据并没有新增,需要执行以下代码后才能从数据库里看到变动:

    commit()

    最后是关闭连接,释放空间。

    7

    至此我们就完成了Python和MySQL之间的连接和数据交互,总结一下:

    经过这篇文章的学习,我深刻体会,要善待程序员同学呀,解bug真的很不容易的,特别是新手!老同志还能凭经验,我完全是靠缘分和灵感找到的解决方案嘛。

    这次就分享到这里吧

    相关文章

      网友评论

        本文标题:基于MySQL和Python的美股财报数据获取和交互!

        本文链接:https://www.haomeiwen.com/subject/anqrjqtx.html