Python 本地股票数据分析&处理

Python 本地股票数据分析&处理

说明

  • 本人Python小菜鸡,新手一枚,分享自己平时学习的笔记内容
  • 写的不好还请见谅,欢迎大佬指点不足
    在这里插入图片描述

实例题目

把以下股票数据存⼊stock_data.txt
股票数据图片
开发程序对stock_data.txt进⾏以下操作:

  1. 程序启动后,给⽤户提供查询接⼝,允许⽤户重复查股票⾏情信息(⽤到循环)
  2. 允许⽤户通过模糊查询股票名,⽐如输⼊“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
  3. 允许按股票价格、涨跌幅、换⼿率这⼏列来筛选信息,⽐如输⼊“价格>50”则把价格⼤于50的股票
    都打印,输⼊“市盈率<50“,则把市盈率⼩于50的股票都打印,不⽤判断等于。
    思路提示:加载⽂件内容到内存,转成dict or list结构,然后对dict or list 进⾏查询等操作。 这样以后
    就不⽤每查⼀次就要打开⼀次⽂件了,效率会⾼。

程序启动后执⾏效果参考:

股票查询接⼝>>:换⼿率>25
['序号', '代码', '名称', '最新价', '涨跌幅', '涨跌额', '成交量(⼿)', '成交额', '振幅',
'最⾼', '最低', '今开', '昨收', '量⽐', '换⼿率', '市盈率', '市净率']
['18', '603697', '有友⻝品', '22.73', '10.02%', '2.07', '34.93万', '7.68亿',
'8.23%', '22.73', '21.03', '21.17', '20.66', '1.4', '43.94%', '38.1', '4.66']
['23', '603956', '威派格', '22.52', '10.01%', '2.05', '18.33万', '4.01亿',
'10.60%', '22.52', '20.35', '20.35', '20.47', '2.16', '43.02%', '-', '9.82']
['36', '300748', '⾦⼒永磁', '59.7', '10.01%', '5.43', '11.02万', '6.38亿',
'6.98%', '59.7', '55.91', '56.88', '54.27', '0.9', '26.49%', '234.09',
'23.54']
['37', '300767', '震安科技', '41.13', '10.00%', '3.74', '6.22万', '2.49亿',
'10.32%', '41.13', '37.27', '37.48', '37.39', '3.86', '31.11%', '43.32',
'3.68']
['38', '603045', '福达合⾦', '32', '10.00%', '2.91', '17.06万', '5.31亿',
'9.87%', '32', '29.13', '29.13', '29.09', '1.39', '25.17%', '52.74', '4.02']
['39', '2952', '亚世光电', '58.98', '10.00%', '5.36', '4.18万', '2.41亿',
'7.42%', '58.98', '55', '55.91', '53.62', '3.04', '27.44%', '53.09', '5.51']
找到6条
股票查询接⼝>>:⻝品
['18', '603697', '有友⻝品', '22.73', '10.02%', '2.07', '34.93万', '7.68亿',
'8.23%', '22.73', '21.03', '21.17', '20.66', '1.4', '43.94%', '38.1', '4.66']
找到1条
股票查询接⼝>>:能源
['9', '2828', '⻉肯能源', '14.25', '10.04%', '1.3', '17.83万', '2.52亿',
'4.71%', '14.25', '13.64', '13.8', '12.95', '3.45', '18.03%', '-', '3.08']
找到1

关于数据源

股票的数据源,去东方财富网复制,自己保存到txt文件里
这里是网址:http://quote.eastmoney.com/center/gridlist.html#hs_a_board

但我感觉你们都会有数据源的
在这里插入图片描述

注意要统一用逗号将数据进行隔开才能运行下面的代码,建议大家辛苦一下把数据改改
如果是其他隔开符号要修改代码
这里我提供部分股票数据:

