K均值聚类-可视化结果

数据清洗
将csv,excel等行式数据转换成二维excel数据
import pandas as pd

data = pd.read_csv("lipstick.csv",header=0,names=["A","B","C","D","E","F"])
print(data["F"])

result = open('lipstick1.txt', 'w', encoding='utf-8')
for i in data["F"]:
result.write(str(i).replace('\n', '"'))
result.write('\n')

数据处理

import pandas as pd
df=pd.read_excel("lip.xlsx")
import matplotlib.pyplot as plt
import seaborn as sns
from pyecharts.charts import Bar, Pie,Map
from pyecharts import options as opts
import numpy as np

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

 s=df.groupby('shop').number_pay.sum().sort_values(ascending=False)[:30]\
     .plot(kind='bar',color=['r','g','b','g','b','tan','c'])
 plt.xlabel('店铺')
 plt.ylabel('购买人数')
 plt.savefig('购买人数最多的前30店铺.png',bbox_inches='tight')
 plt.show()
y1=df.groupby('shop').amount.sum().sort_values(ascending=False)[:20]
y_amount=pd.DataFrame(y1)
print(y1.index,y1.values)


color_series = ['#FAE927','#E9E416','#C9DA36','#9ECB3C','#6DBC49',
                '#37B44E','#3DBA78','#14ADCF','#209AC9','#1E91CA',
                '#2C6BA0','#2B55A1','#2D3D8E','#44388E','#6A368B',
                '#7D3990','#A63F98','#C31C88','#D52178','#D5225B']
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie1.set_colors(color_series)
pie1.add("", [list(z) for z in zip(y1.index, np.round(np.sqrt(y1.values),0))],
        radius=["20%", "100%"],
        center=["30%", "65%"],
        rosetype="area"
        )
# 设置全局配置项
pie1.set_global_opts(title_opts=opts.TitleOpts(title='玫瑰图示例'),
                     legend_opts=opts.LegendOpts(is_show=False),
                     toolbox_opts=opts.ToolboxOpts())
# 设置系列配置项
pie1.set_series_opts(label_opts=opts.LabelOpts(is_show=True,
                                               position="inside",
                                               font_size=12,
                                               formatter="{b}:{c}",
                                               font_style="italic",
                                               font_weight="bold",
                                               font_family="Microsoft YaHei"),)
pie1.render('销售额前20店铺.html')
image.png

################################店铺所在地区分布

y2=df.groupby('location1').shop.count().sort_values(ascending=False)
y_amount=pd.DataFrame(y2)
data=[
('广东',991),
('上海',925),
('浙江',633),
('北京',362),
('江苏',353),
('山东',217),
('辽宁',103),
('香港',103),
('四川',95),
('福建',85),
('安徽',65),
('湖北',63),
('湖南',59),
('河北',57),
('黑龙江',54),
('天津',45),
('河南',36),
('江西',19),
('重庆',16),
('吉林',15),
('陕西',14),
('山西',12),
('广西',4),
('海南',4),
('云南',3),
('贵州',1),
('台湾',1),
('内蒙古',1),
('甘肃',1),

]
china_map = (
        Map(init_opts=opts.InitOpts(theme='dark'))
        .add("",data,'china',is_map_symbol_show=False,  is_roam=False)
        .set_series_opts(label_opts=opts.LabelOpts(is_show=True, color='#ffffff'))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="店铺所在地区分布地图"),
            legend_opts=opts.LegendOpts(is_show=False),
            visualmap_opts=opts.VisualMapOpts(max_=2000,
                                              is_piecewise=True,
                                              pieces=[
                                                  {"max": 999, "min": 500, "label": "500-999", "color": "#B40404"},
                                                  {"max": 499, "min": 100, "label": "100-499", "color": "#DF0101"},
                                                  {"max": 99, "min": 60, "label": "60-99", "color": "#F78181"},
                                                  {"max": 59, "min": 10, "label": "10-59", "color": "#F5A9A9"},
                                                  {"max": 9, "min": 0, "label": "1-9", "color": "#FFFFCC"},
                                              ])
        )
)
china_map.render("店铺所在地区分布.html")
image.png

##############每个店铺的口红单价情况

y4=df.groupby('shop').price.mean().sort_values(ascending=False)
print(y4)
sns.distplot(df.groupby('shop').price.mean(),color="g",
             norm_hist = True, hist_kws = {'color':'g'},
             kde_kws=({'linestyle':'--', 'color':'red'}))
plt.xlim(0,1000)
plt.title('口红单价')
plt.show()
import jieba
from wordcloud import WordCloud
from PIL import Image

filename = "lip_word.txt"
with open(filename,encoding='UTF-8') as f:
 mytext = f.read()

mytext = " ".join(jieba.cut(mytext))
mytext.replace("/", '')
mytext.replace("|", '')
alice_mask = np.array(Image.open("lips.png"))
wordcloud = WordCloud(font_path="simsun.ttf",background_color="white",
                      collocations=False,#非重复计数
                      width=800,
                      height=600,
                      mask=alice_mask,max_words=500).generate(mytext)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.figure()
plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis("off")
plt.show()

image.png
from sklearn.preprocessing import MinMaxScaler
from sklearn.cluster import KMeans
df=pd.read_excel("lip_sum_dataming.xlsx",index_col = 'index')

df1=df[['price','number_pay','adress','if_company','if_off_shop']]#选中数据框某几列 df1nona=df1[df1['number_pay'].notna()]#原始数据#空值删除整行
print(np.isnan(df1nona).any())#检查是否含有空行

scale=MinMaxScaler().fit(df)#数据标准化
df_scale=scale.transform(df)#标准化数据 #df1_scale=df_scale.tolist() 数组添加索引
data_zs = 1.0*(df - df.mean())/df.std()#print(type(data_zs),data_zs.index)

kmeans=KMeans(n_clusters=2).fit(data_zs)#构造聚类器,estimator初始化Kmeans聚类;estimator.fit聚类内容拟合;
inertia = kmeans.inertia_ # 获取聚类准则的总和
ssa=kmeans.inertia_#组内平方和
y_kmeans2=kmeans.predict(data_zs)

from sklearn.manifold import TSNE
tsne = TSNE()
tsne.fit_transform(data_zs) #进行数据降维,并返回结果
tsne = pd.DataFrame(tsne.embedding_, index = data_zs.index) #转换数据格式

r1 = pd.Series(kmeans.labels_).value_counts() #统计各个类别的数目
r2 = pd.DataFrame(kmeans.cluster_centers_) #找出聚类中心
r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目

r = pd.concat([data_zs, pd.Series(kmeans.labels_, index = data_zs.index)], axis = 1)  #详细输出每个样本对应的类别
r.columns = list(df.columns) + [u'聚类类别'] #重命名表头
r.to_excel('data_type_2.xls') #保存结果
d = tsne[r[u'聚类类别'] == 0]  #找出聚类类别为0的数据对应的降维结果
plt.plot(d[0], d[1], 'r.')
d = tsne[r[u'聚类类别'] == 1]
plt.plot(d[0], d[1], 'go')
plt.show()
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,928评论 6 523
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,032评论 3 410
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 173,382评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,580评论 1 304
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,558评论 6 403
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,018评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,261评论 3 432
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,328评论 0 281
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,858评论 1 328
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,843评论 3 351
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,954评论 1 358
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,565评论 5 352
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,251评论 3 342
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,677评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,834评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,558评论 3 383
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,033评论 2 368

推荐阅读更多精彩内容