Закажи экспресс-аудит своего дела онлайн всего за 199 ₽
и получи рекомендации по улучшению - Жми сюда !

Изучение закономерностей доходов с помощью Python Pandas, Matplotlib и Seaborn.

Простой и понятный для начинающих метод разведочного анализа данных переписи населения США.

Делиться

940c8348bc1be7aa953aba3edb0801f1
Изображение Энгина Айкурта через Unsplash

Когда мы говорим о доходах, мы склонны приписывать успех упорному труду и интеллекту. В других случаях мы просто предполагаем, что некоторым людям просто повезло, и, несмотря на низкий уровень образования или отсутствие опыта, они смогли добиться успеха в своей профессии и комфортно зарабатывать. Однако истина находится где-то посередине между этими двумя крайностями. Да, некоторым людям действительно везет, и они становятся миллионерами в молодом возрасте, но мы также видим людей, которые упорно работают, чтобы подняться по карьерной лестнице, и прилагают усилия там, где это необходимо для профессионального роста и, следовательно, увеличения дохода.

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

Проект

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

Набор данных

В этом проекте мы будем использовать набор данных о доходах взрослого населения США, представляющий собой реальные данные, полученные в результате переписи населения США. Хотя этот набор данных относится к 1990-м годам, мы можем использовать его для анализа структуры доходов с учетом того, что за 30 лет ситуация изменилась, особенно в отношении ранее существовавшего гендерного разрыва. Этот набор данных содержит демографическую информацию и данные о занятости, включая возраст, профессию, уровень образования, семейное положение, пол, рабочее время и т.д., большая часть которых имеет важное значение для целей нашего проекта. Этот набор данных находится в открытом доступе и широко используется в образовательных и исследовательских проектах.

Набор данных: Данные о доходах взрослого населения по переписи населения
Источник: Репозиторий машинного обучения UCI (CC BY 4.0)
Исходные данные получены из базы данных Бюро переписи населения США.

Итак, начнём!

Инициализация среды программирования

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

Для начала создадим новый проект под названием «Анализ структуры доходов взрослых» и напишем файл main.py на языке Python. Именно здесь мы будем писать код.

Установка и импорт соответствующих библиотек

Далее установим необходимые библиотеки/пакеты Python. Для исследования и анализа данных мы будем использовать следующие библиотеки:

  1. Pandas — одна из самых популярных библиотек, помогающая работать с табличными данными, такими как CSV-файлы.
  2. Matplotlib — эта библиотека Python позволяет создавать графики, диаграммы и другие средства визуализации данных.
  3. Seaborn — это библиотека, построенная на основе matplotlib, которая значительно расширяет возможности визуализации данных, упрощая и делая более привлекательными диаграммы и графики.

Мы установим указанные выше библиотеки, используя опцию терминала в PyCharm (найдите инструкцию по установке для вашей конкретной IDE).

 pip install pandas matplotlib seaborn

После завершения установки мы импортируем эти библиотеки в наш файл main.py

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

Загрузка набора данных и базовый анализ.

Теперь мы загрузим набор данных в виде DataFrame в переменную с именем df. Это стандартный способ загрузки набора данных в DataFrame для дальнейшего использования, используемый библиотекой pandas:

 df = pd.read_csv("https://huggingface.co/api/resolve-cache/datasets/scikit-learn/adult-census-income/fbeef6ec0e6fd88a5028b94683144000a6b380d5/adult.csv?%2Fdatasets%2Fscikit-learn%2Fadult-census-income%2Fresolve%2Fmain%2Fadult.csv=&etag=%225cf74ede1a6de37d85c96a61d30819a694dee749%22") print(df.head()) 
eb1d04dc0a6c17ed7cfdeaccaf0ccc2b
df.head() (Изображение предоставлено автором)

Как видите, сначала мы загрузили набор данных по указанному ранее URL-адресу, а затем использовали функцию df.head() для вывода первых 5 строк набора данных, чтобы получить представление о его структуре. Мы видим названия столбцов: age, workclass, fnlweight, hours.per.week, native.country и income. Здесь пунктирные линии разделяют fnlweight и hours.per.week, что указывает на наличие и других столбцов, которые не удалось корректно отобразить из-за ограниченного пространства на экране вывода. Эту проблему можно решить с помощью нескольких строк кода (мы рассмотрим это позже).

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

 print(df.shape) 
