Panda DataFrame에서 열 지도 만들기
Python의 Pandas 패키지에서 생성된 데이터 프레임을 가지고 있습니다.팬더 패키지의 데이터 프레임을 사용하여 열 지도를 생성하려면 어떻게 해야 합니까?
import numpy as np
from pandas import *
Index= ['aaa','bbb','ccc','ddd','eee']
Cols = ['A', 'B', 'C','D']
df = DataFrame(abs(np.random.randn(5, 4)), index= Index, columns=Cols)
>>> df
A B C D
aaa 2.431645 1.248688 0.267648 0.613826
bbb 0.809296 1.671020 1.564420 0.347662
ccc 1.501939 1.126518 0.702019 1.596048
ddd 0.137160 0.147368 1.504663 0.202822
eee 0.134540 3.708104 0.309097 1.641090
>>>
오늘 이걸 보고 계신 분들께는 Seaborn을 추천해 드리고 싶습니다.heatmap()
여기에 기록된 바와 같이
위의 예는 다음과 같이 수행됩니다.
import numpy as np
from pandas import DataFrame
import seaborn as sns
%matplotlib inline
Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
Cols = ['A', 'B', 'C', 'D']
df = DataFrame(abs(np.random.randn(5, 4)), index=Index, columns=Cols)
sns.heatmap(df, annot=True)
어디에%matplotlib
익숙하지 않은 사람들을 위한 아이피톤 매직 기능입니다.
말당 플롯이 필요하지 않고 단순히 표 형식으로 값을 나타내기 위해 색상을 추가하는 데 사용할 수 있습니다.style.background_gradient()
판다 데이터 프레임의 방법.이 방법은 JupyterLab Notebook과 같은 Panda 데이터 프레임을 볼 때 표시되는 HTML 테이블에 색상을 지정하며, 결과는 스프레드시트 소프트웨어에서 "조건부 서식"을 사용하는 것과 유사합니다.
import numpy as np
import pandas as pd
index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
cols = ['A', 'B', 'C', 'D']
df = pd.DataFrame(abs(np.random.randn(5, 4)), index=index, columns=cols)
df.style.background_gradient(cmap='Blues')
자세한 사용 방법은 이전에 동일한 주제로 제공한 보다 정교한 답변과 판다 설명서의 스타일링 섹션을 참조하십시오.
너는 원한다matplotlib.pcolor
:
import numpy as np
from pandas import DataFrame
import matplotlib.pyplot as plt
index = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
columns = ['A', 'B', 'C', 'D']
df = DataFrame(abs(np.random.randn(5, 4)), index=index, columns=columns)
plt.pcolor(df)
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.show()
이것은 다음을 제공합니다.
유용한sns.heatmap
api가 왔습니다.매개 변수를 확인하십시오. 많은 매개 변수가 있습니다.예:
import seaborn as sns
%matplotlib inline
idx= ['aaa','bbb','ccc','ddd','eee']
cols = list('ABCD')
df = DataFrame(abs(np.random.randn(5,4)), index=idx, columns=cols)
# _r reverses the normal order of the color map 'RdYlGn'
sns.heatmap(df, cmap='RdYlGn_r', linewidths=0.5, annot=True)
Pandas DataFrame에서 대화형 열 지도를 원하는 경우, 주피터 노트북을 실행 중인 경우 대화형 위젯 클러스터 그래머-Widget을 사용할 수 있습니다. 여기에서 NBViewer의 대화형 노트북, 여기서 문서를 참조하십시오.
또한 대규모 데이터셋의 경우 개발 중인 Clustergrammer2 WebGL 위젯을 사용할 수 있습니다(여기의 노트북 예).
의 저자는 다음과 같습니다.seaborn
오직 원하는 seaborn.heatmap
범주형 데이터 프레임으로 작업합니다.일반적이지 않습니다.
인덱스 및 열이 숫자 및/또는 날짜/시간 값이면 이 코드가 유용합니다.
Matplotlib 열 매핑 함수pcolormesh
인덱스 대신 빈이 필요하므로 데이터 프레임 인덱스에서 빈을 빌드하기 위한 고급 코드가 있습니다(인덱스 간격이 일정하지 않더라도!).
나머지는 간단히np.meshgrid
그리고.plt.pcolormesh
.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def conv_index_to_bins(index):
"""Calculate bins to contain the index values.
The start and end bin boundaries are linearly extrapolated from
the two first and last values. The middle bin boundaries are
midpoints.
Example 1: [0, 1] -> [-0.5, 0.5, 1.5]
Example 2: [0, 1, 4] -> [-0.5, 0.5, 2.5, 5.5]
Example 3: [4, 1, 0] -> [5.5, 2.5, 0.5, -0.5]"""
assert index.is_monotonic_increasing or index.is_monotonic_decreasing
# the beginning and end values are guessed from first and last two
start = index[0] - (index[1]-index[0])/2
end = index[-1] + (index[-1]-index[-2])/2
# the middle values are the midpoints
middle = pd.DataFrame({'m1': index[:-1], 'p1': index[1:]})
middle = middle['m1'] + (middle['p1']-middle['m1'])/2
if isinstance(index, pd.DatetimeIndex):
idx = pd.DatetimeIndex(middle).union([start,end])
elif isinstance(index, (pd.Float64Index,pd.RangeIndex,pd.Int64Index)):
idx = pd.Float64Index(middle).union([start,end])
else:
print('Warning: guessing what to do with index type %s' %
type(index))
idx = pd.Float64Index(middle).union([start,end])
return idx.sort_values(ascending=index.is_monotonic_increasing)
def calc_df_mesh(df):
"""Calculate the two-dimensional bins to hold the index and
column values."""
return np.meshgrid(conv_index_to_bins(df.index),
conv_index_to_bins(df.columns))
def heatmap(df):
"""Plot a heatmap of the dataframe values using the index and
columns"""
X,Y = calc_df_mesh(df)
c = plt.pcolormesh(X, Y, df.values.T)
plt.colorbar(c)
다음을 사용하여 호출heatmap(df)
를 사용하여 확인합니다.plt.show()
.
이보다 더 유능하고, 상호 작용적이며, 대안을 사용하기 쉽다고 언급한 사람이 없다는 사실에 놀랐습니다.
플롯으로 사용할 수 있습니다.
두 줄만 입력하면 다음과 같은 결과를 얻을 수 있습니다.
상호작용,
매끄러운 스케일,
색상은 개별 열 대신 전체 데이터 프레임을 기반으로 합니다.
열 이름 및 축의 행 인덱스,
확대,
패닝,
원클릭 기능이 내장되어 있어 PNG 형식으로 저장할 수 있습니다.
자동 검색,
호버링에 대한 비교,
열 지도가 여전히 잘 보이고 원하는 위치에서 값을 볼 수 있도록 값을 표시하는 버블:
import plotly.express as px
fig = px.imshow(df.corr())
fig.show()
또한 Bokeh를 사용할 수 있습니다.
모든 기능이 동일하고 번거롭기는 합니다.하지만 음모에 가담하지 않고 이 모든 것을 원한다면 여전히 가치가 있습니다.
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import ColumnDataSource, LinearColorMapper
from bokeh.transform import transform
output_notebook()
colors = ['#d7191c', '#fdae61', '#ffffbf', '#a6d96a', '#1a9641']
TOOLS = "hover,save,pan,box_zoom,reset,wheel_zoom"
data = df.corr().stack().rename("value").reset_index()
p = figure(x_range=list(df.columns), y_range=list(df.index), tools=TOOLS, toolbar_location='below',
tooltips=[('Row, Column', '@level_0 x @level_1'), ('value', '@value')], height = 500, width = 500)
p.rect(x="level_1", y="level_0", width=1, height=1,
source=data,
fill_color={'field': 'value', 'transform': LinearColorMapper(palette=colors, low=data.value.min(), high=data.value.max())},
line_color=None)
color_bar = ColorBar(color_mapper=LinearColorMapper(palette=colors, low=data.value.min(), high=data.value.max()), major_label_text_font_size="7px",
ticker=BasicTicker(desired_num_ticks=len(colors)),
formatter=PrintfTickFormatter(format="%f"),
label_standoff=6, border_line_color=None, location=(0, 0))
p.add_layout(color_bar, 'right')
show(p)
Python 패키지 PyComplexHeatmap을 사용하여 데이터 프레임에서 매우 복잡한 열 지도를 그릴 수 있습니다. https://github.com/DingWB/PyComplexHeatmap https://github.com/DingWB/PyComplexHeatmap/blob/main/notebooks/examples.ipynb
Seaborn을 DataFrame corr()과 함께 사용하여 열 간 상관 관계를 확인할 수 있습니다.
sns.heatmap(df.corr())
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
Cols = ['A', 'B', 'C', 'D']
plt.figure(figsize=(20,6))
df = pd.DataFrame(abs(np.random.randn(5, 4)), index=Index, columns=Cols)
sns.heatmap(df , annot=True)
plt.yticks(rotation='horizontal')
plt.show()
출력:
많은 기능 간의 상관 관계를 사용할 때 관련 기능을 함께 클러스터링하는 것이 유용하다는 것을 알게 되었습니다.이 작업은 Seaborn 군집 지도 그림을 사용하여 수행할 수 있습니다.
import seaborn as sns
import matplotlib.pyplot as plt
g = sns.clustermap(df.corr(),
method = 'complete',
cmap = 'RdBu',
annot = True,
annot_kws = {'size': 8})
plt.setp(g.ax_heatmap.get_xticklabels(), rotation=60);
클러스터 맵 함수는 계층적 클러스터링을 사용하여 관련 피쳐를 함께 정렬하고 트리와 같은 덴드로그램을 생성합니다.
이 그림에는 두 개의 주목할 만한 군집이 있습니다.
y_des
그리고.dew.point_des
irradiance
,y_seasonal
그리고.dew.point_seasonal
FWIW 이 수치를 생성하기 위한 기상 데이터는 이 주피터 노트북으로 액세스할 수 있습니다.
언급URL : https://stackoverflow.com/questions/12286607/making-heatmap-from-pandas-dataframe
'it-source' 카테고리의 다른 글
점이 너무 많은 산점도 (0) | 2023.06.20 |
---|---|
Docker compose에서 명령을 한 번 실행하는 방법 (0) | 2023.06.20 |
정적 C 라이브러리를 C++ 코드와 연결할 때 "정의되지 않은 참조" 오류 발생 (0) | 2023.06.20 |
Google에서 Python을 많이 사용합니다. (0) | 2023.06.20 |
Chrome에게 ts 대신 js를 디버그하도록 지시 (0) | 2023.06.20 |