【Python数据可视化分析实战】数据爬取—京东手机品牌信息数据爬取和数据分析与可视化

大数据分析设计方案

1.数据集来源:https://search.jd.com

2.实现思路:

(1)数据爬取

首先,我们需要从京东平台上采集手机品牌的相关数据。可以通过网络爬虫或API接口等方式获取数据。为了保证数据的完整性和准确性,需要设置合理的爬虫策略,并处理可能出现的反爬机制。

(2)数据清洗与整合

采集到的原始数据可能存在格式不统一、缺失值、异常值等问题,需要进行数据清洗和整合。清洗过程中需要处理缺失值、异常值,并对数据进行标准化处理。此外,还需要将不同来源的数据进行整合,形成一个统一的数据集。

(3)数据分析

在数据清洗和整合的基础上,我们进行深入的数据分析。首先,可以通过描述性统计方法对手机品牌的基本情况进行统计分析,如品牌数量、市场份额等。其次,利用关联规则挖掘、聚类分析等数据挖掘方法对品牌之间的关联和分类进行分析。此外,还可以结合时间序列分析方法,对市场趋势进行预测。为了更加直观地展示数据分析结果,我们可以借助数据可视化技术将结果进行可视化展示。可以使用Python中的Matplotlib、Seaborn等可视化库进行图表绘制,如饼图、柱状图、散点图等。同时,可以利用数据可视化工具进行交互式的数据展示,提高可视化效果的可读性和易用性。

3.技术难点:

(1)数据获取

在数据获取阶段,需要从京东平台爬取手机品牌的相关数据。由于京东的反爬机制较为严格,可能会遇到诸如IP被封、需要登录等挑战。此外,如何有效地从网页中提取所需的数据也是一大难点。

(2)数据清洗与整合

原始数据可能存在缺失值、异常值等问题,需要进行数据清洗和整合。对于缺失值,需要根据业务实际情况进行处理,如填充缺失值、删除含有缺失值的记录等。对于异常值,需要结合业务逻辑和数据分布情况进行分析和处理。此外,如何将不同来源的数据进行有效整合也是一大难点。

(3)数据分析与可视化

在数据分析阶段,需要利用合适的分析方法对数据进行深入挖掘。这需要具备一定的数据挖掘和统计学知识,选择合适的方法对数据进行处理和分析。在可视化阶段,如何将数据分析结果以直观、易懂的方式展示出来是一大难点。此外,如何选择合适的可视化工具和图表类型也是需要考虑的问题。

三、数据分析步骤

(1)数据api接口获取

获取京东手机品牌信息数据api接口并保存为“京东手机.csv”文件

def save\_data(data\_list):  global lock  lock.acquire()  try:  with open("京东手机.csv", "a+", encoding='utf-8-sig', newline='') as csvfile:  writer = csv.writer(csvfile)  # 以读的方式打开csv 用csv.reader方式判断是否存在标题。  with open("京东手机.csv", "r", encoding='utf8', newline='') as f:  reader = csv.reader(f)  if not \[row for row in reader\]:  # 先写入每一列的标题  writer.writerow(  \["商品编号", "商品标题", "价格", "品牌", "商品名称", "商品毛重",  "商品产地", "CPU型号", "运行内存", "机身颜色", "三防标准", "屏幕分辨率", "充电功率",  "机身色系", "屏幕材质", "后摄主像素", '机身内存',"风格", "店铺名称",'商品图片',  "详情链接"\])  # 再写入每一列的内容  writer.writerows(\[data\_list\])  csvfile.flush()  else:  writer.writerows(\[data\_list\])  csvfile.flush()  finally:  lock.release()  def get\_index(url):  print(f'抓取  {url}')  response = requests.get(url,headers).text  # 调用请求数据方法  soup = BeautifulSoup(response, 'lxml')  # 实例化BeautifulSoup对象  J\_goodsList = soup.find('div', id='J\_goodsList').find\_all('li')  # 匹配商品信息  for j\_good in J\_goodsList:  # 循环遍历  try:  sku\_id = j\_good\['data-sku'\] + '\\t'  # 商品编号  ad\_title = j\_good.find('div', class\_='p-name').find('em').text.replace('<font class="skcolor\_ljg">',  '').replace('</font>', '').replace(  '\\n', '')  # 商品标题  pc\_price = j\_good.find('div', class\_='p-price').find('i').text  # 商品价格  shop\_name = j\_good.find('div', class\_='p-shop').find('a')\['title'\]  # 商家名称  p\_img = 'https:' + j\_good.find('div', class\_='p-img').find('img')\['data-lazy-img'\]  # 商品图片  link\_url = 'https:' + j\_good.find('a')\['href'\]  # 商品链接  print(sku\_id, ad\_title, pc\_price, shop\_name, link\_url)  pinpai, shangpinmincheng, shangpinmaozhong,shangpinchandi, CPUxinghao, yunxingneicun,jishenyanse, sanfangbiaozhun, pingmufenbianlv, chongdiangoglv, jishensexi, pingmucaizhi, houshezhuxiangsu, jisheneicun, fenge = get\_detail\_info(link\_url)  data\_list = \[sku\_id, ad\_title, pc\_price,pinpai, shangpinmincheng, shangpinmaozhong,shangpinchandi, CPUxinghao, yunxingneicun,jishenyanse, sanfangbiaozhun, pingmufenbianlv, chongdiangoglv, jishensexi, pingmucaizhi, houshezhuxiangsu, jisheneicun, fenge, shop\_name,p\_img, link\_url\]  #print(data\_list)  save\_data(data\_list)  time.sleep(random.random() + 5)  except:  continue

