目录
(1)设置价格的直方图,分析价格分布情况(运用 hist() 函数生成直方图)
(4)价格对销量的影响(subplots() scatter())
(6)不同省份的商品数量分布--value_counts() plot()
(7)不同城市的商品数量分布(新增点: 1.网格显示 2.显示value_counts()统计的前几位)
(8)不同省份的商品平均销量分布【函数pivot_table()】
execl表如下:
读取 execl
# 获取execl需要的列的数据
def execl_get():
datatmsp = pd.read_csv('/Users/mac/Documents/study23/ios_auto/test_case/nh_info.csv') # 读取爬取的数据
# 删除重复行:
datatmsp = datatmsp.drop_duplicates()
return datatmsp
# 将execl数据转化成list
def excel_list(arg):
datatmsp = execl_get()
data = datatmsp[['标题', '价格', '销量', '省', '市']]
data.head() # 默认查看前5行数据
arg_list = datatmsp[arg].values.tolist()
return arg_list
库的导入
import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
(1)设置价格的直方图,分析价格分布情况(运用 hist() 函数生成直方图)
# 价格分布情况的解析(直方图)
def price_distribution():
data1 = excel_list('价格')
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签(macO系统))
plt.figure(figsize=(10, 6))
bins = range(0, 200, 20) # 0~20,间隔 20
nums, bins, patches = plt.hist(data1, bins, edgecolor='k')
plt.xticks(bins, bins)
for num, bin in zip(nums, bins):
plt.annotate(num, xy=(bin, num), xytext=(bin + 1.5, num + 0.5))
plt.xlabel('价格') # x轴坐标名
plt.ylabel('商品数量')
plt.title(u'价格分布直方图')
plt.show()
生成的直方图如下:
(2)销量分布情况
def sale_distribution():
data = excel_list('销量')
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签(macO系统))
plt.figure(figsize=(10, 6))
bins = range(20000, 110000, 10000) # 0~30000,间隔 10000
nums, bins, patches = plt.hist(data, bins, edgecolor='k')
plt.xticks(bins, bins)
for num, bin in zip(nums, bins):
plt.annotate(num, xy=(bin, num), xytext=(bin + 1.5, num + 0.5))
plt.xlabel('销量') # x轴坐标名
plt.ylabel('商品数量')
plt.title(u'销量分布情况')
plt.show()
(3)不同价格区间的商品平均销量
先获取多列数据
# 获取execl多列并生成list和索引
def more_list(arg1, arg2, index1, index2): # arg获取的是execel列,index是生成列表后的索引
datatmsp = execl_get()
data = datatmsp[[arg1, arg2]]
arg_list = data.values.tolist()
df = pd.DataFrame(arg_list, columns=[index1, index2])
return df
代码如下:均值函数mean()
# 不同价格区间的平均销量
def price_sale():
data = more_list('价格', '销量', 'prices', 'sales')
# print(data)
# 用 qcut 函数将price列分为12组,且命名为group
data['group'] = pd.qcut(data.prices, 12)
data.group.value_counts().reset_index() # 生成数据框并重设索引
# 以group列进行分类求sales的均值mean():
sale_group = data[['sales', 'group']].groupby('group').mean().reset_index()
# 绘柱形图:
index = np.arange(sale_group.group.size)
plt.figure(figsize=(8, 4))
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签(macO系统))
# colors = ['aquamarine', 'blue', 'goldenrod', 'hotpink', 'indigo']
plt.bar(index, sale_group.sales, color='indigo')
plt.xticks(index, sale_group.group, fontsize=8, rotation=20)
plt.xlabel('价格区间')
plt.ylabel('销量')
plt.title(u'不同价格区间的商品的平均销量')
plt.savefig('price_sale.png', dpi=600) # 保存为图片
plt.show()
运行图像如下:
(4)价格对销量的影响(subplots() scatter())
def price_influence_sale():
data = more_list('价格', '销量', 'prices', 'sales')
fig, ax = plt.subplots(figsize=(8, 5))
ax.scatter(data['prices'], data['sales'])
ax.set_xlabel('价格')
ax.set_ylabel('销量')
ax.set_title('商品价格对销量的影响', fontsize=14)
plt.show()
(5)价格对销售额的影响分析 -regplot()
import seaborn as sns
# 价格对销售额的影响分析
def p_i_amount():
data = more_list('价格', '销量', 'prices', 'sales')
data['GMV'] = data['prices'] * data['sales']
sns.regplot(x="prices", y='GMV', data=data, color='purple')
plt.xlabel('价格')
plt.ylabel('销售额')
plt.savefig('p_i_amount.png', dpi=600) # 保存为图片
plt.show()
(6)不同省份的商品数量分布--value_counts() plot()
# 不同省份的商品数量分布
def province_goods():
data = excel_list('省')
df = pd.DataFrame(data, columns=['provinces']) # 设置列名
plt.figure(figsize=(8, 4))
# df['provinces'].value_counts().plot(kind='bar', color='goldenrod')
plt.xticks(rotation=0)
# 设置显示的 bar个数
view_num = df['provinces'].value_counts().sort_values(ascending=False).head(15)
# alpha透明度
view_num.plot(kind='bar', color='goldenrod', alpha=0.8)
plt.xlabel('省份')
plt.ylabel('商品数量')
plt.title('不同省份的商品数量分布')
plt.savefig('pro_goods.png', dpi=600) # 保存为图片
plt.show()
(7)不同城市的商品数量分布(新增点: 1.网格显示 2.显示value_counts()统计的前几位)
# 不同城市的商品数量分布
def city_goods():
data = excel_list('市')
df = pd.DataFrame(data, columns=['city']) # 设置列名
plt.figure(figsize=(8, 4)) # 画布
# 设置显示的 bar个数
view_num = df['city'].value_counts().sort_values(ascending=False).head(15)
# alpha透明度
view_num.plot(kind='bar', color='goldenrod', alpha=0.8)
plt.xticks(rotation=0)
plt.grid(True) # 打开网格
plt.xlabel('城市')
plt.ylabel('商品数量')
plt.title('不同城市的商品数量分布')
plt.savefig('city_goods.png', dpi=600) # 保存为图片
plt.show()
(8)不同省份的商品平均销量分布【函数pivot_table()】
# 不同省份的平均销量分布
def provinces_sales():
data = execl_get()
pro_sales = data.pivot_table(index='省', values='销量', aggfunc=np.mean) # 分类求均值
pro_sales.sort_values('销量', inplace=True, ascending=False) # 排序
pro_sales = pro_sales.reset_index() # 重设索引
# pro_sales = pro_sales.reset_index().head(20) # 重设索引。取最前面的 20条数据
index = np.arange(pro_sales['销量'].size)
plt.figure(figsize=(8, 4))
plt.bar(index, pro_sales['销量'], color='indigo')
plt.xticks(index, pro_sales['省'], fontsize=11, rotation=0)
plt.grid(True) # 打开网格
plt.xlabel('省份')
plt.ylabel('平均销量')
plt.title('不同省份的商品平均销量分布')
plt.savefig('pro_sales.png', dpi=600) # 保存为图片
plt.show()
# pro_sales.to_excel('pro_sales.xlsx', index=False) # 导出数据 并绘制热力型地图
(9)不同城市的商品平均销量分布
data = execl_get() pro_sales = data.pivot_table(index='市', values='销量', aggfunc=np.mean) # 分类求均值 pro_sales.sort_values('销量', inplace=True, ascending=False) # 排序 pro_sales = pro_sales.reset_index().head(20) # 重设索引。取排行最前面的20个
# 不同城市的平均销量分布
def citys_sales():
data = execl_get()
pro_sales = data.pivot_table(index='市', values='销量', aggfunc=np.mean) # 分类求均值
pro_sales.sort_values('销量', inplace=True, ascending=False) # 排序
pro_sales = pro_sales.reset_index().head(20) # 重设索引。取排行最前面的20个
index = np.arange(pro_sales['销量'].size)
plt.figure(figsize=(8, 4))
plt.bar(index, pro_sales['销量'], color='indigo')
plt.xticks(index, pro_sales['市'], fontsize=11, rotation=0)
plt.grid(True) # 打开网格
plt.xlabel('城市')
plt.ylabel('平均销量')
plt.title('不同城市的商品平均销量分布')
plt.savefig('city_sales.png', dpi=600) # 保存为图片
plt.show()