日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用数据分析选购手机

發布時間:2024/1/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用数据分析选购手机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | shenzhongqiang??

來源 |? Python與數據分析

9月13日發布的iPhone Xs算是手機界的大新聞了,新款iPhone的價格也再度刷新了手機定價的記錄??赐臧l布會,相信很多人的心情是這樣的

強哥之前用的iPhone 6,最近準備換手機。經濟形勢嚴峻,換iPhone是換不起了,只能消費降級,投奔安卓陣營。

1500元的預算,連個二手的iPhone都買不了,但是在安卓機里卻有不少選擇。本文我們就來看看怎樣用數據分析選購手機。

分析思路

思路很簡單,上京東商城把所有手機的數據爬下來,然后根據配置、價格過濾出符合條件的手機,在過濾出來的手機里選擇一部性價比最高的。畫成流程圖,大致是這樣的

爬取數據

第一步,我們先從京東商城爬取所有在售的手機數據。這里我們關心的主要是價格和配置信息,商品頁面上的價格和配置信息像下面兩張圖所示

我們編寫代碼爬取所有手機的價格和配置信息,爬蟲的核心代碼如下

# 獲取手機單品的價格 def get_price(skuid):url = "https://c0.3.cn/stock?skuId=" + str(skuid) + "&area=1_72_4137_0&venderId=1000004123&cat=9987,653,655&buyNum=1&choseSuitSkuIds=&extraParam={%22originid%22:%221%22}&ch=1&fqsp=0&pduid=15379228074621272760279&pdpin=&detailedAdd=null&callback=jQuery3285040"r = requests.get(url, verify=False)content = r.content.decode('GBK')matched = re.search(r'jQuery\d+\((.*)\)', content, re.M)if matched:data = json.loads(matched.group(1))price = float(data["stock"]["jdPrice"]["p"])return pricereturn 0# 獲取手機的配置信息 def get_item(skuid, url):price = get_price(skuid)r = requests.get(url, verify=False)content = r.contentroot = etree.HTML(content)nodes = root.xpath('.//div[@class="Ptable"]/div[@class="Ptable-item"]')params = {"price": price, "skuid": skuid}for node in nodes:text_nodes = node.xpath('./dl')[0]k = ""v = ""for text_node in text_nodes:if text_node.tag == "dt":k = text_node.textelif text_node.tag == "dd" and "class" not in text_node.attrib:v = text_node.textparams[k] = vreturn params# 獲取一個頁面中的所有手機信息 def get_cellphone(page):url = "https://list.jd.com/list.html?cat=9987,653,655&page={}&sort=sort_rank_asc&trans=1&JL=6_0_0&ms=4#J_main".format(page)r = requests.get(url, verify=False)content = r.content.decode("utf-8")root = etree.HTML(content)cell_nodes = root.xpath('.//div[@class="p-img"]/a')client = pymongo.MongoClient()db = client[DB]for node in cell_nodes:item_url = fix_url(node.attrib["href"])matched = re.search('item.jd.com/(\d+)\.html', item_url)skuid = int(matched.group(1))saved = db.items.find({"skuid": skuid}).count()if saved > 0:print(saved)continueitem = get_item(skuid, item_url)# 結果存入MongoDBdb.items.insert(item)

需要注意的是,上面的get_price和get_item函數分別從兩個url獲取數據,這是因為配置信息可以直接從商品頁面中解析得到,而價格信息需要從另外一個ajax請求里獲得。爬下來的所有數據存入MongoDB。

過濾數據

爬下來的手機數據當中,信息完整的共有4700多條數據,這4700多部手機屬于70個手機品牌。 這些品牌畫成詞云圖是這樣的

手機的配置主要有以下這些參數

  • 是否雙卡雙待

  • 機身材質

  • CPU型號

  • 內存大小

  • 存儲容量

  • 電池容量

  • 屏幕材質

  • 屏幕大小

  • 分辨率

  • 攝像頭

強哥平時用手機主要是看看書、刷刷知乎微信、買買東西,所以選購新手機的時候最關心的就是速度、容量、待機時間這幾項,對攝像頭、屏幕材質倒不是特別在乎??紤]以上因素,在對數據做過濾的時候,我設定了以下幾個條件

  • CPU的品牌是高通

  • 內存大小大于等于6GB

  • 存儲容量大于等于64GB

  • 電池容量大于3000mAh

  • 必須是雙卡雙待

  • 價格在1500元以內

過濾數據的代碼如下

client = pymongo.MongoClient() db = client[DB] items = db.items.find({}) result = preprocess(items) df = pd.DataFrame(result) df_res = df[df.cpu_brand=="驍龍(Snapdragon)"][df.battery_cap >= 3000][df.rom >= 64][df.ram >= 6][df.dual_sim == True][df.price<=1500] print(df_res[["brand", "model", "color", "cpu_brand", "cpu_freq", "cpu_core", "cpu_model", "rom", "ram", "battery_cap", "price"]].sort_values(by="price"))

首先從MongoDB里讀取數據,然后創建DataFrame,對DataFrame里的數據按照上面的條件作選擇。代碼的最后一行將篩選出來的手機打印出來,并按價格從低到高排序。

經過了這樣一輪篩選后,我們得到了下面的38款手機

上面的幾部手機配置都比較接近,但是網上對小米的評價普遍比較高,于是又在上面的列表里篩選出了所有的小米手機,得到下面7款

這里就變成了紅米Note5和小米6X的PK了。價格上,兩者不差上下。配置方面,網上查到紅米Note5的cpu是驍龍636的(上面的表格里缺少紅米Note5的cpu型號),相比小米6X的驍龍660,636雖然性能上不如660,但更省電,而且考慮到紅米Note5 4000毫安的超大容量電池,最后決定了購買紅米Note 5這一款。作為一款千元機,驍龍636八核CPU、6G大內存、64G大存儲、5.99英寸大視野全面屏、前置相機+后置雙攝、超長的待機時間,這款手機大概算是千元機中的機皇了。

所有代碼已上傳github,公眾號后臺回復“手機”可獲取地址。

◆?◆?◆ ?◆?◆

數據森麟 長按二維碼關注我們

猜你喜歡

●?

●?

●?


數據森麟公眾號的交流群已經建立,許多小伙伴已經加入其中,感謝大家的支持。大家可以在群里交流關于數據分析&數據挖掘的相關內容,還沒有加入的小伙伴可以通過掃描下方管理員二維碼,讓管理員幫忙拉進群,期待大家的加入。

管理員二維碼:

總結

以上是生活随笔為你收集整理的用数据分析选购手机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。