Python

Исследовательский анализ данных с использованием Python

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

Исследовательский анализ данных с использованием Python

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

Итак, не теряя времени, давайте приступим к исследовательскому анализу данных, импортировав необходимые библиотеки Python и набор данных:

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
pio.templates.default = "plotly_white"

data = pd.read_csv("/content/Instagram data.csv", encoding='latin-1')

Теперь давайте посмотрим на первые пять строк данных:

   Impressions  From Home  From Hashtags  From Explore  From Other  Saves  \
0         3920       2586           1028           619          56     98   
1         5394       2727           1838          1174          78    194   
2         4021       2085           1188             0         533     41   
3         4528       2700            621           932          73    172   
4         2518       1704            255           279          37     96   

   Comments  Shares  Likes  Profile Visits  Follows  \
0         9       5    162              35        2   
1         7      14    224              48       10   
2        11       1    131              62       12   
3        10       7    213              23        8   
4         5       4    123               8        0   

                                             Caption  \
0  Here are some of the most important data visua...   
1  Here are some of the best data science project...   
2  Learn how to train a machine learning model an...   
3  Here’s how you can write a Python program to d...   
4  Plotting annotations while visualizing your da...   

                                            Hashtags  
0  #finance #money #business #investing #investme...  
1  #healthcare #health #covid #data #datascience ...  
2  #data #datascience #dataanalysis #dataanalytic...  
3  #python #pythonprogramming #pythonprojects #py...  
4  #datavisualization #datascience #data #dataana...  

Теперь давайте посмотрим на все столбцы, содержащиеся в наборе данных:

Index(['Impressions', 'From Home', 'From Hashtags', 'From Explore',
       'From Other', 'Saves', 'Comments', 'Shares', 'Likes', 'Profile Visits',
       'Follows', 'Caption', 'Hashtags'],
      dtype="object")

Теперь давайте посмотрим на информацию столбца:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 119 entries, 0 to 118
Data columns (total 13 columns):
 #   Column          Non-Null Count  Dtype 
---  ------          --------------  ----- 
 0   Impressions     119 non-null    int64 
 1   From Home       119 non-null    int64 
 2   From Hashtags   119 non-null    int64 
 3   From Explore    119 non-null    int64 
 4   From Other      119 non-null    int64 
 5   Saves           119 non-null    int64 
 6   Comments        119 non-null    int64 
 7   Shares          119 non-null    int64 
 8   Likes           119 non-null    int64 
 9   Profile Visits  119 non-null    int64 
 10  Follows         119 non-null    int64 
 11  Caption         119 non-null    object
 12  Hashtags        119 non-null    object
dtypes: int64(11), object(2)
memory usage: 12.2+ KB
None

Далее мы смотрим на описательную статистику данных:

        Impressions     From Home  From Hashtags  From Explore   From Other  \
count    119.000000    119.000000     119.000000    119.000000   119.000000   
mean    5703.991597   2475.789916    1887.512605   1078.100840   171.092437   
std     4843.780105   1489.386348    1884.361443   2613.026132   289.431031   
min     1941.000000   1133.000000     116.000000      0.000000     9.000000   
25%     3467.000000   1945.000000     726.000000    157.500000    38.000000   
50%     4289.000000   2207.000000    1278.000000    326.000000    74.000000   
75%     6138.000000   2602.500000    2363.500000    689.500000   196.000000   
max    36919.000000  13473.000000   11817.000000  17414.000000  2547.000000   

             Saves    Comments      Shares       Likes  Profile Visits  \
count   119.000000  119.000000  119.000000  119.000000      119.000000   
mean    153.310924    6.663866    9.361345  173.781513       50.621849   
std     156.317731    3.544576   10.089205   82.378947       87.088402   
min      22.000000    0.000000    0.000000   72.000000        4.000000   
25%      65.000000    4.000000    3.000000  121.500000       15.000000   
50%     109.000000    6.000000    6.000000  151.000000       23.000000   
75%     169.000000    8.000000   13.500000  204.000000       42.000000   
max    1095.000000   19.000000   75.000000  549.000000      611.000000   

          Follows  
count  119.000000  
mean    20.756303  
std     40.921580  
min      0.000000  
25%      4.000000  
50%      8.000000  
75%     18.000000  
max    260.000000  

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

print(data.isnull().sum())
Impressions       0
From Home         0
From Hashtags     0
From Explore      0
From Other        0
Saves             0
Comments          0
Shares            0
Likes             0
Profile Visits    0
Follows           0
Caption           0
Hashtags          0
dtype: int64

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

Когда вы начинаете изучать свои данные, всегда начинайте с изучения основной функции ваших данных. Например, поскольку мы работаем над набором данных на основе Instagram Reach, мы должны начать с изучения функции, которая содержит данные об охвате. В наших данных столбец «Показы» содержит данные об охвате публикации в Instagram. Итак, давайте посмотрим на распределение показов:

fig = px.histogram(data, 
                   x='Impressions', 
                   nbins=10, 
                   title="Distribution of Impressions")
fig.show()
Исследовательский анализ данных: распределение показов

Теперь давайте посмотрим на количество показов каждого поста с течением времени:

