周四學(xué)習(xí)匯報(bào)

數(shù)據(jù)豐富:

數(shù)據(jù)豐富:

數(shù)據(jù)豐富:

任務(wù)分析圖
日歷

1.11-1.17

原數(shù)據(jù)字段如下:

數(shù)據(jù):

字符串:

session_id 用戶訪問的 sessionID

cookie_id 用戶訪問的 cookieID

visit_time 用戶訪問的時(shí)間

user_id 用戶的 id

visit_url 用戶訪問的 URL

visit_os 用戶訪問的操作系統(tǒng)

browser_name 用戶訪問的游覽器名稱

visit_ip 用戶訪問的訪問 ip

province 用戶訪問的省份

city 用戶訪問的城市

page_id 用戶操作的頁面 ID

goods_id 用戶操作的商店 ID

shop_id 用戶操作的商店 ID

flag_id 用戶操作的標(biāo)識(其中 0 表示瀏覽數(shù)據(jù)、1 表示購買數(shù)據(jù)、2 表示收藏?cái)?shù)據(jù)、3 表示轉(zhuǎn)發(fā)數(shù)據(jù)、4 表示評論數(shù)據(jù))

對于數(shù)據(jù)字段的分析:

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

字段是以逗號做的分割,第一個(gè)的 sessionID,實(shí)際上是由 5 組16進(jìn)制數(shù)組成,其中,第一組是 8 位,在 2、3、4 組都是 4 位,第五組是 12 位,位數(shù)上是 4 的倍數(shù),符合我們計(jì)算機(jī)使用十六進(jìn)制的目的

第二個(gè)的 cookie_id 是瀏覽器自帶的,也是由 3 組16進(jìn)制數(shù)組成。

第三個(gè)時(shí)間,表達(dá)的格式即為 YY-MM-DD hh:mm:ss

第四個(gè)用戶id也是16進(jìn)制數(shù)

其余類推

那么也就是說,16進(jìn)制數(shù)所表示的意思并不能直接作為我們后續(xù)數(shù)據(jù)分析的內(nèi)容,例:我們通過分析地區(qū)發(fā)現(xiàn)廣東地區(qū)經(jīng)常訪問 A 商店,但此時(shí)16進(jìn)制的內(nèi)容如用戶id只被用來區(qū)別訪問的人,此外決定的數(shù)據(jù)是地區(qū)和商店

那么直接按該格式新建數(shù)據(jù)也是可以的,同時(shí),16進(jìn)制與10進(jìn)制此時(shí)的區(qū)別僅作為區(qū)分不同的用戶等,為了方便生產(chǎn)數(shù)據(jù)與表示,我們采取10進(jìn)制數(shù)據(jù)做id標(biāo)識。

所以我們可以在新建數(shù)據(jù)時(shí),直接遵守同樣的格式,修改我們所需要的數(shù)據(jù)項(xiàng),如,同一個(gè)人在不同的商店里購買了不同的商品,但其用戶id等均不需要發(fā)生變化。

所以我們將我們的操作從豐富原數(shù)據(jù)變成了新建1千萬條數(shù)據(jù)。

因?yàn)樾陆ㄓ脩粜枰S機(jī)的字段比要新建商品隨機(jī)的字段要多的多,所以我們盡量以少新建用戶,多新建商品為主

因?yàn)樯唐菲鋵?shí)只是以數(shù)字為主,id也是以數(shù)字為主,那么直接開始隨機(jī)也是可以的

因?yàn)閿?shù)據(jù)量過大,變量一旦占用內(nèi)存過多,會(huì)報(bào)出 OutOfMemoryError 錯(cuò)誤,為了避免報(bào)錯(cuò)也為了讓我們的項(xiàng)目進(jìn)行下去。

所以我們刪除了一些在后續(xù)數(shù)據(jù)分析并不會(huì)用到的字段,如 cookieId,該字段只是為了記錄用戶的操作日志,但這次項(xiàng)目中我們不需要用到。

