Руководство по анализу данных с помощью Python в 2025 году

Освойте анализ данных с помощью Python в этом пошаговом руководстве. Узнайте о ключевых библиотеках, лучших практиках и о том, как извлекать информацию из реальных наборов данных.
1 мин. чтения
Data Analysis With Python blog image

В этом руководстве по анализу данных с помощью Python вы увидите:

  • Зачем использовать Python для анализа данных
  • Общие библиотеки для анализа данных с помощью Python
  • Пошаговое руководство по анализу данных в Python
  • Процесс, которому необходимо следовать при анализе данных

Давайте погрузимся!

Зачем использовать Python для анализа данных

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

  1. R: больше подходит для исследователей и статистиков.
  2. Питон: Лучшее для всех остальных профессионалов

В частности, ниже перечислены основные причины, по которым стоит использовать Python для анализа данных:

  • Небольшая кривая обучения: Python имеет простой и понятный синтаксис, что делает его доступным как для новичков, так и для экспертов.
  • Универсальность: Python может работать с различными типами и форматами данных, включая CSV, Excel, JSON, базы данных SQL, Parquet и другие. Кроме того, он подходит для решения самых разных задач – от простой очистки данных до сложных приложений машинного обучения и глубокого обучения.
  • Масштабируемость: Python масштабируется и может справиться как с небольшими наборами данных, так и с масштабными задачами по обработке данных. Например, такие библиотеки, как Dask и PySpark, помогут вам справиться с большими данными без особых усилий.
  • Поддержка сообщества: Python имеет большое и активное сообщество разработчиков и специалистов по обработке данных, которые вносят свой вклад в его экосистему.
  • Интеграция машинного обучения и ИИ: Python является основным языком для машинного обучения и искусственного интеллекта, а такие библиотеки, как TensorFlow, PyTorch и Keras, поддерживают передовую аналитику и предиктивное моделирование.
  • Воспроизводимость и совместная работа: Блокноты Jupyter помогают делиться фрагментами анализа данных и воспроизводить их, что очень важно для совместной работы в области науки о данных.
  • Уникальное окружение для разных целей: Python предоставляет возможность использовать одну и ту же среду для разных целей. Например, вы можете использовать один и тот же блокнот Jupyter Notebook для сбора данных из Интернета и их последующего анализа. В этой же среде можно делать прогнозы с помощью моделей машинного обучения.

Общие библиотеки для анализа данных с помощью Python

Python широко используется в аналитике, в том числе благодаря широкой экосистеме библиотек. Вот наиболее распространенные библиотеки для анализа данных на Python:

  • NumPy: Для численных вычислений и работы с многомерными массивами.
  • Pandas: Для работы с данными и их анализа, особенно с табличными данными.
  • Matplotlib и Seaborn: Для визуализации данных и создания наглядных графиков.
  • SciPy: Для научных вычислений и расширенного статистического анализа.
  • Plotly: Для создания анимированных графиков.

Посмотрите на них в действии в следующем разделе!

Анализ данных с помощью Python: A Complete Example

Теперь вы знаете, зачем использовать Python для анализа данных и какие библиотеки поддерживают эту задачу. Следуйте этому пошаговому руководству, чтобы узнать, как выполнять анализ данных с помощью Python.

В этом разделе вы проанализируете информацию о недвижимости Airbnb, полученную из бесплатного набора данных Bright Data.

Требования

Чтобы следовать этому руководству, на вашем компьютере должен быть установлен Python 3.6 или выше.

Шаг 1: Настройка среды и установка зависимостей

Предположим, вы назвали главную папку своего проекта data_analysis/. По завершении этого шага папка будет иметь следующую структуру:

data_analysis/
    ├── analysis.ipynb
    └── venv/

Где:

  • analysis.ipynb – это блокнот Jupyter, содержащий весь код анализа данных на языке Python.
  • venv/ содержит виртуальную среду Python.

Вы можете создать каталог виртуальной среды venv/ следующим образом:

python -m venv venv

Чтобы активировать его в Windows, выполните команду:

venv\Scripts\activate

Эквивалентно, на macOS/Linux выполните команду:

source venv/bin/activate

В активированной виртуальной среде установите все необходимые библиотеки:

pip install pandas jupyter matplotlib seaborn numpy

