周四学习汇报

数据丰富:

数据丰富:

数据丰富:

任务分析图
日历

1.11-1.17

原数据字段如下:

数据:

字符串:

session_id 用户访问的 sessionID

cookie_id 用户访问的 cookieID

visit_time 用户访问的时间

user_id 用户的 id

visit_url 用户访问的 URL

visit_os 用户访问的操作系统

browser_name 用户访问的游览器名称

visit_ip 用户访问的访问 ip

province 用户访问的省份

city 用户访问的城市

page_id 用户操作的页面 ID

goods_id 用户操作的商店 ID

shop_id 用户操作的商店 ID

flag_id 用户操作的标识(其中 0 表示浏览数据、1 表示购买数据、2 表示收藏数据、3 表示转发数据、4 表示评论数据)

对于数据字段的分析:

6e617d86-7471-4d00-b0d8-7aea47dc7c76,6e617d86-7471-4d00,2016-12-10 09:04:04,2bd50cbd-d9202,15,female,i.jsp,Unix,360,222.21.9.167,上海,上海,page_7,goods_87,shop_749,2

字段是以逗号做的分割,第一个的 sessionID,实际上是由 5 组16进制数组成,其中,第一组是 8 位,在 2、3、4 组都是 4 位,第五组是 12 位,位数上是 4 的倍数,符合我们计算机使用十六进制的目的

第二个的 cookie_id 是浏览器自带的,也是由 3 组16进制数组成。

第三个时间,表达的格式即为 YY-MM-DD hh:mm:ss

第四个用户id也是16进制数

其余类推

那么也就是说,16进制数所表示的意思并不能直接作为我们后续数据分析的内容,例:我们通过分析地区发现广东地区经常访问 A 商店,但此时16进制的内容如用户id只被用来区别访问的人,此外决定的数据是地区和商店

那么直接按该格式新建数据也是可以的,同时,16进制与10进制此时的区别仅作为区分不同的用户等,为了方便生产数据与表示,我们采取10进制数据做id标识。

所以我们可以在新建数据时,直接遵守同样的格式,修改我们所需要的数据项,如,同一个人在不同的商店里购买了不同的商品,但其用户id等均不需要发生变化。

所以我们将我们的操作从丰富原数据变成了新建1千万条数据。

因为新建用户需要随机的字段比要新建商品随机的字段要多的多,所以我们尽量以少新建用户,多新建商品为主

因为商品其实只是以数字为主,id也是以数字为主,那么直接开始随机也是可以的

因为数据量过大,变量一旦占用内存过多,会报出 OutOfMemoryError 错误,为了避免报错也为了让我们的项目进行下去。

所以我们删除了一些在后续数据分析并不会用到的字段,如 cookieId,该字段只是为了记录用户的操作日志,但这次项目中我们不需要用到。

同理,在后续我们需要用到的时候,可以在数据分析的相关程序里添加上我们所需要的相关功能。

新的字段如下:

visit_time 用户访问的时间

user_id 用户的id

browser_name 用户访问的浏览器名称

city 用户访问的城市

page_id 用户操作的页面ID

goods_id 用户操作的商店ID

shop_id 用户操作的商品ID

flag_id 用户操作的标识

有用的数据能够提供很多很多的信息,而无用的数据只会徒增工作量以及增加存储负担,因此,我们尽量精简掉字段。

因为数据量庞大,如果单纯的使用数组来存储,统一输出的话,一定会带来大量的内存占用,甚至可能会因为内存的问题。

导致无法达到想要的结果。

但是我们可以通过只使用一个单一变量,在每一次的循环里,我们就输出一次数据,然后将其存储进文件内。

单一的数据已经能够生成出来了。

其案例代码如下:

import java.util.Date;

import java.text.*;

import java.util.Random;

import java.lang.Math;

