python学习5

2023-12-21 06:46:23

大家好,这里又是七七,今天介绍的是数据探索性分析的Python代码。

目录

代码1

代码2

?代码3

代码4

代码5

代码6

代码7

代码8

代码9

?代码10

总代码


代码1

    fig,ax=plt.subplots(figsize=(12,10))

这段代码使用Matplotlib库中的`plt.subplots`函数创建一个包含单个子图的画布和轴对象。

`fig, ax = plt.subplots(figsize=(12,10))`

`fig`是一个`Figure`对象,代表整个画布,而`ax`则是一个`Axes`对象,代表画布内部的坐标轴。

`figsize=(12,10)`参数设置了画布的宽度和高度,单位是英寸。在这个例子中,画布的宽度为12英寸,高度为10英寸。

该代码的目的是创建一个大小为12x10英寸的画布和一个带有坐标轴的子图。你可以在这个子图上进行绘图、添加数据等操作。

代码2

y1 = scaler.fit_transform(y1.values.reshape(-1, 1)).flatten()

这段代码使用`scaler.fit_transform()`方法对`y1`进行数据标准化处理。

`y1`是一个包含数据的变量,可以是一个NumPy数组或者Pandas Series对象。首先,`.values`将Pandas Series对象转换为NumPy数组。然后,`.reshape(-1, 1)`将数据的形状从一维转换为二维,其中-1表示自动计算维度。最后,`.flatten()`将二维数组展平为一维数组。

`scaler`代表一个数据标准化的对象,通常是`sklearn.preprocessing`模块中的`StandardScaler`、`MinMaxScaler`或其他标准化方法。该对象的`fit_transform()`方法将对数据进行拟合和标准化。

通过以上操作,`y1`经过标准化处理后,被赋值给`y1`本身,并且变为了一维数组。标准化处理可以将数据按照一定的比例缩放,常用于在机器学习等领域中的数据预处理步骤。

?代码3

    ax.plot(x,y1,label='销售单价',linestyle='-',linewidth=2)

这段代码利用Matplotlib库中的`plot()`函数在预先创建的子图对象`ax`上绘制一条折线图。

`plot()`函数的第一个参数`x`代表折线图的横坐标数据,可以是NumPy数组、Pandas Series对象等。第二个参数`y1`代表折线图的纵坐标数据,同样也可以是NumPy数组、Pandas Series对象等。

`label='销售单价'`和`linestyle='-'`分别设置折线图的标签和线型。通过这个标签,可以在图例中将不同的折线区分开;而线型则可以设定成实线、虚线、点线等,来区分不同的线条。

`linewidth=2`设置折线图的线宽。

综上,该代码在已经创建的子图对象上绘制了一条折线图,横坐标数据为`x`,纵坐标数据为`y1`,并给图线添加了标签`销售单价`、实线的线型,并将线宽设置为2。

代码4

    plt.xticks(x[::5],x[::5])
    plt.xticks(rotation=45)

xticks()函数的第一个参数x[::5]表示设置刻度的位置,其中x是横坐标的数据,[::5]表示每隔5个元素取一个。这样做的目的是为了避免横坐标刻度标签过于密集,只选择其中的一部分进行显示。

xticks()函数的第二个参数x[::5]表示设置刻度的标签,与位置参数一致。通过将x的一部分元素作为刻度标签,可以在图上展示可读性更好的横坐标刻度。

plt.xticks(rotation=45)意味着对当前的图形使用xticks()函数,并将横坐标刻度标签旋转45度。

代码5

df['销售日期']=df['销售日期'].dt.to_period('w')

根据您提供的代码片段,`df['销售日期'].dt` 表示DataFrame中名为"销售日期"的列,通过`.dt`属性可以访问日期时间的处理方法和属性。

`to_period('w')` 是将日期时间转换为周期的方法。使用参数 `'w'` 表示将日期时间转换为周周期,即以周为单位进行日期分组。

通过执行 `df['销售日期'].dt.to_period('w')`,"销售日期"列中的日期时间数据将被转换为周周期,并赋值回"销售日期"列。

请注意,这只是一个日期时间转换的示例,具体的操作和结果会根据实际的DataFrame数据和需求而变化。

代码6

