Извлечение данных
в моей предыдущей статьеScrapy автоматически сканирует сканер данных о продуктахОн реализует краулер для обхода веб-сайта товаров в поисках книжных товаров, ключевыми словами которых являются python, и сканирует заголовки, цены, комментарии и товарные ссылки 1260 книжных товаров python на более чем 60 страницах и сохраняет все данные о товарах локально. .json файл.
Формат хранения данных следующий:
Затем выполните предварительную обработку и визуализацию просканированных данных о продуктах с помощью блокнота Anaconda Jupyter и среды python3.6.
Во-первых, используйте python для вывода просканированных данных в виде файла .csv, который удобен для наблюдения, сохранения и повторного использования. Наблюдая 1260-е данные, можно обнаружить, что формат цены «46,60 иен», а формат количества комментариев — «301 комментарий», оба из которых в строковом формате. Сначала их нужно преобразовать в числовые форматы «46,60». " и "301" для облегчения обработки.
import json
import csv
import numpy as npy
import pandas as pda
#读取.json文件
dic=[]
f = open("D:/python/.../getdata.json", 'r',encoding='utf-8')#这里为.json文件路径
for line in f.readlines():
dic.append(json.loads(line))
#对爬取到的数据作处理,将价格和评论数由字符串处理为数字
tmp=''
name,price,comnum,link=[]
for i in range(0,1260):
dic[i]['price']=tmp + dic[i]['price'][1:]
dic[i]['comnum']=dic[i]['comnum'][:-3]+tmp
price.append(float(dic[i]['price']))
comnum.append(int(dic[i]['comnum']))
name.append(dic[i]['name'])
link.append(dic[i]['link'])
data = numpy.array([name,price,comnum,link]).T
print (data)
Здесь просканированные данные обрабатываются и преобразуются в формат numpy.array библиотеки научных вычислений Python Результаты вывода данных следующие:
print(data)
Затем сохраните данные в виде файла .csv.
#要存储.csv文件的路径
csvFile = open('D:/python/.../csvFile.csv','w')
writer = csv.writer(csvFile)
writer.writerow(['name', 'price', 'comnum','link'])
for i in range(0,1260):
writer.writerow(data[i])
csvFile.close()
Теперь можно открыть файл .csv по этому пути, который был сохранен в следующем формате:
CSV-файл
Конечно, вы можете изменить файл pipelines.py в проекте сканера Scrapy.После сканирования данных вы можете напрямую вывести их в виде файла .csv и сохранить локально.Вы можете изменить и добавить приведенный выше код таким же образом, поскольку просканированные данные недоступны напрямую. , сначала выведите их в файл .json для удобства анализа и обработки.
предварительная обработка данных
Обработка пропущенных значений
Во-первых, используйте библиотеку pandas для анализа и обработки данных, чтобы прочитать данные в файле .csv и сохранить их в формате фрейма данных. Можно обнаружить, что в данных есть много книг с 0 отзывами, поэтому сначала необходимо выполнить очистку данных, чтобы найти эти недостающие значения, что также является очень важной частью процесса анализа данных. В процессе анализа данных существует два метода обработки этих отсутствующих данных, которые могут быть заполнены средним значением количества комментариев, или отсутствующие данные могут быть удалены напрямую, а метод обработки может быть выбран в соответствии с соответствующим ситуация.
#读取.csv文件数据
data = pda.read_csv("D:/python/.../csvFile.csv")
#发现缺失值,将评论数为0的值转为None
data["comnum"][(data["comnum"]==0)]=None
#均值填充处理
#data.fillna(value=data["comnum"].mean(),inplace=True)
#删除处理,data1为缺失值处理后的数据
data1=data.dropna(axis=0,subset=["comnum"])
Слишком много недостающих данных, и здесь применяется метод удаления.
Обработка выбросов
При работе с выбросами первое, что нужно сделать, это найти выбросы.Сначала нарисуйте график рассеяния данных, чтобы наблюдать за распределением данных.Здесь для рисования используется библиотека визуализации данных python Matplotlib.
import matplotlib.pyplot as plt
#画散点图(横轴:价格,纵轴:评论数)
#设置图框大小
fig = plt.figure(figsize=(10,6))
plt.plot(data1['price'],data1['comnum'],"o")
#展示x,y轴标签
plt.xlabel('price')
plt.ylabel('comnum')
plt.show()
Цена - количество отзывов Диаграмма рассеивания Видно, что количество комментариев в некоторых данных слишком велико, возможно, это ходовой товар или есть обзоры, а некоторые данные дороги, даже до 700, в то время как цена общих книг не будет выше 150 иен. Эти выбросы мы обычно не учитываем при анализе данных, просто удаляем или изменяем эти выбросы. Взгляните на диаграмму данных, чтобы наблюдать за распределением:
fig = plt.figure(figsize=(10,6))
#初始化两个子图,分布为一行两列
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
#绘制箱型图
ax1.boxplot(data1['price'].values)
ax1.set_xlabel('price')
ax2.boxplot(data1['comnum'].values)
ax2.set_xlabel('comnum')
#设置x,y轴取值范围
ax1.set_ylim(0,150)
ax2.set_ylim(0,1000)
plt.show()
коробочный сюжет Желтая линия на диаграмме цены представляет собой медиану, которая составляет около 50 йен. 0, все верхние точки являются выбросами. Вы можете видеть, что медианная точка распространения по количеству отзывов ниже. Значения выбросов значительно отклоняются от остальных наблюдений, что негативно скажется на результатах анализа, поэтому выбросы с ценой более 120 иен и количеством отзывов более 700 удаляем. , и игнорировать их. Код выглядит следующим образом:
#删除价格¥120以上,评论数700以上的数据
data2=data[data['price']<120]
data3=data2[data2['comnum']<700]
#data3为异常值处理后的数据
fig = plt.figure(figsize=(10,6))
plt.plot(data3['price'],data3['comnum'],"o")
plt.xlabel('price')
plt.ylabel('comnum')
plt.show()
После обработки осталось около 500 данных, и новое распределение данных выглядит следующим образом:
Цена - количество отзывов Диаграмма рассеивания
Анализ визуализации данных
Визуальный анализ гистограммы
Наконец, данные можно анализировать визуально, а цену и количество комментариев можно сделать гистограммами для анализа распределения данных.
#求最值
pricemax=da2[1].max()
pricemin=da2[1].min()
commentmax=da2[2].max()
commentmin=da2[2].min()
##计算极差
pricerg=pricemax-pricemin
commentrg=commentmax-commentmin
#组距=极差/组数
pricedst=pricerg/13
commentdst=commentrg/13
fig = plt.figure(figsize=(12,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
#绘制价格直方图
#numpy.arrange(最小,最大,组距)
pricesty=numpy.arange(pricemin,pricemax,pricedst)
ax1.hist(da2[1],pricesty,rwidth=0.8)
ax1.set_title('price')
#绘制评论数直方图
commentsty=numpy.arange(commentmin,commentmax,commentdst)
ax2.hist(da2[2],commentsty,rwidth=0.8)
ax2.set_title('comnum')
plt.show()
Гистограмма Из гистограммы видно:
1. Цена на книги примерно распределена нормально, больше книг около 40 йен, что означает, что базовая цена книг о питоне составляет около 40 йен.
2. Книги, набравшие менее 50 отзывов, имеют больше всего товаров (более 200 книг).По мере увеличения количества отзывов количество товаров постепенно уменьшается, что свидетельствует о том, что большинство товаров хорошо продаются, а книги с лучшими продажами – это те классические произведения.
Визуальный анализ кластеризации K-средних
Наконец, данные группируются и анализируются.Здесь используется алгоритм машинного обучения-алгоритм кластеризации K-средних.Алгоритм кластеризации K-средних представляет собой алгоритм обучения без учителя в машинном обучении.Он прост, быстр и подходит для обычных наборов данных. Этапы выполнения алгоритма следующие:
1. Инициализируйте центр кластера
2. Рассчитайте расстояние от точки выборки до центра каждого кластера, выберите наименьшее расстояние и выполните кластеризацию.
3. Рассчитайте новый центр кластера и измените новый центр кластера
4. Повторять шаги 2-3 до тех пор, пока центр кластера не изменится
Вызвав библиотеку машинного обучения Python sklearn, этот алгоритм можно использовать для классификации продуктов:
#转换数据格式
tmp=numpy.array([data3['price'],data3['comnum']]).T
#调用python关于机器学习sklearn库中的KMeans
from sklearn.cluster import KMeans
#设置分为3类,并训练数据
kms=KMeans(n_clusters=3)
y=kms.fit_predict(tmp)
#将分类结果以散点图形式展示
fig = plt.figure(figsize=(10,6))
plt.xlabel('price')
plt.ylabel('comnum')
for i in range(0,len(y)):
if(y[i]==0):
plt.plot(tmp[i,0],tmp[i,1],"*r")
elif(y[i]==1):
plt.plot(tmp[i,0],tmp[i,1],"sy")
elif(y[i]==2):
plt.plot(tmp[i,0],tmp[i,1],"pb")
plt.show()
Карта распределения кластеров Из результатов кластеризации видно, что алгоритм кластеризации K-Means делит количество комментариев ниже 100 на одну категорию, количество комментариев примерно от 100 до 350, а количество комментариев примерно больше 350. в основном делятся на три категории в зависимости от того, являются ли книги самыми продаваемыми, и эффект кластеризации хорошо виден на рисунке.
Суммировать
В этой статье обобщен весь процесс получения исходных данных сканера, от извлечения данных в файлы до обработки отсутствующих значений данных и выбросов, до распределения гистограмм продукта и визуального анализа кластеризации K-Means. Вышеупомянутый процесс представляет собой общий процесс использования Python для выполнения простого анализа данных.После получения фрагмента данных читатели также могут обратиться к коду в этой статье, чтобы самостоятельно проанализировать данные и поиграть с данными.
После этого я продолжу обобщать другие поисковые роботы Python и навыки анализа данных, а также выводить данные во время обучения, а некоторый контент также будет опубликован в моемБлог | Случайный шоколадДобро пожаловать в гости O(∩_∩)O