public class test {

public static void main(String args[]){

    // 次数,该变量决定了创建的数据量多少

    int count = 0;

    // 开始循环

    while (count < 2){

        generate(count);

        count++;

    }

}

// 在这里面开始制造数据

static void generate(int count){

    // 制造时间数据

    // 初始化 Date 对象

    Date date = new Date();

    // 定义成用户需要的格式

    SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");

    // 赋值

    String visit_time = ft.format(date);

    // 输出

    System.out.println("用户访问的时间为:" + visit_time);

    // 制造 ID 数据

    int user_id = count;

    System.out.println("用户的id为:"+ user_id);

    // 制造浏览器数据

    double i = Math.random();

    int num = (int)(i*5);

    switch (num) {

        case 0 :

        System.out.println("用户的浏览器为:Chrome");

        break;

        case 1 :

        System.out.println("用户的浏览器为:360");

        break;

        case 2 :

        System.out.println("用户的浏览器为:IE");

        break;

        case 3 :

        System.out.println("用户的浏览器为:Firefox");

        break;

        case 4 :

        System.out.println("用户的浏览器为:Opera");

        break;

        case 5 :

        System.out.println("用户的浏览器为:Safari");

        break;

        default :

        System.out.println("出错了,请注意!");

    }

    // 制造城市数据

    int city_num = (int)(i*)

    String[] city = new String[

        "河南省,郑州市","河南省,洛阳市","河南省,焦作市","河南省,商丘市","河南省,信阳市","河南省,周口市",

        "河南省,鹤壁市","河南省,安阳市","河南省,濮阳市","河南省,驻马店市","河南省,南阳市","河南省,开封市",

        "河南省,漯河市","河南省,许昌市","河南省,新乡市","河南省,济源市","河南省,灵宝市","河南省,偃师市",

        "河南省,邓州市","河南省,登封市","河南省,三门峡市","河南省,新郑市","河南省,禹州市","河南省,巩义市",

        "河南省,永城市","河南省,长葛市","河南省,义马市","河南省,林州市","河南省,项城市","河南省,汝州市",

        "河南省,荥阳市","河南省,平顶山市","河南省,卫辉市","河南省,辉县市","河南省,舞钢市","河南省,新密市",

        "河南省,孟州市","河南省,沁阳市","河南省,郏县"

    ];

    // 制造操作页面ID、商品ID以及商店ID数据

    String page_id = "page_" + count;

    System.out.println("用户操作的页面ID为:" + page_id);

    String goods_id = "goods_" + count;

    System.out.println("用户操作的商品ID为:" + goods_id);

    String shop_id = "shop_" + count;

    System.out.println("用户操作的商店ID为:" + shop_id);

    // 制造用户操作的标识数据

    int flag_id = (int)(i*4);

    System.out.println("用户操作的标识为:" + flag_id);

}

}

628561 是最终的用户id数最大值,可能是int最大值,我们换成long试一下

接下来是本次项目的重头戏,丰富后的数据,代码案例如下:

import java.util.Date;

import java.text.*;

import java.util.Random;

import java.lang.Math;

public class test {

public static void main(String args[]){

    // 次数,该变量决定了创建的数据量多少

    long count = 0;

    // 开始循环

    /*

    while (count < 10000000){

        double i = Math.random();

        int num_random_count = (int)(i*100);

        generate(count,num_random_count);

        count++;

    }

    */

    ///*

    while (count < 2){

        System.out.println("下一个用户的个人数据:");

        double i = Math.random();

        int num_random_count = (int)(i*5);

        //int num_random_count = (int)(i*100);

        System.out.println("这位用户创造了" + num_random_count + "条不同的数据");

        generate(count,num_random_count);

        System.out.println("");

        count++;

    }

    //*/

}

// 在这里面开始制造数据

static void generate(long count,int num_random_count){

    if (num_random_count == 0){

        num_random_count = 1;

    }

    do{

        // 制造 ID 数据

        long user_id = count;

        // 制造浏览器数据

        double browser_num_random = Math.random();

        int browser_num = (int)(browser_num_random*5);

        // 制造城市数据

        double city_num_random = Math.random();

        int city_num = (int)(city_num_random*39);

        String[] city_char = {

            "河南省,郑州市","河南省,洛阳市","河南省,焦作市","河南省,商丘市","河南省,信阳市","河南省,周口市",

            "河南省,鹤壁市","河南省,安阳市","河南省,濮阳市","河南省,驻马店市","河南省,南阳市","河南省,开封市",

            "河南省,漯河市","河南省,许昌市","河南省,新乡市","河南省,济源市","河南省,灵宝市","河南省,偃师市",

            "河南省,邓州市","河南省,登封市","河南省,三门峡市","河南省,新郑市","河南省,禹州市","河南省,巩义市",

            "河南省,永城市","河南省,长葛市","河南省,义马市","河南省,林州市","河南省,项城市","河南省,汝州市",

            "河南省,荥阳市","河南省,平顶山市","河南省,卫辉市","河南省,辉县市","河南省,舞钢市","河南省,新密市",

            "河南省,孟州市","河南省,沁阳市","河南省,郏县"

        };

        String city = city_char[city_num];

        for (;num_random_count > 0;num_random_count--){

            System.out.println("用户的id为:"+ user_id);

            System.out.println("用户访问的城市为:" + city);

            switch (browser_num) {

                case 0 :

                System.out.println("用户的浏览器为:Chrome");

                break;

                case 1 :

                System.out.println("用户的浏览器为:360");

                break;

                case 2 :

                System.out.println("用户的浏览器为:IE");

                break;

                case 3 :

                System.out.println("用户的浏览器为:Firefox");

                break;

                case 4 :

                System.out.println("用户的浏览器为:Opera");

                break;

                case 5 :

                System.out.println("用户的浏览器为:Safari");

                break;

                default :

                System.out.println("出错了,请注意!");

            }

            // 制造时间数据

            // 初始化 Date 对象

            Date date = new Date();

            // 定义成用户需要的格式

            SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:MM:SS");

            // 赋值

            String year = "2020";

            double month_num_random = Math.random();

            int month = ((int)(month_num_random*11)) + 1;

            double day_num_random = Math.random();

            int day = ((int)(day_num_random*29)) + 1;

            double hour_num_random = Math.random();

            int hour = (int)(hour_num_random*23);

            double min_num_random = Math.random();

            int min = (int)(min_num_random*59);

            double second_num_random = Math.random();

            int second = (int)(second_num_random*59);

            String visit_time = year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + second;

            // 输出

            System.out.println("用户访问的时间为:" + visit_time);

            // 制造操作页面ID、商品ID以及商店ID数据

            double page_id_num_random = Math.random();

            int page_id_int = (int)(page_id_num_random*99);

            String page_id = "page_" + page_id_int;

            System.out.println("用户操作的页面ID为:" + page_id);

            double goods_id_num_random = Math.random();

            int goods_id_int = (int)(goods_id_num_random*99);

            String goods_id = "goods_" + goods_id_int;

            System.out.println("用户操作的商品ID为:" + goods_id);

            double shop_id_num_random = Math.random();

            int shop_id_int = (int)(shop_id_num_random*99);

            String shop_id = "shop_" + shop_id_int;

            System.out.println("用户操作的商店ID为:" + shop_id);

            // 制造用户操作的标识数据

            double flag_id_num_random = Math.random();

            int flag_id = (int)(flag_id_num_random*4);

            System.out.println("用户操作的标识为:" + flag_id);

        }

    } while(false);

}

}