aggregatopm={
     '销量(千克)':'sum',
     '利润率':lambda x:(x*df.loc[x.index,'销量(千克)']).sum()/df.loc[x.index,'销量(千克)'].sum(),
     '销售单价(元/千克)':lambda x:(x*df.loc[x.index,'销量(千克)']).sum()/df.loc[x.index,'销量(千克)'].sum(),
     '批发价格(元/千克)':lambda x:(x*df.loc[x.index,'销量(千克)']).sum()/df.loc[x.index,'销量(千克)'].sum()
}

在这个聚合操作的字典中,?'销量(千克)'?的聚合方式是求和(sum);而?'利润率'?和?'销售单价(元/千克)'?和?'批发价格(元/千克)'?的聚合方式是用lambda表达式来定义,表示计算每一组的加权平均值。请注意,lambda表达式中,x?代表的是当前组的数据。

代码7

result=grouped.agg(aggregatopm).reset_index()

首先通过?grouped.agg(aggregatopm)?对分组后的数据进行聚合操作,并将结果存储在?result?中。

然后使用?reset_index()?方法对?result?中的索引进行重置,即将分组后的索引以及聚合后的索引转换成普通的整数索引,并将其作为新 DataFrame 的一列。

在这行代码中,`.agg()` 是 pandas 中 DataFrame 或 Series 对象的一个方法,用于对数据进行聚合操作。

`.agg()` 方法可以接受一个字典作为参数,字典中的键表示要聚合的列名,值表示要应用的聚合函数或者多个聚合函数的列表。

聚合函数可以是字符串形式的函数名,比如 `'sum', 'mean', 'max', 'min'` 等,也可以是自定义的函数。

通过 `.agg()` 方法对数据进行聚合操作后,会生成一个新的 DataFrame,其中每个列对应于聚合操作的结果。

代码8

result['销售日期']=result['销售日期'].str.split('/').str[1]

这行代码假设 `result` 是一个 DataFrame,其中包含一个名为 `'销售日期'` 的列,该列的值是以斜杠(`/`)分隔的日期字符串。

`.str.split('/')` 是 Pandas 中的一个字符串方法,用于将字符串根据指定的分隔符进行分割,并返回一个包含分割后结果的列表。在这里,`result['销售日期'].str.split('/')` 将 `'销售日期'` 这一列的每个字符串根据斜杠分隔,并返回一个包含分割后结果的列表。

`.str[1]` 是对列表的取值操作,表示取出列表中的第二个元素。在这行代码中,`result['销售日期'].str.split('/').str[1]` 表示取出日期字符串中斜杠分隔后的第二个元素,也就是月份。

最后,通过 `result['销售日期'] = ...` 将 `result` DataFrame 中的 `'销售日期'` 这一列替换为提取出的月份的字符串。

这行代码的作用是将日期字符串按照斜杠进行分割,并提取出月份作为新的 `'销售日期'` 列的值。例如,将 `'2023/01/15'` 分割后得到 `[2023, 01, 15]`,然后取出第二个元素 `'01'` 作为最终的 `'销售日期'` 的值。

代码9

result.to_csv('result_weekly.csv,',index=False)

这行代码将 DataFrame `result` 中的数据保存为一个名为 `'result_weekly.csv'` 的 CSV 文件。`index=False` 参数表示不将 DataFrame 的索引写入到 CSV 文件中。

具体地,`.to_csv()` 是 Pandas 中 DataFrame 对象的一个方法,用于将数据保存为 CSV 文件。

代码示例:
result.to_csv('result_weekly.csv', index=False)

执行以上代码后,会将 `result` DataFrame 中的数据保存到 `'result_weekly.csv'` 文件中。CSV 文件是以逗号分隔的文本文件,可以在 Excel、文本编辑器等软件中打开和使用。

在保存时,`index=False` 参数表示不将 DataFrame 的索引写入 CSV 文件中,只保存列数据。

请注意,保存的 CSV 文件会在当前工作目录下创建,并命名为 `'result_weekly.csv'`。如果当前工作目录不可写入,或者文件名已经存在,可能会导致保存失败。

?代码10

    sns.heatmap(correlation_matrix,annot=True,cmap='coolwarm',fmt=".2f",linewidths=.5)

这行代码使用 seaborn 库的 `heatmap` 函数来创建一个热力图,它可以可视化相关性矩阵的数据。

参数解释如下:

- `correlation_matrix`:一个 DataFrame 或二维数组,代表相关性矩阵的数据。每个元素表示两个变量之间的相关性。
- `annot=True`:指定在每个方块内显示数值标签。这用于更清晰地表达相关性矩阵中的数值关系。
- `cmap='coolwarm'`:用于指定颜色映射的参数,它定义了热力图中方块颜色的色彩规则。`'coolwarm'` 是一种常用的颜色映射方案,表示低值为冷色调,高值为暖色调。
- `fmt=".2f"`:格式化字符串,用于设置数值标签的显示格式。在这里,`.2f` 表示显示两位小数。
- `linewidths=.5`:用于指定方块之间的间隔线宽度。

通过执行这行代码,你可以在屏幕上显示一个具有相关性矩阵的热力图。热力图中的每个方块的颜色表示对应位置上的数值关系,数值标签显示在方块内部,方块之间有间隔线。这样可以快速观察相关性矩阵中变量之间的关系,并找出高相关性和低相关性的模式。

总代码

import matplotlib.pyplot as plt
import pandas as pd
from tool import *
import seaborn as sns
from sklearn.preprocessing import StandardScaler

file_path=r's'
df=pd.read_excel(file_path)
#提取一个类别
df['销售日期']=pd.to_datetime(df['销售日期'])
print(df.head(5))
#品类列表
list_test=['花叶类','花菜类','水生根茎类','茄类','辣椒类','食用菌']
def plot_category(df,i):
    data=df[df['品类']==list_test[i]]
    print(data.head(5))
    fig,ax=plt.subplots(figsize=(12,10))

    x=data['销售日期']
    scaler = StandardScaler()
    y1=data['销售单价(元/千克)']
    y1 = scaler.fit_transform(y1.values.reshape(-1, 1)).flatten()
    y2 = data['批发价格(元/千克)']
    y2 = scaler.fit_transform(y2.values.reshape(-1, 1)).flatten()
    y3 = data['销量(千克)']
    y3 = scaler.fit_transform(y3.values.reshape(-1, 1)).flatten()

    ax.plot(x,y1,label='销售单价',linestyle='-',linewidth=2)
    ax.plot(x,y3,label='销量',linestyle='-',linewidth=2)
    ax.legend()
    ax.set_title(f'{list_test[i]}销售数据')
    ax.set_xlabel('销售日期')
    ax.set_ylabel('标准化后的Y')
    plt.xticks(x[::5],x[::5])
    plt.xticks(rotation=45)
    plt.show()

#按周处理一下
df['销售日期']=df['销售日期'].dt.to_period('w')
grouped=df.groupby(['销售日期','品类'])
aggregatopm={
     '销量(千克)':'sum',
     '利润率':lambda x:(x*df.loc[x.index,'销量(千克)']).sum()/df.loc[x.index,'销量(千克)'].sum(),
     '销售单价(元/千克)':lambda x:(x*df.loc[x.index,'销量(千克)']).sum()/df.loc[x.index,'销量(千克)'].sum(),
     '批发价格(元/千克)':lambda x:(x*df.loc[x.index,'销量(千克)']).sum()/df.loc[x.index,'销量(千克)'].sum()
}

#进行聚合并重置索引
result=grouped.agg(aggregatopm).reset_index()
result['销售日期']=result['销售日期'].astype(str)
result['销售日期']=result['销售日期'].str.split('/').str[1]
result.to_csv('result_weekly.csv,',index=False)
print(result)

def Correlation_analysis(df,i):
    data=df[df['品类']==list_test[i]]
    scaler = StandardScaler()
    y1 = data['销售单价(元/千克)']
    y1 = scaler.fit_transform(y1.values.reshape(-1, 1)).flatten()
    y2 = data['批发价格(元/千克)']
    y2 = scaler.fit_transform(y2.values.reshape(-1, 1)).flatten()
    y3 = data['利润率']
    y3 = scaler.fit_transform(y3.values.reshape(-1, 1)).flatten()
    y4 = data['销量(千克)']
    y4 = scaler.fit_transform(y4.values.reshape(-1, 1)).flatten()

    data=pd.DataFrame({
        '销售单价':y1,
        '批发价格':y2,
        '利润率':y3,
        '销量':y4
    })
    correlation_matrix=data.corr(method='spearman')
    plt.figure(figsize=(8,6))
    sns.heatmap(correlation_matrix,annot=True,cmap='coolwarm',fmt=".2f",linewidths=.5)
    plt.title(f"{list_test[i]}Sperman相关性分析")
    plt.show()
    
for i in range(6):
    Correlation_analysis(result,i)

文章来源:https://blog.csdn.net/m0_63024355/article/details/135073176
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。