#python #python-3.x #pandas #dataframe
#python #python-3.x #pandas #фрейм данных
Вопрос:
Я учусь создавать систему рекомендаций для совместной работы пользователей, где я считываю неявные данные из моей базы данных MySQL с помощью Python: MySql_Connector. С данными о покупке я пытаюсь создать матрицу оценки пользовательских товаров, для которой я преобразовываю строки (700 000 строк) в столбцы с помощью pandas. Я получаю следующую ошибку при запуске pivot со всем фреймом данных.
«Ошибка значения: неупакованный фрейм данных слишком велик, вызывая переполнение int32»
import mysql.connector
import pandas as pd
import numpy as np
from mysql.connector import errorcode
def readData():
try:
mySQLConnection = mysql.connector.connect(host='localhost',
database='testdb',
user='user',
password='pwd')
cursor = mySQLConnection.cursor(prepared=True)
sql_select_query = """""" #Removed the select query
cursor.execute(sql_select_query)
record = cursor.fetchall()
return record
except mysql.connector.Error as error:
print("Failed to get record from database: {}".format(error))
finally:
# closing database connection.
if (mySQLConnection.is_connected()):
cursor.close()
mySQLConnection.close()
print("connection is closed")
data = readData()
df = pd.DataFrame(data,columns=['user_id','product_id','purchase_count'])
data_pivot = pd.pivot_table(df,index=['user_id'],columns=df['product_id'])
#print(data_pivot.to_string())
python_version : 3.6
ос: win7
оперативная память: 16 ГБ
pandas_version: 0.24.2
Комментарии:
1. Такие запросы проще выполнять в базе данных . В этой статье показано, как можно преобразовать данные в MySQL. Но что вы хотите сделать с этими данными? Если у вас много продуктов, будет невозможно отобразить сводную таблицу. Его можно экспортировать, например, в файл CSV или Excel, но этот файл будет очень сложен в использовании.
user, product, count
Формат лучше.2. Если вы действительно хотите преобразовать все данные, сначала подумайте, что, например, 1000 пользователей на 1000 продуктов создают 1 МЛН строк, независимо от того, приобрели они что-то или нет. Если вы все еще хотите это сделать, обратите внимание, что вам не нужно загружать всех пользователей, в то время как вам действительно нужно загружать все продукты. Это означает, что вы можете разбивать свои данные на страницы по
user_id
и поворачивать по одной странице результатов за раз.3. @PanagiotisKanavos Я не смог выполнить поворот с помощью MySQL, потому что мне приходится использовать оператор CASE для более чем 10000 продуктов. Я намерен создать рейтинговую матрицу для совместной фильтрации между пользователями.
4. как тогда вы собираетесь использовать фрейм данных с 10 Тыс. столбцов? Форма строки упрощает поиск, особенно если поля проиндексированы. Что еще раз означает, что результаты были бы более полезными, если бы они хранились в базе данных. В любом случае, если вы хотите выполнить поворот, вам придется загружать данные для нескольких пользователей одновременно