import re
from pymongo import MongoClient
import pandas as pd
import numpy as np
import pymysql
def pre_process(df):
"""
数据预处理函数
:param df: dataFrame
:return: df
"""
# 将数据中车的行驶路程单位万公里去掉 方便后续计算 比如:1.2万公里
df['car_run'] = df['car_run'].apply(lambda x:x.split('万公里'))
# 将数据中car_push字段中有未上牌的数据删除
df['car_push'] = df['car_push'].apply(lambda x:x if not x=="未上牌" else np.nan)
# 删除字段中存在有NAN的数据
df.dropna(inplace=True)
return df
def car_brand_count_top10(df):
"""
计算不同品牌的数量的前十名
:param df: dataFrame
:return: df
"""
# 按照汽车的品牌进行分类
grouped = df.groupby('car_series')['car_run'].count().reset_index().sort_values(by="car_run",ascending=False)[:10]
data = [[i['car_series'],i['car_run']] for i in grouped.to_dict(orient="records")]
print(data)
return data
def car_use_year_count(df):
"""
计算二手车的使用时间
:param df: dataFrame
:return: df
"""
# 处理汽车的变卖时间
date = pd.to_datetime(df['car_push'])
date_value = pd.DatetimeIndex(date)
df['car_push_year'] = date_value.year
# 转换数据类型为int
df['car_time_style'] = df['car_time_style'].astype(np.int)
df['car_push_year'] = df['car_push_year'].astype(np.int)
df['cae_use_year'] = df['car_push_year']-df['car_time_style']
# 对车的使用年限进行分类
grouped = df.groupby('cae_use_year')['car_series'].count().reset_index()
# 将使用年限为负的字段删除 并根据使用年限进行分组 分为 <一年 一年~三年 >三年
grouped = grouped.query('cae_use_year>=0')
grouped.loc[:,'cae_use_year'] = grouped.loc[:,'cae_use_year'].apply(lambda x:"<一年" if x==0 else x )
grouped.loc[:,'cae_use_year'] = grouped.loc[:,'cae_use_year'].apply(lambda x:"一年~三年" if not x =='<一年' and x>0 and x<3 else x )
grouped.loc[:,'cae_use_year'] = grouped.loc[:,'cae_use_year'].apply(lambda x:">三年" if not x =='<一年' and not x=="一年~三年" and x>=3 else x )
# 再根据不同使用年限进行分组
grouped_use_year = grouped.groupby('cae_use_year')['car_series'].sum().reset_index()
data = [[i['cae_use_year'],i['car_series']] for i in grouped_use_year.to_dict(orient="records")]
print(data)
return data
def car_place_count(df):
"""
计算不同地区的二手车数量
:param df: dataFrame
:return: df
"""
grouped = df.groupby('car_place')['car_series'].count().reset_index()
data = [[i['car_place'],i['car_series']] for i in grouped.to_dict(orient="records")]
print(data)
return data
def car_month_count(df):
"""
计算每个月的二手车数量
:param df: dataFrame
:return: df
"""
# 处理汽车的变卖时间
date = pd.to_datetime(df['car_push'])
date_value = pd.DatetimeIndex(date)
month = date_value.month
df['car_push_month'] = month
# 对汽车变卖的月份进行分组
grouped = df.groupby('car_push_month')['car_series'].count().reset_index()
data = [[i['car_push_month'],i['car_series']] for i in grouped.to_dict(orient="records")]
print(data)
return data
def save(cursor,sql,data):
result = cursor.executemany(sql,data)
if result:
print('插入成功')
if __name__ == '__main__':
# 1 从MongoDB中获取数据
# 初始化MongoDB数据连接
# client = MongoClient()
# collections = client['test']['car_home']
# 获取MongoDB数据
# cars = collections.find({},{'_id':0})
# 2 读取xlsx文件数据(已将MongoDB中数据转换成xlsx格式)
cars = pd.read_excel('./carhome.xlsx',engine='openpyxl')
# 将数据转换成dataFrame类型
df = pd.DataFrame(cars)
print(df.info())
print(df.head())
# 对数据进行预处理
df = pre_process(df)
# 计算不同品牌的数量的前十名
data1 = car_brand_count_top10(df)
# 计算二手车的使用时间
data2 = car_use_year_count(df)
# 计算不同地区的二手车数量
data3 = car_place_count(df)
# 计算每个月的二手车数量
data4 = car_month_count(df)
# 创建mysql连接
conn = pymysql.connect(user='root',password='123456',host='localhost',port=3306,database='car_home',charset='utf8')
try:
with conn.cursor() as cursor:
# 计算不同品牌的数量的前十名
sql1 = 'insert into db_car_brand_top10(brand,count) values(%s,%s)'
save(cursor,sql1,data1)
# 计算二手车的使用时间
sql2 = 'insert into db_car_area(area,count) values(%s,%s)'
save(cursor,sql2,data2)
# 计算不同地区的二手车数量
sql3 = 'insert into db_car_use_year(year_area,count) values(%s,%s)'
save(cursor, sql3, data3)
# 计算每个月的二手车数量
sql4 = 'insert into db_car_month(month,count) values(%s,%s)'
save(cursor,sql4,data4)
conn.commit()
except pymysql.MySQLError as error:
print(error)
conn.rollback()
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Python爬虫实战+数据分析+数据可视化(汽车之家).zip (23个子文件)
car_home-master
car_home
__init__.py 483B
models.py 745B
utils
car_home.py 4KB
carhome.xlsx 1.32MB
analysis.py 5KB
to_excle.py 666B
templates
showPie.html 2KB
showLine.html 3KB
index.html 868B
showBrandBar.html 2KB
showAreaBar.html 2KB
api_1_0
__init__.py 111B
show.py 1KB
__pycache__
show.cpython-36.pyc 2KB
__init__.cpython-36.pyc 307B
__pycache__
__init__.cpython-36.pyc 680B
models.cpython-36.pyc 1KB
static
js
vintage.js 993B
echarts.min.js 950KB
manager.py 370B
.gitignore 34B
__pycache__
config.cpython-36.pyc 775B
config.py 342B
共 23 条
- 1
资源评论
乐韬科技
- 粉丝: 20
- 资源: 107
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 华为HCIA-WLAN 3.0 课程视频(45 STA无法上线故障排查.mp4)
- 华为HCIA-WLAN 3.0 课程视频(44 AP无法上线故障排查(下).mp4)
- 华为HCIA-WLAN 3.0 课程视频(43 AP无法上线故障排查(上).mp4)
- python实现基于U-net和MRI图像的膀胱壁边缘以及膀胱肿瘤检测(高准确率)+源码+开发文档+模型训练(毕业设计&课程设计
- 华为HCIA-WLAN 3.0 课程视频(42 WLAN系统维护的方法及故障处理命令.mp4)
- 华为HCIA-WLAN 3.0 课程视频(41 WLAN故障处理一般流程(下).mp4)
- C++基于OpenCV+Qt的人脸识别考勤系统-毕业设计+源代码+文档说明.zip
- python爬虫资源下载
- 华为HCIA-WLAN 3.0 课程视频(40 WLAN故障处理一般流程(上).mp4)
- PHP教材管理系统设计(源码+数据库)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功