首页 > 编程语言 >【艾思科蓝】Python数据分析与可视化实战:从入门到进阶

【艾思科蓝】Python数据分析与可视化实战:从入门到进阶

时间:2024-10-03 13:50:21浏览次数:8  
标签:数据分析 plt 进阶 示例 Python df 可视化 数据

【IEEE出版 | 会后3-4个月EI检索】第三届云计算、大数据应用与软件工程国际学术会议 (CBASE 2024)_艾思科蓝_学术一站式服务平台

更多学术会议请看:学术会议-学术交流征稿-学术会议在线-艾思科蓝 

目录

引言

一、Python数据分析入门

1. Python数据分析环境搭建

2. 数据读取与预处理

3. 数据探索与可视化

二、Python数据分析进阶

1. 数据清洗与转换

2. 数据统计与建模

3. 数据可视化进阶

三、实战案例:电商数据分析与可视化

1. 数据准备

2. 数据探索

3. 数据可视化


引言

在当今数据驱动的时代,数据分析与可视化已成为各行各业不可或缺的技能。Python,凭借其强大的数据处理能力和丰富的可视化库,成为了数据分析师和数据科学家的首选工具。本文将带你从Python数据分析与可视化的入门到进阶,通过实战案例,让你掌握这一重要技能。

一、Python数据分析入门
1. Python数据分析环境搭建

在开始Python数据分析之前,首先需要搭建一个合适的环境。这包括安装Python解释器、常用的数据分析库(如NumPy、Pandas、SciPy等)以及可视化库(如Matplotlib、Seaborn等)。

  • 安装Python:可以从Python官方网站下载并安装最新版本的Python解释器。
  • 安装数据分析库:使用pip包管理器安装所需的库。例如,在命令行中输入以下命令来安装Pandas和Matplotlib:
    pip install pandas matplotlib
  • IDE选择:推荐使用PyCharm、Jupyter Notebook等IDE,它们提供了丰富的功能和良好的用户体验。
2. 数据读取与预处理

在数据分析中,数据读取与预处理是至关重要的一步。Pandas库提供了强大的数据读取和处理功能。

  • 读取数据:Pandas支持多种数据格式的读取,如CSV、Excel、SQL等。以下是一个读取CSV文件的示例
    import pandas as pd  
      
    # 读取CSV文件  
    df = pd.read_csv('data.csv')  
      
    # 显示数据  
    print(df.head())
  • 数据预处理:包括处理缺失值、异常值、重复值等。以下是一些常用的数据预处理操作:
    # 处理缺失值:填充缺失值或删除含有缺失值的行/列  
    df.fillna(0, inplace=True)  # 用0填充缺失值  
    df.dropna(inplace=True)  # 删除含有缺失值的行  
      
    # 处理异常值:可以通过设定阈值来过滤异常值  
    df = df[(df['column'] >= threshold) & (df['column'] <= another_threshold)]  
      
    # 处理重复值:删除重复的行  
    df.drop_duplicates(inplace=True)
3. 数据探索与可视化

在数据预处理之后,需要对数据进行探索性分析,以了解数据的分布、特征等。Matplotlib和Seaborn是Python中常用的可视化库。

  • Matplotlib基础:Matplotlib是Python中最基础的绘图库,提供了丰富的绘图功能。以下是一个简单的折线图示例:
    import matplotlib.pyplot as plt  
      
    # 示例数据  
    x = [1, 2, 3, 4, 5]  
    y = [2, 3, 5, 7, 11]  
      
    # 绘制折线图  
    plt.plot(x, y)  
    plt.xlabel('X轴标签')  
    plt.ylabel('Y轴标签')  
    plt.title('折线图示例')  
    plt.show()
  • Seaborn进阶:Seaborn是基于Matplotlib的高级绘图库,提供了更简洁、美观的绘图接口。以下是一个使用Seaborn绘制散点图并添加回归线的示例:
    import seaborn as sns  
    import numpy as np  
      
    # 示例数据  
    np.random.seed(0)  
    x = np.random.rand(50)  
    y = 2 * x + np.random.randn(50)  
      
    # 绘制散点图并添加回归线  
    sns.lmplot(x=x, y=y, line_kws={'color': 'red'})  
    plt.xlabel('X轴标签')  
    plt.ylabel('Y轴标签')  
    plt.title('散点图与回归线示例')  
    plt.show()