股票代码,股票名称,当前价,涨跌额,涨跌幅,年初至今,成交量,成交额,换手率,市盈率(TTM),股息率,市值
SH600734,实达集团,2.60,+0.24,+10.17%,-61.71%,1340.27万,3391.14万,2.58%,亏损,0.00%,16.18亿
SH900957,凌云B股,0.36,+0.033,+10.09%,-35.25%,119.15万,42.10万,0.65%,44.65,0.00%,1.26亿
SZ000584,哈工智能,6.01,+0.55,+10.07%,-4.15%,2610.86万,1.53亿,4.36%,199.33,0.26%,36.86亿
SH600599,熊猫金控,6.78,+0.62,+10.06%,-35.55%,599.64万,3900.23万,3.61%,亏损,0.00%,11.25亿
SH600520,文一科技,8.21,+0.75,+10.05%,-24.05%,552.34万,4464.69万,3.49%,亏损,0.00%,13.01亿
SH603682,锦和商业,11.73,+1.07,+10.04%,+48.29%,2746.63万,3.15亿,29.06%,29.62,-,55.42亿
SZ300831,派瑞股份,12.27,+1.12,+10.04%,+208.29%,25.38万,311.41万,0.32%,60.59,-,39.26亿
SH900939,汇丽B,0.504,+0.046,+10.04%,-23.52%,123.86万,61.86万,1.41%,52.80,0.00%,9147.60万
SH600880,博瑞传播,4.39,+0.40,+10.03%,+10.03%,1117.75万,4816.57万,1.02%,95.87,0.50%,48.00亿
SZ000609,中迪投资,7.68,+0.70,+10.03%,+39.64%,2663.08万,2.00亿,9.12%,58.84,0.00%,22.98亿
SZ300328,宜安科技,15.80,+1.44,+10.03%,+7.19%,432.45万,6832.68万,0.95%,64.80,0.51%,72.72亿
SZ002988,豪美新材,17.33,+1.58,+10.03%,+58.41%,3.50万,60.68万,0.06%,24.42,-,40.34亿
SZ300505,川金诺,15.61,+1.42,+10.01%,-11.26%,493.54万,7555.40万,6.03%,26.70,0.85%,20.40亿
SZ300830,金现代,14.95,+1.36,+10.01%,+239.77%,63.66万,951.76万,0.74%,70.76,0.00%,64.30亿
SH603630,拉芳家化,17.26,+1.57,+10.01%,+27.85%,949.49万,1.60亿,4.19%,209.44,0.83%,39.13亿
SZ002655,共达电声,11.43,+1.04,+10.01%,-14.64%,1683.51万,1.88亿,4.68%,166.69,0.00%,41.15亿
SZ300460,惠伦晶体,16.59,+1.51,+10.01%,+0.97%,430.28万,6974.52万,2.56%,亏损,0.00%,27.92亿
SH603929,亚翔集成,20.33,+1.85,+10.01%,+33.40%,1373.66万,2.76亿,6.44%,84.29,1.25%,43.38亿
SH603392,万泰生物,35.97,+3.27,+10.00%,+311.09%,6.92万,248.91万,0.16%,65.24,-,155.97亿
SZ000788,北大医药,6.82,+0.62,+10.00%,+2.40%,832.44万,5583.87万,1.40%,89.69,0.32%,40.65亿
SH601609,金田铜业,10.89,+0.99,+10.00%,+66.26%,4027.64万,4.28亿,16.64%,32.38,0.32%,158.66亿
SZ000403,双林生物,52.48,+4.77,+10.00%,+62.48%,171.75万,9013.54万,0.63%,88.80,0.23%,143.05亿
SZ300832,新产业,72.80,+6.62,+10.00%,+131.92%,10.73万,780.85万,0.26%,40.20,0.62%,299.64亿
SZ002985,北摩高科,92.58,+8.42,+10.00%,+310.92%,2422.97万,21.55亿,64.54%,60.48,1.08%,139.02亿
SH603348,文灿股份,18.06,+1.64,+9.99%,-25.15%,357.86万,6328.87万,4.39%,89.39,0.89%,41.83亿
SH603900,莱绅通灵,8.92,+0.81,+9.99%,-5.61%,1364.10万,1.15亿,4.01%,43.78,5.06%,30.37亿
SH603042,华脉科技,17.85,+1.62,+9.98%,+17.05%,491.44万,8705.99万,4.86%,128.50,0.31%,24.28亿
SZ300260,新莱应材,19.83,+1.80,+9.98%,+68.48%,1800.45万,3.48亿,14.16%,65.15,0.73%,40.04亿
SZ000557,西部创业,3.42,+0.31,+9.97%,-0.87%,2751.17万,9408.89万,1.89%,79.39,0.00%,49.88亿
SZ300716,国立科技,9.94,+0.90,+9.96%,-4.24%,142.25万,1413.92万,1.50%,亏损,0.29%,15.91亿

