У меня есть df, который выглядит так:
df.head()
Out[1]:
A B C
city0 40 12 73
city1 65 56 10
city2 77 58 71
city3 89 53 49
city4 33 98 90
Пример df может быть создан с помощью следующего кода:
df = pd.DataFrame(np.random.randint(100,size=(1000000,3)), columns=list('ABC'))
indx = ['city'+str(x) for x in range(0,1000000)]
df.index = indx
Что я хочу сделать:
a) определить соответствующие длины ковша гистограммы для столбца A и присвоить каждому городу ведро для столбца A
b) определить соответствующие длины ковша гистограммы для столбца B и присвоить каждому городу ведро для столбца B
Может быть, результирующий df будет выглядеть (или есть ли встроенный способ в pandas?)
df.head()
Out[1]:
A B C Abkt Bbkt
city0 40 12 73 2 1
city1 65 56 10 4 3
city2 77 58 71 4 3
city3 89 53 49 5 3
city4 33 98 90 2 5
Где Abkt и Bbkt являются идентификаторами ведра гистограммы:
1-20 = 1
21-40 = 2
41-60 = 3
61-80 = 4
81-100 = 5
В конечном счете, я хочу лучше понять поведение каждого города в отношении столбцов A, B и C и отвечать на такие вопросы, как:
a) Как выглядит распределение столбца A (или B) - то есть, какие ведра наиболее/наименее населены.
b) Условный на конкретном срезе/ведре столбца A, что выглядит распределение столбца B - то есть, какие ведра наиболее/наименее заполнены.
c) Условный на конкретном сегменте/ведре столбцов A и B, как выглядит поведение C.
В идеале я хочу иметь возможность визуализировать данные (карты тепла, идентификаторы регионов и т.д.). Я относительный новичок pandas/python и не знаю, что можно развивать.
Если сообщество SO может любезно предоставить примеры кода, как я могу делать то, что я хочу (или лучший подход, если есть лучшие методы pandas/numpy/scipy), я был бы благодарен.
Кроме того, любые указатели на ресурсы, которые могут помочь мне лучше суммировать/нарезать/копировать мои данные и быть в состоянии визуализировать на промежуточных этапах по мере продолжения моего анализа.
UPDATE:
Я следую некоторым предложениям в комментариях.
Я пробовал:
1) df.hist()
ValueError: The first argument of bincount must be non-negative
2) df[['A']].hist(bins=10,range=(0,10))
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000A2350615C0>]], dtype=object)
Разве не #2
, чтобы показать график? вместо создания объекта, который не отображается? Я использую jupyter notebook
.
Есть ли что-то, что мне нужно для включения/включения в jupyter notebook
для рендеринга объектов гистограммы?
UPDATE2:
Я решил проблему рендеринга: в ноутбуке Ipython, Pandas не ссылается на график, который я пытаюсь построить.
Update3:
В соответствии с предложениями комментариев я начал просматривать pandas визуализация, bokeh и seaborn. Однако я не уверен, как я могу создать связи между сюжетами.
Допустим, что у меня 10 переменных. Я хочу исследовать их, но поскольку 10 - это большое количество, чтобы изучить сразу, скажем, я хочу исследовать 5 в любой момент времени (r, s, t, u, v).
Если я хочу, чтобы интерактивный гексбин с графиком предельных распределений рассматривал связь между r и s, как я также вижу распределение t, u и v для выбранных интерактивных областей/срезов r & s (полигонов).
Я нашел гексбин с маргинальным распределением здесь hexbin plot:
Но:
1) Как сделать это интерактивным (разрешить выбор полигонов)
2) Как связать выбор региона r и s с другими графиками, например 3 графика гистограммы t, u и v (или любой другой тип графика).
Таким образом, я могу более точно перемещаться по данным и исследовать глубинные отношения.