Archive

Posts Tagged ‘text’

เขียนกราฟด้วยตัวอักษรใน Mathematica

February 15th, 2013 Comments off

มีคนถามมาว่าจะให้ Mathematica วาดกราฟแต่แทนที่จะให้เป็นเส้น แต่ให้เป็นตัวอักษรแทนจะทำอย่างไร

เราสามารถใช้ Option PlotMarkers ของ ListPlot มาช่วยได้ครับ  ดูตัวอย่างข้างล่างนี้นะครับ

หวังว่าคงพอช่วยได้บ้างนะครับ

sinvalentine

 

Categories: Mathematica Tags: , ,

การแสดงข้อความใน Pivot table ของ Excel

July 31st, 2011 Comments off

เจ้าหน้าที่ IT คนหนึ่งถามผมว่าจะแสดงข้อความใน pivot table ของ Excel ต้องทำอย่างไร

โดยเค้าเอาตัวอย่างมาให้ดูตามรูปด้านล่างนี้

ข้อมูลจริงจะมี label ประมาณหลักแสนและ header มีประมาณหลักพัน

และผลที่ต้องการอยากให้มันคล้ายๆกับด้านล่างนี้

แน่นอนครับว่าถามผมแบบนี้ผมก็บอกว่าไม่รู้ครับว่าทำยังไงใน Excel

แต่ถ้าทำใน Mathematica ล่ะง่ายนิดเดียวครับ 🙂

อันนี้เป็น Mathematica codes ที่ผมเขียนครับ

(* แสดงข้อมูลทั้งหมดของ id ที่ต้องการ *)

datid[id_, data_] := Module[{pos, headls}, headls = data[[1]];
pos = Union[Position[headls, “label”], Position[headls, “label”]] //
Flatten;
Select[data, #[[pos[[1]]]] == id &]];

 

(* แสดง list ของ header ของข้อมูล *)

headerls[dat_] := Module[{ls},
ls = Union@dat[[2 ;; Length@dat, 2]];
ls
];

 

(* เแสดงข้อมูลเป็นแถวๆของ id ที่ต้องการ  *)

makerow[id_, dat_] := Module[{hdls, iddat, tmp, output, i, j},
hdls = headerls[dat];
iddat = datid[id, dat];
tmp = Table[0, {Length@hdls}];
For[i = 1, i <= Length@iddat, i++,
For[j = 1, j <= Length@hdls, j++,
If[iddat[[i, 2]] == hdls[[j]],
tmp = ReplacePart[tmp, j -> iddat[[i, 3]]]]]];
{id}~Join~tmp
];

(* function หลักสำหรับอ่านไฟล์ข้อมูล และแสดงผล*)

mtr[filename_] := Module[{dat, outls, hdrls, idls},
dat = Import[filename, {“Data”, 1}];
hdrls = headerls[dat];
idls = idlist[dat];

outls = makerow[#, dat] & /@ idls;
{{“label”}~Join~hdrls}~Join~outls
];

 

(* เขียนผลลัพท์เป็น Excel *)

Export[“outfile.xlsx”,mtr[“data.xlsx”],”XLSX”]

 

 

Categories: Mathematica Tags: , ,

DateListPlot

May 22nd, 2011 No comments

มีคนถามมาว่ามีข้อมูลตามมด้านล่างนี้จะเอาไป plot ได้ยังไง

20110508000128    1
20110508000315    5
…………. .
20110508235824    x

ซึ่งใน column แรกข้อมูลคือวันที่และเวลาที่อยู่ติดกัน และ column ที่สองก็คือข้อมูลจากการวัดอะไรสักอย่าง

ผมก็บอกคนที่ถามไปว่าไม่ยาก:)  ใน Mathematica ก็น่าจะทำได้

ก่อนอื่นเลยก็ต้องทำการจัดรูปแบบของข้อมูลให้ตรงตามที่ Mathematica ต้องการก่อน โดยที่ผมคิดว่าจะเอาไปใช้กับ

function ชื่อ DateListPlot ครับ ดูรายละเอียดได้ที่ http://reference.wolfram.com/mathematica/ref/DateListPlot.html

อันนี้เป็น function ที่ผมเขียนขึ้นมาใช้ในการเปลี่ยนรูปแบบของข้อมูลครับ

convertdata[yourdatapoint_] := Module[
{output, ls, dat1, dat2, year, month, date, hour, minute, second},
dat1 = yourdatapoint[[1]];
dat2 = yourdatapoint[[2]];
ls = Characters@ToString@dat1;
year = ToExpression@StringJoin@ls[[1 ;; 4]];
month = ToExpression@StringJoin@ls[[5 ;; 6]];
date = ToExpression@StringJoin@ls[[7 ;; 8]];
hour = ToExpression@StringJoin@ls[[9 ;; 10]];
minute = ToExpression@StringJoin@ls[[11 ;; 12]];
second = ToExpression@StringJoin@ls[[13 ;; 14]];
output = {{year, month, date, hour, minute, second}, dat2};
output
];

หรือจะเขียนแบบนี้โดยใช้ StringTake ก็ได้เหมือนกันครับ

convertdata[yourdatapoint_] :=
Module[{output, ls, dat1, dat2, year, month, date, hour, minute,
second},
dat1 = yourdatapoint[[1]];
dat2 = yourdatapoint[[2]];
ls = ToString@dat1;
{year, month, date, hour, minute, second} =
ToExpression /@
StringTake[
ls, {{1, 4}, {5, 6}, {7, 8}, {9, 10}, {11, 12}, {13, 14}}];
output = {{year, month, date, hour, minute, second}, dat2};
output
];

เอาไปใช้กับข้อมูลก็สามารถทำได้แบบนี้ครับ

data = {{20110508000128, 1}, {20110508000315, 5}, {20110508000411,
10}, {20110508001130, 20}};

DateListPlot[convertdata2 /@dat a, Joined -> True]

 

%d bloggers like this:
Locations of visitors to this page