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