判断股票数据是否存在

进行股票查询的前提是股票的数据必须存在才能执行

这里要利用Python 的os工具包,判断文件是否存在,只有存在才会继续运行代码

import os
if os.path.isfile(file_name) is True and os.path.getsize(file_name) != 0:
     # 检测文件是否存在且是否为空内容
     funx()
 elif os.path.isfile(file_name) is False:
     print("没有股票数据文件或文件名错误,请检查")
 elif os.path.getsize(file_name) == 0:
     print("股票数据文件内容为空,请检查")

读取并处理股票数据

在进行查询前,得把股票数据给读取并处理了
之前说的关于数据源的隔开符号,在这里就用上了

def file_read():                                # 读取并处理股票数据文件 函数
    count = 0                                   # 股票条数计数器
    data_dict = {}                              # 股票数据存放点
    with open(file_name, "r", encoding="Utf-8") as f:
        for line in f:
            count += 1                          # 统计有多少个数据
            file_r = line.strip().split(",")    
            # 源数据都是逗号隔开,使用逗号将数据分割,空格隔开直接split()
            if count == 1:
                fist_list = file_r
            else:
                data_dict[file_r[1]] = dict(zip(fist_list, file_r))
                # 以股票名称 作为字典key
    return data_dict, fist_list, count-1        # 这里将股票数据,头行标签,统计条数返回
    file_name = "stock_data.txt"  # 本地文件名

总体代码

讲了两个要定义的 函数后,是时候上主菜了
咱直接上总代码,一共4个函数

    import os

    def file_judgment(funx):
        """
        这里使用装饰器判断文件是否存在,只有存在才会运行文件
        """
        def inner():
            if os.path.isfile(file_name) is True and os.path.getsize(file_name) != 0:
                # 检测文件是否存在且是否为空内容
                funx()
            elif os.path.isfile(file_name) is False:
                print("没有股票数据文件或文件名错误,请检查")
            elif os.path.getsize(file_name) == 0:
                print("股票数据文件内容为空,请检查")
            return funx()
        return inner

    @file_judgment
    def file_read():                                # 读取并处理股票数据文件 函数
        count = 0                                   # 股票条数计数器
        data_dict = {}                              # 股票数据存放点
        with open(file_name, "r", encoding="Utf-8") as f:
            for line in f:
                count += 1                          # 统计有多少个数据
                file_r = line.strip().split(",")    
                # 源数据都是逗号隔开,使用逗号将数据分割,空格隔开直接split()
                if count == 1:
                    fist_list = file_r
                else:
                    data_dict[file_r[1]] = dict(zip(fist_list, file_r))
                    # 以股票名称 作为字典key
        return data_dict, fist_list, count-1        # 这里将股票数据,头行标签,统计条数返回

    def data_filter(user_input, compare=None):      # 查询内容判断 函数
        fist_list = file_read()[1]
        data_dict = file_read()[0]
        match_count = 0
        if compare is None:
            for key in data_dict:
                if user_input in key:  # 这里模糊查询和具体查询都能判断
                    match_count += 1
                    print("\n", data_dict[key])
                    break
            else:
                print("\n输入查询不存在,请检查核对输入")
        else:
            u_k, u_v = user_input.split(compare)
            if u_v.isdigit():        # 判断 比较符后是否输入为数字
                u_k, u_v = u_k.strip(), float(u_v)
                if u_k in fist_list[2:]:            # 前两个数据没啥关系,如 股票名称 这里排除掉
                    for data in data_dict:
                        if float(data_dict[data][u_k].strip("%,亿,万")) > u_v:
                            # 换手率,成交额 后面都有 一个单位,这里给去掉
                            match_count += 1
                            print(f"{fist_list}\n{data_dict[data]}\n")
                else:
                    print(f"比较数据输入错误,请重新核对输入\t{fist_list[2:]}")
                print(f"\n总共匹配到 {match_count} 个数据")
            else:
                print("\n", "请输入正确查询内容".center(50, "="))

    def data_inquire():
        all_count = file_read()[2]
        while True:
            print(f"\n一共已存在{all_count} 条股票数据")
            user_input = input("\n请输入查询内容>:")
            if len(user_input) == 0:
                continue
            if ">" in user_input:
                data_filter(user_input, ">")
            elif "<" in user_input:
                data_filter(user_input, "<")
            elif ">=" in user_input:
                data_filter(user_input, ">=")
            elif "<=" in user_input:
                data_filter(user_input, "<=")
            else:
                data_filter(user_input)

    file_name = "stock_data.txt"  # 本地文件名

    data_inquire()

