python数据分析笔记

一、数据分析简介

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

二、数据获取

(一)从文件读取

  1. CSV 文件

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

import pandas as pd

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

  1. 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"

)

  1. 查询数据

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

三、数据探索

(一)查看数据结构

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

(二)数据类型查看

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

(三)数据维度

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

四、数据清洗

(一)处理缺失值

  1. 删除缺失值

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

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

  1. 填充缺失值

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]

  1. 切片操作

按行或列索引进行切片,如 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()

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

柱状图:

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)

  1. 关系图绘制

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

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

首先,需要在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语句,向表中插入了一些示例销售数据。

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

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

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

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

  1. 配置数据库连接(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 替换为你自己的真实数据库信息。

  1. 定义数据库模型(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}"

  1. 数据库迁移

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

python manage.py makemigrations

python manage.py migrate

  1. 插入示例数据(可以通过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()

  1. 创建视图函数进行数据分析和展示(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

})

  1. 创建模板文件(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

  1. 配置数据库连接(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 替换为你自己的真实数据库信息。

  1. 定义数据库模型(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}"

  1. 数据库迁移

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

python manage.py makemigrations

python manage.py migrate

  1. 插入示例数据(可以通过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()

  1. 创建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格式返回给前端。

  1. 配置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

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

  1. 安装Axios用于HTTP请求

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

cd sales-analysis-frontend

npm install axios

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

在 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 中的相应变量,以便在模板中展示。

  1. 在主应用中使用组件

在 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项目可以根据实际情况部署在不同的服务器上,这里为了方便演示,在本地同时启动了两者。

相关推荐
mosquito_lover13 小时前
Python数据分析与可视化实战
python·数据挖掘·数据分析
QQ__17646198244 小时前
Labview信号采集与分析系统(可仿真)
数据分析·数据采集·labview
奔跑吧邓邓子5 小时前
【家政平台开发(9)】家政平台数据分析需求:从采集到可视化全攻略
数据分析·需求分析·家政平台开发
赵钰老师5 小时前
【Deepseek、ChatGPT】智能气候前沿:AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测中的应用
人工智能·python·深度学习·机器学习·数据分析
大美B端工场-B端系统美颜师6 小时前
定制化管理系统与通用管理系统,谁更胜一筹?
人工智能·信息可视化·数据挖掘·数据分析
jinan8867 小时前
企业的移动终端安全怎么管理?
大数据·网络·安全·数据分析·开源软件
胖子君7 小时前
商业智能工具综合评估报告(2025年)
数据分析
SelectDB1 天前
拉卡拉 x Apache Doris:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%
大数据·数据库·数据分析
冷月半明1 天前
《Pandas 性能优化:向量化操作 vs. Swifter 加速,谁才是大数据处理的救星?》
python·数据分析·pandas