1. 程式人生 > 實用技巧 >樂高積木資料處理

樂高積木資料處理

樂高積木資料處理

1.匯入模組

import pandas as pd
import numpy as np
import jieba 
import time

from pyecharts.charts import Bar,Line,Map,Page,Pie
from pyecharts import options as opts
from pyecharts.globals import SymbolType
from pyecharts.faker import Faker

2.讀取資料

# 讀取資料
df_tb=pd.read_csv('F:\Python資料分析課程\python資料處理\Pandas練習\資料分析專案練習\legao3225\樂高淘寶資料.csv')
# 讀取前五條資料
df_tb.head()

3.檢視資料集的資訊

df_tb.info()

4.資料處理

# 去除重複值
df_tb.drop_duplicates(inplace=True)
# 刪除購買人數為空的記錄
df_tb=df_tb[df_tb['purchase_num'].str.contains('人付款')]

# 重置索引
df_tb=df_tb.reset_index(drop=True)
#再次檢視資料集資訊
df_tb.info()

# purchase_num 處 將購買數量轉化為int型別
df_tb['purchase_num']=df_tb['purchase_num'].str.extract('(\d+)').astype('int')
# 計算銷售額
df_tb['sales_volume']=df_tb['price']*df_tb['purchase_num']

# 新增一列location,對province進行分割
df_tb['province']=df_tb['location'].str.split(' ').str[0]
df_tb.head()

資料視覺化

  1. 樂高銷量排名top10店鋪-條形圖
  2. 樂高產地數量排名top10-條形圖
  3. 樂高產國內銷量分佈-地圖
  4. 價格分佈-餅圖
  5. 不同價格區間的銷量表現-餅圖
  6. 商品標題詞雲圖-詞雲圖

1.樂高銷量排名top10店鋪-條形圖

# 對商品店鋪名稱進行分組,並對購買數量進行求和,降序排序,取前10條資料
shop_top10=df_tb.groupby('shop_name')['purchase_num'].sum().sort_values(ascending=False).head(10)
shop_top10

# 條形圖
# bar1=Bar(init_opts=opts.InitOpts(width='1350px',height='750px'))
bar1=Bar()
bar1.add_xaxis(shop_top10.index.tolist())
bar1.add_yaxis('',shop_top10.values.tolist())
bar1.set_global_opts(title_opts=opts.TitleOpts(title='樂高銷量排名Top10淘寶店鋪'),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
                     visualmap_opts=opts.VisualMapOpts(max_=28669)
                    )
bar1.render_notebook()

2. 樂高產地數量排名top10

province_top10=df_tb.province.value_counts()[:10]
province_top10

bar2=Bar()
bar2.add_xaxis(province_top10.index.tolist())
bar2.add_yaxis('',province_top10.values.tolist())
bar2.set_global_opts(
        title_opts=opts.VisualMapOpts(max_=1000)
                    )
bar2.render_notebook()

3. 國內各省份樂高銷量分佈圖

province_num=df_tb.groupby('province')['purchase_num'].sum().sort_values(ascending=False)

province_num[:10]

map1=Map()
map1.add("",[list(z) for z in zip(province_num.index.tolist(),province_num.values.tolist())],
        maptype='china')
map1.set_global_opts(
    title_opts=opts.TitleOpts(title='國內各產地樂高銷量分佈圖'),
    visualmap_opts=opts.VisualMapOpts(max_=172277)
)
map1.render_notebook()

4.天貓樂高價格分佈

cut_bins=[0,50,100,200,300,500,1000,8888]
cut_labels=['0~50元','50~100元','100~200元','200~300元','300~500元','500~1000元','1000元以上']

price_cut=pd.cut(df_tb['price'],bins=cut_bins,labels=cut_labels)
price_num=price_cut.value_counts()
price_num

bar3=Bar()
bar3.add_xaxis(['0~50元','50~100','100~200元','200~300元','300~500元','500~1000元','1000元以上'])
bar3.add_yaxis('',[895,486,701,288,370,411,260])
bar3.set_global_opts(title_opts=opts.TitleOpts(title='不同價格區間的商品數量'),
                    visualmap_opts=opts.VisualMapOpts(max_=900))
bar3.render_notebook()

5.不同價格區間的銷售額整體表現

df_tb['price_cut']=price_cut

cut_purchase=df_tb.groupby('price_cut')['sales_volume'].sum()
cut_purchase

data_pair=[list(z) for z in zip(cut_purchase.index.tolist(),cut_purchase.values.tolist())]
# 繪製餅圖
piel=Pie()
piel.add('',data_pair,radius=['35%','60%'])
piel.set_global_opts(title_opts=opts.TitleOpts(title='不同價格區間的銷售額整體表現'),
                    legend_opts=opts.LegendOpts(orient='vertical',pos_top='15%',pos_left='2%'))
piel.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
piel.set_colors(['#EF9050','#3B7BA9','#6FB27C','#FFAF34','#D7BFD7','#00BFFE','#7FFFAA'])
piel.render_notebook()

6.商品標題詞雲圖

def get_cut_words(content_series):
    # 讀入停用圖表析
    stop_words=[]
    with open("F:\\Python資料分析課程\\python資料處理\\Pandas練習\\資料分析專案練習\\legao3225\\cn_stopwords.txt",'r',encoding='utf-8')as f:
        lines=f.readlines()
        for line in lines:
            stop_words.append(line.strip())
    # 新增關鍵詞
    my_words=['樂高','悟空小俠','大顆粒','小顆粒']
    for i in my_words:
        jieba.add_word(i)
    # 自定義停用詞
    # my_stop_words=[]
    # stop_words.extend(my_stop_words)

    # 分詞
    word_num=jieba.lcut(content_series.str.cat(sep='。'),cut_all=False)
    # 條件篩選
    word_num_selected=[i for i in word_num if i not in stop_words and len(i)>=2]
    return  word_num_selected
text=get_cut_words(content_series=df_tb['goods_name'])
text[:10]

import stylecloud
from IPython.display import Image
# 繪製詞雲圖
stylecloud.gen_stylecloud(
    text=' '.join(text),
    collocations=False,
    font_path=r'F:\Python資料分析課程\python資料處理\Pandas練習\資料分析專案練習\legao3225\simhei.ttf',
    icon_name='fas fa-plane',
    background_color='pink',
    size=768,
    output_name='淘寶樂高標題詞雲圖.png'
)
Image(filename='淘寶樂高標題詞雲圖.png')