结果:

(2)数据清洗与整合

1、导入数据集

1 import pandas as pd
2 import os
3 
4 # 读取csv文件
5 file\_path = r"京东手机.csv"
6 df = pd.read\_csv(file\_path)

2、删除重复行

1 pd.drop_duplicates(df.duplicated())

3、将编号改为字符类型

1 df[“商品编号”] = df[“商品编号”].astype(“str”)

4、填充缺失值

1 df[“机身内存”].fillna(“未知”, inplace = True)

5、将清洗后的数据整合并保存至“京东手机_清洗后.csv”文件

(3)数据可视化分析

**1、折线图 - 京东售卖手机屏幕材质分布**
 1 # 1、折线图 - 京东售卖手机屏幕材质分布2         df = data\['屏幕材质'\].value\_counts()3         x = df.index 4         y = df.values 5         # 设置画布的尺寸6         plt.figure(figsize=(12, 10))7         # 创建折线图8         plt.plot(x, y)9         # 添加标题
10         plt.title('京东售卖手机屏幕材质分布')
11         # 设置横坐标字体倾斜
12         plt.xticks(rotation=-80)
13         # 图上显示数字
14         for i in range(len(x)):
15             plt.text(x\[i\], y\[i\], y\[i\], ha='center', va='bottom')
16         plt.ylabel('数量')
17         plt.show()

结果:

由此折线图可以看出,大多数手机都采取直屏的材质分布。

  **2、条形图 - 出售手机排名前十的店铺分布**  
 1   # 2、条形图 - 出售手机排名前十的店铺分布2         df = data\['店铺名称'\].value\_counts().sort\_values(ascending=False)\[:10\]3         x = df.index 4         y = df.values 5         plt.figure(figsize=(12, 10))  # 设置画布的尺寸6         # 创建条形图7         plt.bar(x, y)8         # 添加标题9         plt.title('出售手机排名前十的店铺')
10         # 设置横坐标字体倾斜
11         plt.xticks(rotation=-80)
12         # 图上显示数字
13         for i in range(len(x)):
14             plt.text(x\[i\], y\[i\], y\[i\], ha='center', va='bottom')
15         plt.ylabel('数量')
16         plt.show()

结果:

由此条形图可以通过对销量较好的店铺作为参考,发现哪些商品最受消费者欢迎,从而为手机品牌和商家提供有价值的参考信息,帮助他们更好地制定产品策略。

**3、饼图 - 手机机身内存占比  
**
1 # 3、饼图 - 手机机身内存占比
2         memory = data\['机身内存'\].value\_counts()
3         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
4         plt.pie(memory.values.tolist(), labels=memory.index.tolist(), autopct='%1.1f%%', shadow=True, startangle=140)
5         # 添加标题
6         plt.title('手机机身内存占比')
7         plt.show()

结果:

**4、箱线图 - CPU型号箱线图**
1 # 4、箱线图 - CPU型号箱线图
2         memory = data\['CPU型号'\].value\_counts()
3         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
4 plt.boxplot(memory.values.tolist())
5         # 添加标题
6         plt.title('CPU型号箱线图')
7         plt.ylabel('数量')
8         plt.show()

