数据清洗案例整理
Posted 土味儿大谢
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据清洗案例整理相关的知识,希望对你有一定的参考价值。
文章目录
- 一、快餐数据
- 1.1 探索数据
- 1.2 描述性统计
- 1.2.1 被下单数最多的前五的商品(item_name)有哪些?
- 1.2.2 在item_name这列中,一共有多少商品被下单?
- 1.2.3 商品下单总数量是多少?
- 1.2.4 目前item_price数据类型为?如何转换为浮点数?
- 1.2.5 在该数据集对应的时期内,收入(revenue)是多少?
- 1.2.6 在该数据集对应的时期内,一共有多少订单?
- 1.2.7 每一单(order)对应的平均总价是多少?
- 1.2.8 统计哪些item_name的choice_description缺失值最多?最多的5类item_name求出来?
- 1.2.9 上面5类item_name中,其choice_description的缺失值率是多少?
- 二、欧洲杯练习
- 2.1 探索数据
- 2.2 缺失值处理
- 2.3 描述性统计与数据预处理
- 2.3.1 有多少球队参与了2012欧洲杯?
- 2.3.2 将数据集中的列Team, Yellow Cards和Red Cards单独存为一个名叫discipline的数据框
- 2.3.3 对数据框discipline按照先Red Cards升序再Yellow Cards进行降序排序
- 2.3.4 计算每个球队拿到的黄牌数的平均值
- 2.3.5 找到进球数Goals超过6的球队数据
- 2.3.6 对比英格兰(England)、意大利(Italy)和俄罗斯(Russia)的射正率(Shooting Accuracy)
- 2.3.7 euro中有哪些字段属于object类?
- 2.3.8 提取带百分号字符的字段到一个新的DataFrame中
- 2.3.9 在新DataFrame中,将带有百分号的字符转化为浮点型数据
- 2.3.10 在上表所有列标签中后面备注——(%)
- 三、电商数据清洗
- 3.1 读取文件
- 3.2 查看数据的前五行和后五行
- 3.3 了解数据各字段的信息
- 3.4 查看数值型字段的描述性统计信息
- 3.5 数据去重
- 3.6 查看卖家种类信息
- 3.7 查看位置种类信息
- 3.8 添加一列成交额=价格×成交量(位置放在 成交量之后)
- 3.9 选出价格最贵的十个宝贝的信息
- 3.10 挑选出成交额最多的十个宝贝的信息
- 3.11 查看位置是江苏、成交额是前五名的宝贝
- 3.12 挑选出卖家含有‘旗舰店’的行
- 3.13 求每个卖家的总成交额并按降序排序
- 3.14 画出随着卖家变化,总成交额的变化的折线图
- 3.15 以柱状图的形式画出总成交额并以降序排序
- 3.16 看每个位置的成交额总额并以降序排序
- 3.17 以饼图的形式画出各位置的成交额占比
- 四、Stockholm气温的数据分析
- 五、药品销售数据
- 六、餐厅订单详情表分析
一、快餐数据
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=<以上是关于数据清洗案例整理的主要内容,如果未能解决你的问题,请参考以下文章