python基于svm项目+课程设计报告_基于Python的数据分析实战项目

4feb1d7770357e1994898b413de3c76a.png
本文中项目资料来源于网易云课堂,代码为纯手工码字滴,请放心食用,不定期更新,欢迎对Python、数据分析以及编程感兴趣的同学留言沟通。

详细介绍了数十个数据分析相关的实战项目,大量使用pandas、numpy、matplotlib、seaborn以及bokeh等包,少量涉及sklearn中机器学习相关包,对一些诸如蒙特卡罗模拟思想使用代码加以实现,并详细讲述实现细节以及注意要点。

目录

  • 1 商铺数据加载及存储
    • 1.1 项目要求
    • 1.2 原始数据展示
    • 1.3 实际操作
      • 1.3.1 读取数据
      • 1.3.2 数据清洗
      • 1.3.3 拆分点评字段
      • 1.3.4 解析数据

1 商铺数据加载及存储

1.1 项目要求

  1. 成功读取“商铺数据.csv”文件
  2. 解析数据,存成列表字典格式:[{'var1':value1,'var2':value2,'var3':values,...},...,{}]
  3. 数据清洗:
    1. comment,price两个字段清洗成数字
    2. 清除字段缺失的数据
    3. commentlist拆分成三个字段,并且清洗成数字
  4. 结果存为.pkl文件

1.2 原始数据展示

通过爬虫在某点评APP上获取一下店铺数据,包含了7个字段,字段名及其对应的含义分别是:classify(店铺类别),name(店铺名),comment(点评人数),star(星级),price(平均消费),address(地址),commentlist(特定指标评分),以下为部分数据展示:

classify | name | comment | star | price | address | commentlist

----- | ----- | ----- | ----- | ----- | ----- | -----

美食 | 望蓉城老坛酸菜鱼(合生汇店) | 我要点评 | 该商户暂无星级 | 人均 ¥125 | 翔殷路1099号合生汇5F | 口味8.3 环境8.4 服务8.5

美食 | 泰国街边料理 | 74 条点评 | 准四星商户 | 人均 ¥48 | 黄兴路合生汇B2美食集市内 | 口味7.4 环境7.6 服务7.4

美食 | 壹面如故(苏宁生活广场店) | 265 条点评 | 准四星商户 | 人均 ¥21 | 邯郸路585号苏宁生活广场B1层 | 口味7.0 环境7.2 服务7.2

因为直接获取回来的数据并未进行数据清洗,因此存在以下几个问题:

  1. 文本数据存在多余的空格(或不可显示的制表符等),需要清除;
  2. 部分可以量化的指标需要转化为数值格式如星级等,另外平均消费字段中的价格也有多余的文本信息需要删除;
  3. 可选操作:通过将csv文件转存为pkl文件,不仅可以减少文件大小还可以一定程度对文件内容进行加密。

1.3 实际操作

1.3.1 读取数据

基于python有多种文件读取方式,其中较为常用的读取文本数据的方式如下所示:

with 

其中第二个参数是指定文件操作方式:r(读取,rb二进制文件读取),w(写入,wb二进制文件写入),encoding参数为文件编码格式,一般包含中文的都选用'utf-8'编码格式。

另一种读取文件的方式是采用pandas提供的读取csv、xlsx等表格文件的方式:pd.read_csv(),pd.read_excel(),此外pandas还包含多种读取文件的方式如pd.read_sql()可以直接从数据库读取特定sql查询结果的数据,这里不做展开。

本项目我们采用read_csv方式快速读取原始数据,由于windows系统打开csv文件时会在文件开头添加一些字符,因此如果在用Python读取文件前打开过原始数据,则再次读取数据后第一个字段名就不再是原来的字段了,比如说第一个字段名是classify,那么在windows上使用office等软件打开过一次的文件第一个字段名将不再是 classify ,而是前面还有一个字符,因此我们应该尽量避免直接打开csv文件,或者在读取文件后重命名字段列表,如下所示:

import 

代码中的os.chdir(os.getcwd())作用是将工作路径设置为脚本所在绝对路径,这在项目所在文件夹进行移动复制的时候尤为管用,不论文件夹在何处,只要文件夹内各文件与脚本的相对位置不变,脚本都可以正确执行,而不用手工设置工作路径。

1.3.2 数据清洗

这里的数据清洗与一般意义上的去除异常值、处理缺失值等不同,更偏向于文本数据的清洗,即将文本数据整理地更规整便于后续分析使用,这里我将按照不同的处理方式分别定义匿名函数,具体代码如下所示:

(1) 直接去除多余空格,其实本例更为简单的做法是使用pandas数据框自带的方法,df['字段1'].str.replace(' ',''),处理效果与使用apply函数调用以下匿名函数完全相同:

# 简单清洗,去除多余的空格

(2) 提取评论人数,涉及字符串分割知识即str.split(特定字符):

# 清洗评论人数

(3) 这里想法是将中文一到五转化为阿拉伯数字1到5,并不考虑准N星与N星的区别,即星级只有整数无小数情况,具体实现过程为构建一一对应的字典,并将原始数据与字典的键进行匹配:

# 清洗星级

(4) 清洗价格主要是提取文本信息中的数字部分,并剔除货币符号:

# 清洗价格

除了以下的实现方式外,还可以考虑使用正则表达式进行匹配,如:

import 

(5) 点评详情数据中有大量多余空格并且数量不一致,因此可以通过以下匿名函数实现清洗工作,该函数为经验得到无特殊思路:

# 清洗点评详情

定义完匿名函数,通过apply函数即可轻松将其应用到整个数据框中,最后再去除缺失值即可,调用方法如下所示:

# 清洗 'classify', 'name', 'address'

1.3.3 拆分点评字段

我们注意到commentlist(点评字段)包含了3个评分,因此我们需要将其拆分,为简化处理至设置3个指标——口味、环境和服务,具体代码如下所示:

# 拆分点评数据

或者采用以下更为简洁的形式,其中enumerate()为枚举类型,返回结果为一个元组——(index,value),代表了索引位置和实际值:

def 

1.3.4 解析数据

最后解析数据较为简单,即将数据框转换为Json格式再转存pkl文件,Json格式的数据可以看做是字典列表,是网页数据常见的数据结构,具体实现过程如下:

# 2.解析数据
商铺数据加载及存储​github.com

欢迎大家关注我的公众号:Allen陪你玩数据

81a0e49d3a153f16f51424bd6ffdefd3.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值