结果:

**5、饼图 - 手机屏幕分辨率占比  
**
1 # 5、饼图 - 手机屏幕分辨率占比
2         memory = data\['屏幕分辨率'\].value\_counts()
3         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
4         plt.pie(memory.values.tolist(), labels=memory.index.tolist(), autopct='%1.1f%%', shadow=True, startangle=140)
5         # 添加标题
6         plt.title('手机屏幕分辨率占比')
7         plt.show()

结果:

  **6、散点图-充电功率散点**
1  # 6、散点图-充电功率散点
2         df = data\['充电功率'\].value\_counts()
3         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
4         plt.scatter(df.index, df.values, s=10)
5         plt.title('充电功率散点')
6         plt.ylabel('数量')
7         plt.show()

结果:

  **7、饼图 - 手机价格占比**  
 1 # 7、饼图 - 手机价格占比2         money\_list = data\['价格'\]3         current\_list = \[\] 4         for money in money\_list: 5             money = int(money) 6             if money < 1000:7                 current\_list.append('1000元以下')8             elif money >= 1000 and money < 2000:9                 current\_list.append('1000-2000元')
10             elif money >= 2000 and money < 3000:
11                 current\_list.append('2000-3000元')
12             elif money >= 3000 and money < 4500:
13                 current\_list.append('3000-4500元')
14             elif money >= 4500 and money < 6000:
15                 current\_list.append('4500-6000元')
16             elif money >= 6000 and money < 7500:
17                 current\_list.append('6000-7500元')
18             elif money >= 7500 and money < 9000:
19                 current\_list.append('7500-9000元')
20             else:
21                 current\_list.append('10000元以上')
22 
23         money\_list = pd.DataFrame(current\_list, columns=\['价格'\])
24         money\_list = money\_list\['价格'\].value\_counts()
25         l1 = money\_list.index.tolist()
26         l2 = money\_list.values.tolist()
27         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
28         plt.pie(l2, labels=l1, autopct='%1.1f%%', shadow=True, startangle=140)
29         # 添加标题
30         plt.title('手机价格占比')
31         plt.show()

结果:

**8、条形图 - 排名前十的品牌分布**
 1 df = data\['品牌'\].value\_counts().sort\_values(ascending=False)\[:10\]2         x = df.index 3         y = df.values 4         plt.figure(figsize=(12, 10))  # 设置画布的尺寸5         # 创建条形图6         plt.bar(x, y)7         # 添加标题8         plt.title('排名前十的品牌分布')9         # 设置横坐标字体倾斜
10         plt.xticks(rotation=-80)
11         # 图上显示数字
12         for i in range(len(x)):
13             plt.text(x\[i\], y\[i\], y\[i\], ha='center', va='bottom')
14         plt.ylabel('数量')
15         plt.show()

结果:

  **9、折线图 - 三防标准分布**  
 1 # 9、折线图 - 三防标准分布2         df = data\['三防标准'\].value\_counts()3         x = df.index 4         y = df.values 5         # 设置画布的尺寸6         plt.figure(figsize=(12, 10))7         # 创建折线图8         plt.plot(x, y)9         # 添加标题
10         plt.title('三防标准分布')
11         # 设置横坐标字体倾斜
12         plt.xticks(rotation=-80)
13         # 图上显示数字
14         for i in range(len(x)):
15             plt.text(x\[i\], y\[i\], y\[i\], ha='center', va='bottom')
16         plt.ylabel('数量')
17         plt.show()

结果:

  **10、词云-手机风格词云**
 1 #10、词云-手机风格词云2         words\_= \[\]   #创建列表,用来装风格列数据3         for word in data\['风格'\].values.tolist():4             for w in str(word).split(','):5                 if w!='nan':6                     if '未上市' not in w: 7                         words\_.append(w)8 9         df = pd.DataFrame(words\_).value\_counts()   #统计
10         # 创建词频字典
11         word\_list = \[\]
12         for x in df.index.tolist():
13 word\_list.append(x\[0\])
14         word\_freq = dict(zip(word\_list,df.values.tolist()))
15         wordcloud = WordCloud(font\_path="simfang.ttf",background\_color='white', height=400, width=800,  scale=20, prefer\_horizontal=0.9999).generate\_from\_frequencies(word\_freq)
16         plt.imshow(wordcloud, interpolation="bilinear")
17         plt.title('京东售卖手机风格词云图')
18         plt.axis("off")
19         plt.show()

