{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"v1. sub from [notebook](https://www.kaggle.com/code/radek1/co-visitation-matrix-simplified-imprvd-logic) by Radek Osmulski + sub from [notebook](https://www.kaggle.com/code/cdeotte/test-data-leak-lb-boost) by Chris Deotte -> LB 0.563\n\nv2. sub from [notebook](https://www.kaggle.com/code/pietromaldini1/multiple-clicks-vs-latest-items) by Pietro Maldini + sub from [notebook](https://www.kaggle.com/code/cdeotte/test-data-leak-lb-boost) by Chris Deotte + sub from [notebook](https://www.kaggle.com/code/radek1/co-visitation-matrix-simplified-imprvd-logic) by Radek Osmulski  -> LB 0.566","metadata":{}},{"cell_type":"code","source":"import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nfrom tqdm.notebook import tqdm","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"paths = {'sub': '../input/otto-recommender-system/sample_submission.csv',\n         'sub 1': '../input/multiple-clicks-vs-latest-items/submission.csv',\n         'sub 2': '../input/test-data-leak-lb-boost/submission.csv',\n         'sub 3': '../input/k/radek1/co-visitation-matrix-simplified-imprvd-logic/submission.csv'}","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def blend_labels(labels1, labels2, labels3):\n    result = []\n    for label1, label2, label3 in zip(labels1, labels2, labels3):\n        result.append(label1) if label1 not in result else None\n        result.append(label2) if label2 not in result else None\n        result.append(label3) if label3 not in result else None\n        if len(result) > 19:\n            return result[:20]\n    return result[:20]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntest_size = 1_671_803\nreader1 = pd.read_csv(paths['sub 1'], chunksize=test_size)\nreader2 = pd.read_csv(paths['sub 2'], chunksize=test_size)\nreader3 = pd.read_csv(paths['sub 3'], chunksize=test_size)\nlabels, stypes = [], []\nfor i in range(3):\n    chunk1, chunk2, chunk3 = next(reader1), next(reader2), next(reader3)\n    stypes += chunk1['session_type'].to_list()\n    for (id1, row1), (id2, row2), (id3, row3) in tqdm(zip(chunk1.iterrows(), \n                                                          chunk2.iterrows(), \n                                                          chunk3.iterrows()), total=test_size):\n        blended_labels = blend_labels(row1.labels.split(' '), row2.labels.split(' '),  row3.labels.split(' '))\n        labels.append(' '.join(blended_labels))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.DataFrame()\nsub['session_type'] = stypes\nsub['labels'] = labels\nsub.to_csv('submission.csv',index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}