数据预处理与图表制作

 一、数据的导入 

(一)库导入:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline 
#jupyter notebook一定运行这一行代码,在cell中显示图形

(二)文件读取:

文件的读取,此时是在jupyter lab 同一个目录里面,直接相对索引即可,读取电脑文件的话需要更改相关位置。

最好放在纯英文路径下,要不然会出错

df=pd.read_csv('order_train0.csv',index_col=False)

(三)显示数据结构:

#快速了解数据的结构
df.info()

 

二、数据预处理

(一)标题的处理: 把标题里面的空格去掉(此题中没有)

 (二)重复值处理:

(三)异常值数据处理 :

(四)缺失值处理:

(五)索引重排:

(六)对一些数据进行删除,删除出现次数小于10的数据

counts = df['item_code'].value_counts() # 计算参数个数
# print(counts)
df0= df[df['item_code'].isin(counts[counts > 10].index)] # 筛选出参数个数大于10的数据
df0.index=range(df0.shape[0]) #行索引重排
df0.info() #显示数据的性质
df0 #显示数据表

三、数据的保存

(一)保存到新的表

df0.to_csv(r"C:\Users\于子艺\OneDrive\桌面\数据清洗\file0.csv", index=False)   

(二)根据性质划分成新的表格

grouped = df0.groupby(['second_cate_code', 'sales_chan_name'])
# 遍历分组后的结果,并将每个分组保存为一个CSV文件
# 将分组后的数据保存到指定目录
for name, group in grouped:
    # 构造文件名
    filename = r'C:\Users\于子艺\OneDrive\桌面\泰迪杯\产品细类加销售方式划分\{}_{}.csv'.format(name[0], name[1])
    # 将分组后的数据保存为 CSV 文件
    group.to_csv(filename, index=False)

四、绘制图表

(一)简单的图表绘制和相关性检验

# 提取要绘制的两列数据
x = df0['sales_chan_name']
y = df0['ord_qty']
# 绘制散点图
plt.scatter(x, y)
plt.title('销售方式对需求量的影响')
plt.xlabel('销售方式')
plt.ylabel('需求量')
plt.show()
# 绘制折线图
plt.plot(x, y)
plt.title('销售方式对需求量的影响')
plt.xlabel('销售方式')
plt.ylabel('需求量')
plt.show()

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# import warnings
# warnings.filterwarnings("ignore") #过滤掉警告的意思
data = pd.read_csv('file0.csv',index_col=False,encoding='gbk')
# data.drop(['order_date','sales_chan_name'], axis=1, inplace=True) #删除无关的列,object类型自动删除了
#计算各变量之间的相关系数
corr = data.corr()
corr
plt.subplots(figsize=(20, 16))#调整画布大小
sns.heatmap(corr, vmax=.8, square=True, annot=True)#画热力图   annot=True 表示显示系数
# 设置刻度字体大小
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)

 ​​​​​​

(二)产品的不同价格对需求量的影响:

1、不同的产品种类在不同的价格区间对需求量的影响

import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('file0.csv',index_col=False,encoding='gbk')
# 根据产品类别分组并计算各价格区间的需求量:
# 其中,pd.cut函数将价格列分为价格区间,并使用groupby函数按产品类别和价格区间分组,最后使用unstack函数将结果转换为矩阵形式。
grouped = data.groupby(['first_cate_code', pd.cut(data['item_price'], bins=[0,300,600,1000,2000,4000,12000])])['ord_qty'].mean().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
plt.xlabel('产品种类')
plt.ylabel('总需求量')
plt.title('各个产品大类中其每个价格区间的平均需求量的直方图')
plt.show()

 2、研究总体的价格与需求量的关系,并训练模型绘制预测回归线:

import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 读取CSV文件
data = pd.read_csv('file0.csv')
# 提取价格和需求量数据
X = data['item_price'].values.reshape(-1, 1)
y = data['ord_qty'].values
# 创建线性回归模型对象
model = LinearRegression()
# 训练模型
model.fit(X, y)
# 预测需求量
X_new = [[10],[50],[100],[200],[300],[500],[1000],[2000],[3000],[4000],[5000],[6000],[7000],[8000],[9000],[10000],[11000],[12000]] # 新的价格数据
y_pred = model.predict(X_new)
# 输出预测结果
print(y_pred)
# 绘制原始数据散点图和拟合直线图
plt.scatter(X, y, alpha=0.5)
plt.plot(X_new, y_pred, color='red')
plt.title('价格与需求量的散点分布图以及数据预测线')
plt.xlabel('价格')
plt.ylabel('需求量')
plt.show()

 ​​​​

 3、 各大类产品平均价格与平均需求量的对应关系

import pandas as pd
import matplotlib.pyplot as plt
# 读取 CSV 文件
data = pd.read_csv('file0.csv',index_col=False)
data['category'] = data['first_cate_code']
# 统计分类区分下的售价和销售量的均值
grouped_data = data.groupby(['category'])[['item_price', 'ord_qty']].mean().reset_index()
# 根据产品类别和销售地区的不同组合分类用不同的形状绘图
markers = ['o', 's', '^', 'p', '*', 'h', 'x', 'D', 'v', '<', '>']
plt.figure(figsize=(15, 10))
for i, category in enumerate(grouped_data['category'].unique()):
    subset = grouped_data[grouped_data['category'] == category]
    plt.scatter(subset['item_price'], subset['ord_qty'], marker=markers[i % len(markers)], label=category, alpha=0.5)
plt.xlabel('平均价格')
plt.ylabel('平均需求量')
plt.title('各大类产品平均价格与平均需求量散点图')
plt.legend()
plt.show()

 4、不同销售区域不同大类产品的价格和需求量的关系:

import pandas as pd
import matplotlib.pyplot as plt
# 读取数据集
data = pd.read_csv('file0.csv')
# 将“产品类别”和“销售地区”两列元素之间的不同组合作为分类区分
data['first_cate_code'] = data['first_cate_code'].astype(str)
data['sales_region_code'] = data['sales_region_code'].astype(str)
data['category'] = data['first_cate_code'] + ' - ' + data['sales_region_code']
# 绘制散点图
fig, ax = plt.subplots(figsize=(15, 10))
markers = ['o', 's', '^', 'p', '*', 'v', '<', '>', 'd']
colors = ['r', 'g', 'b', 'c', 'm', 'y', 'k']
i = 0
j = 0
for ptype, pgroup in data.groupby('first_cate_code'):
    # 同一大类的散点图形状一样,但是同一大类中不同小类的颜色不同
    for name, group in pgroup.groupby('category'):
        color = colors[j % len(colors)]
        marker = markers[i % len(markers)]
        ax.scatter(pgroup['item_price'], pgroup['ord_qty'], marker=marker, color=color, label=name)
        i += 1
    j +=1
# 设置图表标题、坐标轴标签和图例
ax.set_title('不同销售区域不同大类产品的价格和需求量的关系散点图', fontsize=16)
ax.set_xlabel('价格', fontsize=12)
ax.set_ylabel('需求量', fontsize=12)
ax.legend()
# 调整图表边缘和间距
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)
# 显示图表
plt.show()

(三) 产品所在区域对需求量的影响,以及不同区域的产品需求量有何特性:

1、各个产品大类其在不同销售地区的需求量:

import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('file0.csv',index_col=False,encoding='gbk')
# 根据产品类别分组并计算各价格区间的需求量:
grouped = data.groupby(['first_cate_code', 'sales_region_code'])['ord_qty'].sum().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
plt.xlabel('种类')
plt.ylabel('总需求量')
plt.title('各个产品大类其在每个销售地区的总需求量直方图')
plt.show()

import pandas as pd
import matplotlib.pyplot as plt
# 读取csv文件
df = pd.read_csv('file0.csv', encoding='utf-8')
# 根据销售地区和产品种类分组,并计算平均值
grouped = df.groupby(['sales_region_code', 'first_cate_code']).sum().reset_index()
# 绘制折线图
regions = grouped['sales_region_code'].unique()
colors = ['red', 'blue', 'green', 'purple', 'orange']
fig = plt.figure(figsize=(15, 10))
for i, region in enumerate(regions):
    data = grouped[grouped['sales_region_code'] == region]
    plt.plot(data['first_cate_code'], data['ord_qty'], color=colors[i], label=region)