7d03b1bbc4e4ef22eef4a98532ca23a4
df.shape (Изображение предоставлено автором)

Наконец, давайте рассмотрим подробную информацию о столбце, включая тип хранимых в нем данных:

 print(df.info()) 
257fd3a1d63dfb6ecc41764f3cae5cad
df.info() (Изображение предоставлено автором)

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

Название столбца Значение
age Возраст человека в годах
workclass Тип занятости/сектор труда:
Сотрудник Private → Сотрудник частной компании
Self-emp-not-inc → Самозанятый (не зарегистрированная компания)
Government → Государственный служащий
Without-pay → Неоплачиваемый работник
fnlwgt Окончательный весовой коэффициент выборки, присвоенный Бюро переписи населения.
education Наивысший полученный уровень образования:
Bachelors
HS-grad
Masters
Doctorate
education.num Числовое представление уровня образования:
Средняя школа → 9
Бакалавры → 13
Мастера → 14
marital.status Семейное положение человека
occupation Тип работы/профессии
relationship Семейное положение в домохозяйстве:
Husband
Wife
Own-child
Not-in-family
race Категория гонки
sex Пол
capital.gain Прибыль, полученная от инвестиций/активов
capital.loss Убытки, понесенные от инвестиций/активов
hours.per.week Среднее количество рабочих часов в неделю
native.country Страна происхождения
income Категория дохода (целевая переменная)
Обычно: <=50K или >50K

Теперь давайте отобразим первые 5 строк с указанием всех столбцов. Запустите приведенный ниже код, чтобы получить первые 5 столбцов без усечения:

 print(df.head().to_string()) 
83be8a417bf426a0c86660a0e5972262
df.head() Полная строка (Изображение предоставлено автором)
990e871fe785bc492cd97f4d961b7186
df.head() Полная строка (Изображение предоставлено автором)

Очистка данных

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

Мы воспользуемся функцией `pandas replace() для замены вопросительных знаков на `NA` и удалим из нашего датафрейма строки, содержащие пропущенные значения, с помощью функции ` dropna() . Таким образом, любая строка, содержащая пропущенную информацию о профессии, образовании и т.п., будет удалена из датафрейма. Мы также видим, что ряд строк удаляется из датафрейма с помощью следующего кода:

 print("Before cleaning:", len(df)) df = df.replace("?", pd.NA).dropna() print("After cleaning:", len(df)) 
f57ea77e9b07d39699a892132e2cb68a
Очистка данных (Изображение предоставлено автором)

Как видно, после очистки нашего набора данных осталось всего 30 162 строки из первоначальных 32 561.

Общий анализ доходов

Начнём анализ данных с этого момента! Мы знаем, что критерий дохода хранится в столбце income , и он может быть либо больше 50 000, либо меньше 50 000. Также обратите внимание, что это данные переписи 1994 года, поэтому не удивляйтесь цифрам!

Давайте визуализируем данные о доходах:

 #Income Graph sns.countplot(x="income", data=df) plt.show()

Для построения графика распределения доходов мы использовали библиотеку seaborn из Python.

7b821cce42d57ebb06a0da667a4eee2e
График доходов (изображение предоставлено автором)

Как видно из приведенного выше графика, большинство людей зарабатывали менее 50 000 долларов, в то время как меньший процент зарабатывал больше 50 000 долларов. График не только подчеркивает несбалансированное распределение доходов, но и дает представление об экономической структуре США в начале 1990-х годов, когда 50 000 долларов считались относительно высокой годовой зарплатой.

Анализ доходов в зависимости от образования

Теперь давайте посмотрим, как уровень образования влияет на доход. Это представляет особый интерес, поскольку обычно наблюдается тенденция к тому, что люди с высшим образованием зарабатывают значительно больше, чем люди с минимальным или низким уровнем образования. Давайте проверим, подтверждают ли это данные:

 #Eductaion & Income Relationship result = df.groupby("education")["income"].value_counts() print(result) 
507a29d9f07be0589b878f7046a69715
Взаимосвязь образования и дохода (Изображение предоставлено автором)
 #Eductaion & Income Relationship result = df.groupby("education")["income"].value_counts().unstack() # Plot result.plot(kind="bar", figsize=(12,6)) # Labels and title plt.title("Education vs Income") plt.xlabel("Education Level") plt.ylabel("Count") plt.xticks(rotation=45) # Show graph plt.show() 