运行结果展示

在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python 中进行股票数据分析时, 一般有几种常见的方法来提取数据: 1. 使用第三方 API 获取数据: 可以使用各种第三方 API 来获取股票数据, 比如 Yahoo Finance、Google Finance 等. 这些 API 通常提供各种不同的接口, 可以获取实时或历史数据, 包括股票价格、成交量、市值等信息. 2. 使用爬虫抓取数据: 可以使用 Python 的爬虫库(如 Beautiful Soup、Scrapy 等)来抓取股票数据, 从而获取各种信息. 这种方法一般较为复杂, 但可以获取一些不能通过 API 获取的数据. 3. 使用 Pandas 读取本地文件: 如果你已经下载了股票数据的 CSV 文件, 可以使用 Pandas 库来读取并处理这些数据. Pandas 提供了许多方便的函数, 可以轻松地进行数据清洗、分析和可视化. 无论使用哪种方法, 都需要确保你具有相应的权限和许可, 并遵守所有相关法律法规. ### 回答2: Python股票数据分析可以通过多种方式提取数据。以下是几种常见的方法: 1. 使用第三方库:Python有许多用于提取和处理股票数据的第三方库,例如pandas、numpy、yfinance等。可以使用这些库来直接从互联网上下载股票数据,并以DataFrame等数据结构的形式进行分析和处理。 2. 使用API:许多财经网站和数据提供商提供了API接口,可以通过Python代码获取股票数据。例如,Alpha Vantage、Quandl、Yahoo Finance等都提供了Python SDK,可以使用它们提供的API获取各种股票数据。 3. 使用爬虫技术:如果没有现成的API接口可用,也可以使用Python编写爬虫来抓取网页上的股票数据。通过分析网页的HTML结构,可以提取出所需的数据,并通过Python进行处理和分析。 无论使用哪种方法,获取到的股票数据可以包括股票的价格、成交量、涨跌幅等各种指标。在进行数据分析时,可以利用Python数据分析和可视化库,例如Matplotlib、Seaborn等,对数据进行统计分析、绘图和可视化展示,以便更好地理解和研究股票市场的动态。同时,还可以使用Python的机器学习库,例如Scikit-learn等,构建预测模型,分析股票价格的走势和未来趋势,进行投资决策的支持。 总之,利用Python进行股票数据分析,可以通过第三方库、API或爬虫等方式获取数据,并通过数据分析和机器学习等技术进行深入研究,为投资决策提供支持。 ### 回答3: Python股票数据分析主要通过数据的提取来进行。在实际操作过程中,可以使用各种Python库和工具来获取所需的股票数据。 首先,我们可以使用pandas_datareader库来从在线数据源(如雅虎财经、谷歌财经等)中提取股票数据。这个库提供了一个简单的API接口,可以直接从指定的数据源中获取历史股票价格数据,并将其存储为DataFrame格式。 其次,对于一些特定的股票数据,我们可以通过调用各自财务数据提供商的API来获取。比如,我们可以使用Alpha Vantage API来获取实时股价、财务报表、市场指标等数据,或者使用Tushare来获取中国股市的各种数据。 此外,还可以使用爬虫技术从股票网站上直接抓取数据。对于一些不提供API接口的数据源,我们可以使用Python库如BeautifulSoup、Scrapy等来实现数据的爬取和提取。 在提取股票数据的过程中,我们通常会选择感兴趣的指标,如收盘价、开盘价、最高价、最低价等,然后使用相应的函数和方法进行提取和数据处理。通过对数据的清洗、整理和计算,我们可以得到基本的统计指标,如均值、标准差、最大值、最小值等,从而对股票数据进行更详细的分析和研究。 总之,Python提供了丰富的库和工具,方便用户从不同的数据源中提取股票数据,并进行各种数据分析和挖掘。通过合理的选取和处理,我们可以获取到所需的股票数据,并为后续的股票分析提供基础和支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值