【数据分析】爬取股票数据进行分析预测

2,033 阅读5分钟

关键词: 股票、 预测 、 数据分析、 爬虫

前言

  数据分析是当今社会中不可或缺的一部分,它在各个行业中都扮演着至关重要的角色。无论是在商业领域、科研领域还是政府领域,数据分析都是解决问题和做出决策的重要工具之一。从简单的数据清理和统计到复杂的机器学习和深度学习模型,数据分析提供了各种工具和方法,帮助人们从数据中提取出有价值的信息和知识,以指导各种决策。在本博客中,我们将探讨数据分析的重要性和应用,介绍常用的数据分析工具和技术,以及如何应用数据分析来解决实际问题和取得业务上的成功。

  最近炒股赔了很多钱,心急之下,拿起键盘一顿敲,写了一份爬虫用于爬取指定的股票,想着数据都爬取了,我不得拿出我的老本行技能——数据分析干一波,避免以后不再“买了就跌,卖了就涨”。

爬取数据

  爬取指定股票的历史价格可以分为以下几个步骤:

  1. 确定爬取数据的来源:股票历史价格可以从多个来源获取,如雅虎财经、谷歌财经、东方财富等,需要确定一个可靠的数据来源。
  2. 确定股票代码:每只股票都有唯一的代码,在确定要爬取哪只股票之前需要查找其代码。
  3. 确定时间范围:确定要获取的历史价格的时间范围,如过去一年、三年或五年的数据等。
  4. 编写爬虫程序:使用爬虫程序爬取数据。可以使用 Python 等编程语言来编写网络爬虫程序,通过 HTTP 请求获取股票价格数据,并解析 HTML 页面或 JSON 数据来提取所需信息。
  5. 存储数据:将爬取到的数据存储在数据库或文件中,以便后续数据分析和处理。

爬虫代码

import requests
import csv

url = "http://q.stock.sohu.com/hisHq?code=cn_601868&start=20210928&end=20230306&stat=1&order=D&period=d&callback=historySearchHandler&rt=jsonp"
response = requests.get(url, timeout=1)
content = response.content.decode('gbk')
content = content.replace('historySearchHandler', '')
content = content[2:-3]
dict_content = eval(content)
logs_content = dict_content["hq"]
# print(len(logs_content))

logs = ["0"] * (len(logs_content) + 1)
num = len(logs_content)
for i in logs_content:
    logs[num] = i
    num -= 1

f = open("123.csv", 'w', encoding='UTF8', newline='')
for doc in logs:
    writer = csv.writer(f)
    writer.writerow(doc)
f.close()

数据分析

  我们拿到了123.csv文件中的数据,第一列的数据为时间,我们取第二列的股票价格作为因变量,我们不预测次日的股票价格的具体值,只判定次日的价格比较今日的价格是涨还是跌即可。

傅里叶函数拟合

  傅里叶函数拟合是一种将函数用一系列基础正弦和余弦函数的线性组合来逼近原函数的方法。这些基础函数称为傅里叶基函数,它们的频率、振幅和相位可以任意调整,因此可以逼近各种形状的函数。
傅里叶函数:f(x)≈2a0​​+n=1∑∞​(an​cos(b−a2πnx​)+bn​sin(b−a2πnx​))

 f(x) =  a0 + a1*cos(x*w) + b1*sin(x*w) + a2*cos(2*x*w) + b2*sin(2*x*w) + a3*cos(3*x*w) + b3*sin(3*x*w) + a4*cos(4*x*w) + b4*sin(4*x*w) + a5*cos(5*x*w) + b5*sin(5*x*w) + a6*cos(6*x*w) + b6*sin(6*x*w) + a7*cos(7*x*w) + b7*sin(7*x*w) + a8*cos(8*x*w) + b8*sin(8*x*w)

图像:

image.png

结果

Coefficients (with 95% confidence bounds):
       a0 =       2.437  (2.427, 2.447)
       a1 =     0.01641  (-1.143, 1.176)
       b1 =     -0.1575  (-0.2808, -0.03414)
       a2 =    -0.03543  (-0.7845, 0.7136)
       b2 =    -0.05162  (-0.5768, 0.4735)
       a3 =    -0.06492  (-0.4409, 0.311)
       b3 =    -0.01715  (-1.429, 1.395)
       a4 =    -0.03532  (-2.871, 2.8)
       b4 =     0.09717  (-0.9434, 1.138)
       a5 =     0.06861  (-0.7096, 0.8468)
       b5 =    -0.02142  (-2.528, 2.485)
       a6 =    -0.06581  (-0.6867, 0.555)
       b6 =    -0.01422  (-2.898, 2.869)
       a7 =   -0.001212  (-1.698, 1.696)
       b7 =     0.03332  (-0.03373, 0.1004)
       a8 =      0.0619  (-2.259, 2.383)
       b8 =    -0.03964  (-3.661, 3.582)
       w =     0.01139  (0.01123, 0.01155)

Goodness of fit:
  SSE: 2.009
  R-square: 0.8288
  Adjusted R-square: 0.8199
  RMSE: 0.07826

高斯函数拟合

  高斯函数拟合是一种将函数用高斯函数的线性组合来逼近原函数的方法。高斯函数是一种常见的连续函数,它具有良好的可微性、可积性和正定性。
函数:f(x)≈i=1∑n​Ai​exp(−2σi2​(x−xi​)2​)

     f(x) = 
              a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2) + 
              a3*exp(-((x-b3)/c3)^2) + a4*exp(-((x-b4)/c4)^2) + 
              a5*exp(-((x-b5)/c5)^2) + a6*exp(-((x-b6)/c6)^2) + 
              a7*exp(-((x-b7)/c7)^2) + a8*exp(-((x-b8)/c8)^2)

