Визуализация данных в Python: как использовать pandas и matplotlib для создания графиков?

Зачем визуализировать данные? Важность графиков.

Визуализация данных – это представление информации в графическом формате, что значительно упрощает понимание сложных наборов данных. Графики позволяют быстро выявлять тренды, закономерности и аномалии, которые сложно обнаружить при анализе табличных данных. В контексте бизнеса, визуализации помогают принимать обоснованные решения на основе данных, оптимизировать маркетинговые кампании и улучшать продукты.

Краткий обзор библиотек pandas и matplotlib.

Pandas – это мощная библиотека Python для анализа и манипулирования данными. Она предоставляет структуры данных, такие как DataFrame, которые позволяют удобно работать с табличными данными.

Matplotlib – это библиотека Python для создания статических, анимированных и интерактивных визуализаций. Она предоставляет широкий набор инструментов для построения различных типов графиков.

Установка и настройка pandas и matplotlib.

Обе библиотеки легко устанавливаются с помощью pip:

pip install pandas matplotlib

После установки их можно импортировать в Python скрипт:

import pandas as pd
import matplotlib.pyplot as plt

#Дополнительная настройка для отображения графиков в Jupyter Notebook
%matplotlib inline

Основы pandas для визуализации данных

Загрузка данных в DataFrame pandas (CSV, Excel).

Pandas позволяет загружать данные из различных источников, включая CSV и Excel файлы:

import pandas as pd

# Загрузка данных из CSV файла
df: pd.DataFrame = pd.read_csv('data.csv')

# Загрузка данных из Excel файла
df_excel: pd.DataFrame = pd.read_excel('data.xlsx')

print(df.head())

Предварительная обработка данных: очистка и преобразование.

Перед визуализацией данные часто требуют предварительной обработки, такой как удаление пропущенных значений или преобразование типов данных:

import pandas as pd

# Предположим, что у нас есть DataFrame 'df'

# Удаление строк с пропущенными значениями
df_cleaned: pd.DataFrame = df.dropna()

# Преобразование типа данных столбца 'date' в datetime
df_cleaned['date'] = pd.to_datetime(df_cleaned['date'])

print(df_cleaned.dtypes)

Базовая статистика и описательные характеристики данных.

Pandas предоставляет методы для получения базовой статистики данных:

import pandas as pd

# Получение описательной статистики
descriptive_stats: pd.DataFrame = df.describe()
print(descriptive_stats)

# Получение информации о DataFrame (типы данных, кол-во не-пустых значений)
df_info = df.info()
print(df_info)

#Считаем корреляцию между столбцами
correlation_matrix = df.corr()
print(correlation_matrix)

Создание основных графиков с помощью matplotlib

Линейные графики (Line plots): отображение временных рядов и зависимостей.

Линейные графики используются для отображения изменений данных во времени или для отображения зависимости между двумя переменными:

import matplotlib.pyplot as plt
import pandas as pd

# Создание данных
dates: pd.Series = pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'])
values: pd.Series = pd.Series([10, 13, 16, 12, 18])

# Создание графика
plt.plot(dates, values)

# Настройка графика
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Line Plot Example')
plt.grid(True)

# Отображение графика
plt.show()

Столбчатые диаграммы (Bar plots): сравнение категориальных данных.

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

import matplotlib.pyplot as plt
import pandas as pd

# Создание данных
categories: pd.Series = pd.Series(['A', 'B', 'C', 'D'])
values: pd.Series = pd.Series([25, 18, 30, 20])

# Создание графика
plt.bar(categories, values)

# Настройка графика
plt.xlabel('Category')
plt.ylabel('Value')
plt.title('Bar Plot Example')

# Отображение графика
plt.show()

Круговые диаграммы (Pie charts): отображение долей и процентов.

Круговые диаграммы используются для отображения относительных долей каждой категории в общей сумме:

import matplotlib.pyplot as plt
import pandas as pd

# Создание данных
labels: pd.Series = pd.Series(['Apples', 'Bananas', 'Cherries', 'Dates'])
sizes: pd.Series = pd.Series([15, 30, 45, 10])

# Создание графика
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)

# Настройка графика
plt.title('Pie Chart Example')
plt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

# Отображение графика
plt.show()

Диаграммы рассеяния (Scatter plots): анализ взаимосвязей между переменными.

Диаграммы рассеяния используются для отображения взаимосвязи между двумя переменными:

import matplotlib.pyplot as plt
import pandas as pd

# Создание данных
x: pd.Series = pd.Series([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y: pd.Series = pd.Series([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])

# Создание графика
plt.scatter(x, y)

# Настройка графика
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Plot Example')

# Отображение графика
plt.show()
Реклама

Интеграция pandas и matplotlib для расширенной визуализации

Непосредственное построение графиков из DataFrame pandas.

Pandas позволяет строить графики непосредственно из DataFrame, что упрощает процесс визуализации данных:

import pandas as pd
import matplotlib.pyplot as plt

# Создание DataFrame
data: pd.DataFrame = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [2, 4, 1, 3, 5]})

# Построение графика
data.plot()

# Настройка графика
plt.title('DataFrame Plot')
plt.xlabel('Index')
plt.ylabel('Value')
plt.show()

data.plot(kind='scatter', x='A', y='B', title='Scatter plot from DataFrame')
plt.show()

