Python数据分析实战教程:Pandas与Matplotlib核心代码大全_第1页
Python数据分析实战教程:Pandas与Matplotlib核心代码大全_第2页
Python数据分析实战教程:Pandas与Matplotlib核心代码大全_第3页
Python数据分析实战教程:Pandas与Matplotlib核心代码大全_第4页
Python数据分析实战教程:Pandas与Matplotlib核心代码大全_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-Python数据分析实战教程:Pandas与Matplotlib核心代码大全在数据驱动决策的当下,Python凭借其在数据处理与可视化领域的统治力,已成为分析师、数据科学家及业务人员的首选工具。Pandas负责数据的清洗、转换与分析,而Matplotlib则承担将抽象数据转化为直观图表的重任。掌握这两者的核心代码逻辑,意味着能够独立完成从原始数据到商业洞察的全流程。本文不探讨理论定义,直接深入实战场景,提供可复制、可修改的高频代码片段与操作范式。任何分析工作始于对数据的准确读取与快速认知。Pandas的`read_csv`、`read_excel`等函数是标准入口,但生产环境中往往面临编码混乱、缺失值处理及类型推断错误等问题。importpandasaspd

importnumpyasnp

#场景:读取包含特殊字符和缺失值的销售数据

#使用encoding='utf-8-sig'解决中文乱码,on_bad_lines='skip'跳过格式错误的行

df=pd.read_csv('sales_data.csv',encoding='utf-8-sig',on_bad_lines='skip')

#快速预览数据结构与内存占用

print(())

#输出示例:

#<class'pandas.core.frame.DataFrame'>

#RangeIndex:10000entries,0to9999

#Datacolumns(total5columns):

##ColumnNon-NullCountDtype

#0date10000non-nullobject

#1region9950non-nullobject

#2product10000non-nullobject

#3sales9800non-nullfloat64

#4profit9800non-nullfloat64

#memoryusage:390.7+KB

#查看前五行及统计描述,识别异常值分布

print(df.describe(include='all'))在数据探查阶段,必须关注缺失值的分布模式。简单的填充策略往往掩盖了数据背后的业务逻辑。对于数值型字段,若缺失比例低于5%且呈随机分布,可采用均值或中位数填充;若缺失集中在特定时间段,则需结合业务背景进行插值或标记为独立类别。#智能填充策略:按地区分组后使用中位数填充销售额

median_sales=df.groupby('region')['sales'].transform('median')

df['sales']=df['sales'].fillna(median_sales)

#针对分类变量(如地区),将缺失值标记为“未知”

df['region']=df['region'].fillna('Unknown')数据类型的自动推断常出现偏差,例如日期列被识别为字符串,导致无法进行时间序列分析。显式指定类型不仅提升计算效率,还能避免后续逻辑错误。#强制转换数据类型

df['date']=pd.to_datetime(df['date'],format='%Y-%m-%d')

df['sales']=df['sales'].astype('float32')#降低内存占用

df['profit']=df['profit'].astype('float32')二、数据清洗与特征工程:从脏数据到可用资产真实世界的数据极少是干净的。去重、筛选、重塑以及特征构造是清洗工作的核心。Pandas的链式操作(Chaining)能极大提升代码的可读性与执行效率。1.重复值处理与条件筛选重复记录会严重扭曲聚合结果,必须优先清除。同时,业务规则往往要求剔除极端异常值。#去除完全重复的行

df_clean=df.drop_duplicates()

#基于业务逻辑筛选:仅保留销售额大于0且利润率为正的记录

#利润率=利润/销售额

df_clean['margin']=df_clean['profit']/df_clean['sales']

valid_data=df_clean[(df_clean['sales']>0)&(df_clean['margin']>0)]

#剔除离群点:使用箱线图原理(IQR方法)

Q1=valid_data['sales'].quantile(0.25)

Q3=valid_data['sales'].quantile(0.75)

IQR=Q3-Q1

filtered_data=valid_data[~((valid_data['sales']<(Q1-1.5*IQR))|

(valid_data['sales']>(Q3+1.5*IQR)))]2.多维透视与数据重塑当需要分析不同维度交叉下的指标表现时,`pivot_table`比传统的循环遍历高效得多。它支持聚合函数的灵活配置,并能自动处理缺失的行列组合。#创建透视表:行=地区,列=产品类别,值=平均销售额,聚合方式=mean

pivot_df=pd.pivot_table(filtered_data,

values='sales',

index='region',

columns='product',

aggfunc='mean',

fill_value=0)

#添加总计行与列,便于宏观把控

pivot_df['TotalSales']=pivot_df.sum(axis=1)

pivot_df.loc['GrandTotal']=pivot_df.sum()对于长宽格式转换,`melt`和`stack/unstack`是必备技能。将宽表转为长表是许多高级可视化工具的前置要求。#将宽表(多产品列为列)转换为长表(单列表示产品,单列表示销售额)

