数据挖掘导论——可视化分析实验

简介: 数据挖掘导论——可视化分析实验

商店客流量数据可视化

数据来源

商店数据来自天池口碑商家客流量预测比赛,这里只筛选了一部分数据。“shop_payNum_new.csv”的数据各个字段的含义如下表所示:858e36e6af5c416aab972b614a889ecd.png

实验要求:

参考案例一从以下任务中任选5个绘制不同图形的任务:

绘制所有便利店的10月的客流量折线图

【代码】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data_total = pd.read_csv('dataset/shop_payNum_new.csv', parse_dates=True, index_col=0)
data = data_total.iloc[data_total.index.month == 10]
data_id = data.groupby('shop_id')
for key in data_id.groups.keys():
    data_id.get_group(key).plot(y=['pay_num'], title='customer flow of shop '+str(key))
plt.show()

【分析】

首先使用pandas.read_csv获取全部商铺数据。由于需要筛选10月的客流量折线图,则用iloc完成数据筛选,并利用shop_id进行groupby分组以获取各个商店的id键。对于每个键,依次用get_group获取对应商店的数据,并利用plot进行绘图。


【运行】

由于实际运行绘图比较多,故只展示一部分。

51cd3130791342b5ae41fb058af4db20.png

6c641f9d9263430db72ce9c4c59a1721.png


绘制每类商家10月份的日平均客流量折线图。

【代码】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data_total = pd.read_csv('dataset/shop_payNum_new.csv', parse_dates=True, index_col=0)
data = data_total.iloc[data_total.index.month == 10]
data_id = data.groupby('cate_2_name')
for keys in data_id.groups.keys():
    data_id.get_group(keys).groupby(data_id.get_group(keys).index.day).mean().plot(y=['pay_num'], kind='line', title=keys)
plt.show()

【分析】

首先使用pandas.read_csv获取全部商铺数据。由于需要筛选每类商家10月份的日平均客流量折线图。使用iloc对数据进行过滤,筛选出每个商家10月份的数据。利用groupby对销售数据进行分组并获取每组的键值。利用循环遍历每个键,再获取日期并对日期取平均值,最后利用plot生成折线图。


【运行】

部分结果展示如下

03dad2daab504c328967e8872cef20ad.png

daf0f2f6fd5b48a3b0e36c47520d7a40.png

选择一个商家,统计每月的总客流量,绘制柱状图

【代码】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data_total = pd.read_csv('dataset/shop_payNum_new.csv', parse_dates=True, index_col=0)
data_14 = data_total[data_total['shop_id'] == 14]
data_14_id = data_14.groupby(data_14.index.month).sum()
data_14_id.plot(kind='bar', y=['pay_num'], title='total custom of shop-14')
plt.xlabel('month')
plt.show()

【分析】

首先使用pandas.read_csv获取全部商铺数据。由于需要筛选单个商家各个月份的总客流量。首先对数据进行过滤筛选,筛选出shop_id为14的数据。利用groupby结合sum函数进行分组求和,最后设置kind为柱状图并生成绘图即可。

【运行】c6e044de614e4cb5b609fa4c47eae338.png


选择一个商家,统计某个月中,周一到周日的每天平均客流量,并绘制柱状图。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import time
data_total = pd.read_csv('dataset/shop_payNum_new.csv', parse_dates=True, index_col=0)
data_14 = data_total[(data_total['shop_id'] == 14) & (data_total.index.month == 1)]
data_14_id = data_14.groupby(data_14.index.strftime('%w'))
data_14_id.mean().plot(y=['pay_num'], kind='bar', title='Average custom of shop 14 in January')
plt.xlabel('day')
plt.show()

【分析】

首先使用pandas.read_csv获取全部商铺数据。由于需要筛选单个商家单个月份的平均客流量。首先对数据进行过滤筛选,筛选出shop_id为14,且在1月份的数据。利用groupby结合strftime函数利用日期进行分组求平均值,最后直接绘图为柱状图即可。


【运行】

fc5e2ca2b458415594ecbb7cc0c00a7f.png

选择一个商家,绘制客流量直方图

【代码】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data_total = pd.read_csv('dataset/shop_payNum_new.csv', parse_dates=True, index_col=0)
data_14 = data_total[data_total['shop_id'] == 14]
data_14.plot(kind='hist', y=['pay_num'], title='shop-14-block')
plt.show()

【分析】

首先使用pandas.read_csv读取全部商铺数据,然后根据shop_id,对所有数据进行筛选。筛选出对应店铺的数据后直接使用plot进行绘图,并选择样式为’hist’柱状图即可。