结果:

(4)完整代码

  1 #获取商品手机api2 import csv  3 import random  4 import threading  5 import time  6 import requests  7 from bs4 import BeautifulSoup  8 from concurrent.futures import ThreadPoolExecutor  9 10 #需要添加cookie11 headers = { 12     'Origin': 'https://search.jd.com',13     'Referer': 'https://search.jd.com/',14     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36',15     'X-Referer-Page': 'https://search.jd.com/Search',16     'Cookie':''17 }18 19 lock = threading.Lock() 20 def save\_data(data\_list): 21     global lock 22     lock.acquire()23     try:24         with open("京东手机.csv", "a+", encoding='utf-8-sig', newline='') as csvfile:25             writer = csv.writer(csvfile) 26             # 以读的方式打开csv 用csv.reader方式判断是否存在标题。27             with open("京东手机.csv", "r", encoding='utf8', newline='') as f:28                 reader = csv.reader(f) 29                 if not \[row for row in reader\]: 30                     # 先写入每一列的标题31                     writer.writerow(32                         \["商品编号", "商品标题", "价格", "品牌", "商品名称", "商品毛重",33                          "商品产地", "CPU型号", "运行内存", "机身颜色", "三防标准", "屏幕分辨率", "充电功率",34                          "机身色系", "屏幕材质", "后摄主像素", '机身内存',"风格", "店铺名称",'商品图片',35                          "详情链接"\])36                     # 再写入每一列的内容37                     writer.writerows(\[data\_list\])38                     csvfile.flush()39                 else:40                     writer.writerows(\[data\_list\])41                     csvfile.flush()42     finally:43         lock.release()44 45 def get\_index(url): 46     print(f'抓取  {url}')47     response = requests.get(url,headers).text  # 调用请求数据方法48     soup = BeautifulSoup(response, 'lxml')  # 实例化BeautifulSoup对象49     J\_goodsList = soup.find('div', id='J\_goodsList').find\_all('li')  # 匹配商品信息50     for j\_good in J\_goodsList:  # 循环遍历51         try:52             sku\_id = j\_good\['data-sku'\] + '\\t'  # 商品编号53             ad\_title = j\_good.find('div', class\_='p-name').find('em').text.replace('<font class="skcolor\_ljg">',54                                                                                  '').replace('</font>', '').replace(55                 '\\n', '')  # 商品标题56             pc\_price = j\_good.find('div', class\_='p-price').find('i').text  # 商品价格57             shop\_name = j\_good.find('div', class\_='p-shop').find('a')\['title'\]  # 商家名称58             p\_img = 'https:' + j\_good.find('div', class\_='p-img').find('img')\['data-lazy-img'\]  # 商品图片59             link\_url = 'https:' + j\_good.find('a')\['href'\]  # 商品链接60 61             print(sku\_id, ad\_title, pc\_price, shop\_name, link\_url)62             pinpai, shangpinmincheng, shangpinmaozhong,shangpinchandi, CPUxinghao, yunxingneicun,jishenyanse, sanfangbiaozhun, pingmufenbianlv, chongdiangoglv, jishensexi, pingmucaizhi, houshezhuxiangsu, jisheneicun, fenge = get\_detail\_info(link\_url) 63             data\_list = \[sku\_id, ad\_title, pc\_price,pinpai, shangpinmincheng, shangpinmaozhong,shangpinchandi, CPUxinghao, yunxingneicun,jishenyanse, sanfangbiaozhun, pingmufenbianlv, chongdiangoglv, jishensexi, pingmucaizhi, houshezhuxiangsu, jisheneicun, fenge, shop\_name,p\_img, link\_url\] 64             #print(data\_list)65             save\_data(data\_list)66             time.sleep(random.random() + 5)67         except:68             continue69 70 def get\_detail\_info(url): 71     detail\_html = requests.get(url, headers=headers).text  # 通过链接向服务器发送请求72     soup = BeautifulSoup(detail\_html, 'lxml')  # 实例化BeautifulSoup对象73     p\_parameter = soup.find('div', class\_='p-parameter').find\_all(74         'li')  # 查找标签为div,class为p-parameter的节点,并查找该节点下所有标签为li的节点75     pinpai, shangpinmincheng, shangpinmaozhong,shangpinchandi, CPUxinghao, yunxingneicun,jishenyanse, sanfangbiaozhun, pingmufenbianlv, chongdiangoglv, jishensexi, pingmucaizhi, houshezhuxiangsu, jisheneicun, fenge = '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''76     for parameter in p\_parameter:  # 循环遍历获取节点信息77         item = parameter.text.split(':')  # 获取文本内容78         #print(item)79         if '品牌' == item\[0\]: 80             pinpai = str(item\[1\]).replace('\\n', '')81         elif '商品名称' == item\[0\]: 82             shangpinmincheng = item\[1\]83         elif '商品毛重' == item\[0\]: 84             shangpinmaozhong = item\[1\]85         elif '商品产地' == item\[0\]: 86             shangpinchandi = item\[1\]87         elif 'CPU型号' == item\[0\]: 88             CPUxinghao = item\[1\]89         elif '运行内存' == item\[0\]: 90             yunxingneicun = item\[1\]91         elif '机身颜色' == item\[0\]: 92             jishenyanse = item\[1\]93         elif '三防标准' == item\[0\]: 94             sanfangbiaozhun = item\[1\]95         elif '屏幕分辨率' == item\[0\]: 96             pingmufenbianlv = item\[1\]97         elif '充电功率' == item\[0\]: 98             chongdiangoglv = item\[1\]99         elif '机身色系' == item\[0\]:
100             jishensexi = item\[1\]
101         elif '屏幕材质' == item\[0\]:
102             pingmucaizhi = item\[1\]
103         elif '后摄主像素' == item\[0\]:
104             houshezhuxiangsu = item\[1\]
105         elif '机身内存' == item\[0\] :
106             jisheneicun = item\[1\]
107         elif '风格' == item\[0\]:
108             fenge = item\[1\]
109 
110     return pinpai, shangpinmincheng, shangpinmaozhong,shangpinchandi, CPUxinghao, yunxingneicun,jishenyanse, sanfangbiaozhun, pingmufenbianlv, chongdiangoglv, jishensexi, pingmucaizhi, houshezhuxiangsu, jisheneicun, fenge
111 
112 
113 if \_\_name\_\_ == '\_\_main\_\_':
114     phone\_keyword\_list = \['华为手机','荣耀手机','小米手机','vivo手机','三星手机','苹果手机','努比亚手机','中兴手机','联想手机','红米手机','诺基亚手机','索尼手机','菲利普手机'\]
115     '''for keyword in phone\_keyword\_list:
116 for pn in range(1,101):
117 try:
118 get\_index(keyword,pn)
119 time.sleep(random.random()+5)
120 except:
121                 break'''
122     url\_list = \[\]
123     for keyword in phone\_keyword\_list:
124         for pn in range(1, 101):
125             url = f'https://search.jd.com/Search?keyword={keyword}&page={pn}'
126 url\_list.append(url)
127 
128     with ThreadPoolExecutor(max\_workers=3) as executor:
129         for url in url\_list:
130 executor.submit(get\_index, url)
131 #数据清洗
132 import pandas as pd
133 import os
134 
135 # 读取csv文件
136 file\_path = r"京东手机.csv"
137 df = pd.read\_csv(file\_path)
138 
139 # 删除重复行
140 pd.drop\_duplicates(df.duplicated())
141 # 将编号改为字符类型
142 df\["商品编号"\] = df\["商品编号"\].astype("str")
143 # 填充缺失值
144 df\["机身内存"\].fillna("未知", inplace = True)
145 #数据可视化分析
146 import os
147 import pandas as pd
148 import matplotlib.pyplot as plt
149 from wordcloud import WordCloud
150 plt.rcParams\['font.family'\] = 'Microsoft YaHei'   #设置字体
151 
152 def visual\_analytics():
153     file = f'京东手机\_清洗后.csv'
154     if not os.path.exists(file):   #判断文件是否存在
155         print(f'{file}文件不存在')
156     else:
157         file = f'京东手机\_清洗后.csv'
158         data = pd.read\_csv(file, encoding='utf-8')  # 读取csv文件
159 
160         # 1、折线图 - 京东售卖手机屏幕材质分布
161         df = data\['屏幕材质'\].value\_counts()
162         x = df.index
163         y = df.values
164         # 设置画布的尺寸
165         plt.figure(figsize=(12, 10))
166         # 创建折线图
167 plt.plot(x, y)
168         # 添加标题
169         plt.title('京东售卖手机屏幕材质分布')
170         # 设置横坐标字体倾斜
171         plt.xticks(rotation=-80)
172         # 图上显示数字
173         for i in range(len(x)):
174             plt.text(x\[i\], y\[i\], y\[i\], ha='center', va='bottom')
175         plt.ylabel('数量')
176 plt.show()
177 
178         # 2、条形图 - 出售手机排名前十的店铺分布
179         df = data\['店铺名称'\].value\_counts().sort\_values(ascending=False)\[:10\]
180         x = df.index
181         y = df.values
182         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
183         # 创建条形图
184 plt.bar(x, y)
185         # 添加标题
186         plt.title('出售手机排名前十的店铺')
187         # 设置横坐标字体倾斜
188         plt.xticks(rotation=-80)
189         # 图上显示数字
190         for i in range(len(x)):
191             plt.text(x\[i\], y\[i\], y\[i\], ha='center', va='bottom')
192         plt.ylabel('数量')
193 plt.show()
194 
195         # 3、饼图 - 手机机身内存占比
196         memory = data\['机身内存'\].value\_counts()
197         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
198         plt.pie(memory.values.tolist(), labels=memory.index.tolist(), autopct='%1.1f%%', shadow=True, startangle=140)
199         # 添加标题
200         plt.title('手机机身内存占比')
201 plt.show()
202 
203         # 4、箱线图 - CPU型号箱线图
204         memory = data\['CPU型号'\].value\_counts()
205         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
206 plt.boxplot(memory.values.tolist())
207         # 添加标题
208         plt.title('CPU型号箱线图')
209         plt.ylabel('数量')
210 plt.show()
211 
212         # 5、饼图 - 手机屏幕分辨率占比
213         memory = data\['屏幕分辨率'\].value\_counts()
214         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
215         plt.pie(memory.values.tolist(), labels=memory.index.tolist(), autopct='%1.1f%%', shadow=True, startangle=140)
216         # 添加标题
217         plt.title('手机屏幕分辨率占比')
218 plt.show()
219 
220         # 6、散点图-充电功率散点
221         df = data\['充电功率'\].value\_counts()
222         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
223         plt.scatter(df.index, df.values, s=10)
224         plt.title('充电功率散点')
225         plt.ylabel('数量')
226 plt.show()
227 
228         # 7、饼图 - 手机价格占比
229         money\_list = data\['价格'\]
230         current\_list = \[\]
231         for money in money\_list:
232             money = int(money)
233             if money < 1000:
234                 current\_list.append('1000元以下')
235             elif money >= 1000 and money < 2000:
236                 current\_list.append('1000-2000元')
237             elif money >= 2000 and money < 3000:
238                 current\_list.append('2000-3000元')
239             elif money >= 3000 and money < 4500:
240                 current\_list.append('3000-4500元')
241             elif money >= 4500 and money < 6000:
242                 current\_list.append('4500-6000元')
243             elif money >= 6000 and money < 7500:
244                 current\_list.append('6000-7500元')
245             elif money >= 7500 and money < 9000:
246                 current\_list.append('7500-9000元')
247             else:
248                 current\_list.append('10000元以上')
249 
250         money\_list = pd.DataFrame(current\_list, columns=\['价格'\])
251         money\_list = money\_list\['价格'\].value\_counts()
252         l1 = money\_list.index.tolist()
253         l2 = money\_list.values.tolist()
254         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
255         plt.pie(l2, labels=l1, autopct='%1.1f%%', shadow=True, startangle=140)
256         # 添加标题
257         plt.title('手机价格占比')
258 plt.show()
259 
260         # 8、条形图 - 排名前十的品牌分布
261         df = data\['品牌'\].value\_counts().sort\_values(ascending=False)\[:10\]
262         x = df.index
263         y = df.values
264         plt.figure(figsize=(12, 10))  # 设置画布的尺寸
265         # 创建条形图
266 plt.bar(x, y)
267         # 添加标题
268         plt.title('排名前十的品牌分布')
269         # 设置横坐标字体倾斜
270         plt.xticks(rotation=-80)
271         # 图上显示数字
272         for i in range(len(x)):
273             plt.text(x\[i\], y\[i\], y\[i\], ha='center', va='bottom')
274         plt.ylabel('数量')
275 plt.show()
276 
277         # 9、折线图 - 三防标准分布
278         df = data\['三防标准'\].value\_counts()
279         x = df.index
280         y = df.values
281         # 设置画布的尺寸
282         plt.figure(figsize=(12, 10))
283         # 创建折线图
284 plt.plot(x, y)
285         # 添加标题
286         plt.title('三防标准分布')
287         # 设置横坐标字体倾斜
288         plt.xticks(rotation=-80)
289         # 图上显示数字
290         for i in range(len(x)):
291             plt.text(x\[i\], y\[i\], y\[i\], ha='center', va='bottom')
292         plt.ylabel('数量')
293 plt.show()
294 
295         #10、词云-手机风格词云
296         words\_= \[\]   #创建列表,用来装风格列数据
297         for word in data\['风格'\].values.tolist():
298             for w in str(word).split(','):
299                 if w!='nan':
300                     if '未上市' not in w:
301 words\_.append(w)
302 
303         df = pd.DataFrame(words\_).value\_counts()   #统计
304         # 创建词频字典
305         word\_list = \[\]
306         for x in df.index.tolist():
307 word\_list.append(x\[0\])
308         word\_freq = dict(zip(word\_list,df.values.tolist()))
309         wordcloud = WordCloud(font\_path="simfang.ttf",background\_color='white', height=400, width=800,  scale=20, prefer\_horizontal=0.9999).generate\_from\_frequencies(word\_freq)
310         plt.imshow(wordcloud, interpolation="bilinear")
311         plt.title('京东售卖手机风格词云图')
312         plt.axis("off")
313 plt.show()
314 
315 if \_\_name\_\_ == '\_\_main\_\_':
316     visual\_analytics()