long_df=pivot_df.reset_index().melt(id_vars=['region'],

value_name='sales',

var_name='product_type')3.时间序列特征提取时间序列分析是商业预测的关键。利用Pandas的`dt`访问器,可以从日期列中提取年、月、周、季度甚至工作日属性,构建丰富的特征工程体系。#提取时间维度特征

filtered_data['year']=filtered_data['date'].dt.year

filtered_data['month']=filtered_data['date'].dt.month

filtered_data['quarter']=filtered_data['date'].dt.quarter

filtered_data['day_of_week']=filtered_data['date'].dt.day_name()

#计算环比增长率(MoM)

filtered_data=filtered_data.sort_values(['region','date'])

filtered_data['sales_mom_growth']=filtered_data.groupby('region')['sales'].pct_change()三、Matplotlib可视化实战:让数据说话如果说Pandas是幕后英雄,Matplotlib则是前台的演讲者。虽然Seaborn等库封装更高级,但理解Matplotlib底层机制才能绘制出符合企业规范的定制化图表。1.基础图表构建规范绘图的第一步是设置画布与风格。企业级报告通常要求简洁、专业,避免花哨的背景色。importmatplotlib.pyplotasplt

importmatplotlib.font_managerasfm

#设置全局样式:无网格线背景,清晰字体

plt.style.use('seaborn-v0_8-whitegrid')

#注意:部分环境可能不支持seaborn样式,需回退至默认或自定义rcParams

plt.rcParams['font.sans-serif']=['SimHei','DejaVuSans']#解决中文显示问题

plt.rcParams['axes.unicode_minus']=False

fig,ax=plt.subplots(figsize=(10,6))2.趋势分析与对比图表折线图用于展示随时间变化的趋势,柱状图适合比较离散类别的数值大小。双轴图则能解决量纲不同的数据共存问题。场景:展示各地区月度销售额趋势及利润率变化。维度左侧Y轴右侧Y轴数据系列销售额(Sales)利润率(Margin%)图表类型折线图(Line)柱状图(Bar)视觉映射颜色区分地区透明度区分高低#准备数据:按月份汇总各地区的平均销售额

monthly_sales=filtered_data.groupby(['date','region'])['sales'].sum().unstack(level='region')

monthly_margin=filtered_data.groupby(['date','region'])['margin'].mean().unstack(level='region')*100

ax1=fig.add_subplot(111)#主坐标轴

ax2=ax1.twinx()#共享X轴的次坐标轴

#绘制销售额折线

colors=['#1f77b4','#ff7f0e','#2ca02c','#d62728']

fori,colinenumerate(monthly_sales.columns):

ax1.plot(monthly_sales.index,monthly_sales[col],label=col,color=colors[i],linewidth=2,marker='o')

#绘制利润率柱状图(取第一个地区作为示例,实际可叠加多个)

ax2.bar(monthly_sales.index,monthly_margin.iloc[:,0],alpha=0.3,color='#9467bd',label='Margin(RegionA)')

#标签与标题设置

ax1.set_xlabel('Month',fontsize=12)

ax1.set_ylabel('TotalSales(CNY)',fontsize=12,color=colors[0])

ax2.set_ylabel('ProfitMargin(%)',fontsize=12,color='#9467bd')

ax1.set_title('RegionalSalesTrendvsProfitMarginAnalysis',fontsize=14,fontweight='bold')

#图例合并,避免重叠

lines_1,labels_1=ax1.get_legend_handles_labels()

lines_2,labels_2=ax2.get_legend_handles_labels()

ax1.legend(lines_1+lines_2,labels_1+labels_2,loc='upperleft')

plt.tight_layout()

plt.show()3.分布分析与相关性热力图了解数据分布形态有助于判断是否需要进行标准化处理。热力图则是探索变量间相关性的利器。#计算相关系数矩阵

corr_matrix=filtered_data[['sales','profit','margin']].corr()

fig,ax=plt.subplots(figsize=(8,6))

sns_heatmap=sns.heatmap(corr_matrix,annot=True,cmap='coolwarm',center=0,

square=True,linewidths=.5,cbar_kws={"shrink":.5})

#注:此处假设已导入seaborn以简化热力图代码,若纯Matplotlib需手动绘制网格与文本

plt.title('CorrelationHeatmapofKeyMetrics',pad=20)

plt.show()

#直方图与密度曲线叠加:观察销售额分布

plt.figure(figsize=(10,6))

plt.hist(filtered_data['sales'],bins=50,density=True,alpha=0.6,color='skyblue',edgecolor='black')

plt.plot(sorted(filtered_data['sales']),

[len(filtered_data['sales'])*xforxinsorted(filtered_data['sales'])/max(filtered_data['sales'])],

color='red',linestyle='--',label='DistributionCurve')

plt.xlabel('SalesAmount')

plt.ylabel('Density')

plt.title('DistributionofSalesAmounts')

plt.legend()

plt.grid(axis='y',alpha=0.3)

plt.show()四、性能优化与自动化输出在处理百万级以上数据时,Pandas的默认行为可能导致内存溢出。通过分块读取(chunksize)、指定数据类型及禁用索引更新,可显著提升性能。#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论