基于Python的数据分析实战教程与案例_第1页
基于Python的数据分析实战教程与案例_第2页
基于Python的数据分析实战教程与案例_第3页
基于Python的数据分析实战教程与案例_第4页
基于Python的数据分析实战教程与案例_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

基于Python的数据分析实战教程与案例数据分析已成为现代商业决策不可或缺的一部分,而Python凭借其丰富的库和强大的功能,成为数据分析师的首选工具。本文将通过实战教程与案例,详细介绍如何利用Python进行数据分析,涵盖数据采集、清洗、分析、可视化等全流程,并结合具体案例展示Python在数据分析中的应用价值。一、Python数据分析环境搭建进行数据分析前,需要搭建合适的开发环境。推荐使用Anaconda发行版,它集成了Python解释器、JupyterNotebook、Pandas、NumPy等常用数据分析库。python创建虚拟环境condacreate-ndata_analysispython=3.9pandasnumpymatplotlibseaborn激活环境condaactivatedata_analysis安装必要库pipinstalljupyterplotlyscikit-learnJupyterNotebook是数据分析师常用的交互式开发工具,支持代码、文本和可视化的混合编辑,便于展示分析过程。通过以下命令启动JupyterNotebook:pythonjupyternotebook二、数据采集与导入数据是数据分析的基础,常见的获取方式包括API接口、数据库、网页爬虫等。2.1从CSV文件导入数据pythonimportpandasaspd读取本地CSV文件data=pd.read_csv('sales_data.csv')查看数据前5行print(data.head())查看数据基本信息print(())查看描述性统计信息print(data.describe())2.2从SQL数据库导入数据pythonimportpandasaspdimportsqlite3连接SQLite数据库conn=sqlite3.connect('company.db')读取表数据data=pd.read_sql('SELECTFROMsales',conn)关闭数据库连接conn.close()2.3使用requests库获取网页数据pythonimportrequestsimportpandasaspd获取JSON数据url='/data'response=requests.get(url)data=pd.json_normalize(response.json())保存为CSV文件data.to_csv('web_data.csv',index=False)三、数据清洗与预处理原始数据往往需要经过清洗才能用于分析,常见的数据清洗任务包括处理缺失值、重复值、异常值和格式转换。3.1处理缺失值python检查缺失值print(data.isnull().sum())删除含有缺失值的行data_clean=data.dropna()填充缺失值,例如使用均值填充data_filled=data.fillna(data.mean())前向填充或后向填充data_filled_forward=data.fillna(method='ffill')data_filled_backward=data.fillna(method='bfill')3.2处理重复值python检查重复值print(data.duplicated().sum())删除重复值data_clean=data.drop_duplicates()保留第一次出现的重复值data_keep_first=data.drop_duplicates(keep='first')保留最后一次出现的重复值data_keep_last=data.drop_duplicates(keep='last')3.3处理异常值python使用Z-score方法检测异常值importnumpyasnpz_scores=np.abs((data['sales']-data['sales'].mean())/data['sales'].std())outliers=data[z_scores>3]删除异常值data_clean=data[z_scores<=3]替换异常值data['sales']=np.where(z_scores>3,data['sales'].median(),data['sales'])3.4数据类型转换python转换数据类型data['date']=pd.to_datetime(data['date'])data['sales']=data['sales'].astype(float)创建新列data['year']=data['date'].dt.yeardata['month']=data['date'].dt.monthdata['day']=data['date'].dt.day四、探索性数据分析探索性数据分析(EDA)是理解数据特征和关系的关键步骤,常用的分析方法包括描述性统计、数据可视化等。4.1描述性统计python基本统计量print(data[['sales','profit']].describe())分位数分析print(data['sales'].quantile([0.25,0.5,0.75]))相关性分析print(data[['sales','profit','units']].corr())4.2数据可视化Matplotlib和Seaborn是Python中常用的可视化库。pythonimportmatplotlib.pyplotaspltimportseabornassns直方图plt.figure(figsize=(10,6))sns.histplot(data['sales'],kde=True)plt.title('SalesDistribution')plt.xlabel('Sales')plt.ylabel('Frequency')plt.show()散点图plt.figure(figsize=(10,6))sns.scatterplot(x='sales',y='profit',data=data)plt.title('SalesvsProfit')plt.xlabel('Sales')plt.ylabel('Profit')plt.show()箱线图plt.figure(figsize=(10,6))sns.boxplot(x='category',y='sales',data=data)plt.title('SalesbyCategory')plt.xlabel('Category')plt.ylabel('Sales')plt.xticks(rotation=45)plt.show()相关性热力图plt.figure(figsize=(10,8))corr_matrix=data[['sales','profit','units','price']].corr()sns.heatmap(corr_matrix,annot=True,cmap='coolwarm')plt.title('CorrelationHeatmap')plt.show()五、数据分组与聚合数据分组与聚合是数据分析中的常见操作,可以帮助我们发现数据中的模式和趋势。python按类别分组计算总销售额grouped=data.groupby('category')['sales'].sum()print(grouped)多列分组grouped_multi=data.groupby(['year','month'])['sales'].sum()print(grouped_multi)聚合操作agg_data=data.groupby('category').agg({'sales':['sum','mean','count'],'profit':'mean'})print(agg_data)分位数聚合quantile_data=data.groupby('category')['sales'].quantile([0.25,0.5,0.75])print(quantile_data)六、时间序列分析时间序列分析是数据分析中的重要组成部分,尤其在金融、经济和销售领域。python设置日期为索引data.set_index('date',inplace=True)按月聚合销售额monthly_sales=data['sales'].resample('M').sum()绘制时间序列图plt.figure(figsize=(12,6))monthly_sales.plot()plt.title('MonthlySalesTrend')plt.xlabel('Date')plt.ylabel('TotalSales')plt.show()移动平均rolling_mean=monthly_sales.rolling(window=3).mean()plt.figure(figsize=(12,6))monthly_sales.plot(label='Original')rolling_mean.plot(label='3-MonthMovingAverage')plt.title('SaleswithMovingAverage')plt.legend()plt.show()季节性分解fromstatsmodels.tsa.seasonalimportseasonal_decomposedecomposition=seasonal_decompose(monthly_sales,model='additive',period=12)decomposition.plot()plt.show()七、机器学习应用Python的scikit-learn库提供了丰富的机器学习算法,可用于预测、分类等任务。7.1线性回归预测销售额pythonfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLinearRegressionfromsklearn.metricsimportmean_squared_error,r2_score准备数据X=data[['units','price','marketing_spend']]y=data['sales']划分训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)创建模型model=LinearRegression()训练模型model.fit(X_train,y_train)预测y_pred=model.predict(X_test)评估模型mse=mean_squared_error(y_test,y_pred)r2=r2_score(y_test,y_pred)print(f'MeanSquaredError:{mse}')print(f'R-squared:{r2}')查看系数print(f'Intercept:{ercept_}')print(f'Coefficients:{model.coef_}')7.2聚类分析pythonfromsklearn.clusterimportKMeansfromsklearn.preprocessingimportStandardScaler选择特征features=data[['sales','profit','units']]标准化数据scaler=StandardScaler()features_scaled=scaler.fit_transform(features)确定聚类数量inertia=[]forkinrange(1,11):kmeans=KMeans(n_clusters=k,random_state=42)kmeans.fit(features_scaled)inertia.append(kmeans.inertia_)绘制肘部图plt.figure(figsize=(10,6))plt.plot(range(1,11),inertia,marker='o')plt.title('ElbowMethodforOptimalk')plt.xlabel('NumberofClusters')plt.ylabel('Inertia')plt.show()应用K-Means聚类kmeans=KMeans(n_clusters=4,random_state=42)clusters=kmeans.fit_predict(features_scaled)添加聚类结果到原始数据data['cluster']=clusters分析聚类结果cluster_analysis=data.groupby('cluster').agg({'sales':'mean','profit':'mean','units':'mean'})print(cluster_analysis)八、案例研究:电商销售数据分析8.1数据背景假设我们拥有某电商平台过去两年的销售数据,包括订单ID、产品类别、价格、销售数量、利润、购买日期和营销支出等信息。8.2分析目标1.找出销售额最高的产品类别2.分析销售额的时间趋势和季节性3.识别高价值客户群体4.建立销售额预测模型5.评估营销活动的效果8.3分析过程python加载数据data=pd.read_csv('ecommerce_sales.csv')数据清洗处理缺失值data.dropna(subset=['product_category','price','quantity'],inplace=True)转换数据类型data['order_date']=pd.to_datetime(data['order_date'])data['price']=data['price'].astype(float)data['quantity']=data['quantity'].astype(int)创建新列data['sales']=data['price']data['quantity']data['year']=data['order_date'].dt.yeardata['month']=data['order_date'].dt.monthdata['day']=data['order_date'].dt.day1.销售额最高的产品类别category_sales=data.groupby('product_category')['sales'].sum().sort_values(ascending=False)print("TopProductCategoriesbySales:")print(category_sales.head())2.销售额时间趋势分析monthly_sales=data.groupby([data['order_date'].dt.to_period('M')])['sales'].sum()plt.figure(figsize=(12,6))monthly_sales.plot()plt.title('MonthlySalesTrend')plt.xlabel('Month')plt.ylabel('TotalSales')plt.show()季节性分析seasonal_sales=data.groupby(['month'])['sales'].mean()plt.figure(figsize=(10,6))seasonal_sales.plot(kind='bar')plt.title('AverageSalesbyMonth')plt.xlabel('Month')plt.ylabel('AverageSales')plt.xticks(rotation=0)plt.show()3.客户价值分析创建RFM模型data['recency']=(data['order_date'].max()-data['order_date']).dt.daysfrequency=data.groupby('customer_id')['order_id'].count()monetary=data.groupby('customer_id')['sales'].sum()rfm=pd.DataFrame({'recency':data.groupby('customer_id')['order_date'].max(),'frequency':frequency,'monetary':monetary})分位数分组rfm['r_quartile']=pd.qcut(rfm['recency'],4,labels=['4','3','2','1'])rfm['f_quartile']=pd.qcut(rfm['frequency'],4,labels=['1','2','3','4'])rfm['m_quartile']=pd.qcut(rfm['monetary'],4,labels=['1','2','3','4'])rfm['rfm_score']=rfm['r_quartile'].astype(str)+rfm['f_quartile'].astype(str)+rfm['m_quartile'].astype(str)print("CustomerRFMScores:")print(rfm.head())4.销售额预测模型选择特征features=data[['year','month','day','quantity','price','marketing_spend']]target=data['sales']划分数据集train_size=int(len(features)0.8)X_train,X_test=features[:train_size],features[train_size:]y_train,y_test=target[:train_size],target[trai

温馨提示

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

评论

0/150

提交评论