同理,在后續(xù)我們需要用到的時(shí)候,可以在數(shù)據(jù)分析的相關(guān)程序里添加上我們所需要的相關(guān)功能。

新的字段如下:

visit_time 用戶訪問的時(shí)間

user_id 用戶的id

browser_name 用戶訪問的瀏覽器名稱

city 用戶訪問的城市

page_id 用戶操作的頁面ID

goods_id 用戶操作的商店ID

shop_id 用戶操作的商品ID

flag_id 用戶操作的標(biāo)識

有用的數(shù)據(jù)能夠提供很多很多的信息,而無用的數(shù)據(jù)只會(huì)徒增工作量以及增加存儲負(fù)擔(dān),因此,我們盡量精簡掉字段。

因?yàn)閿?shù)據(jù)量龐大,如果單純的使用數(shù)組來存儲,統(tǒng)一輸出的話,一定會(huì)帶來大量的內(nèi)存占用,甚至可能會(huì)因?yàn)閮?nèi)存的問題。

導(dǎo)致無法達(dá)到想要的結(jié)果。

但是我們可以通過只使用一個(gè)單一變量,在每一次的循環(huán)里,我們就輸出一次數(shù)據(jù),然后將其存儲進(jìn)文件內(nèi)。

單一的數(shù)據(jù)已經(jīng)能夠生成出來了。

其案例代碼如下:

import java.util.Date;

import java.text.*;

import java.util.Random;

import java.lang.Math;

public class test {

public static void main(String args[]){

    // 次數(shù),該變量決定了創(chuàng)建的數(shù)據(jù)量多少

    int count = 0;

    // 開始循環(huán)

    while (count < 2){

        generate(count);

        count++;

    }

}

// 在這里面開始制造數(shù)據(jù)

static void generate(int count){

    // 制造時(shí)間數(shù)據(jù)

    // 初始化 Date 對象

    Date date = new Date();

    // 定義成用戶需要的格式

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

    // 賦值

    String visit_time = ft.format(date);

    // 輸出

    System.out.println("用戶訪問的時(shí)間為:" + visit_time);

    // 制造 ID 數(shù)據(jù)

    int user_id = count;

    System.out.println("用戶的id為:"+ user_id);

    // 制造瀏覽器數(shù)據(jù)

    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("出錯(cuò)了,請注意!");

    }

    // 制造城市數(shù)據(jù)

    int city_num = (int)(i*)

    String[] city = new String[

        "河南省,鄭州市","河南省,洛陽市","河南省,焦作市","河南省,商丘市","河南省,信陽市","河南省,周口市",

        "河南省,鶴壁市","河南省,安陽市","河南省,濮陽市","河南省,駐馬店市","河南省,南陽市","河南省,開封市",

        "河南省,漯河市","河南省,許昌市","河南省,新鄉(xiāng)市","河南省,濟(jì)源市","河南省,靈寶市","河南省,偃師市",

        "河南省,鄧州市","河南省,登封市","河南省,三門峽市","河南省,新鄭市","河南省,禹州市","河南省,鞏義市",

        "河南省,永城市","河南省,長葛市","河南省,義馬市","河南省,林州市","河南省,項(xiàng)城市","河南省,汝州市",

        "河南省,滎陽市","河南省,平頂山市","河南省,衛(wèi)輝市","河南省,輝縣市","河南省,舞鋼市","河南省,新密市",

        "河南省,孟州市","河南省,沁陽市","河南省,郟縣"

    ];

    // 制造操作頁面ID、商品ID以及商店ID數(shù)據(jù)

    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);

    // 制造用戶操作的標(biāo)識數(shù)據(jù)

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

    System.out.println("用戶操作的標(biāo)識為:" + flag_id);

}

}

628561 是最終的用戶id數(shù)最大值,可能是int最大值,我們換成long試一下

