当前位置: 首页 > article >正文

python数据分析笔记

 

 

一、数据分析简介

 

数据分析是从大量数据中提取有价值信息的过程。Python在数据分析领域有广泛应用,拥有丰富的库和工具。

 

二、数据获取

 

(一)从文件读取

 

1. CSV 文件

使用 pandas 库的 read_csv() 函数。示例:

 

import pandas as pd

data = pd.read_csv('data.csv')

 

 

2. Excel 文件

 read_excel() 函数可读取 Excel 文件。例如:

 

data_excel = pd.read_excel('data.xlsx')

 

 

(二)从数据库获取

 

1. 连接数据库

若使用 MySQL,可安装 mysql-connector-python 库。以下是连接示例:

 

import mysql.connector

mydb = mysql.connector.connect(

    host="localhost",

    user="your_user",

    password="your_password",

    database="your_database"

)

 

 

2. 查询数据

创建游标,执行 SQL 查询语句获取数据。

 

三、数据探索

 

(一)查看数据结构

 

使用 data.head() (默认查看前 5 行)和 data.tail() (默认查看后 5 行)来初步了解数据内容。

 

(二)数据类型查看

 

 data.dtypes 可显示每列的数据类型。

 

(三)数据维度

 

 data.shape 返回数据的行数和列数。

 

四、数据清洗

 

(一)处理缺失值

 

1. 删除缺失值

 dropna() 函数可删除包含缺失值的行或列。例如,删除包含缺失值的行:

 

data.dropna(axis=0, inplace=True) 

 

 

2. 填充缺失值

 fillna() 可填充指定的值。如用均值填充某列缺失值:

 

mean_value = data['column_name'].mean()

data['column_name'].fillna(mean_value, inplace=True)

 

 

(二)处理重复值

 

 drop_duplicates() 用于去除重复行。

 

data.drop_duplicates(inplace=True)

 

 

五、数据分析基础操作

 

(一)描述性统计

 

 describe() 函数提供数据的计数、均值、标准差、最小值、四分位数和最大值等信息。

 

data.describe()

 

 

(二)数据筛选与切片

 

1. 基于条件筛选

例如,筛选出某列值大于特定值的数据:

 

new_data = data[data['column_name'] > value]

 

 

2. 切片操作

按行或列索引进行切片,如 data.iloc[start_row:end_row, start_col:end_col] 。

 

六、数据分组与聚合

 

(一)分组

 

使用 groupby() 函数。例如,按某列分组:

 

grouped_data = data.groupby('group_column')

 

 

(二)聚合操作

 

常见的聚合函数有 sum() 、 mean() 、 count() 等。

 

grouped_data.sum() 

 

 

七、数据可视化

 

(一)Matplotlib 库

 

1. 基本绘图

 

import matplotlib.pyplot as plt

plt.plot(data['x_column'], data['y_column'])

plt.xlabel('X Label')

plt.ylabel('Y Label')

plt.title('Title of Plot')

plt.show()

 

 

2. 绘制柱状图、直方图等

柱状图:

 

plt.bar(data['category_column'], data['value_column'])

 

 

直方图:

 

plt.hist(data['numeric_column'], bins=10)

 

 

(二)Seaborn 库

 

1. 美观的可视化

例如绘制箱线图:

 

import seaborn as sns

sns.boxplot(x='category', y='value', data=data)

 

 

2. 关系图绘制

 

sns.pairplot(data)

 

 

八、机器学习相关数据分析(可选)

 

(一)特征工程

 

包括特征选择、特征缩放等。例如使用 sklearn 库进行特征缩放:

 

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

scaled_data = scaler.fit_transform(data[['feature1', 'feature2']])

 

 

(二)模型评估(简单示例)

 

使用 train_test_split 分割数据,评估模型准确率等指标(以简单线性回归为例):

 

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

from sklearn.metrics import mean_squared_error

 

X = data[['feature']]

y = data['target']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

 