图像

image.png

结果

Coefficients (with 95% confidence bounds):
       a1 =       1.253  (-2.791, 5.297)
       b1 =      -1.823  (-2.188, -1.457)
       c1 =      0.2997  (-0.09638, 0.6958)
       a2 =      0.5869  (0.3209, 0.853)
       b2 =      -1.212  (-1.231, -1.193)
       c2 =      0.1313  (0.09757, 0.1651)
       a3 =      0.5498  (0.1348, 0.9647)
       b3 =     -0.8995  (-0.9615, -0.8374)
       c3 =      0.2757  (0.1867, 0.3647)
       a4 =      0.3031  (0.2241, 0.3821)
       b4 =      0.5849  (0.5746, 0.5951)
       c4 =     0.05484  (0.0376, 0.07209)
       a5 =        1.44  (-76.89, 79.77)
       b5 =     -0.8678  (-8.402, 6.666)
       c5 =       1.648  (-25.97, 29.27)
       a6 =      0.1947  (0.02423, 0.3651)
       b6 =       1.062  (1.023, 1.102)
       c6 =      0.2106  (0.07503, 0.3462)
       a7 =       3.764  (-282.7, 290.2)
       b7 =       5.154  (-604.4, 614.7)
       c7 =       4.866  (-519.2, 528.9)
       a8 =     0.08618  (0.02201, 0.1504)
       b8 =      0.1105  (0.04477, 0.1762)
       c8 =       0.152  (0.02536, 0.2787)

Goodness of fit:
  SSE: 1.667
  R-square: 0.8579
  Adjusted R-square: 0.8478
  RMSE: 0.07195

多项式回归

  多项式回归函数是一种将函数用多项式的线性组合来逼近原函数的方法。多项式是一种常见的函数形式,它具有良好的可微性和可积性,多项式回归函数在数据拟合和函数逼近等领域都有广泛应用,尤其是在低维数据下表现良好。

f(x) = p1*x^8 + p2*x^7 + p3*x^6 + p4*x^5 + p5*x^4 + p6*x^3 + p7*x^2 + p8*x + p9

图像

image.png

结果

Coefficients (with 95% confidence bounds):
       p1 =   2.687e-25  (-1.22e-25, 6.595e-25)
       p2 =  -5.537e-20  (-1.497e-19, 3.898e-20)
       p3 =   3.916e-15  (-5.019e-15, 1.285e-14)
       p4 =   -7.06e-11  (-4.603e-10, 3.191e-10)
       p5 =  -3.596e-06  (-1.079e-05, 3.603e-06)
       p6 =      0.1103  (-0.3682, 0.5888)
       p7 =        4360  (-1.518e+04, 2.39e+04)
       p8 =  -2.246e+08  (-5.98e+08, 1.489e+08)
       p9 =   2.653e+12  (-3.233e+11, 5.63e+12)

Goodness of fit:
  SSE: 3.633
  R-square: 0.6903
  Adjusted R-square: 0.6829
  RMSE: 0.1038

正弦函数拟合

  正弦函数拟合是一种将函数用正弦函数的线性组合来逼近原函数的方法。正弦函数是一种周期性的连续函数,因此在处理周期性信号时具有很好的效果。正弦函数拟合在处理周期性信号和信号噪声较小的情况下具有较好的效果。

     f(x) =  
                    a1*sin(b1*x+c1) + a2*sin(b2*x+c2) + a3*sin(b3*x+c3) + 
                    a4*sin(b4*x+c4) + a5*sin(b5*x+c5) + a6*sin(b6*x+c6) + 
                    a7*sin(b7*x+c7) + a8*sin(b8*x+c8)

图像

image.png

数据

Coefficients (with 95% confidence bounds):
       a1 =       3.563  (-5.02e+05, 5.02e+05)
       b1 =    0.004507  (-421, 421)
       c1 =       63.86  (-1.885e+07, 1.885e+07)
       a2 =       1.256  (-5e+05, 5e+05)
       b2 =    0.009122  (-839.9, 839.9)
       c2 =       130.6  (-3.759e+07, 3.759e+07)
       a3 =     0.02736  (-748.9, 749)
       b3 =     0.02402  (-321.5, 321.6)
       c3 =      -3.893  (-1.425e+07, 1.425e+07)
       a4 =      0.1884  (-2173, 2173)
       b4 =     0.04826  (-201.3, 201.4)
       c4 =       -14.4  (-9.013e+06, 9.013e+06)
       a5 =      0.1053  (-1314, 1314)
       b5 =     0.03682  (-200.6, 200.7)
       c5 =      -39.11  (-8.994e+06, 8.994e+06)
       a6 =     0.09789  (-561.8, 562)
       b6 =     0.06514  (-12.63, 12.76)
       c6 =       304.6  (-5.675e+05, 5.681e+05)
       a7 =      0.1707  (-4160, 4160)
       b7 =     0.05632  (-115.9, 116)
       c7 =       162.3  (-5.187e+06, 5.188e+06)
       a8 =     0.06283  (-0.001512, 0.1272)
       b8 =     0.09286  (0.08221, 0.1035)
       c8 =      -396.4  (-872, 79.13)

Goodness of fit:
  SSE: 2.064
  R-square: 0.824
  Adjusted R-square: 0.8115
  RMSE: 0.08006

结尾

  在这里我向大家劝诫:科学理性炒股!小炒怡情,大炒伤身,强炒灰飞烟灭。我们应该科学理性炒股,这是一种基于严谨的分析和判断,科学合理地进行股票投资的方法。相比于盲目跟风、听信谣言等方式,科学理性炒股可以降低投资风险、提高收益率。

本文正在参加「金石计划」