二、Python数据分析进阶
1. 数据清洗与转换

在数据分析过程中,数据清洗与转换是不可或缺的一步。Pandas库提供了丰富的数据清洗与转换功能。

  • 数据类型转换:有时需要将数据列的类型进行转换,以满足后续分析的需求。例如,将字符串类型的列转换为数值类型:
    # 假设df['column']为字符串类型的数值  
    df['column'] = pd.to_numeric(df['column'], errors='coerce')
  • 数据合并与连接:在数据分析中,经常需要将多个数据集进行合并或连接。Pandas提供了mergeconcat函数来实现这一功能:
    # 示例数据  
    df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],  
                        'A': ['A0', 'A1', 'A2', 'A3']})  
    df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],  
                        'B': ['B0', 'B1', 'B2', 'B3']})  
      
    # 使用merge函数合并数据  
    merged_df = pd.merge(df1, df2, on='key')  
    print(merged_df)  
      
    # 使用concat函数连接数据  
    concat_df = pd.concat([df1, df2], axis=1)  
    print(concat_df)
2. 数据统计与建模

在数据分析中,数据统计与建模是核心环节。SciPy、Statsmodels等库提供了丰富的统计与建模功能。

  • 描述性统计:Pandas库提供了describe函数来计算数据的描述性统计量,如均值、标准差、最小值、最大值等。
    # 计算描述性统计量  
    desc_stats = df.describe()  
    print(desc_stats)
  • 假设检验:SciPy库提供了丰富的假设检验函数,如t检验、卡方检验等。以下是一个t检验的示例:
    from scipy import stats  
      
    # 示例数据  
    x = [2.3, 2.5, 3.6, 4.0]  
    y = [2.4, 2.6, 2.9, 3.3]  
      
    # 进行t检验  
    t_stat, p_value = stats.ttest_ind(x, y)  
    print('t统计量:', t_stat)  
    print('p值:', p_value)
  • 线性回归:Statsmodels库提供了线性回归模型的实现。以下是一个线性回归的示例:
    import statsmodels.api as sm  
      
    # 示例数据  
    X = df[['feature1', 'feature2']]  # 特征变量  
    y = df['target']  # 目标变量  
      
    # 添加常数项  
    X = sm.add_constant(X)  
      
    # 拟合线性回归模型  
    model = sm.OLS(y, X).fit()  
      
    # 输出模型参数  
    print(model.summary())
3. 数据可视化进阶

