Giter Site home page Giter Site logo

wheat-health's Introduction

Wheat-Health

环境配置

本代码需要运行在python3.6环境下,运行前需要安装以下常用的python第三方库 pandas,numpy,matplotlib,seaborn,scipy和sklearn。

代码结构如下:

Wheat-Health---WheatGreen|---correlation.py | |---modifycriterion.py | |---preprocessing.py | |---seekweight.py | | ---BabyMother|---babymother.py | |---babymother_mean.py | |---correlation.py | |---findlatestweight.py | |---groupwithbmi.py | |---numbermeal.py | |---prediction.py | |---test.py | |---cleanupscore.py | |---cleandata.py | |---hei.py | |---groupwithage.py | |---pca.py | |---clustering.py | |---lightfoodfor2.py | |---lightfoodfor4.py | |---userscore.py | |---nutriment.py | |---outlierdetect.py | |---newheatscore.py | |---new.py | |---combinecorrelation.py | |---arma.py | |---prediction2.py | | ---BabyMotherLight|---babymother.py | |---babymother_mean.py | |---test.py | | | | ---data|---all data for this project

----> preprocessing.py : 读取多个csv文件中的数据进行预处理操作,

将RF属性中的16项子属性如:'水果摄入量','蔬菜摄入量'等展开作为新属性列.

运行后将生成两个新的csv文件:1.data.csv包括用户每日实际摄入量及每一项得分及总分。2.mean_data.csv包括每个用户的平均各项得分。

----> correlation.py : 读取mean_data.csv对数据做相关性分析,主要包括一元相关性分析和多元相关性分析。

分析各项营养指标的实际摄入量和平均得分及用户平均总得分对减重、减重百分比及BMI和年龄的相关性,利用的是pearson相关系数。

代码如下:

#corr = data.corr()

利用matplotlib和seaborn绘制热力图heatmap及一元线图和多元剖面图。

注意:如果matplotlib作图出现中文乱码问题,请参照以下链接解决问题:

https://blog.csdn.net/sinat_33027857/article/details/78072292

-----> modifycriterion.py : 更改为新的评分标准。

水果摄入量,蔬菜摄入量,膳食纤维摄入量,固态脂肪摄入量,钠盐摄入量(共五项)分别从5分->10分。提升。

而三大营养素,饮酒和添加糖(共三项)分别从10分->5分。下降。

总分从120分变为130分。更改后的data命名为:new_num。

-----> seekweight.py : 寻找热量评分和其余各营养素评分的合理权重。

对除热量得分外的其余分数记为balanced。然后将balanced除以12,归为总分10分和热量总分一样。

设置权重因子,grid search 搜索最大相关性的值。

-----> prediction.py : 预测用户的平均得分,减重值等数据。利用线性回归函数做预测。

使用RMSE值评估模型误差。

-----> babymother.py : 将读取的宝妈营数据文件csv中rf列的16项子属性展开,并计算出每人每日的总得分。

这里的评分标准目前还是老标准(110+10分)。

-----> babymother_mean.py : 计算出每人的各营养素的平均量及各营养素的平均得分,以及目前的平均总得分。

和用户信息表2做关于姓名的连接,合并表。生成文件mean_babymother_data。

-----> correlation.py : 读取mean_babymother_data, 做减重值、BMI对分数的相关性分析。

-----> groupwithbmi.py : 增加user的初始体重和减重百分比列。

将用户根据BMI分为AB组(大于24或小于等于24),计算每个用户每天和初始体重的差值、每天与上一日差值。

将用户的得分分为AB组(大于84分或小与等于84分),计算每个用户每天和初始体重差值、每天与上一日差值。

用BMI和减重大小分为4组,看数据的分布。

-----> findlatestweight.py : 找到用户目前最新的体重值。并记录下用户的身高数据为计算BMI做准备。

对用户的减重情况按照BMI、得分等筛选。

-----> numbermeal.py : 统计出用户到目前为止记录完整三餐情况的天数。并将结果写入到babymother_completedata中。

-----> cleanupscore.py : 将用户每天的饮食得分整合到一个表格里,对没有记录的地方显示NaN。

-----> cleandata.py : 数据预处理离散化。

-----> hei.py : hei新的评分标准计算平均得分。

-----> groupwithage.py : 以年龄分组,得到用户的每日累积减重值。

-----> pca.py : PCA降低数据维度。核心代码如下:

#pca = PCA(n_components='mle')

#pca.fit(pre_data)

#X_pca=pca.fit_transform(pre_data)

