1,数据概况:
变量(4个):
·USERID:用户ID
·ORDERDATE:订单日期,格式为YYYY-MM-DD,例如2016-01-01。
·ORDERID:订单ID,每个订单的ID唯一,由纯数字组成。
·AMOUNTINFO:订单金额,浮点型数据
2实现
import time # 导入时间库
import numpy as np # 导入numpy库
import pandas as pd # 导入pandas库
import mysql.connector # 导入mysql连接库
dtypes = {‘ORDERDATE’: object, ‘ORDERID’: object, ‘AMOUNTINFO’: np.float32} # 设置每列数据类型
raw_data = pd.read_csv(‘sales.csv’, dtype=dtypes, index_col=‘USERID’) # 读取数据文件
#dtypes定义的字典用于使用pd.read_csv读取数据时对数据框数据类型的自定义,而非系统默认类型
raw_data.describe()
raw_data.head(4)
缺失值
na_cols = raw_data.isnull().any(axis=0) # 查看每一列是否具有缺失值
print (na_cols) # 查看具有缺失值的列
na_lines = raw_data.isnull().any(axis=1) # 查看每一行是否具有缺失值
print (‘Total number of NA lines is: {0}’.format(na_lines.sum())) # 查看具有缺失值的行总记录数
print (raw_data[na_lines]) # 只查看具有缺失值的行信息
#异常值处理
sales_data = raw_data.dropna() # 丢弃带有缺失值的行记录
sales_data = sales_data[sales_data[‘AMOUNTINFO’] > 1] # 丢弃订单金额<=1的记录
日期格式转换
sales_data[‘ORDERDATE’] = pd.to_datetime(sales_data[‘ORDERDATE’], format=’%Y-%m-%d’) # 将字符串转换为日期格式
print (sales_data.dtypes) # 打印输出数据框所有列的数据类型
数据转换
recency_value = sales_data[‘ORDERDATE’].groupby(sales_data.index).max() # 计算原始最近一次订单时间
frequency_value = sales_data[‘ORDERDATE’].groupby(sales_data.index).count() # 计算原始订单频率
monetary_value = sales_data[‘AMOUNTINFO’].groupby(sales_data.index).sum() # 计算原始订单总金额