在数据分析中,数据可视化是不可或缺的一环。除了Matplotlib和Seaborn之外,Plotly、Bokeh等库也提供了丰富的可视化功能。

  • Plotly交互式可视化:Plotly是一个用于创建交互式图表的库。以下是一个使用Plotly绘制散点图的示例:
    import plotly.graph_objs as go  
      
    # 示例数据  
    x = np.random.rand(100)  
    y = np.random.rand(100)  
      
    # 创建散点图  
    trace = go.Scatter(  
        x=x,  
        y=y,  
        mode='markers',  
        marker=dict(  
            size=10,  
            color=x + y,  # 根据x+y的值设置颜色  
            colorscale='Viridis',  # 颜色映射  
            showscale=True  # 显示颜色条  
        )  
    )  
      
    data = [trace]  
      
    # 创建图表对象并显示  
    fig = go.Figure(data=data)  
    fig.show()
  • 模型训练与评估:Scikit-learn库提供了多种机器学习算法,如逻辑回归、决策树、支持向量机等。以下是一个使用逻辑回归进行分类的示例:
    from sklearn.model_selection import train_test_split  
    from sklearn.linear_model import LogisticRegression  
    from sklearn.metrics import accuracy_score, classification_report  
      
    # 示例数据  
    X = df[['feature1', 'feature2']]  
    y = df['target']  
      
    # 划分训练集和测试集  
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)  
      
    # 创建逻辑回归模型并训练  
    model = LogisticRegression()  
    model.fit(X_train, y_train)  
      
    # 在测试集上进行预测  
    y_pred = model.predict(X_test)  
      
    # 计算准确率并输出分类报告  
    accuracy = accuracy_score(y_test, y_pred)  
    report = classification_report(y_test, y_pred)  
    print('准确率:', accuracy)  
    print('分类报告:\n', report)
  • 模型选择与调优:在机器学习中,模型选择与调优是提高模型性能的关键步骤。可以使用交叉验证、网格搜索等方法来选择最佳的模型和参数。
    from sklearn.model_selection import GridSearchCV, cross_val_score  
      
    # 示例数据  
    X = df[['feature1', 'feature2']]  
    y = df['target']  
      
    # 创建逻辑回归模型  
    model = LogisticRegression()  
      
    # 定义参数网格  
    param_grid = {  
        'C': [0.1, 1, 10, 100],  
        'solver': ['liblinear', 'lbfgs', 'newton-cg', 'sag', 'saga']  
    }  
      
    # 使用网格搜索进行模型选择与调优  
    grid_search = GridSearchCV(model, param_grid, cv=5, scoring='accuracy')  
    grid_search.fit(X, y)  
      
    # 输出最佳参数和最高准确率  
    print('最佳参数:', grid_search.best_params_)  
    print('最高准确率:', grid_search.best_score_)
三、实战案例:电商数据分析与可视化

以下是一个电商数据分析与可视化的实战案例,通过该案例,你将了解如何使用Python进行实际的数据分析任务。

1. 数据准备

假设我们有一个电商平台的销售数据,数据包含以下字段:订单号、用户ID、商品ID、商品名称、购买数量、购买金额、购买时间等。我们将使用Pandas库来读取和处理这些数据。

import pandas as pd  
  
# 读取数据  
df = pd.read_csv('ecommerce_data.csv')  
  
# 显示数据的前几行  
print(df.head())
2. 数据探索

在数据探索阶段,我们需要对数据的基本情况进行了解,包括数据的缺失情况、数据的分布情况等。

# 检查数据的缺失情况  
print(df.isnull().sum())  
  
# 统计各商品的销售数量和销售金额  
sales_by_product = df.groupby('商品名称')['购买数量', '购买金额'].sum().reset_index()  
print(sales_by_product.head())  
  
# 统计各用户的购买次数和购买金额  
purchases_by_user = df.groupby('用户ID')['订单号'].count().reset_index(name='购买次数')  
purchases_by_user = purchases_by_user.merge(df.groupby('用户ID')['购买金额'].sum().reset_index(name='购买金额'), on='用户ID')  
print(purchases_by_user.head())
3. 数据可视化

在数据可视化阶段,我们将使用Matplotlib和Seaborn库来绘制各种图表,以直观地展示数据的情况。

import matplotlib.pyplot as plt  
import seaborn as sns  
  
# 设置绘图风格  
sns.set(style="whitegrid")  
  
# 绘制各商品的销售数量和销售金额柱状图  
plt.figure(figsize=(14, 7))  
sns.barplot(x='商品名称', y='购买数量', data=sales_by_product, palette='viridis')  
plt.xticks(rotation=90)  
plt.title('各商品销售数量柱状图')  
plt.show()  
  
plt.figure(figsize=(14, 7))  
sns.barplot(x='商品名称', y='购买金额', data=sales_by_product, palette='viridis')  
plt.xticks(rotation=90)  
plt.title('各商品销售金额柱状图')  
plt.show()  
  
# 绘制各用户的购买次数和购买金额散点图  
plt.figure(figsize=(14, 7))  
sns.scatterplot(x='购买次数', y='购买金额', data=purchases_by_user, palette='viridis', alpha=0.6)  
plt.title('各用户购买次数与购买金额散点图')  
plt.xlabel('购买次数')  
plt.ylabel('购买金额')  
plt.show()  
  