model = LinearRegression()

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

mse = mean_squared_error(y_test, y_pred)

print("Mean Squared Error:", mse)

以下是一个从数据库建表开始,到进行一些基础数据分析操作的完整示例代码,这里以MySQL数据库为例,使用 pandas 进行数据处理和分析, matplotlib 进行简单可视化。

 

1. 安装必要的库

 

确保已经安装了以下库:

 

-  pandas :用于数据处理和分析。

-  mysql-connector-python :用于连接MySQL数据库。

-  matplotlib :用于数据可视化。

 

可以使用以下命令安装(假设使用pip包管理器):

 

pip install pandas mysql-connector-python matplotlib

 

 

2. 数据库建表及插入数据(示例)

 

首先,需要在MySQL数据库中创建一个表并插入一些示例数据。以下是使用Python代码通过 mysql-connector-python 库来实现建表和插入数据的操作示例。

 

import mysql.connector

 

# 连接数据库

mydb = mysql.connector.connect(

    host="localhost",

    user="your_username",

    password="your_password",

    database="your_database_name"

)

 

# 创建游标

mycursor = mydb.cursor()

 

# 创建表的SQL语句

create_table_query = """

CREATE TABLE IF NOT EXISTS sales_data (

    id INT AUTO_INCREMENT PRIMARY KEY,

    product_name VARCHAR(255),

    sale_date DATE,

    quantity_sold INT,

    unit_price DECIMAL(10, 2)

)

"""

mycursor.execute(create_table_query)

 

# 插入示例数据的SQL语句

insert_data_query = """

INSERT INTO sales_data (product_name, sale_date, quantity_sold, unit_price)

VALUES

    ('Product A', '2024-01-01', 10, 25.50),

    ('Product B', '2024-01-02', 15, 18.00),

    ('Product A', '2024-01-03', 8, 22.00),

    ('Product C', '2024-01-04', 12, 30.00),

    ('Product B', '2024-01-05', 9, 19.50)

"""

mycursor.execute(insert_data_query)

 

# 提交更改

mydb.commit()

 

# 关闭游标和连接

mycursor.close()

mydb.close()

 

 

在上述代码中:

 

- 首先建立了与MySQL数据库的连接。

- 然后通过游标执行创建表的SQL语句,创建了一个名为 sales_data 的表,包含产品名称、销售日期、销售数量和单价等字段。

- 接着执行插入数据的SQL语句,向表中插入了一些示例销售数据。

- 最后提交更改并关闭游标和连接。

 

3. 从数据库读取数据并进行分析

 

以下是从刚才创建的数据库表中读取数据,并进行一些基础数据分析和可视化的代码:

 

import pandas as pd

import matplotlib.pyplot as plt

import mysql.connector

 

# 连接数据库

mydb = mysql.connector.connect(

    host="localhost",

    user="your_username",

    password="your_password",

    database="your_database_name"

)

 

# 从数据库读取数据到DataFrame

query = "SELECT * FROM sales_data"

data = pd.read_sql(query, mydb)

 

# 关闭数据库连接

mydb.close()

 

# 查看数据的前几行

print("数据的前几行:")

print(data.head())

 

# 数据基本信息

print("\n数据信息:")

print(data.info())

 

# 描述性统计

print("\n描述性统计:")

print(data.describe())

 

# 按产品名称分组并计算销售总量

grouped_data = data.groupby('product_name')['quantity_sold'].sum()

print("\n各产品销售总量:")

print(grouped_data)

 

# 可视化 - 绘制各产品销售总量柱状图

plt.bar(grouped_data.index, grouped_data.values)

plt.xlabel('产品名称')

plt.ylabel('销售总量')

plt.title('各产品销售总量')

plt.show()

 

 

在上述代码中:

 

- 首先再次建立与MySQL数据库的连接。

- 使用 pandas 的 read_sql 函数执行SQL查询语句,将数据库表中的数据读取到一个 DataFrame 对象中,方便后续处理。

