Измените форму словаря, чтобы создать сюжет для скрипкиPython

Программы на Python
Ответить
Anonymous
 Измените форму словаря, чтобы создать сюжет для скрипки

Сообщение Anonymous »

У меня есть некоторые данные, которые сохранены в словаре фреймов данных. Реальные данные намного больше с индексом до 3000 и более столбцов.
В конце концов я хочу сделать скрипичный график из двух столбцов в кадрах данных, но для нескольких записей словаря. В словаре в качестве ключа используется кортеж, и я хочу собрать все записи с одинаковым первым номером.

Код: Выделить всё

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data_dict = {
(5, 1): pd.DataFrame({"Data_1": [0.235954, 0.739301, 0.443639],
"Data_2": [0.069884, 0.236283, 0.458250],
"Data_3": [0.170902, 0.496346, 0.399278],
"Data_4": [0.888658, 0.591893, 0.381895]}),
(5, 2): pd.DataFrame({"Data_1": [0.806812, 0.224321, 0.504660],
"Data_2": [0.070355, 0.943047, 0.579285],
"Data_3": [0.526866, 0.251339, 0.600688],
"Data_4": [0.283107, 0.409486, 0.307315]}),
(7, 3): pd.DataFrame({"Data_1": [0.415159, 0.834547, 0.170972],
"Data_2": [0.125926, 0.401789, 0.759203],
"Data_3": [0.398494, 0.587857, 0.130558],
"Data_4": [0.202393, 0.395692, 0.035602]}),
(7, 4): pd.DataFrame({"Data_1": [0.923432, 0.622174, 0.185039],
"Data_2": [0.759154, 0.126699, 0.783596],
"Data_3": [0.075643, 0.287721, 0.939428],
"Data_4": [0.983739, 0.738550, 0.108639]})
}
Моя идея заключалась в том, что я мог бы перестроить его в другой словарь, а затем построить скрипичный сюжет. Скажем, что «Data_1» и «Data_4» представляют интерес. Затем я перебираю ключи в dict, как показано ниже.

Код: Выделить всё

new_dict = {}
for col in ['Data_1','Data_4']:
df = pd.DataFrame()
for i in [5,7]:
temp = []
for key, value in dict.items():
if key[0]==i:
temp.extend(value[col])
df[i] = temp
new_dict[col] = df
Затем сделайте следующий запрос.

Код: Выделить всё

new_dict =
{'Data_1':           5         7
0  0.235954  0.415159
1  0.739301  0.834547
2  0.443639  0.170972
3  0.806812  0.923432
4  0.224321  0.622174
5  0.504660  0.185039,
'Data_4':           5         7
0  0.888658  0.202393
1  0.591893  0.395692
2  0.381895  0.035602
3  0.283107  0.983739
4  0.409486  0.738550
5  0.307315  0.108639}
Что я затем повторяю, чтобы построить графики скрипки для Data_1 и Data_4.

Код: Выделить всё

for key, value in new_dict.items():
fig, ax = plt.subplots()
ax.violinplot(value, showmeans= True)
ax.set(title = key, xlabel = 'Section', ylabel = 'Value')
ax.set_xticks(np.arange(1,3), labels=['5','7'])
Хотя я получаю желаемый результат, переупорядочивать словарь очень затруднительно. Можно ли это сделать более быстрым способом? Поскольку мне нужен один и тот же столбец для каждой словарной статьи, я считаю, что так и должно быть.

Подробнее здесь: https://stackoverflow.com/questions/793 ... iolin-plot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»