# 绘制销售数量和销售金额的箱线图  
plt.figure(figsize=(14, 7))  
sns.boxplot(x='商品名称', y='购买数量', data=sales_by_product, palette='viridis')  
plt.xticks(rotation=90)  
plt.title('各商品销售数量箱线图')  
plt.show()  
  
plt.figure(figsize=(14, 7))  
sns.boxplot(x='商品名称', y='购买金额', data=sales_by_product, palette='viridis')  
plt.xticks(rotation=90)  
plt.title('各商品销售金额箱线图')  
plt.show()

 

标签:数据分析,plt,进阶,示例,Python,df,可视化,数据
From: https://blog.csdn.net/weixin_73295475/article/details/142691434

相关文章

  • python3 队列的使用
    在leetcode如下题目中使用队列637.二叉树的层平均值:#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolutio......
  • 在Visual Studio Code中配置使用venv隔离python环境
    venv的用途Python的venv是一个用于创建虚拟环境的模块,主要作用是为每个项目提供一个隔离的Python运行环境。这样不同项目的依赖可以相互独立,不会产生冲突。例如,一个项目可以使用Python3.8,另一个项目使用Python3.10,彼此之间不受影响。相比其他环境管理工具,如conda,venv是Python......
  • [Python手撕]二叉树中的最大路径和
    #Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:defmaxPathSum(self,root:Optional[TreeNod......
  • 全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字
    全网最适合入门的面向对象编程教程:55Python字符串与序列化-字节序列类型和可变字节字符串摘要:在Python中,字符编码是将字符映射为字节的过程,而字节序列(bytes)则是存储这些字节的实际数据结构,字节序列和可变字节字符串的主要区别在于其可变性和用途,bytearray是可变的字节序列......
  • lazy_loader python 子包以及函数懒加载框架
    lazy_loaderpython子包以及函数懒加载框架,内部处理上是基于了importlib.import_module进行动态加载包含的特性可以确保子模块对于用户的可见行,不引起而外的开销允许外部库在使用的时候被加载,提升导入时间说明此包在kedro的datasets模块中使用比较多,基本上每个datase......
  • python必会的函数或者操作
    排序sorted(data,reverse=TrueorFalse)zip()将多个可迭代对象打包成一个元组列表listorset(zip())map()对可迭代对象中的每个元素应用函数map(data,func)filter()跟map类似的用法reduce()对可迭代对象中的元素进行累计计算fromfunctoolsimportreduce......
  • python+flask计算机毕业设计门诊管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着医疗技术的飞速发展和患者需求的日益增长,传统的手工门诊管理模式已难以满足现代医院高效、精准、便捷的服务要求。门诊作为医院面向患......
  • 【python应用】最牛逼的Python API文档生成:Sphinx全攻略
    原创蔡大叔在Python开发的世界里,代码的文档化是至关重要的。它不仅帮助开发者理解代码的功能和用法,还能在团队协作中发挥巨大作用。Sphinx,作为一个强大的文档生成器,已经成为Python项目文档化的首选工具。本文将带你全面了解如何使用Sphinx为你的Python项目生成精美且实用的API......
  • python字典添加_增
    在Python中,字典(dictionary)是一种可变容器模型,且可存储任意类型对象。字典的每个元素都是一个键值对(key-valuepair)。添加新项到字典中非常直接,可以通过直接给字典指定一个新的键并赋予一个值来完成。如果指定的键在字典中不存在,则这个新项会被添加到字典中;如果键已存在,则对应的值......
  • python字典获取_查
    在Python中,字典(dict)是一种用于存储键值对(key-valuepairs)的内置数据结构。字典的键(key)必须是唯一的,而值(value)则可以是任何数据类型。使用字典时,经常需要获取(或查询)与特定键相关联的值。下面介绍几种获取字典中值的方法:1.直接通过键访问如果你知道键的确切名称,可以直接使用键来......