Корреляция криптовалюты в python, работа со словарями - PullRequest
0 голосов
/ 24 января 2019

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

Я не знаю, как подготовить данные, чтобы найти корреляцию между различными валютами и между самой высокой ценой и объемом дляпример.Как это можно сделать в python (pandas) ... а также как мне определить диапазон дат в такой ситуации?

Вот ссылка на образец данных, мое кодирование и распечатку данных (AccessОТКРЫТО ДЛЯ ОБЩЕСТВЕННОСТИ): https://drive.google.com/open?id=1mjgq0lEf46OmF4zK8sboXylleNs0zx7I

1 Ответ

0 голосов
/ 24 января 2019

Для начала я бы предложил изменить ваши данные таким образом, чтобы значения OHLCV каждой валюты были их собственными столбцами (например, "btc_open | btc_high" и т. Д.). Это значительно упрощает создание матриц корреляции. Я бы также предложил начать с анализа только одной метрики (например, цены закрытия) и, возможно, движения периода (например, закрытия-открытия). Чтобы ответить на ваш вопрос:

Панды могут возвращать матрицу корреляции всех столбцов с:

df.corr()

Если вы хотите использовать только определенные столбцы, выберите их в DataFrame:

df[["col1", "col2"]].corr()

Вы можете вернуть одно значение корреляции между двумя столбцами в форме:

df["col1"].corr(df["col2"])

Если вы хотите указать конкретный диапазон дат, я бы направил вас на этот вопрос . Я полагаю, что для этого потребуется, чтобы столбец даты или индекс имели тип datetime. Если вы не знаете, как работать с этим типом или преобразовать его, я бы посоветовался обратиться к документации для панд (возможно, начните с pandas.to_datetime ).

В будущем я бы предложил включить в ваш пост фрагмент данных. Я не верю, что Google Диск является подходящей формой для обмена данными, и определенно неуместно устанавливать для данных «запросить доступ».

РЕДАКТИРОВАТЬ: я проверил ваши данные и создал меньшее подмножество, чтобы проверить этот метод. Если в данных есть недостатки, у вас могут возникнуть проблемы, но у меня их не было, когда я проверял их на выборке из ваших первых 100 дней и 10 монет (после транспонирования df.iloc [: 100,: 10].

Во-первых, транспонируйте DataFrame, чтобы столбцы были организованы по монетам, а строки - по датам.

df = df.T

После этого мы объединяем новый DataFrame (результат). В качестве альтернативы, можно объединить исходные и удалить столбцы после. К сожалению, я не могу думать о не итеративном методе. Этот метод идет столбец за столбцом, создает DataFrame для каждой монеты, добавляет префикс имени монеты к именам столбцов, а затем объединяет каждый DataFrame до конца.

result = pd.DataFrame()
coins = df.columns.tolist()
for coin in coins:
    coin_data = df[coin]
    split_coin = coin_data.apply(pd.Series).add_prefix(coin+"_")
    result = pd.concat([result, split_coin], axis=1)
...