Build a Memory-Earnings Comparison Sheet Without Mixing Units
Build a memory-earnings comparison sheet by keeping the reported value, currency, scale, reporting period, business scope and accounting basis in separate columns. Normalize millions and billions only within the same currency. Leave undisclosed values missing, and block comparisons whose definitions do not match.
If two numbers look wildly different, first check the currency and the unit printed above the source table. The safe next step is to copy those labels alongside the original number—not to divide the larger number until it looks plausible. A unit conversion cannot repair a different fiscal period or turn company-wide sales into DRAM revenue.
This is an English-language, beginner-friendly data-cleaning exercise, checked on October 21, 2026. The Python example runs locally without packages, credentials, web scraping or paid APIs. All amounts in the execution example are fictional; they are not Samsung, Micron or SK hynix results, and the output is not an investment ranking.
- A source ledger: one traceable record for each reported figure.
- Comparison gates: checks that keep unlike measurements apart.
- Scale normalization: expressing an amount in another unit, without changing its currency.
- Missing-value status: the reason a cell has no usable number.
- A review-ready sheet: raw evidence beside derived values, with unresolved comparisons visibly held.
1. Start with a source ledger, not a ranking
A source ledger is a table that preserves where a value came from and what it actually measures. Give each figure its own row before arranging companies side by side. Keep the original wording and amount; put derived values in new columns.
| Column group | Record explicitly |
|---|---|
| Identity and evidence | Company, metric, source URL, page or table, publication date and collection date |
| Period | Period start and end, duration, fiscal label, and whether the number is a quarter or year-to-date |
| Amount | Reported decimal text, currency and scale; normalized amount and target scale separately |
| Meaning and status | Consolidated or segment scope; revenue or profit; accounting/adjustment basis; actual, preliminary estimate or forecast; missing-value reason |
For example, Samsung’s October 8 third-quarter guidance identifies consolidated estimates based on K-IFRS. That document is not a standalone DRAM revenue table. Micron’s September 30 prepared remarks identify fiscal Q4 2026 and state that financial discussion uses non-GAAP measures unless specified otherwise. Copy the basis attached to the particular figure; do not apply a single label blindly to every metric.
Those examples show why a column called simply “Q3 earnings” is inadequate. Record the actual dates from the relevant financial statements, and use the same named metric. A fiscal-quarter label alone does not establish matching calendar exposure. A 13-week quarter and a longer quarter also deserve an explicit duration note.
2. Use comparison gates before calculating
A comparison gate is a visible pass, warning or hold attached to a proposed comparison. “Hold” means the definition needs resolving; it does not mean the company is weak or the missing number is zero.
Original amount + source + period + definition
Billion → million, while preserving USD or KRW
Currency, dates, scope, metric, basis and status
Calculate only the comparison whose assumptions are documented
- Currency: USD million and KRW million remain different units of account. Keep separate columns unless an explicit foreign-exchange method is documented.
- Period: check actual start/end dates and duration. Do not compare a quarterly flow with a cumulative nine-month flow.
- Scope and metric: consolidated revenue, a memory segment’s revenue, operating profit and gross margin answer different questions. Percentage margins are not currency amounts.
- Basis and status: distinguish adjustments and preliminary estimates from reported actuals. Use reconciliations where available; “same scale” does not reconcile accounting definitions.
A different fiscal period need not make all discussion impossible. It makes a strict same-period comparison unavailable: show the dates and qualify the observation, rather than silently relabeling both rows as the same quarter.
3. Run a small, local scale-normalization example
Scale normalization changes the presentation unit of an amount. One billion equals 1,000 million. Thus 1.25 USD billion becomes 1,250 USD million; 1,800 KRW billion becomes 1,800,000 KRW million. Neither operation converts won to dollars.
The following complete script was executed on Windows with Python 3.14.3. Save it as normalize.py, then run python normalize.py in that folder. It prints CSV text to the terminal and does not create or overwrite files. Copy the output into a new scratch sheet using a CSV import operation with a comma delimiter; review imported column types instead of assuming the spreadsheet preserves them.
It is deliberately only the amount-normalization component. It does not extract filings, validate accounting definitions, check quarter dates, perform currency conversion or generate forecasts. Add the source-ledger columns from section 1 before using any output for real comparisons.
"""Synthetic amount-scale demo only: no FX conversion or investment ranking."""
import csv
import sys
from decimal import Decimal, InvalidOperation
def to_millions(value, scale):
factors = {"million": Decimal("1"), "billion": Decimal("1000")}
if scale not in factors:
raise ValueError("scale must be million or billion")
if value is None:
return None
if not isinstance(value, str) or not value.strip():
raise ValueError("use a decimal string or None")
try:
amount = Decimal(value)
except InvalidOperation as error:
raise ValueError("invalid decimal string") from error
if not amount.is_finite():
raise ValueError("amount must be finite")
return amount * factors[scale]
if __name__ == "__main__":
# Fictional revenue amounts, not real company disclosures.
samples = [
("Demo A", "USD", "1250", "million"),
("Demo B", "USD", "1.25", "billion"),
("Demo C", "KRW", "1800", "billion"),
("Demo D", "USD", None, "million"),
]
writer = csv.writer(sys.stdout, lineterminator="\n")
writer.writerow([
"company", "currency", "raw_value", "raw_scale",
"amount_million", "status",
])
for company, currency, value, scale in samples:
normalized = to_millions(value, scale)
writer.writerow([
company, currency, value, scale,
"" if normalized is None else format(normalized, "f"),
"not_disclosed" if normalized is None else "reported",
])
Why use decimal strings? Python’s Decimal documentation explains that constructing a decimal directly from a binary float can retain that float’s approximation. This example accepts strings, rejects floats, and rejects NaN and Infinity. It uses the default decimal context; it is not a general-purpose unlimited-precision financial engine.
company,currency,raw_value,raw_scale,amount_million,status
Demo A,USD,1250,million,1250,reported
Demo B,USD,1.25,billion,1250.00,reported
Demo C,KRW,1800,billion,1800000,reported
Demo D,USD,,million,,not_disclosed
Demo A and Demo B now have equal numeric amounts expressed in USD million. That is a unit-equivalence check, not proof their fictional revenue definitions or periods match. Demo C is still denominated in KRW. Demo D has no reported amount and no normalized number.
Execution checks: the local test suite checked six valid cases and nine rejection cases: both scales, zero, missing, a negative amount, empty inputs, comma-formatted text, non-finite values, numeric floats/booleans and unsupported units. All 15 cases passed. These are synthetic-input checks—not an audit of company disclosures or a test of Excel/Google Sheets import behavior.
4. Preserve missing values and their reasons
A missing value is an absent measurement, not a measured zero. Keep a separate status such as not_disclosed, not_collected or not_applicable. In this narrow example, None specifically means “not disclosed”; an empty string is rejected so it cannot accidentally acquire that meaning.
Python’s CSV writer documentation notes that None is written as an empty field and that this transformation is not reversible by itself. The status column preserves the missingness meaning in our output. In a spreadsheet, visibly distinguish missing cells from zero, and do not rely on a blank cell’s default arithmetic behavior.
If a total requires three components and one is undisclosed, label the result incomplete rather than presenting the sum of the other two as the total. Likewise, do not subtract an undisclosed HBM value from a broader revenue line to invent a “conventional DRAM” result. Derivation needs compatible, disclosed components and a documented definition.
5. Review the sheet before sharing it
| What changed? | What did not? |
|---|---|
| Billion → million | Currency, business scope and accounting basis remain unchanged. |
| A date label was copied | Actual period alignment still needs checking. |
| Missing became an empty CSV cell | The status must still distinguish absence from a measured zero. |
| Numbers now fit one table | Comparability and investment conclusions have not been established. |
Before calculating growth or margins, check the source again, confirm the denominator, and label the comparison period. Round only for display; preserve the source’s stated precision. If a figure is approximate or given as a qualitative range, retain that qualification rather than filling in an exact point estimate.
In short: preserve raw evidence, normalize scale in a separate column, then pass the comparison gates. Leave unresolved rows on hold. The next useful step is to populate one company’s comparable periods before expanding across companies—not to force a ranking from the first four numbers you find.
Appendix. Reading the memory-industry thread
For the business question behind the data, continue with what memory prices do—and do not—show about Samsung’s profit estimate. For a different unit trap in hardware specifications, see SOCAMM2 capacity, bandwidth and module counts. These are related English articles, not translations of this exercise.
If you later add foreign-exchange conversion, retain the reported currency and value, the exchange-rate source, rate date or averaging window, and the method used. A convenience conversion is not automatically a company’s reported constant-currency measure. This guide is for reading disclosures and cleaning data, not a buy/sell recommendation.
Primary sources and scope
- Samsung Electronics, third-quarter 2026 guidance — October 8, 2026; used for document scope, estimates and K-IFRS labeling, not synthetic amounts.
- Micron, fiscal Q4 2026 prepared remarks — September 30, 2026; fiscal-period and accounting-basis wording, not a cross-company ranking.
- Python, decimal — decimal construction, precision and non-finite values.
- Python, csv — CSV output and missing-value behavior. The unversioned documentation currently resolves to Python 3.15; the actual example was run with Python 3.14.3.
Sources checked October 21, 2026. Code and workflow are original. All demo amounts are hypothetical. No external package installation, live financial-data collection or paid API call was performed.
댓글
댓글 쓰기
안녕하세요 :)