переходная матрица для графов и пропорций питона - PullRequest
0 голосов
/ 06 октября 2018

У меня есть матрица с оценками из класса для разных лет (строки для лет и столбцы для оценок).Я хочу построить матрицу переходов с изменением между годами.

Например, мне нужен год t-1 по оси y и год t по оси x, а затем я хочу матрицу переходас разницей в количестве людей с оценкой A между годами t-1 и t, с оценкой B между годами t-1 и t и так далее.И затем вторая переходная матрица с пропорциями, например: - Между годом t-1 и t на z% больше / меньше людей с оценкой A / B / C / D / F.

Очевидно, что наибольшая доля импортачасть - это диагональ, которая представляет изменение для одной и той же оценки за разные годы.

Я хочу, чтобы это было сделано в Python.

Большое спасибо, я надеюсь, что все ясно.

Пример результата: введите описание изображения здесь

1 Ответ

0 голосов
/ 06 октября 2018

Вы можете использовать библиотеку панд с df.diff.Numpy может генерировать матрицу всех возможных различий, используя np.subtract.outer.ниже приведен пример.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
years = ['2015', '2016', '2017']
grades = ['A', 'B', 'C', 'D']

df = pd.DataFrame(np.random.randint(0, 10, (3, 4)), columns=grades, index=years)

print(df)

      A  B  C  D
2015  5  0  2  0
2016  7  2  0  2
2017  3  7  6  7

df_diff = df.diff(axis=0)
print(df_diff)

каждая строка здесь в df_diff - это разница между текущей строкой и предыдущей строкой от оригинальной df

        A        B     C     D
2015    NaN     NaN   NaN   NaN
2016    2.0     2.0   -2.0  2.0
2017    -4.0    5.0   6.0   5.0

a = np.array([])
differences = []
for i, y in enumerate(years):
    for j, g in enumerate(grades):
        differences.append(y+g)
        a = np.append(a, df.iloc[i,j])

df3 = pd.DataFrame(np.subtract.outer(a, a), columns=differences, index=differences)
print(df3)

      2015A   2015B  2015C  2015D   2016A   2016B   2016C   2016D   2017A   2017B   2017C   2017D
2015A   0.0     5.0  3.0    5.0 -2.0    3.0     5.0 3.0      2.0    -2.0    -1.0    -2.0
2015B   -5.0    0.0 -2.0    0.0 -7.0    -2.0    0.0 -2.0    -3.0    -7.0    -6.0    -7.0
2015C   -3.0    2.0  0.0    2.0 -5.0    0.0     2.0 0.0     -1.0    -5.0    -4.0    -5.0
2015D   -5.0    0.0 -2.0    0.0 -7.0    -2.0    0.0 -2.0    -3.0    -7.0    -6.0    -7.0
2016A   2.0     7.0 5.0     7.0  0.0    5.0     7.0  5.0    4.0     0.0   1.0       0.0
2016B   -3.0    2.0 0.0     2.0 -5.0    0.0     2.0 0.0    -1.0    -5.0  -4.0   -5.0
2016C   -5.0    0.0 -2.0    0.0 -7.0    -2.0    0.0 -2.0   -3.0    -7.0  -6.0   -7.0
2016D   -3.0    2.0 0.0     2.0 -5.0    0.0     2.0 0.0    -1.0     -5.0    -4.0    -5.0
2017A   -2.0    3.0 1.0     3.0 -4.0    1.0     3.0 1.0     0.0    -4.0  -3.0   -4.0
2017B   2.0     7.0 5.0     7.0 0.0     5.0     7.0 5.0     4.0     0.0     1.0     0.0
2017C   1.0     6.0 4.0     6.0 -1.0    4.0     6.0 4.0     3.0    -1.0   0.0     -1.0
2017D   2.0     7.0 5.0     7.0 0.0     5.0     7.0 5.0     4.0     0.0   1.0 0.0

построение этой матрицы с использованием matshowот matplotlib

plt.matshow(df3)
plt.colorbar()
plt.show()

enter image description here

...