【运行】5d3b3042a6be4c308bba806395d31ff8.png

选择一个商家,绘制客流量密度图。

【代码】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data_total = pd.read_csv('dataset/shop_payNum_new.csv', parse_dates=True, index_col=0)
data_14 = data_total[data_total['shop_id'] == 14]
data_14.plot(kind='kde', y=['pay_num'], title='shop-14-density')
plt.show()

【分析】

首先使用pandas.read_csv读取全部商铺数据,然后根据shop_id,对所有数据进行筛选。筛选出对应店铺的数据后直接使用plot进行绘图,并选择样式为’kde’密度分布图即可。

【运行】950f20f5dd324992889357a92c2e16fb.png


统计某个月各个类别商店总客流量占该月总客流量的比例,绘制饼图。

【代码】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data_total = pd.read_csv('dataset/shop_payNum_new.csv', parse_dates=True, index_col=0)
data_month1 = data_total[data_total.index.month == 1]
data_month1_rate = data_month1.groupby('cate_2_name').sum() / data_month1['pay_num'].sum()
data_month1_rate['pay_num'].plot(kind='pie', autopct='%.2f')
plt.ylabel('')
plt.title('January')
plt.show()

【分析】

首先使用pandas.read_csv读取全部商铺数据,然后根据1月,对所有数据进行筛选。然后使用groupby和sum对各个类别客流量进行分组求和,使用sum对全部客流量进行求和。两结果做比的结果即为所占比例。最后根据所占比例作饼状图即可。

【运行】afbe9666f97d44d8ae6a6588c100234b.png


皮马印第安人糖尿病数据可视化

数据来源:http://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes。“pima.csv”数据前9个字段的含义:

(1)Number of times pregnant

(2)Plasma glucose concentration a 2 hours in an oral glucosetolerancetest

(3)Diastolic blood pressure (mm Hg)

(4)Triceps skin fold thickness (mm)

(5)2-Hour serum insulin (mu U/ml)

(6)Body mass index (weight in kg/(height in m)^2)

(7)Diabetes pedigree function

(8)Age (years)

(9)Class variable (0 or 1)

实验要求:

参考案例二完成以下任务:

任选两个字段绘制散点图。

【代码】

import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
close_px_all = pd.read_csv('dataset/pima.csv', parse_dates=True, index_col=None, header=None)  
close_px_all.columns = ['Number of times pregnant',  
                        'Plasma glucose concentration a 2 hours in an oral glucosetolerancetest',  
                        'Diastolic blood pressure (mm Hg)', 'Triceps skin fold thickness (mm)',  
                        '2-Hour serum insulin (mu U/ml)', 'Body mass index', 'Diabetes pedigree function',  
                        'Age (years)', 'Class variable']  
# print(close_px_all.head())  
# # 任选两个字段绘制散点图  
pregnant_age = close_px_all[['Number of times pregnant', 'Age (years)', 'Class variable']]  
ax = pregnant_age[pregnant_age['Class variable'] == 0].plot(kind='scatter', y='Number of times pregnant', c='red',  
                                                            x='Age (years)', title='Number of times pregnant-Age',  
                                                            ax=None)  
pregnant_age[pregnant_age['Class variable'] == 1].plot(kind='scatter', y='Number of times pregnant', c='blue',  
                                                       x='Age (years)', title='Number of times pregnant-Age', ax=ax)  
plt.show()  

【分析】

首先通过pandas.read_csv读入数据,然后给各个列命名,方便处理。由于要展示Number of times pregnant与Age的关系通过筛选数据仅保留这两列即可。然后使用plot对数据进行可视化绘图,选择kind为’scatter’并规定横纵坐标即可。


【运行】

29535fd2ff824ee2aace0a63f10352f9.png

使用全部或者部分特征绘制散布图。

【代码】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
close_px_all = pd.read_csv('dataset/pima.csv', parse_dates=True, index_col=None, header=None)
close_px_all.columns = ['Number of times pregnant',
                        'Plasma glucose concentration a 2 hours in an oral glucosetolerancetest',
                        'Diastolic blood pressure (mm Hg)', 'Triceps skin fold thickness (mm)',
                        '2-Hour serum insulin (mu U/ml)', 'Body mass index', 'Diabetes pedigree function',
                        'Age (years)', 'Class variable']
