|
59 | 59 | "metadata": {}, |
60 | 60 | "outputs": [], |
61 | 61 | "source": [ |
62 | | - "# !pip3 install earthkit-data ecmwf-opendata" |
| 62 | + "# !pip3 install earthkit-data ecmwf-opendata requests datetime" |
63 | 63 | ] |
64 | 64 | }, |
65 | 65 | { |
|
460 | 460 | }, |
461 | 461 | { |
462 | 462 | "cell_type": "code", |
463 | | - "execution_count": 6, |
| 463 | + "execution_count": 3, |
464 | 464 | "id": "33f92905-9ef8-4243-91ad-82cb6fb3c8ee", |
465 | 465 | "metadata": {}, |
466 | 466 | "outputs": [ |
467 | 467 | { |
468 | 468 | "name": "stdout", |
469 | 469 | "output_type": "stream", |
470 | 470 | "text": [ |
471 | | - "The 20250608000000-6h-oper-fc.grib2 file downloaded in 8 seconds.\n" |
| 471 | + "The 20250827000000-6h-oper-fc.grib2 file downloaded in 7 seconds.\n" |
472 | 472 | ] |
| 473 | + }, |
| 474 | + { |
| 475 | + "data": { |
| 476 | + "text/html": [ |
| 477 | + "<div>\n", |
| 478 | + "<style scoped>\n", |
| 479 | + " .dataframe tbody tr th:only-of-type {\n", |
| 480 | + " vertical-align: middle;\n", |
| 481 | + " }\n", |
| 482 | + "\n", |
| 483 | + " .dataframe tbody tr th {\n", |
| 484 | + " vertical-align: top;\n", |
| 485 | + " }\n", |
| 486 | + "\n", |
| 487 | + " .dataframe thead th {\n", |
| 488 | + " text-align: right;\n", |
| 489 | + " }\n", |
| 490 | + "</style>\n", |
| 491 | + "<table border=\"1\" class=\"dataframe\">\n", |
| 492 | + " <thead>\n", |
| 493 | + " <tr style=\"text-align: right;\">\n", |
| 494 | + " <th></th>\n", |
| 495 | + " <th>centre</th>\n", |
| 496 | + " <th>shortName</th>\n", |
| 497 | + " <th>typeOfLevel</th>\n", |
| 498 | + " <th>level</th>\n", |
| 499 | + " <th>dataDate</th>\n", |
| 500 | + " <th>dataTime</th>\n", |
| 501 | + " <th>stepRange</th>\n", |
| 502 | + " <th>dataType</th>\n", |
| 503 | + " <th>number</th>\n", |
| 504 | + " <th>gridType</th>\n", |
| 505 | + " </tr>\n", |
| 506 | + " </thead>\n", |
| 507 | + " <tbody>\n", |
| 508 | + " <tr>\n", |
| 509 | + " <th>0</th>\n", |
| 510 | + " <td>ecmf</td>\n", |
| 511 | + " <td>mcc</td>\n", |
| 512 | + " <td>mediumCloudLayer</td>\n", |
| 513 | + " <td>800</td>\n", |
| 514 | + " <td>20250827</td>\n", |
| 515 | + " <td>0</td>\n", |
| 516 | + " <td>6</td>\n", |
| 517 | + " <td>fc</td>\n", |
| 518 | + " <td>None</td>\n", |
| 519 | + " <td>regular_ll</td>\n", |
| 520 | + " </tr>\n", |
| 521 | + " <tr>\n", |
| 522 | + " <th>1</th>\n", |
| 523 | + " <td>ecmf</td>\n", |
| 524 | + " <td>vsw</td>\n", |
| 525 | + " <td>soilLayer</td>\n", |
| 526 | + " <td>1</td>\n", |
| 527 | + " <td>20250827</td>\n", |
| 528 | + " <td>0</td>\n", |
| 529 | + " <td>6</td>\n", |
| 530 | + " <td>fc</td>\n", |
| 531 | + " <td>None</td>\n", |
| 532 | + " <td>regular_ll</td>\n", |
| 533 | + " </tr>\n", |
| 534 | + " <tr>\n", |
| 535 | + " <th>2</th>\n", |
| 536 | + " <td>ecmf</td>\n", |
| 537 | + " <td>vsw</td>\n", |
| 538 | + " <td>soilLayer</td>\n", |
| 539 | + " <td>2</td>\n", |
| 540 | + " <td>20250827</td>\n", |
| 541 | + " <td>0</td>\n", |
| 542 | + " <td>6</td>\n", |
| 543 | + " <td>fc</td>\n", |
| 544 | + " <td>None</td>\n", |
| 545 | + " <td>regular_ll</td>\n", |
| 546 | + " </tr>\n", |
| 547 | + " <tr>\n", |
| 548 | + " <th>3</th>\n", |
| 549 | + " <td>ecmf</td>\n", |
| 550 | + " <td>z</td>\n", |
| 551 | + " <td>isobaricInhPa</td>\n", |
| 552 | + " <td>400</td>\n", |
| 553 | + " <td>20250827</td>\n", |
| 554 | + " <td>0</td>\n", |
| 555 | + " <td>6</td>\n", |
| 556 | + " <td>fc</td>\n", |
| 557 | + " <td>None</td>\n", |
| 558 | + " <td>regular_ll</td>\n", |
| 559 | + " </tr>\n", |
| 560 | + " <tr>\n", |
| 561 | + " <th>4</th>\n", |
| 562 | + " <td>ecmf</td>\n", |
| 563 | + " <td>q</td>\n", |
| 564 | + " <td>isobaricInhPa</td>\n", |
| 565 | + " <td>925</td>\n", |
| 566 | + " <td>20250827</td>\n", |
| 567 | + " <td>0</td>\n", |
| 568 | + " <td>6</td>\n", |
| 569 | + " <td>fc</td>\n", |
| 570 | + " <td>None</td>\n", |
| 571 | + " <td>regular_ll</td>\n", |
| 572 | + " </tr>\n", |
| 573 | + " <tr>\n", |
| 574 | + " <th>...</th>\n", |
| 575 | + " <td>...</td>\n", |
| 576 | + " <td>...</td>\n", |
| 577 | + " <td>...</td>\n", |
| 578 | + " <td>...</td>\n", |
| 579 | + " <td>...</td>\n", |
| 580 | + " <td>...</td>\n", |
| 581 | + " <td>...</td>\n", |
| 582 | + " <td>...</td>\n", |
| 583 | + " <td>...</td>\n", |
| 584 | + " <td>...</td>\n", |
| 585 | + " </tr>\n", |
| 586 | + " <tr>\n", |
| 587 | + " <th>97</th>\n", |
| 588 | + " <td>ecmf</td>\n", |
| 589 | + " <td>z</td>\n", |
| 590 | + " <td>isobaricInhPa</td>\n", |
| 591 | + " <td>600</td>\n", |
| 592 | + " <td>20250827</td>\n", |
| 593 | + " <td>0</td>\n", |
| 594 | + " <td>6</td>\n", |
| 595 | + " <td>fc</td>\n", |
| 596 | + " <td>None</td>\n", |
| 597 | + " <td>regular_ll</td>\n", |
| 598 | + " </tr>\n", |
| 599 | + " <tr>\n", |
| 600 | + " <th>98</th>\n", |
| 601 | + " <td>ecmf</td>\n", |
| 602 | + " <td>w</td>\n", |
| 603 | + " <td>isobaricInhPa</td>\n", |
| 604 | + " <td>300</td>\n", |
| 605 | + " <td>20250827</td>\n", |
| 606 | + " <td>0</td>\n", |
| 607 | + " <td>6</td>\n", |
| 608 | + " <td>fc</td>\n", |
| 609 | + " <td>None</td>\n", |
| 610 | + " <td>regular_ll</td>\n", |
| 611 | + " </tr>\n", |
| 612 | + " <tr>\n", |
| 613 | + " <th>99</th>\n", |
| 614 | + " <td>ecmf</td>\n", |
| 615 | + " <td>u</td>\n", |
| 616 | + " <td>isobaricInhPa</td>\n", |
| 617 | + " <td>925</td>\n", |
| 618 | + " <td>20250827</td>\n", |
| 619 | + " <td>0</td>\n", |
| 620 | + " <td>6</td>\n", |
| 621 | + " <td>fc</td>\n", |
| 622 | + " <td>None</td>\n", |
| 623 | + " <td>regular_ll</td>\n", |
| 624 | + " </tr>\n", |
| 625 | + " <tr>\n", |
| 626 | + " <th>100</th>\n", |
| 627 | + " <td>ecmf</td>\n", |
| 628 | + " <td>t</td>\n", |
| 629 | + " <td>isobaricInhPa</td>\n", |
| 630 | + " <td>600</td>\n", |
| 631 | + " <td>20250827</td>\n", |
| 632 | + " <td>0</td>\n", |
| 633 | + " <td>6</td>\n", |
| 634 | + " <td>fc</td>\n", |
| 635 | + " <td>None</td>\n", |
| 636 | + " <td>regular_ll</td>\n", |
| 637 | + " </tr>\n", |
| 638 | + " <tr>\n", |
| 639 | + " <th>101</th>\n", |
| 640 | + " <td>ecmf</td>\n", |
| 641 | + " <td>v</td>\n", |
| 642 | + " <td>isobaricInhPa</td>\n", |
| 643 | + " <td>925</td>\n", |
| 644 | + " <td>20250827</td>\n", |
| 645 | + " <td>0</td>\n", |
| 646 | + " <td>6</td>\n", |
| 647 | + " <td>fc</td>\n", |
| 648 | + " <td>None</td>\n", |
| 649 | + " <td>regular_ll</td>\n", |
| 650 | + " </tr>\n", |
| 651 | + " </tbody>\n", |
| 652 | + "</table>\n", |
| 653 | + "<p>102 rows × 10 columns</p>\n", |
| 654 | + "</div>" |
| 655 | + ], |
| 656 | + "text/plain": [ |
| 657 | + " centre shortName typeOfLevel level dataDate dataTime stepRange \\\n", |
| 658 | + "0 ecmf mcc mediumCloudLayer 800 20250827 0 6 \n", |
| 659 | + "1 ecmf vsw soilLayer 1 20250827 0 6 \n", |
| 660 | + "2 ecmf vsw soilLayer 2 20250827 0 6 \n", |
| 661 | + "3 ecmf z isobaricInhPa 400 20250827 0 6 \n", |
| 662 | + "4 ecmf q isobaricInhPa 925 20250827 0 6 \n", |
| 663 | + ".. ... ... ... ... ... ... ... \n", |
| 664 | + "97 ecmf z isobaricInhPa 600 20250827 0 6 \n", |
| 665 | + "98 ecmf w isobaricInhPa 300 20250827 0 6 \n", |
| 666 | + "99 ecmf u isobaricInhPa 925 20250827 0 6 \n", |
| 667 | + "100 ecmf t isobaricInhPa 600 20250827 0 6 \n", |
| 668 | + "101 ecmf v isobaricInhPa 925 20250827 0 6 \n", |
| 669 | + "\n", |
| 670 | + " dataType number gridType \n", |
| 671 | + "0 fc None regular_ll \n", |
| 672 | + "1 fc None regular_ll \n", |
| 673 | + "2 fc None regular_ll \n", |
| 674 | + "3 fc None regular_ll \n", |
| 675 | + "4 fc None regular_ll \n", |
| 676 | + ".. ... ... ... \n", |
| 677 | + "97 fc None regular_ll \n", |
| 678 | + "98 fc None regular_ll \n", |
| 679 | + "99 fc None regular_ll \n", |
| 680 | + "100 fc None regular_ll \n", |
| 681 | + "101 fc None regular_ll \n", |
| 682 | + "\n", |
| 683 | + "[102 rows x 10 columns]" |
| 684 | + ] |
| 685 | + }, |
| 686 | + "execution_count": 3, |
| 687 | + "metadata": {}, |
| 688 | + "output_type": "execute_result" |
473 | 689 | } |
474 | 690 | ], |
475 | 691 | "source": [ |
|
487 | 703 | "filename = f'{today}{timez[:-2]}0000-{step}h-{stream_}-{type_}.grib2'\n", |
488 | 704 | "\n", |
489 | 705 | "with requests.Session() as s:\n", |
490 | | - " try:\n", |
491 | | - " start = datetime.datetime.now()\n", |
492 | | - " response = requests.get(f'https://data.ecmwf.int/ecpds/home/opendata/{today}/{timez}{model}{resol}{stream_}/{filename}', stream=True)\n", |
493 | | - " if response.status_code == 200:\n", |
494 | | - " with open(filename, mode=\"wb\") as file:\n", |
495 | | - " for chunk in response.iter_content(chunk_size=10 * 1024):\n", |
496 | | - " file.write(chunk)\n", |
497 | | - " end = datetime.datetime.now()\n", |
498 | | - " diff = end - start\n", |
499 | | - " print(f'The {filename} file downloaded in {diff.seconds} seconds.')\n", |
500 | | - " except:\n", |
501 | | - " print(f'There is no file {filename} to download.')\n", |
502 | | - "ekd.download_example_file(f'{DATADIR}/{filename}')" |
| 706 | + " start = datetime.datetime.now()\n", |
| 707 | + " response = requests.get(f'https://data.ecmwf.int/ecpds/home/opendata/{today}/{timez}{model}{resol}{stream_}/{filename}', stream=True)\n", |
| 708 | + " response.raise_for_status()\n", |
| 709 | + " with open(filename, mode=\"wb\") as file:\n", |
| 710 | + " for chunk in response.iter_content(chunk_size=10 * 1024):\n", |
| 711 | + " file.write(chunk)\n", |
| 712 | + " end = datetime.datetime.now()\n", |
| 713 | + " diff = end - start\n", |
| 714 | + " print(f'The {filename} file downloaded in {diff.seconds} seconds.')\n", |
| 715 | + "\n", |
| 716 | + "data = ekd.from_source(\"file\", f'{DATADIR}/{filename}')\n", |
| 717 | + "data.ls()" |
503 | 718 | ] |
504 | 719 | }, |
505 | 720 | { |
|
0 commit comments