如有侵权,请联系删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/474955.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL-4】表的基本查询

目录 1. 整体学习的思维导图 2. 表的创建 2.1 Create(创建) 2.1.1 插入规则 2.1.2 更新插入 2.2 Retrieve(读取) 2.2.1 创建一个实例表 2.3 select使用 2.3.1 全表查询 2.3.2 指定序列查询 2.3.3 查询表达式 2.3.3.1 为查询表达式改名字 2.3.4 查询去重 2.…

无人机航测技术算法概述!

一、核心技术 传感器技术&#xff1a; GPS/GLONASS&#xff1a;无人机通过卫星定位系统实现高精度的飞行控制和数据采集。 高清相机&#xff1a;用于拍摄地面图像&#xff0c;通过后续图像处理生成三维模型。 激光雷达&#xff08;LiDAR&#xff09;&#xff1a;通过激光扫…

uniapp 自定义加载组件,全屏加载,局部加载 (微信小程序)

效果图 全屏加载 页面加载使用 局部加载 列表加载里面使用 使用gif html <template><view><view class"" v-if"typeFullScreen"><view class"loading" v-if"show"><view class""><i…

【D3.js in Action 3 精译_040】4.4 D3 弧形图的绘制方法

当前内容所在位置&#xff1a; 第四章 直线、曲线与弧线的绘制 ✔️ 4.1 坐标轴的创建&#xff08;上篇&#xff09; 4.1.1 D3 中的边距约定&#xff08;中篇&#xff09;4.1.2 坐标轴的生成&#xff08;中篇&#xff09; 4.1.2.1 比例尺的声明&#xff08;中篇&#xff09;4.1…

