Визуализация количеств, распределений, пропорций и отношений.

Этот проект является частью более крупного проекта под названием 100 проектов Python. Вы можете найти этот проект на моей странице Github.

Начнем с установки необходимых библиотек Python. Мы будем использовать Pandas, Seaborn и Matplotlib.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Импорт наборов данных

Наборы данных, которые мы будем использовать, — это наборы данных о птицах и меде.

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

birds = pd.read_csv('birds.csv')
birds.head()

Визуализация количества

Мы начнем с построения некоторых числовых данных, используя базовый линейный график.

wingspan = birds['MaxWingspan'] 
wingspan.plot()

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

plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)

for i in range(len(birds)):
    x = birds['Name'][i]
    y = birds['MaxWingspan'][i]
    plt.plot(x, y, 'bo')
    if birds['MaxWingspan'][i] > 500:
        plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12)
    
plt.show()

Мы используем гистограммы, когда вам нужно показать группы данных.

category_count = birds.value_counts(birds['Category'].values, sort=True)
plt.rcParams['figure.figsize'] = [6, 12]
category_count.plot.barh()

Мы накладываем минимальную и максимальную длину на данную категорию птиц.

minLength = birds['MinLength']
maxLength = birds['MaxLength']
category = birds['Category']

plt.barh(category, maxLength)
plt.barh(category, minLength)

plt.show()

Визуализация дистрибутивов

Мы можем быстро посмотреть на распределение данных, используя точечную диаграмму.

Загрузка библиотек

import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('birds.csv')
birds.head()

График рассеяния

birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))

plt.title('Max Length per Order')
plt.ylabel('Order')
plt.xlabel('Max Length')

plt.show()A histogram gives an overview of the general distribution of body length per bird Order. We can gain more insight into the data by changing the bins parameter to a higher number.

Отфильтруйте данные, чтобы получить только тех птиц, чья масса тела меньше 60, и отобразите 40 ячеек:

filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]      
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()

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

x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']

fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)

Графики плотности предлагают красивую пояснительную визуализацию.

sns.kdeplot(
   data=filteredBirds, x="MaxBodyMass", hue="Order",
   fill=True, common_norm=False, palette="crest",
   alpha=.5, linewidth=0,
)

График плотности с использованием нескольких переменных

sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")

Визуализация пропорций

import pandas as pd
import matplotlib.pyplot as plt
mushrooms = pd.read_csv('mushrooms.csv')
mushrooms.head()

Используйте круговую диаграмму, чтобы показать пропорции этих данных по этим двум классам грибов.

labels=['Edible','Poisonous']
plt.pie(edibleclass['Surface'],labels=labels,autopct='%.1f %%')
plt.title('Edible?')
plt.show()

Визуализация отношений

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('honey.csv')
honey.head()

Используйте линию, чтобы показать, как цена на мед изменялась ежегодно в каждом штате.

sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);

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

sns.relplot(x="year", y="priceperlb", kind="line", data=honey);

Сетки граней берут одну грань и строят график для каждой из этих граней по выбранным координатам x и y.

sns.relplot(
    data=honey, 
    x="yieldpercol", y="numcol",
    col="year", 
    col_wrap=3,
    kind="line")

Двухлинейные графики накладывают друг на друга две линейные графики.

fig, ax = plt.subplots(figsize=(12,6))
lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey, 
                        label = 'Number of bee colonies', legend=False)
sns.despine()
plt.ylabel('# colonies')
plt.title('Honey Production Year over Year');

ax2 = ax.twinx()
lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r", 
                         label ='Yield per colony', legend=False) 
sns.despine(right=False)
plt.ylabel('colony yield')
ax.figure.legend();

Спасибо, что прочитали мою статью.

Удачного кодирования!