-
大数据实训.zip数据收集:网络爬虫、公开数据集、客户数据 数据处理:数据清洗、数据规整
2020-01-16 21:59:50数据收集:网络爬虫、公开数据集、客户数据 数据处理:数据清洗、数据规整 数据分析:数据统计、探索性数据分析(EDA)、数据建模 结果展示:数据可视化、报表生成、结果保存 数据收集:获取歌单索引页、... -
《Python3爬虫、数据清洗与可视化》pdf+配套代码+数据集.zip
2019-07-28 00:02:10《Python3爬虫、数据清洗与可视化》pdf+配套代码+数据集,亲测全部有效,提供给大家学习交流!欢迎下载 -
CASIA-WebFace数据集清洗
2019-08-21 16:42:19中科院李子青课题组于2014年发布的CASIA-WebFace数据集收集了10000多个名人的照片,然而,这些照片是在网上用爬虫扒下来的,所以有一些数据存在问题,这里对这个数据集做清洗。 1:使用RetinaFace对给定的图片做人脸...中科院李子青课题组于2014年发布的CASIA-WebFace数据集收集了10000多个名人的照片,然而,这些照片是在网上用爬虫扒下来的,所以有一些数据存在问题,这里对这个数据集做清洗。
1:使用RetinaFace对给定的图片做人脸检测,对于提取不到landmark/boundingbox的图片逐个做分析。
2:将图像缩小送进网络训练发现很多都可以检测出来了,其实retinaface对尺度比较小的图片效果会好很多 -
知乎问题爬虫数据集(共十万条 经过简单清洗)
2019-04-10 21:30:44手动爬取的知乎问题数据,共十万条,已做过简单清洗。 数据集格式描述如下: id | 标题 | 回答数 | 关注数 | 浏览数 | 标签 【仅供学习使用,请勿商用】 -
机器学习数据准备:爬取数据+清洗生成数据集
2020-01-10 21:40:44爬取完数据之后,需要对数据进行清洗,使其成为能够被我们利用的数据集。这里我爬取了一个手机尺寸的网站,准备计算得到其高宽信息,并生成了一个数据集。后面会根据这个数据集进行一下分类操作。 当然现在如果把...前言
机器学习很重要的一部分就是数据,因此可以通过爬虫爬取一些数据。爬取完数据之后,需要对数据进行清洗,使其成为能够被我们利用的数据集。这里我爬取了一个手机尺寸的网站,准备计算得到其高宽信息,并生成了一个数据集。后面会根据这个数据集进行一下分类操作。
当然现在如果把爬虫爬到的数据用于商业,现在很多时候是不合法的,还是要注意点。准备工作
这里使用的是python 3.6进行实现的,需要安装如下一些库:
beautifulsoup4 requests lxml tensorflow scikit-learn pandas matplotlib
这些库一部分是后面四个是用于分类的,可以先不下。我们这边就使用了requests+beautifulsoup+lxml爬取数据并进行结构分析。
主要工作
发送请求下载页面
可以直接解析页面,但保险起见还是先下载下来然后在进行处理比较好,不然重复请求别人的网页也不是很好也没什么必要,所以写了一个从txt中读取保存页面的函数。
因为有好几个页面,所以循环调用了好次,将页面都保存为txt文件。主要函数如下:PAGES = ['index', 'pad', 'watch', 'computer', 'display'] def get_page_content_crawler(url, page_name): try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36', } url = url % page_name page_content = requests.get(url=url, headers=headers) page_content.encoding = 'utf-8' content = page_content.text save_page_content2txt(content, page_name) return content except: s = sys.exc_info() print("Error '%s' happened on line %d" % (s[1], s[2].tb_lineno)) return "ERROR" def get_page_content_from_txt(page_name): with open('%s.txt' % page_name, 'r') as f: html = f.read() soup = BeautifulSoup(html, 'lxml') # 采用lxml进行解析 return soup def save_page_content2txt(content, page_name): with open('%s.txt' % page_name, 'w') as f: for i in content: f.write(i)
读取页面并解析
页面如下所示,是一个表格:
分析网页html的结构如下,可以发现有且仅有一个tbody,而每个设备的信息都是存在一个tr里面的,相关信息也是有对应的class。<tbody> <tr> <td class="td01" valign="middle">iPhone 11 Pro</td> <td class="td02" valign="middle">iOS</td> <td class="td03" valign="middle">5.8</td> <td class="td04" valign="middle">458</td> <td class="td05" valign="middle">19 : 9</td> <td class="td06" valign="middle">414 x 896</td> <td class="td07" valign="middle">1125 x 2436</td> <td class="td08" valign="middle">3.0 <font class="gray01">xxhdpi</font> </td> </tr> ......
因此撰写结构分析的代码:
def extract_content2excel(soup, page_name): all_devices = soup.find('tbody') one_device = all_devices.find_all_next('tr') with open('%s.csv' % page_name, 'w') as f: writer = csv.writer(f) header = ['name', 'device_os', 'size', 'ppi', 'aspect_ratio', 'wh_dp', 'wh_px', 'dpi'] writer.writerow(header) for device in one_device: name = device.find('td', class_='td01').text device_os = device.find('td', class_='td02').text.replace(' ', '') size = device.find('td', class_='td03').text.replace(' ', '') ppi = device.find('td', class_='td04').text.replace(' ', '') aspect_ratio = device.find('td', class_='td05').text.replace(' ', '') wh_dp = device.find('td', class_='td06').text.replace(' ', '') wh_px = device.find('td', class_='td07').text.replace(' ', '') dpi = device.find('td', class_='td08').text.replace(' ', '').replace('\n', '') content = [name, device_os, size, ppi, aspect_ratio, wh_dp, wh_px, dpi] writer.writerow(content)
将其中一些空格去除,然后存入一个csv文件中,多个页面会有多个文件。
生成数据集
整合多个csv文件
csv文件是以逗号为分割符的,有多种方式可以读取。爬取的数据如下,我们可以知道手机屏幕是多少吋,一般是指对角线的长度,而
1寸=2.54厘米
,因此可以根据尺寸和纵横比计算手机的高和宽。name,device_os,size,ppi,aspect_ratio,wh_dp,wh_px,dpi iPhone 11 Pro,iOS,5.8,458,19:9,414x896,1125x2436,3.0xxhdpi iPhone 11 Pro Max,iOS,6.5,458,19:9,414x896,1242x2688,3.0xxhdpi iPhone 11 (11,XR),iOS,6.1,326,19:9,414x896,828x1792,2.0xhdpi iPhone XS Max,iOS,6.5,458,19:9,414x896,1242x2688,3.0xxhdpi .......
这里取第三列和第五列的数据即可,根据上面的公式计算得到高和宽:
def read_csv(page_name): ''' 读取csv中的数据 :param page_name:文件的名称 :return: np格式的str list(name, height, width) ''' with open('%s.csv' % page_name, 'r', encoding='UTF-8') as f: f_csv = csv.reader(f) header = next(f_csv) # 忽略表头 device_info = np.empty([0, 3]) for r in f_csv: if r[2][0] == '-' or r[4][0] == '-': # 清洗数据 continue height, width = get_wh_from_size(r[2], r[4]) one_device = (r[0], height, width) # 这里会导致height和width转化成str device_info = np.row_stack((device_info, one_device)) return device_info def get_wh_from_size(size, aspect_ratio): ''' 解析csv文件中的数据 :param size: 手机尺寸(吋表示对角线) :param aspect_ratio: 纵横比 :return: 高、宽(单位已经转化为cm) ''' ratio = map(float, aspect_ratio.split(':')) height_ratio, width_ratio = list(ratio) hypotenuse_ratio = math.sqrt(height_ratio**2 + width_ratio**2) hypotenuse_cm = float(size) * 2.54 height = round((height_ratio * hypotenuse_cm / hypotenuse_ratio), 2) width = round((width_ratio * hypotenuse_cm / hypotenuse_ratio), 2) return height, width
可视化并保存数据集
使用添加的方式将每一行保存到
data.csv
中,这里写的不算特别好,因为每次添加一行都进行了一次文件打开的操作,有点消耗内存,可以考虑所有的存储为array再打开文件。def draw_scatter(): # 拼接三个数据 devices = [] for page in PAGE: device_info = read_csv(page) devices.append(device_info) all_data = [] for device in devices: point = (device.T[1], device.T[2]) all_data.append(point) groups = ('phone', 'pad', 'PC') colors = ('red', 'blue', 'green') # Create plot fig = plt.figure() ax = fig.add_subplot(1, 1, 1) for data, color, group in zip(all_data, colors, groups): x, y = data print(group, "的数量是:", len(x)) index = groups.index(group) save_data_csv(index, list(x.T), list(y.T)) print(x.shape, y.shape) x = list(map(np.float32, x)) y = list(map(np.float32, y)) ax.scatter(x, y, alpha=1, c=color, edgecolors='none', s=30, label=group) ax.axis('auto') plt.title('Device Size Scatter') plt.legend(loc=2) plt.xlabel('height') plt.ylabel('width') plt.show() def save_data_csv(label, *paras): # 添加,newline使得新行无回车 with open('data.csv', 'a+', newline='') as f: writer = csv.writer(f) if label == 0: writer.writerow(['height', 'width', 'label']) paras = np.array(paras).T for item in paras: content = [] for para in item: content.append(para) content.append(label) writer.writerow(content)
最终的数据分布如下:
数据格式如下,分为三列进行了保存:height,width,label 13.31,6.31,0 14.92,7.07,0 14.0,6.63,0 14.92,7.07,0 ... 20.73,15.54,1 16.05,12.04,1 21.34,16.0,1 ... 25.85,16.15,2 25.68,14.45,2 28.65,17.9,2
完成数据集制作之后我们就可以随意进行操作了。
参考链接
- https://www.jianshu.com/p/47908cd4f424
- https://uiiiuiii.com/screen
-
Python3爬虫、数据清洗与可视化配套资源
2019-04-20 23:54:39Python3爬虫、数据清洗与可视化配套资源代码和数据集 零一 韩要宾 黄园园 Python技术入门读物,通过实战教初学者 -
网页 禁止爬数据_爬网页、洗数据、创建海量数据集一条龙!英伟达工程师开源工具库...
2020-11-12 23:16:47乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI想做...爬网页、清洗数据、创建数据集都可以搞定。她说,使用这个库,你应该能创建一个比大于40G的文本数据集,比OpenAI训练GPT-2时使用的还要大。开源仅一天,项目在...乾明 发自 凹非寺
量子位 报道 | 公众号 QbitAI
想做研究,却没有足够的数据,着实让人抓狂、苦恼。
现在,你可以自己动手创建数据集了。
英伟达工程师小姐姐Chip Huyen,在GitHub上开源了一个名为“lazynlp”的工具库。
爬网页、清洗数据、创建数据集都可以搞定。
她说,使用这个库,你应该能创建一个比大于40G的文本数据集,比OpenAI训练GPT-2时使用的还要大。
开源仅一天,项目在GitHub上就获得了300多星,Twitter上获得上千次点赞。fast.ai创始人Jeremy Howard等人也转发推荐。
而且,用这个工具库创建数据集的过程,也并不麻烦。
五步走,一条龙
第一步,获取你想抓取的网页的网址。
小姐姐提供了三个你可以直接拿走使用的网址集合,分别来自Reddit、古腾堡计划(电子书)、维基百科。
当然,你也可以下载自己的。
第二步,删除重复的网址。
网址有很多,重复也在所难免。
这里提供了两种方法,来删除重复的网址。
第三步,下载网址内容。
这里提供了两种方法,一种可以并行下载多个文件,另一种可以单独下载网页内容。
如果网址数量比较大,可以将列表分成多个文件的,分别调用函数。
小姐姐说,自己能够并行40个脚本,下载起来也更容易一些。
第四步,清理网页。
这一步有3个方法可以选择,一是使用lazynlp/cleaner.py中的方法,二是直接调用命令行:
lazynlp.clean_page(page)
另外,也可以使用lazynlp.download_pages ( )函数,同时爬网页并清理。
第五步,删除重复网页。
网站下载好了,该清理的东西都清理了,接下来需要去重。
不然就会有一些文本重复出现,从而影响数据集的表现。
小姐姐提供了3个函数,可以帮你完成步骤。
做完这些,你就有自己的NLP数据集了,想干什么就可以放手去做了。
如果你有想法,请收好下面的传送门:
https://github.com/chiphuyen/lazynlp
-
网页 禁止爬数据_爬网页、洗数据、创建海量数据集一条龙!英伟达工程师小姐姐开源工具库...
2020-12-04 20:38:01乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI想做...爬网页、清洗数据、创建数据集都可以搞定。她说,使用这个库,你应该能创建一个比大于40G的文本数据集,比OpenAI训练GPT-2时使用的还要大。开源仅一天,项目在...乾明 发自 凹非寺
量子位 报道 | 公众号 QbitAI想做研究,却没有足够的数据,着实让人抓狂、苦恼。
现在,你可以自己动手创建数据集了。
英伟达工程师小姐姐Chip Huyen,在GitHub上开源了一个名为“lazynlp”的工具库。
爬网页、清洗数据、创建数据集都可以搞定。
她说,使用这个库,你应该能创建一个比大于40G的文本数据集,比OpenAI训练GPT-2时使用的还要大。
开源仅一天,项目在GitHub上就获得了300多星,Twitter上获得上千次点赞。fast.ai创始人Jeremy Howard等人也转发推荐。
而且,用这个工具库创建数据集的过程,也并不麻烦。
五步走,一条龙
第一步,获取你想抓取的网页的网址。
小姐姐提供了三个你可以直接拿走使用的网址集合,分别来自Reddit、古腾堡计划(电子书)、维基百科。
当然,你也可以下载自己的。
第二步,删除重复的网址。
网址有很多,重复也在所难免。
这里提供了两种方法,来删除重复的网址。
第三步,下载网址内容。
这里提供了两种方法,一种可以并行下载多个文件,另一种可以单独下载网页内容。
如果网址数量比较大,可以将列表分成多个文件的,分别调用函数。
小姐姐说,自己能够并行40个脚本,下载起来也更容易一些。
第四步,清理网页。
这一步有3个方法可以选择,一是使用lazynlp/cleaner.py中的方法,二是直接调用命令行:
lazynlp.clean_page(page)
另外,也可以使用lazynlp.download_pages ( )函数,同时爬网页并清理。
第五步,删除重复网页。
网站下载好了,该清理的东西都清理了,接下来需要去重。
不然就会有一些文本重复出现,从而影响数据集的表现。
小姐姐提供了3个函数,可以帮你完成步骤。
做完这些,你就有自己的NLP数据集了,想干什么就可以放手去做了。
如果你有想法,请收好下面的传送门:
https://github.com/chiphuyen/lazynlp
— 完 —
量子位 · QbitAI
վ'ᴗ' ի 追踪AI技术和产品新动态
戳右上角「+关注」获取最新资讯↗↗
如果喜欢,请分享or点赞吧~比心❤
-
-
爬网页、洗数据、创建海量数据集一条龙!英伟达工程师小姐姐开源工具库
2019-03-14 17:31:58爬网页、清洗数据、创建数据集都可以搞定。 她说,使用这个库,你应该能创建一个比大于40G的文本数据集,比OpenAI训练GPT-2时使用的还要大。 开源仅一天,项目在GitHub上就获得了300多星,Twitte... -
(6、Pandas数据分组、分割、合并和变形)Python爬虫与数据清洗的进化
2019-04-14 18:01:10数据分组 按照City分组,并计算sum值的平均数。 如果一次传入多个数组,就会得到按多列数值分组的统计结果。...pandas有一些内置的合并数据集方法,如下所示: pandas.merge根据一个或多个键将多个DataFrame连... -
Python爬虫之数据的提取和清洗的正则应用规则
2018-06-27 15:25:49最近在做一个项目,爬虫获取的数据可谓一锅粥,果断选择了正则表达式,下面是常用的规则:表达式全集字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”... -
laravel 创建一条数据 request->all_爬网页、洗数据、创建海量数据集一条龙!英伟达工程师小姐姐开源工具库...
2020-12-16 19:20:54乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI想做...爬网页、清洗数据、创建数据集都可以搞定。她说,使用这个库,你应该能创建一个比大于40G的文本数据集,比OpenAI训练GPT-2时使用的还要大。开源仅一天,项目在... -
Python爬虫---数据的提取和清洗的正则应用规则
2018-11-05 13:18:50最近在做一个项目,爬虫获取的数据可谓一锅粥,果断选择了正则表达式,下面是常用的规则: 表达式全集 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符... -
人脸数据清洗方法+代码汇总
2019-01-27 17:21:42这里的野数据集指的是从互联网上爬取出的原始人脸数据集,它的特点是:脏、乱、杂 。数据分布不均匀、尺寸不一、存在年龄跨度较大现象,图像格式命名错误且存在较多的冗余、杂质,但优点是类别数目大。使用前需要... -
西瓜数据集3.0_在线教育领域数据统计分析
2020-11-30 16:38:36一、这个数据集对应的产品与国内哪...网页地址如下:中小幼教育培训班_在线中小幼教育学习辅导班_中小幼教育培训价格-沪江网校数据集大小及特征:该数据集经简单清洗后,共计13个字段,492行,具体如下:ID:编号 ;... -
在自建的数据集上训练yolov3准备(二):树莓派自动采集图片,tensorflow_label_tool下载图片,yolo_mark...
2019-04-08 14:22:49上一篇文章写了如何在Google的open image v4上分类下载数据集并保存成yolo格式,这里接着写。为了确认标注没有问题,我们可以用yolo_mark来清洗一遍。而有时可能我们需要自己采集数据,这里我用树莓派加上一个广角... -
Python爬虫开源项目合集
2020-06-04 13:47:51scrapy - 最出名的网络爬虫,一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面... BeautifulSoup - Beautifu Soup不完全是一套爬虫工具,需要配合urllib使用,而是一套HTML/XML数据分析,清洗和获.. -
[新手向]使用Scrapy编写职友集爬虫
2018-02-07 22:42:07使用Scrapy编写职友集爬虫 本文针对刚刚接触爬虫或scrapy框架的朋友,...清洗数据 存储数据 之后我们所做的所有工作都是在这四步的基础之上扩展的, 如果你是刚刚接触爬虫的新手, 请在心中牢记这四个基本步骤, ... -
MySQL二手车数据清洗及特征处理
2020-07-02 14:23:03数据集字段含义: Brand:品牌 Name:型号 Boarding_time:上牌时间 Km:里程数 Discharge:排放标准 Sec_price:二手车价格 New_price:新车价格 2、缺失值的查找和处理 SELECT count(*) FROM used_car_... -
Python爬取特朗普就职演讲稿,使用ngram模型进行数据清洗
2017-12-05 13:52:52在网络数据采集中,不可避免地会遇到样式不规范的数据,而且无法对数据集进行挑剔,所以掌握数据清洗的方法十分必要。 本文主要内容是利用Python从网页上爬取格式混乱的英文讲稿,然后将数据进行清 -
淘宝爬虫实战(附代码和数据集)——今天你脱发了吗?
2019-11-21 08:18:00作者:数据不吹牛 来源:数据...完整代码和数据放在文末,如果单纯需要数据集练手的同学可以在底部下载(4400条产品数据)其实,这篇文章灵感源自一个赌局:程序员朋友小A又在和小Z抱怨脱发问题。小A:“以这样的掉... -
-
爬取 4400 条淘宝洗发水数据,拯救程序员的发际线!(附代码和数据集)
2019-08-01 11:47:11【程序人生 编者按】本文通过淘宝“防脱发洗发水”爬取和分析,来提供爬取海量淘宝商品信息的思路,除了基础爬虫外,还应该思考拿到类似的商品数据之后如何清洗,以及作为一个分析者... -
爬取 4400 条淘宝洗发水数据,拯救你的发际线!(附代码和数据集)
2019-03-02 13:00:00本文通过淘宝“防脱发洗发水”爬取和分析,来提供爬取海量淘宝商品信息的思路,除了基础爬虫外,还应该思考拿到类似的商品数据之后如何清洗,以及作为一个分析者可以从什么维度去分析。 作者 |周志鹏 责编| 仲... -
Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
2015-07-25 11:47:14都需要数据,除了通过一些渠道购买或者下载的专业数据外,常常需要大 家自己动手爬数据,这个时候,爬虫就显得格外重要了,幸好,Python提供了一批很不错的网页爬虫工具框架,既能爬取数据,也能获取和清洗数据,... -
-