element ui 走马灯一页展示多个数据实现

element ui 走马灯一页展示多个数据实现 element ui 走马灯一页展示多个数据实现 element ui 走马灯一页展示多个数据实现 主要是对走马灯的数据的操作&#xff0c;先看js处理 let list [{ i: 1, name: 1 },{ i: 2, name: 2 },{ i: 3, name: 3 },{ i: 4, name: 4 },]let newL…

使用MaxKB搭建知识库问答系统并接入个人网站(halo)

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;使用MaxKB搭建知识库问答系统并接入个人网站 前言 从OpenAI推出ChatGPT到现在&#xff0c;大模型已经渗透到各行各业&#xff0c;大模型也逐渐趋于平民化&#xff1b;从最开始对其理解、生成、强大的知识积累的惊叹&…

Linux进阶:软件安装、网络操作、端口、进程等

软件安装 yum 和 apt 均需要root权限 CentOS系统使用&#xff1a; yum [install remove search] [-y] 软件名称 install 安装remove 卸载search 搜索-y&#xff0c;自动确认 Ubuntu系统使用 apt [install remove search] [-y] 软件名称 install 安装remove 卸载search 搜索-y&…

如何解决飞书网页文字无法复制的问题

如何解决网页文字无法复制的问题&#xff1f;特别推荐提词宝防复制文案功能&#xff01; 在日常工作和学习中&#xff0c;我们经常遇到一些网页文字无法复制的情况&#xff0c;无论是因为权限限制还是其他原因&#xff0c;手动输入内容不仅耗时费力&#xff0c;还容易出错。那…

