超市电商数据分析
本案例将对某大型超市的零售数据进行数据分析,通过了解运营状况,做出合理的决策。
先学一个之后能用到的东西:pandas.pivot_table可以创建一个透视表
pd.pivot_table(data, values=None, index=None, columns=None,aggfunc=‘mean’, fill_value=None, margins=False, dropna=True,margins_name=‘All’, observed=False) ->
‘DataFrame’ Docstring: Create a spreadsheet-style pivot table as a DataFrame.
读取、清洗数据:
- 使用pandas的read_csv读取数据后,查看各列数据的空值情况,
data = pd.read_csv('market.csv',encoding='ISO-8859-1')
data.describe()
发现Postal Code字段(邮编字段)有空值,而且这一列不重要,所以首先删除掉Postal Code列;
data.drop('Postal Code',axis=1,inplace=True)
data.describe()
- 使用DataFrame对象的describe()方法,没有发现异常数据,所以,不必处理;
- 将Order Date订单日期字段的数据修改为datetime类型;
先data['Order Date']
查看一下数据
可以发现至少用了两种不同格式(日/月/年和日-月-年)表示日期
进行类型转换
temp = pd.to_datetime(data['Order Date'],
format='%d/%m/%Y',errors='coerce').fillna(pd.to_datetime(data['Order Date'],
format='%d-%m-%Y',errors='coerce'))
data['Order Date'] = temp.dt.date
pd.to_datetime可以将字符串转换为Timestamp格式
关于errors参数:
errors : {‘ignore’, ‘raise’, ‘coerce’}, default ‘raise’
- If ‘raise’, then invalid parsing will raise an exception.
- If ‘coerce’, then invalid parsing will be set as NaT.
- If ‘ignore’, then invalid parsing will return the input.
所以这里选择errors='coerce'
遇到无法被format='%d/%m/%Y'
解析的格式时先将填为缺失值NAT(NOT A TIME),然后直接进行缺失值处理再进行一次format='%d-%m-%Y'
的格式解析
2024/6/20修 format=%d/%m/%Y->format=%m/%d/%Y
Pandas.Series 对象和 DataFrame 的列数据提供了 cat、dt、str
三种属性接口(accessors),分别对应分类数据、日期时间数据和字符串数据
dt.date获取日期,用temp将时间戳格式数据存一下后面还能用上
进行类型转换完成后可以isnull().sum()查看一下缺失值,可以发现没有缺失值了,则完成类型转换
结果↓
- 为了后续分析方便,从订单日期中分别提取年、月、季度数据,并添加三个列用来存取年、月、季度信息,分别为:’Order-year’,’Order-month’,’quarter’。
和3是一个意思
data['Order-year'] = temp.dt.year
data['Order-month'] = temp.dt.month
data['Order-quarter'] = temp.dt.quarter
思考题:还有哪些情况可以进行数据清洗?
答:不知道