数据清洗案例整理

Posted 土味儿大谢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据清洗案例整理相关的知识,希望对你有一定的参考价值。

文章目录

一、快餐数据

import numpy as np,pandas as pd

snack= pd.read_csv(r"snack.csv",encoding="utf_8",sep="\\t")
snack.head()

1.1 探索数据

1.1.1 数据表一共多少行数据?有多少列

snack.shape#返回df的形状,得知是几行几列数据

1.1.2 是否存在缺失值?哪个字段?

snack.isnull().sum()#快速统计每个字段缺失值的数量

1.1.3 数据去重操作

df=snack.drop_duplicates()#drop_duplicates函数用于删除重复记录
df.shape#再查看一下去重后是几行几列

df.reset_index(drop=True,inplace=True)#重新编号索引
df.tail()#取后5行查看

df.isnull().sum()#再次统计去重后的每个字段缺失值的数量

1.2 描述性统计

1.2.1 被下单数最多的前五的商品(item_name)有哪些?

df['item_name'].value_counts()#统计每件商品名出现的次数

#按照item_name字段进行分组,然后求quantity的和
df.groupby('item_name')['quantity'].sum().nlargest()#nlargest默认获取最大的5个值

1.2.2 在item_name这列中,一共有多少商品被下单?

len(df.item_name.unique()) #unique()返回去重之后的结果

df.item_name.nunique()   #nunique()返回非重复值统计的个数

len(df.groupby('item_name'))

len(df.item_name.value_counts())

len(df.drop_duplicates('item_name'))
#上面5种方法,任选一种都可以求出

1.2.3 商品下单总数量是多少?

df.quantity.sum()

1.2.4 目前item_price数据类型为?如何转换为浮点数?

df.item_price.dtype#O指代的是object类型

df.item_price=df.item_price.str[1:].astype(float)
df.head()

1.2.5 在该数据集对应的时期内,收入(revenue)是多少?

df.loc[:,'revenue']=df['quantity']*df['item_price']#运行后可能会出现警告,多运行几次就没事了。收入=数量*单价

1.2.6 在该数据集对应的时期内,一共有多少订单?

df.order_id.nunique()#nunique()返回非重复值统计的个数

1.2.7 每一单(order)对应的平均总价是多少?

df.groupby('order_id')['revenue'].sum().mean()#按照id进行分组后求收入总和后的均值

1.2.8 统计哪些item_name的choice_description缺失值最多?最多的5类item_name求出来?

df[df.choice_description.isnull()]#筛选出choice_description有缺失值的数据

#然后按照item_name进行分组并求quantity的数量,查看数量最大的5行数据
b=df[df.choice_description.isnull()].groupby('item_name')['quantity'].count().nlargest()
b

1.2.9 上面5类item_name中,其choice_description的缺失值率是多少?

c=[]#容器
for i in b.index:
    c.append(df.item_name.tolist().count(i))#tolist()将数组或者矩阵转换成列表
c

#缺失的/总共出现的次数=缺失率
b/c#发现都是百分百缺失..

二、欧洲杯练习

import pandas as pd,numpy as np
# Dataframe显示所有列
pd.set_option('display.max_columns', None)#数据太多的话不建议运行,不然运行会慢很多
euro = pd.read_csv("Euro2012_stats.csv")
euro.head()

2.1 探索数据

euro.shape#查看有几行几列数据

len(euro12.drop_duplicates())#没有重复行

#查看是否存在缺失值,哪个字段?
euro.isnull().sum()

2.2 缺失值处理

euro['Clearances off line']

mode=euro['Clearances off line'].mode()[0]#用众数填补;[0]取出众数
mode

euro['Clearances off line']=euro['Clearances off line'].fillna(mode)#没有直接对原数据修改,所以要重新赋值
euro['Clearances off line']

2.3 描述性统计与数据预处理

2.3.1 有多少球队参与了2012欧洲杯?

euro12.Team.nunique()

2.3.2 将数据集中的列Team, Yellow Cards和Red Cards单独存为一个名叫discipline的数据框

discipline=euro[['Team','Yellow Cards','Red Cards']]
discipline

2.3.3 对数据框discipline按照先Red Cards升序再Yellow Cards进行降序排序

discipline.sort_values(['Red Cards','Yellow Cards'],ascending=[True,False])

2.3.4 计算每个球队拿到的黄牌数的平均值

假设每支球队有重复出现,表存放的是这些球队在不同比赛的成绩,那么就要使用groupby以球队名字进行分组,再求每组黄牌的平均值

euro12.groupby('Team')['Yellow Cards'].mean()

2.3.5 找到进球数Goals超过6的球队数据

euro[euro.Goals>6]

2.3.6 对比英格兰(England)、意大利(Italy)和俄罗斯(Russia)的射正率(Shooting Accuracy)

euro1=euro[['Team','Shooting Accuracy']]
euro1

euro1[(euro1.Team=='Russia') | (euro1.Team=='England')|(euro1.Team=='Italy') ] 

2.3.7 euro中有哪些字段属于object类?

