中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python顯示點過的外賣

發布時間:2021-11-20 15:28:43 來源:億速云 閱讀:188 作者:iii 欄目:編程語言

本篇內容主要講解“怎么用Python顯示點過的外賣”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用Python顯示點過的外賣”吧!

通過手機&驗證碼登錄自己的餓了么賬號,成功之后會返回當前用戶的user_id 和 登錄Cookie。這兩個信息為后續的請求提供必要的信息。

一開始訪問訂單,是這樣的請求

h6.ele.me/restapi/bos/v2/users/26803312/orders?limit=8&offset=0

h6.ele.me/restapi/bos/v2/users/26803312/orders?limit=8&offset=8

h6.ele.me/restapi/bos/v2/users/26803312/orders?limit=8&offset=16

當繼續下拉,出現"查看三個月前的外賣訂單"按鈕時,請求是這樣的

h6.ele.me/restapi/bos/v2/users/26803312/old_orders?limit=8&from_time=

h6.ele.me/restapi/bos/v2/users/26803312/old_orders?limit=8&from_time=1557718107

from_time的值在上次請求的響應中可以看到:

怎么用Python顯示點過的外賣

獲取訂單部分代碼如下所示:

"""
 獲取近3個月訂單
"""
def get_new_order():
 num = 0
 while 1:
 # 偏移量
 offset = num * limit
 response = requests.get(url + f'?limit={limit}&offset={offset}', headers=headers, verify=False)
 resp_json = response.json()
 insert_mongo(resp_json)
 # 當響應訂單數小于8時 跳出循環
 if len(resp_json) < 8:
 print('====================')
 break
 num += 1
"""
歷史訂單
"""
def history_order():
 from_time = ''
 while 1:
 response = requests.get(old_url + f'?limit={limit}&from_time={from_time}', headers=headers, verify=False)
 resp_json = response.json()
 from_time = resp_json['from_time']
 orders = resp_json['orders']
 # 經過測試,最后一個訂單時,會在請求一次 響應為空
 if not orders:
 break
 insert_mongo(orders)

運行之后發現,這一年多的時間,光外賣竟然花費了1W多一點。爬取的數據可以選擇將數據保存在csv文件中,也可以選擇Mongod。這里我是插入到了MongoDB中。

def insert_mongo(resp_json):
 if not resp_json:
 return 
 for i in resp_json:
 # 菜品
 foods_group = i['basket']['group'][0]
 for j in foods_group:
 j['name'] = clean_data(j['name'])
 with open('foods_name_banxia.txt', 'a+') as f:
 f.write(j['name'] + '\n') # 將菜品寫入文件,方便處理 # 配送費
 deliver_price = 0
 if 'deliver_fee' in i['basket'].keys():
 deliver_price = i['basket']['deliver_fee']['price']
 # 計算總花費
 global total
 total += i['total_amount']
 # 餐館名
 restaurant_name = clean_data(i['restaurant_name'])
 with open('restaurant_name_banxia.txt', 'a+') as f:
 f.write(restaurant_name + '\n') # 記錄餐館名
 clo.insert_one({
 # 餐館名
 'restaurant_name': restaurant_name,
 # 訂單時間 formatted_created_at也可以取,但是近期的會顯示xx小時之前
 'created_timestamp': time_convert(i['created_timestamp']),
 # 價格
 'total_amount': i['total_amount'],
 'foods_group': foods_group,
 'deliver_price': deliver_price
 })

在查看數據過程中,發現有的菜品和店鋪名后面都有括號、或者方括號等特殊字符,里面的信息對我們來說也沒有什么價值。可以簡單的進行處理一下。

import re
def clean_data(data):
 a = re.sub("\\(.*?\\)|\\(.*?\\)|\\[.*?\\]|\\【.*?\\】|[A-Za-z0-9\@\\!\/]", "", data)
 a = a.replace('盒', '').replace('克', '').replace('個', '')\
 .replace('大份', '').replace('小份', '').replace('瓶', '').replace('組', '').replace(' ','')
 return a

這樣,我們就將訂單中的信息存在了數據庫中。為了方便統計我將每個訂單的菜品、以及餐館名保存在了txt文件中。

可以通過wordcloud將餐品進行一個簡單的可視化。

from random import randint
from matplotlib import pyplot as plt
from wordcloud import WordCloud
def random_color(word=None, font_size=None, position=None, orientation=None, font_path=None, random_state=None):
 """Random Color func"""
 r = randint(30, 255)
 g = randint(30, 180)
 b = int(100.0 * float(randint(60, 120)) / 255.0)
 return "rgb({:.0f}, {:.0f}, {:.0f})".format(r, g, b)
content = open('foods_name.txt', encoding='utf-8').read()
wordcloud = WordCloud(background_color="white",
 width=1000,
 height=600,
 max_font_size=50,
 font_path='/System/Library/Fonts/PingFang.ttc', # 需要根據實際操作系統更換路徑
 color_func=random_color).generate(content)
plt.imshow(wordcloud)
plt.axis("off")
plt.savefig('ele_wordcloud.png', format='png', dpi=200)

結果如下,有沒有口味一樣的同學呢?

怎么用Python顯示點過的外賣

同樣我們可以在終端通過sort命令去常光顧的餐館進行統計。

  • sort -n 按照數值大小排序 升序

  • sort -r 降序排列

  • uniq -c 去重和統計

  • head -5 展示前5條

cat mao_out.txt | sort | uniq -c | sort -rg | head -5

結果如下 去的最多的是貢貢米線和張亮麻辣燙,統計范圍內均光顧了14次。

Python3XXXAir:$ cat restaurant_name.txt |sort|uniq -c| sort -rg| head -5
 14 貢貢米線
 14 張亮麻辣燙
 13 京客隆
 11 沁香緣家常菜
 11 小巷麻辣香鍋

可以通過matplotlib去統計一下每次定外賣的價格,并展示出來。

import pymongo
import matplotlib.pyplot as plt
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['ele']
clo = db['info_banxia']
result = clo.find({})
y = [i['total_amount'] for i in result]
x = [i for i in range(len(y))]
plt.ylabel("The unit price")
plt.xlabel("Times")
plt.plot(x, y)
plt.show()

結果圖:

怎么用Python顯示點過的外賣

可以看出,大部分價格在20 ~ 40 之間, 因為有時候為了滿減,大部分都是跟同事朋友一起拼單。偶爾超過這個范圍是買的水果、藥等一些商品。

從這些數據中,我們同樣得出,哪個月定外賣次數最為頻繁。

# 該月定外賣次數
count = []
for i in data:
 ele_count = clo.count({'created_timestamp': re.compile(i)})
 count.append(ele_count)
plt.scatter(data, count)
plt.xticks(rotation=45)
plt.show()

怎么用Python顯示點過的外賣

可以看出 18年3月定了22次外賣是最多的一次。11月份的時候定外賣次數最少。

到此,相信大家對“怎么用Python顯示點過的外賣”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

封丘县| 平凉市| 夏河县| 新巴尔虎左旗| 南皮县| 陆良县| 长垣县| 金坛市| 阿图什市| 鱼台县| 石门县| 瓮安县| 吉木乃县| 柘荣县| 渝中区| 忻城县| 颍上县| 浪卡子县| 浑源县| 宁阳县| 嵩明县| 西安市| 唐海县| 廊坊市| 调兵山市| 锡林郭勒盟| 襄城县| 天镇县| 重庆市| 安徽省| 静海县| 延安市| 新河县| 平远县| 准格尔旗| 黄平县| 兰西县| 陵水| 仁化县| 昌吉市| 福建省|