python综合实战项目 股票数据分析处理(代码注释详细)

python综合实战项目 股票数据分析处理(代码注释详细),第1张

python综合实战项目 股票数据分析处理(代码注释详细)

步骤
  • 系列文章
  • 前言
    • 题目要求
    • 题目要求
    • 数据源
    • 代码
  • 总结

系列文章

提示:转到python专栏,观看更多内容!
点我直达–>python专栏


前言

    
    
    


题目要求

开发程序对stock_data.txt进⾏以下 *** 作:

  1. 程序启动后,给⽤户提供查询接⼝,允许⽤户᯿复查股票⾏情信息(⽤到循环)
  2. 允许⽤户通过模糊查询股票名,⽐如输⼊“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
  3. 允许按股票价格、涨跌幅、换⼿率这⼏列来筛选信息,⽐如输⼊“价格>50”则把价格⼤于50的股票
    都打印,输⼊“市盈率<50“,则把市盈率⼩于50的股票都打印,不⽤判断等于。

题目要求

个人练手写的,和题目有点出入,只是提供了一下自己的思路。使用dataframe实现。
我的实现效果:


数据源

复制到自己新建的stock_data.csv文件

股票代码,股票名称,当前价,涨跌额,涨跌幅,年初至今,成交量,成交额,换手率,市盈率(TTM),股息率,市值
SH601778,N晶科,6.29,+1.92,+43.94%,+43.94%,259.66万,1625.52万,0.44%,22.32,-,173.95亿
SH688566,吉贝尔,52.66,+6.96,+15.23%,+122.29%,1626.58万,8.09亿,42.29%,89.34,-,98.44亿
SH688268,华特气体,88.80,+11.72,+15.20%,+102.51%,622.60万,5.13亿,22.87%,150.47,-,106.56亿
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亿
SZ000615,京汉股份,4.61,+0.42,+10.02%,+4.06%,518.09万,2388.41万,0.69%,亏损,0.00%,36.06亿
SZ300443,金雷股份,18.33,+1.67,+10.02%,+32.74%,987.25万,1.75亿,6.19%,18.78,1.08%,43.64亿
SH600506,香梨股份,11.42,+1.04,+10.02%,+11.96%,1039.48万,1.18亿,7.04%,亏损,0.00%,16.87亿
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亿
SZ002449,国星光电,11.92,+1.08,+9.96%,-6.80%,5185.52万,6.03亿,8.53%,21.51,2.73%,73.72亿


代码
# @Time    : 2021/12/1 10:13
# @Author  : 南黎
# @FileName: Day 4 股票查询程序数据.py
import pandas as pd
import numpy as np

#读入数据为dataframe格式   stock_data.csv 就是数据源,因为作业只交py所以没有放上
stock_data = pd.read_csv("stock_data.csv", encoding="utf-8",header=0)#编码格式utf-8,第一行作为索引

#输入搜索类别模块
while True:
    print("#" * 10+"输入搜索类别模块"+"#" * 10)
    searchKEY = input("请输入搜索关键字:股票代码,股票名称,当前价,涨跌额,涨跌幅,年初至今,成交量,成交额,换手率,市盈率(TTM),股息率,市值"
                      "n或是数字代码(比如说输入1表示股票代码):1股票代码,2股票名称,3当前价,4涨跌额,5涨跌幅,6年初至今,7成交量,8成交额,9换手率,10市盈率(TTM),11股息率,12市值n请输入:")
    if searchKEY == "1":
        searchKEY = "股票代码"
        break
    elif searchKEY == "2":
        searchKEY = "股票名称"
        break
    elif searchKEY == "3":
        searchKEY = "当前价"
        break
    elif searchKEY == "4":
        searchKEY = "涨跌额"
        break
    elif searchKEY == "5":
        searchKEY = "涨跌幅"
        break
    elif searchKEY == "6":
        searchKEY = "年初至今"
        break
    elif searchKEY == "7":
        searchKEY = "成交量"
        break
    elif searchKEY == "8":
        searchKEY = "成交额"
        break
    elif searchKEY == "9":
        searchKEY = "换手率"
        break
    elif searchKEY == "10":
        searchKEY = "市盈率(TTM)"
        break
    elif searchKEY == "11":
        searchKEY = "股息率"
        break
    elif searchKEY == "12":
        searchKEY = "市值"
        break
    else:
        print("输入错误!重新输入")
print("你选择了" + searchKEY)

print("#" * 10 + "输入搜索要求开始" + "#" * 10)
searchRequest=input("输入搜索要求,比如说>25表示大于25的数据,输入=25表示包含25的数据,亏损会显示为-1n请输入:")
print("你选择了" + searchRequest)

# 过滤数据模块
print("#" * 10 + "过滤数据开始" + "#" * 10)
stock_data_new=stock_data.copy() #新建一个数据副本存储过滤数据异常字符后的数据
ignoreStrs=["万", "亿" , "+",  "%"]#用于过滤掉特殊的字符串字符,过滤掉后再转float比较,注意这里有个市盈率(TTM)的 “亏损” 要特殊处理
col_names=["股票代码","股票名称","当前价","涨跌额","涨跌幅","年初至今","成交量","成交额","换手率","市盈率(TTM)","股息率","市值"]
for col_name in col_names:
    for i in range(stock_data.shape[0]):
        data=str(stock_data[col_name][i])
        if data=="亏损":#亏损设置为-1
            stock_data_new.loc[i, [col_name]] = -1
            continue
        for ignoreStr in ignoreStrs:
            data=data.strip(ignoreStr)
        # stock_data_new[col_name][i]=data  #如果这么写会链式编程报错SettingWithCopyWarning ,要改为下面的语句
        stock_data_new.loc[i,[col_name]]=data
# print(stock_data_new)#测试打印过滤异常字符后的数据


# 查询数据模块
print("#" * 10 + "查询数据开始" + "#" * 10)
panduan = searchRequest[0]  # 判断字符
message = searchRequest[1:]  # 搜索信息
# print(panduan) #测试打印判断字符
# print(message)#测试打印搜索信息
if searchKEY=="股票代码" or searchKEY=="股票名称":#只有这两个是字符串不能用于比较大小转化为float
    search = stock_data_new[searchKEY].str.contains(message)  # 根据查询条件获取被查询的对象
    print("检测到所选字段无法比较数据,默认切换到包含搜索")
    print(stock_data_new[search])  # 输入要查询的内容
else:
    if panduan == ">":
        search = stock_data_new[searchKEY].apply(float)> float(message)  # 根据查询条件获取被查询的对象
        print(stock_data_new[search])  # 输入要查询的内容
    elif panduan == "=":
        search = stock_data_new[searchKEY].str.contains(message)    # 根据查询条件获取被查询的对象
        print(stock_data_new[search])  # 输入要查询的内容
    elif panduan == "<":
        search = stock_data_new[searchKEY].apply(float) < float(message)  # 根据查询条件获取被查询的对象
        print(stock_data_new[search])  # 输入要查询的内容


总结

大家喜欢的话,给个,点个关注!继续跟大家分享敲代码过程中遇到的问题!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5651928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存