#print(pca.explained_variance_ratio_)

-----> clustering.py : 使用k-means对用户根据得分,减重值,初始体重值,BMI及年龄等属性进行聚类。

-----> lightfoodfor2.py : 区分开用户轻食日和普通日的热量,探究热量对比值的区间。二变量对称型。

-----> lightfoodfor4.py : 四变量非对称型,具有abcd四个参数,分别为轻食日和普通日的区间上下限。

-----> userscore.py : 从字符串str中提取出用户界面的用户得分,然后和其他表进行合并,目的是搜索出满足退款要求的用户。

-----> nutriment.py : 三大营养素区间范围探索。

-----> outlierdetect.py : 检测数据中存在的异常离群点。目前有DBscan、Local Outlier Factor and Isolcation Forest。

-----> newheatscore.py : 使用新区间换算用户的新热量得分。

-----> new.py : 将预处理合并到一个类中,一次性输出总表。包括HEI分数(100分)、均衡饮食得分(120分)和新饮食得分(100制)。

-----> combinecorrelation.py : 结合五周数据,做折线图。

-----> arma.py : 时序分析模型,预测用户的减重变化情况。

-----> prediction2.py : 根据BMI值会动态变化用户计算数据。<24/24-28/>28三组。每周数据为一个模型,

单周预测,可以动态修改变化趋势。

LOG:

5.22 读取一个用户的数据,对数据扩展变形处理,输出为data_num.csv。

5.23 读取全部的用户数据,将用户数据整理到一个data.csv(包括用户每日的饮食摄入量及得分等数据)。

做各营养指标对减重等指标一元线性分析。

利用matplotlib绘制热力图。增加考虑饮食摄入的实际值,去重复数据遇到bug,已解决。

5.24 增加一元线性回归部分回归线图,做二元及多元线性回归分析及绘制剖面图。

对营养指标的平均得分做归一化处理,在mean_data中增加平均总得分。

更改打分标准,对原数据的打分进行更改。观察分析。

改变前:平均总分对减重的相关性为0.3907。改变后变为:0.42,有所改善。

但是评分标准的改变和归一化处理对各营养小分和减重,减重百分比,BMI指标的相关性不产生影响。

原因是这两种改变并不改变数据内部的差异,等比例变化,不影响相关性。

5.25 寻找目前新标准评分下热量得分(1项)和均衡得分(15项)的合理权重值。

但是,搜索找不到凸点收敛值。

分析:1.数据量太小,就目前的数据下无法搜索到。2.划分不合理,改变均衡和热量的划分方法。

5.29 预测减重值,减重百分比,平均得分等属性。但是因为数据量小,误差大。

5.30 对宝妈营用户数据进行清洗,生成mother_data及mean_babymother_data。

对清洗后的数据做相关性分析。

5.31 增加原始体重和减重百分比列。

Tableau可视化数据分析AB组用户不同时间段的减重绝对值情况。

更改数据为新的标准评分标准,找各指标与减重值、减重百分比的相关性。

6.1 用BMI分组,计算每个用户每日与上一日的体重差值,并用Tableau绘制图。

增加用户筛选条件,筛选出用户记录7天及以上的有效记录数据。

用分数分组,计算每个用户每日与初始体重差值以及与上一日体重差值。

以BMI和减重绝对值分为四组,看数据的分布情况。

6.4 PCA降低数据维度,和原始维度准确性比较下降。

#调用estimator的score缺省函数,对分类器对应于准确率为sklearn.metrics.accuracy_score

对回归器对应于R2得分sklearn.metrics.r2_score

6.5 对一周的数据5.30-6.4做预处理和清洗。

增加年龄新属性到babymother_completedata5.22-6.4.csv。

6.6 分析各项和减重绝对值、减重百分比之间的相关性。

增加记录次数,统计出用户完整记录三餐的天数。

统计出用户第一周减重值和第二周减重值及累积减重值。

以BMI和年龄分四组,探究不同组别的平均得分和减重值的情况。

以BMI分为AB组,探究不同组别的每日累积减重值和减重速率。

6.7 从总分中删掉三大营养素和钠盐两项后,在目前旧标准下和减重值的相关性。

️探究记录每日体重小于10天的人的减重值及减重速率(画图)。

️只取用户记录完整三餐的饮食得分,求饮食平均分,探究和减重的相关性。但是,相关性下降了,原因完整天数少时间和减重阶段数据不匹配。

得出用户前两周的饮食得分表及平均得分值。

整理近期数据,归档。

6.8 饮食记录完整性大于等于10天或小于10天的人/体重记录和饮食完整性记录双重大于10天的人

