数据分析-以买东西数据为例
作者:互联网
数据分析-以买东西数据为例
首先导入库:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
然后到数数据:
df=pd.read_csv('./data/CDNOW_master.txt',header=None,sep='\s+',names=['use_id','order_dt','order_product','order_amount'])
df
其中header=None表示没有列名,sep=’\s+‘表示按多个空格分隔列,names=[‘use_id’,‘order_dt’,‘order_product’,‘order_amount’]表示将列名重新命名为’use_id’,‘order_dt’,‘order_product’,‘order_amount’。
查看文件信息:
df.info()
将‘order_dt’转换为日期格式:
df['order_dt']=pd.to_datetime(df['order_dt'],format='%Y%m%d')
df
分析列为数字的列:
df.describe()
加入新的列,列中数据为当年月份:
df['month']=df['order_dt'].astype('datetime64[M]')
df
所有用户每月消费的总数:
df.groupby(by='month')['order_amount'].sum()
画相关折线图:
df.groupby(by='month')['order_amount'].sum().plot()
所有用户每月的消费次数:
df.groupby(by='month')['order_product'].sum()
画出相关的折线图:
df.groupby(by='month')['order_product'].sum().plot()
每月有多少不同用户买了东西:
df.groupby(by="month")['use_id'].nunique()
.nunique()表示unique()后计算数量。
求每名用户消费的钱数:
df.groupby(by='use_id')['order_amount'].sum()
每名用户买了多少次东西:
df.groupby(by='use_id').count()
每名用户花的总钱数与总商品数的散点图:
money_amount=df.groupby(by='use_id')['order_amount'].sum()
num_amount=df.groupby(by='use_id')['order_product'].sum()
plt.scatter(money_amount,num_amount)
每名用户消费的总钱数(小于1000)
df.groupby(by='use_id').sum().query("order_amount<1000")['order_amount']
df.groupby(by='use_id').sum().query("order_amount<1000")['order_amount'].hist()
每名用户所买商品的总数量(小于100):
df.groupby(by='use_id').sum().query("order_product<100")['order_product']
df.groupby(by='use_id').sum().query("order_product<100")['order_product'].hist()
用户第一次消费的月份:
df.groupby(by='use_id')['month'].min()
每月的新用户:
df.groupby(by='use_id')['month'].min().value_counts()
用户最后一次消费的月份:
df.groupby(by='use_id')['month'].max()
每月中最后一次消费的用户数:
df.groupby(by='use_id')['month'].max().value_counts()
最后一次消费与第一次消费在相同月份的有:
df.groupby(by='use_id')['order_dt'].agg(['min','max'])
new_old_use=df.groupby(by='use_id')['order_dt'].agg(['min','max'])
(new_old_use['min']==new_old_use['max']).value_counts()
获取透视图:
df.pivot_table(index='use_id',aggfunc={'order_product':'sum','order_amount':'sum','order_dt':'max'})
new_df=df.pivot_table(index='use_id',aggfunc={'order_product':'sum','order_amount':'sum','order_dt':'max'})
假设现在是文件中消费日期中最后的一天,计算出所有消费日期与最后一天的消费日期的差值为:
max_dt=df['order_dt'].max()
-(df.groupby(by='use_id')['order_dt'].max()-max_dt)/np.timedelta64(1,'D')
new_df['R']=-(df.groupby(by='use_id')['order_dt'].max()-max_dt)/np.timedelta64(1,'D')
new_df
组成MFR表:
new_df.drop(labels='order_dt',axis=1,inplace=True)
new_df.columns=['M','F','R']
new_df
计算每名用户每月的订单数量:
second_df=df.pivot_table(index='use_id',values='order_dt',aggfunc='count',columns='month')
以用户名(‘use_id’)为行名,就是以use_id分组对order_dt求和,其中的columns对order_dt再进行细分,划分为每月。
对其中的NAN赋为’0‘。
second_df=second_df.fillna(0)
second_df
判断用户当月是否消费了:
user_month_df=second_df.applymap(lambda x:1 if x>=1 else 0)
user_month_df
标签:数据分析,use,为例,df,以买,groupby,id,dt,order 来源: https://blog.csdn.net/qq_28368825/article/details/123308345