- 关闭数据库连接后,对读取到的数据进行了一系列操作:

- 查看数据的前几行,了解数据的大致样子。

- 查看数据的基本信息,如数据类型、非空值数量等。

- 获取描述性统计信息,包括计数、均值、标准差等。

- 按产品名称对数据进行分组,并计算每个产品的销售总量。

- 最后,使用 matplotlib 绘制了一个柱状图,直观展示各产品的销售总量。

 

请注意:

 

- 在实际使用中,需要将 your_username 、 your_password 和 your_database_name 替换为你自己的MySQL数据库用户名、密码和数据库名称。

- 上述代码仅为一个简单示例,实际的数据分析场景可能会更加复杂,涉及到更多的数据处理、分析和可视化操作。

以下是一个使用Django框架来实现与数据库交互并进行简单数据分析展示的示例代码。这里假设你已经安装好了Django,并且对Django的基本概念和项目结构有一定的了解。
 
1. 创建Django项目和应用
 
首先,创建一个Django项目(假设项目名为  sales_analysis_project )和一个应用(假设应用名为  sales_analysis_app ):
 
# 创建Django项目
django-admin startproject sales_analysis_project

# 进入项目目录
cd sales_analysis_project

# 创建应用
python manage.py startapp sales_analysis_app
 
 
2. 配置数据库连接(settings.py)
 
在  sales_analysis_project  项目的  settings.py  文件中,配置数据库连接。这里以MySQL为例,确保已经安装了  mysqlclient  库(可以通过  pip install mysqlclient  安装)。
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_username',
        'PASSWORD': 'your_password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
 
 
记得将  your_database_name 、 your_username  和  your_password  替换为你自己的真实数据库信息。
 
3. 定义数据库模型(models.py)
 
在  sales_analysis_app  应用的  models.py  文件中,定义与数据库表对应的模型类。这里假设我们要分析销售数据,与之前示例类似,创建一个  SalesData  模型来表示销售数据表。
 
from django.db import models

class SalesData(models.Model):
    product_name = models.CharField(max_length=255)
    sale_date = models.DateField()
    quantity_sold = models.IntegerField()
    unit_price = models.DecimalField(max_length=10, decimal_places=2)

    def __str__(self):
        return f"{self.product_name} - {self.sale_date}"
 
 
4. 数据库迁移
 
执行数据库迁移命令,让Django根据定义的模型创建对应的数据库表:
 
python manage.py makemigrations
python manage.py migrate
 
 
5. 插入示例数据(可以通过Django shell或其他方式)
 
这里通过Django shell来插入示例数据。打开Django shell:
 
python manage.py shell
 
 
在shell中输入以下代码来插入示例数据:
 
from sales_analysis_app.models import SalesData
from datetime import date

data_list = [
    SalesData(product_name='Product A', sale_date=date(2024, 1, 1), quantity_sold=10, unit_price=25.50),
    SalesData(product_name='Product B', sale_date=date(2024, 1, 2), quantity_sold=15, unit_price=18.00),
    SalesData(product_name='Product A', sale_date=date(2024, 1, 3), quantity_sold=8, unit_price=22.00),
    SalesData(product_name='Product C', sale_date=date(2024, 1, 4), quantity_sold=12, unit_price=30.00),
    SalesData(product_name='Product B', sale_date=date(2024, 1, 5), quantity_sold=9, unit_price=19.50),
]

for data in data_list:
    data.save()
 
 
6. 创建视图函数进行数据分析和展示(views.py)
 
在  sales_analysis_app  应用的  views.py  文件中,创建视图函数来从数据库读取数据、进行分析并准备数据用于在模板中展示。
 
from django.shortcuts import render
from sales_analysis_app.models import SalesData
import pandas as pd
import matplotlib.pyplot as plt
import io
import base64

