{ "cells": [ { "cell_type": "markdown", "id": "904406ec", "metadata": {}, "source": [ "# 清理代码\n", "\n", "我们有必要清理一下我们的代码,让整个项目更整洁。\n" ] }, { "cell_type": "markdown", "id": "23419d67", "metadata": {}, "source": [ "## 创建函数\n", "\n", "为了更好的复用代码,我们将我们关键代码变为函数。\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "82ac2aeb", "metadata": {}, "outputs": [], "source": [ "import requests\n", "import json\n", "import pandas as pd\n", "from geopy.geocoders import Nominatim" ] }, { "cell_type": "code", "execution_count": 2, "id": "5c3dd5a1", "metadata": {}, "outputs": [], "source": [ "# function to get url by inputing the city name\n", "\n", "def get_geo_from_city(city):\n", " geolocator = Nominatim(user_agent='baidu')\n", " location = geolocator.geocode(city)\n", " return location.longitude,location.latitude\n", "\n", "def generate_url(longitude,latitude):\n", " url = f'https://www.7timer.info/bin/api.pl?lon={longitude}&lat={latitude}&product=civil&output=json'\n", " return url\n", "\n", "# function get weather raw info\n", "def request_weather_info(url):\n", " r = requests.get(url)\n", " text_j= json.loads(r.text)\n", " return text_j" ] }, { "cell_type": "markdown", "id": "339c3f1c", "metadata": {}, "source": [ "## 测试函数\n", "对于创建好的函数,一定要先测试一下,否则后面bug套bug,比较累。" ] }, { "cell_type": "code", "execution_count": 3, "id": "49ea4d4e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'timepoint': 3,\n", " 'cloudcover': 9,\n", " 'lifted_index': 15,\n", " 'prec_type': 'rain',\n", " 'prec_amount': 1,\n", " 'temp2m': 4,\n", " 'rh2m': '70%',\n", " 'wind10m': {'direction': 'NE', 'speed': 3},\n", " 'weather': 'lightrainday'}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# test functions\n", "city='shanghai'\n", "lon,lat = get_geo_from_city(city)\n", "url = generate_url(lon,lat)\n", "text_j = request_weather_info(url)\n", "text_j['dataseries'][0]" ] }, { "cell_type": "markdown", "id": "d30161b8", "metadata": {}, "source": [ "## 添加更多变换\n", "\n", "我们需要对原始的代码稍作升级,这样可以保存更多的信息。\n", "\n", "1. 我们需要把wind列分成两列,风速和风向\n", "2. 同时,我们需要把更多的信息保存到DataFrame中,比如城市信息。因为我们后面会添加多个城市的信息" ] }, { "cell_type": "code", "execution_count": 4, "id": "dd4129e5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | cloudcover | \n", "lifted_index | \n", "prec_type | \n", "prec_amount | \n", "temp2m | \n", "rh2m | \n", "weather | \n", "timestamp | \n", "wind_direction | \n", "wind_speed | \n", "longitude | \n", "latitude | \n", "city | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "9 | \n", "15 | \n", "rain | \n", "1 | \n", "4 | \n", "70 | \n", "lightrainday | \n", "2022-02-02 03:00:00 | \n", "NE | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
1 | \n", "9 | \n", "15 | \n", "rain | \n", "2 | \n", "4 | \n", "70 | \n", "lightrainday | \n", "2022-02-02 06:00:00 | \n", "NE | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
2 | \n", "9 | \n", "15 | \n", "rain | \n", "2 | \n", "4 | \n", "70 | \n", "lightrainday | \n", "2022-02-02 09:00:00 | \n", "NE | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
3 | \n", "9 | \n", "15 | \n", "rain | \n", "2 | \n", "3 | \n", "87 | \n", "lightrainnight | \n", "2022-02-02 12:00:00 | \n", "NE | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
4 | \n", "9 | \n", "15 | \n", "rain | \n", "2 | \n", "3 | \n", "90 | \n", "lightrainnight | \n", "2022-02-02 15:00:00 | \n", "NE | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
59 | \n", "9 | \n", "15 | \n", "rain | \n", "4 | \n", "5 | \n", "74 | \n", "rainnight | \n", "2022-02-09 12:00:00 | \n", "N | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
60 | \n", "9 | \n", "15 | \n", "none | \n", "4 | \n", "5 | \n", "73 | \n", "cloudynight | \n", "2022-02-09 15:00:00 | \n", "N | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
61 | \n", "7 | \n", "15 | \n", "none | \n", "4 | \n", "4 | \n", "78 | \n", "mcloudynight | \n", "2022-02-09 18:00:00 | \n", "N | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
62 | \n", "2 | \n", "15 | \n", "none | \n", "4 | \n", "4 | \n", "83 | \n", "clearnight | \n", "2022-02-09 21:00:00 | \n", "N | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
63 | \n", "2 | \n", "15 | \n", "none | \n", "4 | \n", "4 | \n", "75 | \n", "clearday | \n", "2022-02-10 00:00:00 | \n", "N | \n", "3 | \n", "121.469207 | \n", "31.232276 | \n", "shanghai | \n", "
64 rows × 13 columns
\n", "