Чтобы создать файл analysis.ipynb, сначала нужно войти в папку data_analysis/:

cd data_analysis

Затем инициализируйте новый блокнот Jupyter Notebook с помощью этой команды:

jupyter notebook

Теперь вы можете получить доступ к приложению Jupyter Notebook на сайте http://locahost:8888 в браузере.

Создайте новый файл, нажав на опцию “New > Python 3 (ipykernel)”:

Создание нового файла с помощью ядра ipython

По умолчанию новый файл будет называться untitled.ipynb. Вы можете переименовать его в приборной панели следующим образом:

Переименование файла Jupyter Notebook

Отлично! Теперь вы полностью готовы к анализу данных с помощью Python.

Шаг 2: Загрузите данные и откройте их

Набор данных, используемый в этом руководстве, взят с рынка наборов данных Bright Data. Чтобы загрузить его, бесплатно зарегистрируйтесь на платформе и перейдите на свою панель управления. Затем пройдите по пути “Web Datasets > Dataset”, чтобы попасть на рынок наборов данных:

Раздел "Рынок

Прокрутите страницу вниз и найдите карточку “Информация о недвижимости Airbnb”:

Набор данных "Информация о недвижимости Airbnb"

Чтобы загрузить набор данных, нажмите на опцию “Загрузить образец > Загрузить как CSV”:

Загрузка данных

Теперь вы можете переименовать загруженный файл, например, в airbnb.csv. Чтобы открыть CSV-файл в Jupyter Notebook, напишите в новой ячейке следующее:

import pandas as pd

# Open CSV
data = pd.read_csv("airbnb.csv")

# Show head
data.head()

В этом фрагменте:

  • Метод read_csv() открывает CSV-файл как набор данных pandas.
  • Метод head() показывает первые 5 строк набора данных.

Ниже приведен ожидаемый результат:

Первые строки в наборе данных Aribnb

Как видите, в этом наборе данных 45 столбцов. Чтобы увидеть их все, нужно передвинуть полосу вправо. Однако в данном случае количество столбцов велико, и только прокрутка полосы вправо не позволит вам увидеть все столбцы, поскольку некоторые из них будут скрыты.

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

# Show all columns
pd.set_option("display.max_columns", None)

# Display the data frame
print(data)

Шаг 3: Управление NaNs

В вычислительной технике NaN означает “не число”. При анализе данных в Python вы можете столкнуться с наборами данных с пустыми значениями, строками, в которых должны быть числа, или ячейками, уже помеченными как NaN (см., например, столбец скидок на изображении выше).

Поскольку ваша цель – анализ данных, вы должны правильно обрабатывать NaN. У вас есть три основных способа сделать это:

  1. Удалите все строки, содержащие NaN.
  2. Замените NaNв столбце средним значением, вычисленным по другим числам того же столбца.
  3. Поиск новых данных для обогащения исходного набора данных.

Для простоты будем придерживаться первого подхода.

Сначала нужно проверить, все ли значения столбца "Скидка" являются NaN. Если это так, то можно удалить весь столбец. Чтобы проверить это, напишите в новой ячейке следующее:

import numpy as np

is_discount_all_nan = data["discount"].isna().all()

print(f"Is the 'discount' column all NaNs? {is_discount_all_nan}")

В этом фрагменте метод isna().all() анализирует NaNsстолбца discount, который был отфильтрован из набора данных с помощью data["discount"].

В результате вы получите True, что означает, что столбец discount **** можно отбросить, так как все его значения – NaN. Чтобы добиться этого, напишите:

data = data.drop(columns=["discount"])

Оригинальный набор данных был заменен новым набором данных без колонки скидок.

Теперь вы можете проанализировать весь набор данных и посмотреть, есть ли в строках еще NaN, как показано ниже:

total_nans = data.isna().sum().sum()

print(f"Total number of NaN values in the data frame: {total_nans}")

Результат, который вы получите, будет следующим:

Total number of NaN values in the data frame: 1248

Это означает, что в кадре данных есть еще 1248 NaN. Чтобы отбросить строки, содержащие хотя бы один NaN, введите:

data = data.dropna()

Теперь кадр данных не содержит NaNи готов к анализу данных на Python без опасений, что результаты будут искажены.