def sales_analysis_view(request):
    # 从数据库读取数据
    data = SalesData.objects.all()

    # 将数据转换为DataFrame
    df = pd.DataFrame(list(data.values()))

    # 数据基本信息
    data_info = df.info()

    # 描述性统计
    data_describe = df.describe()

    # 按产品名称分组并计算销售总量
    grouped_data = df.groupby('product_name')['quantity_sold'].sum()

    # 可视化 - 绘制各产品销售总量柱状图
    plt.bar(grouped_data.index, grouped_data.values)
    plt.xlabel('产品名称')
    plt.ylabel('销售总量')
    plt.title('各产品销售总量')

    # 将绘制的图片转换为base64编码,以便在HTML中显示
    img = io.BytesIO()
    plt.savefig(img, format='png')
    img.seek(0)
    plot_url = base64.b64encode(img.getvalue()).decode('utf-8')

    plt.close()

    return render(request, 'sales_analysis.html', {
        'data_info': data_info,
        'data_describe': data_describe,
        'grouped_data': grouped_data,
        'plot_url': plot_url
    })
 
 
7. 创建模板文件(sales_analysis.html)
 
在  sales_analysis_app  应用的  templates  目录下(如果没有则创建),创建一个名为  sales_analysis.html  的模板文件,用于展示数据分析结果。
 
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>销售数据分析</title>
</head>

<body>
    <h1>销售数据分析</h1>

    <h2>数据基本信息</h2>
    <pre>{{ data_info }}</pre>

    <h2>描述性统计</h2>
    <pre>{{ data_describe }}</pre>

    <h2>各产品销售总量</h2>
    <ul>
        {% for product, quantity in grouped_data.items() %}
        <li>{{ product }}: {{ quantity }}</li>
        {% endfor %}
    </ul>

    <h2>各产品销售总量柱状图</h2>
    <img src="data:image/png;base64,{{ plot_url }}" alt="各产品销售总量柱状图">

</body>

</html>

 

以下是一个使用Django实现后端接口,结合Vue.js实现前端展示的前后端分离的示例,用于进行简单的销售数据分析(与前面示例类似的数据结构和分析需求)。

 

后端部分(Django)

 

1. 创建Django项目和应用

 

首先创建一个Django项目(假设项目名为  sales_analysis_project )和一个应用(假设应用名为  sales_analysis_app ):

 

# 创建Django项目

django-admin startproject sales_analysis_project

 

# 进入项目目录

cd sales_analysis_project

 

# 创建应用

python manage.py startapp sales_analysis_app

 

 

2. 配置数据库连接(settings.py)

 

在  sales_analysis_project  项目的  settings.py  文件中,配置数据库连接。这里以MySQL为例,确保已经安装了  mysqlclient  库(可以通过  pip install mysqlclient  安装)。

 

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'your_database_name',

        'USER': 'your_username',

        'PASSWORD': 'your_password',

        'HOST': 'localhost',

        'PORT': '3306',

    }

}

 

 

记得将  your_database_name 、 your_username  和  your_password  替换为你自己的真实数据库信息。

 

3. 定义数据库模型(models.py)

 

在  sales_analysis_app  应用的  models.py  文件中,定义与数据库表对应的模型类。这里假设我们要分析销售数据,与之前示例类似,创建一个  SalesData  模型来表示销售数据表。

 

from django.db import models

 

class SalesData(models.Model):

    product_name = models.CharField(max_length=255)

    sale_date = models.DateField()

    quantity_sold = models.IntegerField()

    unit_price = models.DecimalField(max_length=10, decimal_places=2)

 

    def __str__(self):

        return f"{self.product_name} - {self.sale_date}"

 

 

4. 数据库迁移

 

执行数据库迁移命令,让Django根据定义的模型创建对应的数据库表:

 

python manage.py makemigrations

python manage.py migrate

 

 

5. 插入示例数据(可以通过Django shell或其他方式)

 

这里通过Django shell来插入示例数据。打开Django shell:

 

python manage.py shell

 

 

在shell中输入以下代码来插入示例数据:

 

