和鲸社区数据分析每周挑战【第九十五期:奈飞股价预测分析】

news2024/11/20 10:33:20

和鲸社区数据分析每周挑战【第九十五期:奈飞股价预测分析】

文章目录

  • 和鲸社区数据分析每周挑战【第九十五期:奈飞股价预测分析】
    • 一、前言
      • 1、背景描述
      • 2、数据说明
      • 3、数据集预览
    • 二、数据读取和数据预处理
    • 三、历史股价数据可视化
    • 四、利用sklearn中LinearRegression模型进行股价预测分析
    • 五、使用Pytorch中LSTM模型进行股价预测分析
      • 1、设置随机种子及检查GPU可用性
      • 2、数据预处理
      • 3、构建简单LSTM模型
      • 4、定义损失函数和优化器
      • 5、训练模型
      • 6、测试模型
      • 7、可视化训练损失
      • 8、可视化预测结果

一、前言

本周的挑战内容为:奈飞股价预测分析

大家可以去我的和鲸鱼主页查看这个项目。

在这里插入图片描述

1、背景描述

本数据集收录了Netflix自2002年开始至2022年的股价数据,数据来源为Yahoo Finance。

Netflix(NFLX)是一家在视频流媒体领域非常成功的公司,运营着全球最大的视频流媒体订阅平台之一(目前已经有超过2.3亿的付费会员)。
它的商业模式也比较简单,主要通过向客户收取每月或每年的会员费来获取收入,客户订阅会员后,可以获得Netflix平台上各种类型和各种语言的电视连续剧和电影。
Netflix目前在190多个国家为客户提供视频流媒体服务,客户可以在任何时间、任何地点、任何设备上观看Netflix的内容。

2、数据说明

字段说明
Date日期
Open开盘价,是金融证券在市场上开始交易时的价格。
High指股票在一个时期内的最高交易价格。
Low指股票在一个时期内的最低交易价格。
Close收盘价,一般指股票在正常交易时段的最后交易价格。
Adj Close已调整收盘价,指修正了一只股票的收盘价,以反映该股票在核算后的价值,使用收盘价作为起点,但它考虑了股息,股票拆分和新股票发行等因素来确定价值。 调整后的收盘价代表了股票价值的更准确反映。
Volume交易量/成交量,衡量的是股票交易的股数或期货或期权交易的合约数。

3、数据集预览

数据集来源于本次活动提供:

在这里插入图片描述

二、数据读取和数据预处理

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

# 加载数据集
df = pd.read_csv('/content/Netflix Stock Price Data set 2002-2022.csv')

# 将日期列转换为datetime类型
df['Date'] = pd.to_datetime(df['Date'])
df

在这里插入图片描述

三、历史股价数据可视化

plt.figure(figsize=(12, 6))
plt.plot(df['Date'], df['Adj Close'])
plt.xlabel('Date')
plt.ylabel('Adjusted Close Price')
plt.title('Netflix Stock Price')
plt.grid(True)
plt.show()

在这里插入图片描述

四、利用sklearn中LinearRegression模型进行股价预测分析

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression 

# 创建特征和目标变量
X = df[['Open', 'High', 'Low', 'Volume']]
y = df['Adj Close']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 使用线性回归模型进行训练和预测
model = LinearRegression()
model.fit(X_train, y_train)
predicted_prices = model.predict(X_test)

# 可视化预测结果
plt.figure(figsize=(12, 6))
plt.plot(df['Date'], df['Adj Close'], label='Actual')
plt.plot(df['Date'].iloc[-len(y_test):], predicted_prices, label='Predicted')
plt.xlabel('Date')
plt.ylabel('Adjusted Close Price')
plt.title('Netflix Stock Price Prediction')
plt.legend()
plt.grid(True)
plt.show()

在这里插入图片描述

五、使用Pytorch中LSTM模型进行股价预测分析

1、设置随机种子及检查GPU可用性

import torch
import torch.nn as nn
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split

# 设置随机种子
torch.manual_seed(42)

# 检查GPU可用性
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
device
device(type='cuda')

2、数据预处理

# 选择调整后的收盘价作为目标变量
data = df['Adj Close'].values.reshape(-1, 1)

# 归一化数据
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

# 划分训练集和测试集
train_size = int(len(scaled_data) * 0.8)
train_data = scaled_data[:train_size, :]
test_data = scaled_data[train_size:, :]

# 创建训练集和测试集的特征和目标变量
def create_dataset(data, lookback):
    X, y = [], []
    for i in range(len(data) - lookback):
        X.append(data[i:i+lookback, 0])
        y.append(data[i+lookback, 0])
    return np.array(X), np.array(y)

lookback = 60  # 使用前60个时间步作为输入特征
X_train, y_train = create_dataset(train_data, lookback)
X_test, y_test = create_dataset(test_data, lookback)