fig = px.line(data, x= data.index, 
              y='Impressions', 
              title="Impressions Over Time")
fig.show()
EDA: впечатления с течением времени

Теперь давайте посмотрим на все показатели, такие как лайки, сохранения и подписки для каждого поста с течением времени:

fig = go.Figure()

fig.add_trace(go.Scatter(x=data.index, y=data['Likes'], name="Likes"))
fig.add_trace(go.Scatter(x=data.index, y=data['Saves'], name="Saves"))
fig.add_trace(go.Scatter(x=data.index, y=data['Follows'], name="Follows"))

fig.update_layout(title="Metrics Over Time",
                  xaxis_title="Date",
                  yaxis_title="Count")

fig.show()
Исследовательский анализ данных: показатели во времени

Теперь посмотрим на распределение охвата из разных источников:

reach_sources = ['From Home', 'From Hashtags', 'From Explore', 'From Other']
reach_counts = [data[source].sum() for source in reach_sources]

colors = ['#FFB6C1', '#87CEFA', '#90EE90', '#FFDAB9']

fig = px.pie(data_frame=data, names=reach_sources, 
             values=reach_counts, 
             title="Reach from Different Sources",
             color_discrete_sequence=colors)
fig.show()
EDA: охват из разных источников

Теперь посмотрим на распределение источников вовлеченности:

engagement_metrics = ['Saves', 'Comments', 'Shares', 'Likes']
engagement_counts = [data[metric].sum() for metric in engagement_metrics]

colors = ['#FFB6C1', '#87CEFA', '#90EE90', '#FFDAB9']

fig = px.pie(data_frame=data, names=engagement_metrics, 
             values=engagement_counts, 
             title="Engagement Sources",
             color_discrete_sequence=colors)
fig.show()
Исследовательский анализ данных: источники взаимодействия

Теперь давайте посмотрим на взаимосвязь между количеством посещений профиля и подписками:

fig = px.scatter(data, 
                 x='Profile Visits', 
                 y='Follows', 
                 trendline="ols",
                 title="Profile Visits vs. Follows")
fig.show()
EDA: посещения профиля и подписчики

Теперь давайте посмотрим на тип хэштегов, используемых в сообщениях с помощью wordcloud:

from wordcloud import WordCloud

hashtags=" ".join(data['Hashtags'].astype(str))
wordcloud = WordCloud().generate(hashtags)

fig = px.imshow(wordcloud, title="Hashtags Word Cloud")
fig.show()
Исследовательский анализ данных: хэштеги Word Cloud

Теперь давайте посмотрим на корреляцию между всеми функциями:

corr_matrix = data.corr()

fig = go.Figure(data=go.Heatmap(z=corr_matrix.values,
                               x=corr_matrix.columns,
                               y=corr_matrix.index,
                               colorscale="RdBu",
                               zmin=-1,
                               zmax=1))

fig.update_layout(title="Correlation Matrix",
                  xaxis_title="Features",
                  yaxis_title="Features")

fig.show()
EDA: Матрица корреляции

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

# Create a list to store all hashtags
all_hashtags = []

# Iterate through each row in the 'Hashtags' column
for row in data['Hashtags']:
    hashtags = str(row).split()
    hashtags = [tag.strip() for tag in hashtags]
    all_hashtags.extend(hashtags)

# Create a pandas DataFrame to store the hashtag distribution
hashtag_distribution = pd.Series(all_hashtags).value_counts().reset_index()
hashtag_distribution.columns = ['Hashtag', 'Count']

fig = px.bar(hashtag_distribution, x='Hashtag', 
             y='Count', title="Distribution of Hashtags")
fig.show()
Исследовательский анализ данных: распределение хэштегов

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

# Create a dictionary to store the likes and impressions for each hashtag
hashtag_likes = {}
hashtag_impressions = {}

# Iterate through each row in the dataset
for index, row in data.iterrows():
    hashtags = str(row['Hashtags']).split()
    for hashtag in hashtags:
        hashtag = hashtag.strip()
        if hashtag not in hashtag_likes:
            hashtag_likes[hashtag] = 0
            hashtag_impressions[hashtag] = 0
        hashtag_likes[hashtag] += row['Likes']
        hashtag_impressions[hashtag] += row['Impressions']

# Create a DataFrame for likes distribution
likes_distribution = pd.DataFrame(list(hashtag_likes.items()), columns=['Hashtag', 'Likes'])

# Create a DataFrame for impressions distribution
impressions_distribution = pd.DataFrame(list(hashtag_impressions.items()), columns=['Hashtag', 'Impressions'])

fig_likes = px.bar(likes_distribution, x='Hashtag', y='Likes', 
                   title="Likes Distribution for Each Hashtag")

fig_impressions = px.bar(impressions_distribution, x='Hashtag', 
                         y='Impressions', 
                         title="Impressions Distribution for Each Hashtag")

fig_likes.show()
fig_impressions.show()
EDA: распределение лайков по каждому хэштегу
EDA: распределение показов по каждому хэштегу

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

Краткое содержание

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


Ссылка на источник

Похожие статьи

Кнопка «Наверх»