from sales_analysis_app.models import SalesData

from datetime import date

 

data_list = [

    SalesData(product_name='Product A', sale_date=date(2024, 1, 1), quantity_sold=10, unit_price=25.50),

    SalesData(product_name='Product B', sale_date=date(2024, 1, 2), quantity_sold=15, unit_price=18.00),

    SalesData(product_name='Product A', sale_date=date(2024, 1, 3), quantity_sold=8, unit_price=22.00),

    SalesData(product_name='Product C', sale_date=date(2024, 1, 4), quantity_sold=12, unit_price=30.00),

    SalesData(product_name='Product B', sale_date=date(2024, 1, 5), quantity_sold=9, unit_price=19.50),

]

 

for data in data_list:

    data.save()

 

 

6. 创建API视图函数(views.py)

 

在  sales_analysis_app  应用的  views.py  文件中,创建API视图函数来提供数据接口,供前端调用获取数据进行展示。

 

from django.http import JsonResponse

from django.shortcuts import get_object_or_404

from sales_analysis_app.models import SalesData

import pandas as pd

 

def sales_data_api(request):

    data = SalesData.objects.all()

 

    # 将数据转换为DataFrame

    df = pd.DataFrame(list(data.values()))

 

    # 数据基本信息

    data_info = df.info()

 

    # 描述性统计

    data_describe = df.describe()

 

    # 按产品名称分组并计算销售总量

    grouped_data = df.groupby('product_name')['quantity_sold'].sum()

 

    response_data = {

        'data_info': str(data_info),

        'data_describe': data_describe.to_dict(),

        'grouped_data': grouped_data.to_dict()

    }

 

    return JsonResponse(response_data)

 

 

这里将数据分析结果整理成字典形式,通过  JsonResponse  以JSON格式返回给前端。

 

7. 配置URL路由(urls.py)

 

在  sales_analysis_app  应用的  urls.py  文件中(如果没有则创建),配置URL路由,将指定路径映射到  sales_data_api  视图函数。

 

from django.urls import path

from. import views

 

urlpatterns = [

    path('api/sales-data/', views.sales_data_api, name='sales_data_api')

]

 

 

同时,在  sales_analysis_project  项目的主  urls.py  文件中,包含应用的  urls.py  文件:

 

from django.contrib import admin

from django.urls import path, include

 

urlpatterns = [

    path('admin/', admin.adminPage()),

    path('', include('sales_analysis_app.urls'))

]

 

 

前端部分(Vue.js)

 

1. 创建Vue.js项目

 

首先确保已经安装了Vue CLI(可以通过  npm install -g vue-cli  安装),然后创建一个Vue.js项目(假设项目名为  sales-analysis-frontend ):

 

vue create sales-analysis-frontend

 

 

在创建过程中,可以根据提示选择默认配置或其他适合的配置选项。

 

2. 安装Axios用于HTTP请求

 

进入到  sales-analysis-frontend  项目目录下,安装Axios库,用于向后端发送HTTP请求获取数据:

 

cd sales-analysis-frontend

npm install axios

 

 

3. 创建组件用于展示数据

 

在  src/components  目录下(如果没有则创建),创建一个名为  SalesAnalysis.vue  的组件,用于展示从后端获取的数据分析结果。

 

<template>

    <div>

        <h1>销售数据分析</h1>

 

        <h2>数据基本信息</h2>

        <pre>{{ dataInfo }}</pre>

 

        <h2>描述性统计</h2>

        <table>

            <tr v-for="(value, key) in dataDescribe" :key="key">

                <td>{{ key }}</td>

                <td>{{ value }}</td>

            </tr>

        </table>

 

        <h2>各产品销售总量</h2>

        <ul>

            <li v-for="(quantity, product) in groupedData" :key="product">

                {{ product }}: {{ quantity }}

            </li>

        </ul>

    </div>

</template>

 

<script>

import axios from 'axios';

 