# 转换数据为PyTorch张量,并移动到GPU上
X_train = torch.from_numpy(X_train).float().to(device)
y_train = torch.from_numpy(y_train).float().to(device)
X_test = torch.from_numpy(X_test).float().to(device)
y_test = torch.from_numpy(y_test).float().to(device)

3、构建简单LSTM模型

class LSTMModel(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(LSTMModel, self).__init__()
        self.hidden_size = hidden_size
        self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        out, _ = self.lstm(x)
        out = self.fc(out[:, -1, :])
        return out

input_size = 1
hidden_size = 64
output_size = 1

# 初始化模型,并移动到GPU上
model = LSTMModel(input_size, hidden_size, output_size).to(device)
model
LSTMModel(
  (lstm): LSTM(1, 64, batch_first=True)
  (fc): Linear(in_features=64, out_features=1, bias=True)
)

4、定义损失函数和优化器

criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

5、训练模型

num_epochs = 100
batch_size = 32
train_loss_history = []

for epoch in range(num_epochs):
    for i in range(0, len(X_train), batch_size):
        inputs = X_train[i:i+batch_size]
        targets = y_train[i:i+batch_size]

        # 前向传播
        outputs = model(inputs.unsqueeze(2))
        loss = criterion(outputs.squeeze(), targets)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    train_loss_history.append(loss.item())

    if epoch % 10 == 0:
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.6f}')
Epoch [1/100], Loss: 0.007953
Epoch [11/100], Loss: 0.000076
Epoch [21/100], Loss: 0.000081
Epoch [31/100], Loss: 0.000081
Epoch [41/100], Loss: 0.000136
Epoch [51/100], Loss: 0.000155
Epoch [61/100], Loss: 0.000073
Epoch [71/100], Loss: 0.000125
Epoch [81/100], Loss: 0.000320
Epoch [91/100], Loss: 0.000099

6、测试模型

model.eval()
with torch.no_grad():
    test_inputs = X_test.unsqueeze(2)
    test_outputs = model(test_inputs)
    test_loss = criterion(test_outputs.squeeze(), y_test)
    predicted_prices = scaler.inverse_transform(test_outputs.cpu().numpy())

print(f'Test Loss: {test_loss.item():.6f}')
Test Loss: 0.000395

7、可视化训练损失

plt.figure(figsize=(12, 6))
plt.plot(train_loss_history, label='Training Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss History')
plt.legend()
plt.show()

在这里插入图片描述

8、可视化预测结果

plt.figure(figsize=(12, 6))
plt.plot(df['Date'][train_size+lookback:], scaler.inverse_transform(test_data[lookback:]), label='Actual')
plt.plot(df['Date'][train_size+lookback:], predicted_prices, label='Predicted')
plt.xlabel('Date')
plt.ylabel('Stock Price')
plt.title('Netflix Stock Price Prediction')
plt.legend()
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 系统下的df、du、fdisk、lsblk指令

文章目录 1 查看磁盘与目录容量(df、du)2 查看磁盘分区(fdisk、lsblk)3 df、du、fdisk、lsblk的区别 1 查看磁盘与目录容量(df、du) df -h //列出文件系统的整体磁盘使用量在显示的结果中要特别留意根目录…

安洵杯2023 部分pwn复现