Чтобы убедиться, что процесс прошел успешно, вы можете написать:

print(data.isna().sum().sum())

Ожидаемый результат – 0.

Шаг 4: Исследование данных

Прежде чем визуализировать данные Airbnb, вам нужно с ними ознакомиться. Хорошая практика – начать с визуализации статистики вашего набора данных, например, так:

# Show statistics of the entire dataset
statistics = data.describe()

# Print statistics
print(statistics)

Это ожидаемый результат:

             price     ratings         lat        long      guests  \
count   182.000000  182.000000  182.000000  182.000000  182.000000   
mean    147.523352    4.804505    6.754955  -68.300942    6.554945   
std     156.574795    0.209834   27.795750   24.498326    3.012818   
min      16.000000    4.000000  -21.837300 -106.817450    2.000000   
25%      50.000000    4.710000  -21.717270  -86.628968    4.000000   
50%      89.500000    4.865000   30.382710  -83.479890    6.000000   
75%     180.750000    4.950000   30.398860  -43.925480    8.000000   
max    1003.000000    5.000000   40.481580  -43.801300   16.000000   

        property_id  host_number_of_reviews  host_rating  hosts_year  \
count  1.820000e+02              182.000000   182.000000  182.000000   
mean   1.323460e+17             3216.879121     4.776099    7.324176   
std    3.307809e+17             4812.876819     0.138849    2.583280   
min    3.089381e+06                2.000000     4.290000    1.000000   
25%    3.107102e+07               73.000000     4.710000    6.000000   
50%    4.375321e+07             3512.000000     4.710000    9.000000   
75%    4.538668e+07             3512.000000     4.890000    9.000000   
max    1.242049e+18            20189.000000     5.000000   11.000000   

       host_response_rate   total_price  
count          182.000000    182.000000  
mean            98.538462    859.317363  
std              8.012156   1498.684990  
min             25.000000     19.000000  
25%            100.000000    111.500000  
50%            100.000000    350.000000  
75%            100.000000    934.750000  
max            100.000000  13165.000000  

Метод describe() сообщает статистику, относящуюся к столбцам с числовыми значениями. Это самый первый способ начать понимать свои данные. Например, столбец host_rating сообщает следующую интересную статистику:

  • Всего в наборе данных 182 отзыва (значение count ).
  • Максимальная оценка – 5, минимальная – 4,29, а средняя – 4,77.

Тем не менее, приведенная выше статистика может вас не удовлетворить. Поэтому попробуйте изобразить диаграмму рассеяния для столбца host_rating, чтобы увидеть, есть ли какая-нибудь интересная закономерность, которую вы, возможно, захотите исследовать позже. Вот как можно создать диаграмму рассеяния с помощью seaborn:

import seaborn as sns
import matplotlib.pyplot as plt

# Define figure size
plt.figure(figsize=(15, 10))

# Plot the data
sns.scatterplot(data=data, x="host_rating", y="listing_name")

# Labeling
plt.title("HOST RATINGS SCATTERPLOT", fontsize=20)
plt.xlabel("Host ratings", fontsize=16)
plt.ylabel("Houses", fontsize=16)

# Show plot
plt.show()

Приведенный выше фрагмент выполняет следующие действия:

  • Определяет размер изображения (в дюймах) с помощью метода figure().
  • Создает диаграмму рассеяния с помощью seaborn через метод scatterplot(), настроенный на
    :Polylang placeholder do not modify

Это ожидаемый результат:

Полученная диаграмма рассеяния

Отличный сюжет, но мы можем сделать лучше!

Шаг 5: Преобразование и визуализация данных

Предыдущая диаграмма рассеивания показывает, что в рейтингах ведущих нет определенной закономерности. Однако большинство рейтингов превышает 4,7 балла.

Представьте, что вы планируете отпуск и хотите остановиться в одном из лучших мест. Вы можете задать себе вопрос: “Сколько стоит проживание в доме с рейтингом не ниже 4,8?”

Чтобы ответить на этот вопрос, сначала нужно преобразовать данные!

Преобразование, которое вы можете сделать, заключается в создании нового фрейма данных, где рейтинг больше 4,8. Он будет содержать столбец listing_n``ame с названиями квартир и столбец total_price с их ценами.