STM32电源管理—实现低功耗

注&#xff1a; 本文是学习野火的指南针开发板过程的学习笔记&#xff0c;可能有误&#xff0c;详细请看B站野火官方配套视频教程&#xff08;这个教程真的讲的很详细&#xff0c;请给官方三连吧&#xff09; 在响应绿色发展的同时&#xff0c;在很多应用场合中都对电子设备的功…

Linux网络:守护进程

Linux网络&#xff1a;守护进程 会话进程组会话终端 守护进程setsiddaemon 在创建一个网络服务后&#xff0c;往往这个服务进程是一直运行的。但是对于大部分进程来说&#xff0c;如果退出终端&#xff0c;这个终端上创建的所有进程都会退出&#xff0c;这就导致进程的生命周期…

基于深度学习的文本信息提取方法研究(pytorch python textcnn框架)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Seatunnel解决Excel中无法将数字类型转换成字符串类型以及源码打包

需求 需要实现将Excel中的数字类型的单元格像数据库中字符串类型的字段中推送 问题原因 Seatunnel在读取字段类型的时候都是使用强转的形式去获取数据的 假如说数据类型不一样的话直接强转就会报错 修改位置 org/apache/seatunnel/api/table/type/SeaTunnelRow.java org…

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台 传统老牌工作流引擎比如activiti,flowable或者camunda等虽然功能强大&#xff0c;也被企业广泛采用&#xff0c;然后也存着在诸如学习曲线陡峭&#xff0c;上手难度大&#x…

UniAPP快速入门教程(一)

一、下载HBuilder 首先需要下载HBuilder开发工具&#xff0c;下载地址:https://www.dcloud.io/hbuilderx.htmlhttps://www.dcloud.io/hbuilder.html 选择Windows正式版.zip文件下载。下载解压后直接运行解压目录里的HBuilderX.exe就可以启动HBuilder。 UniApp的插件市场网址…

计算机网络 (5)数据通信的基础知识

前言 数据通信是一种以信息处理技术和计算机技术为基础的通信方式&#xff0c;它通过数据通信系统将数据以某种信号方式从一处传送到另一处&#xff0c;为计算机网络的应用和发展提供了技术支持和可靠的通信环境&#xff0c;是现代通信技术的关键部分。 一、数据通信的基本概念…

K8s学习笔记之了解k8s的网络模型

文章目录 docker 网络模型容器与容器之间&#xff0c;容器与宿主机之间如何通信容器访问外部网络外部网络访问容器 k8s 网络模型CNIpod 网络配置流程 k8s 热门网络插件介绍Flannel 来源Calico 来源Cilium 来源 k8s 网络插件的工作模式Flannel 的工作模式Calico 的工作模式BGP 和…

Python 三种方式实现自动化任务

在这篇文章中&#xff0c;我们将介绍一些用Python实现机器人过程自动化的包。机器人流程自动化&#xff08;Robotic process automation&#xff0c;简称RPA&#xff09;是指将鼠标点击和键盘按压自动化的过程&#xff0c;即模拟人类用户的操作。RPA用于各种应用程序&#xff0…

时代变迁对传统机器人等方向课程的巨大撕裂

2020年之后&#xff0c;全面转型新质课程规划&#xff0c;传统课程规划全部转为经验。 农耕-代表性生产关系-封建分配制度主要生产力-人力工业-代表性生产关系-资本分配制度工业分为机械时代&#xff0c;电气时代&#xff0c;信息时代&#xff1b;主要生产力-人力转为人脑&…

流程图图解@RequestBody @RequestPart @RequestParam @ModelAttribute

RequestBody 只能用一次&#xff0c;因为只有一个请求体 #mermaid-svg-8WZfkzl0GPvOiNj3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8WZfkzl0GPvOiNj3 .error-icon{fill:#552222;}#mermaid-svg-8WZfkzl0GPvOiNj…

学习记录:js算法(九十九):冗余连接

文章目录 冗余连接思路一 冗余连接 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间&#xff0c;且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数…