1. harde_pwn 漏洞点: 覆盖printf的返回地址 from pwn import * from LibcSearcher import LibcSearcher from sys import argv from Crypto.Util.number import bytes_to_long import os def ret2libc(leak, func, path):if path :libc LibcSearcher(func, leak…

二级Python考试环境安装教程

二级Python考试环境 Python3.5.3至Python3.9.10版。为方便考生学习与考点备考,现提供二级Python应用软件的网络下载,广大考生和考点管理员可以下载使用 软件包下载(62.18 MB) https://www.123pan.com/s/y4HrVv-0S0lA.html 安装…

在windows11环境下安装CUDA11.6+Anaconda3+pyToach1.13搭建炼丹炉

0.电脑环境 系统:win11 显卡:NVIDIA GTX1650 还有一个pyCharm,其他也用不到了,需要的文章中会进行说明 1.安装CUDA11.6 目前2023.03出来的pyToach2.0是用不到了,因为最低版本支持CUDA11.7。我的显卡是1650&#xff0c…

leetcode数据库题第八弹(免费题刷完了)

leetcode数据库题第八弹(免费题刷完了) 1757. 可回收且低脂的产品1789. 员工的直属部门1795. 每个产品在不同商店的价格1873. 计算特殊奖金1890. 2020年最后一次登录1907. 按分类统计薪水1934. 确认率1965. 丢失信息的雇员1978. 上级经理已离职的公司员工…

WebRTC音视频会议底层支撑技术

WebRTC允许应用使用P2P通信。WebRTC是一个广泛的话题,在本文中,我们将重点讨以下问题。 为什么Web RTC 如此受欢迎? 在P2P连接过程中会发生什么 信号传递 NATs和ICE STUN & TURN服务器 VP9视频编解码器 WebRTC APIs 安全 1.为什…

科技资讯|苹果新专利曝光:手势增强用户的交互体验

根据美国商标和专利局(USPTO)公示的最新清单,苹果公司获得了一项编号为 US 20230195237 A1 的专利,展示了使用手势导航用户界面的交互体验。 苹果这项专利涉及 iPhone、iPad、Apple Watch 和 Mac,使用屏幕生成组件和…

Typora的安装和授权(2023)

文章目录 1. 文章引言2. Typora的下载3. Typora的安装4. Typora的授权 1. 文章引言 我们在开发的过程中,不可或缺地要使用到markdown文本,支持markdown文本的编辑器有很多,其中Typora便是一款不错的编辑器。 不过,Typora是收费的…

知行之桥EDI系统QA第二期:AS2专题

随着使用知行之桥EDI系统的用户群体日益壮大,在使用过程中,用户可能对系统的工作原理、功能模块和实施过程有一些疑问。近期整理了有关 AS2 的四个常见问题: 1.知行之桥 EDI系统支持AS2 协议的 AES_GCM 算法吗?2.AS2发送文件后收…

C++不知算法系列之计数排序算法的计数之巧

1. 前言 计数排序是较简单的排序算法,其基本思想是利用数组索引号有序的原理。 如对如下的原始数组中的数据(元素)排序: //原始数组 int nums[5]{9,1,7,6,8};使用计数排序的基本思路如下: 创建一个排序数组。数组的大小由原始数组的最大值…

ActiveMQ消息队列的核心概念

文章目录 ActiveMQ消息队列的核心概念1.什么是MQ消息队列2.为什么要使用MQ消息队列3.MQ消息队列的应用场景3.1.异步处理3.2.应用解耦3.3.流量削锋 4.常见的MQ消息队列产品对比 ActiveMQ消息队列的核心概念 1.什么是MQ消息队列 Message Queue消息队列简称MQ,消息队…

NXP i.MX 6ULL工业开发板规格书( ARM Cortex-A7,主频792MHz)

1 评估板简介 创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 评估板接口资源丰富&…

AI通用大模型 —— Pathways,MoE, etc.

文章目录 Pathways现有AI缺憾Pathways Can DoMultiple TasksMultiple SensesSparse and Efficient Mixture of Experts(MoE)Neural Computation1991, Adaptive mixtures of local expertsICLR17, Outrageously Large Neural Networks: The Sparsely-Gate…

【已解决】ModuleNotFoundError: No module named ‘timm.models.layers.helpers‘

文章目录 错误信息原因解决方法专栏:神经网络精讲与实战AlexNetVGGNetGoogLeNetInception V2——V4ResNetDenseNet 错误信息 在使用timm库的时候出现了ModuleNotFoundError: No module named timm.models.layers.helpers’的错误,详情如下: …

Windows下安装ClickHouse图文教程

文章目录 1.安装WSL21.1启用适用于 Linux 的 Windows 子系统1.2启用Windows虚拟机功能1.3将WSL2设置为默认版本1.4下载Linux内核更新包1.5安装Linux子系统1.6设置账户和密码 2.安装Docker2.1下载与安装2.2设置镜像地址 3.安装Clickhouse3.1拉取镜像3.2启动clickhouse-server3.3…

Docker学习笔记7

启动一个运行httpd服务的容器: docker run -it --namec3 centos:latest /bin/bash 在容器中安装apache服务: yum install -y httpd 在这个过程中遇到一个问题: Error: Failed to download metadata for repo appstream: Cannot prepare …

关于PHP调用openAI chatGPT一些问题

我是直接使用gpt生成的curl代码区调用的 1:windows可能出现代理访问问题,报443端口问题 解决办法:开启代理后,需要到设置 确认这里打开状态 在curl请求里面加上对应的代码 curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1&qu…

java spring cloud 企业工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈,内卷严重&#xff0c…

企业运维 | NFS、Samba服务在Docker容器环境中快速搭建部署实践

欢迎关注「全栈工程师修炼指南」公众号 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折,莫待无花空折枝。 ” 作者主页&#xff1…

chatgpt赋能python:Python能自举吗?

Python能自举吗? Python是一门高级编程语言,由Guido van Rossum于1989年开发而来。Python被广泛用于Web开发、数据分析、人工智能等领域。因为Python语法简洁易懂,易于学习,许多人都称其为“入门语言”。 那么问题来了&#xff…