Получите это подмножество и покажите его статистику с помощью:

# Filter the DataFrame
high_ratings = data[data["host_rating"] > 4.8][["listing_name", "total_price"]]

# Caltulate and print statistics
high_ratings_statistics = high_ratings.describe()
print(high_ratings_statistics)

Приведенный выше фрагмент создает новый кадр данных под названием high_ratings следующим образом:

  • data["host_rating"] > 4.8 Фильтрует значения больше 4.8 в столбце host_ratings из набора данных.
  • [["listing_name", "total_price"]] выбирает только столбцы listing_name и total_price из рамки данных high_ratings.

Ниже приведен ожидаемый результат:

       total_price
count    78.000000
mean    321.061026
std     711.340269
min      19.000000
25%      78.250000
50%     116.000000
75%     206.000000
max    4230.000000

Статистика показывает, что средняя общая цена выбранных квартир составляет $321, при минимуме в $19 и максимуме в $4230. Это требует дальнейшего анализа!

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

# Define figure size
plt.figure(figsize=(12, 8))

# Plot the data
sns.scatterplot(data=high_ratings, x='total_price', y='listing_name')

# Labeling
plt.title('HIGH RATING HOUSES PRICES', fontsize=20)
plt.xlabel('Prices', fontsize=16)
plt.ylabel('Houses', fontsize=16)

# Show grid for better visualization
sns.set_style("ticks", {'axes.grid': True})

# Show plot
plt.show()

И вот какой сюжет получился в результате:

Полученная диаграмма рассеяния

Этот график демонстрирует два интересных факта:

  1. Цены в основном не превышают 500 долларов.
  2. Цены на “Целую хижину в Севиервилле” и “Целую хижину в Пиджеоне” значительно превышают 1000 долларов.

Лучшим способом визуализации ценового диапазона является бокс-график. Вот как это можно сделать:

# Define figure size
plt.figure(figsize=(15, 10))

# Plotting the boxplot
sns.boxplot(data=high_ratings, x='total_price', y='listing_name')

# Labeling
plt.title('HIGH RATING HOUSES PRICES - BOXPLOT', fontsize=20)
plt.xlabel('Prices', fontsize=16)
plt.ylabel('Houses', fontsize=16)

# Show plot
plt.show()

На этот раз результирующий график будет таким:

Полученная диаграмма

Если вы задаетесь вопросом, почему один и тот же дом может стоить по-разному, вспомните, что вы отфильтровали оценки пользователей. Это означает, что разные пользователи платили по-разному и оставляли разные оценки.

Кроме того, значительный разброс цен на “Хижину в Севиервилле”, варьирующийся от менее 1000 до более 4000 долларов, может быть связан с продолжительностью пребывания. В исходном наборе данных есть столбец travel_details, в котором содержится информация о продолжительности пребывания. Широкий диапазон цен может указывать на то, что некоторые пользователи снимали дом на длительный срок. Более глубокий анализ с помощью Python может помочь раскрыть больше информации об этом!

Шаг 6: Дальнейшие исследования с помощью корреляционной матрицы

Анализ данных в Python – это задавание вопросов и поиск ответов в имеющихся данных. Один из эффективных способов задать эти вопросы – визуализация корреляционной матрицы.

Корреляционная матрица – это таблица, которая показывает коэффициенты корреляции для различных переменных. Наиболее часто используемым коэффициентом корреляции является коэффициент корреляции Пирсона (PCC), который измеряет линейную корреляцию между двумя переменными. Его значения варьируются от -1 до +1, что означает:

  • +1: Если значение одной переменной увеличивается, то другая увеличивается линейно.
  • -1 : Если значение одной переменной увеличивается, то другая линейно уменьшается.
  • 0: Вы не можете ничего сказать о линейной связи двух переменных (это требует нелинейного анализа).

В статистике значения линейной корреляции определяют следующим образом:

  • 0,1-0,5: низкая корреляция.
  • 0,6-1: высокая корреляция.
  • 0: корреляция отсутствует.

Чтобы отобразить корреляционную матрицу для фрейма данных, введите следующее:

# Set the images dimensions
plt.figure(figsize=(12, 10))

# Labeling
plt.title('CORRELATION MATRIX', fontsize=20)
plt.xticks(fontsize=16) # x-axis font size
plt.yticks(fontsize=16) # y-axis font size

