1. Trang chủ
  2. » Luận Văn - Báo Cáo

Khai phá dư liệu data mining

46 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Báo Cáo Môn Khai Phá Dữ Liệu Đề tài: Nghiên c u lớp toán luật kết hợp lãnh vực khai phá liệu Nghiên c u sở lý thuyết họ giải thuật Apriori Viết ch ơng trình Demo GVHD: Tr ơng Quang Hải Nhóm thực hiện: - Phạm Nhật Trí 51004200 - Nguyễn Bình Long 51004190 - Phạm Nguyễn Đ c D ơng 50900483 Mục lục Trang Giới thiệu Ch ơng Tổng Quan Về Khai Phá Dữ Liệu 1.1 Khai phá liệu .4 1.1.1 Khái niệm 1.1.2 Các b ớc trình khai phá 1.1.3 ng dụng c a khai phá liệu 1.2 Tiền xử lý liệu .6 1.2.1 Dữ liệu .6 1.2.2 Làm liệu (data cleaning) .8 1.2.3 Tích hợp liệu (data integration) 1.2.4 Biến đổi liệu (data transformation) 10 1.2.5 Thu giảm liệu (data reduction) 11 1.3 Ph ơng pháp Dự báo .11 1.3.1 Giới thiệu Dự báo 11 1.3.2 Tổng quan Hồi qui 12 1.3.3 Hồi qui tuyến tính 12 1.3.4 Hồi qui phi tuyến .13 1.4 Ph ơng pháp Phân loai 14 1.4.1 Giới thiệu Phân loại 14 1.4.2 Phân loại liệu với định .14 1.4.3 Phân loại liệu với mạng Bayesian 17 1.4.4 Phân loại liệu với mạng Neural 17 1.5 Ph ơng pháp Gom cụm 18 1.5.1 Giới thiệu Gom cụm 18 1.5.2 Ph ơng pháp phân cấp 19 1.5.3 Ph ơng pháp phân hoạch .20 1.6 Ph ơng pháp khai phá luật kết hợp .21 1.6.1 Giới thiệu luật kết hợp .21 1.6.2 Phát luật kết hợp 22 1.6.3 Các chiến l ợc sinh tập th ng xuyên 25 1.6.4 Giải thuật FP-Growth 25 Ch ơng ng dụng c a khai phá liệu 27 2.1 Hỗ trợ định nhập kho siêu thị 27 2.1.1 Giới thiệu toán 27 2.1.2 Đánh giá c a thầy sau giới thiệu toán .28 2.2.Tiếp thị chéo 28 2.2.1.Giới thiệu toán 28 Ch ơng Giải thuật Apriori 29 3.1 Giải thuật Apriori 29 3.2 Đánh giá giải thuật Apriori 33 3.3 Các cải tiến c a giải thuật Apriori 34 Ch ơng Demo giải thuật Apriori 34 4.1 Hiện thực giải thuật Apriori 34 4.2 H ớng dẫn sữ dụng demo 38 4.2.1.Cài đặt môi tr 4.2.2 ng 38 ng dụng 39 Ch ơng Đánh giá tổng kết 44 5.1 u điểm 44 5.2 Nh ợc điểm 44 Tài liệu tham khảo 45 Giới thiệu Bài báo cáo đ ợc soạn để tổng hợp lại vấn đề mà nhóm chúng em đư tìm hiểu q trình báo cáo hàng tuần Về phần cấu trúc nhóm chúng em tái cấu trúc lại nội dung báo cáo, chúng em không soạn dựa theo nội dung báo cáo hàng tuần mà trình bày dựa theo nội dung dạng khối thống để vừa giúp chúng em ơn lại kiến th c cách có hệ thống, bên cạnh cịn giúp q trình theo dõi nội dung dễ dàng Báo cáo giới thiệu khâu tiền xử lý để làm liệu tr ớc tiến hành khai phá, sau bốn giải thuật đ ợc học ch ơng trình đ ợc giới thiệu, tiếp đến giới thiệu số ng dụng mà khai phá liệu áp dụng thực tế, tiếp đến giới thiệu giải thuật Apriori cải tiến c a nó, cuối giới thiệu Demo giải thuật Apriori Trong trình soạn giới hạn th i gian lực nên dù đư cố gắng hết s c khơng tránh khỏi sai sót, mong thầy thơng cảm Ch ơng Tổng Quan Về Khai Phá Dữ Liệu Trong ch ơng này, trình bày khái niệm c a khai phá liệu, b ớc c a trình khám phá ng dụng c a Tiếp theo thao tác với liệu - Tiền xử lý liệu Sau ph ơng pháp khai phá liệu thuật giải c a chúng 1.1 Khai phá liệu 1.1.1 Khái niệm Khai phá liệu (data mining) hay Khám phá tri th c từ liệu (knowledge discovery from data) việc trích rút đ ợc mẫu tri th c quan trọng (không tầm th ng, ẩn, ch a đ ợc biết đến hữu ích) thừ l ợng liệu (rất) lớn Các tên gọi khác: - Khám phá tri th c s databases KDD) liệu (Knowledge discovery in - Trích rút tri th c (knowledge extraction) - Phân tích mẫu/dữ liệu (data/pattern analysis) -… 1.1.2 Các b ớc trình khai phá Quá trình đ ợc thực qua b ớc: 1- Tìm hiểu lĩnh vực c a tốn ( ng dụng): Các mục đích c a toán, tri th c cụ thể c a lĩnh vực 2- Tạo nên (thu thập) tập liệu phù hợp 3- Làm tiền xử lý liệu 4- Giảm kích th c c a liệu, chuyển đổi liệu: Xác định thuộc tính quan trọng, giảm số chiều (số thuộc tính), biểu diễn bất biến 5- Lựa chọn ch c khai phá liệu: Phân loại, gom cụm, dự báo, sinh luật kết hợp 6- Lựa chọn/ Phát triển (các) giải thuật khai phá liệu phù hợp 7- Tiến hành khai phá liệu 8- Đánh giá mẫu thu đ ợc biểu diễn tri th c: Hiển thị hóa, chuyển đổi, bỏ mẫu d thừa,… 9- Sữ dụng tri th c đ ợc khai phá Quá trình khám phá tri th c theo cách nhìn c a giới nghiên c u hệ thống liệu kho liệu trình khám phá tri th c Hình 1.1.2_Quá trình khai phá tri thức Chuẩn bị liệu (data preparation), bao gồm trình làm liệu (data cleaning), tích hợp liệu (data integration), chọn liệu (data selection), biến đổi liệu (data transformation) Khai thác liệu (data mining): xác định nhiệm vụ khai thác liệu lựa chọn kỹ thuật khai thác liệu Kết cho ta nguồn tri th c thô Đánh giá (evaluation): dựa số tiêu chí tiến hành kiểm tra lọc nguồn tri th c thu đ ợc Triển khai (deployment) Quá trình khai thác tri th c khơng q trình từ b ớc đến b ớc cuối mà q trình lặp có quay tr lại b ớc đư qua 1.1.3 ng dụng c a khai phá liệu Kinh tế - ng dụng kinh doanh, tài chính, tiếp thị bán hàng, bảo hiểm, th ơng mại, ngân hàng, … Đ a báo cáo giàu thơng tin; phân tích r i ro tr ớc đ a chiến l ợc kinh doanh, sản xuất; phân loại khách hàng từ phân định thị tr ng, thị phần; … Khoa học: Thiên văn học – dự đoán đ ng thiên thể, hành tinh, …; Công nghệ sinh học – tìm gen mới, giống mới, …; … Web: cơng cụ tìm kiếm 1.2 Tiền xử lý liệu Quá trình tiền xử lý liệu, phải nắm đ ợc dạng liệu, thuộc tính, mơ tả c a liệu thao tác Sau tiếp hành giai đoạn chính: làm sạch, tích hợp, biến đổi, thu giảm liệu 1.2.1 Dữ liệu a) Tập liệu - Một tập liệu (dataset) tập hợp đối t ợng (object) thuộc tính c a chúng - Mỗi thuộc tính (attribute) mô tả đặc điểm c a đối t ợng ‰ Ví dụ: Các thuộc tính Refund, Marital Status , Taxable Income, Cheat Hình 1.2.1_Ví dụ dataset b) Các kiểu tập liệu - Bản ghi (record): Các ghi c s liệu quan hệ Ma trận liệu Biểu diễn văn Hay liệu giao dịch.„ - Đồ thị (graph): World wide web Mạng thông tin, mạng xã hội - Dữ liệu có trật tự: Dữ liệu khơng gian (ví dụ: đồ) Dữ liệu th i gian (ví dụ: time-series data) Dữ liệu chuỗi (ví dụ: chuỗi giao dịch) c) Các kiểu giá trị thuộc tính: - Kiểu định danh/chuỗi (norminal): khơng có th tự Ví dụ: Các thuộc tính nh : Name, Profession, … - Kiểu nhị phân (binary): tr ng hợp đăc biệt c a kiểu định danh Tập giá trị gồm có giá trị (Y/N, 0/1, T/F) - Kiểu có th tự (ordinal): Integer, Real, … -lấy giá trị từ tập có th tự giá trị Ví dụ: Các thuộc tính lấy giá trị số nh : Age, Height ,… Hay lấy tập xác định, thuộc tính Income lấy giá trị từ tập {low, medium, high} Kiểu thuộc tính r i rạc (discrete-valued attributes): tập giá trị c a tập hữu hạn Bao gồm thuộc tính có kiểu giá trị số nguyên, nhị phân Kiểu thuộc tính liên tục (continuous-valued attributes):Các giá trị làsố thực d) Các đặc tính mơ tả c a liệu: - Giúp hiểu rõ liệu có đ ợc: chiều h ớng chính/trung tâm, biến thiên, phân bố - Sự phân bố c a liệu (data dispersion): + Giá trị cực tiểu/cực đại (min/max) + Giá trị xuất nhiều (mode) + Giá trị trung bình (mean) + Giá trị trung vị (median) + Sự biến thiên (variance) độ lệch chuẩn (standard deviation) + Các ngoại lai (outliers) 1.2.2 Làm liệu (data cleaning) Đối với liệu thu thập đ ợc, cần xác định vấn đề ảnh h ng cho khơng B i vì, liệu khơng (có ch a lỗi, nhiễu, khơng đầy đ , có mâu thuẫn) tri th c khám phá đ ợc bị ảnh h ng không đáng tin cậy, dẫn đến định khơng xác Do đó, cần gán giá trị thuộc tính cịn thiếu; sửa chữa liệu nhiễu/lỗi; xác định loại bỏ ngoại lai (outliers); giải mâu thuẫn liệu a) Các vấn đề c a liệu Trên thực liệu thu ch a nhiễu, lỗi, khơng hồn chỉnh, có mâu thuẫn - Khơng hồn chỉnh (incomplete): Thiếu giá trị thuộc tính thiếu số thuộc tính Ví dụ: salary = th - Nhiễu/lỗi (noise/error): Ch a đựng lỗi mang giá trị bất ng Ví dụ: salary = “-525” , giá trị c a thuộc tính khơng thể số âm - Mâu thuẫn (inconsistent): Ch a đựng mâu thuẫn (không thống nhất) Ví dụ: salary = “abc” , khơng phù hợp với kiểu liệu số c a thuộc tính salary b) Nguồn gốc/lý c a liệu không - Khơng hồn chỉnh (incomplete): Do giá trị thuộc tính khơng có (not available) th i điểm đ ợc thu thập Hoặc vấn gây b i phần c ng, phần mềm, ng i thu thập liệu - Nhiễu/lỗi (noise/error): Do việc thu thập liệu, hoăc việc nhập liệu, việc truyền liệu - Mâu thuẫn (inconsistent): Do liệu đ ợc thu thập có nguồn gốc khác Hoặc vi phạm ràng buộc (điều kiện) thuộc tính c) Giải pháp thiếu giá trị c a thuộc tính - Bỏ qua ghi có thuộc tính thiếu giá trị Th ng áp dụng toán phân lớp Hoặc tỷ lệ % giá trị thiếu thuộc tính lớn - Một số ng i đảm nhiệm việc kiểm tra gán giá trị thuộc tính cịn thiếu, nh ng địi hỏi chi phí cao tẻ nhạt - Gán giá trị tự động b i máy tính: + Gán giá trị mặc định + Gán giá trị trung bình c a thuộc tính + Gán giá trị xảy – dựa theo ph ơng pháp xác suất d) Giải pháp liệu ch a nhiễu/lỗi - Phân khoảng (binning): Sắp xếp liệu phân chia thành khoảng (bins) có tần số xuất giá trị nh Sau đó, khoảng liệu đ ợc biểu diễn trung bình, trung vị, giới hạn … c a giá trị khoảng - Hồi quy (regression): Gắn liệu với hàm hồi quy - Phân cụm (clustering): Phát loại bỏ ngoại lai (sau đư xác định cụm) - Kết hợp máy tính kiểm tra c a ng i: Máy tính tự động phát giá trị nghi ng Các giá trị đ ợc ng i kiểm tra lại 1.2.3 Tích hợp liệu (data integration) Tích hợp liệu trình trộn liệu từ nguồn khác vào kho liệu có sẵn cho q trình khai phá liệu Khi tích hợp cần xác định thực thể từ nhiều nguồn liệu để tránh d thừa liệu Ví dụ: Bill Clinton ≡ B.Clinton Việc d thừa liệu th ng xuyên xảy ra, tích hợp nhiều nguồn B i thuộc tính (hay đối t ợng) mang tên khác nguồn (cơ s liệu) khác Hay liệu suy đ ợc nh thuộc tính bảng đ ợc suy từ thuộc tính bảng khác Hay trùng lắp liệu Các thuộc tính d thừa bị phát phân tích t ơng quan chúng Ví dụ: Loại bỏ dựa độ hỗ trợ minsup = Giải thuật Apriori: 1- Sinh tất tập mục th ng xuyên m c 1(frequent 1-itemsets) 2- Gán k =1 3- Lặp lại, khơng có thêm tập mục th ng xun 3.1- Từ tập mục th ng xuyên m c k, sinh tập mục m c (k+1) cần xét th 3.2- Loại bỏ tập mục m c k+1 ch a tập tập mục khơng ng xun m c k 3.3- Tính độ hỗ trợ c a tập mục m c k+1, cách duyệt qua tất giao dịch 3.4- Loại bỏ tập mục không th 3.5- Thu đ ợc tập mục th ng xuyên m c k+1 ng xuyên m c k+1 31 Ví dụ: Với minsup = [1] 4- Với tập mục th không rỗng ng (I) thu đ ợc, sinh tất tập (B) 5- Với tập B, sinh luật kết hợp: B (I-B) 6- Với luật kết hợp, duyệt qua tất giao dịch Chọn luật có độ tin cậy(c) ≥ minconf Ví dụ: với I= {A1,A2,A5} Các tập c a I: {A1}, {A2}, {A5}, {A1,A2},{A1,A5},{A2,A5} Có luật kết hợp sau: {A1} => {A2,A5}; {A2} =>{A1,A5}; {A5} =>{A1,A2}; {A1,A2} =>{A5}; {A1,A5} =>{A2}; {A2,A5} => {A1} Với frequent itemsets I ={B,C,E}, min_conf =80% Ta có luật kết hợp là:{B,C} =>{E}; {C,E} =>{B} 32 3.2 Đánh giá giải thuật Apriori Các yếu tố ảnh h ng: - Lựa chọn giá trị ng ỡng minsup: Giá trị minsup thấp sinh nhiều tập mục th ng xuyên Điều làm tăng số l ợng tập mục phải xét - Số l ợng mục s liệu (các giao dịch): Cần thêm nhớ để l u giá trị độ hỗ trợ với mục Nếu số l ợng mục(tập mục m c 1) th ng xun tăng lên chi phí chi phí I/O (duyệt giao dịch) tăng - Kích th ớc c a s liệu (các giao dịch): Giải thuật phải duyệt s liệu nhiều lần, chi phí tính tốn c a Apriori tăng lên số l ợng giao dịch tăng lên - Kích th ớc trung bình c a giao dịch: Khi kích th ớc (số l ợng mục) trung bình c a giao dịch tăng lên, độ dài tối đa c a tập mục th ng xuyên tăng So sánh giải thuật Apriori giải thuật FP-Growth Biểu đồ: Độ hỗ trợ - Th i gian chạy 33 Biểu đồ: Số l ợng giao dịch - Th i gian chạy 3.3 Các cải tiến c a giải thuật Apriori Kỹ thuật dựa bảng băm (hash-based technique): Một k-itemset ng với hashing bucket count nhỏ minimum support threshold không frequent itemset Giảm giao dịch (transaction reduction): Một giao dịch không ch a frequent k-itemset khơng cần kiểm tra lần sau (cho k+1-itemset) Phân hoạch (partitioning): Một itemset phải frequent phân hoạch frequent toàn tập liệu Lấy mẫu (sampling): Khai phá tập liệu cho tr ớc với trị support threshold nhỏ cần ph ơng pháp để xác định tính tồn diện (completeness) Đếm itemset động (dynamic itemset couting): Chỉ thêm itemset dự tuyển tất tập c a chúng đ ợc dự đoán frequent Ch ơng Demo giải thuật Apriori 4.1 Hiện thực giải thuật Apriori Hiện thực giải thuật Apriori cải tiến dựa cấu trúc liệu bảng băm giảm giao dịch Tất liệu đ ợc truy xuất trực tiếp từ database 34 a) Ngôn ngữ công cụ sử dụng Database sử dụng Mysql Ngôn ngữ sử dụng : Java Kết nối database: sử dụng th viện mysql-connector-java-5.1.14-bin.jar Giao diện: sử dụng th viện Swing b) Giải Thích Code Ch ơng trình đ ợc viết với class chính, sau mơ tả cho class: 1-Class “node”: ch a thông tin key, count, next đ ợc dùng để l u thông tin c a item tập item 2-Class “pushData”: class có hàm: getInput với tham số đầu vào username, password c a database, file dùng để import vào database 3-Class “getHash”: Đây class chính, ch a hàm con, thực thi giải thuật apriori cải tiến - Function getNameData: + Input: Namedb: tên database cần lấy danh sách database User password c a database + Ouput: Trả danh sách database có sever - Function getInput: + Input: Data: tên c a database cần lấy data Username password c a database + Output: Trả mảng node item count c a item sau đư quét toàn database 35 - Function calculateInit: + Input: C: mảng node key count c a key Minsub: độ hỗ trợ mà ng i dùng nhập + Output: Trả danh sách node có độ hỗ trợ lớn minSub - Function genrateTableHash: + Input: L: danh sách node mà node với key item Count: th tự tập c a c a L k+1 đ ợc sinh từ tập Ck Vì key item => count = 2; + Output: Trả bảng băm với key tập th ng xuyên c a item đ ợc ngăn cách dấu “,”, vd ( 123,987) Và node ch a key, count c a key đó, đ ợc kh i tạo - Function GenrateTableHash_2 + Input: L: danh sách node mà node với key gồm nhiều item Count: th tự tập c a c a L k+1 đ ợc sinh từ tập Ck Vì key gồm nhiều item => count > 2; + Output: Trả bảng băm với key tập th ng xuyên c a item đ ợc ngăn cách dấu “,”, vd ( 123,987) Và node ch a key, count c a key đó, đ ợc kh i tạo - Function CompareData: + Input: hasTable: bảng băm với key th Count: th tự c a tập L ng xuyên, value node 36 + Output: Trả danh sách node từ bảng băm, sau đư quét qua database - Function GenrateListPartitions: + Input: L: danh sách node, với node tập th ng xuyên + Output: Trả danh sách c a danh sách, ch a luật đ ợc sinh ra, nh ng ch a so sánh với độ hỗ trợ - Function calculateRule: + Input: L: danh sách c a danh sách, ch a luật ch a đ ợc so sánh với độ hỗ trợ MinCon: độ hỗ trợ tối thiểu c a luật + Output: Trả danh sách c a sanh sách, với danh sách luật thỏa mưn độ hỗ trợ tối thiểu 4-Class “AppAprioriImprove”: class ch a giao diện đồ họa, để thao tác với ng i dùng, gồm kiện: - jButton4ActionPerformed: + Input: username password c a database c a ng i dùng + Output: server Nếu kết nối thành cơng, danh sách database có combobox c a name Data Kết nối lỗi, thông báo, yêu cầu ng i dùng nhập lại - jButton2ActionPerformed: + Input: 37 Username password c a database getFile: tên file cần import vào database NameData: tên database cần import vào + Output: Import liệu vào database thành công , xuất thông báo import to database successful - jButton5ActionPerformed : t ơng tự nh kiện jButton4ActionPerformed - jButton6ActionPerformed: + Input: Username password c a ng nameData: cần khai phá i dùng Min Support Min Confidence ng i dùng nhập vào + Output: Xuất tập th ng xuyên thỏa độ MinSup, luật thỏa MinCon 4.2 H ớng dẫn sữ dụng demo 4.2.1.Cài đặt môi tr ờng Cài đặt jdk c a java, download từ : http://www.oracle.com/technetwork/java/javase/downloads/index.html Cài đặt MySQL, giới thiệu dung Wamp Server, download từ : http://www.wampserver.com/en/ Sử dụng th viện kết nối database MySQL: mysql-connector-java-5.1.14bin.jar Sử dụng th viện tổ hợp tập từ danh sách : combinatoricslib2.0.jar 38 4.2.2 ng dụng a) Import Data từ File liệu Kh i chạy file AppAprioriImprove.jar, thị giao diện: Hình 4.2.2_1 Chọn Tab “import Data” , nhập user name password c a Database Nếu User name password sai, báo lỗi connect to database, băt ng i dùng nhập lại Hình 4.2.2_2 39 Nhập Username Password, danh sách database Hình 4.2.2_3 Chọn File, sau nhấn Import, import file vào database, với bảng “Transaction”, Có File Log Hình 4.2.2_4 40 Export log file “E:\logPushToData.txt” Đây đ ng dẫn cố định, máy khơng có ổ đĩa E:\, bị lỗi, xin vui long restart lại App b) Chạy Giải Thuật Apriori cải tiến, với Database vừa import Chọn Tab Apriori Improve Nhập User name password t ơng tự nh import data Chọn Data để chạy Giải thuật, l u ý Data phải ch a bảng “Transaction” Hình 4.2.2_5 Nhập Min Support kiểu số nguyên lớn 0, Min Confidence kiểu số thực với < MinCon < Nếu nhập sai, ch ơng trình báo lỗi, bắt bạn phải nhập lại 41 Hình 4.2.2_6 Hình 4.2.2_7 42 Sau nhập input, chọn Start Ch ơng trình chạy xuất kết Hình 4.2.2_8 Nếu muốn Export kết quả, chọn “Export Result”, ch ơng trình mặt định l u file kết vào “E:\Result_GenRule.txt” 43 Ch ơng Đánh giá tổng kết 5.1 u điểm Hiểu thực thành công giải thuật Apriori ng dụng đư thực đ ợc phần cải tiến c a giải thuật cấu trúc liệu bảng băm thực giảm số giao dịch, làm giảm th i gian chạy c a giải thuật Đồng th i để tăng tốc độ chạy đư l u toàn liệu vào database Mọi truy xuất điều thực trực tiếp từ database ng dụng có giao diện trực quan, dễ sử dụng 5.2 Nh ợc điểm Ch a tìm đ ợc cách kiểm tra tính đắn c a luật kết hợp, kết c a ng dụng Ch a thực việc loại bỏ luật kết hợp khơng có tính khả dụng thực tế ng dụng ch a thực đ ợc trạng thái xử lý liệu trạng thái trực quan cho ng i sử dụng dạng 44 Tài liệu tham khảo - Tập slide giảng môn Data Mining , khoa Khoa học & Máy tính, tr Đh Bách Khoa TP Hồ Chí Minh - Tập slide giảng môn Khai phá Dữ liệu, Nguyễn Nhật Quang, tr Bách Khoa Hà Nội ng ng Đh - Ebook: Jiawei Han, Micheline Kamber, “Data Mining: Concepts and Techniques”, Third Edition, Morgan Kaufmann Publishers - [1]: http://bis.net.vn/forums/t/389.aspx - http://en.wikipedia.org/wiki/Apriori_algorithm 45 ... cần lấy danh sách database User password c a database + Ouput: Trả danh sách database có sever - Function getInput: + Input: Data: tên c a database cần lấy data Username password c a database... theo tiêu chí - D? ??a mật độ (density-based): d? ??a connectivity and density functions - D? ??a l ới (grid-based): d? ??a a multiple-level granularity structure - D? ??a mơ hình (model-based): mơ hình giả... name Data Kết nối lỗi, thông báo, yêu cầu ng i d? ?ng nhập lại - jButton2ActionPerformed: + Input: 37 Username password c a database getFile: tên file cần import vào database NameData: tên database

Ngày đăng: 11/12/2022, 21:45

w