export default {

    data() {

        return {

            dataInfo: '',

            dataDescribe: {},

            groupedData: {}

        };

    },

    mounted() {

        this.fetchData();

    },

    methods: {

        fetchData() {

            axios.get('http://localhost:8000/api/sales-data/')

               .then(response => {

                    this.dataInfo = response.data.data_info;

                    this.dataDescribe = response.data.data_describe;

                    this.groupedData = response.data.grouped_data;

                })

               .catch(error => {

                    console.error('获取数据失败:', error);

                });

        }

    }

};

</script>

 

<style>

/* 可以在这里添加一些样式来美化页面 */

</style>

 

 

在这个组件中:

 

- 通过  axios.get  向后端的  http://localhost:8000/api/sales-data/  接口发送请求获取数据。

- 在获取到数据后,将数据分别赋值给组件的  data  中的相应变量,以便在模板中展示。

 

4. 在主应用中使用组件

 

在  src/App.vue  文件中,使用创建的  SalesAnalysis.vue  组件来展示销售数据分析结果。

 

<template>

    <div id="app">

        <SalesAnalysis />

    </div>

</template>

 

<script>

import SalesAnalysis from './components/SalesAnalysis.vue';

 

export default {

    components: {

        SalesAnalysis

    }

};

</script>

 

<style>

/* 可以在这里添加一些样式来美化页面 */

</style>

 

 

现在,先启动Django后端服务器( python manage.py runserver ),然后在另一个终端启动Vue.js前端项目(在  sales-analysis-frontend  项目目录下执行  npm run serve )。之后在浏览器中访问Vue.js前端项目运行的地址(通常是  http://localhost:8080/ ),就可以看到销售数据分析的结果展示,包括数据基本信息、描述性统计、各产品销售总量等内容。

 

请注意:

 

- 上述代码中的数据库信息、示例数据等都可以根据实际需求进行调整和扩展。

- 在实际应用中,可能需要进一步优化代码结构、添加更多的数据分析功能和页面样式等。

- 后端的Django项目和前端的Vue.js项目可以根据实际情况部署在不同的服务器上,这里为了方便演示,在本地同时启动了两者。

 


http://www.kler.cn/a/383093.html

相关文章:

  • Ubuntu 22.04.5 LTS 安装Python 3.12 从源代码安装指南(2024年10月28日亲测)
  • 5.Java 数组(一维数组、二维数组、数组实例实操)
  • springboot集成opencv开源计算机视觉库
  • docker+nacos
  • PostgreSQL JOIN 操作深入解析
  • Multi Agents协作机制设计及实践
  • 如何选择适合TikTok创作者的高性价比专线网络:全方位指南
  • 【算法篇】--重温算法题
  • Pulsargeist:恐怖类型的 XR 大空间项目创新玩法
  • SQL练习专场--01
  • 【glm4-voice-9b 本地运行并测试 gradio+notebook】
  • 探索空间计算与 VR 设备的未来:4K4DGen 高分辨率全景 4D 内容生成系统
  • ssm061基于SSM框架的个人博客网站的设计与实现+vue(论文+源码)_kaic
  • AI 搜索来势汹汹,互联网将被颠覆还是进化?
  • Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
  • 使用 Let’s Encrypt 获取免费SSL证书
  • 城镇住房保障系统:SpringBoot开发要点
  • TLU - Net:一种用于钢材表面缺陷自动检测的深度学习方法
  • c语言架构的一点构想
  • 挂钩图像分割安全状态与危险状态识别系统:更新创新流程
  • 推荐一款可视化和检查原始数据的工具:RawDigger
  • Midjourney从入门到精通教程,10分钟让你从小白变大神!【珍藏版】
  • Bert完形填空
  • Java基础使用①Java特点+环境安装+IDEA使用
  • 求猫用宠物空气净化器推荐,有没有吸毛强、噪音小的产品
  • Linux awk命令详解-参数-选项-内置变量-内置函数-脚本(多图、多示例)