856ca213e3e5a2fcb82e09793bf0d3cf
Образование против дохода (Изображение предоставлено автором)

Приведенные выше результаты указывают на то, что высшее образование является фактором, приводящим к более высокому доходу в целом. Хотя это нельзя визуализировать из результатов функции `pandas groupby() , мы использовали график `seaborn count`, чтобы получить представление о том, как разные уровни образования влияют на диапазон доходов отдельных лиц.

Таким образом, видно, что:

  • Незначительная часть людей с уровнем образования ниже «неполного высшего», зарабатывающих более 50 тысяч долларов, всё ещё имеет место.
  • Высшее образование тесно коррелирует с более высоким доходом: большинство из более чем 50 000 человек имеют степень бакалавра, магистра, диплом колледжа и т.д.
  • Среди людей с низким уровнем дохода преобладает среднее образование, что показано самой высокой синей полосой.
  • У обладателей профессиональных степеней и докторских степеней оранжевая полоса выше синей, что указывает на более высокий процент людей, зарабатывающих более 50 000 долларов, и это логично, поскольку специалисты в технической области получают высокое вознаграждение.
  • Интересно, что среди высокообразованного населения не все зарабатывают больше 50 тысяч, а это значит, что помимо уровня образования на доход влияют и другие важные факторы. Давайте проведем дальнейший анализ, рассмотрев другие столбцы!

Анализ дохода в зависимости от количества отработанных часов в неделю.

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

 # Show graph sns.boxplot(x="income", y="hours.per.week", data=df) plt.show() 
591325ef707d7ae965dfc28acf6acd71

Как видно из приведенной выше диаграммы размаха, у населения, зарабатывающего более 50 000 долларов, медиана выше, разброс шире, и больше людей работают сверхурочно. Это соответствует нашему предположению, что да, люди, работающие больше часов в неделю, как правило, имеют более высокий доход, чем другие. Но с другой стороны, у нас есть еще одно интересное наблюдение относительно выбросов в левом прямоугольнике, указывающее на то, что есть люди, которые работают более 70 часов и при этом зарабатывают меньше 50 000 долларов. Это означает, что хотя люди с более высоким доходом обычно работают больше часов в неделю, одних только длительных рабочих часов недостаточно для гарантирования высокой зарплаты. Существуют и другие факторы, помимо уровня образования и количества рабочих часов в неделю, поэтому перейдем к следующему параметру!

Анализ доходов в контексте гендерного равенства

Мы знаем, что много говорилось о гендерном разрыве и дискриминации в оплате труда между мужчинами и женщинами, занимающими одинаковые должности, но было ли это так в 1990-х годах, и если да, то в какой степени?

Давайте представим это с помощью столбчатой диаграммы:

 result = df.groupby("sex")["income"].value_counts().unstack() # Plot with custom colors ax = result.plot( kind="bar", figsize=(10,6), color=["skyblue", "blue"] ) # Add labels on bars for container in ax.containers: ax.bar_label(container) # Titles and labels plt.title("Income Distribution by Gender") plt.xlabel("Gender") plt.ylabel("Count") plt.xticks(rotation=0) # Show graph plt.show() 
97abe4de29dacf8afeaca93e04e0ab59
Распределение доходов по полу (Изображение предоставлено автором)

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

Доход в зависимости от трудового класса. Анализ.

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

 print(df["workclass"].unique()) # Select workclasses top_workclasses = df["workclass"].value_counts().head(7).index filtered_df = df[df["workclass"].isin(top_workclasses)] # Create chart plt.figure(figsize=(10,6)) sns.countplot( data=filtered_df, x="workclass", hue="income" ) # Titles and labels plt.title("Income Distribution Across Workclass Categories") plt.xlabel("Workclass") plt.ylabel("Number of Individuals") plt.xticks(rotation=15) plt.show() 
fc4084cfca591a4e862679fbf6162e32
Распределение доходов по рабочим классам (Изображение предоставлено автором)

Приведенная выше гистограмма показывает, что большинство людей в нашем наборе данных работали в частном секторе, что делает его доминирующей категорией занятости. Почти во всех категориях занятости количество людей, зарабатывающих менее 50 000 фунтов стерлингов, значительно выше, чем тех, кто зарабатывает более 50 000 фунтов стерлингов. Самозанятые работники, зарегистрированные в качестве юридических лиц ( Self-emp-inc ), по-видимому, имеют относительно большую долю высокооплачиваемых работников по сравнению с некоторыми государственными секторами.

Анализ доходов в зависимости от рода занятий

Теперь давайте посмотрим, как профессия влияла на доход, на примере простой печатной выписки.

 result = df[df["income"] == ">50K"]["occupation"].value_counts().head(10) print(result) 
823a6ec96c9c2ed064493e3b119e9f19
Род занятий и доход (Изображение предоставлено автором)

В приведенном выше коде мы получили доступ к 10 профессиям, где люди зарабатывали более 50 000 долларов. Как видно из результатов, самой высокооплачиваемой профессией была «руководящая должность», затем «специализированная профессиональная деятельность» и т. д. Это означает, что руководящие должности, технические профессии и работа, требующая специальных навыков, имеют более высокий потенциал заработка, чем другие.

Анализ доходов в зависимости от возраста

Далее рассмотрим, как возраст влиял на доход.

 # Create figure plt.figure(figsize=(10,6)) # Boxplot sns.boxplot( x="income", y="age", data=df ) # Titles and labels plt.title("Age vs Income Pattern") plt.xlabel("Income Category") plt.ylabel("Age") # Show graph plt.show() 
5a7b5622bd1d924291f8c19674fa3f7d
Возрастные и доходные различия (Изображение предоставлено автором)

Как видно на изображении выше, мы создали простую диаграмму, на которой показаны два прямоугольника: один определяет категорию дохода менее 50 000 долларов, а другой — более 50 000 долларов. Из графика видно, что в категорию менее 50 000 долларов в основном входят молодые люди, с несколькими исключениями среди пожилых людей. Также видно, что медианный возраст высокооплачиваемых работников заметно выше, что говорит о том, что доход, как правило, увеличивается с возрастом и опытом. Это отражает то, как карьерный рост, опыт и стаж часто приводят к повышению заработной платы с течением времени.

Основные выводы и заключение

В данной статье мы провели тщательный анализ данных переписи населения США 1994 года, чтобы выявить тенденции изменения доходов в зависимости от различных факторов, а именно: возраста, пола, рода занятий, класса занятости, количества рабочих часов в неделю и т. д. Основные выводы заключаются в следующем:

  • Большинство населения относится к категории людей с низким уровнем дохода.
  • Образование в целом повышало вероятность получения более высокого дохода.
  • Количество рабочих часов имеет значение, но лишь незначительно; увеличение количества рабочих часов в неделю не гарантирует более высокого дохода!
  • Профессия является одним из наиболее значимых факторов, влияющих на уровень дохода; для повышения дохода достаточно занимаемой должности!
  • Доход, как правило, увеличивается с возрастом.

Мы использовали библиотеки pandas, matplotlib и seaborn из Python не только для очистки данных, но и для их анализа с помощью графиков и диаграмм. На практике из этого анализа можно сделать вывод, что доход определяется не одним фактором, а сочетанием образования, профессии, опыта и возможностей!

Махнур Джавед. Посмотреть все публикации Махнур Джавед.

Источник: towardsdatascience.com

✅ Найденные теги: Python, Доходов, Закономерностей, изучение, новости, Помощью

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

Новости других рубрик

Архив рубрики ~Обо всем~: Как я собрал свою собственную кибердеку прямиком из научно-фантастического фильма 80-х — и все крутые вещи, которые она может делать. Архив рубрики ~Обо всем~: Компания Lego анонсировала 12 наборов Smart Play Pokémon. Архив рубрики ~Обо всем~: Вы можете оставлять голосовые сообщения в видеозвонках FaceTime, и многие об этом не знают — вот как это сделать. Архив рубрики ~Обо всем~: Не станьте жертвой утечки данных. Вот как защитить свои онлайн-аккаунты. Архив рубрики ~Обо всем~: RAG — это не машинное обучение, и инструментарий машинного обучения решает не ту проблему. Архив рубрики ~Обо всем~: Технология прямой связи с сотовой сетью: обеспечение спутниковой связи для устаревших устройств. Архив рубрики ~Обо всем~: Ремейк Star Fox — это проверка будущего франшизы. Архив рубрики ~Обо всем~: Новый Dell XPS 13 — конкурент MacBook Neo, его цена составляет 599 долларов, и при этом он сохраняет премиальные характеристики.