体重记录或饮食完整性记录小于10天的人(画图)。

6.11 将用户年龄做离散化分成三类(20-30/30-40/40-50)。

将new评分标准的数据在计算平均分时,除以目前开营的天数而不是用户的记录天数。

用这种方法计算出新的平均得分,和减重值的相关性上升。原:0.350867 新:0.36859。

将前两周时间重新划分为5.22-5.28/5.29-6.4。

计算以入营时间为除数得到的平均分数。

6.12 利用HEI标准重新计算用户的平均饮食得分。HEI标准除去了膳食纤维、总热量、三大营养素和饮水得分。

整理新评分标准下的前两周时间的数据划分新段。

预处理宝妈营用户助理,加入数据分析表。调整输出列的顺序。

整理上一周的用户饮食数据,得到21天最新的mean_babymother_data5.22-6.11。

6.13 重新整理用户在起始体重值在第一周,截止目前第三周有体重值记录的用户名单。

计算分析多个数据表的相关性。

利用BMI对用户分组后,计算用户平均的减重值和减重速率。

输出潜在退款的用户名单。

利用最新的数据找均衡得分和热量得分的权重,得出结果为均衡得分权重为94%,效果最好(百分制)。

6.14 整理以BMI大于24分组,饮食完整记录和体重完整记录天数最为筛选条件,5.22-6.4/5.22-6.11前两周和前三周数据。

统计出各组人数和平均减重值,得到原数据excel 文件。

统计前三周中每周用户的累计减重和单周减重情况。

6.15 整理以BMI大于22分组,饮食完整记录和体重完整记录天数最为筛选条件,5.22-6.4/5.22-6.11前两周和前三周数据。

对年龄按照36岁分组,根据分组后得到的累积减重值做t检验,求p值。样本的大小需要一致?

把年龄按照5岁一组,分成5组。(25-29/30-34/35-39/40-44/45-49)

6.19 对用户数据使用k-means方法进行聚类操作。根据使用的属性指标的不同会有不同的聚类结果。

k-means中的参数解释,参考:https://www.cnblogs.com/wuchuanying/p/6218486.html

在聚类前需要对数据进行归一化处理。代码如下:

#公式为:(X-mean)/std 计算时对每个属性/每列分别进行。

#将数据按期属性(按列进行)减去其均值,并处以其标准差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,标准差为1。

#Y = np.array(X)

#Y_scaled = preprocessing.scale(Y)

归一化处理的方法还有很多,例如: MAXMIN等。

整理宝妈营数据分析的工作流程。发现用户陈小姐5.29饮食记录数据存在错误,已更正。

6.20 对数据预处理输出用户每日饮食记录表和到目前为止的平均总表。

BMI分组,探求减重值和减重速率的变化。各种筛选条件下的各指标和减重值的相关性。

整理数据,求用户HEI标准下的新分数。

6.21 前四周的各指标和减重值的相关性汇总。

探究热量的对比值区间。使用二变量对称型和四变量非对称型两种方法。其中,四变量较费时。

统计汇总四周后用户的平均减重情况,Tableau绘制柱形图。

6.22 整理四周除以入营天数的平均分的新表,求各属性与减重绝对值的相关性。

将lightfood类拆分成二参数和四参数两个类。分别命名为: lightfoodfor2 和 lightfoodfor4。

6.26 更正不饱和脂肪酸与饱和脂肪酸实际摄入值为摄入对比值。

三大营养素取三行,分别为碳水化合物、脂肪和蛋白质的摄入对比值。热量新增热量摄入对比值。

热量属性区分轻食日和普通日,分别计算各自平均的摄入值和对比值。

统计闭营时,满足退款条件的用户名单。

6.27 整理上周用户数据,得到数据饮食得分表和35天的平均得分表。包括HEI得分,总计8张表。

因为年龄对减重值的影响小于BMI,所以在探究年龄的影响时需要将BMI先'均衡化'到一个区间(BMI> and BMI=<24),即同时对BMI和年龄进行筛选分组。

35天用户的累积减重值和减重速率,并绘制图片。

统计得到用户5周中每周的平均减重值,需要根据一定的体重记录情况筛选,分别是 5 11 18 24 28天。

6.28 对5周的热量数据探索热量参考满分区间,区分轻食日和普通日。

探索结果:对于总表轻食日热量区间为73%~127%,普通日热量区间为88%~112%。

对于体重跨度5周的人 轻食日热量区间74%~126%,普通日热量区间为90%~110%。四参数非对称结果相同。

