roberthsu2003 / __2024_04_17_mon_wed__

Python與AI人工智慧開發入門
24 stars 5 forks source link

台北市youbike api,請下載資料,將資料轉成DataFrame #24

Open roberthsu2003 opened 3 months ago

roberthsu2003 commented 3 months ago
youbike_url = 'https://tcgbusfs.blob.core.windows.net/dotapp/youbike/v2/youbike_immediate.json'
截圖 2024-06-12 晚上9 54 30
chesterXalan commented 3 months ago
import requests
youbike_url = 'https://tcgbusfs.blob.core.windows.net/dotapp/youbike/v2/youbike_immediate.json'

res = requests.get(youbike_url)
if res.status_code == 200:
    print('下載成功')
else:
    print('下載失敗')

from pydantic import BaseModel, Field, RootModel, field_validator

class Site(BaseModel):
    站名: str = Field(alias='sna')
    區域: str = Field(alias='sarea')
    時間: str = Field(alias='mday')
    地點: str = Field(alias='ar')
    總車輛數: int = Field(alias='total')
    可借數量: int = Field(alias='available_rent_bikes')
    可還數量: int = Field(alias='available_return_bikes')
    經度: float = Field(alias='longitude')
    緯度: float = Field(alias='latitude')
    狀態: bool = Field(alias='act')

    @field_validator('站名')
    @classmethod
    def get_name(cls, value: str) -> str:
        return value.split('_')[-1]

class YouBike(RootModel):
    root: list[Site]
    def __iter__(self):
        return iter(self.root)

    def __getitem__(self, item):
        return self.root[item]

data: YouBike = YouBike.model_validate_json(res.text)
all_sites: list[dict] = data.model_dump()

import pandas as pd

df1 = pd.DataFrame(all_sites)
df1

image

Tony840705 commented 3 months ago
import requests
youbike_url = 'https://tcgbusfs.blob.core.windows.net/dotapp/youbike/v2/youbike_immediate.json'

res = requests.get(youbike_url)
if res.status_code == 200:
    print('下載成功')
else:
    print('下載失敗')

from pydantic import BaseModel, Field, RootModel, field_validator

class Site(BaseModel):
    站名: str = Field(alias='sna')
    區域: str = Field(alias='sarea')
    時間: str = Field(alias='mday')
    地點: str = Field(alias='ar')
    狀態: bool = Field(alias='act')
    總共數量: int = Field(alias='total')
    可借數量: int = Field(alias='available_rent_bikes')
    可還數量: int = Field(alias='available_return_bikes')
    經度: float = Field(alias='longitude')
    緯度: float = Field(alias='latitude')

    @field_validator('站名')
    @classmethod
    def get_name(cls, value: str) -> str:
        return value.split('_')[-1]

class YouBike(RootModel):
    root: list[Site]
    def __iter__(self):
        return iter(self.root)

    def __getitem__(self, item):
        return self.root[item]

data: YouBike = YouBike.model_validate_json(res.text)
all_sites: list[dict] = data.model_dump()

import pandas as pd
df1 = pd.DataFrame(all_sites)
df1

擷取

chiayuben commented 3 months ago
from pydantic import BaseModel, Field, field_validator,RootModel

class Bike(BaseModel):

    station: str = Field(alias='sna')
    station_area:str=Field(alias='sarea')
    time:str=Field(alias='mday')
    address:str=Field(alias='ar')
    status:bool=Field(alias='act')
    total:int
    borrow:int=Field(alias='available_rent_bikes')
    latitude:float
    longitude:float
    return_bikes:int=Field(alias='available_return_bikes')

    @field_validator('station')
    @classmethod
    def get_name(cls, value: str) -> str:
        return value.split('_')[-1]

class YouBike(RootModel):
    root: list[Bike]
    def __iter__(self):
        return iter(self.root)

    def __getitem__(self, item):
        return self.root[item]

data: YouBike = YouBike.model_validate_json(res.text)
all_sites: list[dict] = data.model_dump()

import pandas as pd

df1 = pd.DataFrame(all_sites)
df1

image

chihweihan commented 3 months ago
import requests
from requests import Response

youbike_url = 'https://tcgbusfs.blob.core.windows.net/dotapp/youbike/v2/youbike_immediate.json'

res:Response = requests.get(youbike_url)
if res.status_code == 200:
    print("下載成功")
else:
    print("下載失敗")

from pydantic import BaseModel, Field, RootModel, field_validator

class Site(BaseModel):
    站名:str = Field(alias = 'sna')
    所在區:str = Field(alias='sarea')
    位置:str = Field(alias='ar')
    日期:str = Field(alias='mday')
    狀態:bool = Field(alias = "act")
    總車輛數:int = Field(alias='total')
    可借:int = Field(alias='available_rent_bikes')
    可還:int = Field(alias='available_return_bikes')
    經度:float = Field(alias='longitude')
    緯度:float = Field(alias='latitude')

    @field_validator("站名")
    @classmethod
    def abc(cls,value:str)->str:
        return value.split("_")[-1]

class YouBike(RootModel):
    root: list[Site]

data:YouBike = YouBike.model_validate_json(res.text)

all_sites:list = data.model_dump()

import pandas as pd
df1 = pd.DataFrame(all_sites)
df1

image

PercJK commented 3 months ago
import requests
from requests import Response
youbike_url = 'https://tcgbusfs.blob.core.windows.net/dotapp/youbike/v2/youbike_immediate.json'

res:Response = requests.get(youbike_url)

if res.status_code == 200:
    print("下載成功")
else:
    print("下載失敗")

from pydantic import BaseModel,Field,field_validator,RootModel
class Site (BaseModel):
    站名:str = Field(alias='sna') 
    行政區域:str = Field(alias='sarea')
    時間:str = Field(alias='mday')
    位置:str = Field(alias='ar')
    狀態:bool = Field(alias='act')
    總數量:int = Field(alias='total')
    可借:int = Field(alias='available_rent_bikes')
    緯度:float = Field(alias='latitude')
    經度:float = Field(alias='longitude')     
    可還:int = Field(alias='available_return_bikes')

    @field_validator('站名',mode='before')
    @classmethod
    def get_name(cls,value:str) ->str:
         return value.split('_')[-1]   

class Youbick(RootModel):
    root:list[Site]

data = Youbick.model_validate_json(res.text)
all_sites = data.model_dump()

import pandas as pd
df = pd.DataFrame(all_sites)
df

lesson16