Mam zestaw danych z ogromną liczbą funkcji, więc analiza macierzy korelacji stała się bardzo trudna. Chcę wykreślić macierz korelacji, którą otrzymujemy za pomocą dataframe.corr()
funkcji z biblioteki pand. Czy biblioteka pand udostępnia jakąś wbudowaną funkcję do kreślenia tej macierzy?
python
pandas
matplotlib
data-visualization
information-visualization
Gaurav Singh
źródło
źródło
Odpowiedzi:
Możesz używać
pyplot.matshow()
zmatplotlib
:Edytować:
W komentarzach pojawiło się żądanie zmiany etykiet zaznaczenia osi. Oto wersja deluxe, która jest rysowana na większym rozmiarze figury, ma etykiety osi pasujące do ramki danych i legendę paska kolorów do interpretacji skali kolorów.
Obejmuję sposób dostosowania rozmiaru i obrotu etykiet oraz używam współczynnika kształtu, który sprawia, że pasek koloru i główna postać mają tę samą wysokość.
źródło
AttributeError: 'module' object has no attribute 'matshow'
import matplotlib.pyplot as plt
?Jeśli Twoim głównym celem jest wizualizacja matrycy korelacji, a nie tworzenie wykresu per se, wygodne
pandas
opcje stylizacji to realne wbudowane rozwiązanie:Zauważ, że musi to być backend obsługujący renderowanie HTML, taki jak Notatnik JupyterLab. (Automatyczny jasny tekst na ciemnym tle pochodzi z istniejącego PR, a nie z najnowszej wydanej wersji,
pandas
0.23).Stylizacja
Możesz łatwo ograniczyć precyzję cyfr:
Lub pozbądź się cyfr, jeśli wolisz matrycę bez adnotacji:
Dokumentacja stylów zawiera także instrukcje dotyczące bardziej zaawansowanych stylów, takich jak zmiana sposobu wyświetlania komórki, nad którą wskaźnik myszy najeżdża. Aby zapisać wynik, możesz zwrócić kod HTML, dodając
render()
metodę, a następnie zapisując go do pliku (lub po prostu zrób zrzut ekranu dla mniej formalnych celów).Porównanie czasu
W moich testach
style.background_gradient()
był 4x szybszyplt.matshow()
i 120x szybszy niżsns.heatmap()
przy matrycy 10x10. Niestety nie skaluje się tak dobrze, jakplt.matshow()
: oba zajmują mniej więcej tyle samo czasu dla matrycy 100plt.matshow()
x 100 i są 10 razy szybsze dla matrycy 1000 x 1000.Oszczędność
Istnieje kilka możliwych sposobów zapisania stylizowanej ramki danych:
render()
metodę, a następnie zapisz wynik w pliku..xslx
plik z formatowaniem warunkowym, dodającto_excel()
metodę.Aktualizacja dla pand> = 0,24
Po ustawieniu
axis=None
możliwe jest teraz obliczanie kolorów na podstawie całej macierzy, a nie według kolumny lub wiersza:źródło
import seaborn as sns corr = df.corr() cm = sns.light_palette("green", as_cmap=True) cm = sns.diverging_palette(220, 20, sep=20, as_cmap=True) corr.style.background_gradient(cmap=cm).set_precision(2)
corr.style.background_gradient(cmap='coolwarm')
. Obecnie nie ma możliwości wyśrodkowania cmap na określonej wartości, co może być dobrym pomysłem w przypadku rozbieżnych cmap.Wypróbuj tę funkcję, która wyświetla również nazwy zmiennych dla macierzy korelacji:
źródło
plt.xticks(range(len(corr.columns)), corr.columns, rotation='vertical')
jeśli chcesz orientację pionową nazw kolumn na osi Xplt.tight_layout()
może być również przydatne w przypadku długich nazw kolumn.Wersja mapy termicznej Seaborn:
źródło
Zależność między obiektami można zaobserwować, rysując mapę cieplną z dna morskiego lub matrycę rozpraszającą z pand.
Matryca rozproszenia:
Jeśli chcesz również wizualizować skośność każdej cechy - użyj wykresów par morskich.
Sns Heatmap:
Wynikiem będzie mapa korelacji cech. tj. patrz poniższy przykład.
Korelacja między sklepem spożywczym a detergentami jest wysoka. Podobnie:
Pdoducts o wysokiej korelacji:Z wykresów par: Możesz obserwować ten sam zestaw relacji ze wykresów par lub macierzy rozproszenia. Ale z nich możemy powiedzieć, czy dane są zwykle dystrybuowane, czy nie.
Uwaga: powyższy wykres jest taki sam, jak dane zaczerpnięte z danych, które służą do rysowania mapy cieplnej.
źródło
from matplotlib import pyplot as pl
Możesz użyć metody imshow () z matplotlib
źródło
Jeśli masz ramkę danych
df
, możesz po prostu użyć:źródło
Grafika statmodels daje również ładny widok matrycy korelacji
źródło
Dla kompletności najprostsze rozwiązanie, jakie znam z dnem morskim pod koniec 2019 r., Jeśli używasz Jupyter :
źródło
Oprócz innych metod dobrze jest mieć również wykres parowania, który da wykres rozproszenia dla wszystkich przypadków -
źródło
Formularz macierzy korelacji, w moim przypadku zdf to ramka danych, której potrzebuję wykonać macierz korelacji.
Następnie możemy zrobić zrzut ekranu. lub przekonwertować HTML na plik obrazu.
źródło