# 添加图例、标题、坐标轴标签等first_cate_code
plt.legend()
plt.title('需求量折线图')
plt.xlabel('产品种类')
plt.ylabel('需求量')
# 显示图形
plt.show()

 

 2、各个销售区域中每个产品大类的总需求量关系:

import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('file0.csv',index_col=False,encoding='gbk')
# 根据产品类别分组并计算各价格区间的需求量:
grouped = data.groupby(['sales_region_code','first_cate_code'])['ord_qty'].sum().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
plt.xlabel('销售区域')
plt.ylabel('总需求量')
plt.title('各个销售区域中每个产品大类的需求量直方图')
plt.show()

 ​​​​​​

 3、各个地区的需求量占总需求量的关系:

import pandas as pd
import matplotlib.pyplot as plt
# 按销售区域分组,计算需求量总和
df = pd.read_csv('file0.csv',index_col=False,encoding='gbk')
grouped = df.groupby('sales_region_code').sum()
# 获取需求量总和列的数据
demand = grouped['ord_qty']
# 绘制饼图
fig, ax = plt.subplots()
fig = plt.figure(figsize=(15, 10))
ax.pie(demand, labels=demand.index, autopct='%1.1f%%')
# 设置图表标题
ax.set_title("各个地区的需求量占总需求量的比例")
# 显示图表
plt.show()

 

(四)销售方式与需求量的关系:

import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('file0.csv',index_col=False,encoding='gbk')
# 根据产品类别分组并计算各价格区间的需求量:
grouped = data.groupby(['first_cate_code', 'sales_chan_name'])['ord_qty'].sum().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
plt.xlabel('销售方式')
plt.ylabel('总需求量')
plt.title('各个产品大类在不同销售方式下的需求量直方图')
plt.show()


import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('file0.csv')
# 按销售方式分类汇总销售量数据
online_data = data[data['sales_chan_name'] == 'online'].groupby(['sales_region_code', 'first_cate_code'])['ord_qty'].sum()
offline_data = data[data['sales_chan_name'] == 'offline'].groupby(['sales_region_code', 'first_cate_code'])['ord_qty'].sum()
# 绘制直方图
fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(range(len(online_data)), online_data.values, alpha=0.7, color='blue', label='线上', width=0.4)
ax.bar([x + 0.4 for x in range(len(offline_data))], offline_data.values, alpha=0.7, color='red', label='线下', width=0.4)
ax.set_xticks([x + 0.2 for x in range(len(online_data))])
ax.set_xticklabels(online_data.index)
ax.set_xlabel('销售地区-商品种类', fontsize=12)
ax.set_ylabel('销售量', fontsize=12)
ax.yaxis.set_label_coords(-0.1, 0.5)  # 调整标签位置
ax.yaxis.get_label().set_rotation(0)  # 将标签竖着写
ax.set_xticklabels(online_data.index, rotation=90, ha='center')  # 将标签竖着写
ax.set_title('不同销售方式下不同产品大类不同销售地区的销售量情况', fontsize=14)
ax.legend()
plt.show()

 

import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('file0.csv')
# 按销售方式分类汇总销售量数据
online_data = data[data['sales_chan_name'] == 'online'].groupby(['sales_region_code', 'first_cate_code'])['ord_qty'].sum()
offline_data = data[data['sales_chan_name'] == 'offline'].groupby(['sales_region_code', 'first_cate_code'])['ord_qty'].sum()
# 绘制折线图
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(online_data.values, color='blue', label='线上')
ax.plot(offline_data.values, color='red', label='线下')
ax.set_xticks([x for x in range(len(online_data))])
ax.set_xticklabels(online_data.index, rotation=90)
ax.set_xlabel('销售地区-商品种类', fontsize=12)
ax.set_ylabel('销售量', fontsize=12)
ax.yaxis.set_label_coords(-0.1, 0.5)
ax.yaxis.get_label().set_rotation(0)
ax.set_title('不同销售方式下不同产品大类不同销售地区的销售量情况折线图', fontsize=14)
ax.legend()
plt.show()

 