实例输出

参考文献: https://zhidao.baidu.com/question/327882154429814525.html

        [https://baike.baidu.com/item/IP%E5%9C%B0%E5%9D%80/150859](https://baike.baidu.com/item/IP%E5%9C%B0%E5%9D%80/150859)

        [https://blog.csdn.net/lihaitao000/article/details/51159562](https://blog.csdn.net/lihaitao000/article/details/51159562)

        [https://www.cnblogs.com/skywang12345/p/3341423.html](https://www.cnblogs.com/skywang12345/p/3341423.html)

        [https://baike.baidu.com/item/%E7%9C%81%E4%BB%BD/1635191?fr=aladdin](https://baike.baidu.com/item/%E7%9C%81%E4%BB%BD/1635191?fr=aladdin)

        [https://mp.weixin.qq.com/s/T1N6N_8UdXVgrUorsPCMpQ](https://mp.weixin.qq.com/s/T1N6N_8UdXVgrUorsPCMpQ)

        [https://www.runoob.com/java/java-date-time.html](https://www.runoob.com/java/java-date-time.html)

        [https://www.runoob.com/java/java-switch-case.html](https://www.runoob.com/java/java-switch-case.html)

        [https://www.runoob.com/python3/python3-tuple.html](https://www.runoob.com/python3/python3-tuple.html)

        [https://www.runoob.com/java/java-loop.html](https://www.runoob.com/java/java-loop.html)

        [https://www.cnblogs.com/My-Cloud/p/4546317.html](https://www.cnblogs.com/My-Cloud/p/4546317.html)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • 为什么学习Python? 通过什么途径学习的Python? 上网收集视频,资料 关注公证号 买教程,书籍 Pyth...
    130920阅读 1,182评论 0 0
  • 1, 这是技术是什么? --java是什么?一门编程语言.2, 这个技术有什么用? --java有什么用? 能够编...
    苗超阅读 2,878评论 0 10
  • 开发中用到的单词 Java 常用类以及它的用法 character 类: isLetter():判断是不是字母 i...
    YancyJiang阅读 671评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,700评论 0 5
  • 昨天,在回家的路上,坐在车里悠哉悠哉地看着三毛的《撒哈拉沙漠的故事》,我被里面的内容深深吸引住了,尽管上学时...
    夜阑晓语阅读 3,777评论 2 9