200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 数据清洗---占据了数据分析师80%的时间

数据清洗---占据了数据分析师80%的时间

时间:2023-01-09 16:07:06

相关推荐

数据清洗---占据了数据分析师80%的时间

以点一份披萨为例,讲清数据分析全流程

01播种

农场的西红柿提供了披萨的配料,在农场播种西红柿种子。这就相当于数据生成过程,比如用户操作,触发传感器,前端埋点等。

02收获

采摘成熟的西红柿。这就相当于数据收集,将用户的交互行为记录为实际数据。友盟等就提供了第三方的埋点支持。

03运输

西红柿被运往目的地。这就相当于数据被存储在数据库或数据湖中。

04选择厨具和设备

每种食材都有适合自己的工具,要切土豆丝就用刀,要搅拌就用勺子,设备上,要加热就用烤箱,要炒菜就用微波炉。“工具”这就好比数据分析中的数据预处理技术。“设备”就好比线性回归,随机森林等算法。需要注意的是,并不是设备越复杂,做出的菜越好吃。

05选择菜谱

你做菜所需要的所有步骤。这就相当于模型,模型与算法不同。模型包括所有算法需要的预处理和之后的处理过程。

06准备材料

削皮,洗蔬菜,因为没人想吃没有洗过的蔬菜。这就好比数据预处理过程。比如,处理缺失值,重复值,更改数据类型,进行哑变量编码,选择数据子集,确保数据合法(比如出现年龄超过150岁的老妖婆就得删除)。

07特别的处理

你可以将胡萝卜削成玫瑰花瓣的样子,也可以将猪肉熏干获得独特的口味。这就好比特征工程。特征工程做好了,可以显著提高模型的性能。

08烹饪

这是最重要的步骤,你盐放多了,显得咸,火大了就糊了。这就好比模型训练的环节,你将数据提供给模型,调整参数期待好的结果。

09尝一尝

品尝就好比模型评估过程。很多时候,你的模型并不能得出好的结果,不要气馁,换个模型继续尝试。好的结果都是靠试错试出来的(对于没有经验的新手而言尤其如此)。

10送餐

送餐同样重要,客户对你的第一映像来自于你的包装。对于数据分析而言,同样如此。这就意味着你要有好的可视化呈现,生动且富含数据洞察的数据结论,如有必要,你还得添加预测功能。

总结:

没有任何方法可以帮你解决原料问题。数据质量不好,再好的模型也解决不了问题。

送餐至关重要。数据分析师特别需要包装数据产品的能力,这也是你工作价值的体现。

有时候,最简单的模型同样可以做出很好的预测。

Tips:

数据质量的准则

我将数据清洗规则总结为以下 4 个关键点,统一起来叫“完全合一”。

完整性:单条数据是否存在空值,统计的字段是否完善。

全面性:观察某一列的全部数值,比如在 Excel 表中,我们选中一列,可以看到该列的平均值、最大值、最小值。我们可以通过常识来判断该列是否有问题,比如:数据定义、单位标识、数值本身。

合法性:数据的类型、内容、大小的合法性。比如数据中存在非 ASCII 字符,性别存在了未知,年龄超过了 150 岁等。

唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复的情况是常见的。

1. 完整性问题

1:缺失值

删除:删除数据缺失的记录;

均值:使用当前列的均值;

高频:使用当前列出现频率最高的数据。

比如我们想对 df[‘Age’] 中缺失的数值用平均年龄进行填充,可以这样写:

df['Age'].fillna(df['Age'].mean(), inplace=True)

如果我们用最高频的数据进行填充,可以先通过 value_counts 获取Age 字段最高频次 age_maxf,然后再对 Age 字段中缺失的数据用 age_maxf 进行填充

age_maxf = train_features['Age'].value_counts().index[0]train_features['Age'].fillna(age_maxf, inplace=True)

问题 2:空行

Pandas 的 read_csv() 并没有可选参数来忽略空行

# 删除全空的行df.dropna(how='all',inplace=True)

2. 全面性问题:列数据的单位不统一

这里我使用千克作为统一的度量单位,将磅(lbs)转化为千克(kgs):

# 获取 weight 数据列中单位为 lbs 的数据rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)print df[rows_with_lbs]# 将 lbs 转换为 kgs, 2.2lbs=1kgsfor i,lbs_row in df[rows_with_lbs].iterrows():# 截取从头开始到倒数第三个字符之前,即去掉 lbs。weight = int(float(lbs_row['weight'][:-3])/2.2)df.at[i,'weight'] = '{}kgs'.format(weight)

3. 合理性问题:非 ASCII 字符

我们可以采用删除或者替换的方式来解决非 ASCII 问题,这里我们使用删除方法:

# 删除非 ASCII 字符df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

4. 唯一性问题

1:一列有多个参数

在数据中不难发现,姓名列(Name)包含了两个参数 Firtname 和 Lastname;为了达到数据整洁目的,我们将 Name 列拆分成 Firstname 和 Lastname 两个字段;我们使用 Python 的 split 方法,str.split(expand=True),将列表拆成新的列,再将原来的 Name 列删除。

# 切分名字,删除源数据列df[['first_name','last_name']] = df['name'].str.split(expand=True)df.drop('name', axis=1, inplace=True)

2:重复数据

使用 Pandas 提供的 drop_duplicates() 来删除重复数据。

# 删除重复数据行df.drop_duplicates(['first_name','last_name'],inplace=True)

清理完后的数据就很规整了。

第三方的数据要清洗,自有产品的数据,也需要数据清洗。比如美团自身做数据挖掘的时候,也需要去除爬虫抓取,作弊数据等。可以说没有高质量的数据,就没有高质量的数据挖掘,而数据清洗是高质量数据的一道保障。

终有一天,你会进入这样一种境界:看一眼数据,差不多 7 秒钟的时间,就能知道这个数据是否存在问题。为了这一眼的功力,我们要做很多练习。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。