Настройка внешнего вида графиков: заголовки, метки осей, цвета, стили.

Matplotlib предоставляет широкие возможности для настройки внешнего вида графиков:

import matplotlib.pyplot as plt
import pandas as pd

# Создание данных
x: pd.Series = pd.Series([1, 2, 3, 4, 5])
y: pd.Series = pd.Series([2, 4, 1, 3, 5])

# Создание графика
plt.plot(x, y, color='red', linestyle='--', marker='o')

# Настройка графика
plt.title('Customized Plot', fontsize=16)
plt.xlabel('X Axis', fontsize=12)
plt.ylabel('Y Axis', fontsize=12)
plt.grid(True)

# Отображение графика
plt.show()

Добавление легенды и аннотаций к графикам.

Легенда и аннотации помогают сделать графики более понятными:

import matplotlib.pyplot as plt
import pandas as pd

# Создание данных
x: pd.Series = pd.Series([1, 2, 3, 4, 5])
y1: pd.Series = pd.Series([2, 4, 1, 3, 5])
y2: pd.Series = pd.Series([3, 1, 4, 2, 5])

# Создание графика
plt.plot(x, y1, label='Line 1')
plt.plot(x, y2, label='Line 2')

# Добавление аннотации
plt.annotate('Important Point', xy=(3, 4), xytext=(3.5, 4.5), arrowprops=dict(facecolor='black', shrink=0.05))

# Настройка графика
plt.legend()
plt.title('Plot with Legend and Annotation')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')

# Отображение графика
plt.show()

Создание нескольких графиков на одном рисунке (subplots).

Subplots позволяют отображать несколько графиков на одном рисунке, что полезно для сравнения различных аспектов данных:

import matplotlib.pyplot as plt
import pandas as pd

# Создание данных
x: pd.Series = pd.Series([1, 2, 3, 4, 5])
y1: pd.Series = pd.Series([2, 4, 1, 3, 5])
y2: pd.Series = pd.Series([3, 1, 4, 2, 5])

# Создание subplots
fig, axes = plt.subplots(2, 1)

# Построение графиков на subplots
axes[0].plot(x, y1)
axes[1].plot(x, y2)

# Настройка subplots
axes[0].set_title('Subplot 1')
axes[1].set_title('Subplot 2')

# Общая настройка
fig.suptitle('Multiple Subplots')

# Отображение графика
plt.tight_layout()
plt.show()

Примеры визуализации данных из реальных наборов данных

Визуализация данных о продажах: анализ трендов и сезонности.

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

import pandas as pd
import matplotlib.pyplot as plt

# Загрузка данных о продажах
sales_data: pd.DataFrame = pd.read_csv('sales_data.csv', index_col='Date', parse_dates=True)

# Отображение тренда продаж
plt.figure(figsize=(12, 6))
plt.plot(sales_data['Sales'], label='Sales Trend')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.title('Sales Trend Over Time')
plt.legend()
plt.show()

# Анализ сезонности (например, за год)
sales_data['Month'] = sales_data.index.month
monthly_sales: pd.Series = sales_data.groupby('Month')['Sales'].mean()

plt.figure(figsize=(10, 5))
plt.bar(monthly_sales.index, monthly_sales.values, label='Average Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Average Sales')
plt.title('Average Monthly Sales')
plt.xticks(range(1, 13))
plt.legend()
plt.show()

Визуализация демографических данных: распределение населения и возрастная структура.

Для визуализации демографических данных можно использовать гистограммы и круговые диаграммы:

import pandas as pd
import matplotlib.pyplot as plt

# Загрузка демографических данных
demographic_data: pd.DataFrame = pd.read_csv('demographic_data.csv')

# Отображение распределения населения по возрасту
plt.figure(figsize=(10, 6))
plt.hist(demographic_data['Age'], bins=20, label='Age Distribution')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.title('Age Distribution')
plt.legend()
plt.show()

# Отображение соотношения полов
gender_counts: pd.Series = demographic_data['Gender'].value_counts()

plt.figure(figsize=(6, 6))
plt.pie(gender_counts, labels=gender_counts.index, autopct='%1.1f%%', startangle=90)
plt.title('Gender Distribution')
plt.axis('equal')
plt.show()

Визуализация данных о погоде: отображение температуры и осадков.

Для визуализации данных о погоде можно использовать линейные графики и столбчатые диаграммы:

import pandas as pd
import matplotlib.pyplot as plt

# Загрузка данных о погоде
weather_data: pd.DataFrame = pd.read_csv('weather_data.csv', index_col='Date', parse_dates=True)

# Отображение температуры во времени
plt.figure(figsize=(12, 6))
plt.plot(weather_data['Temperature'], label='Temperature')
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.title('Temperature Over Time')
plt.legend()
plt.show()

# Отображение количества осадков по месяцам
weather_data['Month'] = weather_data.index.month
monthly_precipitation: pd.Series = weather_data.groupby('Month')['Precipitation'].sum()

plt.figure(figsize=(10, 5))
plt.bar(monthly_precipitation.index, monthly_precipitation.values, label='Monthly Precipitation')
plt.xlabel('Month')
plt.ylabel('Precipitation (mm)')
plt.title('Monthly Precipitation')
plt.xticks(range(1, 13))
plt.legend()
plt.show()

Добавить комментарий