python学习5

简介: python学习5

代码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)z
相关文章
|
2天前
|
Python
【Python21天学习挑战赛】- 错误和异常
【Python21天学习挑战赛】- 错误和异常
|
2天前
|
容器
【Python21天学习挑战赛】-迭代器 & f-格式化 & 模块
【Python21天学习挑战赛】-迭代器 & f-格式化 & 模块
|
2天前
|
Python
【Python21天学习挑战赛】- 函数进阶
【Python21天学习挑战赛】- 函数进阶
|
2天前
【Python21天学习挑战赛】文件读写操作
【Python21天学习挑战赛】文件读写操作
|
2天前
|
索引 Python
【Python21天学习挑战赛】集合 & 数据类型补充
【Python21天学习挑战赛】集合 & 数据类型补充
|
2天前
|
存储 缓存 Python
【Python21天学习挑战赛】字典 && 小数据池
【Python21天学习挑战赛】字典 && 小数据池
|
2天前
|
存储 索引 Python
【Python21天学习挑战赛】-列表 & 元组 & range
【Python21天学习挑战赛】-列表 & 元组 & range
|
2天前
|
Python
【Python21天学习挑战赛】-入门必备
【Python21天学习挑战赛】-入门必备
|
2天前
|
关系型数据库 MySQL C语言
【Python21天学习挑战赛】—Day1:学习规划,我与python的相遇
【Python21天学习挑战赛】—Day1:学习规划,我与python的相遇
|
6天前
|
运维 Shell Python
Shell和Python学习教程总结
Shell和Python学习教程总结