对94人总表-实际记录得分中删除离群点四个,分别是编号:44801、44912、44977、45032。删除后重新做相关减重性分析,MultipleR值从0.596785->0.613818 上升不少。

而在总表-入营得分中删除离群点四个,分别编号为: 44852、44830、44912、44801。删除后重新做减重的分析,MiltipleR值从0.62659->0.725147 显著上升。

探索三大营养素的范围,碳水化合物、脂肪和蛋白质在每日的占比区间。目前结果不太好,待改善。

6.29 新增outlierdetect类使用DBscan聚类,用于检测出数据离群点。

DBscan和K-means的区别参考资料: https://blog.csdn.net/weixin_39599711/article/details/78167232

异常检测常见方法参考资料: http://baijiahao.baidu.com/s?id=1586454260987618585&wfr=spider&for=pc

尝试使用其他的异常检测方法,例如:基于密度的Lof(距离度量)、基于随机二叉树的孤立森林(超平面切类比蛋糕)。

Lof参考资料: https://blog.csdn.net/wangyibo0201/article/details/51705966

https://yq.aliyun.com/articles/152627?t=t1

孤立森林isolation tree参考资料: https://www.jianshu.com/p/5af3c66e0410?utm_campaign=maleskine

https://blog.csdn.net/u013709270/article/details/73436588

7.2 分别探究轻食日和普通日的热量区间范围。

修正之前陈小姐的热量对比值错误数据。(5.29日)

分别从分数和减重值/轻食日或普通日的热量对比值和减重值 两个角度去删除离群点。

7.3 根据新的热量区间范围换算用户的新热量得分,包括: 轻食日平均得分,普通日平均得分,和总热量摄入平均分。

整理目前为止所做的数据维度、数据清洗、数据统计与分析、预测等。

7.4 新增随机森林,支持向量机SVM两种预测模型,使用数据训练模型,预测减重值。

将热量得分值划分为轻食日热量得分和普通日热量得分,寻找各自的权重值。

7.5 整理宝妈营五周所有数据的,各指标和减重值及减重百分比的相关性。

7.6 利用matplotlib绘制折线图。以下代码可以设置数字标签:

#for a, b in zip(week, newscore100):

#plt.text(a, b, b, ha='center', va='bottom', fontsize=10)

将绘制后的图片保存。

#plt.savefig('/Users/martin_yan/Desktop/test.png', dpi=300)

7.9 初步整理宝妈营用户数据分析阶段性报告v1.1

7.10 完善宝妈营用户数据分析阶段性报告v1.2

7.11 进一步完善宝妈营用户数据分析阶段性报告v1.3-v.15。报告分为10个部分:宝妈营用户减重总体分析、

用户随天减重值分析、相关性分析、方差分析、聚类分析、异常检测、因子分析、热量区间探索、

饮食均衡得分和热量权重、回归预测模型。

7.12 宝妈轻享营用户数据整理,输出用户总表。两种:用户实际记录天数/用户入营7天。

用户的分数有130分制和使用了均衡饮食/热量权重9:1分数。

轻享数据各指标和减重值、减重百分比的相关性。

7.13 轻享营用户数据和宝妈营数据分析对比。包括减重值,相关性等。

7.16 找到平均减重值/平均百分比最大时的BMI。这个问题因为最多减重值的人,肯定平均减重值最多,所以此时的BMI即为那个人的BMI,无探究意义。

绘制出平均BMI和平均减重值的关系折线图。

探究BMI小于24的时候什么时候开始和减重值成正相关。

7.17 调整相关性大的指标的分值。降低相关性小的指标的分值。但是,相关性此时新分数和相关性并没有明显变化,甚至有略微下降。

可能原因是相关性小的指标也是具有意义的,进行T检验发现确实如此(钠盐评分对减重值)。因此,暂时不用调整各指标的分值。

增加三种预测回归模型:岭回归、Lasso回归和弹性网络。

7.18 重新进行预测模型的性能分析,包括:单模型性能分析、Ensemble实验及权重探究实验。

使用ARMA时序模型,分析和预测用户的减重情况。

7.19 增加模型检验方法,整理更新宝妈营报告。

7.23 归档宝妈营报告。整理新模型需要的数据。

7.24 用户BMI值随减肥过程中动态变化更新,利用相似用户的减重均值或中位数作为预测值。

可以在每周添加其他模型例如:随机森林、XGBoost等。

wheat-health's People

Contributors

martinyan623 avatar

Watchers

 avatar

Forkers

ikofan

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.