import pandas as pd
import matplotlib.pyplot as plt
# 按销售区域分组,计算需求量总和
df = pd.read_csv('file0.csv',index_col=False,encoding='gbk')
grouped = df.groupby('sales_chan_name').sum()
# 获取需求量总和列的数据
demand = grouped['ord_qty']
# 绘制饼图
fig, ax = plt.subplotsa
ax.pie(demand, labels=demand.index, autopct='%1.1f%%')
# 设置图表标题
ax.set_title("不同销售方式的需求量占总需求量的比例")
# 显示图表
plt.show()

 

 (五)时间段与需求量的关系:

import pandas as pd
import matplotlib.pyplot as plt
# 读取 CSV 文件
data = pd.read_csv('file0.csv',index_col=False)
# 将时间列转换为日期类型
data['order_date'] = pd.to_datetime(data['order_date'])
# 新增列,表示时间所在月份的第几天
data['day'] = data['order_date'].dt.day
# 新增列,表示时间所在月份的月头、月中、月末
data['period'] = ''
data.loc[data['day'] <= 10, 'period'] = '月头'
data.loc[(data['day'] > 10) & (data['day'] <= 20), 'period'] = '月中'
data.loc[data['day'] > 20, 'period'] = '月末'
# 统计每个月份的数据
grouped = data.groupby(['first_cate_code', 'period'])['ord_qty'].sum().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
grouped.plot(figsize=(16,10))
# 绘制散点图
plt.xlabel('产品累呗')
plt.ylabel('需求量')
plt.title('各大类产品在不同时间段的需求量状况')
plt.show()

 

import pandas as pd
import matplotlib.pyplot as plt
# 读取 CSV 文件
data = pd.read_csv('file0.csv',index_col=False)
# 将时间列转换为日期类型
data['order_date'] = pd.to_datetime(data['order_date'])
# 新增列,表示时间所在第几年
data['year'] = data['order_date'].dt.year
# 统计每个月份的数据
grouped = data.groupby(['year','first_cate_code'])['ord_qty'].sum().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
grouped.plot(figsize=(16,10))
# 绘制散点图
plt.xlabel('时间段')
plt.ylabel('需求量')
plt.title('不同年份不同大类产品的需求量的状况')
plt.show()

 

(六)节假日与需求量的关系

import pandas as pd
import matplotlib.pyplot as plt
# 读取 CSV 文件
data = pd.read_csv('file0.csv')
# 将时间列转换为日期类型
data['order_date'] = pd.to_datetime(data['order_date'])
# 新增列,表示时间是否为节假日
holidays = ['2015-09-03', '2015-09-04', '2015-09-05', '2015-09-06', '2015-09-07', '2015-10-01', '2015-10-02', '2015-10-03', '2015-10-04', '2015-10-05', '2015-10-06', '2015-10-07', '2015-10-10', '2015-10-11', '2015-10-12', '2015-12-24', '2015-12-25', '2015-12-26', '2015-12-27', '2015-12-28', '2015-12-29', '2015-12-30', '2015-12-31', '2016-01-01', '2016-01-02', '2016-01-03', '2016-02-07', '2016-02-08', '2016-02-09', '2016-02-10', '2016-02-11', '2016-02-12', '2016-02-13', '2016-04-02', '2016-04-03', '2016-04-04', '2016-04-30', '2016-05-01', '2016-05-02', '2016-06-09', '2016-06-10', '2016-06-11', '2016-09-15', '2016-09-16', '2016-09-17', '2016-10-01', '2016-10-02', '2016-10-03', '2016-10-04', '2016-10-05', '2016-10-06', '2016-10-07', '2016-10-08', '2016-10-09', '2016-12-31', '2017-01-01', '2017-01-02', '2017-01-27', '2017-01-28', '2017-01-29', '2017-01-30', '2017-01-31', '2017-02-01', '2017-02-02', '2017-04-02', '2017-04-03', '2017-04-04', '2017-04-29', '2017-04-30', '2017-05-01', '2017-05-28', '2017-05-29', '2017-05-30', '2017-10-01', '2017-10-02', '2017-10-03', '2017-10-04', '2017-10-05', '2017-10-06', '2017-10-07', '2017-10-08', '2017-12-30', '2017-12-31', '2018-01-01', '2018-02-15', '2018-02-16', '2018-02-17', '2018-02-18', '2018-02-19', '2018-02-20', '2018-02-21', '2018-04-05', '2018-04-06', '2018-04-07', '2018-04-29', '2018-04-30', '2018-05-01', '2018-06-16', '2018-06-17', '2018-06-18', '2018-09-22', '2018-09-23', '2018-09-24', '2018-10-01', '2018-10-02', '2018-10-03', '2018-10-04', '2018-10-05', '2018-10-06', '2018-10-07', '2018-12-30', '2018-12-31', '2019-01-01']
data['holiday'] = data['order_date'].isin(holidays)
data = data[(data['order_date'] >= '2015-09-01') & (data['order_date'] <= '2018-12-20')]
# 统计非节假日和节假日的数据
grouped = data.groupby(['first_cate_code', 'holiday'])['ord_qty'].mean().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
grouped.plot(figsize=(16,10))
# 绘制散点图
plt.xlabel('不同产品大类')
plt.ylabel('需求量')
plt.title('节假日与需求量的关系')
plt.show()

 (七)促销(如 618、双十一等)对产品需求量的影响:

