Как построить несколько измерений из нескольких разных категорий? - PullRequest
0 голосов
/ 09 сентября 2018

Я немного озадачен тем, какой пакет использовать для построения моих данных, которые обычно состоят из 10 различных категорий (например, температуры) с 3 или 4 параллельными измерениями в каждой. Здесь я попробовал использовать только панд (Trial1 + 2) и морского волка (Trial3).

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

Я знаю, что могу поместить свои данные в файл CSV, который я могу импортировать, используя пакет PANDAS в блокноте jupyter. Тогда я перехожу к своей проблеме; , которая, на мой взгляд, может быть связана с индексированием или типами данных? Я получаю много ошибок, что x должен равняться y, или что индекс «Степени» не определен ... Я покажу наиболее успешные испытания ниже.

До сих пор я пробовал несколько вещей, используя этот составной набор данных 'Dummydata', который очень типичен для того, что я буду делать с моими реальными данными.

Мой тестовый файл CSV:

Это файл .CSV с четырьмя столбцами, где первый - это температура, затем три следующих столбца - это первое, второе и третье измерения от соответствующей температуры (y1, y2, y3).

in[]: Dummydata.to_dict()
Out[]:
    {'Degrees': {0: 0,
      1: 10,
      2: 20,
      3: 30,
      4: 40,
      5: 50,
      6: 60,
      7: 70,
      8: 80,
      9: 90},
     'y1': {0: 20, 1: 25, 2: 34, 3: 35, 4: 45, 5: 70, 6: 46, 7: 20, 8: 10, 9: 15},
     'y2': {0: 20, 1: 24, 2: 32, 3: 36, 4: 41, 5: 77, 6: 48, 7: 23, 8: 19, 9: 16},
     'y3': {0: 18, 1: 26, 2: 36, 3: 37, 4: 42, 5: 75, 6: 46, 7: 21, 8: 15, 9: 16}}

Испытание 1: попытка получить график рассеяния

import pandas as pd
import matplotlib.pyplot as plt

Dummydata = pd.read_csv('DummyData.csv','r',delimiter=(';'), header=0)

y = ['y1','y2','y3']
x = ['Degrees']

Dummydata.plot(x,y)

Это даст хороший линейный график, но также приведет к предупреждению пользователя: Pandas не позволяет создавать столбцы с помощью нового имени атрибута (??). Если я изменю график на Dummydata.plot.scatter (x, y), то получу ошибку: x и y должны быть одинакового размера ... Так что я знаю, что форма моих данных (10,4) из-за 10 строк и 4 столбца, как я могу переопределить это, чтобы быть в порядке для панд?

Пробная версия 2: то же самое, небольшие корректировки

import pandas as pd
import matplotlib.pyplot as plt

#import the .csv file, and set deliminator to ; and set the header as the first line(0)
Dummydata = pd.read_csv('DummyData.csv','r',delimiter=(';'), header = 0)
x =('Degrees')
y1 =('y1')
y2 =('y2')
y3 =('y3')


Dummydata.plot([x,y3])                       #works fine for one value, but prints y1 and y2 ?? why?
    Dummydata.plot([x,y1])                       # also works, but print out y2 and y3 ??? why?                       # also works but prints out y2 and y3 ?? why?
    Dummydata.plot([x,y])                   # get error all arrays must be same length?
Dummydata.plot.scatter([x,y])                   # many error, no plot

Каким-то образом я должен сказать пандам, что форма данных (10,4) в порядке? Не уверен, что я здесь делаю не так.

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

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

import seaborn as sns
import matplotlib.pyplot as plt

#import the .csv file using pandas
Dummydata = pd.read_csv('DummyData.csv', 'r', delimiter=(';'))

#Checking what the file looks like
#Dummydata.head(2)

x =('Degrees')
y1 =('y1')
y2 =('y2')
y3 =('y3')
y =(['y1','y2','y3'])

Factorplot =sns.factorplot(x='Degrees',y='y1',data=Dummydata)

График Factor отлично работает для одного набора данных, однако, пытаясь добавить больше значения y (либо определяя y = (['y1', 'y2', 'y3']) до или при построении, я получаю такие ошибки, как : Не удалось интерпретировать ввод 'y'. Например, для этого ввода:

Factorplot =sns.factorplot(x='Degrees',y='y',data=Dummydata)

или

    Factorplot =sns.factorplot(x='Degrees',y=(['y1','y2','y3']),data=Dummydata) 
#Error: cannot copy sequence with size 3 to array axis with dimension 10

То, чего я хотел бы достичь, это что-то вроде этого: , где в (A) я хотел бы получить диаграмму рассеяния со скользящим средним средним значением, а в (B) я хотел бы построить только среднее для каждой категории, но также с указанием стандартного отклонения, и дополнительно нарисуйте скользящее среднее по каждой категории следующим образом:

enter image description here

Я не хочу записывать свои значения данных вручную, я хочу импортировать их, используя файл .csv (потому что наборы данных могут стать очень большими).

Что-то не так с тем, как я организую свой CSV-файл?

Вся помощь приветствуется.

1 Ответ

0 голосов
/ 10 сентября 2018

Вычислить скользящую статистику с rolling. Вычислите среднее значение и стандартное отклонение с mean и std. График данных с plot. Добавьте столбцы ошибок y с ключевым словом yerr.

data = data.set_index('Degrees').rolling(window=6).mean()
mean = data.mean(axis='columns')
std = data.std(axis='columns')

ax = mean.plot()
data.plot(style='o', ax=ax)

enter image description here

plt.figure()
mean.plot(yerr=std, capsize=3)

enter image description here

...