探索性数据分析(EDA)指南

在当今世界,数据量之大令人难以想象。各行各业和公司都在处理、加工和使用大量数据。为了更好地理解数据,必须学会如何进行正确的数据分析。探索性数据分析EDA)是执行这一任务的关键步骤。本文将详细介绍EDA的概念、重要性以及如何执行EDA。让开始吧!

什么是EDA?

EDA代表探索性数据分析。"探索性"意味着涉及探索或调查,而"分析"指的是对元素的详细检查。结合起来,EDA指的是与现有数据进行交互,使其自表达。现在问题是,为什么EDA如此重要?让举一个例子。如果几个孩子想玩国际象棋游戏。现在,要玩游戏,每个人都必须知道游戏规则。然后,每个人都必须了解如何玩以及如何赢得游戏。如果有超过两个孩子,他们就不能一起玩国际象棋。因此,需要知道玩家的数量。然后,玩家必须了解所有棋子。如果缺少一些棋子,他们将无法玩游戏。没有这些基本信息和规则,没有人可以玩游戏。同样,要与数据打交道,必须对数据有一个很好的理解。数据是关于什么的?它有哪些属性?是否有任何缺失值?所有这些问题的答案都可以在EDA之后给出。那么,让开始执行EDA。在这里,选择了一个有趣的数据集:电影数据。它有各种属性,如电影名称、明星、评分、投票、发行年份等。让尝试理解和可视化这些数据!

执行电影数据的EDA

在这里,从Kaggle选择了一个数据集。可以从任何合法网站获取数据集。数据集链接在。数据集包含9列描述数据模式。

电影:电影名称在这一列中给出。

年份:电影或电视节目的年份,供观众观看。

类型:数据集包含许多类型,对推荐系统最有价值。

评分:观众对电影或电视节目的看法。

一句话:电影或电视节目的简短描述,给观众的第一印象。

明星:艺术的演员阵容在此列中定义,这在观众之间引起了讨论。

投票:观众在此列中表达他们的观点,有助于识别艺术产生的影响。

运行时间:艺术的持续时间。

总收入:它给出了全球总收入。

1. 导入所需库:要执行EDA并创建数据可视化,需要一些库,如pandas、plotly、matplotlib、seaborn等。可以参考。

df = pd.read_csv('../input/movies-dataset-for-feature-extraction-prediction/movies.csv')

2. 理解基础。可以使用以下命令来理解数据。

df.shape() # 属性和行数 df.info() # 数据类型和非空内容 df.describe() # 统计数据,如平均值、最小值、最大值 df.isnull().sum() # 每列的空值数量

3. 决定哪些列有用,哪些没有用。要删除不必要的列/属性,可以使用drop命令。

清洗数据是EDA中非常重要的一步。它包括删除不必要的属性、处理空值/重复项、从属性值中删除不必要的字符/字符串、替换字符、标签编码等。可以参考以下代码片段来理解数据清洗。已经分别为每个属性清洗了数据。

df.drop_duplicates(subset="MOVIES", keep=False, inplace=True) for col in ['GENRE', 'ONE-LINE', 'STARS']: df[col] = df[col].str.replace("n", "").str.strip() df['Year'] = df['YEAR'].str.extract(r'([0-9]{4}–.*|[0-9]{4})') df['Year'] = df['Year'].str.strip().replace(")", "") def extract_year(year): if year[-3:] == '– )': return year.replace('– )',"–") else: return year.replace(')',"") df['Year'] = df['Year']fillna('Unknown') df['Year'] = df['Year'].apply(lambda y: extract_year(y)) df['GENRE'] = df['GENRE'].fillna('Unknown') df['RATING'].fillna(int(df['RATING'].mean()), inplace=True) df['VOTES'] = df['VOTES'].str.replace(',', '') df['VOTES'] = df['VOTES'].astype(float) df['VOTES'].fillna((df['VOTES'].mean()), inplace=True) df['RunTime'].fillna(int(df['RunTime'].mean()), inplace=True) df['Gross'] = df['Gross'].str.replace(',', '').str.replace('$', '').str.replace('M', '') df['Gross'] = df['Gross'].astype(float) df['Gross'].fillna((df['Gross'].mean()), inplace=True)

