Pandas数据分析与可视化实战

在数据科学和分析领域,Pandas库因其强大的数据处理能力而广受欢迎。它允许用户快速加载、处理、转换、分析和可视化数据。在使用Pandas时,需要记住两种主要的数据结构:Series和DataFrame。Series是一个一维索引数组,可以存储任何数据类型(如整数、浮点数等)。而DataFrame是Pandas的主要数据结构,它是一个二维数据类(具有行和列),每列可以有不同的数据类型。DataFrame也可以指定索引和附加列。

导入必要的包

在进行数据分析之前,需要导入一些必要的包。以下是将在数据分析中使用的包:

import numpy as np # 线性代数库 import pandas as pd # 数据处理库 import seaborn as sns # 统计图形库 import matplotlib.pyplot as plt # 绘图库 import pandasql as ps # SQL库 import wordcloud # 用于生成词云图 from wordcloud import WordCloud, STOPWORDS # 可选,用于过滤停用词

读取数据集

将对Kaggle上公开发布的Reddit帖子数据集进行分析。这个数据集包含了随机Reddit帖子的信息。以下是如何读取数据集的代码:

df = pd.read_csv('r_dataisbeautiful_posts.csv') df.sample(5) df.tail(5) print("数据集形状:", df.shape)

初步了解数据集

探索性数据分析(EDA)是快速查看数据集以帮助了解其结构、形式和大小的过程,同时寻找模式。以下是如何运行SQL语句以及一些常见的EDA命令:

df.info() df.describe()

现在知道正在处理的DataFrame有12列,数据类型包括布尔值、浮点数、整数和Python对象。还可以看到哪些列有缺失值,并基本了解数值数据。

运行SQL语句

Pandas库最吸引人的特性之一是其能够处理SQL和表格数据。以下是如何运行SQL语句的示例:

q1 = """SELECT removed_by, count(distinct id) as number_of_removed_posts FROM df WHERE removed_by is not null GROUP BY removed_by ORDER BY 2 DESC""" grouped_df = ps.sqldf(q1, locals()) grouped_df

根据SQL输出绘制条形图:

removed_by = grouped_df['removed_by'].tolist() number_of_removed_posts = grouped_df['number_of_removed_posts'].tolist() plt.figure(figsize=(12,8)) plt.ylabel("删除的Reddit数量") plt.bar(removed_by, number_of_removed_posts) plt.show()

可以看到,大多数被删除的帖子(68%)是由版主删除的。删除的内容不到1%。

最常使用的词汇

让看看标题中使用频率最高的词汇的词云图。首先,需要移除NULL值:

df["title"] = df["title"].fillna(value="") word_string = " ".join(df['title'].str.lower())

然后,绘制词云图:

plt.figure(figsize=(15,15)) wc = WordCloud(background_color="purple", stopwords=STOPWORDS, max_words=2000, max_font_size=300, width=1600, height=800) wc.generate(word_string) plt.imshow(wc.recolor(colormap='viridis', random_state=17), interpolation="bilinear") plt.axis('off')

评论分布

让看看评论分布图:

fig, ax = plt.subplots() _ = sns.distplot(df[df["num_comments"] < 25]["num_comments"], kde=False, rug=False, hist_kws={'alpha': 1}, ax=ax) _ = ax.set(xlabel="评论数", ylabel="Reddit数量") plt.ylabel("Reddit数量") plt.xlabel("评论") plt.show()

可以看到,大多数帖子的评论数少于5条。

数据集变量之间的相关性

现在让看看数据集变量之间的关系。以下是如何查看变量之间的相关性表,并使用热图进行可视化:

df.corr() h_labels = [x.replace('_', ' ').title() for x in list(df.select_dtypes(include=['number', 'bool']).columns.values)] fig, ax = plt.subplots(figsize=(10,6)) _ = sns.heatmap(df.corr(), annot=True, xticklabels=h_labels, yticklabels=h_labels, cmap=sns.cubehelix_palette(as_cmap=True), ax=ax) df.score.describe() fig, ax = plt.subplots() _ = sns.distplot(df[df["score"] < 22]["score"], kde=False, hist_kws={'alpha': 1}, ax=ax) _ = ax.set(xlabel="得分", ylabel="Reddit数量")
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485