# 使用全部或者部分特征绘制散布图
color = {1: 'red', 0: 'blue'}
pd.plotting.scatter_matrix(close_px_all.iloc[:, [0, 3, 4]], figsize=(9, 9), diagonal='kde', s=40, alpha=0.6,
                           c=close_px_all['Class variable'].apply(lambda x: color[x]))
plt.show()

【分析】

选取了Number of times pregnant,Triceps skin fold thickness和2-Hour serum insulin对class variable进行特征分析绘制散布图。首先通过pandas.read_csv读入数据,然后给各个列命名,方便处理。利用scatter对第0列,第3列和第4列进行分析,并绘图显示散布图。


【运行】

dbaf6b8ab8d049bc888187bd63e9a77a.png

绘制调和曲线图。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
close_px_all = pd.read_csv('dataset/pima.csv', parse_dates=True, index_col=None, header=None)
close_px_all.columns = ['Number of times pregnant',
                        'Plasma glucose concentration a 2 hours in an oral glucosetolerancetest',
                        'Diastolic blood pressure (mm Hg)', 'Triceps skin fold thickness (mm)',
                        '2-Hour serum insulin (mu U/ml)', 'Body mass index', 'Diabetes pedigree function',
                        'Age (years)', 'Class variable']
# 绘制调和曲线图
pd.plotting.andrews_curves(close_px_all, 'Class variable', color=['red', 'blue'])
plt.show()

【分析】

首先通过pandas.read_csv读入数据,然后给各个列命名,方便处理。直接调用函数进行绘图即可。

【运行】61ec10f1fb4d405fb415aaa771b0d217.png

相关文章
|
4月前
|
数据采集 存储 NoSQL
建筑业数据挖掘:Scala爬虫在大数据分析中的作用
建筑业数据挖掘:Scala爬虫在大数据分析中的作用
|
4月前
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
101 0
|
4月前
|
自然语言处理 数据可视化 安全
【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题一方案及Python实现
第十届“泰迪杯”数据挖掘挑战赛C题的解决方案,涉及疫情背景下周边游需求图谱分析,包括微信公众号文章分类、周边游产品热度分析、本地旅游图谱构建与分析,以及疫情前后旅游产品需求变化分析的Python实现方法。
142 1
【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题一方案及Python实现
|
4月前
|
数据挖掘 调度 Python
【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 Baseline
第十届“泰迪杯”数据挖掘挑战赛B题的基线解决方案,涉及电力系统负荷预测分析,包括数据读取、特征处理、模型训练和评估,以及使用了LightGBM进行回归预测。
148 3
|
4月前
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
286 0
|
4月前
|
机器学习/深度学习 安全 算法
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码
本文总结了2023年第十一届泰迪杯数据挖掘挑战赛A题的新冠疫情防控数据分析,提供了32页和40页的论文以及实现代码,涉及密接者追踪、疫苗接种影响分析、重点场所管控以及疫情趋势研判等多个方面,运用了机器学习算法和SEIR传染病模型等方法。
74 0
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码
|
4月前
|
机器学习/深度学习 安全 算法
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛A题的解题思路和Python代码实现,涵盖了新冠疫情防控数据的分析、建模方案以及数据治理的具体工作。
83 0
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解
|
4月前
|
存储 数据可视化 数据挖掘
【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题三方案及Python实现
第十届“泰迪杯”数据挖掘挑战赛C题的解决方案,专注于问题三“本地旅游图谱构建与分析”,介绍了基于OTA和UGC数据的旅游产品关联分析方法,使用支持度、置信度、提升度来计算关联度得分,并进行了结果可视化,同时指出了方案的改进方向。
81 1
|
4月前
|
存储 自然语言处理 算法
【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题二方案及Python实现
第十届“泰迪杯”数据挖掘挑战赛C题的解决方案,专注于疫情背景下的周边游需求图谱分析,具体针对问题二“周边游产品热度分析”,介绍了从OTA和UGC数据中提取旅游产品、计算产品热度得分、判断产品类型的方法,并给出了Python实现步骤和代码。
97 1
|
4月前
|
数据采集 自然语言处理 数据可视化
基于python数据挖掘在淘宝评价方面的应用与分析,技术包括kmeans聚类及情感分析、LDA主题分析
本文探讨了基于Python数据挖掘技术在淘宝评价分析中的应用,涵盖了数据采集、清洗、预处理、评论词频分析、情感分析、聚类分析以及LDA主题建模和可视化,旨在揭示淘宝客户评价中的潜在模式和情感倾向,为商家和消费者提供决策支持。
101 0

热门文章

最新文章

下一篇
DataWorks