import pandas as pd
import matplotlib.pyplot as plt
# 读取 CSV 文件
data = pd.read_csv('file0.csv')
# 将时间列转换为日期类型
data['order_date'] = pd.to_datetime(data['order_date'])
# 新增列,表示时间是否为节假日
holidays = [ '2015-11-11', '2015-12-12',  '2015-10-01', '2015-10-02', '2015-10-03', '2015-10-04', '2015-10-05', '2015-10-06', '2015-10-07','2016-02-14', '2016-03-08', '2016-11-11', '2016-12-12', '2016-01-01','2016-01-02', '2016-01-03', '2016-10-01', '2016-10-02', '2016-10-03', '2016-10-04', '2016-10-05', '2016-10-06', '2016-10-07','2017-02-14', '2017-03-08', '2017-11-11', '2017-12-12', '2017-01-01','2017-01-02', '2017-01-03', '2017-10-01', '2017-10-02', '2017-10-03', '2017-10-04', '2017-10-05', '2017-10-06', '2017-10-07','2018-02-14', '2018-03-08', '2018-11-11', '2018-12-12', '2018-10-01', '2018-10-02', '2018-10-03', '2018-10-04', '2018-10-05', '2018-10-06', '2018-10-07']
data['holiday'] = data['order_date'].isin(holidays)
data = data[(data['order_date'] >= '2015-09-01') & (data['order_date'] <= '2018-12-20')]
# 统计非节假日和节假日的数据
grouped = data.groupby(['first_cate_code', 'holiday'])['ord_qty'].mean().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
grouped.plot(figsize=(16,10))
# 绘制散点图
plt.xlabel('不同产品大类')
plt.ylabel('需求量')
plt.title('促销活动与需求量的关系')
plt.show()

(八)季节与需求量的关系:

import pandas as pd
import matplotlib.pyplot as plt
# 读取 CSV 文件
data = pd.read_csv('file0.csv')
# 将时间列转换为日期类型
data['order_date'] = pd.to_datetime(data['order_date'])
# 新增列,表示时间所在季节
data['season'] = (data['order_date'].dt.month % 12 + 3) // 3
# 将季节因素转换为字符串
data['season'] = data['season'].map({1: '春', 2: '夏', 3: '秋', 4: '冬'})
# 统计每个季节的数据
grouped = data.groupby(['first_cate_code', 'season'])['ord_qty'].sum().unstack()
# 使用Matplotlib库中的bar函数绘制直方图:
grouped.plot(kind='bar', stacked=True,figsize=(16,10))# 其中,kind参数表示绘制的图形类型,stacked参数表示是否堆叠,可以根据自己的需要选择不同的参数。
grouped.plot.bar(figsize=(16,10))
plt.ylabel('需求量')
plt.title('季节与需求量的关系')
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值