├── Mobility Analysis └── Mobility Data Analysis.ipynb └── Recommendation └── MovieLens_Youtube_Recommendation_Candidate_Generation_Network.ipynb /Mobility Analysis/Mobility Data Analysis.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "/anaconda3/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3020: DtypeWarning: Columns (3) have mixed types. Specify dtype option on import or set low_memory=False.\n", 13 | " interactivity=interactivity, compiler=compiler, result=result)\n" 14 | ] 15 | } 16 | ], 17 | "source": [ 18 | "#Download the data from Google Mobility Site\n", 19 | "#https://www.google.com/covid19/mobility/\n", 20 | "import pandas as pd\n", 21 | "validata=pd.read_csv('/Users/Downloads/Global_Mobility_Report.csv')" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 31, 27 | "metadata": {}, 28 | "outputs": [ 29 | { 30 | "data": { 31 | "text/html": [ 32 | "
\n", 33 | "\n", 46 | "\n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | "
country_region_codecountry_regionsub_region_1sub_region_2dateretail_and_recreation_percent_change_from_baselinegrocery_and_pharmacy_percent_change_from_baselineparks_percent_change_from_baselinetransit_stations_percent_change_from_baselineworkplaces_percent_change_from_baselineresidential_percent_change_from_baseline
0AEUnited Arab EmiratesNaNNaN2020-02-150.04.05.00.02.01.0
1AEUnited Arab EmiratesNaNNaN2020-02-161.04.04.01.02.01.0
2AEUnited Arab EmiratesNaNNaN2020-02-17-1.01.05.01.02.01.0
3AEUnited Arab EmiratesNaNNaN2020-02-18-2.01.05.00.02.01.0
4AEUnited Arab EmiratesNaNNaN2020-02-19-2.00.04.0-1.02.01.0
5AEUnited Arab EmiratesNaNNaN2020-02-20-2.01.06.01.01.01.0
6AEUnited Arab EmiratesNaNNaN2020-02-21-3.02.06.00.0-1.01.0
7AEUnited Arab EmiratesNaNNaN2020-02-22-2.02.04.0-2.03.01.0
8AEUnited Arab EmiratesNaNNaN2020-02-23-1.03.03.0-1.04.01.0
9AEUnited Arab EmiratesNaNNaN2020-02-24-3.00.05.0-1.03.01.0
\n", 206 | "
" 207 | ], 208 | "text/plain": [ 209 | " country_region_code country_region sub_region_1 sub_region_2 \\\n", 210 | "0 AE United Arab Emirates NaN NaN \n", 211 | "1 AE United Arab Emirates NaN NaN \n", 212 | "2 AE United Arab Emirates NaN NaN \n", 213 | "3 AE United Arab Emirates NaN NaN \n", 214 | "4 AE United Arab Emirates NaN NaN \n", 215 | "5 AE United Arab Emirates NaN NaN \n", 216 | "6 AE United Arab Emirates NaN NaN \n", 217 | "7 AE United Arab Emirates NaN NaN \n", 218 | "8 AE United Arab Emirates NaN NaN \n", 219 | "9 AE United Arab Emirates NaN NaN \n", 220 | "\n", 221 | " date retail_and_recreation_percent_change_from_baseline \\\n", 222 | "0 2020-02-15 0.0 \n", 223 | "1 2020-02-16 1.0 \n", 224 | "2 2020-02-17 -1.0 \n", 225 | "3 2020-02-18 -2.0 \n", 226 | "4 2020-02-19 -2.0 \n", 227 | "5 2020-02-20 -2.0 \n", 228 | "6 2020-02-21 -3.0 \n", 229 | "7 2020-02-22 -2.0 \n", 230 | "8 2020-02-23 -1.0 \n", 231 | "9 2020-02-24 -3.0 \n", 232 | "\n", 233 | " grocery_and_pharmacy_percent_change_from_baseline \\\n", 234 | "0 4.0 \n", 235 | "1 4.0 \n", 236 | "2 1.0 \n", 237 | "3 1.0 \n", 238 | "4 0.0 \n", 239 | "5 1.0 \n", 240 | "6 2.0 \n", 241 | "7 2.0 \n", 242 | "8 3.0 \n", 243 | "9 0.0 \n", 244 | "\n", 245 | " parks_percent_change_from_baseline \\\n", 246 | "0 5.0 \n", 247 | "1 4.0 \n", 248 | "2 5.0 \n", 249 | "3 5.0 \n", 250 | "4 4.0 \n", 251 | "5 6.0 \n", 252 | "6 6.0 \n", 253 | "7 4.0 \n", 254 | "8 3.0 \n", 255 | "9 5.0 \n", 256 | "\n", 257 | " transit_stations_percent_change_from_baseline \\\n", 258 | "0 0.0 \n", 259 | "1 1.0 \n", 260 | "2 1.0 \n", 261 | "3 0.0 \n", 262 | "4 -1.0 \n", 263 | "5 1.0 \n", 264 | "6 0.0 \n", 265 | "7 -2.0 \n", 266 | "8 -1.0 \n", 267 | "9 -1.0 \n", 268 | "\n", 269 | " workplaces_percent_change_from_baseline \\\n", 270 | "0 2.0 \n", 271 | "1 2.0 \n", 272 | "2 2.0 \n", 273 | "3 2.0 \n", 274 | "4 2.0 \n", 275 | "5 1.0 \n", 276 | "6 -1.0 \n", 277 | "7 3.0 \n", 278 | "8 4.0 \n", 279 | "9 3.0 \n", 280 | "\n", 281 | " residential_percent_change_from_baseline \n", 282 | "0 1.0 \n", 283 | "1 1.0 \n", 284 | "2 1.0 \n", 285 | "3 1.0 \n", 286 | "4 1.0 \n", 287 | "5 1.0 \n", 288 | "6 1.0 \n", 289 | "7 1.0 \n", 290 | "8 1.0 \n", 291 | "9 1.0 " 292 | ] 293 | }, 294 | "execution_count": 31, 295 | "metadata": {}, 296 | "output_type": "execute_result" 297 | } 298 | ], 299 | "source": [ 300 | "validata.head(10)" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 3, 306 | "metadata": {}, 307 | "outputs": [], 308 | "source": [ 309 | "def display_all(df):\n", 310 | " with pd.option_context(\"display.max_rows\", 1000, \"display.max_columns\", 1000): \n", 311 | " display(df)" 312 | ] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "execution_count": 4, 317 | "metadata": {}, 318 | "outputs": [ 319 | { 320 | "data": { 321 | "text/plain": [ 322 | "['country_region_code',\n", 323 | " 'country_region',\n", 324 | " 'sub_region_1',\n", 325 | " 'sub_region_2',\n", 326 | " 'date',\n", 327 | " 'retail_and_recreation_percent_change_from_baseline',\n", 328 | " 'grocery_and_pharmacy_percent_change_from_baseline',\n", 329 | " 'parks_percent_change_from_baseline',\n", 330 | " 'transit_stations_percent_change_from_baseline',\n", 331 | " 'workplaces_percent_change_from_baseline',\n", 332 | " 'residential_percent_change_from_baseline']" 333 | ] 334 | }, 335 | "execution_count": 4, 336 | "metadata": {}, 337 | "output_type": "execute_result" 338 | } 339 | ], 340 | "source": [ 341 | "validata.columns.tolist()" 342 | ] 343 | }, 344 | { 345 | "cell_type": "code", 346 | "execution_count": 5, 347 | "metadata": {}, 348 | "outputs": [], 349 | "source": [ 350 | "validata_aus=validata[validata.country_region == 'Australia']" 351 | ] 352 | }, 353 | { 354 | "cell_type": "code", 355 | "execution_count": 6, 356 | "metadata": {}, 357 | "outputs": [ 358 | { 359 | "data": { 360 | "text/html": [ 361 | "
\n", 362 | "\n", 375 | "\n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | "
38183819382038213822
country_region_codeAUAUAUAUAU
country_regionAustraliaAustraliaAustraliaAustraliaAustralia
sub_region_1NaNNaNNaNNaNNaN
sub_region_2NaNNaNNaNNaNNaN
date2020-02-152020-02-162020-02-172020-02-182020-02-19
retail_and_recreation_percent_change_from_baseline43-1-3-1
grocery_and_pharmacy_percent_change_from_baseline350-2-1
parks_percent_change_from_baseline-29-6-13-6
transit_stations_percent_change_from_baseline33778
workplaces_percent_change_from_baseline3-1171413
residential_percent_change_from_baseline00-2-1-1
\n", 477 | "
" 478 | ], 479 | "text/plain": [ 480 | " 3818 3819 \\\n", 481 | "country_region_code AU AU \n", 482 | "country_region Australia Australia \n", 483 | "sub_region_1 NaN NaN \n", 484 | "sub_region_2 NaN NaN \n", 485 | "date 2020-02-15 2020-02-16 \n", 486 | "retail_and_recreation_percent_change_from_baseline 4 3 \n", 487 | "grocery_and_pharmacy_percent_change_from_baseline 3 5 \n", 488 | "parks_percent_change_from_baseline -2 9 \n", 489 | "transit_stations_percent_change_from_baseline 3 3 \n", 490 | "workplaces_percent_change_from_baseline 3 -1 \n", 491 | "residential_percent_change_from_baseline 0 0 \n", 492 | "\n", 493 | " 3820 3821 \\\n", 494 | "country_region_code AU AU \n", 495 | "country_region Australia Australia \n", 496 | "sub_region_1 NaN NaN \n", 497 | "sub_region_2 NaN NaN \n", 498 | "date 2020-02-17 2020-02-18 \n", 499 | "retail_and_recreation_percent_change_from_baseline -1 -3 \n", 500 | "grocery_and_pharmacy_percent_change_from_baseline 0 -2 \n", 501 | "parks_percent_change_from_baseline -6 -13 \n", 502 | "transit_stations_percent_change_from_baseline 7 7 \n", 503 | "workplaces_percent_change_from_baseline 17 14 \n", 504 | "residential_percent_change_from_baseline -2 -1 \n", 505 | "\n", 506 | " 3822 \n", 507 | "country_region_code AU \n", 508 | "country_region Australia \n", 509 | "sub_region_1 NaN \n", 510 | "sub_region_2 NaN \n", 511 | "date 2020-02-19 \n", 512 | "retail_and_recreation_percent_change_from_baseline -1 \n", 513 | "grocery_and_pharmacy_percent_change_from_baseline -1 \n", 514 | "parks_percent_change_from_baseline -6 \n", 515 | "transit_stations_percent_change_from_baseline 8 \n", 516 | "workplaces_percent_change_from_baseline 13 \n", 517 | "residential_percent_change_from_baseline -1 " 518 | ] 519 | }, 520 | "metadata": {}, 521 | "output_type": "display_data" 522 | } 523 | ], 524 | "source": [ 525 | "display_all(validata_aus.head().transpose())" 526 | ] 527 | }, 528 | { 529 | "cell_type": "code", 530 | "execution_count": 7, 531 | "metadata": {}, 532 | "outputs": [ 533 | { 534 | "data": { 535 | "text/html": [ 536 | "
\n", 537 | "\n", 550 | "\n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | "
country_region_codecountry_regionsub_region_1sub_region_2dateretail_and_recreation_percent_change_from_baselinegrocery_and_pharmacy_percent_change_from_baselineparks_percent_change_from_baselinetransit_stations_percent_change_from_baselineworkplaces_percent_change_from_baselineresidential_percent_change_from_baseline
3818AUAustraliaNaNNaN2020-02-154.03.0-2.03.03.00.0
3819AUAustraliaNaNNaN2020-02-163.05.09.03.0-1.00.0
3820AUAustraliaNaNNaN2020-02-17-1.00.0-6.07.017.0-2.0
3821AUAustraliaNaNNaN2020-02-18-3.0-2.0-13.07.014.0-1.0
3822AUAustraliaNaNNaN2020-02-19-1.0-1.0-6.08.013.0-1.0
3823AUAustraliaNaNNaN2020-02-200.01.05.09.013.0-2.0
3824AUAustraliaNaNNaN2020-02-213.04.0-1.012.016.0-3.0
3825AUAustraliaNaNNaN2020-02-225.04.010.08.03.0-1.0
3826AUAustraliaNaNNaN2020-02-233.04.09.04.0-2.00.0
3827AUAustraliaNaNNaN2020-02-24-1.01.0-10.08.017.0-1.0
\n", 710 | "
" 711 | ], 712 | "text/plain": [ 713 | " country_region_code country_region sub_region_1 sub_region_2 date \\\n", 714 | "3818 AU Australia NaN NaN 2020-02-15 \n", 715 | "3819 AU Australia NaN NaN 2020-02-16 \n", 716 | "3820 AU Australia NaN NaN 2020-02-17 \n", 717 | "3821 AU Australia NaN NaN 2020-02-18 \n", 718 | "3822 AU Australia NaN NaN 2020-02-19 \n", 719 | "3823 AU Australia NaN NaN 2020-02-20 \n", 720 | "3824 AU Australia NaN NaN 2020-02-21 \n", 721 | "3825 AU Australia NaN NaN 2020-02-22 \n", 722 | "3826 AU Australia NaN NaN 2020-02-23 \n", 723 | "3827 AU Australia NaN NaN 2020-02-24 \n", 724 | "\n", 725 | " retail_and_recreation_percent_change_from_baseline \\\n", 726 | "3818 4.0 \n", 727 | "3819 3.0 \n", 728 | "3820 -1.0 \n", 729 | "3821 -3.0 \n", 730 | "3822 -1.0 \n", 731 | "3823 0.0 \n", 732 | "3824 3.0 \n", 733 | "3825 5.0 \n", 734 | "3826 3.0 \n", 735 | "3827 -1.0 \n", 736 | "\n", 737 | " grocery_and_pharmacy_percent_change_from_baseline \\\n", 738 | "3818 3.0 \n", 739 | "3819 5.0 \n", 740 | "3820 0.0 \n", 741 | "3821 -2.0 \n", 742 | "3822 -1.0 \n", 743 | "3823 1.0 \n", 744 | "3824 4.0 \n", 745 | "3825 4.0 \n", 746 | "3826 4.0 \n", 747 | "3827 1.0 \n", 748 | "\n", 749 | " parks_percent_change_from_baseline \\\n", 750 | "3818 -2.0 \n", 751 | "3819 9.0 \n", 752 | "3820 -6.0 \n", 753 | "3821 -13.0 \n", 754 | "3822 -6.0 \n", 755 | "3823 5.0 \n", 756 | "3824 -1.0 \n", 757 | "3825 10.0 \n", 758 | "3826 9.0 \n", 759 | "3827 -10.0 \n", 760 | "\n", 761 | " transit_stations_percent_change_from_baseline \\\n", 762 | "3818 3.0 \n", 763 | "3819 3.0 \n", 764 | "3820 7.0 \n", 765 | "3821 7.0 \n", 766 | "3822 8.0 \n", 767 | "3823 9.0 \n", 768 | "3824 12.0 \n", 769 | "3825 8.0 \n", 770 | "3826 4.0 \n", 771 | "3827 8.0 \n", 772 | "\n", 773 | " workplaces_percent_change_from_baseline \\\n", 774 | "3818 3.0 \n", 775 | "3819 -1.0 \n", 776 | "3820 17.0 \n", 777 | "3821 14.0 \n", 778 | "3822 13.0 \n", 779 | "3823 13.0 \n", 780 | "3824 16.0 \n", 781 | "3825 3.0 \n", 782 | "3826 -2.0 \n", 783 | "3827 17.0 \n", 784 | "\n", 785 | " residential_percent_change_from_baseline \n", 786 | "3818 0.0 \n", 787 | "3819 0.0 \n", 788 | "3820 -2.0 \n", 789 | "3821 -1.0 \n", 790 | "3822 -1.0 \n", 791 | "3823 -2.0 \n", 792 | "3824 -3.0 \n", 793 | "3825 -1.0 \n", 794 | "3826 0.0 \n", 795 | "3827 -1.0 " 796 | ] 797 | }, 798 | "execution_count": 7, 799 | "metadata": {}, 800 | "output_type": "execute_result" 801 | } 802 | ], 803 | "source": [ 804 | "validata_aus.head(10)" 805 | ] 806 | }, 807 | { 808 | "cell_type": "code", 809 | "execution_count": 23, 810 | "metadata": {}, 811 | "outputs": [], 812 | "source": [ 813 | "import numpy as np\n", 814 | "testdata = validata_aus.groupby(['date']).agg(\n", 815 | " {\n", 816 | " \"retail_and_recreation_percent_change_from_baseline\": [np.median],\n", 817 | " \"grocery_and_pharmacy_percent_change_from_baseline\": [np.median],\n", 818 | " \"parks_percent_change_from_baseline\": [np.median],\n", 819 | " \"transit_stations_percent_change_from_baseline\": [np.median],\n", 820 | " \"workplaces_percent_change_from_baseline\": [np.median],\n", 821 | " \"residential_percent_change_from_baseline\": [np.median]\n", 822 | " \n", 823 | "}).reset_index()\n", 824 | "testdata.columns = [\"_\".join(x) for x in testdata.columns.ravel()]\n", 825 | "d = pd.to_datetime({'year':[2020], 'month':[3], 'day':[22]})\n", 826 | "testdata.loc[:,'countofdays'] = (pd.to_datetime(testdata['date_']) - d[0]).dt.days" 827 | ] 828 | }, 829 | { 830 | "cell_type": "code", 831 | "execution_count": 9, 832 | "metadata": { 833 | "scrolled": true 834 | }, 835 | "outputs": [ 836 | { 837 | "data": { 838 | "text/plain": [ 839 | "date_ object\n", 840 | "retail_and_recreation_percent_change_from_baseline_median float64\n", 841 | "grocery_and_pharmacy_percent_change_from_baseline_median float64\n", 842 | "parks_percent_change_from_baseline_median float64\n", 843 | "transit_stations_percent_change_from_baseline_median float64\n", 844 | "workplaces_percent_change_from_baseline_median float64\n", 845 | "residential_percent_change_from_baseline_median float64\n", 846 | "countofdays int64\n", 847 | "dtype: object" 848 | ] 849 | }, 850 | "execution_count": 9, 851 | "metadata": {}, 852 | "output_type": "execute_result" 853 | } 854 | ], 855 | "source": [ 856 | "testdata.dtypes" 857 | ] 858 | }, 859 | { 860 | "cell_type": "code", 861 | "execution_count": 24, 862 | "metadata": {}, 863 | "outputs": [], 864 | "source": [ 865 | "testdata_1 = testdata.copy()" 866 | ] 867 | }, 868 | { 869 | "cell_type": "code", 870 | "execution_count": 25, 871 | "metadata": {}, 872 | "outputs": [], 873 | "source": [ 874 | "testdata_1.rename(columns={\n", 875 | " 'retail_and_recreation_percent_change_from_baseline_median' :'Retail and Recreation Median Change',\n", 876 | " 'grocery_and_pharmacy_percent_change_from_baseline_median':'Grocery and Pharmacy Median Change',\n", 877 | " 'parks_percent_change_from_baseline_median':'Parks Median Change',\n", 878 | " 'transit_stations_percent_change_from_baseline_median':'Transit Station Median Change',\n", 879 | " 'workplaces_percent_change_from_baseline_median':'Workplaces Median Change',\n", 880 | " 'residential_percent_change_from_baseline_median':'Residential Median Change',\n", 881 | " 'date_': 'date'\n", 882 | "}, inplace=True)" 883 | ] 884 | }, 885 | { 886 | "cell_type": "code", 887 | "execution_count": 29, 888 | "metadata": {}, 889 | "outputs": [], 890 | "source": [ 891 | "import plotly.express as px\n", 892 | "\n", 893 | "import pandas as pd\n", 894 | "\n", 895 | "\n", 896 | "# fig = px.line(testdata, x='date', y='vals')\n", 897 | "# fig.show()\n", 898 | "\n", 899 | "df_long=pd.melt(testdata_1, id_vars=['date'], value_vars=['Retail and Recreation Median Change',\n", 900 | " 'Grocery and Pharmacy Median Change',\n", 901 | " 'Parks Median Change',\n", 902 | " 'Transit Station Median Change',\n", 903 | " 'Workplaces Median Change',\n", 904 | " 'Residential Median Change'\n", 905 | " \n", 906 | " \n", 907 | " ])\n", 908 | "\n" 909 | ] 910 | }, 911 | { 912 | "cell_type": "code", 913 | "execution_count": 30, 914 | "metadata": {}, 915 | "outputs": [ 916 | { 917 | "data": { 918 | "text/html": [ 919 | " \n", 992 | " " 993 | ] 994 | }, 995 | "metadata": {}, 996 | "output_type": "display_data" 997 | }, 998 | { 999 | "data": { 1000 | "application/vnd.plotly.v1+json": { 1001 | "config": { 1002 | "plotlyServerURL": "https://plot.ly" 1003 | }, 1004 | "data": [ 1005 | { 1006 | "hovertemplate": "areas=Retail and Recreation Median Change
Date=%{x}
Median % Change=%{y}", 1007 | "legendgroup": "Retail and Recreation Median Change", 1008 | "line": { 1009 | "color": "#636efa", 1010 | "dash": "solid" 1011 | }, 1012 | "mode": "lines", 1013 | "name": "Retail and Recreation Median Change", 1014 | "showlegend": true, 1015 | "type": "scatter", 1016 | "x": [ 1017 | "2020-02-15", 1018 | "2020-02-16", 1019 | "2020-02-17", 1020 | "2020-02-18", 1021 | "2020-02-19", 1022 | "2020-02-20", 1023 | "2020-02-21", 1024 | "2020-02-22", 1025 | "2020-02-23", 1026 | "2020-02-24", 1027 | "2020-02-25", 1028 | "2020-02-26", 1029 | "2020-02-27", 1030 | "2020-02-28", 1031 | "2020-02-29", 1032 | "2020-03-01", 1033 | "2020-03-02", 1034 | "2020-03-03", 1035 | "2020-03-04", 1036 | "2020-03-05", 1037 | "2020-03-06", 1038 | "2020-03-07", 1039 | "2020-03-08", 1040 | "2020-03-09", 1041 | "2020-03-10", 1042 | "2020-03-11", 1043 | "2020-03-12", 1044 | "2020-03-13", 1045 | "2020-03-14", 1046 | "2020-03-15", 1047 | "2020-03-16", 1048 | "2020-03-17", 1049 | "2020-03-18", 1050 | "2020-03-19", 1051 | "2020-03-20", 1052 | "2020-03-21", 1053 | "2020-03-22", 1054 | "2020-03-23", 1055 | "2020-03-24", 1056 | "2020-03-25", 1057 | "2020-03-26", 1058 | "2020-03-27", 1059 | "2020-03-28", 1060 | "2020-03-29", 1061 | "2020-03-30", 1062 | "2020-03-31", 1063 | "2020-04-01", 1064 | "2020-04-02", 1065 | "2020-04-03", 1066 | "2020-04-04", 1067 | "2020-04-05", 1068 | "2020-04-06", 1069 | "2020-04-07", 1070 | "2020-04-08", 1071 | "2020-04-09", 1072 | "2020-04-10", 1073 | "2020-04-11", 1074 | "2020-04-12", 1075 | "2020-04-13", 1076 | "2020-04-14", 1077 | "2020-04-15", 1078 | "2020-04-16", 1079 | "2020-04-17", 1080 | "2020-04-18", 1081 | "2020-04-19", 1082 | "2020-04-20", 1083 | "2020-04-21", 1084 | "2020-04-22", 1085 | "2020-04-23", 1086 | "2020-04-24", 1087 | "2020-04-25", 1088 | "2020-04-26", 1089 | "2020-04-27", 1090 | "2020-04-28", 1091 | "2020-04-29", 1092 | "2020-04-30", 1093 | "2020-05-01", 1094 | "2020-05-02", 1095 | "2020-05-03", 1096 | "2020-05-04", 1097 | "2020-05-05", 1098 | "2020-05-06", 1099 | "2020-05-07" 1100 | ], 1101 | "xaxis": "x", 1102 | "y": [ 1103 | 4, 1104 | 3, 1105 | -1, 1106 | -2, 1107 | -1, 1108 | 1, 1109 | 3, 1110 | 5, 1111 | 3, 1112 | -1, 1113 | -2, 1114 | -1, 1115 | 0, 1116 | 4, 1117 | 6, 1118 | 4, 1119 | 0, 1120 | 0, 1121 | 0, 1122 | -2, 1123 | 3, 1124 | 3, 1125 | 3, 1126 | -3, 1127 | -2, 1128 | -1, 1129 | 0, 1130 | 1, 1131 | 1, 1132 | -1, 1133 | -1, 1134 | -5, 1135 | -7, 1136 | -9, 1137 | -11, 1138 | -15, 1139 | -18, 1140 | -17, 1141 | -30, 1142 | -30, 1143 | -32, 1144 | -35, 1145 | -39, 1146 | -43, 1147 | -39, 1148 | -41, 1149 | -40, 1150 | -42, 1151 | -40, 1152 | -42, 1153 | -40, 1154 | -37, 1155 | -38, 1156 | -35, 1157 | -27, 1158 | -76, 1159 | -38, 1160 | -58, 1161 | -45, 1162 | -37, 1163 | -37, 1164 | -37, 1165 | -37, 1166 | -40, 1167 | -41, 1168 | -39, 1169 | -39, 1170 | -38, 1171 | -39, 1172 | -36, 1173 | -49, 1174 | -36, 1175 | -36, 1176 | -36, 1177 | -38, 1178 | -39, 1179 | -35, 1180 | -32, 1181 | -33, 1182 | -38, 1183 | -32, 1184 | -33, 1185 | -32 1186 | ], 1187 | "yaxis": "y" 1188 | }, 1189 | { 1190 | "hovertemplate": "areas=Grocery and Pharmacy Median Change
Date=%{x}
Median % Change=%{y}", 1191 | "legendgroup": "Grocery and Pharmacy Median Change", 1192 | "line": { 1193 | "color": "#EF553B", 1194 | "dash": "solid" 1195 | }, 1196 | "mode": "lines", 1197 | "name": "Grocery and Pharmacy Median Change", 1198 | "showlegend": true, 1199 | "type": "scatter", 1200 | "x": [ 1201 | "2020-02-15", 1202 | "2020-02-16", 1203 | "2020-02-17", 1204 | "2020-02-18", 1205 | "2020-02-19", 1206 | "2020-02-20", 1207 | "2020-02-21", 1208 | "2020-02-22", 1209 | "2020-02-23", 1210 | "2020-02-24", 1211 | "2020-02-25", 1212 | "2020-02-26", 1213 | "2020-02-27", 1214 | "2020-02-28", 1215 | "2020-02-29", 1216 | "2020-03-01", 1217 | "2020-03-02", 1218 | "2020-03-03", 1219 | "2020-03-04", 1220 | "2020-03-05", 1221 | "2020-03-06", 1222 | "2020-03-07", 1223 | "2020-03-08", 1224 | "2020-03-09", 1225 | "2020-03-10", 1226 | "2020-03-11", 1227 | "2020-03-12", 1228 | "2020-03-13", 1229 | "2020-03-14", 1230 | "2020-03-15", 1231 | "2020-03-16", 1232 | "2020-03-17", 1233 | "2020-03-18", 1234 | "2020-03-19", 1235 | "2020-03-20", 1236 | "2020-03-21", 1237 | "2020-03-22", 1238 | "2020-03-23", 1239 | "2020-03-24", 1240 | "2020-03-25", 1241 | "2020-03-26", 1242 | "2020-03-27", 1243 | "2020-03-28", 1244 | "2020-03-29", 1245 | "2020-03-30", 1246 | "2020-03-31", 1247 | "2020-04-01", 1248 | "2020-04-02", 1249 | "2020-04-03", 1250 | "2020-04-04", 1251 | "2020-04-05", 1252 | "2020-04-06", 1253 | "2020-04-07", 1254 | "2020-04-08", 1255 | "2020-04-09", 1256 | "2020-04-10", 1257 | "2020-04-11", 1258 | "2020-04-12", 1259 | "2020-04-13", 1260 | "2020-04-14", 1261 | "2020-04-15", 1262 | "2020-04-16", 1263 | "2020-04-17", 1264 | "2020-04-18", 1265 | "2020-04-19", 1266 | "2020-04-20", 1267 | "2020-04-21", 1268 | "2020-04-22", 1269 | "2020-04-23", 1270 | "2020-04-24", 1271 | "2020-04-25", 1272 | "2020-04-26", 1273 | "2020-04-27", 1274 | "2020-04-28", 1275 | "2020-04-29", 1276 | "2020-04-30", 1277 | "2020-05-01", 1278 | "2020-05-02", 1279 | "2020-05-03", 1280 | "2020-05-04", 1281 | "2020-05-05", 1282 | "2020-05-06", 1283 | "2020-05-07" 1284 | ], 1285 | "xaxis": "x", 1286 | "y": [ 1287 | 3, 1288 | 4, 1289 | 0, 1290 | -2, 1291 | -1, 1292 | 1, 1293 | 2, 1294 | 4, 1295 | 4, 1296 | 1, 1297 | -1, 1298 | 0, 1299 | 1, 1300 | 5, 1301 | 6, 1302 | 7, 1303 | 5, 1304 | 6, 1305 | 8, 1306 | 9, 1307 | 14, 1308 | 12, 1309 | 8, 1310 | 4, 1311 | 9, 1312 | 7, 1313 | 10, 1314 | 15, 1315 | 18, 1316 | 21, 1317 | 33, 1318 | 35, 1319 | 32, 1320 | 25, 1321 | 20, 1322 | 14, 1323 | 10, 1324 | 19, 1325 | 7, 1326 | 8, 1327 | 5, 1328 | 3, 1329 | -6, 1330 | -16, 1331 | -11, 1332 | -10, 1333 | -9, 1334 | -11, 1335 | -7, 1336 | -10, 1337 | -17, 1338 | -10, 1339 | -6, 1340 | -3, 1341 | 16, 1342 | -58, 1343 | 0, 1344 | -38, 1345 | -23, 1346 | -5, 1347 | -7, 1348 | -6, 1349 | -3, 1350 | -10, 1351 | -17, 1352 | -12, 1353 | -13, 1354 | -11, 1355 | -8, 1356 | -2, 1357 | -22, 1358 | -4.5, 1359 | -9, 1360 | -10, 1361 | -13, 1362 | -8, 1363 | -3, 1364 | 2, 1365 | -6, 1366 | -9, 1367 | -3, 1368 | -3, 1369 | -1 1370 | ], 1371 | "yaxis": "y" 1372 | }, 1373 | { 1374 | "hovertemplate": "areas=Parks Median Change
Date=%{x}
Median % Change=%{y}", 1375 | "legendgroup": "Parks Median Change", 1376 | "line": { 1377 | "color": "#00cc96", 1378 | "dash": "solid" 1379 | }, 1380 | "mode": "lines", 1381 | "name": "Parks Median Change", 1382 | "showlegend": true, 1383 | "type": "scatter", 1384 | "x": [ 1385 | "2020-02-15", 1386 | "2020-02-16", 1387 | "2020-02-17", 1388 | "2020-02-18", 1389 | "2020-02-19", 1390 | "2020-02-20", 1391 | "2020-02-21", 1392 | "2020-02-22", 1393 | "2020-02-23", 1394 | "2020-02-24", 1395 | "2020-02-25", 1396 | "2020-02-26", 1397 | "2020-02-27", 1398 | "2020-02-28", 1399 | "2020-02-29", 1400 | "2020-03-01", 1401 | "2020-03-02", 1402 | "2020-03-03", 1403 | "2020-03-04", 1404 | "2020-03-05", 1405 | "2020-03-06", 1406 | "2020-03-07", 1407 | "2020-03-08", 1408 | "2020-03-09", 1409 | "2020-03-10", 1410 | "2020-03-11", 1411 | "2020-03-12", 1412 | "2020-03-13", 1413 | "2020-03-14", 1414 | "2020-03-15", 1415 | "2020-03-16", 1416 | "2020-03-17", 1417 | "2020-03-18", 1418 | "2020-03-19", 1419 | "2020-03-20", 1420 | "2020-03-21", 1421 | "2020-03-22", 1422 | "2020-03-23", 1423 | "2020-03-24", 1424 | "2020-03-25", 1425 | "2020-03-26", 1426 | "2020-03-27", 1427 | "2020-03-28", 1428 | "2020-03-29", 1429 | "2020-03-30", 1430 | "2020-03-31", 1431 | "2020-04-01", 1432 | "2020-04-02", 1433 | "2020-04-03", 1434 | "2020-04-04", 1435 | "2020-04-05", 1436 | "2020-04-06", 1437 | "2020-04-07", 1438 | "2020-04-08", 1439 | "2020-04-09", 1440 | "2020-04-10", 1441 | "2020-04-11", 1442 | "2020-04-12", 1443 | "2020-04-13", 1444 | "2020-04-14", 1445 | "2020-04-15", 1446 | "2020-04-16", 1447 | "2020-04-17", 1448 | "2020-04-18", 1449 | "2020-04-19", 1450 | "2020-04-20", 1451 | "2020-04-21", 1452 | "2020-04-22", 1453 | "2020-04-23", 1454 | "2020-04-24", 1455 | "2020-04-25", 1456 | "2020-04-26", 1457 | "2020-04-27", 1458 | "2020-04-28", 1459 | "2020-04-29", 1460 | "2020-04-30", 1461 | "2020-05-01", 1462 | "2020-05-02", 1463 | "2020-05-03", 1464 | "2020-05-04", 1465 | "2020-05-05", 1466 | "2020-05-06", 1467 | "2020-05-07" 1468 | ], 1469 | "xaxis": "x", 1470 | "y": [ 1471 | -1, 1472 | 6, 1473 | -6, 1474 | -11, 1475 | -3, 1476 | 4, 1477 | -3, 1478 | 10, 1479 | 7, 1480 | -5, 1481 | -4, 1482 | -3, 1483 | -2, 1484 | 0, 1485 | 18, 1486 | 13, 1487 | -1, 1488 | -5, 1489 | -9, 1490 | -19, 1491 | -6, 1492 | 10, 1493 | 3, 1494 | 5, 1495 | -2, 1496 | -2, 1497 | 5, 1498 | -8, 1499 | -11, 1500 | -8, 1501 | -16, 1502 | -14, 1503 | -14, 1504 | -9, 1505 | -12, 1506 | -9, 1507 | -11, 1508 | -27, 1509 | -30, 1510 | -27, 1511 | -23, 1512 | -30, 1513 | -34, 1514 | -33, 1515 | -35, 1516 | -33, 1517 | -36, 1518 | -42, 1519 | -41, 1520 | -49, 1521 | -43, 1522 | -33, 1523 | -35, 1524 | -35, 1525 | -31, 1526 | -41, 1527 | -48, 1528 | -38, 1529 | -11, 1530 | -29, 1531 | -29, 1532 | -25, 1533 | -31, 1534 | -42, 1535 | -35, 1536 | -34, 1537 | -25, 1538 | -26, 1539 | -24, 1540 | -27, 1541 | -31, 1542 | -26, 1543 | -23, 1544 | -37, 1545 | -41, 1546 | -51, 1547 | -42, 1548 | -38, 1549 | -18, 1550 | -24, 1551 | -26, 1552 | -25, 1553 | -23 1554 | ], 1555 | "yaxis": "y" 1556 | }, 1557 | { 1558 | "hovertemplate": "areas=Transit Station Median Change
Date=%{x}
Median % Change=%{y}", 1559 | "legendgroup": "Transit Station Median Change", 1560 | "line": { 1561 | "color": "#ab63fa", 1562 | "dash": "solid" 1563 | }, 1564 | "mode": "lines", 1565 | "name": "Transit Station Median Change", 1566 | "showlegend": true, 1567 | "type": "scatter", 1568 | "x": [ 1569 | "2020-02-15", 1570 | "2020-02-16", 1571 | "2020-02-17", 1572 | "2020-02-18", 1573 | "2020-02-19", 1574 | "2020-02-20", 1575 | "2020-02-21", 1576 | "2020-02-22", 1577 | "2020-02-23", 1578 | "2020-02-24", 1579 | "2020-02-25", 1580 | "2020-02-26", 1581 | "2020-02-27", 1582 | "2020-02-28", 1583 | "2020-02-29", 1584 | "2020-03-01", 1585 | "2020-03-02", 1586 | "2020-03-03", 1587 | "2020-03-04", 1588 | "2020-03-05", 1589 | "2020-03-06", 1590 | "2020-03-07", 1591 | "2020-03-08", 1592 | "2020-03-09", 1593 | "2020-03-10", 1594 | "2020-03-11", 1595 | "2020-03-12", 1596 | "2020-03-13", 1597 | "2020-03-14", 1598 | "2020-03-15", 1599 | "2020-03-16", 1600 | "2020-03-17", 1601 | "2020-03-18", 1602 | "2020-03-19", 1603 | "2020-03-20", 1604 | "2020-03-21", 1605 | "2020-03-22", 1606 | "2020-03-23", 1607 | "2020-03-24", 1608 | "2020-03-25", 1609 | "2020-03-26", 1610 | "2020-03-27", 1611 | "2020-03-28", 1612 | "2020-03-29", 1613 | "2020-03-30", 1614 | "2020-03-31", 1615 | "2020-04-01", 1616 | "2020-04-02", 1617 | "2020-04-03", 1618 | "2020-04-04", 1619 | "2020-04-05", 1620 | "2020-04-06", 1621 | "2020-04-07", 1622 | "2020-04-08", 1623 | "2020-04-09", 1624 | "2020-04-10", 1625 | "2020-04-11", 1626 | "2020-04-12", 1627 | "2020-04-13", 1628 | "2020-04-14", 1629 | "2020-04-15", 1630 | "2020-04-16", 1631 | "2020-04-17", 1632 | "2020-04-18", 1633 | "2020-04-19", 1634 | "2020-04-20", 1635 | "2020-04-21", 1636 | "2020-04-22", 1637 | "2020-04-23", 1638 | "2020-04-24", 1639 | "2020-04-25", 1640 | "2020-04-26", 1641 | "2020-04-27", 1642 | "2020-04-28", 1643 | "2020-04-29", 1644 | "2020-04-30", 1645 | "2020-05-01", 1646 | "2020-05-02", 1647 | "2020-05-03", 1648 | "2020-05-04", 1649 | "2020-05-05", 1650 | "2020-05-06", 1651 | "2020-05-07" 1652 | ], 1653 | "xaxis": "x", 1654 | "y": [ 1655 | 3, 1656 | 1, 1657 | 8, 1658 | 7, 1659 | 6, 1660 | 9, 1661 | 10, 1662 | 8, 1663 | 7, 1664 | 10, 1665 | 10, 1666 | 9, 1667 | 10, 1668 | 12, 1669 | 11, 1670 | 5, 1671 | 7, 1672 | 9, 1673 | 7, 1674 | 7, 1675 | 9, 1676 | 3, 1677 | -2, 1678 | -9, 1679 | 6, 1680 | 5, 1681 | 6, 1682 | 1, 1683 | -6, 1684 | -9, 1685 | -4, 1686 | -12, 1687 | -15, 1688 | -14, 1689 | -19, 1690 | -26, 1691 | -32, 1692 | -28, 1693 | -36, 1694 | -40, 1695 | -46, 1696 | -50, 1697 | -51, 1698 | -57, 1699 | -54, 1700 | -57, 1701 | -56, 1702 | -63, 1703 | -60, 1704 | -60, 1705 | -61, 1706 | -58, 1707 | -57, 1708 | -58, 1709 | -56, 1710 | -77, 1711 | -62, 1712 | -63, 1713 | -72, 1714 | -59, 1715 | -58, 1716 | -58, 1717 | -58, 1718 | -55, 1719 | -57, 1720 | -57, 1721 | -56, 1722 | -55, 1723 | -56, 1724 | -55, 1725 | -56, 1726 | -55, 1727 | -59, 1728 | -55, 1729 | -58, 1730 | -59, 1731 | -55, 1732 | -47, 1733 | -50, 1734 | -55, 1735 | -53, 1736 | -54, 1737 | -52 1738 | ], 1739 | "yaxis": "y" 1740 | }, 1741 | { 1742 | "hovertemplate": "areas=Workplaces Median Change
Date=%{x}
Median % Change=%{y}", 1743 | "legendgroup": "Workplaces Median Change", 1744 | "line": { 1745 | "color": "#FFA15A", 1746 | "dash": "solid" 1747 | }, 1748 | "mode": "lines", 1749 | "name": "Workplaces Median Change", 1750 | "showlegend": true, 1751 | "type": "scatter", 1752 | "x": [ 1753 | "2020-02-15", 1754 | "2020-02-16", 1755 | "2020-02-17", 1756 | "2020-02-18", 1757 | "2020-02-19", 1758 | "2020-02-20", 1759 | "2020-02-21", 1760 | "2020-02-22", 1761 | "2020-02-23", 1762 | "2020-02-24", 1763 | "2020-02-25", 1764 | "2020-02-26", 1765 | "2020-02-27", 1766 | "2020-02-28", 1767 | "2020-02-29", 1768 | "2020-03-01", 1769 | "2020-03-02", 1770 | "2020-03-03", 1771 | "2020-03-04", 1772 | "2020-03-05", 1773 | "2020-03-06", 1774 | "2020-03-07", 1775 | "2020-03-08", 1776 | "2020-03-09", 1777 | "2020-03-10", 1778 | "2020-03-11", 1779 | "2020-03-12", 1780 | "2020-03-13", 1781 | "2020-03-14", 1782 | "2020-03-15", 1783 | "2020-03-16", 1784 | "2020-03-17", 1785 | "2020-03-18", 1786 | "2020-03-19", 1787 | "2020-03-20", 1788 | "2020-03-21", 1789 | "2020-03-22", 1790 | "2020-03-23", 1791 | "2020-03-24", 1792 | "2020-03-25", 1793 | "2020-03-26", 1794 | "2020-03-27", 1795 | "2020-03-28", 1796 | "2020-03-29", 1797 | "2020-03-30", 1798 | "2020-03-31", 1799 | "2020-04-01", 1800 | "2020-04-02", 1801 | "2020-04-03", 1802 | "2020-04-04", 1803 | "2020-04-05", 1804 | "2020-04-06", 1805 | "2020-04-07", 1806 | "2020-04-08", 1807 | "2020-04-09", 1808 | "2020-04-10", 1809 | "2020-04-11", 1810 | "2020-04-12", 1811 | "2020-04-13", 1812 | "2020-04-14", 1813 | "2020-04-15", 1814 | "2020-04-16", 1815 | "2020-04-17", 1816 | "2020-04-18", 1817 | "2020-04-19", 1818 | "2020-04-20", 1819 | "2020-04-21", 1820 | "2020-04-22", 1821 | "2020-04-23", 1822 | "2020-04-24", 1823 | "2020-04-25", 1824 | "2020-04-26", 1825 | "2020-04-27", 1826 | "2020-04-28", 1827 | "2020-04-29", 1828 | "2020-04-30", 1829 | "2020-05-01", 1830 | "2020-05-02", 1831 | "2020-05-03", 1832 | "2020-05-04", 1833 | "2020-05-05", 1834 | "2020-05-06", 1835 | "2020-05-07" 1836 | ], 1837 | "xaxis": "x", 1838 | "y": [ 1839 | 2, 1840 | -1, 1841 | 17, 1842 | 14, 1843 | 14, 1844 | 14, 1845 | 16, 1846 | 3, 1847 | -1, 1848 | 17, 1849 | 15, 1850 | 14, 1851 | 15, 1852 | 17, 1853 | 4, 1854 | 0, 1855 | 19, 1856 | 15, 1857 | 14, 1858 | 14, 1859 | 17, 1860 | 2, 1861 | 0, 1862 | -14, 1863 | 13, 1864 | 14, 1865 | 13, 1866 | 17, 1867 | 3, 1868 | 0, 1869 | 15, 1870 | 9, 1871 | 6, 1872 | 3, 1873 | 5, 1874 | -4, 1875 | -9, 1876 | 0, 1877 | -10, 1878 | -15, 1879 | -21, 1880 | -18, 1881 | -24, 1882 | -30, 1883 | -25, 1884 | -30, 1885 | -32, 1886 | -33, 1887 | -29, 1888 | -32, 1889 | -33, 1890 | -33, 1891 | -37, 1892 | -37, 1893 | -39, 1894 | -81, 1895 | -39, 1896 | -39, 1897 | -77, 1898 | -42, 1899 | -38, 1900 | -38, 1901 | -35, 1902 | -30, 1903 | -32, 1904 | -31, 1905 | -32, 1906 | -32, 1907 | -32, 1908 | -31, 1909 | -42, 1910 | -31, 1911 | -38, 1912 | -27, 1913 | -29, 1914 | -29, 1915 | -25, 1916 | -25, 1917 | -27, 1918 | -38, 1919 | -25, 1920 | -26, 1921 | -26 1922 | ], 1923 | "yaxis": "y" 1924 | }, 1925 | { 1926 | "hovertemplate": "areas=Residential Median Change
Date=%{x}
Median % Change=%{y}", 1927 | "legendgroup": "Residential Median Change", 1928 | "line": { 1929 | "color": "#19d3f3", 1930 | "dash": "solid" 1931 | }, 1932 | "mode": "lines", 1933 | "name": "Residential Median Change", 1934 | "showlegend": true, 1935 | "type": "scatter", 1936 | "x": [ 1937 | "2020-02-15", 1938 | "2020-02-16", 1939 | "2020-02-17", 1940 | "2020-02-18", 1941 | "2020-02-19", 1942 | "2020-02-20", 1943 | "2020-02-21", 1944 | "2020-02-22", 1945 | "2020-02-23", 1946 | "2020-02-24", 1947 | "2020-02-25", 1948 | "2020-02-26", 1949 | "2020-02-27", 1950 | "2020-02-28", 1951 | "2020-02-29", 1952 | "2020-03-01", 1953 | "2020-03-02", 1954 | "2020-03-03", 1955 | "2020-03-04", 1956 | "2020-03-05", 1957 | "2020-03-06", 1958 | "2020-03-07", 1959 | "2020-03-08", 1960 | "2020-03-09", 1961 | "2020-03-10", 1962 | "2020-03-11", 1963 | "2020-03-12", 1964 | "2020-03-13", 1965 | "2020-03-14", 1966 | "2020-03-15", 1967 | "2020-03-16", 1968 | "2020-03-17", 1969 | "2020-03-18", 1970 | "2020-03-19", 1971 | "2020-03-20", 1972 | "2020-03-21", 1973 | "2020-03-22", 1974 | "2020-03-23", 1975 | "2020-03-24", 1976 | "2020-03-25", 1977 | "2020-03-26", 1978 | "2020-03-27", 1979 | "2020-03-28", 1980 | "2020-03-29", 1981 | "2020-03-30", 1982 | "2020-03-31", 1983 | "2020-04-01", 1984 | "2020-04-02", 1985 | "2020-04-03", 1986 | "2020-04-04", 1987 | "2020-04-05", 1988 | "2020-04-06", 1989 | "2020-04-07", 1990 | "2020-04-08", 1991 | "2020-04-09", 1992 | "2020-04-10", 1993 | "2020-04-11", 1994 | "2020-04-12", 1995 | "2020-04-13", 1996 | "2020-04-14", 1997 | "2020-04-15", 1998 | "2020-04-16", 1999 | "2020-04-17", 2000 | "2020-04-18", 2001 | "2020-04-19", 2002 | "2020-04-20", 2003 | "2020-04-21", 2004 | "2020-04-22", 2005 | "2020-04-23", 2006 | "2020-04-24", 2007 | "2020-04-25", 2008 | "2020-04-26", 2009 | "2020-04-27", 2010 | "2020-04-28", 2011 | "2020-04-29", 2012 | "2020-04-30", 2013 | "2020-05-01", 2014 | "2020-05-02", 2015 | "2020-05-03", 2016 | "2020-05-04", 2017 | "2020-05-05", 2018 | "2020-05-06", 2019 | "2020-05-07" 2020 | ], 2021 | "xaxis": "x", 2022 | "y": [ 2023 | 0, 2024 | 0, 2025 | -2, 2026 | -1, 2027 | -1, 2028 | -2, 2029 | -3, 2030 | -1, 2031 | 0, 2032 | -1, 2033 | -1, 2034 | -1, 2035 | -1, 2036 | -3, 2037 | -1, 2038 | 0, 2039 | -2, 2040 | -1, 2041 | -1, 2042 | -1, 2043 | -2, 2044 | 0, 2045 | 1, 2046 | 4, 2047 | -1, 2048 | -1, 2049 | -1, 2050 | -1, 2051 | 2, 2052 | 2, 2053 | 0, 2054 | 2, 2055 | 3, 2056 | 4, 2057 | 5, 2058 | 6, 2059 | 6, 2060 | 7, 2061 | 9, 2062 | 11, 2063 | 13, 2064 | 15, 2065 | 14, 2066 | 13, 2067 | 15, 2068 | 15, 2069 | 17, 2070 | 18, 2071 | 18, 2072 | 16, 2073 | 14, 2074 | 16, 2075 | 16, 2076 | 16, 2077 | 16, 2078 | 31, 2079 | 16, 2080 | 14.5, 2081 | 26, 2082 | 18, 2083 | 18, 2084 | 18, 2085 | 20, 2086 | 15, 2087 | 13.5, 2088 | 16, 2089 | 16, 2090 | 17, 2091 | 17, 2092 | 18, 2093 | 16, 2094 | 12, 2095 | 17, 2096 | 13, 2097 | 9, 2098 | 16, 2099 | 17, 2100 | 13, 2101 | 9, 2102 | 17, 2103 | 13, 2104 | 14, 2105 | 15 2106 | ], 2107 | "yaxis": "y" 2108 | } 2109 | ], 2110 | "layout": { 2111 | "legend": { 2112 | "title": { 2113 | "text": "areas" 2114 | }, 2115 | "tracegroupgap": 0 2116 | }, 2117 | "margin": { 2118 | "t": 60 2119 | }, 2120 | "shapes": [ 2121 | { 2122 | "name": "test", 2123 | "type": "line", 2124 | "x0": "2020-03-22", 2125 | "x1": "2020-03-22", 2126 | "xref": "x", 2127 | "y0": 0, 2128 | "y1": 1, 2129 | "yref": "paper" 2130 | } 2131 | ], 2132 | "template": { 2133 | "data": { 2134 | "bar": [ 2135 | { 2136 | "error_x": { 2137 | "color": "#2a3f5f" 2138 | }, 2139 | "error_y": { 2140 | "color": "#2a3f5f" 2141 | }, 2142 | "marker": { 2143 | "line": { 2144 | "color": "#E5ECF6", 2145 | "width": 0.5 2146 | } 2147 | }, 2148 | "type": "bar" 2149 | } 2150 | ], 2151 | "barpolar": [ 2152 | { 2153 | "marker": { 2154 | "line": { 2155 | "color": "#E5ECF6", 2156 | "width": 0.5 2157 | } 2158 | }, 2159 | "type": "barpolar" 2160 | } 2161 | ], 2162 | "carpet": [ 2163 | { 2164 | "aaxis": { 2165 | "endlinecolor": "#2a3f5f", 2166 | "gridcolor": "white", 2167 | "linecolor": "white", 2168 | "minorgridcolor": "white", 2169 | "startlinecolor": "#2a3f5f" 2170 | }, 2171 | "baxis": { 2172 | "endlinecolor": "#2a3f5f", 2173 | "gridcolor": "white", 2174 | "linecolor": "white", 2175 | "minorgridcolor": "white", 2176 | "startlinecolor": "#2a3f5f" 2177 | }, 2178 | "type": "carpet" 2179 | } 2180 | ], 2181 | "choropleth": [ 2182 | { 2183 | "colorbar": { 2184 | "outlinewidth": 0, 2185 | "ticks": "" 2186 | }, 2187 | "type": "choropleth" 2188 | } 2189 | ], 2190 | "contour": [ 2191 | { 2192 | "colorbar": { 2193 | "outlinewidth": 0, 2194 | "ticks": "" 2195 | }, 2196 | "colorscale": [ 2197 | [ 2198 | 0, 2199 | "#0d0887" 2200 | ], 2201 | [ 2202 | 0.1111111111111111, 2203 | "#46039f" 2204 | ], 2205 | [ 2206 | 0.2222222222222222, 2207 | "#7201a8" 2208 | ], 2209 | [ 2210 | 0.3333333333333333, 2211 | "#9c179e" 2212 | ], 2213 | [ 2214 | 0.4444444444444444, 2215 | "#bd3786" 2216 | ], 2217 | [ 2218 | 0.5555555555555556, 2219 | "#d8576b" 2220 | ], 2221 | [ 2222 | 0.6666666666666666, 2223 | "#ed7953" 2224 | ], 2225 | [ 2226 | 0.7777777777777778, 2227 | "#fb9f3a" 2228 | ], 2229 | [ 2230 | 0.8888888888888888, 2231 | "#fdca26" 2232 | ], 2233 | [ 2234 | 1, 2235 | "#f0f921" 2236 | ] 2237 | ], 2238 | "type": "contour" 2239 | } 2240 | ], 2241 | "contourcarpet": [ 2242 | { 2243 | "colorbar": { 2244 | "outlinewidth": 0, 2245 | "ticks": "" 2246 | }, 2247 | "type": "contourcarpet" 2248 | } 2249 | ], 2250 | "heatmap": [ 2251 | { 2252 | "colorbar": { 2253 | "outlinewidth": 0, 2254 | "ticks": "" 2255 | }, 2256 | "colorscale": [ 2257 | [ 2258 | 0, 2259 | "#0d0887" 2260 | ], 2261 | [ 2262 | 0.1111111111111111, 2263 | "#46039f" 2264 | ], 2265 | [ 2266 | 0.2222222222222222, 2267 | "#7201a8" 2268 | ], 2269 | [ 2270 | 0.3333333333333333, 2271 | "#9c179e" 2272 | ], 2273 | [ 2274 | 0.4444444444444444, 2275 | "#bd3786" 2276 | ], 2277 | [ 2278 | 0.5555555555555556, 2279 | "#d8576b" 2280 | ], 2281 | [ 2282 | 0.6666666666666666, 2283 | "#ed7953" 2284 | ], 2285 | [ 2286 | 0.7777777777777778, 2287 | "#fb9f3a" 2288 | ], 2289 | [ 2290 | 0.8888888888888888, 2291 | "#fdca26" 2292 | ], 2293 | [ 2294 | 1, 2295 | "#f0f921" 2296 | ] 2297 | ], 2298 | "type": "heatmap" 2299 | } 2300 | ], 2301 | "heatmapgl": [ 2302 | { 2303 | "colorbar": { 2304 | "outlinewidth": 0, 2305 | "ticks": "" 2306 | }, 2307 | "colorscale": [ 2308 | [ 2309 | 0, 2310 | "#0d0887" 2311 | ], 2312 | [ 2313 | 0.1111111111111111, 2314 | "#46039f" 2315 | ], 2316 | [ 2317 | 0.2222222222222222, 2318 | "#7201a8" 2319 | ], 2320 | [ 2321 | 0.3333333333333333, 2322 | "#9c179e" 2323 | ], 2324 | [ 2325 | 0.4444444444444444, 2326 | "#bd3786" 2327 | ], 2328 | [ 2329 | 0.5555555555555556, 2330 | "#d8576b" 2331 | ], 2332 | [ 2333 | 0.6666666666666666, 2334 | "#ed7953" 2335 | ], 2336 | [ 2337 | 0.7777777777777778, 2338 | "#fb9f3a" 2339 | ], 2340 | [ 2341 | 0.8888888888888888, 2342 | "#fdca26" 2343 | ], 2344 | [ 2345 | 1, 2346 | "#f0f921" 2347 | ] 2348 | ], 2349 | "type": "heatmapgl" 2350 | } 2351 | ], 2352 | "histogram": [ 2353 | { 2354 | "marker": { 2355 | "colorbar": { 2356 | "outlinewidth": 0, 2357 | "ticks": "" 2358 | } 2359 | }, 2360 | "type": "histogram" 2361 | } 2362 | ], 2363 | "histogram2d": [ 2364 | { 2365 | "colorbar": { 2366 | "outlinewidth": 0, 2367 | "ticks": "" 2368 | }, 2369 | "colorscale": [ 2370 | [ 2371 | 0, 2372 | "#0d0887" 2373 | ], 2374 | [ 2375 | 0.1111111111111111, 2376 | "#46039f" 2377 | ], 2378 | [ 2379 | 0.2222222222222222, 2380 | "#7201a8" 2381 | ], 2382 | [ 2383 | 0.3333333333333333, 2384 | "#9c179e" 2385 | ], 2386 | [ 2387 | 0.4444444444444444, 2388 | "#bd3786" 2389 | ], 2390 | [ 2391 | 0.5555555555555556, 2392 | "#d8576b" 2393 | ], 2394 | [ 2395 | 0.6666666666666666, 2396 | "#ed7953" 2397 | ], 2398 | [ 2399 | 0.7777777777777778, 2400 | "#fb9f3a" 2401 | ], 2402 | [ 2403 | 0.8888888888888888, 2404 | "#fdca26" 2405 | ], 2406 | [ 2407 | 1, 2408 | "#f0f921" 2409 | ] 2410 | ], 2411 | "type": "histogram2d" 2412 | } 2413 | ], 2414 | "histogram2dcontour": [ 2415 | { 2416 | "colorbar": { 2417 | "outlinewidth": 0, 2418 | "ticks": "" 2419 | }, 2420 | "colorscale": [ 2421 | [ 2422 | 0, 2423 | "#0d0887" 2424 | ], 2425 | [ 2426 | 0.1111111111111111, 2427 | "#46039f" 2428 | ], 2429 | [ 2430 | 0.2222222222222222, 2431 | "#7201a8" 2432 | ], 2433 | [ 2434 | 0.3333333333333333, 2435 | "#9c179e" 2436 | ], 2437 | [ 2438 | 0.4444444444444444, 2439 | "#bd3786" 2440 | ], 2441 | [ 2442 | 0.5555555555555556, 2443 | "#d8576b" 2444 | ], 2445 | [ 2446 | 0.6666666666666666, 2447 | "#ed7953" 2448 | ], 2449 | [ 2450 | 0.7777777777777778, 2451 | "#fb9f3a" 2452 | ], 2453 | [ 2454 | 0.8888888888888888, 2455 | "#fdca26" 2456 | ], 2457 | [ 2458 | 1, 2459 | "#f0f921" 2460 | ] 2461 | ], 2462 | "type": "histogram2dcontour" 2463 | } 2464 | ], 2465 | "mesh3d": [ 2466 | { 2467 | "colorbar": { 2468 | "outlinewidth": 0, 2469 | "ticks": "" 2470 | }, 2471 | "type": "mesh3d" 2472 | } 2473 | ], 2474 | "parcoords": [ 2475 | { 2476 | "line": { 2477 | "colorbar": { 2478 | "outlinewidth": 0, 2479 | "ticks": "" 2480 | } 2481 | }, 2482 | "type": "parcoords" 2483 | } 2484 | ], 2485 | "pie": [ 2486 | { 2487 | "automargin": true, 2488 | "type": "pie" 2489 | } 2490 | ], 2491 | "scatter": [ 2492 | { 2493 | "marker": { 2494 | "colorbar": { 2495 | "outlinewidth": 0, 2496 | "ticks": "" 2497 | } 2498 | }, 2499 | "type": "scatter" 2500 | } 2501 | ], 2502 | "scatter3d": [ 2503 | { 2504 | "line": { 2505 | "colorbar": { 2506 | "outlinewidth": 0, 2507 | "ticks": "" 2508 | } 2509 | }, 2510 | "marker": { 2511 | "colorbar": { 2512 | "outlinewidth": 0, 2513 | "ticks": "" 2514 | } 2515 | }, 2516 | "type": "scatter3d" 2517 | } 2518 | ], 2519 | "scattercarpet": [ 2520 | { 2521 | "marker": { 2522 | "colorbar": { 2523 | "outlinewidth": 0, 2524 | "ticks": "" 2525 | } 2526 | }, 2527 | "type": "scattercarpet" 2528 | } 2529 | ], 2530 | "scattergeo": [ 2531 | { 2532 | "marker": { 2533 | "colorbar": { 2534 | "outlinewidth": 0, 2535 | "ticks": "" 2536 | } 2537 | }, 2538 | "type": "scattergeo" 2539 | } 2540 | ], 2541 | "scattergl": [ 2542 | { 2543 | "marker": { 2544 | "colorbar": { 2545 | "outlinewidth": 0, 2546 | "ticks": "" 2547 | } 2548 | }, 2549 | "type": "scattergl" 2550 | } 2551 | ], 2552 | "scattermapbox": [ 2553 | { 2554 | "marker": { 2555 | "colorbar": { 2556 | "outlinewidth": 0, 2557 | "ticks": "" 2558 | } 2559 | }, 2560 | "type": "scattermapbox" 2561 | } 2562 | ], 2563 | "scatterpolar": [ 2564 | { 2565 | "marker": { 2566 | "colorbar": { 2567 | "outlinewidth": 0, 2568 | "ticks": "" 2569 | } 2570 | }, 2571 | "type": "scatterpolar" 2572 | } 2573 | ], 2574 | "scatterpolargl": [ 2575 | { 2576 | "marker": { 2577 | "colorbar": { 2578 | "outlinewidth": 0, 2579 | "ticks": "" 2580 | } 2581 | }, 2582 | "type": "scatterpolargl" 2583 | } 2584 | ], 2585 | "scatterternary": [ 2586 | { 2587 | "marker": { 2588 | "colorbar": { 2589 | "outlinewidth": 0, 2590 | "ticks": "" 2591 | } 2592 | }, 2593 | "type": "scatterternary" 2594 | } 2595 | ], 2596 | "surface": [ 2597 | { 2598 | "colorbar": { 2599 | "outlinewidth": 0, 2600 | "ticks": "" 2601 | }, 2602 | "colorscale": [ 2603 | [ 2604 | 0, 2605 | "#0d0887" 2606 | ], 2607 | [ 2608 | 0.1111111111111111, 2609 | "#46039f" 2610 | ], 2611 | [ 2612 | 0.2222222222222222, 2613 | "#7201a8" 2614 | ], 2615 | [ 2616 | 0.3333333333333333, 2617 | "#9c179e" 2618 | ], 2619 | [ 2620 | 0.4444444444444444, 2621 | "#bd3786" 2622 | ], 2623 | [ 2624 | 0.5555555555555556, 2625 | "#d8576b" 2626 | ], 2627 | [ 2628 | 0.6666666666666666, 2629 | "#ed7953" 2630 | ], 2631 | [ 2632 | 0.7777777777777778, 2633 | "#fb9f3a" 2634 | ], 2635 | [ 2636 | 0.8888888888888888, 2637 | "#fdca26" 2638 | ], 2639 | [ 2640 | 1, 2641 | "#f0f921" 2642 | ] 2643 | ], 2644 | "type": "surface" 2645 | } 2646 | ], 2647 | "table": [ 2648 | { 2649 | "cells": { 2650 | "fill": { 2651 | "color": "#EBF0F8" 2652 | }, 2653 | "line": { 2654 | "color": "white" 2655 | } 2656 | }, 2657 | "header": { 2658 | "fill": { 2659 | "color": "#C8D4E3" 2660 | }, 2661 | "line": { 2662 | "color": "white" 2663 | } 2664 | }, 2665 | "type": "table" 2666 | } 2667 | ] 2668 | }, 2669 | "layout": { 2670 | "annotationdefaults": { 2671 | "arrowcolor": "#2a3f5f", 2672 | "arrowhead": 0, 2673 | "arrowwidth": 1 2674 | }, 2675 | "coloraxis": { 2676 | "colorbar": { 2677 | "outlinewidth": 0, 2678 | "ticks": "" 2679 | } 2680 | }, 2681 | "colorscale": { 2682 | "diverging": [ 2683 | [ 2684 | 0, 2685 | "#8e0152" 2686 | ], 2687 | [ 2688 | 0.1, 2689 | "#c51b7d" 2690 | ], 2691 | [ 2692 | 0.2, 2693 | "#de77ae" 2694 | ], 2695 | [ 2696 | 0.3, 2697 | "#f1b6da" 2698 | ], 2699 | [ 2700 | 0.4, 2701 | "#fde0ef" 2702 | ], 2703 | [ 2704 | 0.5, 2705 | "#f7f7f7" 2706 | ], 2707 | [ 2708 | 0.6, 2709 | "#e6f5d0" 2710 | ], 2711 | [ 2712 | 0.7, 2713 | "#b8e186" 2714 | ], 2715 | [ 2716 | 0.8, 2717 | "#7fbc41" 2718 | ], 2719 | [ 2720 | 0.9, 2721 | "#4d9221" 2722 | ], 2723 | [ 2724 | 1, 2725 | "#276419" 2726 | ] 2727 | ], 2728 | "sequential": [ 2729 | [ 2730 | 0, 2731 | "#0d0887" 2732 | ], 2733 | [ 2734 | 0.1111111111111111, 2735 | "#46039f" 2736 | ], 2737 | [ 2738 | 0.2222222222222222, 2739 | "#7201a8" 2740 | ], 2741 | [ 2742 | 0.3333333333333333, 2743 | "#9c179e" 2744 | ], 2745 | [ 2746 | 0.4444444444444444, 2747 | "#bd3786" 2748 | ], 2749 | [ 2750 | 0.5555555555555556, 2751 | "#d8576b" 2752 | ], 2753 | [ 2754 | 0.6666666666666666, 2755 | "#ed7953" 2756 | ], 2757 | [ 2758 | 0.7777777777777778, 2759 | "#fb9f3a" 2760 | ], 2761 | [ 2762 | 0.8888888888888888, 2763 | "#fdca26" 2764 | ], 2765 | [ 2766 | 1, 2767 | "#f0f921" 2768 | ] 2769 | ], 2770 | "sequentialminus": [ 2771 | [ 2772 | 0, 2773 | "#0d0887" 2774 | ], 2775 | [ 2776 | 0.1111111111111111, 2777 | "#46039f" 2778 | ], 2779 | [ 2780 | 0.2222222222222222, 2781 | "#7201a8" 2782 | ], 2783 | [ 2784 | 0.3333333333333333, 2785 | "#9c179e" 2786 | ], 2787 | [ 2788 | 0.4444444444444444, 2789 | "#bd3786" 2790 | ], 2791 | [ 2792 | 0.5555555555555556, 2793 | "#d8576b" 2794 | ], 2795 | [ 2796 | 0.6666666666666666, 2797 | "#ed7953" 2798 | ], 2799 | [ 2800 | 0.7777777777777778, 2801 | "#fb9f3a" 2802 | ], 2803 | [ 2804 | 0.8888888888888888, 2805 | "#fdca26" 2806 | ], 2807 | [ 2808 | 1, 2809 | "#f0f921" 2810 | ] 2811 | ] 2812 | }, 2813 | "colorway": [ 2814 | "#636efa", 2815 | "#EF553B", 2816 | "#00cc96", 2817 | "#ab63fa", 2818 | "#FFA15A", 2819 | "#19d3f3", 2820 | "#FF6692", 2821 | "#B6E880", 2822 | "#FF97FF", 2823 | "#FECB52" 2824 | ], 2825 | "font": { 2826 | "color": "#2a3f5f" 2827 | }, 2828 | "geo": { 2829 | "bgcolor": "white", 2830 | "lakecolor": "white", 2831 | "landcolor": "#E5ECF6", 2832 | "showlakes": true, 2833 | "showland": true, 2834 | "subunitcolor": "white" 2835 | }, 2836 | "hoverlabel": { 2837 | "align": "left" 2838 | }, 2839 | "hovermode": "closest", 2840 | "mapbox": { 2841 | "style": "light" 2842 | }, 2843 | "paper_bgcolor": "white", 2844 | "plot_bgcolor": "#E5ECF6", 2845 | "polar": { 2846 | "angularaxis": { 2847 | "gridcolor": "white", 2848 | "linecolor": "white", 2849 | "ticks": "" 2850 | }, 2851 | "bgcolor": "#E5ECF6", 2852 | "radialaxis": { 2853 | "gridcolor": "white", 2854 | "linecolor": "white", 2855 | "ticks": "" 2856 | } 2857 | }, 2858 | "scene": { 2859 | "xaxis": { 2860 | "backgroundcolor": "#E5ECF6", 2861 | "gridcolor": "white", 2862 | "gridwidth": 2, 2863 | "linecolor": "white", 2864 | "showbackground": true, 2865 | "ticks": "", 2866 | "zerolinecolor": "white" 2867 | }, 2868 | "yaxis": { 2869 | "backgroundcolor": "#E5ECF6", 2870 | "gridcolor": "white", 2871 | "gridwidth": 2, 2872 | "linecolor": "white", 2873 | "showbackground": true, 2874 | "ticks": "", 2875 | "zerolinecolor": "white" 2876 | }, 2877 | "zaxis": { 2878 | "backgroundcolor": "#E5ECF6", 2879 | "gridcolor": "white", 2880 | "gridwidth": 2, 2881 | "linecolor": "white", 2882 | "showbackground": true, 2883 | "ticks": "", 2884 | "zerolinecolor": "white" 2885 | } 2886 | }, 2887 | "shapedefaults": { 2888 | "line": { 2889 | "color": "#2a3f5f" 2890 | } 2891 | }, 2892 | "ternary": { 2893 | "aaxis": { 2894 | "gridcolor": "white", 2895 | "linecolor": "white", 2896 | "ticks": "" 2897 | }, 2898 | "baxis": { 2899 | "gridcolor": "white", 2900 | "linecolor": "white", 2901 | "ticks": "" 2902 | }, 2903 | "bgcolor": "#E5ECF6", 2904 | "caxis": { 2905 | "gridcolor": "white", 2906 | "linecolor": "white", 2907 | "ticks": "" 2908 | } 2909 | }, 2910 | "title": { 2911 | "x": 0.05 2912 | }, 2913 | "xaxis": { 2914 | "automargin": true, 2915 | "gridcolor": "white", 2916 | "linecolor": "white", 2917 | "ticks": "", 2918 | "title": { 2919 | "standoff": 15 2920 | }, 2921 | "zerolinecolor": "white", 2922 | "zerolinewidth": 2 2923 | }, 2924 | "yaxis": { 2925 | "automargin": true, 2926 | "gridcolor": "white", 2927 | "linecolor": "white", 2928 | "ticks": "", 2929 | "title": { 2930 | "standoff": 15 2931 | }, 2932 | "zerolinecolor": "white", 2933 | "zerolinewidth": 2 2934 | } 2935 | } 2936 | }, 2937 | "xaxis": { 2938 | "anchor": "y", 2939 | "domain": [ 2940 | 0, 2941 | 1 2942 | ], 2943 | "title": { 2944 | "text": "Date" 2945 | } 2946 | }, 2947 | "yaxis": { 2948 | "anchor": "x", 2949 | "domain": [ 2950 | 0, 2951 | 1 2952 | ], 2953 | "title": { 2954 | "text": "Median % Change" 2955 | } 2956 | } 2957 | } 2958 | }, 2959 | "text/html": [ 2960 | "
\n", 2961 | " \n", 2962 | " \n", 2963 | "
\n", 2964 | " \n", 3002 | "
" 3003 | ] 3004 | }, 3005 | "metadata": {}, 3006 | "output_type": "display_data" 3007 | } 3008 | ], 3009 | "source": [ 3010 | "# plotly \n", 3011 | "df_long.rename(columns={\n", 3012 | " 'value':'Median % Change',\n", 3013 | " 'variable':'areas',\n", 3014 | " 'date':'Date'\n", 3015 | "}, inplace=True)\n", 3016 | "fig = px.line(df_long, x='Date', y='Median % Change', color='areas')\n", 3017 | "fig.update_layout(shapes=[\n", 3018 | " dict(\n", 3019 | " type= 'line',\n", 3020 | " yref= 'paper', y0= 0, y1= 1,\n", 3021 | " xref= 'x', x0= '2020-03-22', x1= '2020-03-22',\n", 3022 | " name ='test'\n", 3023 | " )\n", 3024 | "])\n", 3025 | "# Show plot \n", 3026 | "fig.show()" 3027 | ] 3028 | }, 3029 | { 3030 | "cell_type": "code", 3031 | "execution_count": 10, 3032 | "metadata": {}, 3033 | "outputs": [], 3034 | "source": [ 3035 | "\n", 3036 | "area_map_dict={\n", 3037 | " 'retail_and_recreation_percent_change_from_baseline_median' :'Retail and Recreation',\n", 3038 | " 'grocery_and_pharmacy_percent_change_from_baseline_median':'Grocery and Pharmacy',\n", 3039 | " 'parks_percent_change_from_baseline_median':'Parks',\n", 3040 | " 'transit_stations_percent_change_from_baseline_median':'Transit Station',\n", 3041 | " 'workplaces_percent_change_from_baseline_median':'Workplaces',\n", 3042 | " 'residential_percent_change_from_baseline_median':'Residential',\n", 3043 | " \n", 3044 | "}" 3045 | ] 3046 | }, 3047 | { 3048 | "cell_type": "code", 3049 | "execution_count": 11, 3050 | "metadata": {}, 3051 | "outputs": [], 3052 | "source": [ 3053 | "%matplotlib inline" 3054 | ] 3055 | }, 3056 | { 3057 | "cell_type": "code", 3058 | "execution_count": 12, 3059 | "metadata": {}, 3060 | "outputs": [], 3061 | "source": [ 3062 | "import numpy as np\n", 3063 | "import pandas as pd\n", 3064 | "import seaborn as sns\n", 3065 | "import matplotlib\n", 3066 | "import matplotlib.pyplot as plt\n", 3067 | "import matplotlib.animation as animation" 3068 | ] 3069 | }, 3070 | { 3071 | "cell_type": "code", 3072 | "execution_count": 13, 3073 | "metadata": {}, 3074 | "outputs": [], 3075 | "source": [ 3076 | "%matplotlib notebook\n", 3077 | "Writer = animation.writers['ffmpeg']\n", 3078 | "writer = Writer(fps=5, metadata=dict(artist='Me'), bitrate=1800)" 3079 | ] 3080 | }, 3081 | { 3082 | "cell_type": "code", 3083 | "execution_count": 14, 3084 | "metadata": {}, 3085 | "outputs": [], 3086 | "source": [ 3087 | "required_cols = [cols for cols in testdata.columns.tolist() if 'median' in cols]" 3088 | ] 3089 | }, 3090 | { 3091 | "cell_type": "code", 3092 | "execution_count": 17, 3093 | "metadata": {}, 3094 | "outputs": [], 3095 | "source": [ 3096 | "def create_plot(sample_data,title):\n", 3097 | " fig = plt.figure(figsize=(30,6))\n", 3098 | " plt.ylim(np.min(sample_data['columnvalue']), np.max(sample_data['columnvalue']))\n", 3099 | " plt.xlabel('Year',fontsize=20)\n", 3100 | " plt.ylabel('Percentage Change Compared to Median for a Pervious Period',fontsize=10)\n", 3101 | " title = '{title} From Google Mobility Analysis report'.format(title=title)\n", 3102 | " plt.title(title,fontsize=20)\n", 3103 | " ax = plt.axes()\n", 3104 | " txt = ax.text(0.1,0.9,'Day to/from lockdown =0', transform=ax.transAxes)\n", 3105 | " return plt,txt,fig,ax" 3106 | ] 3107 | }, 3108 | { 3109 | "cell_type": "code", 3110 | "execution_count": 18, 3111 | "metadata": {}, 3112 | "outputs": [], 3113 | "source": [ 3114 | "def animate(i,dataframe,plt,txt,ax):\n", 3115 | " data = dataframe.iloc[:int(i+1)]\n", 3116 | " p=sns.lineplot(x=data['date_'], y=data['columnvalue'], data=data, color='red')\n", 3117 | " p.tick_params(labelsize=17)\n", 3118 | " test=data['countofdays'][i]\n", 3119 | " txt.set_text('Day to/from lockdown={:d}'.format(int(test)))\n", 3120 | " plt.setp(ax.get_xticklabels(), rotation=80, horizontalalignment='right')\n", 3121 | " plt.tight_layout()\n", 3122 | " plt.xlabel('Date of Year',fontsize=10)\n", 3123 | " plt.ylabel('Median % Changes',fontsize=10)\n", 3124 | " return txt\n" 3125 | ] 3126 | }, 3127 | { 3128 | "cell_type": "code", 3129 | "execution_count": 15, 3130 | "metadata": {}, 3131 | "outputs": [ 3132 | { 3133 | "data": { 3134 | "text/plain": [ 3135 | "['retail_and_recreation_percent_change_from_baseline_median',\n", 3136 | " 'grocery_and_pharmacy_percent_change_from_baseline_median',\n", 3137 | " 'parks_percent_change_from_baseline_median',\n", 3138 | " 'transit_stations_percent_change_from_baseline_median',\n", 3139 | " 'workplaces_percent_change_from_baseline_median',\n", 3140 | " 'residential_percent_change_from_baseline_median']" 3141 | ] 3142 | }, 3143 | "execution_count": 15, 3144 | "metadata": {}, 3145 | "output_type": "execute_result" 3146 | } 3147 | ], 3148 | "source": [ 3149 | "required_cols" 3150 | ] 3151 | }, 3152 | { 3153 | "cell_type": "code", 3154 | "execution_count": 19, 3155 | "metadata": { 3156 | "scrolled": false 3157 | }, 3158 | "outputs": [ 3159 | { 3160 | "data": { 3161 | "application/javascript": [ 3162 | "/* Put everything inside the global mpl namespace */\n", 3163 | "window.mpl = {};\n", 3164 | "\n", 3165 | "\n", 3166 | "mpl.get_websocket_type = function() {\n", 3167 | " if (typeof(WebSocket) !== 'undefined') {\n", 3168 | " return WebSocket;\n", 3169 | " } else if (typeof(MozWebSocket) !== 'undefined') {\n", 3170 | " return MozWebSocket;\n", 3171 | " } else {\n", 3172 | " alert('Your browser does not have WebSocket support.' +\n", 3173 | " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", 3174 | " 'Firefox 4 and 5 are also supported but you ' +\n", 3175 | " 'have to enable WebSockets in about:config.');\n", 3176 | " };\n", 3177 | "}\n", 3178 | "\n", 3179 | "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", 3180 | " this.id = figure_id;\n", 3181 | "\n", 3182 | " this.ws = websocket;\n", 3183 | "\n", 3184 | " this.supports_binary = (this.ws.binaryType != undefined);\n", 3185 | "\n", 3186 | " if (!this.supports_binary) {\n", 3187 | " var warnings = document.getElementById(\"mpl-warnings\");\n", 3188 | " if (warnings) {\n", 3189 | " warnings.style.display = 'block';\n", 3190 | " warnings.textContent = (\n", 3191 | " \"This browser does not support binary websocket messages. \" +\n", 3192 | " \"Performance may be slow.\");\n", 3193 | " }\n", 3194 | " }\n", 3195 | "\n", 3196 | " this.imageObj = new Image();\n", 3197 | "\n", 3198 | " this.context = undefined;\n", 3199 | " this.message = undefined;\n", 3200 | " this.canvas = undefined;\n", 3201 | " this.rubberband_canvas = undefined;\n", 3202 | " this.rubberband_context = undefined;\n", 3203 | " this.format_dropdown = undefined;\n", 3204 | "\n", 3205 | " this.image_mode = 'full';\n", 3206 | "\n", 3207 | " this.root = $('
');\n", 3208 | " this._root_extra_style(this.root)\n", 3209 | " this.root.attr('style', 'display: inline-block');\n", 3210 | "\n", 3211 | " $(parent_element).append(this.root);\n", 3212 | "\n", 3213 | " this._init_header(this);\n", 3214 | " this._init_canvas(this);\n", 3215 | " this._init_toolbar(this);\n", 3216 | "\n", 3217 | " var fig = this;\n", 3218 | "\n", 3219 | " this.waiting = false;\n", 3220 | "\n", 3221 | " this.ws.onopen = function () {\n", 3222 | " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", 3223 | " fig.send_message(\"send_image_mode\", {});\n", 3224 | " if (mpl.ratio != 1) {\n", 3225 | " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", 3226 | " }\n", 3227 | " fig.send_message(\"refresh\", {});\n", 3228 | " }\n", 3229 | "\n", 3230 | " this.imageObj.onload = function() {\n", 3231 | " if (fig.image_mode == 'full') {\n", 3232 | " // Full images could contain transparency (where diff images\n", 3233 | " // almost always do), so we need to clear the canvas so that\n", 3234 | " // there is no ghosting.\n", 3235 | " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", 3236 | " }\n", 3237 | " fig.context.drawImage(fig.imageObj, 0, 0);\n", 3238 | " };\n", 3239 | "\n", 3240 | " this.imageObj.onunload = function() {\n", 3241 | " fig.ws.close();\n", 3242 | " }\n", 3243 | "\n", 3244 | " this.ws.onmessage = this._make_on_message_function(this);\n", 3245 | "\n", 3246 | " this.ondownload = ondownload;\n", 3247 | "}\n", 3248 | "\n", 3249 | "mpl.figure.prototype._init_header = function() {\n", 3250 | " var titlebar = $(\n", 3251 | " '
');\n", 3253 | " var titletext = $(\n", 3254 | " '
');\n", 3256 | " titlebar.append(titletext)\n", 3257 | " this.root.append(titlebar);\n", 3258 | " this.header = titletext[0];\n", 3259 | "}\n", 3260 | "\n", 3261 | "\n", 3262 | "\n", 3263 | "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", 3264 | "\n", 3265 | "}\n", 3266 | "\n", 3267 | "\n", 3268 | "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", 3269 | "\n", 3270 | "}\n", 3271 | "\n", 3272 | "mpl.figure.prototype._init_canvas = function() {\n", 3273 | " var fig = this;\n", 3274 | "\n", 3275 | " var canvas_div = $('
');\n", 3276 | "\n", 3277 | " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", 3278 | "\n", 3279 | " function canvas_keyboard_event(event) {\n", 3280 | " return fig.key_event(event, event['data']);\n", 3281 | " }\n", 3282 | "\n", 3283 | " canvas_div.keydown('key_press', canvas_keyboard_event);\n", 3284 | " canvas_div.keyup('key_release', canvas_keyboard_event);\n", 3285 | " this.canvas_div = canvas_div\n", 3286 | " this._canvas_extra_style(canvas_div)\n", 3287 | " this.root.append(canvas_div);\n", 3288 | "\n", 3289 | " var canvas = $('');\n", 3290 | " canvas.addClass('mpl-canvas');\n", 3291 | " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", 3292 | "\n", 3293 | " this.canvas = canvas[0];\n", 3294 | " this.context = canvas[0].getContext(\"2d\");\n", 3295 | "\n", 3296 | " var backingStore = this.context.backingStorePixelRatio ||\n", 3297 | "\tthis.context.webkitBackingStorePixelRatio ||\n", 3298 | "\tthis.context.mozBackingStorePixelRatio ||\n", 3299 | "\tthis.context.msBackingStorePixelRatio ||\n", 3300 | "\tthis.context.oBackingStorePixelRatio ||\n", 3301 | "\tthis.context.backingStorePixelRatio || 1;\n", 3302 | "\n", 3303 | " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", 3304 | "\n", 3305 | " var rubberband = $('');\n", 3306 | " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", 3307 | "\n", 3308 | " var pass_mouse_events = true;\n", 3309 | "\n", 3310 | " canvas_div.resizable({\n", 3311 | " start: function(event, ui) {\n", 3312 | " pass_mouse_events = false;\n", 3313 | " },\n", 3314 | " resize: function(event, ui) {\n", 3315 | " fig.request_resize(ui.size.width, ui.size.height);\n", 3316 | " },\n", 3317 | " stop: function(event, ui) {\n", 3318 | " pass_mouse_events = true;\n", 3319 | " fig.request_resize(ui.size.width, ui.size.height);\n", 3320 | " },\n", 3321 | " });\n", 3322 | "\n", 3323 | " function mouse_event_fn(event) {\n", 3324 | " if (pass_mouse_events)\n", 3325 | " return fig.mouse_event(event, event['data']);\n", 3326 | " }\n", 3327 | "\n", 3328 | " rubberband.mousedown('button_press', mouse_event_fn);\n", 3329 | " rubberband.mouseup('button_release', mouse_event_fn);\n", 3330 | " // Throttle sequential mouse events to 1 every 20ms.\n", 3331 | " rubberband.mousemove('motion_notify', mouse_event_fn);\n", 3332 | "\n", 3333 | " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", 3334 | " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", 3335 | "\n", 3336 | " canvas_div.on(\"wheel\", function (event) {\n", 3337 | " event = event.originalEvent;\n", 3338 | " event['data'] = 'scroll'\n", 3339 | " if (event.deltaY < 0) {\n", 3340 | " event.step = 1;\n", 3341 | " } else {\n", 3342 | " event.step = -1;\n", 3343 | " }\n", 3344 | " mouse_event_fn(event);\n", 3345 | " });\n", 3346 | "\n", 3347 | " canvas_div.append(canvas);\n", 3348 | " canvas_div.append(rubberband);\n", 3349 | "\n", 3350 | " this.rubberband = rubberband;\n", 3351 | " this.rubberband_canvas = rubberband[0];\n", 3352 | " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", 3353 | " this.rubberband_context.strokeStyle = \"#000000\";\n", 3354 | "\n", 3355 | " this._resize_canvas = function(width, height) {\n", 3356 | " // Keep the size of the canvas, canvas container, and rubber band\n", 3357 | " // canvas in synch.\n", 3358 | " canvas_div.css('width', width)\n", 3359 | " canvas_div.css('height', height)\n", 3360 | "\n", 3361 | " canvas.attr('width', width * mpl.ratio);\n", 3362 | " canvas.attr('height', height * mpl.ratio);\n", 3363 | " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", 3364 | "\n", 3365 | " rubberband.attr('width', width);\n", 3366 | " rubberband.attr('height', height);\n", 3367 | " }\n", 3368 | "\n", 3369 | " // Set the figure to an initial 600x600px, this will subsequently be updated\n", 3370 | " // upon first draw.\n", 3371 | " this._resize_canvas(600, 600);\n", 3372 | "\n", 3373 | " // Disable right mouse context menu.\n", 3374 | " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", 3375 | " return false;\n", 3376 | " });\n", 3377 | "\n", 3378 | " function set_focus () {\n", 3379 | " canvas.focus();\n", 3380 | " canvas_div.focus();\n", 3381 | " }\n", 3382 | "\n", 3383 | " window.setTimeout(set_focus, 100);\n", 3384 | "}\n", 3385 | "\n", 3386 | "mpl.figure.prototype._init_toolbar = function() {\n", 3387 | " var fig = this;\n", 3388 | "\n", 3389 | " var nav_element = $('
')\n", 3390 | " nav_element.attr('style', 'width: 100%');\n", 3391 | " this.root.append(nav_element);\n", 3392 | "\n", 3393 | " // Define a callback function for later on.\n", 3394 | " function toolbar_event(event) {\n", 3395 | " return fig.toolbar_button_onclick(event['data']);\n", 3396 | " }\n", 3397 | " function toolbar_mouse_event(event) {\n", 3398 | " return fig.toolbar_button_onmouseover(event['data']);\n", 3399 | " }\n", 3400 | "\n", 3401 | " for(var toolbar_ind in mpl.toolbar_items) {\n", 3402 | " var name = mpl.toolbar_items[toolbar_ind][0];\n", 3403 | " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", 3404 | " var image = mpl.toolbar_items[toolbar_ind][2];\n", 3405 | " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", 3406 | "\n", 3407 | " if (!name) {\n", 3408 | " // put a spacer in here.\n", 3409 | " continue;\n", 3410 | " }\n", 3411 | " var button = $('');\n", 4642 | " button.click(method_name, toolbar_event);\n", 4643 | " button.mouseover(tooltip, toolbar_mouse_event);\n", 4644 | " nav_element.append(button);\n", 4645 | " }\n", 4646 | "\n", 4647 | " // Add the status bar.\n", 4648 | " var status_bar = $('');\n", 4649 | " nav_element.append(status_bar);\n", 4650 | " this.message = status_bar[0];\n", 4651 | "\n", 4652 | " // Add the close button to the window.\n", 4653 | " var buttongrp = $('
');\n", 4654 | " var button = $('');\n", 4655 | " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", 4656 | " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", 4657 | " buttongrp.append(button);\n", 4658 | " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", 4659 | " titlebar.prepend(buttongrp);\n", 4660 | "}\n", 4661 | "\n", 4662 | "mpl.figure.prototype._root_extra_style = function(el){\n", 4663 | " var fig = this\n", 4664 | " el.on(\"remove\", function(){\n", 4665 | "\tfig.close_ws(fig, {});\n", 4666 | " });\n", 4667 | "}\n", 4668 | "\n", 4669 | "mpl.figure.prototype._canvas_extra_style = function(el){\n", 4670 | " // this is important to make the div 'focusable\n", 4671 | " el.attr('tabindex', 0)\n", 4672 | " // reach out to IPython and tell the keyboard manager to turn it's self\n", 4673 | " // off when our div gets focus\n", 4674 | "\n", 4675 | " // location in version 3\n", 4676 | " if (IPython.notebook.keyboard_manager) {\n", 4677 | " IPython.notebook.keyboard_manager.register_events(el);\n", 4678 | " }\n", 4679 | " else {\n", 4680 | " // location in version 2\n", 4681 | " IPython.keyboard_manager.register_events(el);\n", 4682 | " }\n", 4683 | "\n", 4684 | "}\n", 4685 | "\n", 4686 | "mpl.figure.prototype._key_event_extra = function(event, name) {\n", 4687 | " var manager = IPython.notebook.keyboard_manager;\n", 4688 | " if (!manager)\n", 4689 | " manager = IPython.keyboard_manager;\n", 4690 | "\n", 4691 | " // Check for shift+enter\n", 4692 | " if (event.shiftKey && event.which == 13) {\n", 4693 | " this.canvas_div.blur();\n", 4694 | " event.shiftKey = false;\n", 4695 | " // Send a \"J\" for go to next cell\n", 4696 | " event.which = 74;\n", 4697 | " event.keyCode = 74;\n", 4698 | " manager.command_mode();\n", 4699 | " manager.handle_keydown(event);\n", 4700 | " }\n", 4701 | "}\n", 4702 | "\n", 4703 | "mpl.figure.prototype.handle_save = function(fig, msg) {\n", 4704 | " fig.ondownload(fig, null);\n", 4705 | "}\n", 4706 | "\n", 4707 | "\n", 4708 | "mpl.find_output_cell = function(html_output) {\n", 4709 | " // Return the cell and output element which can be found *uniquely* in the notebook.\n", 4710 | " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", 4711 | " // IPython event is triggered only after the cells have been serialised, which for\n", 4712 | " // our purposes (turning an active figure into a static one), is too late.\n", 4713 | " var cells = IPython.notebook.get_cells();\n", 4714 | " var ncells = cells.length;\n", 4715 | " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", 4722 | " data = data.data;\n", 4723 | " }\n", 4724 | " if (data['text/html'] == html_output) {\n", 4725 | " return [cell, data, j];\n", 4726 | " }\n", 4727 | " }\n", 4728 | " }\n", 4729 | " }\n", 4730 | "}\n", 4731 | "\n", 4732 | "// Register the function which deals with the matplotlib target/channel.\n", 4733 | "// The kernel may be null if the page has been refreshed.\n", 4734 | "if (IPython.notebook.kernel != null) {\n", 4735 | " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", 4736 | "}\n" 4737 | ], 4738 | "text/plain": [ 4739 | "" 4740 | ] 4741 | }, 4742 | "metadata": {}, 4743 | "output_type": "display_data" 4744 | }, 4745 | { 4746 | "data": { 4747 | "text/html": [ 4748 | "" 4749 | ], 4750 | "text/plain": [ 4751 | "" 4752 | ] 4753 | }, 4754 | "metadata": {}, 4755 | "output_type": "display_data" 4756 | }, 4757 | { 4758 | "name": "stderr", 4759 | "output_type": "stream", 4760 | "text": [ 4761 | "/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py:98: MatplotlibDeprecationWarning: \n", 4762 | "Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", 4763 | " \"Adding an axes using the same arguments as a previous axes \"\n", 4764 | "/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py:4238: SettingWithCopyWarning: \n", 4765 | "A value is trying to be set on a copy of a slice from a DataFrame\n", 4766 | "\n", 4767 | "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", 4768 | " return super().rename(**kwargs)\n" 4769 | ] 4770 | }, 4771 | { 4772 | "data": { 4773 | "application/javascript": [ 4774 | "/* Put everything inside the global mpl namespace */\n", 4775 | "window.mpl = {};\n", 4776 | "\n", 4777 | "\n", 4778 | "mpl.get_websocket_type = function() {\n", 4779 | " if (typeof(WebSocket) !== 'undefined') {\n", 4780 | " return WebSocket;\n", 4781 | " } else if (typeof(MozWebSocket) !== 'undefined') {\n", 4782 | " return MozWebSocket;\n", 4783 | " } else {\n", 4784 | " alert('Your browser does not have WebSocket support.' +\n", 4785 | " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", 4786 | " 'Firefox 4 and 5 are also supported but you ' +\n", 4787 | " 'have to enable WebSockets in about:config.');\n", 4788 | " };\n", 4789 | "}\n", 4790 | "\n", 4791 | "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", 4792 | " this.id = figure_id;\n", 4793 | "\n", 4794 | " this.ws = websocket;\n", 4795 | "\n", 4796 | " this.supports_binary = (this.ws.binaryType != undefined);\n", 4797 | "\n", 4798 | " if (!this.supports_binary) {\n", 4799 | " var warnings = document.getElementById(\"mpl-warnings\");\n", 4800 | " if (warnings) {\n", 4801 | " warnings.style.display = 'block';\n", 4802 | " warnings.textContent = (\n", 4803 | " \"This browser does not support binary websocket messages. \" +\n", 4804 | " \"Performance may be slow.\");\n", 4805 | " }\n", 4806 | " }\n", 4807 | "\n", 4808 | " this.imageObj = new Image();\n", 4809 | "\n", 4810 | " this.context = undefined;\n", 4811 | " this.message = undefined;\n", 4812 | " this.canvas = undefined;\n", 4813 | " this.rubberband_canvas = undefined;\n", 4814 | " this.rubberband_context = undefined;\n", 4815 | " this.format_dropdown = undefined;\n", 4816 | "\n", 4817 | " this.image_mode = 'full';\n", 4818 | "\n", 4819 | " this.root = $('
');\n", 4820 | " this._root_extra_style(this.root)\n", 4821 | " this.root.attr('style', 'display: inline-block');\n", 4822 | "\n", 4823 | " $(parent_element).append(this.root);\n", 4824 | "\n", 4825 | " this._init_header(this);\n", 4826 | " this._init_canvas(this);\n", 4827 | " this._init_toolbar(this);\n", 4828 | "\n", 4829 | " var fig = this;\n", 4830 | "\n", 4831 | " this.waiting = false;\n", 4832 | "\n", 4833 | " this.ws.onopen = function () {\n", 4834 | " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", 4835 | " fig.send_message(\"send_image_mode\", {});\n", 4836 | " if (mpl.ratio != 1) {\n", 4837 | " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", 4838 | " }\n", 4839 | " fig.send_message(\"refresh\", {});\n", 4840 | " }\n", 4841 | "\n", 4842 | " this.imageObj.onload = function() {\n", 4843 | " if (fig.image_mode == 'full') {\n", 4844 | " // Full images could contain transparency (where diff images\n", 4845 | " // almost always do), so we need to clear the canvas so that\n", 4846 | " // there is no ghosting.\n", 4847 | " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", 4848 | " }\n", 4849 | " fig.context.drawImage(fig.imageObj, 0, 0);\n", 4850 | " };\n", 4851 | "\n", 4852 | " this.imageObj.onunload = function() {\n", 4853 | " fig.ws.close();\n", 4854 | " }\n", 4855 | "\n", 4856 | " this.ws.onmessage = this._make_on_message_function(this);\n", 4857 | "\n", 4858 | " this.ondownload = ondownload;\n", 4859 | "}\n", 4860 | "\n", 4861 | "mpl.figure.prototype._init_header = function() {\n", 4862 | " var titlebar = $(\n", 4863 | " '
');\n", 4865 | " var titletext = $(\n", 4866 | " '
');\n", 4868 | " titlebar.append(titletext)\n", 4869 | " this.root.append(titlebar);\n", 4870 | " this.header = titletext[0];\n", 4871 | "}\n", 4872 | "\n", 4873 | "\n", 4874 | "\n", 4875 | "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", 4876 | "\n", 4877 | "}\n", 4878 | "\n", 4879 | "\n", 4880 | "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", 4881 | "\n", 4882 | "}\n", 4883 | "\n", 4884 | "mpl.figure.prototype._init_canvas = function() {\n", 4885 | " var fig = this;\n", 4886 | "\n", 4887 | " var canvas_div = $('
');\n", 4888 | "\n", 4889 | " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", 4890 | "\n", 4891 | " function canvas_keyboard_event(event) {\n", 4892 | " return fig.key_event(event, event['data']);\n", 4893 | " }\n", 4894 | "\n", 4895 | " canvas_div.keydown('key_press', canvas_keyboard_event);\n", 4896 | " canvas_div.keyup('key_release', canvas_keyboard_event);\n", 4897 | " this.canvas_div = canvas_div\n", 4898 | " this._canvas_extra_style(canvas_div)\n", 4899 | " this.root.append(canvas_div);\n", 4900 | "\n", 4901 | " var canvas = $('');\n", 4902 | " canvas.addClass('mpl-canvas');\n", 4903 | " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", 4904 | "\n", 4905 | " this.canvas = canvas[0];\n", 4906 | " this.context = canvas[0].getContext(\"2d\");\n", 4907 | "\n", 4908 | " var backingStore = this.context.backingStorePixelRatio ||\n", 4909 | "\tthis.context.webkitBackingStorePixelRatio ||\n", 4910 | "\tthis.context.mozBackingStorePixelRatio ||\n", 4911 | "\tthis.context.msBackingStorePixelRatio ||\n", 4912 | "\tthis.context.oBackingStorePixelRatio ||\n", 4913 | "\tthis.context.backingStorePixelRatio || 1;\n", 4914 | "\n", 4915 | " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", 4916 | "\n", 4917 | " var rubberband = $('');\n", 4918 | " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", 4919 | "\n", 4920 | " var pass_mouse_events = true;\n", 4921 | "\n", 4922 | " canvas_div.resizable({\n", 4923 | " start: function(event, ui) {\n", 4924 | " pass_mouse_events = false;\n", 4925 | " },\n", 4926 | " resize: function(event, ui) {\n", 4927 | " fig.request_resize(ui.size.width, ui.size.height);\n", 4928 | " },\n", 4929 | " stop: function(event, ui) {\n", 4930 | " pass_mouse_events = true;\n", 4931 | " fig.request_resize(ui.size.width, ui.size.height);\n", 4932 | " },\n", 4933 | " });\n", 4934 | "\n", 4935 | " function mouse_event_fn(event) {\n", 4936 | " if (pass_mouse_events)\n", 4937 | " return fig.mouse_event(event, event['data']);\n", 4938 | " }\n", 4939 | "\n", 4940 | " rubberband.mousedown('button_press', mouse_event_fn);\n", 4941 | " rubberband.mouseup('button_release', mouse_event_fn);\n", 4942 | " // Throttle sequential mouse events to 1 every 20ms.\n", 4943 | " rubberband.mousemove('motion_notify', mouse_event_fn);\n", 4944 | "\n", 4945 | " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", 4946 | " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", 4947 | "\n", 4948 | " canvas_div.on(\"wheel\", function (event) {\n", 4949 | " event = event.originalEvent;\n", 4950 | " event['data'] = 'scroll'\n", 4951 | " if (event.deltaY < 0) {\n", 4952 | " event.step = 1;\n", 4953 | " } else {\n", 4954 | " event.step = -1;\n", 4955 | " }\n", 4956 | " mouse_event_fn(event);\n", 4957 | " });\n", 4958 | "\n", 4959 | " canvas_div.append(canvas);\n", 4960 | " canvas_div.append(rubberband);\n", 4961 | "\n", 4962 | " this.rubberband = rubberband;\n", 4963 | " this.rubberband_canvas = rubberband[0];\n", 4964 | " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", 4965 | " this.rubberband_context.strokeStyle = \"#000000\";\n", 4966 | "\n", 4967 | " this._resize_canvas = function(width, height) {\n", 4968 | " // Keep the size of the canvas, canvas container, and rubber band\n", 4969 | " // canvas in synch.\n", 4970 | " canvas_div.css('width', width)\n", 4971 | " canvas_div.css('height', height)\n", 4972 | "\n", 4973 | " canvas.attr('width', width * mpl.ratio);\n", 4974 | " canvas.attr('height', height * mpl.ratio);\n", 4975 | " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", 4976 | "\n", 4977 | " rubberband.attr('width', width);\n", 4978 | " rubberband.attr('height', height);\n", 4979 | " }\n", 4980 | "\n", 4981 | " // Set the figure to an initial 600x600px, this will subsequently be updated\n", 4982 | " // upon first draw.\n", 4983 | " this._resize_canvas(600, 600);\n", 4984 | "\n", 4985 | " // Disable right mouse context menu.\n", 4986 | " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", 4987 | " return false;\n", 4988 | " });\n", 4989 | "\n", 4990 | " function set_focus () {\n", 4991 | " canvas.focus();\n", 4992 | " canvas_div.focus();\n", 4993 | " }\n", 4994 | "\n", 4995 | " window.setTimeout(set_focus, 100);\n", 4996 | "}\n", 4997 | "\n", 4998 | "mpl.figure.prototype._init_toolbar = function() {\n", 4999 | " var fig = this;\n", 5000 | "\n", 5001 | " var nav_element = $('
')\n", 5002 | " nav_element.attr('style', 'width: 100%');\n", 5003 | " this.root.append(nav_element);\n", 5004 | "\n", 5005 | " // Define a callback function for later on.\n", 5006 | " function toolbar_event(event) {\n", 5007 | " return fig.toolbar_button_onclick(event['data']);\n", 5008 | " }\n", 5009 | " function toolbar_mouse_event(event) {\n", 5010 | " return fig.toolbar_button_onmouseover(event['data']);\n", 5011 | " }\n", 5012 | "\n", 5013 | " for(var toolbar_ind in mpl.toolbar_items) {\n", 5014 | " var name = mpl.toolbar_items[toolbar_ind][0];\n", 5015 | " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", 5016 | " var image = mpl.toolbar_items[toolbar_ind][2];\n", 5017 | " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", 5018 | "\n", 5019 | " if (!name) {\n", 5020 | " // put a spacer in here.\n", 5021 | " continue;\n", 5022 | " }\n", 5023 | " var button = $('');\n", 6254 | " button.click(method_name, toolbar_event);\n", 6255 | " button.mouseover(tooltip, toolbar_mouse_event);\n", 6256 | " nav_element.append(button);\n", 6257 | " }\n", 6258 | "\n", 6259 | " // Add the status bar.\n", 6260 | " var status_bar = $('');\n", 6261 | " nav_element.append(status_bar);\n", 6262 | " this.message = status_bar[0];\n", 6263 | "\n", 6264 | " // Add the close button to the window.\n", 6265 | " var buttongrp = $('
');\n", 6266 | " var button = $('');\n", 6267 | " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", 6268 | " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", 6269 | " buttongrp.append(button);\n", 6270 | " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", 6271 | " titlebar.prepend(buttongrp);\n", 6272 | "}\n", 6273 | "\n", 6274 | "mpl.figure.prototype._root_extra_style = function(el){\n", 6275 | " var fig = this\n", 6276 | " el.on(\"remove\", function(){\n", 6277 | "\tfig.close_ws(fig, {});\n", 6278 | " });\n", 6279 | "}\n", 6280 | "\n", 6281 | "mpl.figure.prototype._canvas_extra_style = function(el){\n", 6282 | " // this is important to make the div 'focusable\n", 6283 | " el.attr('tabindex', 0)\n", 6284 | " // reach out to IPython and tell the keyboard manager to turn it's self\n", 6285 | " // off when our div gets focus\n", 6286 | "\n", 6287 | " // location in version 3\n", 6288 | " if (IPython.notebook.keyboard_manager) {\n", 6289 | " IPython.notebook.keyboard_manager.register_events(el);\n", 6290 | " }\n", 6291 | " else {\n", 6292 | " // location in version 2\n", 6293 | " IPython.keyboard_manager.register_events(el);\n", 6294 | " }\n", 6295 | "\n", 6296 | "}\n", 6297 | "\n", 6298 | "mpl.figure.prototype._key_event_extra = function(event, name) {\n", 6299 | " var manager = IPython.notebook.keyboard_manager;\n", 6300 | " if (!manager)\n", 6301 | " manager = IPython.keyboard_manager;\n", 6302 | "\n", 6303 | " // Check for shift+enter\n", 6304 | " if (event.shiftKey && event.which == 13) {\n", 6305 | " this.canvas_div.blur();\n", 6306 | " event.shiftKey = false;\n", 6307 | " // Send a \"J\" for go to next cell\n", 6308 | " event.which = 74;\n", 6309 | " event.keyCode = 74;\n", 6310 | " manager.command_mode();\n", 6311 | " manager.handle_keydown(event);\n", 6312 | " }\n", 6313 | "}\n", 6314 | "\n", 6315 | "mpl.figure.prototype.handle_save = function(fig, msg) {\n", 6316 | " fig.ondownload(fig, null);\n", 6317 | "}\n", 6318 | "\n", 6319 | "\n", 6320 | "mpl.find_output_cell = function(html_output) {\n", 6321 | " // Return the cell and output element which can be found *uniquely* in the notebook.\n", 6322 | " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", 6323 | " // IPython event is triggered only after the cells have been serialised, which for\n", 6324 | " // our purposes (turning an active figure into a static one), is too late.\n", 6325 | " var cells = IPython.notebook.get_cells();\n", 6326 | " var ncells = cells.length;\n", 6327 | " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", 6334 | " data = data.data;\n", 6335 | " }\n", 6336 | " if (data['text/html'] == html_output) {\n", 6337 | " return [cell, data, j];\n", 6338 | " }\n", 6339 | " }\n", 6340 | " }\n", 6341 | " }\n", 6342 | "}\n", 6343 | "\n", 6344 | "// Register the function which deals with the matplotlib target/channel.\n", 6345 | "// The kernel may be null if the page has been refreshed.\n", 6346 | "if (IPython.notebook.kernel != null) {\n", 6347 | " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", 6348 | "}\n" 6349 | ], 6350 | "text/plain": [ 6351 | "" 6352 | ] 6353 | }, 6354 | "metadata": {}, 6355 | "output_type": "display_data" 6356 | }, 6357 | { 6358 | "data": { 6359 | "text/html": [ 6360 | "" 6361 | ], 6362 | "text/plain": [ 6363 | "" 6364 | ] 6365 | }, 6366 | "metadata": {}, 6367 | "output_type": "display_data" 6368 | }, 6369 | { 6370 | "name": "stderr", 6371 | "output_type": "stream", 6372 | "text": [ 6373 | "/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py:98: MatplotlibDeprecationWarning: \n", 6374 | "Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", 6375 | " \"Adding an axes using the same arguments as a previous axes \"\n", 6376 | "/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py:4238: SettingWithCopyWarning: \n", 6377 | "A value is trying to be set on a copy of a slice from a DataFrame\n", 6378 | "\n", 6379 | "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", 6380 | " return super().rename(**kwargs)\n" 6381 | ] 6382 | }, 6383 | { 6384 | "data": { 6385 | "application/javascript": [ 6386 | "/* Put everything inside the global mpl namespace */\n", 6387 | "window.mpl = {};\n", 6388 | "\n", 6389 | "\n", 6390 | "mpl.get_websocket_type = function() {\n", 6391 | " if (typeof(WebSocket) !== 'undefined') {\n", 6392 | " return WebSocket;\n", 6393 | " } else if (typeof(MozWebSocket) !== 'undefined') {\n", 6394 | " return MozWebSocket;\n", 6395 | " } else {\n", 6396 | " alert('Your browser does not have WebSocket support.' +\n", 6397 | " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", 6398 | " 'Firefox 4 and 5 are also supported but you ' +\n", 6399 | " 'have to enable WebSockets in about:config.');\n", 6400 | " };\n", 6401 | "}\n", 6402 | "\n", 6403 | "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", 6404 | " this.id = figure_id;\n", 6405 | "\n", 6406 | " this.ws = websocket;\n", 6407 | "\n", 6408 | " this.supports_binary = (this.ws.binaryType != undefined);\n", 6409 | "\n", 6410 | " if (!this.supports_binary) {\n", 6411 | " var warnings = document.getElementById(\"mpl-warnings\");\n", 6412 | " if (warnings) {\n", 6413 | " warnings.style.display = 'block';\n", 6414 | " warnings.textContent = (\n", 6415 | " \"This browser does not support binary websocket messages. \" +\n", 6416 | " \"Performance may be slow.\");\n", 6417 | " }\n", 6418 | " }\n", 6419 | "\n", 6420 | " this.imageObj = new Image();\n", 6421 | "\n", 6422 | " this.context = undefined;\n", 6423 | " this.message = undefined;\n", 6424 | " this.canvas = undefined;\n", 6425 | " this.rubberband_canvas = undefined;\n", 6426 | " this.rubberband_context = undefined;\n", 6427 | " this.format_dropdown = undefined;\n", 6428 | "\n", 6429 | " this.image_mode = 'full';\n", 6430 | "\n", 6431 | " this.root = $('
');\n", 6432 | " this._root_extra_style(this.root)\n", 6433 | " this.root.attr('style', 'display: inline-block');\n", 6434 | "\n", 6435 | " $(parent_element).append(this.root);\n", 6436 | "\n", 6437 | " this._init_header(this);\n", 6438 | " this._init_canvas(this);\n", 6439 | " this._init_toolbar(this);\n", 6440 | "\n", 6441 | " var fig = this;\n", 6442 | "\n", 6443 | " this.waiting = false;\n", 6444 | "\n", 6445 | " this.ws.onopen = function () {\n", 6446 | " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", 6447 | " fig.send_message(\"send_image_mode\", {});\n", 6448 | " if (mpl.ratio != 1) {\n", 6449 | " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", 6450 | " }\n", 6451 | " fig.send_message(\"refresh\", {});\n", 6452 | " }\n", 6453 | "\n", 6454 | " this.imageObj.onload = function() {\n", 6455 | " if (fig.image_mode == 'full') {\n", 6456 | " // Full images could contain transparency (where diff images\n", 6457 | " // almost always do), so we need to clear the canvas so that\n", 6458 | " // there is no ghosting.\n", 6459 | " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", 6460 | " }\n", 6461 | " fig.context.drawImage(fig.imageObj, 0, 0);\n", 6462 | " };\n", 6463 | "\n", 6464 | " this.imageObj.onunload = function() {\n", 6465 | " fig.ws.close();\n", 6466 | " }\n", 6467 | "\n", 6468 | " this.ws.onmessage = this._make_on_message_function(this);\n", 6469 | "\n", 6470 | " this.ondownload = ondownload;\n", 6471 | "}\n", 6472 | "\n", 6473 | "mpl.figure.prototype._init_header = function() {\n", 6474 | " var titlebar = $(\n", 6475 | " '
');\n", 6477 | " var titletext = $(\n", 6478 | " '
');\n", 6480 | " titlebar.append(titletext)\n", 6481 | " this.root.append(titlebar);\n", 6482 | " this.header = titletext[0];\n", 6483 | "}\n", 6484 | "\n", 6485 | "\n", 6486 | "\n", 6487 | "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", 6488 | "\n", 6489 | "}\n", 6490 | "\n", 6491 | "\n", 6492 | "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", 6493 | "\n", 6494 | "}\n", 6495 | "\n", 6496 | "mpl.figure.prototype._init_canvas = function() {\n", 6497 | " var fig = this;\n", 6498 | "\n", 6499 | " var canvas_div = $('
');\n", 6500 | "\n", 6501 | " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", 6502 | "\n", 6503 | " function canvas_keyboard_event(event) {\n", 6504 | " return fig.key_event(event, event['data']);\n", 6505 | " }\n", 6506 | "\n", 6507 | " canvas_div.keydown('key_press', canvas_keyboard_event);\n", 6508 | " canvas_div.keyup('key_release', canvas_keyboard_event);\n", 6509 | " this.canvas_div = canvas_div\n", 6510 | " this._canvas_extra_style(canvas_div)\n", 6511 | " this.root.append(canvas_div);\n", 6512 | "\n", 6513 | " var canvas = $('');\n", 6514 | " canvas.addClass('mpl-canvas');\n", 6515 | " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", 6516 | "\n", 6517 | " this.canvas = canvas[0];\n", 6518 | " this.context = canvas[0].getContext(\"2d\");\n", 6519 | "\n", 6520 | " var backingStore = this.context.backingStorePixelRatio ||\n", 6521 | "\tthis.context.webkitBackingStorePixelRatio ||\n", 6522 | "\tthis.context.mozBackingStorePixelRatio ||\n", 6523 | "\tthis.context.msBackingStorePixelRatio ||\n", 6524 | "\tthis.context.oBackingStorePixelRatio ||\n", 6525 | "\tthis.context.backingStorePixelRatio || 1;\n", 6526 | "\n", 6527 | " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", 6528 | "\n", 6529 | " var rubberband = $('');\n", 6530 | " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", 6531 | "\n", 6532 | " var pass_mouse_events = true;\n", 6533 | "\n", 6534 | " canvas_div.resizable({\n", 6535 | " start: function(event, ui) {\n", 6536 | " pass_mouse_events = false;\n", 6537 | " },\n", 6538 | " resize: function(event, ui) {\n", 6539 | " fig.request_resize(ui.size.width, ui.size.height);\n", 6540 | " },\n", 6541 | " stop: function(event, ui) {\n", 6542 | " pass_mouse_events = true;\n", 6543 | " fig.request_resize(ui.size.width, ui.size.height);\n", 6544 | " },\n", 6545 | " });\n", 6546 | "\n", 6547 | " function mouse_event_fn(event) {\n", 6548 | " if (pass_mouse_events)\n", 6549 | " return fig.mouse_event(event, event['data']);\n", 6550 | " }\n", 6551 | "\n", 6552 | " rubberband.mousedown('button_press', mouse_event_fn);\n", 6553 | " rubberband.mouseup('button_release', mouse_event_fn);\n", 6554 | " // Throttle sequential mouse events to 1 every 20ms.\n", 6555 | " rubberband.mousemove('motion_notify', mouse_event_fn);\n", 6556 | "\n", 6557 | " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", 6558 | " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", 6559 | "\n", 6560 | " canvas_div.on(\"wheel\", function (event) {\n", 6561 | " event = event.originalEvent;\n", 6562 | " event['data'] = 'scroll'\n", 6563 | " if (event.deltaY < 0) {\n", 6564 | " event.step = 1;\n", 6565 | " } else {\n", 6566 | " event.step = -1;\n", 6567 | " }\n", 6568 | " mouse_event_fn(event);\n", 6569 | " });\n", 6570 | "\n", 6571 | " canvas_div.append(canvas);\n", 6572 | " canvas_div.append(rubberband);\n", 6573 | "\n", 6574 | " this.rubberband = rubberband;\n", 6575 | " this.rubberband_canvas = rubberband[0];\n", 6576 | " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", 6577 | " this.rubberband_context.strokeStyle = \"#000000\";\n", 6578 | "\n", 6579 | " this._resize_canvas = function(width, height) {\n", 6580 | " // Keep the size of the canvas, canvas container, and rubber band\n", 6581 | " // canvas in synch.\n", 6582 | " canvas_div.css('width', width)\n", 6583 | " canvas_div.css('height', height)\n", 6584 | "\n", 6585 | " canvas.attr('width', width * mpl.ratio);\n", 6586 | " canvas.attr('height', height * mpl.ratio);\n", 6587 | " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", 6588 | "\n", 6589 | " rubberband.attr('width', width);\n", 6590 | " rubberband.attr('height', height);\n", 6591 | " }\n", 6592 | "\n", 6593 | " // Set the figure to an initial 600x600px, this will subsequently be updated\n", 6594 | " // upon first draw.\n", 6595 | " this._resize_canvas(600, 600);\n", 6596 | "\n", 6597 | " // Disable right mouse context menu.\n", 6598 | " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", 6599 | " return false;\n", 6600 | " });\n", 6601 | "\n", 6602 | " function set_focus () {\n", 6603 | " canvas.focus();\n", 6604 | " canvas_div.focus();\n", 6605 | " }\n", 6606 | "\n", 6607 | " window.setTimeout(set_focus, 100);\n", 6608 | "}\n", 6609 | "\n", 6610 | "mpl.figure.prototype._init_toolbar = function() {\n", 6611 | " var fig = this;\n", 6612 | "\n", 6613 | " var nav_element = $('
')\n", 6614 | " nav_element.attr('style', 'width: 100%');\n", 6615 | " this.root.append(nav_element);\n", 6616 | "\n", 6617 | " // Define a callback function for later on.\n", 6618 | " function toolbar_event(event) {\n", 6619 | " return fig.toolbar_button_onclick(event['data']);\n", 6620 | " }\n", 6621 | " function toolbar_mouse_event(event) {\n", 6622 | " return fig.toolbar_button_onmouseover(event['data']);\n", 6623 | " }\n", 6624 | "\n", 6625 | " for(var toolbar_ind in mpl.toolbar_items) {\n", 6626 | " var name = mpl.toolbar_items[toolbar_ind][0];\n", 6627 | " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", 6628 | " var image = mpl.toolbar_items[toolbar_ind][2];\n", 6629 | " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", 6630 | "\n", 6631 | " if (!name) {\n", 6632 | " // put a spacer in here.\n", 6633 | " continue;\n", 6634 | " }\n", 6635 | " var button = $('');\n", 7866 | " button.click(method_name, toolbar_event);\n", 7867 | " button.mouseover(tooltip, toolbar_mouse_event);\n", 7868 | " nav_element.append(button);\n", 7869 | " }\n", 7870 | "\n", 7871 | " // Add the status bar.\n", 7872 | " var status_bar = $('');\n", 7873 | " nav_element.append(status_bar);\n", 7874 | " this.message = status_bar[0];\n", 7875 | "\n", 7876 | " // Add the close button to the window.\n", 7877 | " var buttongrp = $('
');\n", 7878 | " var button = $('');\n", 7879 | " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", 7880 | " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", 7881 | " buttongrp.append(button);\n", 7882 | " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", 7883 | " titlebar.prepend(buttongrp);\n", 7884 | "}\n", 7885 | "\n", 7886 | "mpl.figure.prototype._root_extra_style = function(el){\n", 7887 | " var fig = this\n", 7888 | " el.on(\"remove\", function(){\n", 7889 | "\tfig.close_ws(fig, {});\n", 7890 | " });\n", 7891 | "}\n", 7892 | "\n", 7893 | "mpl.figure.prototype._canvas_extra_style = function(el){\n", 7894 | " // this is important to make the div 'focusable\n", 7895 | " el.attr('tabindex', 0)\n", 7896 | " // reach out to IPython and tell the keyboard manager to turn it's self\n", 7897 | " // off when our div gets focus\n", 7898 | "\n", 7899 | " // location in version 3\n", 7900 | " if (IPython.notebook.keyboard_manager) {\n", 7901 | " IPython.notebook.keyboard_manager.register_events(el);\n", 7902 | " }\n", 7903 | " else {\n", 7904 | " // location in version 2\n", 7905 | " IPython.keyboard_manager.register_events(el);\n", 7906 | " }\n", 7907 | "\n", 7908 | "}\n", 7909 | "\n", 7910 | "mpl.figure.prototype._key_event_extra = function(event, name) {\n", 7911 | " var manager = IPython.notebook.keyboard_manager;\n", 7912 | " if (!manager)\n", 7913 | " manager = IPython.keyboard_manager;\n", 7914 | "\n", 7915 | " // Check for shift+enter\n", 7916 | " if (event.shiftKey && event.which == 13) {\n", 7917 | " this.canvas_div.blur();\n", 7918 | " event.shiftKey = false;\n", 7919 | " // Send a \"J\" for go to next cell\n", 7920 | " event.which = 74;\n", 7921 | " event.keyCode = 74;\n", 7922 | " manager.command_mode();\n", 7923 | " manager.handle_keydown(event);\n", 7924 | " }\n", 7925 | "}\n", 7926 | "\n", 7927 | "mpl.figure.prototype.handle_save = function(fig, msg) {\n", 7928 | " fig.ondownload(fig, null);\n", 7929 | "}\n", 7930 | "\n", 7931 | "\n", 7932 | "mpl.find_output_cell = function(html_output) {\n", 7933 | " // Return the cell and output element which can be found *uniquely* in the notebook.\n", 7934 | " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", 7935 | " // IPython event is triggered only after the cells have been serialised, which for\n", 7936 | " // our purposes (turning an active figure into a static one), is too late.\n", 7937 | " var cells = IPython.notebook.get_cells();\n", 7938 | " var ncells = cells.length;\n", 7939 | " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", 7946 | " data = data.data;\n", 7947 | " }\n", 7948 | " if (data['text/html'] == html_output) {\n", 7949 | " return [cell, data, j];\n", 7950 | " }\n", 7951 | " }\n", 7952 | " }\n", 7953 | " }\n", 7954 | "}\n", 7955 | "\n", 7956 | "// Register the function which deals with the matplotlib target/channel.\n", 7957 | "// The kernel may be null if the page has been refreshed.\n", 7958 | "if (IPython.notebook.kernel != null) {\n", 7959 | " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", 7960 | "}\n" 7961 | ], 7962 | "text/plain": [ 7963 | "" 7964 | ] 7965 | }, 7966 | "metadata": {}, 7967 | "output_type": "display_data" 7968 | }, 7969 | { 7970 | "data": { 7971 | "text/html": [ 7972 | "" 7973 | ], 7974 | "text/plain": [ 7975 | "" 7976 | ] 7977 | }, 7978 | "metadata": {}, 7979 | "output_type": "display_data" 7980 | }, 7981 | { 7982 | "name": "stderr", 7983 | "output_type": "stream", 7984 | "text": [ 7985 | "/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py:98: MatplotlibDeprecationWarning: \n", 7986 | "Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", 7987 | " \"Adding an axes using the same arguments as a previous axes \"\n" 7988 | ] 7989 | } 7990 | ], 7991 | "source": [ 7992 | "for cols in required_cols:\n", 7993 | " try:\n", 7994 | " dataframe='{data}_cols'.format(data=cols)\n", 7995 | " dataframe = testdata[['date_','countofdays',cols]]\n", 7996 | " title = area_map_dict.get(cols)\n", 7997 | " dataframe.rename(columns={cols:'columnvalue'}, inplace=True)\n", 7998 | " plt,txt,fig,ax=create_plot(dataframe,title)\n", 7999 | " ani=matplotlib.animation.FuncAnimation(fig, animate,fargs=[dataframe, plt,txt,ax],interval=100000, repeat=False)\n", 8000 | " plt.show(block=True)\n", 8001 | " filname ='{cols}_mobility1.mp4'.format(cols=cols)\n", 8002 | " #anim.save(filname, writer='imagemagick', fps=5)\n", 8003 | " ani.save(filname, writer=writer)\n", 8004 | " except KeyError:\n", 8005 | " pass \n", 8006 | " \n", 8007 | " \n", 8008 | " " 8009 | ] 8010 | }, 8011 | { 8012 | "cell_type": "code", 8013 | "execution_count": null, 8014 | "metadata": {}, 8015 | "outputs": [], 8016 | "source": [] 8017 | } 8018 | ], 8019 | "metadata": { 8020 | "kernelspec": { 8021 | "display_name": "Python 3", 8022 | "language": "python", 8023 | "name": "python3" 8024 | }, 8025 | "language_info": { 8026 | "codemirror_mode": { 8027 | "name": "ipython", 8028 | "version": 3 8029 | }, 8030 | "file_extension": ".py", 8031 | "mimetype": "text/x-python", 8032 | "name": "python", 8033 | "nbconvert_exporter": "python", 8034 | "pygments_lexer": "ipython3", 8035 | "version": "3.7.1" 8036 | } 8037 | }, 8038 | "nbformat": 4, 8039 | "nbformat_minor": 2 8040 | } 8041 | -------------------------------------------------------------------------------- /Recommendation/MovieLens_Youtube_Recommendation_Candidate_Generation_Network.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "MovieLens Youtube Recommendation -Candidate Generation Network.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | }, 13 | "accelerator": "GPU" 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "code", 18 | "metadata": { 19 | "id": "SlxO4osBVp90", 20 | "colab_type": "code", 21 | "colab": { 22 | "base_uri": "https://localhost:8080/", 23 | "height": 51 24 | }, 25 | "outputId": "a0130c25-bf9f-4c67-f615-7b957fa4f199" 26 | }, 27 | "source": [ 28 | "\n", 29 | "# Get the data from Movielens website\n", 30 | "from urllib.request import urlretrieve\n", 31 | "import zipfile\n", 32 | "import pandas as pd\n", 33 | "\n", 34 | "urlretrieve(\"http://files.grouplens.org/datasets/movielens/ml-100k.zip\", \"movielens.zip\")\n", 35 | "zip_ref = zipfile.ZipFile('movielens.zip', \"r\")\n", 36 | "zip_ref.extractall()\n", 37 | "print(\"Done. Dataset contains:\")\n", 38 | "print(zip_ref.read('ml-100k/u.info'))\n", 39 | "\n", 40 | "#Process the dataset for movies, users,ratings and genre\n", 41 | "# Load each data set (users, movies, and ratings).\n", 42 | "users_cols = ['user_id', 'age', 'sex', 'occupation', 'zip_code']\n", 43 | "users = pd.read_csv(\n", 44 | " 'ml-100k/u.user', sep='|', names=users_cols, encoding='latin-1')\n", 45 | "\n", 46 | "ratings_cols = ['user_id', 'movie_id', 'rating', 'unix_timestamp']\n", 47 | "ratings = pd.read_csv(\n", 48 | " 'ml-100k/u.data', sep='\\t', names=ratings_cols, encoding='latin-1')\n", 49 | "\n", 50 | "# The movies file contains a binary feature for each genre.\n", 51 | "genre_cols = [\n", 52 | " \"genre_unknown\", \"Action\", \"Adventure\", \"Animation\", \"Children\", \"Comedy\",\n", 53 | " \"Crime\", \"Documentary\", \"Drama\", \"Fantasy\", \"Film-Noir\", \"Horror\",\n", 54 | " \"Musical\", \"Mystery\", \"Romance\", \"Sci-Fi\", \"Thriller\", \"War\", \"Western\",\n", 55 | "]\n", 56 | "movies_cols = [\n", 57 | " 'movie_id', 'title', 'release_date', \"video_release_date\", \"imdb_url\"\n", 58 | "] + genre_cols\n", 59 | "movies = pd.read_csv(\n", 60 | " 'ml-100k/u.item', sep='|', names=movies_cols, encoding='latin-1')\n", 61 | "\n", 62 | "# Since the ids start at 1, we shift them to start at 0.\n", 63 | "users[\"user_id\"] = users[\"user_id\"].apply(lambda x: str(x-1))\n", 64 | "movies[\"movie_id\"] = movies[\"movie_id\"].apply(lambda x: str(x-1))\n", 65 | "movies[\"year\"] = movies['release_date'].apply(lambda x: str(x).split('-')[-1])\n", 66 | "ratings[\"movie_id\"] = ratings[\"movie_id\"].apply(lambda x: str(x-1))\n", 67 | "ratings[\"user_id\"] = ratings[\"user_id\"].apply(lambda x: str(x-1))\n", 68 | "ratings[\"rating\"] = ratings[\"rating\"].apply(lambda x: float(x))\n" 69 | ], 70 | "execution_count": 4, 71 | "outputs": [ 72 | { 73 | "output_type": "stream", 74 | "text": [ 75 | "Done. Dataset contains:\n", 76 | "b'943 users\\n1682 items\\n100000 ratings\\n'\n" 77 | ], 78 | "name": "stdout" 79 | } 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "metadata": { 85 | "id": "w0X07ZW9Gy_K", 86 | "colab_type": "code", 87 | "cellView": "both", 88 | "colab": {} 89 | }, 90 | "source": [ 91 | "#Get all the genres for a movie\n", 92 | "import numpy as np\n", 93 | "genre_occurences = movies[genre_cols].sum().to_dict()\n", 94 | "\n", 95 | "genres_encoded = {x: i for i, x in enumerate(genre_cols)}\n", 96 | "\n", 97 | "def get_genres(movies, genres):\n", 98 | " def get_all_genres(gs):\n", 99 | " active = [str(genres_encoded[genre]) for genre, g in zip(genres, gs) if g==1]\n", 100 | " if len(active) == 0:\n", 101 | " return '0'\n", 102 | " return ','.join((active))\n", 103 | " movies['all_genres'] = [\n", 104 | " get_all_genres(gs) for gs in zip(*[movies[genre] for genre in genres])]\n", 105 | "\n", 106 | "get_genres(movies, genre_cols)" 107 | ], 108 | "execution_count": 6, 109 | "outputs": [] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "metadata": { 114 | "id": "f_MlFnk_OCbf", 115 | "colab_type": "code", 116 | "colab": { 117 | "base_uri": "https://localhost:8080/", 118 | "height": 247 119 | }, 120 | "outputId": "b6c2cdc0-92c6-4e94-b8d5-2c3ddde7f1eb" 121 | }, 122 | "source": [ 123 | "movies.head(3)" 124 | ], 125 | "execution_count": 7, 126 | "outputs": [ 127 | { 128 | "output_type": "execute_result", 129 | "data": { 130 | "text/html": [ 131 | "
\n", 132 | "\n", 145 | "\n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | "
movie_idtitlerelease_datevideo_release_dateimdb_urlgenre_unknownActionAdventureAnimationChildrenComedyCrimeDocumentaryDramaFantasyFilm-NoirHorrorMusicalMysteryRomanceSci-FiThrillerWarWesternyearall_genres
00Toy Story (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...000111000000000000019953,4,5
11GoldenEye (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?GoldenEye%20(...011000000000000010019951,2,16
22Four Rooms (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?Four%20Rooms%...0000000000000000100199516
\n", 267 | "
" 268 | ], 269 | "text/plain": [ 270 | " movie_id title release_date ... Western year all_genres\n", 271 | "0 0 Toy Story (1995) 01-Jan-1995 ... 0 1995 3,4,5\n", 272 | "1 1 GoldenEye (1995) 01-Jan-1995 ... 0 1995 1,2,16\n", 273 | "2 2 Four Rooms (1995) 01-Jan-1995 ... 0 1995 16\n", 274 | "\n", 275 | "[3 rows x 26 columns]" 276 | ] 277 | }, 278 | "metadata": { 279 | "tags": [] 280 | }, 281 | "execution_count": 7 282 | } 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "metadata": { 288 | "id": "pD6DCTUx2U6a", 289 | "colab_type": "code", 290 | "colab": {} 291 | }, 292 | "source": [ 293 | "rating_details_sample = ratings.merge(movies, on='movie_id').merge(users, on='user_id')\n" 294 | ], 295 | "execution_count": 8, 296 | "outputs": [] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "metadata": { 301 | "id": "VNPAg5AwFThV", 302 | "colab_type": "code", 303 | "colab": { 304 | "base_uri": "https://localhost:8080/", 305 | "height": 34 306 | }, 307 | "outputId": "01545bec-8bc3-4c18-dacb-fb9e95825e1b" 308 | }, 309 | "source": [ 310 | "\n", 311 | "rating_details_sample.shape" 312 | ], 313 | "execution_count": 9, 314 | "outputs": [ 315 | { 316 | "output_type": "execute_result", 317 | "data": { 318 | "text/plain": [ 319 | "(100000, 33)" 320 | ] 321 | }, 322 | "metadata": { 323 | "tags": [] 324 | }, 325 | "execution_count": 9 326 | } 327 | ] 328 | }, 329 | { 330 | "cell_type": "code", 331 | "metadata": { 332 | "id": "sJlXiopnCA6C", 333 | "colab_type": "code", 334 | "colab": { 335 | "base_uri": "https://localhost:8080/", 336 | "height": 770 337 | }, 338 | "outputId": "d2a28cb1-e2d9-41f9-bccf-57a94b55aed9" 339 | }, 340 | "source": [ 341 | "rating_details_sample.head(10)" 342 | ], 343 | "execution_count": 10, 344 | "outputs": [ 345 | { 346 | "output_type": "execute_result", 347 | "data": { 348 | "text/html": [ 349 | "
\n", 350 | "\n", 363 | "\n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | "
user_idmovie_idratingunix_timestamptitlerelease_datevideo_release_dateimdb_urlgenre_unknownActionAdventureAnimationChildrenComedyCrimeDocumentaryDramaFantasyFilm-NoirHorrorMusicalMysteryRomanceSci-FiThrillerWarWesternyearall_genresagesexoccupationzip_code
01952413.0881250949Kolya (1996)24-Jan-1997NaNhttp://us.imdb.com/M/title-exact?Kolya%20(1996)00000100000000000001997549Mwriter55105
11952562.0881251577Men in Black (1997)04-Jul-1997NaNhttp://us.imdb.com/M/title-exact?Men+in+Black+...011001000000000100019971,2,5,1549Mwriter55105
21951104.0881251793Truth About Cats & Dogs, The (1996)26-Apr-1996NaNhttp://us.imdb.com/M/title-exact?Truth%20About...000001000000001000019965,1449Mwriter55105
3195244.0881251955Birdcage, The (1996)08-Mar-1996NaNhttp://us.imdb.com/M/title-exact?Birdcage,%20T...00000100000000000001996549Mwriter55105
41953814.0881251843Adventures of Priscilla, Queen of the Desert, ...01-Jan-1994NaNhttp://us.imdb.com/M/title-exact?Adventures%20...000001001000000000019945,849Mwriter55105
51952013.0881251728Groundhog Day (1993)01-Jan-1993NaNhttp://us.imdb.com/M/title-exact?Groundhog%20D...000001000000001000019935,1449Mwriter55105
61951525.0881251820Fish Called Wanda, A (1988)01-Jan-1988NaNhttp://us.imdb.com/M/title-exact?Fish%20Called...00000100000000000001988549Mwriter55105
71952855.0881250949English Patient, The (1996)15-Nov-1996NaNhttp://us.imdb.com/M/title-exact?English%20Pat...000000001000001001019968,14,1749Mwriter55105
8195653.0881251911While You Were Sleeping (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?While%20You%2...000001000000001000019955,1449Mwriter55105
91958444.0881251954That Thing You Do! (1996)28-Sep-1996NaNhttp://us.imdb.com/M/title-exact?That%20Thing%...00000100000000000001996549Mwriter55105
\n", 765 | "
" 766 | ], 767 | "text/plain": [ 768 | " user_id movie_id rating unix_timestamp ... age sex occupation zip_code\n", 769 | "0 195 241 3.0 881250949 ... 49 M writer 55105\n", 770 | "1 195 256 2.0 881251577 ... 49 M writer 55105\n", 771 | "2 195 110 4.0 881251793 ... 49 M writer 55105\n", 772 | "3 195 24 4.0 881251955 ... 49 M writer 55105\n", 773 | "4 195 381 4.0 881251843 ... 49 M writer 55105\n", 774 | "5 195 201 3.0 881251728 ... 49 M writer 55105\n", 775 | "6 195 152 5.0 881251820 ... 49 M writer 55105\n", 776 | "7 195 285 5.0 881250949 ... 49 M writer 55105\n", 777 | "8 195 65 3.0 881251911 ... 49 M writer 55105\n", 778 | "9 195 844 4.0 881251954 ... 49 M writer 55105\n", 779 | "\n", 780 | "[10 rows x 33 columns]" 781 | ] 782 | }, 783 | "metadata": { 784 | "tags": [] 785 | }, 786 | "execution_count": 10 787 | } 788 | ] 789 | }, 790 | { 791 | "cell_type": "code", 792 | "metadata": { 793 | "id": "VBvQElHSq-Yh", 794 | "colab_type": "code", 795 | "colab": {} 796 | }, 797 | "source": [ 798 | "rating_details_sample['user_id']=rating_details_sample['user_id'].astype(int)\n", 799 | "rating_details_sample['movie_id']=rating_details_sample['movie_id'].astype(int)" 800 | ], 801 | "execution_count": 11, 802 | "outputs": [] 803 | }, 804 | { 805 | "cell_type": "code", 806 | "metadata": { 807 | "id": "Q4Kd1yJzFwq3", 808 | "colab_type": "code", 809 | "colab": {} 810 | }, 811 | "source": [ 812 | "\n", 813 | "rating_details_sample=rating_details_sample.set_index(['user_id','unix_timestamp']).sort_index()" 814 | ], 815 | "execution_count": null, 816 | "outputs": [] 817 | }, 818 | { 819 | "cell_type": "code", 820 | "metadata": { 821 | "id": "xNfsc9fNF29M", 822 | "colab_type": "code", 823 | "colab": {} 824 | }, 825 | "source": [ 826 | "rating_details_sample =rating_details_sample.reset_index()" 827 | ], 828 | "execution_count": null, 829 | "outputs": [] 830 | }, 831 | { 832 | "cell_type": "code", 833 | "metadata": { 834 | "id": "uIG-J7IHF_MG", 835 | "colab_type": "code", 836 | "colab": {} 837 | }, 838 | "source": [ 839 | "# Get the like and dislike movie list\n", 840 | "import numpy as np\n", 841 | "rating_details_sample['movie_type'] = np.where(rating_details_sample['rating'] >=3, 'like','dislike')\n", 842 | "rating_details_sample['movie_name'] = rating_details_sample['title'].str[:-6]" 843 | ], 844 | "execution_count": null, 845 | "outputs": [] 846 | }, 847 | { 848 | "cell_type": "code", 849 | "metadata": { 850 | "id": "tJbXRmjQG5ZB", 851 | "colab_type": "code", 852 | "colab": { 853 | "base_uri": "https://localhost:8080/", 854 | "height": 872 855 | }, 856 | "outputId": "c49e3e78-3e86-42a4-914a-02fc04cd0deb" 857 | }, 858 | "source": [ 859 | "rating_details_sample.head(10)" 860 | ], 861 | "execution_count": null, 862 | "outputs": [ 863 | { 864 | "output_type": "execute_result", 865 | "data": { 866 | "text/html": [ 867 | "
\n", 868 | "\n", 881 | "\n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | " \n", 1080 | " \n", 1081 | " \n", 1082 | " \n", 1083 | " \n", 1084 | " \n", 1085 | " \n", 1086 | " \n", 1087 | " \n", 1088 | " \n", 1089 | " \n", 1090 | " \n", 1091 | " \n", 1092 | " \n", 1093 | " \n", 1094 | " \n", 1095 | " \n", 1096 | " \n", 1097 | " \n", 1098 | " \n", 1099 | " \n", 1100 | " \n", 1101 | " \n", 1102 | " \n", 1103 | " \n", 1104 | " \n", 1105 | " \n", 1106 | " \n", 1107 | " \n", 1108 | " \n", 1109 | " \n", 1110 | " \n", 1111 | " \n", 1112 | " \n", 1113 | " \n", 1114 | " \n", 1115 | " \n", 1116 | " \n", 1117 | " \n", 1118 | " \n", 1119 | " \n", 1120 | " \n", 1121 | " \n", 1122 | " \n", 1123 | " \n", 1124 | " \n", 1125 | " \n", 1126 | " \n", 1127 | " \n", 1128 | " \n", 1129 | " \n", 1130 | " \n", 1131 | " \n", 1132 | " \n", 1133 | " \n", 1134 | " \n", 1135 | " \n", 1136 | " \n", 1137 | " \n", 1138 | " \n", 1139 | " \n", 1140 | " \n", 1141 | " \n", 1142 | " \n", 1143 | " \n", 1144 | " \n", 1145 | " \n", 1146 | " \n", 1147 | " \n", 1148 | " \n", 1149 | " \n", 1150 | " \n", 1151 | " \n", 1152 | " \n", 1153 | " \n", 1154 | " \n", 1155 | " \n", 1156 | " \n", 1157 | " \n", 1158 | " \n", 1159 | " \n", 1160 | " \n", 1161 | " \n", 1162 | " \n", 1163 | " \n", 1164 | " \n", 1165 | " \n", 1166 | " \n", 1167 | " \n", 1168 | " \n", 1169 | " \n", 1170 | " \n", 1171 | " \n", 1172 | " \n", 1173 | " \n", 1174 | " \n", 1175 | " \n", 1176 | " \n", 1177 | " \n", 1178 | " \n", 1179 | " \n", 1180 | " \n", 1181 | " \n", 1182 | " \n", 1183 | " \n", 1184 | " \n", 1185 | " \n", 1186 | " \n", 1187 | " \n", 1188 | " \n", 1189 | " \n", 1190 | " \n", 1191 | " \n", 1192 | " \n", 1193 | " \n", 1194 | " \n", 1195 | " \n", 1196 | " \n", 1197 | " \n", 1198 | " \n", 1199 | " \n", 1200 | " \n", 1201 | " \n", 1202 | " \n", 1203 | " \n", 1204 | " \n", 1205 | " \n", 1206 | " \n", 1207 | " \n", 1208 | " \n", 1209 | " \n", 1210 | " \n", 1211 | " \n", 1212 | " \n", 1213 | " \n", 1214 | " \n", 1215 | " \n", 1216 | " \n", 1217 | " \n", 1218 | " \n", 1219 | " \n", 1220 | " \n", 1221 | " \n", 1222 | " \n", 1223 | " \n", 1224 | " \n", 1225 | " \n", 1226 | " \n", 1227 | " \n", 1228 | " \n", 1229 | " \n", 1230 | " \n", 1231 | " \n", 1232 | " \n", 1233 | " \n", 1234 | " \n", 1235 | " \n", 1236 | " \n", 1237 | " \n", 1238 | " \n", 1239 | " \n", 1240 | " \n", 1241 | " \n", 1242 | " \n", 1243 | " \n", 1244 | " \n", 1245 | " \n", 1246 | " \n", 1247 | " \n", 1248 | " \n", 1249 | " \n", 1250 | " \n", 1251 | " \n", 1252 | " \n", 1253 | " \n", 1254 | " \n", 1255 | " \n", 1256 | " \n", 1257 | " \n", 1258 | " \n", 1259 | " \n", 1260 | " \n", 1261 | " \n", 1262 | " \n", 1263 | " \n", 1264 | " \n", 1265 | " \n", 1266 | " \n", 1267 | " \n", 1268 | " \n", 1269 | " \n", 1270 | " \n", 1271 | " \n", 1272 | " \n", 1273 | " \n", 1274 | " \n", 1275 | " \n", 1276 | " \n", 1277 | " \n", 1278 | " \n", 1279 | " \n", 1280 | " \n", 1281 | " \n", 1282 | " \n", 1283 | " \n", 1284 | " \n", 1285 | " \n", 1286 | " \n", 1287 | " \n", 1288 | " \n", 1289 | " \n", 1290 | " \n", 1291 | " \n", 1292 | " \n", 1293 | " \n", 1294 | " \n", 1295 | " \n", 1296 | " \n", 1297 | " \n", 1298 | " \n", 1299 | " \n", 1300 | " \n", 1301 | " \n", 1302 | " \n", 1303 | " \n", 1304 | "
user_idunix_timestampmovie_idratingtitlerelease_datevideo_release_dateimdb_urlgenre_unknownActionAdventureAnimationChildrenComedyCrimeDocumentaryDramaFantasyFilm-NoirHorrorMusicalMysteryRomanceSci-FiThrillerWarWesternyearall_genresagesexoccupationzip_codemovie_typemovie_name
008749654781715.0Empire Strikes Back, The (1980)01-Jan-1980NaNhttp://us.imdb.com/M/title-exact?Empire%20Stri...011000001000001101019801,2,8,14,15,1724Mtechnician85711likeEmpire Strikes Back, The
108749654781675.0Monty Python and the Holy Grail (1974)01-Jan-1974NaNhttp://us.imdb.com/M/title-exact?Monty%20Pytho...00000100000000000001974524Mtechnician85711likeMonty Python and the Holy Grail
208749655181645.0Jean de Florette (1986)01-Jan-1986NaNhttp://us.imdb.com/M/title-exact?Jean%20de%20F...00000000100000000001986824Mtechnician85711likeJean de Florette
308749655561554.0Reservoir Dogs (1992)01-Jan-1992NaNhttp://us.imdb.com/M/title-exact?Reservoir%20D...000000100000000010019926,1624Mtechnician85711likeReservoir Dogs
408749656771955.0Dead Poets Society (1989)01-Jan-1989NaNhttp://us.imdb.com/M/title-exact?Dead%20Poets%...00000000100000000001989824Mtechnician85711likeDead Poets Society
508749656771655.0Manon of the Spring (Manon des sources) (1986)01-Jan-1986NaNhttp://us.imdb.com/M/title-exact?Manon%20des%2...00000000100000000001986824Mtechnician85711likeManon of the Spring (Manon des sources)
608749656781864.0Godfather: Part II, The (1974)01-Jan-1974NaNhttp://us.imdb.com/M/title-exact?Godfather:%20...010000101000000000019741,6,824Mtechnician85711likeGodfather: Part II, The
70874965706135.0Postino, Il (1994)01-Jan-1994NaNhttp://us.imdb.com/M/title-exact?Postino,%20Il...000000001000001000019948,1424Mtechnician85711likePostino, Il
808749657061265.0Godfather, The (1972)01-Jan-1972NaNhttp://us.imdb.com/M/title-exact?Godfather,%20...010000101000000000019721,6,824Mtechnician85711likeGodfather, The
908749657062494.0Fifth Element, The (1997)09-May-1997NaNhttp://us.imdb.com/M/title-exact?Fifth%20Eleme...010000000000000100019971,1524Mtechnician85711likeFifth Element, The
\n", 1305 | "
" 1306 | ], 1307 | "text/plain": [ 1308 | " user_id unix_timestamp ... movie_type movie_name\n", 1309 | "0 0 874965478 ... like Empire Strikes Back, The \n", 1310 | "1 0 874965478 ... like Monty Python and the Holy Grail \n", 1311 | "2 0 874965518 ... like Jean de Florette \n", 1312 | "3 0 874965556 ... like Reservoir Dogs \n", 1313 | "4 0 874965677 ... like Dead Poets Society \n", 1314 | "5 0 874965677 ... like Manon of the Spring (Manon des sources) \n", 1315 | "6 0 874965678 ... like Godfather: Part II, The \n", 1316 | "7 0 874965706 ... like Postino, Il \n", 1317 | "8 0 874965706 ... like Godfather, The \n", 1318 | "9 0 874965706 ... like Fifth Element, The \n", 1319 | "\n", 1320 | "[10 rows x 35 columns]" 1321 | ] 1322 | }, 1323 | "metadata": { 1324 | "tags": [] 1325 | }, 1326 | "execution_count": 11 1327 | } 1328 | ] 1329 | }, 1330 | { 1331 | "cell_type": "code", 1332 | "metadata": { 1333 | "id": "5Q2qEbS8xs3_", 1334 | "colab_type": "code", 1335 | "colab": {} 1336 | }, 1337 | "source": [ 1338 | "user_ids = rating_details_sample[\"user_id\"].unique().tolist()\n", 1339 | "user2user_encoded = {x: i for i, x in enumerate(user_ids)}\n", 1340 | "userencoded2user = {i: x for i, x in enumerate(user_ids)}\n", 1341 | "\n", 1342 | "movie_ids = rating_details_sample[\"movie_id\"].unique().tolist()\n", 1343 | "movie2movie_encoded = {x: i for i, x in enumerate(movie_ids)}\n", 1344 | "movie_encoded2movie = {i: x for i, x in enumerate(movie_ids)}\n", 1345 | "\n", 1346 | "title_ids = rating_details_sample[\"movie_name\"].unique().tolist()\n", 1347 | "title2title_encoded = {x: i for i, x in enumerate(title_ids)}\n", 1348 | "title_encoded2title = {i: x for i, x in enumerate(title_ids)}\n", 1349 | "\n", 1350 | "\n", 1351 | "rating_details_sample[\"user\"] = rating_details_sample[\"user_id\"].map(user2user_encoded)\n", 1352 | "rating_details_sample[\"movie\"] = rating_details_sample[\"movie_id\"].map(movie2movie_encoded)\n", 1353 | "rating_details_sample[\"title_d\"] = rating_details_sample[\"movie_name\"].map(title2title_encoded)" 1354 | ], 1355 | "execution_count": null, 1356 | "outputs": [] 1357 | }, 1358 | { 1359 | "cell_type": "code", 1360 | "metadata": { 1361 | "id": "is86VFf8fNyS", 1362 | "colab_type": "code", 1363 | "colab": {} 1364 | }, 1365 | "source": [ 1366 | "sample_data=rating_details_sample[['user','occupation','sex']]" 1367 | ], 1368 | "execution_count": null, 1369 | "outputs": [] 1370 | }, 1371 | { 1372 | "cell_type": "code", 1373 | "metadata": { 1374 | "id": "LsVVniv1fxQS", 1375 | "colab_type": "code", 1376 | "colab": {} 1377 | }, 1378 | "source": [ 1379 | "sample_data=sample_data.reset_index()" 1380 | ], 1381 | "execution_count": null, 1382 | "outputs": [] 1383 | }, 1384 | { 1385 | "cell_type": "code", 1386 | "metadata": { 1387 | "id": "PZ862VSlHohp", 1388 | "colab_type": "code", 1389 | "colab": { 1390 | "base_uri": "https://localhost:8080/", 1391 | "height": 34 1392 | }, 1393 | "outputId": "554592c7-3bc6-4f09-cb58-c294c2fc30d9" 1394 | }, 1395 | "source": [ 1396 | "rating_details_sample[\"movie\"].max()\n" 1397 | ], 1398 | "execution_count": null, 1399 | "outputs": [ 1400 | { 1401 | "output_type": "execute_result", 1402 | "data": { 1403 | "text/plain": [ 1404 | "1681" 1405 | ] 1406 | }, 1407 | "metadata": { 1408 | "tags": [] 1409 | }, 1410 | "execution_count": 16 1411 | } 1412 | ] 1413 | }, 1414 | { 1415 | "cell_type": "code", 1416 | "metadata": { 1417 | "id": "ZlCD_usJHFDX", 1418 | "colab_type": "code", 1419 | "colab": {} 1420 | }, 1421 | "source": [ 1422 | "movie_list = rating_details_sample.groupby(['user','movie_type'])['movie'].apply(list).reset_index()\n", 1423 | "title_list = rating_details_sample.groupby(['user'])['title_d'].apply(list).reset_index()\n", 1424 | "genre_list = rating_details_sample.groupby(['user'])['all_genres'].unique().apply(list).reset_index()" 1425 | ], 1426 | "execution_count": null, 1427 | "outputs": [] 1428 | }, 1429 | { 1430 | "cell_type": "code", 1431 | "metadata": { 1432 | "id": "UFgXisoWTwKC", 1433 | "colab_type": "code", 1434 | "colab": {} 1435 | }, 1436 | "source": [ 1437 | "# Get the unique set of genre for all the users\n", 1438 | "genre_list['all_genres']=genre_list['all_genres'].apply(lambda x: list(set(','.join(x))) ) \n", 1439 | "genre_list['all_genres']=genre_list['all_genres'].apply(lambda x:[ x for x in x if x.isdigit() ])\n" 1440 | ], 1441 | "execution_count": null, 1442 | "outputs": [] 1443 | }, 1444 | { 1445 | "cell_type": "code", 1446 | "metadata": { 1447 | "id": "rOOZ_ruJHR6I", 1448 | "colab_type": "code", 1449 | "colab": {} 1450 | }, 1451 | "source": [ 1452 | "user_video_list = movie_list.pivot(index='user', columns='movie_type', values='movie').reset_index()" 1453 | ], 1454 | "execution_count": null, 1455 | "outputs": [] 1456 | }, 1457 | { 1458 | "cell_type": "code", 1459 | "metadata": { 1460 | "id": "b76F8MqOyio2", 1461 | "colab_type": "code", 1462 | "colab": {} 1463 | }, 1464 | "source": [ 1465 | "user_video_list.fillna(rating_details_sample[\"movie\"].max()+1, inplace=True)" 1466 | ], 1467 | "execution_count": null, 1468 | "outputs": [] 1469 | }, 1470 | { 1471 | "cell_type": "code", 1472 | "metadata": { 1473 | "id": "8Gy71zy_suIh", 1474 | "colab_type": "code", 1475 | "colab": {} 1476 | }, 1477 | "source": [ 1478 | "sample_data = sample_data.drop('index',axis=1)" 1479 | ], 1480 | "execution_count": null, 1481 | "outputs": [] 1482 | }, 1483 | { 1484 | "cell_type": "code", 1485 | "metadata": { 1486 | "id": "Zi48ZKOKs3eJ", 1487 | "colab_type": "code", 1488 | "colab": {} 1489 | }, 1490 | "source": [ 1491 | "sample_data =sample_data.drop_duplicates()" 1492 | ], 1493 | "execution_count": null, 1494 | "outputs": [] 1495 | }, 1496 | { 1497 | "cell_type": "code", 1498 | "metadata": { 1499 | "id": "YtgpqQheH0NJ", 1500 | "colab_type": "code", 1501 | "colab": {} 1502 | }, 1503 | "source": [ 1504 | "user_final_list =pd.merge(user_video_list,title_list, how= 'left')\n", 1505 | "user_title_list1 = pd.merge(user_final_list,genre_list, how='left')\n", 1506 | "user_title_list = pd.merge(user_title_list1,sample_data, how='left')" 1507 | ], 1508 | "execution_count": null, 1509 | "outputs": [] 1510 | }, 1511 | { 1512 | "cell_type": "code", 1513 | "metadata": { 1514 | "id": "_mqGy5fMsjN9", 1515 | "colab_type": "code", 1516 | "colab": { 1517 | "base_uri": "https://localhost:8080/", 1518 | "height": 193 1519 | }, 1520 | "outputId": "ad86c284-15d0-45bc-9e14-f238b6abd9da" 1521 | }, 1522 | "source": [ 1523 | "user_title_list1.head(3)" 1524 | ], 1525 | "execution_count": null, 1526 | "outputs": [ 1527 | { 1528 | "output_type": "execute_result", 1529 | "data": { 1530 | "text/html": [ 1531 | "
\n", 1532 | "\n", 1545 | "\n", 1546 | " \n", 1547 | " \n", 1548 | " \n", 1549 | " \n", 1550 | " \n", 1551 | " \n", 1552 | " \n", 1553 | " \n", 1554 | " \n", 1555 | " \n", 1556 | " \n", 1557 | " \n", 1558 | " \n", 1559 | " \n", 1560 | " \n", 1561 | " \n", 1562 | " \n", 1563 | " \n", 1564 | " \n", 1565 | " \n", 1566 | " \n", 1567 | " \n", 1568 | " \n", 1569 | " \n", 1570 | " \n", 1571 | " \n", 1572 | " \n", 1573 | " \n", 1574 | " \n", 1575 | " \n", 1576 | " \n", 1577 | " \n", 1578 | " \n", 1579 | " \n", 1580 | " \n", 1581 | " \n", 1582 | "
userdislikeliketitle_dall_genres
00[31, 32, 33, 35, 36, 55, 71, 81, 97, 99, 107, ...[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...[9, 8, 4, 2, 5, 7, 6, 0, 3, 1]
11[279, 298, 130, 313, 314][272, 250, 273, 274, 275, 276, 277, 278, 280, ...[271, 249, 272, 273, 274, 275, 276, 277, 278, ...[9, 4, 8, 2, 5, 7, 6, 0, 3, 1]
22[302, 317, 309, 318, 275, 250, 321, 253, 322, ...[316, 125, 278, 319, 320, 324, 325, 326, 328, ...[300, 314, 315, 307, 14, 277, 316, 317, 318, 2...[8, 4, 2, 5, 7, 6, 0, 3, 1]
\n", 1583 | "
" 1584 | ], 1585 | "text/plain": [ 1586 | " user ... all_genres\n", 1587 | "0 0 ... [9, 8, 4, 2, 5, 7, 6, 0, 3, 1]\n", 1588 | "1 1 ... [9, 4, 8, 2, 5, 7, 6, 0, 3, 1]\n", 1589 | "2 2 ... [8, 4, 2, 5, 7, 6, 0, 3, 1]\n", 1590 | "\n", 1591 | "[3 rows x 5 columns]" 1592 | ] 1593 | }, 1594 | "metadata": { 1595 | "tags": [] 1596 | }, 1597 | "execution_count": 26 1598 | } 1599 | ] 1600 | }, 1601 | { 1602 | "cell_type": "code", 1603 | "metadata": { 1604 | "id": "BAmixDt2k8CW", 1605 | "colab_type": "code", 1606 | "colab": {} 1607 | }, 1608 | "source": [ 1609 | "user_title_list['like'] =user_title_list['like'].apply(lambda x: x if type(x) is list else [x])\n", 1610 | "user_title_list['dislike'] =user_title_list['dislike'].apply(lambda x: x if type(x) is list else [x])" 1611 | ], 1612 | "execution_count": null, 1613 | "outputs": [] 1614 | }, 1615 | { 1616 | "cell_type": "code", 1617 | "metadata": { 1618 | "id": "7aEc-tYNJEtg", 1619 | "colab_type": "code", 1620 | "colab": {} 1621 | }, 1622 | "source": [ 1623 | "user_title_list['predict_labels'] = user_title_list['like'].apply(lambda x: (x[-1]))" 1624 | ], 1625 | "execution_count": null, 1626 | "outputs": [] 1627 | }, 1628 | { 1629 | "cell_type": "code", 1630 | "metadata": { 1631 | "id": "-Wchd1IxKdXv", 1632 | "colab_type": "code", 1633 | "colab": {} 1634 | }, 1635 | "source": [ 1636 | "user_title_list['like']=user_title_list['like'].apply(lambda x: (x[:-1]))" 1637 | ], 1638 | "execution_count": null, 1639 | "outputs": [] 1640 | }, 1641 | { 1642 | "cell_type": "code", 1643 | "metadata": { 1644 | "id": "UroRBcwIhsU6", 1645 | "colab_type": "code", 1646 | "colab": { 1647 | "base_uri": "https://localhost:8080/", 1648 | "height": 241 1649 | }, 1650 | "outputId": "63e8150b-d4f0-4a16-d3a7-18510ed53d03" 1651 | }, 1652 | "source": [ 1653 | "pd.DataFrame(user_title_list[['user','dislike','like','title_d','all_genres','predict_labels']]).head(4)" 1654 | ], 1655 | "execution_count": null, 1656 | "outputs": [ 1657 | { 1658 | "output_type": "execute_result", 1659 | "data": { 1660 | "text/html": [ 1661 | "
\n", 1662 | "\n", 1675 | "\n", 1676 | " \n", 1677 | " \n", 1678 | " \n", 1679 | " \n", 1680 | " \n", 1681 | " \n", 1682 | " \n", 1683 | " \n", 1684 | " \n", 1685 | " \n", 1686 | " \n", 1687 | " \n", 1688 | " \n", 1689 | " \n", 1690 | " \n", 1691 | " \n", 1692 | " \n", 1693 | " \n", 1694 | " \n", 1695 | " \n", 1696 | " \n", 1697 | " \n", 1698 | " \n", 1699 | " \n", 1700 | " \n", 1701 | " \n", 1702 | " \n", 1703 | " \n", 1704 | " \n", 1705 | " \n", 1706 | " \n", 1707 | " \n", 1708 | " \n", 1709 | " \n", 1710 | " \n", 1711 | " \n", 1712 | " \n", 1713 | " \n", 1714 | " \n", 1715 | " \n", 1716 | " \n", 1717 | " \n", 1718 | " \n", 1719 | " \n", 1720 | " \n", 1721 | " \n", 1722 | " \n", 1723 | " \n", 1724 | " \n", 1725 | "
userdislikeliketitle_dall_genrespredict_labels
00[31, 32, 33, 35, 36, 55, 71, 81, 97, 99, 107, ...[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...[9, 8, 4, 2, 5, 7, 6, 0, 3, 1]269
11[279, 298, 130, 313, 314][272, 250, 273, 274, 275, 276, 277, 278, 280, ...[271, 249, 272, 273, 274, 275, 276, 277, 278, ...[9, 4, 8, 2, 5, 7, 6, 0, 3, 1]315
22[302, 317, 309, 318, 275, 250, 321, 253, 322, ...[316, 125, 278, 319, 320, 324, 325, 326, 328, ...[300, 314, 315, 307, 14, 277, 316, 317, 318, 2...[8, 4, 2, 5, 7, 6, 0, 3, 1]354
33[361][250, 275, 309, 345, 254, 344, 355, 278, 350, ...[249, 274, 307, 343, 253, 342, 352, 277, 348, ...[8, 4, 2, 5, 7, 6, 3, 1]55
\n", 1726 | "
" 1727 | ], 1728 | "text/plain": [ 1729 | " user ... predict_labels\n", 1730 | "0 0 ... 269\n", 1731 | "1 1 ... 315\n", 1732 | "2 2 ... 354\n", 1733 | "3 3 ... 55\n", 1734 | "\n", 1735 | "[4 rows x 6 columns]" 1736 | ] 1737 | }, 1738 | "metadata": { 1739 | "tags": [] 1740 | }, 1741 | "execution_count": 30 1742 | } 1743 | ] 1744 | }, 1745 | { 1746 | "cell_type": "code", 1747 | "metadata": { 1748 | "id": "yTlniWmDFnZS", 1749 | "colab_type": "code", 1750 | "colab": {} 1751 | }, 1752 | "source": [ 1753 | "user_title_list_e=user_title_list[(user_title_list.user >= 1)&\n", 1754 | " (user_title_list.user <= 500)]" 1755 | ], 1756 | "execution_count": null, 1757 | "outputs": [] 1758 | }, 1759 | { 1760 | "cell_type": "code", 1761 | "metadata": { 1762 | "id": "iDLVhpL1lQUL", 1763 | "colab_type": "code", 1764 | "colab": { 1765 | "base_uri": "https://localhost:8080/", 1766 | "height": 34 1767 | }, 1768 | "outputId": "111c0751-cbb5-4aa5-d00d-dcd167c4e6b7" 1769 | }, 1770 | "source": [ 1771 | "user_title_list.shape" 1772 | ], 1773 | "execution_count": null, 1774 | "outputs": [ 1775 | { 1776 | "output_type": "execute_result", 1777 | "data": { 1778 | "text/plain": [ 1779 | "(943, 8)" 1780 | ] 1781 | }, 1782 | "metadata": { 1783 | "tags": [] 1784 | }, 1785 | "execution_count": 32 1786 | } 1787 | ] 1788 | }, 1789 | { 1790 | "cell_type": "code", 1791 | "metadata": { 1792 | "id": "ghtXaAKlsTgu", 1793 | "colab_type": "code", 1794 | "colab": {} 1795 | }, 1796 | "source": [ 1797 | "\n", 1798 | "EMBEDDING_DIMS = 16\n", 1799 | "DENSE_UNITS = 64\n", 1800 | "DROPOUT_PCT = 0.0\n", 1801 | "ALPHA = 0.0\n", 1802 | "NUM_CLASSES=rating_details_sample[\"movie\"].max()+2\n", 1803 | "\n", 1804 | "LEARNING_RATE = 0.003 " 1805 | ], 1806 | "execution_count": null, 1807 | "outputs": [] 1808 | }, 1809 | { 1810 | "cell_type": "code", 1811 | "metadata": { 1812 | "id": "q1RSdIccs8NJ", 1813 | "colab_type": "code", 1814 | "colab": {} 1815 | }, 1816 | "source": [ 1817 | "import tensorflow as tf\n", 1818 | "class MaskedEmbeddingsAggregatorLayer(tf.keras.layers.Layer):\n", 1819 | " def __init__(self, agg_mode='sum', **kwargs):\n", 1820 | " super(MaskedEmbeddingsAggregatorLayer, self).__init__(**kwargs)\n", 1821 | "\n", 1822 | " if agg_mode not in ['sum', 'mean']:\n", 1823 | " raise NotImplementedError('mode {} not implemented!'.format(agg_mode))\n", 1824 | " self.agg_mode = agg_mode\n", 1825 | " \n", 1826 | " @tf.function\n", 1827 | " def call(self, inputs, mask=None):\n", 1828 | " masked_embeddings = tf.ragged.boolean_mask(inputs, mask)\n", 1829 | " if self.agg_mode == 'sum':\n", 1830 | " aggregated = tf.reduce_sum(masked_embeddings, axis=1)\n", 1831 | " elif self.agg_mode == 'mean':\n", 1832 | " aggregated = tf.reduce_mean(masked_embeddings, axis=1)\n", 1833 | " \n", 1834 | " return aggregated\n", 1835 | " \n", 1836 | " def get_config(self):\n", 1837 | " # this is used when loading a saved model that uses a custom layer\n", 1838 | " return {'agg_mode': self.agg_mode}" 1839 | ], 1840 | "execution_count": null, 1841 | "outputs": [] 1842 | }, 1843 | { 1844 | "cell_type": "code", 1845 | "metadata": { 1846 | "id": "j3eZD-JlL6vG", 1847 | "colab_type": "code", 1848 | "colab": {} 1849 | }, 1850 | "source": [ 1851 | "class L2NormLayer(tf.keras.layers.Layer):\n", 1852 | " def __init__(self, **kwargs):\n", 1853 | " super(L2NormLayer, self).__init__(**kwargs)\n", 1854 | " \n", 1855 | " @tf.function\n", 1856 | " def call(self, inputs, mask=None):\n", 1857 | " if mask is not None:\n", 1858 | " inputs = tf.ragged.boolean_mask(inputs, mask).to_tensor()\n", 1859 | " return tf.math.l2_normalize(inputs, axis=-1)\n", 1860 | "\n", 1861 | " def compute_mask(self, inputs, mask):\n", 1862 | " return mask\n", 1863 | " " 1864 | ], 1865 | "execution_count": null, 1866 | "outputs": [] 1867 | }, 1868 | { 1869 | "cell_type": "code", 1870 | "metadata": { 1871 | "id": "oiSAcgdppP4N", 1872 | "colab_type": "code", 1873 | "colab": {} 1874 | }, 1875 | "source": [ 1876 | "#---inputs\n", 1877 | "import tensorflow as tf\n", 1878 | "import datetime\n", 1879 | "import os\n", 1880 | "input_title = tf.keras.Input(shape=(None, ), name='movie_name')\n", 1881 | "inp_video_liked = tf.keras.layers.Input(shape=(None,), name='like')\n", 1882 | "inp_video_disliked = tf.keras.layers.Input(shape=(None,), name='dislike')\n", 1883 | "input_genre = tf.keras.Input(shape=(None, ), name='genre')\n", 1884 | "\n", 1885 | "\n", 1886 | "#--- layers\n", 1887 | "features_embedding_layer = tf.keras.layers.Embedding(input_dim=NUM_CLASSES, output_dim=EMBEDDING_DIMS, \n", 1888 | " mask_zero=True, trainable=True, name='features_embeddings')\n", 1889 | "labels_embedding_layer = tf.keras.layers.Embedding(input_dim=NUM_CLASSES, output_dim=EMBEDDING_DIMS, \n", 1890 | " mask_zero=True, trainable=True, name='labels_embeddings')\n", 1891 | "\n", 1892 | "avg_embeddings = MaskedEmbeddingsAggregatorLayer(agg_mode='mean', name='aggregate_embeddings')\n", 1893 | "\n", 1894 | "dense_1 = tf.keras.layers.Dense(units=DENSE_UNITS, name='dense_1')\n", 1895 | "dense_2 = tf.keras.layers.Dense(units=DENSE_UNITS, name='dense_2')\n", 1896 | "dense_3 = tf.keras.layers.Dense(units=DENSE_UNITS, name='dense_3')\n", 1897 | "l2_norm_1 = L2NormLayer(name='l2_norm_1')\n", 1898 | "\n", 1899 | "dense_output = tf.keras.layers.Dense(NUM_CLASSES, activation=tf.nn.softmax, name='dense_output')\n", 1900 | "\n", 1901 | "#--- features\n", 1902 | "features_embeddings = features_embedding_layer(input_title)\n", 1903 | "l2_norm_features = l2_norm_1(features_embeddings)\n", 1904 | "avg_features = avg_embeddings(l2_norm_features)\n", 1905 | "\n", 1906 | "labels_liked_embeddings = labels_embedding_layer(inp_video_liked)\n", 1907 | "l2_norm_liked = l2_norm_1(labels_liked_embeddings)\n", 1908 | "avg_liked = avg_embeddings(l2_norm_liked)\n", 1909 | "\n", 1910 | "labels_disliked_embeddings = labels_embedding_layer(inp_video_disliked)\n", 1911 | "l2_norm_disliked = l2_norm_1(labels_disliked_embeddings)\n", 1912 | "avg_disliked = avg_embeddings(l2_norm_disliked)\n", 1913 | "\n", 1914 | "labels_genre_embeddings = labels_embedding_layer(input_genre)\n", 1915 | "l2_norm_genre = l2_norm_1(labels_genre_embeddings)\n", 1916 | "avg_genre = avg_embeddings(l2_norm_genre)\n", 1917 | "\n", 1918 | "\n", 1919 | "\n", 1920 | "concat_inputs = tf.keras.layers.Concatenate(axis=1)([avg_features,\n", 1921 | " avg_liked,\n", 1922 | " avg_disliked,\n", 1923 | " avg_genre\n", 1924 | " ])\n", 1925 | "# Dense Layers\n", 1926 | "\n", 1927 | "dense_1_features = dense_1(concat_inputs)\n", 1928 | "dense_1_relu = tf.keras.layers.ReLU(name='dense_1_relu')(dense_1_features)\n", 1929 | "dense_1_batch_norm = tf.keras.layers.BatchNormalization(name='dense_1_batch_norm')(dense_1_relu)\n", 1930 | "\n", 1931 | "dense_2_features = dense_2(dense_1_relu)\n", 1932 | "dense_2_relu = tf.keras.layers.ReLU(name='dense_2_relu')(dense_2_features)\n", 1933 | "#dense_2_batch_norm = tf.keras.layers.BatchNormalization(name='dense_2_batch_norm')(dense_2_relu)\n", 1934 | "\n", 1935 | "dense_3_features = dense_3(dense_2_relu)\n", 1936 | "dense_3_relu = tf.keras.layers.ReLU(name='dense_3_relu')(dense_3_features)\n", 1937 | "dense_3_batch_norm = tf.keras.layers.BatchNormalization(name='dense_3_batch_norm')(dense_3_relu)\n", 1938 | "outputs = dense_output(dense_3_batch_norm)\n", 1939 | "\n", 1940 | "#Optimizer\n", 1941 | "optimiser = tf.keras.optimizers.Adam(learning_rate=LEARNING_RATE)\n", 1942 | "\n", 1943 | "#--- prep model\n", 1944 | "model = tf.keras.models.Model(\n", 1945 | " inputs=[input_title, inp_video_liked, \n", 1946 | " inp_video_disliked\n", 1947 | " ,input_genre\n", 1948 | " ],\n", 1949 | " outputs=[outputs]\n", 1950 | ")\n", 1951 | "logdir = os.path.join(\"logs\", datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\"))\n", 1952 | "tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)\n", 1953 | "model.compile(optimizer=optimiser, loss='sparse_categorical_crossentropy')" 1954 | ], 1955 | "execution_count": null, 1956 | "outputs": [] 1957 | }, 1958 | { 1959 | "cell_type": "code", 1960 | "metadata": { 1961 | "id": "QVKy8Axrt-EU", 1962 | "colab_type": "code", 1963 | "colab": { 1964 | "base_uri": "https://localhost:8080/", 1965 | "height": 992 1966 | }, 1967 | "outputId": "03bea1d9-7a4b-443a-d8d8-3f71be1e71d3" 1968 | }, 1969 | "source": [ 1970 | "tf.keras.utils.plot_model(model, show_shapes=True, show_layer_names=True,dpi=96)" 1971 | ], 1972 | "execution_count": null, 1973 | "outputs": [ 1974 | { 1975 | "output_type": "execute_result", 1976 | "data": { 1977 | "image/png": "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RUVlZSWHw7G0tLSwsJB2RAAySha+BQBk1jjMAgDACHj8+HFMTEx8fDyLxfL29t66dSuLxZJ2UAAwVjU3N2dmZp4+ffqHH37Q19dft27d5s2bp06dKu24AAAAxiFkAQBActXV1SdOnIiJiaHT6Vu2bPHz88PwXQAYkMLCwvj4+OTkZC6X6+TktGnTJgcHh/H0thEAAMBogywAAAxWfX390aNHjx49yuFwPvzww507d+rr60s7KAAY1f7888+kpKSEhISHDx9aWlq+//77H3/88YQJE6QdFwAAwPiHLAAADI3W1taEhITPP/+8pqbGw8Njz54906ZNk3ZQADC6dHV1/fTTT/Hx8f/6179UVVXd3d29vb1nz54t7bgAAABkCLIAADCUOBxOSkpKRETEw4cPly9fHhISMnfuXGkHBQDSV1pa+u233yYmJtbV1b311lvvvfeem5ubsrKytOMCAACQOcgCAMDQ4/F42dnZoaGhhYWFb7/9dmhoqJ2dnbSDAgApEEz7d+3aNUNDw7Vr13p7e0+ZMkXacQEAAMgurO8FAENPTk7O0dHx119//fe//93e3r5w4UJ7e/tLly4h7QggOwoLCzdv3jx58uTNmzdramr++9//rqysjIyMRAoAAABAujAWAACG3Y0bNw4dOpSdnT1z5sxt27atW7dOXl5e2kEBwLCoqqo6ffr0qVOnysrK5s6d+957761fvx7T/gEAAIweyAIAwAgpKir64osvkpOTp0yZ8o9//GPz5s0MBkPaQQHA0OBwON99993p06f/9a9/qampubm5Ydo/AACA0QlZAAAYUY8ePfryyy/j4+M1NDQCAgL+8Y9/MJlMaQcFAJJ78ODBP//5T0z7BwAAMFYgCwAAUvDixYuYmJijR48ymcxPPvnEz89PS0tL2kEBwABg2j8AAIAxClkAAJCaurq6Y8eOHT16lMPhfPjhh4GBgZMnT5Z2UADQj8LCwvj4+LNnz3Z1dTk6Om7atMnBwYFGo0k7LgAAABALsgAAIGWtra0JCQlHjhypra318PDYu3evubm5tIMCgO56Tvv33nvvYRQPAADAmIMsAACMChwOJyUlJSwsrLy8fNWqVfv27ZsxY4a0gwKAXqb98/HxsbGxkXZcAAAAICE5aQcAAEAIIYqKiu+//35paWlKSsr9+/etra0dHR3z8/OlHReA7Hrw4EFQ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eU9EbGysJEkTJkzQV5DbcHJy6smKAADA4EUKAAAYxFpaWm7dutXU1HT69OmoqCg3N7fw8HB5yNvbu7KyMjc3V6fT3bhx4/Lly60/OHz48NLS0pKSkpqaGp1Ol5+f33dvClSr1Z6enteuXWtzvqioyMnJSaPRtD4ZFhbm5OR0/PjxdkstX77c3d09PDz8ypUrFRUVq1at0mq1q1ev7nozchtycAAAAIwQKQAAYKB4//33n3jiCSHEqlWrQkTl6HAAACAASURBVEJC0tLSNm/eLIQYP378xYsXP/rooxUrVgghfvvb3164cEH+SENDw7hx4ywsLJ566qlRo0Z99dVX+tvvly5dOnXq1AULFowePfqdd96R98AHBATIrxJ84403HB0dx44dO2vWrMrKyr5eWnBwcGFhoVarbX2y9Rv+9BobG8vLy/Py8tqtY29vv3//fldXV39/fxcXl6NHj+7evdvf37/rnXz33XcuLi7jx4+/r/4BAMCQoWj3ryAA0BWhoaFCiJycHEM3goEoOztbo9H06U+ZJUuW5OTkVFRU9N0lukKhUGRlZc2fP7+DOUVFRT4+PhkZGYsWLeq4WktLy5QpU8LDw1955ZVebVMIISoqKlxdXdevXy/nKR3ryroAAMCgw14AAMAg1u4j9wYgb2/vhISEhISE2traDqY1Nzfn5ubW1NSEhYX1RRvr1q3z9/ePiIjoi+IAAGBQIAUA0K9effVVa2trhUJx8uRJQ/fyPzZt2jRmzBgLCwtLS8sxY8bExcVVV1f37iX++Mc/ys+H+/DDD3tYaufOnZ6enopWVCqVh4fHK6+8cunSpfv6+IgRI9r9d+k//elPDz30kEKhMDExGTVq1L59+/RDv/vd72xsbExMTMaMGXPw4MEersXYREdHh4aGhoWFtfuYQFlBQcHOnTvz8/PVanWvN5CcnHzy5Mk9e/aYmpr2enEAADBYkAIA6Fd/+ctfPvroI0N38X/s379/8eLFV65cKSsre+eddzZt2jRv3rzevcT/+3//79ChQ71S6vnnn7948aKXl5etra0kSc3NzVeuXElISMjKypo0aVKne+Nbf/yXX37529/+dvecyMjI0tJSIcSTTz75008/PfPMM/qhf/zjH59//vlvfvObc+fO/frXv+6VFXVbTExMRkZGVVWVh4fHjh07DNtMFyUmJkZERGzYsOFe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\n", 1978 | "text/plain": [ 1979 | "" 1980 | ] 1981 | }, 1982 | "metadata": { 1983 | "tags": [] 1984 | }, 1985 | "execution_count": 57 1986 | } 1987 | ] 1988 | }, 1989 | { 1990 | "cell_type": "code", 1991 | "metadata": { 1992 | "id": "4JO-DHTTuDoC", 1993 | "colab_type": "code", 1994 | "colab": { 1995 | "base_uri": "https://localhost:8080/", 1996 | "height": 1000 1997 | }, 1998 | "outputId": "29fc6d5d-e14e-41ee-929b-20accdac0568" 1999 | }, 2000 | "source": [ 2001 | "model.fit([tf.keras.preprocessing.sequence.pad_sequences(user_title_list_e['title_d']),\n", 2002 | " tf.keras.preprocessing.sequence.pad_sequences(user_title_list_e['like']),\n", 2003 | " tf.keras.preprocessing.sequence.pad_sequences(user_title_list_e['dislike'])\n", 2004 | " ,\n", 2005 | " tf.keras.preprocessing.sequence.pad_sequences(user_title_list_e['all_genres'])\n", 2006 | " ],user_title_list_e['predict_labels'].values,callbacks=[tensorboard_callback],\n", 2007 | " steps_per_epoch=1, epochs=1000,verbose=1)" 2008 | ], 2009 | "execution_count": null, 2010 | "outputs": [ 2011 | { 2012 | "output_type": "stream", 2013 | "text": [ 2014 | "Epoch 1/1000\n", 2015 | "WARNING:tensorflow:5 out of the last 8 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 2016 | "WARNING:tensorflow:5 out of the last 8 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 2017 | "1/1 [==============================] - 0s 30ms/step - loss: 7.4320\n", 2018 | "Epoch 2/1000\n", 2019 | "1/1 [==============================] - ETA: 0s - loss: 7.4266WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (0.249382). Check your callbacks.\n", 2020 | "1/1 [==============================] - 0s 32ms/step - loss: 7.4266\n", 2021 | "Epoch 3/1000\n", 2022 | "1/1 [==============================] - 0s 29ms/step - loss: 7.4200\n", 2023 | "Epoch 4/1000\n", 2024 | "1/1 [==============================] - 0s 29ms/step - loss: 7.4097\n", 2025 | "Epoch 5/1000\n", 2026 | "1/1 [==============================] - 0s 30ms/step - loss: 7.4087\n", 2027 | "Epoch 6/1000\n", 2028 | "1/1 [==============================] - 0s 30ms/step - loss: 7.4038\n", 2029 | "Epoch 7/1000\n", 2030 | "1/1 [==============================] - 0s 30ms/step - loss: 7.3933\n", 2031 | "Epoch 8/1000\n", 2032 | "1/1 [==============================] - 0s 35ms/step - loss: 7.3850\n", 2033 | "Epoch 9/1000\n", 2034 | "1/1 [==============================] - 0s 30ms/step - loss: 7.3771\n", 2035 | "Epoch 10/1000\n", 2036 | "1/1 [==============================] - 0s 36ms/step - loss: 7.3644\n", 2037 | "Epoch 11/1000\n", 2038 | "1/1 [==============================] - 0s 29ms/step - loss: 7.3523\n", 2039 | "Epoch 12/1000\n", 2040 | "1/1 [==============================] - 0s 29ms/step - loss: 7.3377\n", 2041 | "Epoch 13/1000\n", 2042 | "1/1 [==============================] - 0s 30ms/step - loss: 7.3317\n", 2043 | "Epoch 14/1000\n", 2044 | "1/1 [==============================] - 0s 28ms/step - loss: 7.3094\n", 2045 | "Epoch 15/1000\n", 2046 | "1/1 [==============================] - 0s 30ms/step - loss: 7.2872\n", 2047 | "Epoch 16/1000\n", 2048 | "1/1 [==============================] - 0s 29ms/step - loss: 7.2764\n", 2049 | "Epoch 17/1000\n", 2050 | "1/1 [==============================] - 0s 30ms/step - loss: 7.2593\n", 2051 | "Epoch 18/1000\n", 2052 | "1/1 [==============================] - 0s 30ms/step - loss: 7.2362\n", 2053 | "Epoch 19/1000\n", 2054 | "1/1 [==============================] - 0s 29ms/step - loss: 7.2127\n", 2055 | "Epoch 20/1000\n", 2056 | "1/1 [==============================] - 0s 29ms/step - loss: 7.1821\n", 2057 | "Epoch 21/1000\n", 2058 | "1/1 [==============================] - 0s 32ms/step - loss: 7.1580\n", 2059 | "Epoch 22/1000\n", 2060 | "1/1 [==============================] - 0s 34ms/step - loss: 7.1251\n", 2061 | "Epoch 23/1000\n", 2062 | "1/1 [==============================] - 0s 30ms/step - loss: 7.1022\n", 2063 | "Epoch 24/1000\n", 2064 | "1/1 [==============================] - 0s 30ms/step - loss: 7.0721\n", 2065 | "Epoch 25/1000\n", 2066 | "1/1 [==============================] - 0s 37ms/step - loss: 7.0307\n", 2067 | "Epoch 26/1000\n", 2068 | "1/1 [==============================] - 0s 29ms/step - loss: 7.0027\n", 2069 | "Epoch 27/1000\n", 2070 | "1/1 [==============================] - 0s 28ms/step - loss: 6.9645\n", 2071 | "Epoch 28/1000\n", 2072 | "1/1 [==============================] - 0s 29ms/step - loss: 6.9247\n", 2073 | "Epoch 29/1000\n", 2074 | "1/1 [==============================] - 0s 31ms/step - loss: 6.9013\n", 2075 | "Epoch 30/1000\n", 2076 | "1/1 [==============================] - 0s 29ms/step - loss: 6.8478\n", 2077 | "Epoch 31/1000\n", 2078 | "1/1 [==============================] - 0s 30ms/step - loss: 6.8014\n", 2079 | "Epoch 32/1000\n", 2080 | "1/1 [==============================] - 0s 29ms/step - loss: 6.7627\n", 2081 | "Epoch 33/1000\n", 2082 | "1/1 [==============================] - 0s 29ms/step - loss: 6.7147\n", 2083 | "Epoch 34/1000\n", 2084 | "1/1 [==============================] - 0s 29ms/step - loss: 6.6768\n", 2085 | "Epoch 35/1000\n", 2086 | "1/1 [==============================] - 0s 31ms/step - loss: 6.6306\n", 2087 | "Epoch 36/1000\n", 2088 | "1/1 [==============================] - 0s 30ms/step - loss: 6.5849\n", 2089 | "Epoch 37/1000\n", 2090 | "1/1 [==============================] - 0s 29ms/step - loss: 6.5392\n", 2091 | "Epoch 38/1000\n", 2092 | "1/1 [==============================] - 0s 28ms/step - loss: 6.4900\n", 2093 | "Epoch 39/1000\n", 2094 | "1/1 [==============================] - 0s 36ms/step - loss: 6.4489\n", 2095 | "Epoch 40/1000\n", 2096 | "1/1 [==============================] - 0s 30ms/step - loss: 6.3885\n", 2097 | "Epoch 41/1000\n", 2098 | "1/1 [==============================] - 0s 29ms/step - loss: 6.3478\n", 2099 | "Epoch 42/1000\n", 2100 | "1/1 [==============================] - 0s 37ms/step - loss: 6.3134\n", 2101 | "Epoch 43/1000\n", 2102 | "1/1 [==============================] - 0s 29ms/step - loss: 6.2709\n", 2103 | "Epoch 44/1000\n", 2104 | "1/1 [==============================] - 0s 29ms/step - loss: 6.2266\n", 2105 | "Epoch 45/1000\n", 2106 | "1/1 [==============================] - 0s 29ms/step - loss: 6.1921\n", 2107 | "Epoch 46/1000\n", 2108 | "1/1 [==============================] - 0s 30ms/step - loss: 6.1410\n", 2109 | "Epoch 47/1000\n", 2110 | "1/1 [==============================] - 0s 28ms/step - loss: 6.0992\n", 2111 | "Epoch 48/1000\n", 2112 | "1/1 [==============================] - 0s 29ms/step - loss: 6.0787\n", 2113 | "Epoch 49/1000\n", 2114 | "1/1 [==============================] - 0s 28ms/step - loss: 6.0477\n", 2115 | "Epoch 50/1000\n", 2116 | "1/1 [==============================] - 0s 27ms/step - loss: 6.0128\n", 2117 | "Epoch 51/1000\n", 2118 | "1/1 [==============================] - 0s 30ms/step - loss: 5.9833\n", 2119 | "Epoch 52/1000\n", 2120 | "1/1 [==============================] - 0s 29ms/step - loss: 5.9536\n", 2121 | "Epoch 53/1000\n", 2122 | "1/1 [==============================] - 0s 28ms/step - loss: 5.9276\n", 2123 | "Epoch 54/1000\n", 2124 | "1/1 [==============================] - 0s 29ms/step - loss: 5.9009\n", 2125 | "Epoch 55/1000\n", 2126 | "1/1 [==============================] - 0s 28ms/step - loss: 5.8816\n", 2127 | "Epoch 56/1000\n", 2128 | "1/1 [==============================] - 0s 30ms/step - loss: 5.8532\n", 2129 | "Epoch 57/1000\n", 2130 | "1/1 [==============================] - 0s 30ms/step - loss: 5.8367\n", 2131 | "Epoch 58/1000\n", 2132 | "1/1 [==============================] - 0s 28ms/step - loss: 5.8070\n", 2133 | "Epoch 59/1000\n", 2134 | "1/1 [==============================] - 0s 29ms/step - loss: 5.8164\n", 2135 | "Epoch 60/1000\n", 2136 | "1/1 [==============================] - 0s 28ms/step - loss: 5.7876\n", 2137 | "Epoch 61/1000\n", 2138 | "1/1 [==============================] - 0s 27ms/step - loss: 5.7757\n", 2139 | "Epoch 62/1000\n", 2140 | "1/1 [==============================] - 0s 29ms/step - loss: 5.7454\n", 2141 | "Epoch 63/1000\n", 2142 | "1/1 [==============================] - 0s 27ms/step - loss: 5.7546\n", 2143 | "Epoch 64/1000\n", 2144 | "1/1 [==============================] - 0s 29ms/step - loss: 5.7514\n", 2145 | "Epoch 65/1000\n", 2146 | "1/1 [==============================] - 0s 28ms/step - loss: 5.7348\n", 2147 | "Epoch 66/1000\n", 2148 | "1/1 [==============================] - 0s 28ms/step - loss: 5.7061\n", 2149 | "Epoch 67/1000\n", 2150 | "1/1 [==============================] - 0s 38ms/step - loss: 5.7094\n", 2151 | "Epoch 68/1000\n", 2152 | "1/1 [==============================] - 0s 28ms/step - loss: 5.7049\n", 2153 | "Epoch 69/1000\n", 2154 | "1/1 [==============================] - 0s 29ms/step - loss: 5.6877\n", 2155 | "Epoch 70/1000\n", 2156 | "1/1 [==============================] - 0s 29ms/step - loss: 5.6571\n", 2157 | "Epoch 71/1000\n", 2158 | "1/1 [==============================] - 0s 34ms/step - loss: 5.6669\n", 2159 | "Epoch 72/1000\n", 2160 | "1/1 [==============================] - 0s 34ms/step - loss: 5.6556\n", 2161 | "Epoch 73/1000\n", 2162 | "1/1 [==============================] - 0s 28ms/step - loss: 5.6548\n", 2163 | "Epoch 74/1000\n", 2164 | "1/1 [==============================] - 0s 28ms/step - loss: 5.6677\n", 2165 | "Epoch 75/1000\n", 2166 | "1/1 [==============================] - 0s 30ms/step - loss: 5.6395\n", 2167 | "Epoch 76/1000\n", 2168 | "1/1 [==============================] - 0s 28ms/step - loss: 5.6323\n", 2169 | "Epoch 77/1000\n", 2170 | "1/1 [==============================] - 0s 29ms/step - loss: 5.6249\n", 2171 | "Epoch 78/1000\n", 2172 | "1/1 [==============================] - 0s 28ms/step - loss: 5.6277\n", 2173 | "Epoch 79/1000\n", 2174 | "1/1 [==============================] - 0s 28ms/step - loss: 5.6407\n", 2175 | "Epoch 80/1000\n", 2176 | "1/1 [==============================] - 0s 36ms/step - loss: 5.5936\n", 2177 | "Epoch 81/1000\n", 2178 | "1/1 [==============================] - 0s 32ms/step - loss: 5.6068\n", 2179 | "Epoch 82/1000\n", 2180 | "1/1 [==============================] - 0s 28ms/step - loss: 5.5872\n", 2181 | "Epoch 83/1000\n", 2182 | "1/1 [==============================] - 0s 29ms/step - loss: 5.6308\n", 2183 | "Epoch 84/1000\n", 2184 | "1/1 [==============================] - 0s 29ms/step - loss: 5.6075\n", 2185 | "Epoch 85/1000\n", 2186 | "1/1 [==============================] - 0s 28ms/step - loss: 5.6090\n", 2187 | "Epoch 86/1000\n", 2188 | "1/1 [==============================] - 0s 33ms/step - loss: 5.5989\n", 2189 | "Epoch 87/1000\n", 2190 | "1/1 [==============================] - 0s 30ms/step - loss: 5.5625\n", 2191 | "Epoch 88/1000\n", 2192 | "1/1 [==============================] - 0s 28ms/step - loss: 5.5632\n", 2193 | "Epoch 89/1000\n", 2194 | "1/1 [==============================] - 0s 28ms/step - loss: 5.5599\n", 2195 | "Epoch 90/1000\n", 2196 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5487\n", 2197 | "Epoch 91/1000\n", 2198 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5914\n", 2199 | "Epoch 92/1000\n", 2200 | "1/1 [==============================] - 0s 33ms/step - loss: 5.5529\n", 2201 | "Epoch 93/1000\n", 2202 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5438\n", 2203 | "Epoch 94/1000\n", 2204 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5477\n", 2205 | "Epoch 95/1000\n", 2206 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5233\n", 2207 | "Epoch 96/1000\n", 2208 | "1/1 [==============================] - 0s 28ms/step - loss: 5.5010\n", 2209 | "Epoch 97/1000\n", 2210 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5420\n", 2211 | "Epoch 98/1000\n", 2212 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5324\n", 2213 | "Epoch 99/1000\n", 2214 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5402\n", 2215 | "Epoch 100/1000\n", 2216 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5022\n", 2217 | "Epoch 101/1000\n", 2218 | "1/1 [==============================] - 0s 30ms/step - loss: 5.5285\n", 2219 | "Epoch 102/1000\n", 2220 | "1/1 [==============================] - 0s 29ms/step - loss: 5.5359\n", 2221 | "Epoch 103/1000\n", 2222 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4821\n", 2223 | "Epoch 104/1000\n", 2224 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4729\n", 2225 | "Epoch 105/1000\n", 2226 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4568\n", 2227 | "Epoch 106/1000\n", 2228 | "1/1 [==============================] - 0s 28ms/step - loss: 5.5125\n", 2229 | "Epoch 107/1000\n", 2230 | "1/1 [==============================] - 0s 28ms/step - loss: 5.5077\n", 2231 | "Epoch 108/1000\n", 2232 | "1/1 [==============================] - 0s 27ms/step - loss: 5.4914\n", 2233 | "Epoch 109/1000\n", 2234 | "1/1 [==============================] - 0s 37ms/step - loss: 5.4997\n", 2235 | "Epoch 110/1000\n", 2236 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4922\n", 2237 | "Epoch 111/1000\n", 2238 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4908\n", 2239 | "Epoch 112/1000\n", 2240 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4859\n", 2241 | "Epoch 113/1000\n", 2242 | "1/1 [==============================] - 0s 30ms/step - loss: 5.5021\n", 2243 | "Epoch 114/1000\n", 2244 | "1/1 [==============================] - 0s 27ms/step - loss: 5.4686\n", 2245 | "Epoch 115/1000\n", 2246 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4982\n", 2247 | "Epoch 116/1000\n", 2248 | "1/1 [==============================] - 0s 31ms/step - loss: 5.4643\n", 2249 | "Epoch 117/1000\n", 2250 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4580\n", 2251 | "Epoch 118/1000\n", 2252 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4185\n", 2253 | "Epoch 119/1000\n", 2254 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4591\n", 2255 | "Epoch 120/1000\n", 2256 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4172\n", 2257 | "Epoch 121/1000\n", 2258 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4376\n", 2259 | "Epoch 122/1000\n", 2260 | "1/1 [==============================] - 0s 33ms/step - loss: 5.4064\n", 2261 | "Epoch 123/1000\n", 2262 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4166\n", 2263 | "Epoch 124/1000\n", 2264 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4150\n", 2265 | "Epoch 125/1000\n", 2266 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4761\n", 2267 | "Epoch 126/1000\n", 2268 | "1/1 [==============================] - 0s 33ms/step - loss: 5.4018\n", 2269 | "Epoch 127/1000\n", 2270 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4402\n", 2271 | "Epoch 128/1000\n", 2272 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4132\n", 2273 | "Epoch 129/1000\n", 2274 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3597\n", 2275 | "Epoch 130/1000\n", 2276 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4255\n", 2277 | "Epoch 131/1000\n", 2278 | "1/1 [==============================] - 0s 27ms/step - loss: 5.4001\n", 2279 | "Epoch 132/1000\n", 2280 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4043\n", 2281 | "Epoch 133/1000\n", 2282 | "1/1 [==============================] - 0s 31ms/step - loss: 5.4191\n", 2283 | "Epoch 134/1000\n", 2284 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3814\n", 2285 | "Epoch 135/1000\n", 2286 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4152\n", 2287 | "Epoch 136/1000\n", 2288 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4236\n", 2289 | "Epoch 137/1000\n", 2290 | "1/1 [==============================] - 0s 28ms/step - loss: 5.4161\n", 2291 | "Epoch 138/1000\n", 2292 | "1/1 [==============================] - 0s 32ms/step - loss: 5.3584\n", 2293 | "Epoch 139/1000\n", 2294 | "1/1 [==============================] - 0s 32ms/step - loss: 5.3572\n", 2295 | "Epoch 140/1000\n", 2296 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3801\n", 2297 | "Epoch 141/1000\n", 2298 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3884\n", 2299 | "Epoch 142/1000\n", 2300 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3572\n", 2301 | "Epoch 143/1000\n", 2302 | "1/1 [==============================] - 0s 34ms/step - loss: 5.4339\n", 2303 | "Epoch 144/1000\n", 2304 | "1/1 [==============================] - 0s 33ms/step - loss: 5.4181\n", 2305 | "Epoch 145/1000\n", 2306 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4064\n", 2307 | "Epoch 146/1000\n", 2308 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3448\n", 2309 | "Epoch 147/1000\n", 2310 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3750\n", 2311 | "Epoch 148/1000\n", 2312 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3762\n", 2313 | "Epoch 149/1000\n", 2314 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3871\n", 2315 | "Epoch 150/1000\n", 2316 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3851\n", 2317 | "Epoch 151/1000\n", 2318 | "1/1 [==============================] - 0s 31ms/step - loss: 5.3860\n", 2319 | "Epoch 152/1000\n", 2320 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3564\n", 2321 | "Epoch 153/1000\n", 2322 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3931\n", 2323 | "Epoch 154/1000\n", 2324 | "1/1 [==============================] - 0s 27ms/step - loss: 5.4074\n", 2325 | "Epoch 155/1000\n", 2326 | "1/1 [==============================] - 0s 27ms/step - loss: 5.3915\n", 2327 | "Epoch 156/1000\n", 2328 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3810\n", 2329 | "Epoch 157/1000\n", 2330 | "1/1 [==============================] - 0s 30ms/step - loss: 5.3782\n", 2331 | "Epoch 158/1000\n", 2332 | "1/1 [==============================] - 0s 29ms/step - loss: 5.4309\n", 2333 | "Epoch 159/1000\n", 2334 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3635\n", 2335 | "Epoch 160/1000\n", 2336 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3558\n", 2337 | "Epoch 161/1000\n", 2338 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3634\n", 2339 | "Epoch 162/1000\n", 2340 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3427\n", 2341 | "Epoch 163/1000\n", 2342 | "1/1 [==============================] - 0s 27ms/step - loss: 5.3553\n", 2343 | "Epoch 164/1000\n", 2344 | "1/1 [==============================] - 0s 33ms/step - loss: 5.3140\n", 2345 | "Epoch 165/1000\n", 2346 | "1/1 [==============================] - 0s 32ms/step - loss: 5.3180\n", 2347 | "Epoch 166/1000\n", 2348 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3689\n", 2349 | "Epoch 167/1000\n", 2350 | "1/1 [==============================] - 0s 31ms/step - loss: 5.3364\n", 2351 | "Epoch 168/1000\n", 2352 | "1/1 [==============================] - 0s 31ms/step - loss: 5.3395\n", 2353 | "Epoch 169/1000\n", 2354 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3193\n", 2355 | "Epoch 170/1000\n", 2356 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3469\n", 2357 | "Epoch 171/1000\n", 2358 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3436\n", 2359 | "Epoch 172/1000\n", 2360 | "1/1 [==============================] - 0s 33ms/step - loss: 5.3164\n", 2361 | "Epoch 173/1000\n", 2362 | "1/1 [==============================] - 0s 27ms/step - loss: 5.2967\n", 2363 | "Epoch 174/1000\n", 2364 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3155\n", 2365 | "Epoch 175/1000\n", 2366 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3456\n", 2367 | "Epoch 176/1000\n", 2368 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3242\n", 2369 | "Epoch 177/1000\n", 2370 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2667\n", 2371 | "Epoch 178/1000\n", 2372 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3218\n", 2373 | "Epoch 179/1000\n", 2374 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3504\n", 2375 | "Epoch 180/1000\n", 2376 | "1/1 [==============================] - 0s 31ms/step - loss: 5.3258\n", 2377 | "Epoch 181/1000\n", 2378 | "1/1 [==============================] - 0s 34ms/step - loss: 5.3526\n", 2379 | "Epoch 182/1000\n", 2380 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3178\n", 2381 | "Epoch 183/1000\n", 2382 | "1/1 [==============================] - 0s 30ms/step - loss: 5.3445\n", 2383 | "Epoch 184/1000\n", 2384 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3388\n", 2385 | "Epoch 185/1000\n", 2386 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3693\n", 2387 | "Epoch 186/1000\n", 2388 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3108\n", 2389 | "Epoch 187/1000\n", 2390 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2874\n", 2391 | "Epoch 188/1000\n", 2392 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2926\n", 2393 | "Epoch 189/1000\n", 2394 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3107\n", 2395 | "Epoch 190/1000\n", 2396 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3525\n", 2397 | "Epoch 191/1000\n", 2398 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3969\n", 2399 | "Epoch 192/1000\n", 2400 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3232\n", 2401 | "Epoch 193/1000\n", 2402 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2963\n", 2403 | "Epoch 194/1000\n", 2404 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3226\n", 2405 | "Epoch 195/1000\n", 2406 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3080\n", 2407 | "Epoch 196/1000\n", 2408 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3343\n", 2409 | "Epoch 197/1000\n", 2410 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3100\n", 2411 | "Epoch 198/1000\n", 2412 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2807\n", 2413 | "Epoch 199/1000\n", 2414 | "1/1 [==============================] - 0s 27ms/step - loss: 5.3133\n", 2415 | "Epoch 200/1000\n", 2416 | "1/1 [==============================] - 0s 32ms/step - loss: 5.3505\n", 2417 | "Epoch 201/1000\n", 2418 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2789\n", 2419 | "Epoch 202/1000\n", 2420 | "1/1 [==============================] - 0s 31ms/step - loss: 5.2339\n", 2421 | "Epoch 203/1000\n", 2422 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3285\n", 2423 | "Epoch 204/1000\n", 2424 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2810\n", 2425 | "Epoch 205/1000\n", 2426 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3272\n", 2427 | "Epoch 206/1000\n", 2428 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2636\n", 2429 | "Epoch 207/1000\n", 2430 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3509\n", 2431 | "Epoch 208/1000\n", 2432 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2467\n", 2433 | "Epoch 209/1000\n", 2434 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3087\n", 2435 | "Epoch 210/1000\n", 2436 | "1/1 [==============================] - 0s 33ms/step - loss: 5.3036\n", 2437 | "Epoch 211/1000\n", 2438 | "1/1 [==============================] - 0s 36ms/step - loss: 5.3392\n", 2439 | "Epoch 212/1000\n", 2440 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3084\n", 2441 | "Epoch 213/1000\n", 2442 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2476\n", 2443 | "Epoch 214/1000\n", 2444 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2760\n", 2445 | "Epoch 215/1000\n", 2446 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2851\n", 2447 | "Epoch 216/1000\n", 2448 | "1/1 [==============================] - 0s 29ms/step - loss: 5.3420\n", 2449 | "Epoch 217/1000\n", 2450 | "1/1 [==============================] - 0s 31ms/step - loss: 5.2829\n", 2451 | "Epoch 218/1000\n", 2452 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2722\n", 2453 | "Epoch 219/1000\n", 2454 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2627\n", 2455 | "Epoch 220/1000\n", 2456 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2889\n", 2457 | "Epoch 221/1000\n", 2458 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2602\n", 2459 | "Epoch 222/1000\n", 2460 | "1/1 [==============================] - 0s 27ms/step - loss: 5.3175\n", 2461 | "Epoch 223/1000\n", 2462 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2958\n", 2463 | "Epoch 224/1000\n", 2464 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2683\n", 2465 | "Epoch 225/1000\n", 2466 | "1/1 [==============================] - 0s 31ms/step - loss: 5.2689\n", 2467 | "Epoch 226/1000\n", 2468 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2605\n", 2469 | "Epoch 227/1000\n", 2470 | "1/1 [==============================] - 0s 33ms/step - loss: 5.2912\n", 2471 | "Epoch 228/1000\n", 2472 | "1/1 [==============================] - 0s 35ms/step - loss: 5.2565\n", 2473 | "Epoch 229/1000\n", 2474 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2897\n", 2475 | "Epoch 230/1000\n", 2476 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2986\n", 2477 | "Epoch 231/1000\n", 2478 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2290\n", 2479 | "Epoch 232/1000\n", 2480 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2945\n", 2481 | "Epoch 233/1000\n", 2482 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2358\n", 2483 | "Epoch 234/1000\n", 2484 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2611\n", 2485 | "Epoch 235/1000\n", 2486 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2399\n", 2487 | "Epoch 236/1000\n", 2488 | "1/1 [==============================] - 0s 33ms/step - loss: 5.2200\n", 2489 | "Epoch 237/1000\n", 2490 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2480\n", 2491 | "Epoch 238/1000\n", 2492 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2774\n", 2493 | "Epoch 239/1000\n", 2494 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2848\n", 2495 | "Epoch 240/1000\n", 2496 | "1/1 [==============================] - 0s 28ms/step - loss: 5.3003\n", 2497 | "Epoch 241/1000\n", 2498 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2729\n", 2499 | "Epoch 242/1000\n", 2500 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2724\n", 2501 | "Epoch 243/1000\n", 2502 | "1/1 [==============================] - 0s 31ms/step - loss: 5.3059\n", 2503 | "Epoch 244/1000\n", 2504 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2227\n", 2505 | "Epoch 245/1000\n", 2506 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2705\n", 2507 | "Epoch 246/1000\n", 2508 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2071\n", 2509 | "Epoch 247/1000\n", 2510 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2470\n", 2511 | "Epoch 248/1000\n", 2512 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2140\n", 2513 | "Epoch 249/1000\n", 2514 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2537\n", 2515 | "Epoch 250/1000\n", 2516 | "1/1 [==============================] - 0s 31ms/step - loss: 5.2295\n", 2517 | "Epoch 251/1000\n", 2518 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2280\n", 2519 | "Epoch 252/1000\n", 2520 | "1/1 [==============================] - 0s 32ms/step - loss: 5.2220\n", 2521 | "Epoch 253/1000\n", 2522 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2244\n", 2523 | "Epoch 254/1000\n", 2524 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2394\n", 2525 | "Epoch 255/1000\n", 2526 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1685\n", 2527 | "Epoch 256/1000\n", 2528 | "1/1 [==============================] - 0s 35ms/step - loss: 5.2334\n", 2529 | "Epoch 257/1000\n", 2530 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2436\n", 2531 | "Epoch 258/1000\n", 2532 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2636\n", 2533 | "Epoch 259/1000\n", 2534 | "1/1 [==============================] - 0s 27ms/step - loss: 5.2510\n", 2535 | "Epoch 260/1000\n", 2536 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2574\n", 2537 | "Epoch 261/1000\n", 2538 | "1/1 [==============================] - 0s 38ms/step - loss: 5.2527\n", 2539 | "Epoch 262/1000\n", 2540 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1883\n", 2541 | "Epoch 263/1000\n", 2542 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2636\n", 2543 | "Epoch 264/1000\n", 2544 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2731\n", 2545 | "Epoch 265/1000\n", 2546 | "1/1 [==============================] - 0s 31ms/step - loss: 5.1969\n", 2547 | "Epoch 266/1000\n", 2548 | "1/1 [==============================] - 0s 32ms/step - loss: 5.2166\n", 2549 | "Epoch 267/1000\n", 2550 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2085\n", 2551 | "Epoch 268/1000\n", 2552 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2335\n", 2553 | "Epoch 269/1000\n", 2554 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2172\n", 2555 | "Epoch 270/1000\n", 2556 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2183\n", 2557 | "Epoch 271/1000\n", 2558 | "1/1 [==============================] - 0s 27ms/step - loss: 5.2374\n", 2559 | "Epoch 272/1000\n", 2560 | "1/1 [==============================] - 0s 27ms/step - loss: 5.2459\n", 2561 | "Epoch 273/1000\n", 2562 | "1/1 [==============================] - 0s 27ms/step - loss: 5.2521\n", 2563 | "Epoch 274/1000\n", 2564 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2240\n", 2565 | "Epoch 275/1000\n", 2566 | "1/1 [==============================] - 0s 31ms/step - loss: 5.2133\n", 2567 | "Epoch 276/1000\n", 2568 | "1/1 [==============================] - 0s 31ms/step - loss: 5.1966\n", 2569 | "Epoch 277/1000\n", 2570 | "1/1 [==============================] - 0s 27ms/step - loss: 5.1766\n", 2571 | "Epoch 278/1000\n", 2572 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2408\n", 2573 | "Epoch 279/1000\n", 2574 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2207\n", 2575 | "Epoch 280/1000\n", 2576 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1746\n", 2577 | "Epoch 281/1000\n", 2578 | "1/1 [==============================] - 0s 35ms/step - loss: 5.2338\n", 2579 | "Epoch 282/1000\n", 2580 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1907\n", 2581 | "Epoch 283/1000\n", 2582 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2392\n", 2583 | "Epoch 284/1000\n", 2584 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2008\n", 2585 | "Epoch 285/1000\n", 2586 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1992\n", 2587 | "Epoch 286/1000\n", 2588 | "1/1 [==============================] - 0s 30ms/step - loss: 5.2197\n", 2589 | "Epoch 287/1000\n", 2590 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2577\n", 2591 | "Epoch 288/1000\n", 2592 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1704\n", 2593 | "Epoch 289/1000\n", 2594 | "1/1 [==============================] - 0s 31ms/step - loss: 5.2030\n", 2595 | "Epoch 290/1000\n", 2596 | "1/1 [==============================] - 0s 28ms/step - loss: 5.2000\n", 2597 | "Epoch 291/1000\n", 2598 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1970\n", 2599 | "Epoch 292/1000\n", 2600 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1510\n", 2601 | "Epoch 293/1000\n", 2602 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2583\n", 2603 | "Epoch 294/1000\n", 2604 | "1/1 [==============================] - 0s 31ms/step - loss: 5.1826\n", 2605 | "Epoch 295/1000\n", 2606 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1669\n", 2607 | "Epoch 296/1000\n", 2608 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1926\n", 2609 | "Epoch 297/1000\n", 2610 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2162\n", 2611 | "Epoch 298/1000\n", 2612 | "1/1 [==============================] - 0s 29ms/step - loss: 5.2302\n", 2613 | "Epoch 299/1000\n", 2614 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1227\n", 2615 | "Epoch 300/1000\n", 2616 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1245\n", 2617 | "Epoch 301/1000\n", 2618 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1892\n", 2619 | "Epoch 302/1000\n", 2620 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1777\n", 2621 | "Epoch 303/1000\n", 2622 | "1/1 [==============================] - 0s 34ms/step - loss: 5.2090\n", 2623 | "Epoch 304/1000\n", 2624 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1490\n", 2625 | "Epoch 305/1000\n", 2626 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1502\n", 2627 | "Epoch 306/1000\n", 2628 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1557\n", 2629 | "Epoch 307/1000\n", 2630 | "1/1 [==============================] - 0s 35ms/step - loss: 5.1729\n", 2631 | "Epoch 308/1000\n", 2632 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1818\n", 2633 | "Epoch 309/1000\n", 2634 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1786\n", 2635 | "Epoch 310/1000\n", 2636 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1759\n", 2637 | "Epoch 311/1000\n", 2638 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1451\n", 2639 | "Epoch 312/1000\n", 2640 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1899\n", 2641 | "Epoch 313/1000\n", 2642 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1474\n", 2643 | "Epoch 314/1000\n", 2644 | "1/1 [==============================] - 0s 35ms/step - loss: 5.2047\n", 2645 | "Epoch 315/1000\n", 2646 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1710\n", 2647 | "Epoch 316/1000\n", 2648 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1562\n", 2649 | "Epoch 317/1000\n", 2650 | "1/1 [==============================] - 0s 31ms/step - loss: 5.1450\n", 2651 | "Epoch 318/1000\n", 2652 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1916\n", 2653 | "Epoch 319/1000\n", 2654 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1390\n", 2655 | "Epoch 320/1000\n", 2656 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1565\n", 2657 | "Epoch 321/1000\n", 2658 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1564\n", 2659 | "Epoch 322/1000\n", 2660 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1281\n", 2661 | "Epoch 323/1000\n", 2662 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1009\n", 2663 | "Epoch 324/1000\n", 2664 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1879\n", 2665 | "Epoch 325/1000\n", 2666 | "1/1 [==============================] - 0s 34ms/step - loss: 5.1561\n", 2667 | "Epoch 326/1000\n", 2668 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1284\n", 2669 | "Epoch 327/1000\n", 2670 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1682\n", 2671 | "Epoch 328/1000\n", 2672 | "1/1 [==============================] - 0s 38ms/step - loss: 5.1844\n", 2673 | "Epoch 329/1000\n", 2674 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1153\n", 2675 | "Epoch 330/1000\n", 2676 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1644\n", 2677 | "Epoch 331/1000\n", 2678 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1793\n", 2679 | "Epoch 332/1000\n", 2680 | "1/1 [==============================] - 0s 31ms/step - loss: 5.1534\n", 2681 | "Epoch 333/1000\n", 2682 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1100\n", 2683 | "Epoch 334/1000\n", 2684 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1328\n", 2685 | "Epoch 335/1000\n", 2686 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1429\n", 2687 | "Epoch 336/1000\n", 2688 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1368\n", 2689 | "Epoch 337/1000\n", 2690 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1395\n", 2691 | "Epoch 338/1000\n", 2692 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1030\n", 2693 | "Epoch 339/1000\n", 2694 | "1/1 [==============================] - 0s 27ms/step - loss: 5.1148\n", 2695 | "Epoch 340/1000\n", 2696 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1007\n", 2697 | "Epoch 341/1000\n", 2698 | "1/1 [==============================] - 0s 27ms/step - loss: 5.1189\n", 2699 | "Epoch 342/1000\n", 2700 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1040\n", 2701 | "Epoch 343/1000\n", 2702 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0756\n", 2703 | "Epoch 344/1000\n", 2704 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1381\n", 2705 | "Epoch 345/1000\n", 2706 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0459\n", 2707 | "Epoch 346/1000\n", 2708 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0966\n", 2709 | "Epoch 347/1000\n", 2710 | "1/1 [==============================] - 0s 33ms/step - loss: 5.0946\n", 2711 | "Epoch 348/1000\n", 2712 | "1/1 [==============================] - 0s 31ms/step - loss: 5.1136\n", 2713 | "Epoch 349/1000\n", 2714 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0974\n", 2715 | "Epoch 350/1000\n", 2716 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0702\n", 2717 | "Epoch 351/1000\n", 2718 | "1/1 [==============================] - 0s 31ms/step - loss: 5.0785\n", 2719 | "Epoch 352/1000\n", 2720 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1164\n", 2721 | "Epoch 353/1000\n", 2722 | "1/1 [==============================] - 0s 33ms/step - loss: 5.1660\n", 2723 | "Epoch 354/1000\n", 2724 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0324\n", 2725 | "Epoch 355/1000\n", 2726 | "1/1 [==============================] - 0s 28ms/step - loss: 5.1115\n", 2727 | "Epoch 356/1000\n", 2728 | "1/1 [==============================] - 0s 30ms/step - loss: 5.1127\n", 2729 | "Epoch 357/1000\n", 2730 | "1/1 [==============================] - 0s 31ms/step - loss: 5.1017\n", 2731 | "Epoch 358/1000\n", 2732 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0882\n", 2733 | "Epoch 359/1000\n", 2734 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0975\n", 2735 | "Epoch 360/1000\n", 2736 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1423\n", 2737 | "Epoch 361/1000\n", 2738 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0436\n", 2739 | "Epoch 362/1000\n", 2740 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1111\n", 2741 | "Epoch 363/1000\n", 2742 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0586\n", 2743 | "Epoch 364/1000\n", 2744 | "1/1 [==============================] - 0s 32ms/step - loss: 5.0994\n", 2745 | "Epoch 365/1000\n", 2746 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0972\n", 2747 | "Epoch 366/1000\n", 2748 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0560\n", 2749 | "Epoch 367/1000\n", 2750 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0676\n", 2751 | "Epoch 368/1000\n", 2752 | "1/1 [==============================] - 0s 31ms/step - loss: 5.0841\n", 2753 | "Epoch 369/1000\n", 2754 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0733\n", 2755 | "Epoch 370/1000\n", 2756 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0773\n", 2757 | "Epoch 371/1000\n", 2758 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0639\n", 2759 | "Epoch 372/1000\n", 2760 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0524\n", 2761 | "Epoch 373/1000\n", 2762 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0311\n", 2763 | "Epoch 374/1000\n", 2764 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0071\n", 2765 | "Epoch 375/1000\n", 2766 | "1/1 [==============================] - 0s 29ms/step - loss: 5.1209\n", 2767 | "Epoch 376/1000\n", 2768 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0464\n", 2769 | "Epoch 377/1000\n", 2770 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0709\n", 2771 | "Epoch 378/1000\n", 2772 | "1/1 [==============================] - 0s 42ms/step - loss: 5.0512\n", 2773 | "Epoch 379/1000\n", 2774 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0095\n", 2775 | "Epoch 380/1000\n", 2776 | "1/1 [==============================] - 0s 32ms/step - loss: 5.0662\n", 2777 | "Epoch 381/1000\n", 2778 | "1/1 [==============================] - 0s 31ms/step - loss: 5.0357\n", 2779 | "Epoch 382/1000\n", 2780 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0569\n", 2781 | "Epoch 383/1000\n", 2782 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0256\n", 2783 | "Epoch 384/1000\n", 2784 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0612\n", 2785 | "Epoch 385/1000\n", 2786 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9920\n", 2787 | "Epoch 386/1000\n", 2788 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0241\n", 2789 | "Epoch 387/1000\n", 2790 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0081\n", 2791 | "Epoch 388/1000\n", 2792 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0974\n", 2793 | "Epoch 389/1000\n", 2794 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0132\n", 2795 | "Epoch 390/1000\n", 2796 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0431\n", 2797 | "Epoch 391/1000\n", 2798 | "1/1 [==============================] - 0s 31ms/step - loss: 5.0203\n", 2799 | "Epoch 392/1000\n", 2800 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0036\n", 2801 | "Epoch 393/1000\n", 2802 | "1/1 [==============================] - 0s 27ms/step - loss: 5.0083\n", 2803 | "Epoch 394/1000\n", 2804 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9997\n", 2805 | "Epoch 395/1000\n", 2806 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0209\n", 2807 | "Epoch 396/1000\n", 2808 | "1/1 [==============================] - 0s 33ms/step - loss: 5.0495\n", 2809 | "Epoch 397/1000\n", 2810 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9811\n", 2811 | "Epoch 398/1000\n", 2812 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0194\n", 2813 | "Epoch 399/1000\n", 2814 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0103\n", 2815 | "Epoch 400/1000\n", 2816 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0066\n", 2817 | "Epoch 401/1000\n", 2818 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0744\n", 2819 | "Epoch 402/1000\n", 2820 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0057\n", 2821 | "Epoch 403/1000\n", 2822 | "1/1 [==============================] - 0s 32ms/step - loss: 5.0220\n", 2823 | "Epoch 404/1000\n", 2824 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9705\n", 2825 | "Epoch 405/1000\n", 2826 | "1/1 [==============================] - 0s 31ms/step - loss: 5.0096\n", 2827 | "Epoch 406/1000\n", 2828 | "1/1 [==============================] - 0s 27ms/step - loss: 5.0052\n", 2829 | "Epoch 407/1000\n", 2830 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0178\n", 2831 | "Epoch 408/1000\n", 2832 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0494\n", 2833 | "Epoch 409/1000\n", 2834 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9935\n", 2835 | "Epoch 410/1000\n", 2836 | "1/1 [==============================] - 0s 27ms/step - loss: 5.0349\n", 2837 | "Epoch 411/1000\n", 2838 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9901\n", 2839 | "Epoch 412/1000\n", 2840 | "1/1 [==============================] - 0s 31ms/step - loss: 4.9909\n", 2841 | "Epoch 413/1000\n", 2842 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0769\n", 2843 | "Epoch 414/1000\n", 2844 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9587\n", 2845 | "Epoch 415/1000\n", 2846 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9505\n", 2847 | "Epoch 416/1000\n", 2848 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9807\n", 2849 | "Epoch 417/1000\n", 2850 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9752\n", 2851 | "Epoch 418/1000\n", 2852 | "1/1 [==============================] - 0s 27ms/step - loss: 5.0276\n", 2853 | "Epoch 419/1000\n", 2854 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9650\n", 2855 | "Epoch 420/1000\n", 2856 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9609\n", 2857 | "Epoch 421/1000\n", 2858 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9930\n", 2859 | "Epoch 422/1000\n", 2860 | "1/1 [==============================] - 0s 35ms/step - loss: 5.0435\n", 2861 | "Epoch 423/1000\n", 2862 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9702\n", 2863 | "Epoch 424/1000\n", 2864 | "1/1 [==============================] - 0s 32ms/step - loss: 4.9838\n", 2865 | "Epoch 425/1000\n", 2866 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9848\n", 2867 | "Epoch 426/1000\n", 2868 | "1/1 [==============================] - 0s 27ms/step - loss: 4.9603\n", 2869 | "Epoch 427/1000\n", 2870 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9756\n", 2871 | "Epoch 428/1000\n", 2872 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9859\n", 2873 | "Epoch 429/1000\n", 2874 | "1/1 [==============================] - 0s 38ms/step - loss: 4.9889\n", 2875 | "Epoch 430/1000\n", 2876 | "1/1 [==============================] - 0s 27ms/step - loss: 4.9891\n", 2877 | "Epoch 431/1000\n", 2878 | "1/1 [==============================] - 0s 31ms/step - loss: 5.0595\n", 2879 | "Epoch 432/1000\n", 2880 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9868\n", 2881 | "Epoch 433/1000\n", 2882 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0111\n", 2883 | "Epoch 434/1000\n", 2884 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0452\n", 2885 | "Epoch 435/1000\n", 2886 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9883\n", 2887 | "Epoch 436/1000\n", 2888 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0167\n", 2889 | "Epoch 437/1000\n", 2890 | "1/1 [==============================] - 0s 27ms/step - loss: 4.9516\n", 2891 | "Epoch 438/1000\n", 2892 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0243\n", 2893 | "Epoch 439/1000\n", 2894 | "1/1 [==============================] - 0s 33ms/step - loss: 5.0233\n", 2895 | "Epoch 440/1000\n", 2896 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9922\n", 2897 | "Epoch 441/1000\n", 2898 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9951\n", 2899 | "Epoch 442/1000\n", 2900 | "1/1 [==============================] - 0s 32ms/step - loss: 5.0177\n", 2901 | "Epoch 443/1000\n", 2902 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9820\n", 2903 | "Epoch 444/1000\n", 2904 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9803\n", 2905 | "Epoch 445/1000\n", 2906 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0004\n", 2907 | "Epoch 446/1000\n", 2908 | "1/1 [==============================] - 0s 33ms/step - loss: 4.9499\n", 2909 | "Epoch 447/1000\n", 2910 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9191\n", 2911 | "Epoch 448/1000\n", 2912 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9568\n", 2913 | "Epoch 449/1000\n", 2914 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0043\n", 2915 | "Epoch 450/1000\n", 2916 | "1/1 [==============================] - 0s 27ms/step - loss: 4.9187\n", 2917 | "Epoch 451/1000\n", 2918 | "1/1 [==============================] - 0s 28ms/step - loss: 5.0424\n", 2919 | "Epoch 452/1000\n", 2920 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9697\n", 2921 | "Epoch 453/1000\n", 2922 | "1/1 [==============================] - 0s 29ms/step - loss: 5.0024\n", 2923 | "Epoch 454/1000\n", 2924 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9127\n", 2925 | "Epoch 455/1000\n", 2926 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9762\n", 2927 | "Epoch 456/1000\n", 2928 | "1/1 [==============================] - 0s 34ms/step - loss: 4.9363\n", 2929 | "Epoch 457/1000\n", 2930 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9527\n", 2931 | "Epoch 458/1000\n", 2932 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9528\n", 2933 | "Epoch 459/1000\n", 2934 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9673\n", 2935 | "Epoch 460/1000\n", 2936 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9242\n", 2937 | "Epoch 461/1000\n", 2938 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9211\n", 2939 | "Epoch 462/1000\n", 2940 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9983\n", 2941 | "Epoch 463/1000\n", 2942 | "1/1 [==============================] - 0s 37ms/step - loss: 4.9027\n", 2943 | "Epoch 464/1000\n", 2944 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9280\n", 2945 | "Epoch 465/1000\n", 2946 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9596\n", 2947 | "Epoch 466/1000\n", 2948 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9830\n", 2949 | "Epoch 467/1000\n", 2950 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9209\n", 2951 | "Epoch 468/1000\n", 2952 | "1/1 [==============================] - 0s 30ms/step - loss: 5.0028\n", 2953 | "Epoch 469/1000\n", 2954 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9280\n", 2955 | "Epoch 470/1000\n", 2956 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9708\n", 2957 | "Epoch 471/1000\n", 2958 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8929\n", 2959 | "Epoch 472/1000\n", 2960 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9456\n", 2961 | "Epoch 473/1000\n", 2962 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8871\n", 2963 | "Epoch 474/1000\n", 2964 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9322\n", 2965 | "Epoch 475/1000\n", 2966 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8983\n", 2967 | "Epoch 476/1000\n", 2968 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9145\n", 2969 | "Epoch 477/1000\n", 2970 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9963\n", 2971 | "Epoch 478/1000\n", 2972 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9057\n", 2973 | "Epoch 479/1000\n", 2974 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9179\n", 2975 | "Epoch 480/1000\n", 2976 | "1/1 [==============================] - 0s 34ms/step - loss: 4.9277\n", 2977 | "Epoch 481/1000\n", 2978 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8846\n", 2979 | "Epoch 482/1000\n", 2980 | "1/1 [==============================] - 0s 27ms/step - loss: 4.9009\n", 2981 | "Epoch 483/1000\n", 2982 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9355\n", 2983 | "Epoch 484/1000\n", 2984 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9332\n", 2985 | "Epoch 485/1000\n", 2986 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9481\n", 2987 | "Epoch 486/1000\n", 2988 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9569\n", 2989 | "Epoch 487/1000\n", 2990 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9390\n", 2991 | "Epoch 488/1000\n", 2992 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9489\n", 2993 | "Epoch 489/1000\n", 2994 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9460\n", 2995 | "Epoch 490/1000\n", 2996 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9210\n", 2997 | "Epoch 491/1000\n", 2998 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9167\n", 2999 | "Epoch 492/1000\n", 3000 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8933\n", 3001 | "Epoch 493/1000\n", 3002 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9025\n", 3003 | "Epoch 494/1000\n", 3004 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8727\n", 3005 | "Epoch 495/1000\n", 3006 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8897\n", 3007 | "Epoch 496/1000\n", 3008 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9104\n", 3009 | "Epoch 497/1000\n", 3010 | "1/1 [==============================] - 0s 31ms/step - loss: 4.9244\n", 3011 | "Epoch 498/1000\n", 3012 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8849\n", 3013 | "Epoch 499/1000\n", 3014 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9013\n", 3015 | "Epoch 500/1000\n", 3016 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9361\n", 3017 | "Epoch 501/1000\n", 3018 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9115\n", 3019 | "Epoch 502/1000\n", 3020 | "1/1 [==============================] - 0s 31ms/step - loss: 4.9510\n", 3021 | "Epoch 503/1000\n", 3022 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9326\n", 3023 | "Epoch 504/1000\n", 3024 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9103\n", 3025 | "Epoch 505/1000\n", 3026 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8943\n", 3027 | "Epoch 506/1000\n", 3028 | "1/1 [==============================] - 0s 35ms/step - loss: 4.8905\n", 3029 | "Epoch 507/1000\n", 3030 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9494\n", 3031 | "Epoch 508/1000\n", 3032 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9307\n", 3033 | "Epoch 509/1000\n", 3034 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9136\n", 3035 | "Epoch 510/1000\n", 3036 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8885\n", 3037 | "Epoch 511/1000\n", 3038 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9083\n", 3039 | "Epoch 512/1000\n", 3040 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8831\n", 3041 | "Epoch 513/1000\n", 3042 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8792\n", 3043 | "Epoch 514/1000\n", 3044 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8939\n", 3045 | "Epoch 515/1000\n", 3046 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9094\n", 3047 | "Epoch 516/1000\n", 3048 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9375\n", 3049 | "Epoch 517/1000\n", 3050 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9106\n", 3051 | "Epoch 518/1000\n", 3052 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9128\n", 3053 | "Epoch 519/1000\n", 3054 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9074\n", 3055 | "Epoch 520/1000\n", 3056 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9164\n", 3057 | "Epoch 521/1000\n", 3058 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9703\n", 3059 | "Epoch 522/1000\n", 3060 | "1/1 [==============================] - 0s 33ms/step - loss: 4.8436\n", 3061 | "Epoch 523/1000\n", 3062 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9566\n", 3063 | "Epoch 524/1000\n", 3064 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9240\n", 3065 | "Epoch 525/1000\n", 3066 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8770\n", 3067 | "Epoch 526/1000\n", 3068 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8580\n", 3069 | "Epoch 527/1000\n", 3070 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8633\n", 3071 | "Epoch 528/1000\n", 3072 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8549\n", 3073 | "Epoch 529/1000\n", 3074 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8560\n", 3075 | "Epoch 530/1000\n", 3076 | "1/1 [==============================] - 0s 34ms/step - loss: 4.8244\n", 3077 | "Epoch 531/1000\n", 3078 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9274\n", 3079 | "Epoch 532/1000\n", 3080 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8986\n", 3081 | "Epoch 533/1000\n", 3082 | "1/1 [==============================] - 0s 32ms/step - loss: 4.9257\n", 3083 | "Epoch 534/1000\n", 3084 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8762\n", 3085 | "Epoch 535/1000\n", 3086 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9004\n", 3087 | "Epoch 536/1000\n", 3088 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8504\n", 3089 | "Epoch 537/1000\n", 3090 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8351\n", 3091 | "Epoch 538/1000\n", 3092 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8147\n", 3093 | "Epoch 539/1000\n", 3094 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8891\n", 3095 | "Epoch 540/1000\n", 3096 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8739\n", 3097 | "Epoch 541/1000\n", 3098 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9125\n", 3099 | "Epoch 542/1000\n", 3100 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8170\n", 3101 | "Epoch 543/1000\n", 3102 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8296\n", 3103 | "Epoch 544/1000\n", 3104 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8901\n", 3105 | "Epoch 545/1000\n", 3106 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9093\n", 3107 | "Epoch 546/1000\n", 3108 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8495\n", 3109 | "Epoch 547/1000\n", 3110 | "1/1 [==============================] - 0s 35ms/step - loss: 4.8156\n", 3111 | "Epoch 548/1000\n", 3112 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8324\n", 3113 | "Epoch 549/1000\n", 3114 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8925\n", 3115 | "Epoch 550/1000\n", 3116 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8564\n", 3117 | "Epoch 551/1000\n", 3118 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8383\n", 3119 | "Epoch 552/1000\n", 3120 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8371\n", 3121 | "Epoch 553/1000\n", 3122 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8132\n", 3123 | "Epoch 554/1000\n", 3124 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9671\n", 3125 | "Epoch 555/1000\n", 3126 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8511\n", 3127 | "Epoch 556/1000\n", 3128 | "1/1 [==============================] - 0s 27ms/step - loss: 4.8573\n", 3129 | "Epoch 557/1000\n", 3130 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8819\n", 3131 | "Epoch 558/1000\n", 3132 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8960\n", 3133 | "Epoch 559/1000\n", 3134 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8542\n", 3135 | "Epoch 560/1000\n", 3136 | "1/1 [==============================] - 0s 30ms/step - loss: 4.9095\n", 3137 | "Epoch 561/1000\n", 3138 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8743\n", 3139 | "Epoch 562/1000\n", 3140 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9214\n", 3141 | "Epoch 563/1000\n", 3142 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8092\n", 3143 | "Epoch 564/1000\n", 3144 | "1/1 [==============================] - 0s 37ms/step - loss: 4.8963\n", 3145 | "Epoch 565/1000\n", 3146 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8122\n", 3147 | "Epoch 566/1000\n", 3148 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7791\n", 3149 | "Epoch 567/1000\n", 3150 | "1/1 [==============================] - 0s 27ms/step - loss: 4.8722\n", 3151 | "Epoch 568/1000\n", 3152 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8997\n", 3153 | "Epoch 569/1000\n", 3154 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9259\n", 3155 | "Epoch 570/1000\n", 3156 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8730\n", 3157 | "Epoch 571/1000\n", 3158 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8728\n", 3159 | "Epoch 572/1000\n", 3160 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8903\n", 3161 | "Epoch 573/1000\n", 3162 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8570\n", 3163 | "Epoch 574/1000\n", 3164 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8574\n", 3165 | "Epoch 575/1000\n", 3166 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8110\n", 3167 | "Epoch 576/1000\n", 3168 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8767\n", 3169 | "Epoch 577/1000\n", 3170 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8596\n", 3171 | "Epoch 578/1000\n", 3172 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8428\n", 3173 | "Epoch 579/1000\n", 3174 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8139\n", 3175 | "Epoch 580/1000\n", 3176 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9073\n", 3177 | "Epoch 581/1000\n", 3178 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8454\n", 3179 | "Epoch 582/1000\n", 3180 | "1/1 [==============================] - 0s 29ms/step - loss: 4.9347\n", 3181 | "Epoch 583/1000\n", 3182 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8436\n", 3183 | "Epoch 584/1000\n", 3184 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8486\n", 3185 | "Epoch 585/1000\n", 3186 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8604\n", 3187 | "Epoch 586/1000\n", 3188 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9061\n", 3189 | "Epoch 587/1000\n", 3190 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8546\n", 3191 | "Epoch 588/1000\n", 3192 | "1/1 [==============================] - 0s 27ms/step - loss: 4.8069\n", 3193 | "Epoch 589/1000\n", 3194 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8329\n", 3195 | "Epoch 590/1000\n", 3196 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8753\n", 3197 | "Epoch 591/1000\n", 3198 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8424\n", 3199 | "Epoch 592/1000\n", 3200 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8021\n", 3201 | "Epoch 593/1000\n", 3202 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8755\n", 3203 | "Epoch 594/1000\n", 3204 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8954\n", 3205 | "Epoch 595/1000\n", 3206 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8721\n", 3207 | "Epoch 596/1000\n", 3208 | "1/1 [==============================] - 0s 27ms/step - loss: 4.8588\n", 3209 | "Epoch 597/1000\n", 3210 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8278\n", 3211 | "Epoch 598/1000\n", 3212 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8673\n", 3213 | "Epoch 599/1000\n", 3214 | "1/1 [==============================] - 0s 28ms/step - loss: 4.9048\n", 3215 | "Epoch 600/1000\n", 3216 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8926\n", 3217 | "Epoch 601/1000\n", 3218 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7815\n", 3219 | "Epoch 602/1000\n", 3220 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8417\n", 3221 | "Epoch 603/1000\n", 3222 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7974\n", 3223 | "Epoch 604/1000\n", 3224 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8668\n", 3225 | "Epoch 605/1000\n", 3226 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8202\n", 3227 | "Epoch 606/1000\n", 3228 | "1/1 [==============================] - 0s 38ms/step - loss: 4.8539\n", 3229 | "Epoch 607/1000\n", 3230 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8391\n", 3231 | "Epoch 608/1000\n", 3232 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8697\n", 3233 | "Epoch 609/1000\n", 3234 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7886\n", 3235 | "Epoch 610/1000\n", 3236 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8695\n", 3237 | "Epoch 611/1000\n", 3238 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8433\n", 3239 | "Epoch 612/1000\n", 3240 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8120\n", 3241 | "Epoch 613/1000\n", 3242 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8158\n", 3243 | "Epoch 614/1000\n", 3244 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7841\n", 3245 | "Epoch 615/1000\n", 3246 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8196\n", 3247 | "Epoch 616/1000\n", 3248 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8342\n", 3249 | "Epoch 617/1000\n", 3250 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8319\n", 3251 | "Epoch 618/1000\n", 3252 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7891\n", 3253 | "Epoch 619/1000\n", 3254 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8424\n", 3255 | "Epoch 620/1000\n", 3256 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8475\n", 3257 | "Epoch 621/1000\n", 3258 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8810\n", 3259 | "Epoch 622/1000\n", 3260 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8788\n", 3261 | "Epoch 623/1000\n", 3262 | "1/1 [==============================] - 0s 34ms/step - loss: 4.8680\n", 3263 | "Epoch 624/1000\n", 3264 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7974\n", 3265 | "Epoch 625/1000\n", 3266 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7646\n", 3267 | "Epoch 626/1000\n", 3268 | "1/1 [==============================] - 0s 32ms/step - loss: 4.8243\n", 3269 | "Epoch 627/1000\n", 3270 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8148\n", 3271 | "Epoch 628/1000\n", 3272 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8030\n", 3273 | "Epoch 629/1000\n", 3274 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8553\n", 3275 | "Epoch 630/1000\n", 3276 | "1/1 [==============================] - 0s 32ms/step - loss: 4.7649\n", 3277 | "Epoch 631/1000\n", 3278 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8684\n", 3279 | "Epoch 632/1000\n", 3280 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8371\n", 3281 | "Epoch 633/1000\n", 3282 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8517\n", 3283 | "Epoch 634/1000\n", 3284 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8053\n", 3285 | "Epoch 635/1000\n", 3286 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7854\n", 3287 | "Epoch 636/1000\n", 3288 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7893\n", 3289 | "Epoch 637/1000\n", 3290 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8130\n", 3291 | "Epoch 638/1000\n", 3292 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8065\n", 3293 | "Epoch 639/1000\n", 3294 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8543\n", 3295 | "Epoch 640/1000\n", 3296 | "1/1 [==============================] - 0s 38ms/step - loss: 4.8405\n", 3297 | "Epoch 641/1000\n", 3298 | "1/1 [==============================] - 0s 32ms/step - loss: 4.8580\n", 3299 | "Epoch 642/1000\n", 3300 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8344\n", 3301 | "Epoch 643/1000\n", 3302 | "1/1 [==============================] - 0s 32ms/step - loss: 4.7883\n", 3303 | "Epoch 644/1000\n", 3304 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8293\n", 3305 | "Epoch 645/1000\n", 3306 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8046\n", 3307 | "Epoch 646/1000\n", 3308 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8007\n", 3309 | "Epoch 647/1000\n", 3310 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8021\n", 3311 | "Epoch 648/1000\n", 3312 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8125\n", 3313 | "Epoch 649/1000\n", 3314 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7912\n", 3315 | "Epoch 650/1000\n", 3316 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8717\n", 3317 | "Epoch 651/1000\n", 3318 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7918\n", 3319 | "Epoch 652/1000\n", 3320 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7735\n", 3321 | "Epoch 653/1000\n", 3322 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8386\n", 3323 | "Epoch 654/1000\n", 3324 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8464\n", 3325 | "Epoch 655/1000\n", 3326 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7929\n", 3327 | "Epoch 656/1000\n", 3328 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8261\n", 3329 | "Epoch 657/1000\n", 3330 | "1/1 [==============================] - 0s 34ms/step - loss: 4.8305\n", 3331 | "Epoch 658/1000\n", 3332 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8010\n", 3333 | "Epoch 659/1000\n", 3334 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7906\n", 3335 | "Epoch 660/1000\n", 3336 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8719\n", 3337 | "Epoch 661/1000\n", 3338 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8269\n", 3339 | "Epoch 662/1000\n", 3340 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7706\n", 3341 | "Epoch 663/1000\n", 3342 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8268\n", 3343 | "Epoch 664/1000\n", 3344 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7454\n", 3345 | "Epoch 665/1000\n", 3346 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7855\n", 3347 | "Epoch 666/1000\n", 3348 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7981\n", 3349 | "Epoch 667/1000\n", 3350 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7787\n", 3351 | "Epoch 668/1000\n", 3352 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7972\n", 3353 | "Epoch 669/1000\n", 3354 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7723\n", 3355 | "Epoch 670/1000\n", 3356 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7414\n", 3357 | "Epoch 671/1000\n", 3358 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8185\n", 3359 | "Epoch 672/1000\n", 3360 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7953\n", 3361 | "Epoch 673/1000\n", 3362 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7714\n", 3363 | "Epoch 674/1000\n", 3364 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7887\n", 3365 | "Epoch 675/1000\n", 3366 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7824\n", 3367 | "Epoch 676/1000\n", 3368 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8124\n", 3369 | "Epoch 677/1000\n", 3370 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8168\n", 3371 | "Epoch 678/1000\n", 3372 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7328\n", 3373 | "Epoch 679/1000\n", 3374 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7471\n", 3375 | "Epoch 680/1000\n", 3376 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7405\n", 3377 | "Epoch 681/1000\n", 3378 | "1/1 [==============================] - 0s 35ms/step - loss: 4.8003\n", 3379 | "Epoch 682/1000\n", 3380 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7690\n", 3381 | "Epoch 683/1000\n", 3382 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8037\n", 3383 | "Epoch 684/1000\n", 3384 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7712\n", 3385 | "Epoch 685/1000\n", 3386 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8231\n", 3387 | "Epoch 686/1000\n", 3388 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7629\n", 3389 | "Epoch 687/1000\n", 3390 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8313\n", 3391 | "Epoch 688/1000\n", 3392 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8052\n", 3393 | "Epoch 689/1000\n", 3394 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7631\n", 3395 | "Epoch 690/1000\n", 3396 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7840\n", 3397 | "Epoch 691/1000\n", 3398 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8087\n", 3399 | "Epoch 692/1000\n", 3400 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8806\n", 3401 | "Epoch 693/1000\n", 3402 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8128\n", 3403 | "Epoch 694/1000\n", 3404 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7983\n", 3405 | "Epoch 695/1000\n", 3406 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8454\n", 3407 | "Epoch 696/1000\n", 3408 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7780\n", 3409 | "Epoch 697/1000\n", 3410 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7649\n", 3411 | "Epoch 698/1000\n", 3412 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7749\n", 3413 | "Epoch 699/1000\n", 3414 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7864\n", 3415 | "Epoch 700/1000\n", 3416 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8203\n", 3417 | "Epoch 701/1000\n", 3418 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8351\n", 3419 | "Epoch 702/1000\n", 3420 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8066\n", 3421 | "Epoch 703/1000\n", 3422 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7309\n", 3423 | "Epoch 704/1000\n", 3424 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7669\n", 3425 | "Epoch 705/1000\n", 3426 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7941\n", 3427 | "Epoch 706/1000\n", 3428 | "1/1 [==============================] - 0s 33ms/step - loss: 4.8075\n", 3429 | "Epoch 707/1000\n", 3430 | "1/1 [==============================] - 0s 37ms/step - loss: 4.7589\n", 3431 | "Epoch 708/1000\n", 3432 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7331\n", 3433 | "Epoch 709/1000\n", 3434 | "1/1 [==============================] - 0s 31ms/step - loss: 4.8302\n", 3435 | "Epoch 710/1000\n", 3436 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7698\n", 3437 | "Epoch 711/1000\n", 3438 | "1/1 [==============================] - 0s 32ms/step - loss: 4.7648\n", 3439 | "Epoch 712/1000\n", 3440 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7438\n", 3441 | "Epoch 713/1000\n", 3442 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7980\n", 3443 | "Epoch 714/1000\n", 3444 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7827\n", 3445 | "Epoch 715/1000\n", 3446 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7888\n", 3447 | "Epoch 716/1000\n", 3448 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7626\n", 3449 | "Epoch 717/1000\n", 3450 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7203\n", 3451 | "Epoch 718/1000\n", 3452 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7576\n", 3453 | "Epoch 719/1000\n", 3454 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7412\n", 3455 | "Epoch 720/1000\n", 3456 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7835\n", 3457 | "Epoch 721/1000\n", 3458 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7562\n", 3459 | "Epoch 722/1000\n", 3460 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7896\n", 3461 | "Epoch 723/1000\n", 3462 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8155\n", 3463 | "Epoch 724/1000\n", 3464 | "1/1 [==============================] - 0s 38ms/step - loss: 4.7360\n", 3465 | "Epoch 725/1000\n", 3466 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7939\n", 3467 | "Epoch 726/1000\n", 3468 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7850\n", 3469 | "Epoch 727/1000\n", 3470 | "1/1 [==============================] - 0s 27ms/step - loss: 4.6957\n", 3471 | "Epoch 728/1000\n", 3472 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7835\n", 3473 | "Epoch 729/1000\n", 3474 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8098\n", 3475 | "Epoch 730/1000\n", 3476 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7021\n", 3477 | "Epoch 731/1000\n", 3478 | "1/1 [==============================] - 0s 34ms/step - loss: 4.7674\n", 3479 | "Epoch 732/1000\n", 3480 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7801\n", 3481 | "Epoch 733/1000\n", 3482 | "1/1 [==============================] - 0s 30ms/step - loss: 4.8054\n", 3483 | "Epoch 734/1000\n", 3484 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7706\n", 3485 | "Epoch 735/1000\n", 3486 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8409\n", 3487 | "Epoch 736/1000\n", 3488 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8008\n", 3489 | "Epoch 737/1000\n", 3490 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7472\n", 3491 | "Epoch 738/1000\n", 3492 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7489\n", 3493 | "Epoch 739/1000\n", 3494 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7769\n", 3495 | "Epoch 740/1000\n", 3496 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7856\n", 3497 | "Epoch 741/1000\n", 3498 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7202\n", 3499 | "Epoch 742/1000\n", 3500 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7761\n", 3501 | "Epoch 743/1000\n", 3502 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7575\n", 3503 | "Epoch 744/1000\n", 3504 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7787\n", 3505 | "Epoch 745/1000\n", 3506 | "1/1 [==============================] - 0s 29ms/step - loss: 4.8322\n", 3507 | "Epoch 746/1000\n", 3508 | "1/1 [==============================] - 0s 33ms/step - loss: 4.7178\n", 3509 | "Epoch 747/1000\n", 3510 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7940\n", 3511 | "Epoch 748/1000\n", 3512 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7437\n", 3513 | "Epoch 749/1000\n", 3514 | "1/1 [==============================] - 0s 33ms/step - loss: 4.7327\n", 3515 | "Epoch 750/1000\n", 3516 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7201\n", 3517 | "Epoch 751/1000\n", 3518 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7891\n", 3519 | "Epoch 752/1000\n", 3520 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7626\n", 3521 | "Epoch 753/1000\n", 3522 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7512\n", 3523 | "Epoch 754/1000\n", 3524 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7564\n", 3525 | "Epoch 755/1000\n", 3526 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7929\n", 3527 | "Epoch 756/1000\n", 3528 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7541\n", 3529 | "Epoch 757/1000\n", 3530 | "1/1 [==============================] - 0s 34ms/step - loss: 4.7205\n", 3531 | "Epoch 758/1000\n", 3532 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7851\n", 3533 | "Epoch 759/1000\n", 3534 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7939\n", 3535 | "Epoch 760/1000\n", 3536 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7737\n", 3537 | "Epoch 761/1000\n", 3538 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7554\n", 3539 | "Epoch 762/1000\n", 3540 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7534\n", 3541 | "Epoch 763/1000\n", 3542 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7990\n", 3543 | "Epoch 764/1000\n", 3544 | "1/1 [==============================] - 0s 40ms/step - loss: 4.7430\n", 3545 | "Epoch 765/1000\n", 3546 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7463\n", 3547 | "Epoch 766/1000\n", 3548 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7291\n", 3549 | "Epoch 767/1000\n", 3550 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7658\n", 3551 | "Epoch 768/1000\n", 3552 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7178\n", 3553 | "Epoch 769/1000\n", 3554 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7499\n", 3555 | "Epoch 770/1000\n", 3556 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7643\n", 3557 | "Epoch 771/1000\n", 3558 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7731\n", 3559 | "Epoch 772/1000\n", 3560 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7492\n", 3561 | "Epoch 773/1000\n", 3562 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7302\n", 3563 | "Epoch 774/1000\n", 3564 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7664\n", 3565 | "Epoch 775/1000\n", 3566 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8070\n", 3567 | "Epoch 776/1000\n", 3568 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7408\n", 3569 | "Epoch 777/1000\n", 3570 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7724\n", 3571 | "Epoch 778/1000\n", 3572 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7695\n", 3573 | "Epoch 779/1000\n", 3574 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7098\n", 3575 | "Epoch 780/1000\n", 3576 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7633\n", 3577 | "Epoch 781/1000\n", 3578 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7694\n", 3579 | "Epoch 782/1000\n", 3580 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7339\n", 3581 | "Epoch 783/1000\n", 3582 | "1/1 [==============================] - 0s 31ms/step - loss: 4.6915\n", 3583 | "Epoch 784/1000\n", 3584 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7184\n", 3585 | "Epoch 785/1000\n", 3586 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7130\n", 3587 | "Epoch 786/1000\n", 3588 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7601\n", 3589 | "Epoch 787/1000\n", 3590 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7829\n", 3591 | "Epoch 788/1000\n", 3592 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7057\n", 3593 | "Epoch 789/1000\n", 3594 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7410\n", 3595 | "Epoch 790/1000\n", 3596 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7769\n", 3597 | "Epoch 791/1000\n", 3598 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7011\n", 3599 | "Epoch 792/1000\n", 3600 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7128\n", 3601 | "Epoch 793/1000\n", 3602 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7552\n", 3603 | "Epoch 794/1000\n", 3604 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7380\n", 3605 | "Epoch 795/1000\n", 3606 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7785\n", 3607 | "Epoch 796/1000\n", 3608 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7324\n", 3609 | "Epoch 797/1000\n", 3610 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7385\n", 3611 | "Epoch 798/1000\n", 3612 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6807\n", 3613 | "Epoch 799/1000\n", 3614 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7246\n", 3615 | "Epoch 800/1000\n", 3616 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7740\n", 3617 | "Epoch 801/1000\n", 3618 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7204\n", 3619 | "Epoch 802/1000\n", 3620 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7077\n", 3621 | "Epoch 803/1000\n", 3622 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6995\n", 3623 | "Epoch 804/1000\n", 3624 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7239\n", 3625 | "Epoch 805/1000\n", 3626 | "1/1 [==============================] - 0s 35ms/step - loss: 4.7205\n", 3627 | "Epoch 806/1000\n", 3628 | "1/1 [==============================] - 0s 28ms/step - loss: 4.8230\n", 3629 | "Epoch 807/1000\n", 3630 | "1/1 [==============================] - 0s 31ms/step - loss: 4.6893\n", 3631 | "Epoch 808/1000\n", 3632 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7717\n", 3633 | "Epoch 809/1000\n", 3634 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7613\n", 3635 | "Epoch 810/1000\n", 3636 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7243\n", 3637 | "Epoch 811/1000\n", 3638 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7292\n", 3639 | "Epoch 812/1000\n", 3640 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7510\n", 3641 | "Epoch 813/1000\n", 3642 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6759\n", 3643 | "Epoch 814/1000\n", 3644 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7641\n", 3645 | "Epoch 815/1000\n", 3646 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7539\n", 3647 | "Epoch 816/1000\n", 3648 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7916\n", 3649 | "Epoch 817/1000\n", 3650 | "1/1 [==============================] - 0s 36ms/step - loss: 4.7116\n", 3651 | "Epoch 818/1000\n", 3652 | "1/1 [==============================] - 0s 35ms/step - loss: 4.6884\n", 3653 | "Epoch 819/1000\n", 3654 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7269\n", 3655 | "Epoch 820/1000\n", 3656 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7314\n", 3657 | "Epoch 821/1000\n", 3658 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7677\n", 3659 | "Epoch 822/1000\n", 3660 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7301\n", 3661 | "Epoch 823/1000\n", 3662 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7647\n", 3663 | "Epoch 824/1000\n", 3664 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7513\n", 3665 | "Epoch 825/1000\n", 3666 | "1/1 [==============================] - 0s 33ms/step - loss: 4.6963\n", 3667 | "Epoch 826/1000\n", 3668 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7342\n", 3669 | "Epoch 827/1000\n", 3670 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7642\n", 3671 | "Epoch 828/1000\n", 3672 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7479\n", 3673 | "Epoch 829/1000\n", 3674 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7949\n", 3675 | "Epoch 830/1000\n", 3676 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6706\n", 3677 | "Epoch 831/1000\n", 3678 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6916\n", 3679 | "Epoch 832/1000\n", 3680 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7087\n", 3681 | "Epoch 833/1000\n", 3682 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7338\n", 3683 | "Epoch 834/1000\n", 3684 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6733\n", 3685 | "Epoch 835/1000\n", 3686 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6524\n", 3687 | "Epoch 836/1000\n", 3688 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6926\n", 3689 | "Epoch 837/1000\n", 3690 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7404\n", 3691 | "Epoch 838/1000\n", 3692 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7430\n", 3693 | "Epoch 839/1000\n", 3694 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7424\n", 3695 | "Epoch 840/1000\n", 3696 | "1/1 [==============================] - 0s 34ms/step - loss: 4.7100\n", 3697 | "Epoch 841/1000\n", 3698 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7646\n", 3699 | "Epoch 842/1000\n", 3700 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6996\n", 3701 | "Epoch 843/1000\n", 3702 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7778\n", 3703 | "Epoch 844/1000\n", 3704 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6741\n", 3705 | "Epoch 845/1000\n", 3706 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7852\n", 3707 | "Epoch 846/1000\n", 3708 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7167\n", 3709 | "Epoch 847/1000\n", 3710 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7495\n", 3711 | "Epoch 848/1000\n", 3712 | "1/1 [==============================] - 0s 38ms/step - loss: 4.7468\n", 3713 | "Epoch 849/1000\n", 3714 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7041\n", 3715 | "Epoch 850/1000\n", 3716 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7318\n", 3717 | "Epoch 851/1000\n", 3718 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7247\n", 3719 | "Epoch 852/1000\n", 3720 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7087\n", 3721 | "Epoch 853/1000\n", 3722 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6757\n", 3723 | "Epoch 854/1000\n", 3724 | "1/1 [==============================] - 0s 31ms/step - loss: 4.6580\n", 3725 | "Epoch 855/1000\n", 3726 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7296\n", 3727 | "Epoch 856/1000\n", 3728 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7326\n", 3729 | "Epoch 857/1000\n", 3730 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7689\n", 3731 | "Epoch 858/1000\n", 3732 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6973\n", 3733 | "Epoch 859/1000\n", 3734 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6949\n", 3735 | "Epoch 860/1000\n", 3736 | "1/1 [==============================] - 0s 27ms/step - loss: 4.6781\n", 3737 | "Epoch 861/1000\n", 3738 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6184\n", 3739 | "Epoch 862/1000\n", 3740 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7130\n", 3741 | "Epoch 863/1000\n", 3742 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6560\n", 3743 | "Epoch 864/1000\n", 3744 | "1/1 [==============================] - 0s 36ms/step - loss: 4.7041\n", 3745 | "Epoch 865/1000\n", 3746 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7195\n", 3747 | "Epoch 866/1000\n", 3748 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7943\n", 3749 | "Epoch 867/1000\n", 3750 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6633\n", 3751 | "Epoch 868/1000\n", 3752 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7245\n", 3753 | "Epoch 869/1000\n", 3754 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6798\n", 3755 | "Epoch 870/1000\n", 3756 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7080\n", 3757 | "Epoch 871/1000\n", 3758 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7405\n", 3759 | "Epoch 872/1000\n", 3760 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6909\n", 3761 | "Epoch 873/1000\n", 3762 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6593\n", 3763 | "Epoch 874/1000\n", 3764 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7538\n", 3765 | "Epoch 875/1000\n", 3766 | "1/1 [==============================] - 0s 27ms/step - loss: 4.6987\n", 3767 | "Epoch 876/1000\n", 3768 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6698\n", 3769 | "Epoch 877/1000\n", 3770 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6924\n", 3771 | "Epoch 878/1000\n", 3772 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6815\n", 3773 | "Epoch 879/1000\n", 3774 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6616\n", 3775 | "Epoch 880/1000\n", 3776 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7358\n", 3777 | "Epoch 881/1000\n", 3778 | "1/1 [==============================] - 0s 34ms/step - loss: 4.7111\n", 3779 | "Epoch 882/1000\n", 3780 | "1/1 [==============================] - 0s 34ms/step - loss: 4.7272\n", 3781 | "Epoch 883/1000\n", 3782 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6581\n", 3783 | "Epoch 884/1000\n", 3784 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6736\n", 3785 | "Epoch 885/1000\n", 3786 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7195\n", 3787 | "Epoch 886/1000\n", 3788 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7161\n", 3789 | "Epoch 887/1000\n", 3790 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7455\n", 3791 | "Epoch 888/1000\n", 3792 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6901\n", 3793 | "Epoch 889/1000\n", 3794 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6635\n", 3795 | "Epoch 890/1000\n", 3796 | "1/1 [==============================] - 0s 34ms/step - loss: 4.7015\n", 3797 | "Epoch 891/1000\n", 3798 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6744\n", 3799 | "Epoch 892/1000\n", 3800 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7375\n", 3801 | "Epoch 893/1000\n", 3802 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6727\n", 3803 | "Epoch 894/1000\n", 3804 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6761\n", 3805 | "Epoch 895/1000\n", 3806 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7526\n", 3807 | "Epoch 896/1000\n", 3808 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6487\n", 3809 | "Epoch 897/1000\n", 3810 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6784\n", 3811 | "Epoch 898/1000\n", 3812 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6328\n", 3813 | "Epoch 899/1000\n", 3814 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6563\n", 3815 | "Epoch 900/1000\n", 3816 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6724\n", 3817 | "Epoch 901/1000\n", 3818 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6988\n", 3819 | "Epoch 902/1000\n", 3820 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6411\n", 3821 | "Epoch 903/1000\n", 3822 | "1/1 [==============================] - 0s 27ms/step - loss: 4.6669\n", 3823 | "Epoch 904/1000\n", 3824 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7202\n", 3825 | "Epoch 905/1000\n", 3826 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7193\n", 3827 | "Epoch 906/1000\n", 3828 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7337\n", 3829 | "Epoch 907/1000\n", 3830 | "1/1 [==============================] - 0s 34ms/step - loss: 4.6947\n", 3831 | "Epoch 908/1000\n", 3832 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7447\n", 3833 | "Epoch 909/1000\n", 3834 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6330\n", 3835 | "Epoch 910/1000\n", 3836 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7403\n", 3837 | "Epoch 911/1000\n", 3838 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6571\n", 3839 | "Epoch 912/1000\n", 3840 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7235\n", 3841 | "Epoch 913/1000\n", 3842 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7024\n", 3843 | "Epoch 914/1000\n", 3844 | "1/1 [==============================] - 0s 31ms/step - loss: 4.6936\n", 3845 | "Epoch 915/1000\n", 3846 | "1/1 [==============================] - 0s 36ms/step - loss: 4.7352\n", 3847 | "Epoch 916/1000\n", 3848 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6947\n", 3849 | "Epoch 917/1000\n", 3850 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6828\n", 3851 | "Epoch 918/1000\n", 3852 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7139\n", 3853 | "Epoch 919/1000\n", 3854 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6762\n", 3855 | "Epoch 920/1000\n", 3856 | "1/1 [==============================] - 0s 33ms/step - loss: 4.6922\n", 3857 | "Epoch 921/1000\n", 3858 | "1/1 [==============================] - 0s 35ms/step - loss: 4.7086\n", 3859 | "Epoch 922/1000\n", 3860 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7033\n", 3861 | "Epoch 923/1000\n", 3862 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6780\n", 3863 | "Epoch 924/1000\n", 3864 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6496\n", 3865 | "Epoch 925/1000\n", 3866 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6885\n", 3867 | "Epoch 926/1000\n", 3868 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7248\n", 3869 | "Epoch 927/1000\n", 3870 | "1/1 [==============================] - 0s 29ms/step - loss: 4.5777\n", 3871 | "Epoch 928/1000\n", 3872 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7340\n", 3873 | "Epoch 929/1000\n", 3874 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7274\n", 3875 | "Epoch 930/1000\n", 3876 | "1/1 [==============================] - 0s 31ms/step - loss: 4.6764\n", 3877 | "Epoch 931/1000\n", 3878 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6760\n", 3879 | "Epoch 932/1000\n", 3880 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6488\n", 3881 | "Epoch 933/1000\n", 3882 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6892\n", 3883 | "Epoch 934/1000\n", 3884 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6533\n", 3885 | "Epoch 935/1000\n", 3886 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6031\n", 3887 | "Epoch 936/1000\n", 3888 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6857\n", 3889 | "Epoch 937/1000\n", 3890 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6651\n", 3891 | "Epoch 938/1000\n", 3892 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7473\n", 3893 | "Epoch 939/1000\n", 3894 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7159\n", 3895 | "Epoch 940/1000\n", 3896 | "1/1 [==============================] - 0s 33ms/step - loss: 4.6834\n", 3897 | "Epoch 941/1000\n", 3898 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7152\n", 3899 | "Epoch 942/1000\n", 3900 | "1/1 [==============================] - 0s 29ms/step - loss: 4.5657\n", 3901 | "Epoch 943/1000\n", 3902 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6751\n", 3903 | "Epoch 944/1000\n", 3904 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7163\n", 3905 | "Epoch 945/1000\n", 3906 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6904\n", 3907 | "Epoch 946/1000\n", 3908 | "1/1 [==============================] - 0s 36ms/step - loss: 4.7130\n", 3909 | "Epoch 947/1000\n", 3910 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7077\n", 3911 | "Epoch 948/1000\n", 3912 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7031\n", 3913 | "Epoch 949/1000\n", 3914 | "1/1 [==============================] - 0s 31ms/step - loss: 4.6824\n", 3915 | "Epoch 950/1000\n", 3916 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6840\n", 3917 | "Epoch 951/1000\n", 3918 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6969\n", 3919 | "Epoch 952/1000\n", 3920 | "1/1 [==============================] - 0s 27ms/step - loss: 4.7630\n", 3921 | "Epoch 953/1000\n", 3922 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7179\n", 3923 | "Epoch 954/1000\n", 3924 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7370\n", 3925 | "Epoch 955/1000\n", 3926 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6764\n", 3927 | "Epoch 956/1000\n", 3928 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6743\n", 3929 | "Epoch 957/1000\n", 3930 | "1/1 [==============================] - 0s 32ms/step - loss: 4.7135\n", 3931 | "Epoch 958/1000\n", 3932 | "1/1 [==============================] - 0s 30ms/step - loss: 4.6719\n", 3933 | "Epoch 959/1000\n", 3934 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6937\n", 3935 | "Epoch 960/1000\n", 3936 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6770\n", 3937 | "Epoch 961/1000\n", 3938 | "1/1 [==============================] - 0s 27ms/step - loss: 4.6473\n", 3939 | "Epoch 962/1000\n", 3940 | "1/1 [==============================] - 0s 33ms/step - loss: 4.6999\n", 3941 | "Epoch 963/1000\n", 3942 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6912\n", 3943 | "Epoch 964/1000\n", 3944 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6669\n", 3945 | "Epoch 965/1000\n", 3946 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6376\n", 3947 | "Epoch 966/1000\n", 3948 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6483\n", 3949 | "Epoch 967/1000\n", 3950 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6984\n", 3951 | "Epoch 968/1000\n", 3952 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7515\n", 3953 | "Epoch 969/1000\n", 3954 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6547\n", 3955 | "Epoch 970/1000\n", 3956 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7154\n", 3957 | "Epoch 971/1000\n", 3958 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7244\n", 3959 | "Epoch 972/1000\n", 3960 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6364\n", 3961 | "Epoch 973/1000\n", 3962 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6528\n", 3963 | "Epoch 974/1000\n", 3964 | "1/1 [==============================] - 0s 32ms/step - loss: 4.7207\n", 3965 | "Epoch 975/1000\n", 3966 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7044\n", 3967 | "Epoch 976/1000\n", 3968 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7439\n", 3969 | "Epoch 977/1000\n", 3970 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7160\n", 3971 | "Epoch 978/1000\n", 3972 | "1/1 [==============================] - 0s 29ms/step - loss: 4.7318\n", 3973 | "Epoch 979/1000\n", 3974 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6851\n", 3975 | "Epoch 980/1000\n", 3976 | "1/1 [==============================] - 0s 30ms/step - loss: 4.7073\n", 3977 | "Epoch 981/1000\n", 3978 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6802\n", 3979 | "Epoch 982/1000\n", 3980 | "1/1 [==============================] - 0s 40ms/step - loss: 4.6693\n", 3981 | "Epoch 983/1000\n", 3982 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7157\n", 3983 | "Epoch 984/1000\n", 3984 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6379\n", 3985 | "Epoch 985/1000\n", 3986 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6830\n", 3987 | "Epoch 986/1000\n", 3988 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6517\n", 3989 | "Epoch 987/1000\n", 3990 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7014\n", 3991 | "Epoch 988/1000\n", 3992 | "1/1 [==============================] - 0s 32ms/step - loss: 4.6387\n", 3993 | "Epoch 989/1000\n", 3994 | "1/1 [==============================] - 0s 32ms/step - loss: 4.6900\n", 3995 | "Epoch 990/1000\n", 3996 | "1/1 [==============================] - 0s 35ms/step - loss: 4.6919\n", 3997 | "Epoch 991/1000\n", 3998 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6953\n", 3999 | "Epoch 992/1000\n", 4000 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7393\n", 4001 | "Epoch 993/1000\n", 4002 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6423\n", 4003 | "Epoch 994/1000\n", 4004 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6291\n", 4005 | "Epoch 995/1000\n", 4006 | "1/1 [==============================] - 0s 31ms/step - loss: 4.7041\n", 4007 | "Epoch 996/1000\n", 4008 | "1/1 [==============================] - 0s 28ms/step - loss: 4.7425\n", 4009 | "Epoch 997/1000\n", 4010 | "1/1 [==============================] - 0s 27ms/step - loss: 4.6640\n", 4011 | "Epoch 998/1000\n", 4012 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6980\n", 4013 | "Epoch 999/1000\n", 4014 | "1/1 [==============================] - 0s 28ms/step - loss: 4.6917\n", 4015 | "Epoch 1000/1000\n", 4016 | "1/1 [==============================] - 0s 29ms/step - loss: 4.6360\n" 4017 | ], 4018 | "name": "stdout" 4019 | }, 4020 | { 4021 | "output_type": "execute_result", 4022 | "data": { 4023 | "text/plain": [ 4024 | "" 4025 | ] 4026 | }, 4027 | "metadata": { 4028 | "tags": [] 4029 | }, 4030 | "execution_count": 59 4031 | } 4032 | ] 4033 | }, 4034 | { 4035 | "cell_type": "code", 4036 | "metadata": { 4037 | "id": "A_ZDUrRAl4HP", 4038 | "colab_type": "code", 4039 | "colab": {} 4040 | }, 4041 | "source": [ 4042 | "user_list_1=user_title_list[user_title_list.user>600]" 4043 | ], 4044 | "execution_count": null, 4045 | "outputs": [] 4046 | }, 4047 | { 4048 | "cell_type": "code", 4049 | "metadata": { 4050 | "id": "wNzj3no-5FF1", 4051 | "colab_type": "code", 4052 | "colab": { 4053 | "base_uri": "https://localhost:8080/", 4054 | "height": 699 4055 | }, 4056 | "outputId": "7acbf994-623b-4749-81eb-bf919ef5e0a1" 4057 | }, 4058 | "source": [ 4059 | "user_list_1.head(10)" 4060 | ], 4061 | "execution_count": null, 4062 | "outputs": [ 4063 | { 4064 | "output_type": "execute_result", 4065 | "data": { 4066 | "text/html": [ 4067 | "
\n", 4068 | "\n", 4081 | "\n", 4082 | " \n", 4083 | " \n", 4084 | " \n", 4085 | " \n", 4086 | " \n", 4087 | " \n", 4088 | " \n", 4089 | " \n", 4090 | " \n", 4091 | " \n", 4092 | " \n", 4093 | " \n", 4094 | " \n", 4095 | " \n", 4096 | " \n", 4097 | " \n", 4098 | " \n", 4099 | " \n", 4100 | " \n", 4101 | " \n", 4102 | " \n", 4103 | " \n", 4104 | " \n", 4105 | " \n", 4106 | " \n", 4107 | " \n", 4108 | " \n", 4109 | " \n", 4110 | " \n", 4111 | " \n", 4112 | " \n", 4113 | " \n", 4114 | " \n", 4115 | " \n", 4116 | " \n", 4117 | " \n", 4118 | " \n", 4119 | " \n", 4120 | " \n", 4121 | " \n", 4122 | " \n", 4123 | " \n", 4124 | " \n", 4125 | " \n", 4126 | " \n", 4127 | " \n", 4128 | " \n", 4129 | " \n", 4130 | " \n", 4131 | " \n", 4132 | " \n", 4133 | " \n", 4134 | " \n", 4135 | " \n", 4136 | " \n", 4137 | " \n", 4138 | " \n", 4139 | " \n", 4140 | " \n", 4141 | " \n", 4142 | " \n", 4143 | " \n", 4144 | " \n", 4145 | " \n", 4146 | " \n", 4147 | " \n", 4148 | " \n", 4149 | " \n", 4150 | " \n", 4151 | " \n", 4152 | " \n", 4153 | " \n", 4154 | " \n", 4155 | " \n", 4156 | " \n", 4157 | " \n", 4158 | " \n", 4159 | " \n", 4160 | " \n", 4161 | " \n", 4162 | " \n", 4163 | " \n", 4164 | " \n", 4165 | " \n", 4166 | " \n", 4167 | " \n", 4168 | " \n", 4169 | " \n", 4170 | " \n", 4171 | " \n", 4172 | " \n", 4173 | " \n", 4174 | " \n", 4175 | " \n", 4176 | " \n", 4177 | " \n", 4178 | " \n", 4179 | " \n", 4180 | " \n", 4181 | " \n", 4182 | " \n", 4183 | " \n", 4184 | " \n", 4185 | " \n", 4186 | " \n", 4187 | " \n", 4188 | " \n", 4189 | " \n", 4190 | " \n", 4191 | " \n", 4192 | " \n", 4193 | " \n", 4194 | " \n", 4195 | " \n", 4196 | " \n", 4197 | " \n", 4198 | " \n", 4199 | " \n", 4200 | " \n", 4201 | " \n", 4202 | " \n", 4203 | " \n", 4204 | " \n", 4205 | " \n", 4206 | " \n", 4207 | "
userdislikeliketitle_dall_genresoccupationsexpredict_labels
601601[326][309, 786, 870, 361, 298, 308, 457, 716, 127, ...[307, 777, 860, 358, 296, 306, 324, 454, 708, ...[8, 4, 2, 5, 7, 6, 3, 1]otherF43
602602[254, 179, 295, 936, 136, 405, 152][249, 243, 17, 184, 176, 153, 379, 412, 376, 2...[248, 242, 253, 17, 183, 175, 152, 178, 376, 4...[4, 8, 2, 5, 7, 6, 0, 3, 1]programmerM921
603603[63, 87, 82, 423, 268, 158, 426, 653][72, 8, 56, 132, 241, 27, 163, 148, 652, 372, ...[72, 8, 56, 131, 63, 240, 27, 87, 162, 147, 64...[8, 4, 2, 5, 7, 6, 9, 1]educatorM657
604604[309, 340, 11, 539, 81, 53, 1042, 930, 39, 610...[272, 171, 302, 349, 275, 298, 758, 276, 761, ...[271, 170, 307, 300, 347, 274, 296, 338, 749, ...[4, 8, 2, 5, 7, 6, 0, 3, 1]engineerM481
605605[918, 298, 362, 1043, 201, 114, 71, 219, 501, ...[275, 539, 336, 17, 256, 21, 721, 10, 9, 131, ...[274, 534, 334, 17, 255, 21, 713, 10, 9, 130, ...[0, 8, 4, 2, 5, 7, 6, 9, 3, 1]programmerM1181
606606[39][785, 477, 241, 512, 529, 498, 377, 109, 486, ...[776, 474, 240, 507, 524, 495, 374, 109, 483, ...[4, 8, 2, 5, 7, 6, 3, 1]healthcareF191
607607[309, 344, 307, 760, 347, 276, 57, 1202, 17, 1...[272, 171, 20, 298, 689, 273, 331, 275, 318, 3...[271, 170, 307, 20, 342, 296, 305, 681, 751, 3...[9, 4, 8, 2, 5, 7, 6, 0, 3, 1]otherM134
608608[275, 115, 298, 321, 885, 323, 127, 457, 874, ...[305, 250, 303, 289, 30, 221, 712, 308, 782][303, 274, 249, 301, 287, 115, 30, 220, 296, 7...[8, 4, 2, 5, 6, 3, 1]studentF444
609609[298, 254, 323, 27, 58, 84, 463, 711][279, 348, 275, 714, 253, 712, 305, 89, 512, 6...[278, 346, 274, 296, 706, 253, 321, 252, 704, ...[9, 8, 4, 2, 5, 7, 6, 0, 3, 1]studentM428
610610[785, 282, 904, 334][171, 302, 275, 316, 278, 317, 306, 689, 253, ...[170, 300, 274, 314, 277, 315, 304, 681, 252, ...[8, 4, 2, 5, 7, 6, 0, 3, 1]librarianM330
\n", 4208 | "
" 4209 | ], 4210 | "text/plain": [ 4211 | " user ... predict_labels\n", 4212 | "601 601 ... 43\n", 4213 | "602 602 ... 921\n", 4214 | "603 603 ... 657\n", 4215 | "604 604 ... 481\n", 4216 | "605 605 ... 1181\n", 4217 | "606 606 ... 191\n", 4218 | "607 607 ... 134\n", 4219 | "608 608 ... 444\n", 4220 | "609 609 ... 428\n", 4221 | "610 610 ... 330\n", 4222 | "\n", 4223 | "[10 rows x 8 columns]" 4224 | ] 4225 | }, 4226 | "metadata": { 4227 | "tags": [] 4228 | }, 4229 | "execution_count": 61 4230 | } 4231 | ] 4232 | }, 4233 | { 4234 | "cell_type": "code", 4235 | "metadata": { 4236 | "id": "PvrKzKZPkh4Y", 4237 | "colab_type": "code", 4238 | "colab": { 4239 | "base_uri": "https://localhost:8080/", 4240 | "height": 173 4241 | }, 4242 | "outputId": "cb1c91ea-d4c9-4c8b-854f-f8c4b9caa3b0" 4243 | }, 4244 | "source": [ 4245 | "\n", 4246 | "predict =model.predict([tf.keras.preprocessing.sequence.pad_sequences(user_list_1['title_d']),\n", 4247 | " tf.keras.preprocessing.sequence.pad_sequences(user_list_1['like']),\n", 4248 | " tf.keras.preprocessing.sequence.pad_sequences(user_list_1['dislike']),\n", 4249 | " tf.keras.preprocessing.sequence.pad_sequences(user_list_1['all_genres'])\n", 4250 | " ])\n" 4251 | ], 4252 | "execution_count": null, 4253 | "outputs": [ 4254 | { 4255 | "output_type": "stream", 4256 | "text": [ 4257 | "WARNING:tensorflow:6 out of the last 13 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 4258 | "WARNING:tensorflow:7 out of the last 14 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 4259 | "WARNING:tensorflow:7 out of the last 11 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 4260 | "WARNING:tensorflow:7 out of the last 11 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 4261 | "WARNING:tensorflow:6 out of the last 13 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 4262 | "WARNING:tensorflow:7 out of the last 14 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 4263 | "WARNING:tensorflow:7 out of the last 11 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", 4264 | "WARNING:tensorflow:7 out of the last 11 calls to triggered tf.function retracing. Tracing is expensive and the excessive number of tracings is likely due to passing python objects instead of tensors. Also, tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. Please refer to https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" 4265 | ], 4266 | "name": "stdout" 4267 | } 4268 | ] 4269 | }, 4270 | { 4271 | "cell_type": "code", 4272 | "metadata": { 4273 | "id": "XUVbajaou5dw", 4274 | "colab_type": "code", 4275 | "colab": {} 4276 | }, 4277 | "source": [ 4278 | "predictions = np.array([np.argmax(a) for a in predict])" 4279 | ], 4280 | "execution_count": null, 4281 | "outputs": [] 4282 | }, 4283 | { 4284 | "cell_type": "code", 4285 | "metadata": { 4286 | "id": "gCgcShKIt0rw", 4287 | "colab_type": "code", 4288 | "colab": { 4289 | "base_uri": "https://localhost:8080/", 4290 | "height": 139 4291 | }, 4292 | "outputId": "47fa3add-6f38-4aae-8f58-fe92485fec2a" 4293 | }, 4294 | "source": [ 4295 | "user_list_1['predicted_label'] = predictions" 4296 | ], 4297 | "execution_count": null, 4298 | "outputs": [ 4299 | { 4300 | "output_type": "stream", 4301 | "text": [ 4302 | "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:1: SettingWithCopyWarning: \n", 4303 | "A value is trying to be set on a copy of a slice from a DataFrame.\n", 4304 | "Try using .loc[row_indexer,col_indexer] = value instead\n", 4305 | "\n", 4306 | "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", 4307 | " \"\"\"Entry point for launching an IPython kernel.\n" 4308 | ], 4309 | "name": "stderr" 4310 | } 4311 | ] 4312 | }, 4313 | { 4314 | "cell_type": "code", 4315 | "metadata": { 4316 | "id": "7zUlDEifugRm", 4317 | "colab_type": "code", 4318 | "colab": { 4319 | "base_uri": "https://localhost:8080/", 4320 | "height": 929 4321 | }, 4322 | "outputId": "db220707-4199-4197-e5c4-4b616a48fc90" 4323 | }, 4324 | "source": [ 4325 | "user_list_1" 4326 | ], 4327 | "execution_count": null, 4328 | "outputs": [ 4329 | { 4330 | "output_type": "execute_result", 4331 | "data": { 4332 | "text/html": [ 4333 | "
\n", 4334 | "\n", 4347 | "\n", 4348 | " \n", 4349 | " \n", 4350 | " \n", 4351 | " \n", 4352 | " \n", 4353 | " \n", 4354 | " \n", 4355 | " \n", 4356 | " \n", 4357 | " \n", 4358 | " \n", 4359 | " \n", 4360 | " \n", 4361 | " \n", 4362 | " \n", 4363 | " \n", 4364 | " \n", 4365 | " \n", 4366 | " \n", 4367 | " \n", 4368 | " \n", 4369 | " \n", 4370 | " \n", 4371 | " \n", 4372 | " \n", 4373 | " \n", 4374 | " \n", 4375 | " \n", 4376 | " \n", 4377 | " \n", 4378 | " \n", 4379 | " \n", 4380 | " \n", 4381 | " \n", 4382 | " \n", 4383 | " \n", 4384 | " \n", 4385 | " \n", 4386 | " \n", 4387 | " \n", 4388 | " \n", 4389 | " \n", 4390 | " \n", 4391 | " \n", 4392 | " \n", 4393 | " \n", 4394 | " \n", 4395 | " \n", 4396 | " \n", 4397 | " \n", 4398 | " \n", 4399 | " \n", 4400 | " \n", 4401 | " \n", 4402 | " \n", 4403 | " \n", 4404 | " \n", 4405 | " \n", 4406 | " \n", 4407 | " \n", 4408 | " \n", 4409 | " \n", 4410 | " \n", 4411 | " \n", 4412 | " \n", 4413 | " \n", 4414 | " \n", 4415 | " \n", 4416 | " \n", 4417 | " \n", 4418 | " \n", 4419 | " \n", 4420 | " \n", 4421 | " \n", 4422 | " \n", 4423 | " \n", 4424 | " \n", 4425 | " \n", 4426 | " \n", 4427 | " \n", 4428 | " \n", 4429 | " \n", 4430 | " \n", 4431 | " \n", 4432 | " \n", 4433 | " \n", 4434 | " \n", 4435 | " \n", 4436 | " \n", 4437 | " \n", 4438 | " \n", 4439 | " \n", 4440 | " \n", 4441 | " \n", 4442 | " \n", 4443 | " \n", 4444 | " \n", 4445 | " \n", 4446 | " \n", 4447 | " \n", 4448 | " \n", 4449 | " \n", 4450 | " \n", 4451 | " \n", 4452 | " \n", 4453 | " \n", 4454 | " \n", 4455 | " \n", 4456 | " \n", 4457 | " \n", 4458 | " \n", 4459 | " \n", 4460 | " \n", 4461 | " \n", 4462 | " \n", 4463 | " \n", 4464 | " \n", 4465 | " \n", 4466 | " \n", 4467 | " \n", 4468 | " \n", 4469 | " \n", 4470 | " \n", 4471 | " \n", 4472 | " \n", 4473 | " \n", 4474 | " \n", 4475 | " \n", 4476 | " \n", 4477 | " \n", 4478 | " \n", 4479 | " \n", 4480 | " \n", 4481 | " \n", 4482 | " \n", 4483 | " \n", 4484 | " \n", 4485 | " \n", 4486 | " \n", 4487 | " \n", 4488 | " \n", 4489 | " \n", 4490 | " \n", 4491 | " \n", 4492 | " \n", 4493 | " \n", 4494 | " \n", 4495 | " \n", 4496 | "
userdislikeliketitle_dall_genresoccupationsexpredict_labelspredicted_label
601601[326][309, 786, 870, 361, 298, 308, 457, 716, 127, ...[307, 777, 860, 358, 296, 306, 324, 454, 708, ...[8, 4, 2, 5, 7, 6, 3, 1]otherF43539
602602[254, 179, 295, 936, 136, 405, 152][249, 243, 17, 184, 176, 153, 379, 412, 376, 2...[248, 242, 253, 17, 183, 175, 152, 178, 376, 4...[4, 8, 2, 5, 7, 6, 0, 3, 1]programmerM921916
603603[63, 87, 82, 423, 268, 158, 426, 653][72, 8, 56, 132, 241, 27, 163, 148, 652, 372, ...[72, 8, 56, 131, 63, 240, 27, 87, 162, 147, 64...[8, 4, 2, 5, 7, 6, 9, 1]educatorM657786
604604[309, 340, 11, 539, 81, 53, 1042, 930, 39, 610...[272, 171, 302, 349, 275, 298, 758, 276, 761, ...[271, 170, 307, 300, 347, 274, 296, 338, 749, ...[4, 8, 2, 5, 7, 6, 0, 3, 1]engineerM481200
605605[918, 298, 362, 1043, 201, 114, 71, 219, 501, ...[275, 539, 336, 17, 256, 21, 721, 10, 9, 131, ...[274, 534, 334, 17, 255, 21, 713, 10, 9, 130, ...[0, 8, 4, 2, 5, 7, 6, 9, 3, 1]programmerM1181336
..............................
938938[542, 251, 872, 936][332, 685, 250, 8, 247, 15, 285, 980, 1181, 71...[250, 330, 677, 250, 862, 249, 8, 246, 15, 283...[8, 4, 2, 5, 7, 6, 9, 3, 1]studentF172336
939939[321, 31, 254, 361, 326, 54, 1402, 267, 161, 2...[272, 307, 276, 543, 346, 279, 310, 714, 302, ...[271, 319, 305, 275, 537, 344, 31, 253, 278, 3...[4, 8, 2, 5, 7, 6, 0, 3, 1]administratorM311336
940940[361, 249][250, 309, 298, 11, 444, 10, 918, 290, 15, 27,...[249, 307, 296, 358, 11, 441, 10, 908, 288, 15...[8, 4, 2, 5, 7, 6, 3, 1]studentM3097
941941[171][712, 279, 346, 307, 305, 253, 357, 250, 308, ...[704, 278, 344, 170, 305, 303, 252, 354, 249, ...[0, 8, 4, 2, 5, 7, 6, 9, 3, 1]librarianF48336
942942[1076, 366, 1029, 887, 1043, 301, 849, 1008, 1...[65, 10, 50, 109, 241, 8, 464, 790, 17, 462, 1...[65, 10, 50, 109, 240, 1065, 8, 461, 780, 17, ...[4, 8, 2, 5, 7, 6, 9, 3, 1]studentM132336
\n", 4497 | "

342 rows × 9 columns

\n", 4498 | "
" 4499 | ], 4500 | "text/plain": [ 4501 | " user ... predicted_label\n", 4502 | "601 601 ... 539\n", 4503 | "602 602 ... 916\n", 4504 | "603 603 ... 786\n", 4505 | "604 604 ... 200\n", 4506 | "605 605 ... 336\n", 4507 | ".. ... ... ...\n", 4508 | "938 938 ... 336\n", 4509 | "939 939 ... 336\n", 4510 | "940 940 ... 97\n", 4511 | "941 941 ... 336\n", 4512 | "942 942 ... 336\n", 4513 | "\n", 4514 | "[342 rows x 9 columns]" 4515 | ] 4516 | }, 4517 | "metadata": { 4518 | "tags": [] 4519 | }, 4520 | "execution_count": 68 4521 | } 4522 | ] 4523 | }, 4524 | { 4525 | "cell_type": "code", 4526 | "metadata": { 4527 | "id": "3hGFnFYBkh_h", 4528 | "colab_type": "code", 4529 | "colab": { 4530 | "base_uri": "https://localhost:8080/", 4531 | "height": 153 4532 | }, 4533 | "outputId": "35c99635-3be9-4ed3-ef1a-373b1b11f605" 4534 | }, 4535 | "source": [ 4536 | "print(tf.argsort(predict,direction='DESCENDING',axis=-1))" 4537 | ], 4538 | "execution_count": null, 4539 | "outputs": [ 4540 | { 4541 | "output_type": "stream", 4542 | "text": [ 4543 | "tf.Tensor(\n", 4544 | "[[ 539 6 250 ... 1561 1164 20]\n", 4545 | " [ 916 726 336 ... 430 811 63]\n", 4546 | " [ 786 685 326 ... 665 1665 1615]\n", 4547 | " ...\n", 4548 | " [ 97 376 473 ... 430 96 162]\n", 4549 | " [ 336 716 937 ... 1343 220 159]\n", 4550 | " [ 336 716 937 ... 1343 220 159]], shape=(342, 1683), dtype=int32)\n" 4551 | ], 4552 | "name": "stdout" 4553 | } 4554 | ] 4555 | }, 4556 | { 4557 | "cell_type": "code", 4558 | "metadata": { 4559 | "id": "CpPmlMgXXOHd", 4560 | "colab_type": "code", 4561 | "colab": { 4562 | "base_uri": "https://localhost:8080/", 4563 | "height": 374 4564 | }, 4565 | "outputId": "ed1d6ca0-520b-45eb-f68a-35089132bdbb" 4566 | }, 4567 | "source": [ 4568 | "tf.nn.top_k(\n", 4569 | " predict,\n", 4570 | " k=20,\n", 4571 | " sorted=True,\n", 4572 | " name=None\n", 4573 | ")" 4574 | ], 4575 | "execution_count": null, 4576 | "outputs": [ 4577 | { 4578 | "output_type": "execute_result", 4579 | "data": { 4580 | "text/plain": [ 4581 | "TopKV2(values=, indices=)" 4602 | ] 4603 | }, 4604 | "metadata": { 4605 | "tags": [] 4606 | }, 4607 | "execution_count": 72 4608 | } 4609 | ] 4610 | }, 4611 | { 4612 | "cell_type": "code", 4613 | "metadata": { 4614 | "id": "PHzdoH5e1Ssp", 4615 | "colab_type": "code", 4616 | "colab": {} 4617 | }, 4618 | "source": [ 4619 | "s=[i for i in range(len(movie2movie_encoded)) if movie2movie_encoded[i] == 365 ]" 4620 | ], 4621 | "execution_count": null, 4622 | "outputs": [] 4623 | }, 4624 | { 4625 | "cell_type": "code", 4626 | "metadata": { 4627 | "id": "jAvk4Zxy16EP", 4628 | "colab_type": "code", 4629 | "colab": { 4630 | "base_uri": "https://localhost:8080/", 4631 | "height": 151 4632 | }, 4633 | "outputId": "2b946897-6664-49db-8a77-4bc9f5d25ba0" 4634 | }, 4635 | "source": [ 4636 | "movies[movies.movie_id == ''.join(str(s[0]))]" 4637 | ], 4638 | "execution_count": null, 4639 | "outputs": [ 4640 | { 4641 | "output_type": "execute_result", 4642 | "data": { 4643 | "text/html": [ 4644 | "
\n", 4645 | "\n", 4658 | "\n", 4659 | " \n", 4660 | " \n", 4661 | " \n", 4662 | " \n", 4663 | " \n", 4664 | " \n", 4665 | " \n", 4666 | " \n", 4667 | " \n", 4668 | " \n", 4669 | " \n", 4670 | " \n", 4671 | " \n", 4672 | " \n", 4673 | " \n", 4674 | " \n", 4675 | " \n", 4676 | " \n", 4677 | " \n", 4678 | " \n", 4679 | " \n", 4680 | " \n", 4681 | " \n", 4682 | " \n", 4683 | " \n", 4684 | " \n", 4685 | " \n", 4686 | " \n", 4687 | " \n", 4688 | " \n", 4689 | " \n", 4690 | " \n", 4691 | " \n", 4692 | " \n", 4693 | " \n", 4694 | " \n", 4695 | " \n", 4696 | " \n", 4697 | " \n", 4698 | " \n", 4699 | " \n", 4700 | " \n", 4701 | " \n", 4702 | " \n", 4703 | " \n", 4704 | " \n", 4705 | " \n", 4706 | " \n", 4707 | " \n", 4708 | " \n", 4709 | " \n", 4710 | " \n", 4711 | " \n", 4712 | " \n", 4713 | " \n", 4714 | " \n", 4715 | " \n", 4716 | " \n", 4717 | " \n", 4718 | " \n", 4719 | " \n", 4720 | " \n", 4721 | "
movie_idtitlerelease_datevideo_release_dateimdb_urlgenre_unknownActionAdventureAnimationChildrenComedyCrimeDocumentaryDramaFantasyFilm-NoirHorrorMusicalMysteryRomanceSci-FiThrillerWarWesternyearall_genres
368368Black Sheep (1996)02-Feb-1996NaNhttp://us.imdb.com/M/title-exact?Black%20Sheep...000001000000000000019965
\n", 4722 | "
" 4723 | ], 4724 | "text/plain": [ 4725 | " movie_id title release_date ... Western year all_genres\n", 4726 | "368 368 Black Sheep (1996) 02-Feb-1996 ... 0 1996 5\n", 4727 | "\n", 4728 | "[1 rows x 26 columns]" 4729 | ] 4730 | }, 4731 | "metadata": { 4732 | "tags": [] 4733 | }, 4734 | "execution_count": 74 4735 | } 4736 | ] 4737 | }, 4738 | { 4739 | "cell_type": "markdown", 4740 | "metadata": { 4741 | "id": "128SyQz4ili7", 4742 | "colab_type": "text" 4743 | }, 4744 | "source": [ 4745 | "### Visualize Embeddings " 4746 | ] 4747 | }, 4748 | { 4749 | "cell_type": "code", 4750 | "metadata": { 4751 | "id": "vU7Ml7qHmUV1", 4752 | "colab_type": "code", 4753 | "colab": {} 4754 | }, 4755 | "source": [ 4756 | "import io\n", 4757 | "out_v = io.open('vecs.tsv', 'w', encoding='utf-8')\n", 4758 | "out_m = io.open('meta.tsv', 'w', encoding='utf-8')\n", 4759 | "#weights =model.layers[4].get_weights()[0]\n", 4760 | "weights = features_embedding_layer.get_weights()[0][1:]\n", 4761 | "\n", 4762 | "for num, word in enumerate(title2title_encoded):\n", 4763 | " vec = weights[num+1] # skip 0, it's padding.\n", 4764 | " out_m.write(word + \"\\n\")\n", 4765 | " out_v.write('\\t'.join([str(x) for x in vec]) + \"\\n\")\n", 4766 | "out_v.close()\n", 4767 | "out_m.close()" 4768 | ], 4769 | "execution_count": null, 4770 | "outputs": [] 4771 | }, 4772 | { 4773 | "cell_type": "code", 4774 | "metadata": { 4775 | "id": "ieKdL5TbmaAI", 4776 | "colab_type": "code", 4777 | "colab": {} 4778 | }, 4779 | "source": [ 4780 | "try:\n", 4781 | " from google.colab import files\n", 4782 | "except ImportError:\n", 4783 | " pass\n", 4784 | "else:\n", 4785 | " files.download('vecs.tsv')\n", 4786 | " files.download('meta.tsv')" 4787 | ], 4788 | "execution_count": null, 4789 | "outputs": [] 4790 | }, 4791 | { 4792 | "cell_type": "code", 4793 | "metadata": { 4794 | "id": "X8sWuqm6lXL6", 4795 | "colab_type": "code", 4796 | "colab": {} 4797 | }, 4798 | "source": [ 4799 | "" 4800 | ], 4801 | "execution_count": null, 4802 | "outputs": [] 4803 | } 4804 | ] 4805 | } --------------------------------------------------------------------------------