-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathНеделя 4. Составление фондового индекса.py
60 lines (47 loc) · 3.87 KB
/
Неделя 4. Составление фондового индекса.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 10 09:28:57 2017
"""
import pandas as pd
from sklearn.decomposition import PCA
from numpy import corrcoef
#==============================================================================
# Загрузите данные close_prices.csv. В этом файле приведены цены акций
# 30 компаний на закрытии торгов за каждый день периода.
#==============================================================================
data_train=pd.read_csv('close_prices.csv')
#==============================================================================
# На загруженных данных обучите преобразование PCA с числом компоненты равным 10.
# Скольких компонент хватит, чтобы объяснить 90% дисперсии?
#==============================================================================
pca = PCA(n_components=10)
result=pca.fit(data_train.iloc[:,1:31])#берем все колонки с числовыми данными кроме даты
variance_ratio=result.explained_variance_ratio_#содержит процент дисперсии, который объясняет каждая компонента, массив, отсортирован в порядке убывания процента дисперсии
components=result.components_#содержит информацию о том, какой вклад вносят признаки в компоненты.
#Вычисляем сколько компонент достаточно, чтобы покрыть 90% дисперсии
componentCount=1
while sum(variance_ratio[:componentCount])<0.9:
componentCount+=1
print('Скольких компонент хватит, чтобы объяснить 90% дисперсии?')
print(componentCount)
#==============================================================================
# Примените построенное преобразование к исходным данным и возьмите значения первой компоненты.
#==============================================================================
result=pca.transform(data_train.iloc[:,1:31])
firstComponent=result[:,0]#берет первую колонку
#==============================================================================
# Загрузите информацию об индексе Доу-Джонса из файла djia_index.csv.
# Чему равна корреляция Пирсона между первой компонентой и индексом Доу-Джонса?
#==============================================================================
data_test=pd.read_csv('djia_index.csv')
data_test_y=data_test.iloc[:,1]#берем значимую колонку
pearsonCoefficients=corrcoef(firstComponent,data_test_y)
print('Чему равна корреляция Пирсона между первой компонентой и индексом Доу-Джонса?')
print(round(pearsonCoefficients[0,1],2))
#==============================================================================
# Какая компания имеет наибольший вес в первой компоненте? Укажите ее название с большой буквы.
#==============================================================================
firstComponent=pd.DataFrame(data=components[0])
brandIndex=firstComponent.idxmax()[0]+1#индекс компании с максимальным весом, добавляем единицу, поскольку первый столбец - даты
print('Какая компания имеет наибольший вес в первой компоненте?')
print(data_train.columns[brandIndex])