# Applying mask
mask = np.triu(np.ones_like(numeric_data.corr()))
dataplot = sns.heatmap(numeric_data.corr(), annot=True, fmt='.2f', mask=mask, annot_kws={"size": 12})

#Add this code before creating the correlation matrix
numeric_data = data.select_dtypes(include=['float64', 'int64'])

# Correlation matrix
dataplot = sns.heatmap(data.corr(), annot=True, fmt='.2f', mask=mask, annot_kws={"size": 12})

Приведенный выше фрагмент выполняет следующие действия:

  • Метод np.triu() используется для диагонализации матрицы. Это используется для лучшей визуализации матрицы, чтобы она отображалась в виде треугольника, а не квадрата.
  • Метод sns.heatmap() создает тепловую карту. Он также используется для лучшей визуализации. Внутри него находится метод data.corr(), который фактически вычисляет коэффициенты Пирсона для каждого столбца данных кадра.

Ниже приведен результат, который вы получите:

Полученная корреляционная матрица

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

  • Переменные lat и long имеют корреляцию -0,98. Это ожидаемо, так как широта и долгота сильно коррелируют при определении конкретного места на Земле.
  • Переменные host_rating и long имеют корреляцию -0,69. Это интересный результат, который означает, что рейтинг хоста сильно коррелирует с переменной longitude. Таким образом, похоже, что дома, расположенные в определенном районе мира, имеют высокие рейтинги хозяев.
  • Переменные lat и long имеют, соответственно, 0,63 и -0,69 корреляции с ценой. Этого достаточно, чтобы сказать, что цена за день сильно зависит от местоположения.

При анализе также следует искать некоррелированные переменные. Например, коэффициент переменных is_supperhost и price равен -0,18, что означает, что суперхосты не имеют самых высоких цен.

Теперь, когда основные понятия ясны, настала ваша очередь исследовать и анализировать данные!

Шаг 7: Соберите все вместе

Так будет выглядеть окончательный вариант Jupyter Notebook для анализа данных с помощью Python:

Блокнот Jupyter - часть 1
Блокнот Jupyter - часть 2
Блокнот Jupyter - часть 2
Блокнот Jupyter - часть 2
Блокнот Jupyter - часть 3
Блокнот Jupyter - часть 4
Блокнот Jupyter - часть 5
Блокнот Jupyter - часть 6
Блокнот Jupyter - часть 7

Обратите внимание на наличие различных ячеек, каждая из которых имеет свой выход.

Процесс анализа данных с помощью Python

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

  1. Поиск данных: Если вам повезло, и нужные вам данные содержатся в базе данных, то вам повезло! Если нет, то вам нужно получить их с помощью популярных методов поиска данных, таких каквеб-скраппинг.
  2. Очистка данных: Обработка NaNs, агрегирование данных и применение первых фильтров к исходному набору данных.
  3. Исследование данных: Исследование данных – иногда его еще называют обнаружением данных – являетсянаиболее важной частью анализа данных с помощью Python. Она требует построения базовых графиков, которые помогут вам понять, как структурированы ваши данные и следуют ли они определенным закономерностям.
  4. Работа с данными: После того как вы уловили основные идеи, лежащие в основе анализируемых данных, вам предстоит ими манипулировать. Эта часть требует фильтрации наборов данных и часто объединения более двух наборов данных в один (как если бы вы выполняли объединение таблиц в SQL).
  5. Визуализация данных: Это заключительная часть, в которой вы визуально представите свои данные, построив несколько графиков на наборах данных, которыми вы манипулировали.

Заключение

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

Вы видели, что Jupyter Notebook помогает создавать подмножества данных, визуализировать их и открывать мощные идеи. При этом все данные остаются структурированными в единой среде. Где же найти готовые к использованию наборы данных? Bright Data поможет вам!

Bright Data управляет крупной, быстрой и надежной прокси-сетью, которую используют многие компании из списка Fortune 500 и более 20 000 клиентов. Она используется для этичного извлечения данных из Сети и их предложения на обширном рынке наборов данных, который включает в себя:

Создайте бесплатную учетную запись Bright Data сегодня и изучите наши наборы данных.

Кредитная карта не требуется