在此之后,使用以下函数将STARS列拆分为Stars和Directors:

def extract_director(direc): if 'Director' in direc or 'Directors' in direc: director = direc.strip().split("|")[0] # 第二部分是明星 return director.split(":")[1] # 返回导演姓名 else: return '' def extract_stars(stars): if 'Star' not in stars or 'Stars' not in stars: return '' else: return stars.split(":")[-1] # 这个列表中的最后一个值将是明星 df['Director'] = df['STARS'].apply(lambda d: extract_director(d)) df['Stars'] = df['STARS'].apply(lambda s: extract_stars(s))

数据可视化技术有很多,如条形图、饼图、甜甜圈图、折线图、直方图、箱形图、树形图、词云、联合条形图等。在这里,使用了条形图和折线图。必须了解哪些图表对哪种数据有用。例如,饼图或甜甜圈图适用于类别较少的情况,如花卉种类、年龄组、性别、电影类型等。但当类别较少时(不超过10个)才有用。折线图适用于比较一些数值,如电影评分、年度盈亏趋势等。直方图和联合条形图将一组数据点组织到用户指定的范围内。条形图以矩形条的形式呈现分类数据,其高度/长度与它们的值成比例。箱形图用于以最小值、最大值、平均值等形式显示数据的分布。

1. 首先,检查了每个列中存在的唯一值。这有助于决定使用哪种图表。

n = df.nunique(axis=0) print(n)

2. 首先,检查了最受欢迎的类型。以下是代码:

GENRE = pd.Series(df.GENRE.str.split(',').sum()).value_counts() GENRE = GENRE[GENRE>10] px.bar(GENRE, y=GENRE.values, x=GENRE.index, color=GENRE.values, title='最受欢迎的类型!', labels={'index': '类型', 'y': '计数'})

3. 按年份分布:

sns.countplot('Year', data=df) plt.show()

4. 然后,打印了评分最高的前10部电影、评分最低的前10部电影、运行时间最长的前10部电影和运行时间最短的前10部电影。以下是示例代码:

highest_rating = df[['MOVIES','RATING']].groupby('MOVIES').sum().sort_values('RATING', ascending=False) highest_rating.iloc[:10].plot(kind='barh',color=['orange', 'red']) plt.gcf().set_size_inches(8,5) plt.title('评分最高的前10部电影') plt.gca().invert_yaxis() plt.xlabel('评分') _ = plt.ylabel('电影')

5. 然后,尝试使用以下代码显示最受欢迎的导演和明星:

fig = px.bar(data_frame=df[~(df['Director'] == "")]['Director'].value_counts().reset_index().head(10), x='index', y='Director') fig.update_layout(title='导演分布', xaxis_title='导演', yaxis_title='计数') fig.show() stars_list = list() for stars in df[df['Stars'] != ""]['Stars'].to_list(): stars = stars.split(", ") for s in stars: stars_list.append(s) stars_df = pd.DataFrame.from_dict(Counter(stars_list), orient='index').rename(columns={0:'Count'}) stars_df = stars_df.sort_values(by='Count',ascending=False) fig = px.bar(data_frame=stars_df.head(10), x=stars_df.head(10).index, y='Count') fig.update_layout(title='出现次数最多的前10位明星', xaxis_title='明星', yaxis_title='计数') fig.show()

学到了什么?

1. EDA是什么以及为什么它很重要?

2. 如何开始理解数据?

3. 如何执行数据清洗。

4. 要执行数据可视化和EDA,需要使用哪些图表。

现在,使用这些数据,可以执行一些任务,如:

1. 预测电影的类型

2. 预测评分

3. 根据数据推荐电影

1. EDA在理解数据中起着至关重要的作用。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485