接下來是本次項(xiàng)目的重頭戲,豐富后的數(shù)據(jù),代碼案例如下:

import java.util.Date;

import java.text.*;

import java.util.Random;

import java.lang.Math;

public class test {

public static void main(String args[]){

    // 次數(shù),該變量決定了創(chuàng)建的數(shù)據(jù)量多少

    long count = 0;

    // 開始循環(huán)

    /*

    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("下一個(gè)用戶的個(gè)人數(shù)據(jù):");

        double i = Math.random();

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

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

        System.out.println("這位用戶創(chuàng)造了" + num_random_count + "條不同的數(shù)據(jù)");

        generate(count,num_random_count);

        System.out.println("");

        count++;

    }

    //*/

}

// 在這里面開始制造數(shù)據(jù)

static void generate(long count,int num_random_count){

    if (num_random_count == 0){

        num_random_count = 1;

    }

    do{

        // 制造 ID 數(shù)據(jù)

        long user_id = count;

        // 制造瀏覽器數(shù)據(jù)

        double browser_num_random = Math.random();

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

        // 制造城市數(shù)據(jù)

        double city_num_random = Math.random();

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

        String[] city_char = {

            "河南省,鄭州市","河南省,洛陽市","河南省,焦作市","河南省,商丘市","河南省,信陽市","河南省,周口市",

            "河南省,鶴壁市","河南省,安陽市","河南省,濮陽市","河南省,駐馬店市","河南省,南陽市","河南省,開封市",

            "河南省,漯河市","河南省,許昌市","河南省,新鄉(xiāng)市","河南省,濟(jì)源市","河南省,靈寶市","河南省,偃師市",

            "河南省,鄧州市","河南省,登封市","河南省,三門峽市","河南省,新鄭市","河南省,禹州市","河南省,鞏義市",

            "河南省,永城市","河南省,長葛市","河南省,義馬市","河南省,林州市","河南省,項(xiàng)城市","河南省,汝州市",

            "河南省,滎陽市","河南省,平頂山市","河南省,衛(wèi)輝市","河南省,輝縣市","河南省,舞鋼市","河南省,新密市",

            "河南省,孟州市","河南省,沁陽市","河南省,郟縣"

        };

        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("出錯(cuò)了,請注意!");

            }

            // 制造時(shí)間數(shù)據(jù)

            // 初始化 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("用戶訪問的時(shí)間為:" + visit_time);

            // 制造操作頁面ID、商品ID以及商店ID數(shù)據(jù)

            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);

            // 制造用戶操作的標(biāo)識數(shù)據(jù)

            double flag_id_num_random = Math.random();

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

            System.out.println("用戶操作的標(biāo)識為:" + flag_id);

        }

    } while(false);

}

}

實(shí)例輸出

參考文獻(xiàn): 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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 為什么學(xué)習(xí)Python? 通過什么途徑學(xué)習(xí)的Python? 上網(wǎng)收集視頻,資料 關(guān)注公證號 買教程,書籍 Pyth...
    130920閱讀 1,415評論 0 0
  • 1, 這是技術(shù)是什么? --java是什么?一門編程語言.2, 這個(gè)技術(shù)有什么用? --java有什么用? 能夠編...
    苗超閱讀 2,981評論 0 10
  • 開發(fā)中用到的單詞 Java 常用類以及它的用法 character 類: isLetter():判斷是不是字母 i...
    YancyJiang閱讀 1,285評論 0 0
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)、焦點(diǎn)、注意力、語言聯(lián)想、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會(huì)...
    Jenaral閱讀 5,979評論 0 5
  • 昨天,在回家的路上,坐在車?yán)镉圃沼圃盏乜粗摹度龉衬墓适隆?,我被里面的?nèi)容深深吸引住了,盡管上學(xué)時(shí)...
    夜闌曉語閱讀 3,940評論 2 9

友情鏈接更多精彩內(nèi)容