a=euro.describe(include='object')#include='object'想查看非数字类型的列的统计指标
a

euro[a.columns]

2.3.8 提取带百分号字符的字段到一个新的DataFrame中

all(euro['Shooting Accuracy'].str[-1]=='%')#判断最后一个字符是不是%

c=[]#容器
for i in a.columns:
    if all(euro[i].str[-1]=='%'):
        c.append(i)
c

euro2=euro[c]
euro2

2.3.9 在新DataFrame中,将带有百分号的字符转化为浮点型数据

方法一 df.applymap()

  • 使用df.applymap()基本操作对象是df中的每一个元素
  • 先从表中拿一个元素出来,看看怎样可以达到你想要的结果
  • 把尝试的过程写进自定义函数
  • 把自定义函数放进df.applymap()进行运用
def change(x):
    return float(x[:-1])/100
euro2.applymap(change)


方法二:用df.apply()

  • apply()基本操作对象是一个个Series
  • 可以拿出其中的一列进行尝试,看如果得到我们想要的结果
  • 再把尝试的过程写成自定义函数
  • 封装好自定义函数放到df.apply()里进行运用
def change1(x):
    return x.str[:-1].astype(float)/100

euro3=euro2.apply(change1)
euro3

2.3.10 在上表所有列标签中后面备注——(%)

euro3.columns+='(%)'
euro3

三、电商数据清洗

import numpy as np
import pandas as pd
pd.set_option('display.max_columns', None)    # 显示所有列
pd.set_option('display.max_rows', None)      # 显示所有行
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['Simhei']  #显示中文,解决图中无法显示中文的问题
plt.rcParams['axes.unicode_minus']=False    #设置显示中文后,负号显示受影响。解决坐标轴上乱码问题 

3.1 读取文件

df = pd.read_csv(r"taobao_data.csv")
df

3.2 查看数据的前五行和后五行

df.head()#前5行

df.tail()#后5行

3.3 了解数据各字段的信息

df.info()

3.4 查看数值型字段的描述性统计信息

df.describe()

3.5 数据去重

df=df.drop_duplicates()

3.6 查看卖家种类信息

df.卖家.unique()#unique去重显示

3.7 查看位置种类信息

df.位置.value_counts()

3.8 添加一列成交额=价格×成交量(位置放在 成交量之后)

df.insert(3,'成交额',df.价格*df.成交量)#3为位置,取的列名,数据
df.head()

3.9 选出价格最贵的十个宝贝的信息

df.sort_values('价格',ascending=False).head(10)

3.10 挑选出成交额最多的十个宝贝的信息

df.sort_values('成交额',ascending=False).head(10)

3.11 查看位置是江苏、成交额是前五名的宝贝

df[df.位置=='江苏'].sort_values('成交额',ascending=False).head()

3.12 挑选出卖家含有‘旗舰店’的行

df[df.卖家.map(lambda x:'旗舰店' in x)]

3.13 求每个卖家的总成交额并按降序排序

a=df.groupby('卖家')['成交额'].sum().sort_values(ascending=False)
a

3.14 画出随着卖家变化,总成交额的变化的折线图

plt.plot(range(len(a)),a);

3.15 以柱状图的形式画出总成交额并以降序排序

b=a.head()
b.plot(kind='bar',rot=45);

3.16 看每个位置的成交额总额并以降序排序

c=df.groupby('位置')['成交额'].sum().sort_values(ascending=False)
c

3.17 以饼图的形式画出各位置的成交额占比

上海的部分突出显示

plt.figure(figsize=(8,6))
plt.pie(c,labels=c.index,explode=(0,0,0.2,0,0,0,0,0),autopct='%.2f%%');

四、Stockholm气温的数据分析

#导入相关库
import pandas as pd
import numpy as np
import time
import datetime
import matplotlib.pyplot as plt

# 解决坐标轴刻度负号乱码
plt.rcParams['axes.unicode_minus'] = False

# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['Simhei']

4.1 outdoor表的分析

4.1.1 数据预处理

4.1.1.1 导入outdoor数据

data=pd.read_csv("temperature_outdoor_2014.csv",index_col=0)
data.head()

4.1.1.2 处理表头

data.columns=['datetime','temperature']#给列名
data

4.1.1.3 数据探索

data.info()

data.isnull().sum()#没有缺失值

4.1.1.4 日期字段的转换

data['datetime']=pd.to_datetime(data['datetime'],unit='s')#unit='s'到秒
data

4.1.2 查看气温变化的情况

data2=data.copy()
data2

data.set_index('datetime',inplace=<

以上是关于数据清洗案例整理的主要内容,如果未能解决你的问题,请参考以下文章

数据清洗之数据表处理 筛选 增删查改 整理 层次化索引

kettle - 清洗 mongodb 数据案例

kettle - 清洗 mongodb 数据案例

kettle - 清洗 mongodb 数据案例

大数据技术之日志清洗案例

hive 的日志处理统计网站的 PV UV案例 与 给合 python的数据清洗数据案例