Nano Hash - криптовалюты, майнинг, программирование

Поиск наиболее коррелированных акций с определенной точкой в ​​​​R с еженедельными данными

Я пытался найти ответ на этот вопрос везде, и есть много ответов о корреляции акций, но ничто не вращается вокруг одной точки.

Моя цель — найти, какие 5 акций имеют наибольшую корреляцию с конкретным идентификатором акции. Набор данных делится еженедельно в течение 10 лет.

Я попытался разделить наборы данных на два: 1) набор данных без нужного мне запаса 2) набор данных с конкретным запасом.

Я знаю, что мне нужно еженедельно сравнивать все акции с этой конкретной акцией и каким-то образом находить, какая из них наиболее коррелирует в течение определенного периода времени.

Это примерно ясно в моей голове; однако я застрял в реализации, потому что не знаю, как сгруппировать недели и сравнить их с одной неделей и так далее.

Конечная цель: сравнить все акции первой недели с первой строкой второй таблицы и так далее.

Большое спасибо!

PS: это не университетское задание, я просто пытаюсь улучшить свои навыки программирования.

24.02.2020

  • Вам будет легче помочь, если вы включите простой воспроизводимый пример с образцом ввода и желаемым выводом, которые можно использовать для тестирования и проверки возможных решений. Изображения данных не очень полезны, потому что мы не можем копировать/вставлять данные в R. 24.02.2020
  • Уважаемый @MrFlick, извините, я пишу здесь впервые. Я приложил часть кода, который я использовал для разделения данных, чтобы получить акции, которые я хочу. Я надеюсь, что это то, о чем вы просили, я не знаю, как дать вам образец набора данных, пожалуйста, дайте мне знать, и я сделаю это прямо сейчас. 24.02.2020
  • Одним из способов предоставления ваших данных будет вставка dput() вывода вашего набора данных в ваш вопрос: dput(stocks). Если вы предпочитаете не делиться полным набором данных, вы можете использовать head(), чтобы поделиться только первыми несколькими строками: dput(head(stocks, 20)). 24.02.2020
  • @Till Большое спасибо! Я отредактировал свой пост, включив в него код, который я использовал, + функцию dput, которую вы рекомендовали. 24.02.2020
  • Вы включили команду dput() в свой код, но нам нужен вывод, чтобы мы могли вам помочь. Когда вы выполните dput(stocks), вы увидите вывод в консоли, начинающийся с structure(..., пожалуйста, скопируйте и вставьте этот код в свой вопрос, желательно в отдельный раздел кода. 24.02.2020

Ответы:


1

Это шаги преобразования данных, чтобы привести ваш набор данных в состояние, в котором вы можете легко вычислить корреляции:

  1. Извлеките неделю и год из столбца «Дата», чтобы создать идентификатор недели, уникальный для всех лет (week() и year() являются функциями lubridate).
  2. Столбец «Дата сброса».
  3. Сделайте набор данных широким, чтобы значение для каждой акции было в отдельном столбце (pivot_wider() — это функция tidyr).

Код:

library(lubridate)
library(dplyr)
library(tidyr)

week_stocks <-
  stocks %>%
  mutate(Week = paste(year(Date), week(Date), sep = "_")) %>%
  select(StockID, Value, Week) %>%
  pivot_wider(names_from = StockID, values_from = Value)

После преобразования вы используете cor(), чтобы получить корреляции всех акций. Поскольку вас интересуют корреляции только с одной конкретной акцией, вы можете использовать select(), чтобы отбросить все остальные акции и их корреляции.

cor(week_stocks[-1]) %>%
  as_tibble(rownames = "stockIDs") %>%
  select(stockIDs, `210449`)

Некоторые общие замечания:

  1. В коде в вашем вопросе вы используете команду attach(), как правило, не рекомендуется использовать ее для фреймов данных, так как это может привести к путанице и ошибкам; см. этот пост в блоге.
  2. Если вы хотите улучшить свои навыки R, ознакомьтесь с tidyverse и его пакетами. Это отличный набор пакетов, которые разделяют концепцию операций по обработке и анализу данных, он очень мощный и позволяет решать большинство задач по анализу данных с помощью небольшого набора кратких команд.
  3. Задавая вопрос на StackOverflow, обычно рекомендуется включать свои данные или, по крайней мере, их часть. dput() предоставляет код, необходимый для этого. Вставив вывод dput() в ваш вопрос, другие пользователи могут воссоздать ваши данные в своей среде и разработать свой ответ, проверяя свой код на ваших данных. Например, вот как выглядит вывод dput() моего фиктивного набора данных, который я использовал для создания кода в своем ответе.

Код:

dput(stocks)

Выход:

structure(list(StockID = c(16139, 210449, 210449, 210449, 210449, 
210449), Date = c("2015-09-11", "2015-09-11", "2015-09-18", "2015-09-25", 
"2015-10-02", "2015-10-09"), Value = c(0.055063, 0.01851903, 
0.01338099, 0.03982749, 0.04798457, 0.02433628)), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))
24.02.2020
  • Большое спасибо!! это сработало! Я ценю это и благодарю вас за общие советы, отмеченные 25.02.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..