所有分析和建模工作开始前,需要先对数据做初步的了解,包括基本的分布情况和可视化,下面给出几个万金油代码,我日常经常使用,强烈推荐给大家
看下所有数值型数据的数值情况,
画多个指标的箱线图
import pandas as pd
import matplotlib.pyplot as plt
print(df.describe())
counts = df.apply(pd.Series.value_counts)
counts.boxplot()
plt.show()
第二步,
所有的列的取值计数情况
#查看所有的列的取值计数情况
#(如果取值唯一,则不显示取值个数,如果不唯一,查看排名取值数排名前5的情况)
def describe_all(df):
fenge="-"*100
for i in df.columns:
print(fenge)#分隔符
print("列名称为"+str(i))
# 检查每列的取值是否唯一,duplicated():如果某个值是重复值,则对应的布尔值为True,否则为False
is_unique = ~df[i].duplicated()
if is_unique.all():
print("*取值具有唯一性")
else:
print('取值不唯一')
# 存在重复项的时候,列对应的出计数(前5个)
print(df[i].value_counts().head(5))
print(fenge)#分隔符
单个列的查看(判断是否唯一,只看前5个)
def unique_and_count(df,col,num):
fenge = "-"*100
print(fenge)#分隔符
print(col)
# 检查每列的取值是否唯一,duplicated():如果某个值是重复值,则对应的布尔值为True,否则为False
is_unique = ~df[col].duplicated()
if is_unique.all():
print("取值具有唯一性")
else:
print('取值不唯一')
# 打印(前num个)
print(df[col].value_counts().head(num))
print(fenge)#分隔符
unique_and_count(df,'addToCart',5)
print("对提取出的列,计数统计,非空值总数统计:")
print(df['asin'].value_counts())
绘制单个列的取值条形图
import pandas as pd
import matplotlib.pyplot as plt
print(df['quantity'].value_counts())
counts = df['quantity'].value_counts()
counts.plot(kind='bar')
plt.show()
下面是类比excel的数据透视功能
#汇总
dd = df.groupby('brand').agg(
item_number_count=('item_number', 'size'),
price_avg=('price_avg', 'mean'),
price_max=('price_avg', 'max'),
price_min=('price_avg', 'min'),
price_mid=('price_avg', 'median'),
revenue_avg=('revenue', 'mean'),
revenue_min=('revenue', 'min'),
revenue_max=('revenue', 'max'),
revenue_var=('revenue', 'var')
).reset_index()
#排序
dd.sort_values(
by='small_rank',
axis=0,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last') #按照日期排序,便于确定取数是否正确
绘图的时候,一定要改成中文显示,不然老是乱码
import matplotlib.pyplot as plt
import seaborn as sns
# 设置字体为 Microsoft YaHei
plt.rcParams['font.family'] = 'Microsoft YaHei'
# 设置调色板
sns.set_palette("colorblind")
绘制频率分布图
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
# 设置字体为 Microsoft YaHei
plt.rcParams['font.family'] = 'Microsoft YaHei'
# 对断货天数和平均日销进行分箱
df = df[df['业务分类'].isin(['A产品','B产品'])]
bins = np.arange(0, 200, 40)
df['stockout_days_bins'] = pd.cut(df['断货天数'], bins=bins)
bins = np.arange(0, 1, 0.1)
df['avg_daily_sales_bins'] = pd.cut(df['asin日均销量(2023H2)'], bins=bins)
# 将数据转换为矩阵形式
pivot_table = pd.pivot_table(df, values='asin', index='avg_daily_sales_bins', columns='stockout_days_bins', aggfunc='count')
# 绘制热力图
sns.heatmap(pivot_table, cmap='YlGnBu')
plt.title('asins 数量分布')
plt.xlabel("断货天数")
plt.ylabel("asin日均销量")
plt.show()